smartcomply-web-sdk 1.0.78 → 1.0.80
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.
- package/dist/client/Smartcomply.d.ts +10 -0
- package/dist/client/Smartcomply.d.ts.map +1 -1
- package/dist/client/Smartcomply.js +12 -0
- package/dist/client/Smartcomply.js.map +1 -1
- package/dist/esm/client/Smartcomply.d.ts +10 -0
- package/dist/esm/client/Smartcomply.d.ts.map +1 -1
- package/dist/esm/client/Smartcomply.js +12 -0
- package/dist/esm/client/Smartcomply.js.map +1 -1
- package/dist/esm/flow/SmartComplyFlow.d.ts +2 -0
- package/dist/esm/flow/SmartComplyFlow.d.ts.map +1 -1
- package/dist/esm/flow/SmartComplyFlow.js +68 -1
- package/dist/esm/flow/SmartComplyFlow.js.map +1 -1
- package/dist/esm/types/onboarding.d.ts +1 -0
- package/dist/esm/types/onboarding.d.ts.map +1 -1
- package/dist/esm/utils/logger.d.ts +7 -0
- package/dist/esm/utils/logger.d.ts.map +1 -1
- package/dist/esm/utils/logger.js +9 -0
- package/dist/esm/utils/logger.js.map +1 -1
- package/dist/flow/SmartComplyFlow.d.ts +2 -0
- package/dist/flow/SmartComplyFlow.d.ts.map +1 -1
- package/dist/flow/SmartComplyFlow.js +68 -1
- package/dist/flow/SmartComplyFlow.js.map +1 -1
- package/dist/smartcomply.browser.js +66 -2
- package/dist/smartcomply.browser.js.map +2 -2
- package/dist/types/onboarding.d.ts +1 -0
- package/dist/types/onboarding.d.ts.map +1 -1
- package/dist/utils/logger.d.ts +7 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +9 -0
- package/dist/utils/logger.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts", "../src/client/Config.ts", "../src/errors/SDKError.ts", "../src/errors/AuthError.ts", "../src/errors/NetworkError.ts", "../src/client/HttpClient.ts", "../src/modules/onboarding/onboarding.ts", "../src/utils/device.ts", "../src/utils/constants.ts", "../src/camera/Permission.ts", "../src/camera/CameraManager.ts", "../src/camera/VideoRecorder.ts", "../node_modules/@mediapipe/tasks-vision/vision_bundle.mjs", "../src/camera/FaceDetector.ts", "../src/camera/ActionDetector.ts", "../src/modules/liveness/LivenessUI.ts", "../src/utils/logger.ts", "../src/modules/liveness/uploader.ts", "../src/modules/liveness/liveness.ts", "../src/client/Smartcomply.ts", "../src/flow/theme.ts", "../src/utils/documentRules.ts", "../src/utils/ImageQuality.ts", "../src/flow/icons.ts", "../src/flow/spinner.ts", "../src/flow/DocumentCapture.ts", "../src/flow/SmartComplyFlow.ts"],
|
|
4
|
-
"sourcesContent": ["import { SmartComply } from \"./client/Smartcomply\";\r\nimport { SmartComplyFlow } from \"./flow/SmartComplyFlow\";\r\n\r\nexport default SmartComply;\r\nexport { SmartComply, SmartComplyFlow };\r\n\r\n// Config\r\nexport type { SDKConfig, Environment } from \"./client/Config\";\r\n\r\n// Flow types\r\nexport type { FlowOptions, FlowResult } from \"./flow/SmartComplyFlow\";\r\n\r\n// Onboarding types\r\nexport type {\r\n OnboardingType,\r\n VerifyIdentityRequest,\r\n VerifyIdentityResponse,\r\n SessionResponse,\r\n SDKInitConfig,\r\n SDKChannel,\r\n} from \"./types/onboarding\";\r\n\r\n// Liveness types\r\nexport type {\r\n ChallengeAction,\r\n LivenessCreateRequest,\r\n LivenessCreateResponse,\r\n LivenessSubmitResponse,\r\n LivenessWebhookPayload,\r\n} from \"./types/liveness\";\r\n\r\n// Response envelope types\r\nexport type {\r\n ApiResponse,\r\n FieldError,\r\n ErrorData,\r\n} from \"./types/common\";\r\n\r\n// Error classes\r\nexport { SDKError } from \"./errors/SDKError\";\r\nexport { AuthError } from \"./errors/AuthError\";\r\nexport { NetworkError } from \"./errors/NetworkError\";\r\n\r\n// Utilities\r\nexport { SDKLogger } from \"./utils/logger\";\r\nexport { collectDeviceMetadata } from \"./utils/device\";\r\nexport type { DeviceMetadata } from \"./utils/device\";\r\nexport {\r\n isCameraSupported,\r\n queryCameraPermission,\r\n requestCameraAccess,\r\n releaseCameraStream,\r\n} from \"./camera/Permission\";\r\nexport type { PermissionStatus, CameraPermissionResult } from \"./camera/Permission\";\r\n\r\n// Liveness uploader (for integrators that need progress reporting)\r\nexport { LivenessUploader } from \"./modules/liveness/uploader\";\r\nexport type { UploadOptions } from \"./modules/liveness/uploader\";\r\n", "export type Environment = \"sandbox\" | \"production\" | \"local\";\r\n\r\nexport const BASE_URLS: Record<Environment, string> = {\r\n sandbox: \"https://adhere-staging-api.smartcomply.com\",\r\n production: \"https://adhere-api.smartcomply.com\",\r\n local: \"http://127.0.0.1:8000\",\r\n};\r\n\r\nexport interface SDKConfig {\r\n apiKey: string;\r\n clientId: string; // Required UUID — used for session creation\r\n environment?: Environment;\r\n timeout?: number;\r\n}\r\n", "export class SDKError extends Error {\r\n statusCode: number;\r\n errorCode?: string;\r\n errorData?: Record<string, unknown>;\r\n\r\n constructor(\r\n message: string,\r\n statusCode: number,\r\n errorCode?: string,\r\n errorData?: Record<string, unknown>\r\n ) {\r\n super(message);\r\n this.name = \"SDKError\";\r\n this.statusCode = statusCode;\r\n this.errorCode = errorCode;\r\n this.errorData = errorData;\r\n }\r\n}\r\n", "import { SDKError } from \"./SDKError\";\r\n\r\n/**\r\n * Thrown when authentication fails (invalid API key, expired session, etc).\r\n */\r\nexport class AuthError extends SDKError {\r\n constructor(message: string, errorCode?: string) {\r\n super(message, 401, errorCode);\r\n this.name = \"AuthError\";\r\n }\r\n}\r\n", "import { SDKError } from \"./SDKError\";\r\n\r\n/**\r\n * Thrown when a network request fails (timeout, no connection, DNS failure, etc).\r\n */\r\nexport class NetworkError extends SDKError {\r\n constructor(message: string) {\r\n super(message, 0, \"NETWORK_ERROR\");\r\n this.name = \"NetworkError\";\r\n }\r\n}\r\n", "import { SDKConfig, BASE_URLS } from \"./Config\";\r\nimport { SDKError } from \"../errors/SDKError\";\r\nimport { AuthError } from \"../errors/AuthError\";\r\nimport { NetworkError } from \"../errors/NetworkError\";\r\nimport { ApiResponse } from \"../types/common\";\r\n\r\n/**\r\n * HTTP client aligned with Adhere backend contract.\r\n *\r\n * Two auth modes:\r\n * - request() → Authorization: Bearer <apiKey> (session creation)\r\n * - sessionRequest() → x-access-token: <sessionToken> (all other endpoints)\r\n * - uploadWithSession() → multipart + x-access-token (file uploads)\r\n */\r\nexport class HttpClient {\r\n private baseUrl: string;\r\n private apiKey: string;\r\n private timeout: number;\r\n private sessionToken: string | null = null;\r\n\r\n constructor(config: SDKConfig) {\r\n this.baseUrl = BASE_URLS[config.environment || \"sandbox\"];\r\n this.apiKey = config.apiKey;\r\n this.timeout = config.timeout || 30000;\r\n }\r\n\r\n setSessionToken(token: string): void {\r\n this.sessionToken = token;\r\n }\r\n\r\n /**\r\n * API-key authenticated request (used for session creation only).\r\n * Header: Authorization: Bearer <apiKey>\r\n */\r\n async request<T>(\r\n method: string,\r\n path: string,\r\n body?: unknown\r\n ): Promise<T> {\r\n return this._fetch<T>(path, {\r\n method,\r\n headers: {\r\n \"Authorization\": `Bearer ${this.apiKey}`,\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: body ? JSON.stringify(body) : undefined,\r\n });\r\n }\r\n\r\n /**\r\n * Session-token authenticated request (used for all endpoints after session creation).\r\n * Header: x-access-token: <sessionToken>\r\n */\r\n async sessionRequest<T>(\r\n method: string,\r\n path: string,\r\n body?: unknown\r\n ): Promise<T> {\r\n this.requireToken();\r\n\r\n return this._fetch<T>(path, {\r\n method,\r\n headers: {\r\n \"x-access-token\": this.sessionToken!,\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: body ? JSON.stringify(body) : undefined,\r\n });\r\n }\r\n\r\n /**\r\n * Multipart file upload with session-token auth.\r\n * Header: x-access-token: <sessionToken>\r\n * NOTE: Do NOT set Content-Type — browser sets it with boundary automatically.\r\n */\r\n async uploadWithSession<T>(path: string, formData: FormData): Promise<T> {\r\n this.requireToken();\r\n\r\n return this._fetch<T>(path, {\r\n method: \"POST\",\r\n headers: {\r\n \"x-access-token\": this.sessionToken!,\r\n },\r\n body: formData,\r\n });\r\n }\r\n\r\n /**\r\n * GET for endpoints that work without auth (status polling still works after\r\n * session revoke) but return additional fields when a live session token is\r\n * presented — e.g. sdk-result/ only includes OCR/PII fields for the session\r\n * that owns the entry. Attaches the token opportunistically when we still\r\n * have one; the backend falls back to the public (non-PII) response if it's\r\n * missing, invalid, or already revoked.\r\n */\r\n async publicGet<T>(path: string): Promise<T> {\r\n const headers: Record<string, string> = { \"Content-Type\": \"application/json\" };\r\n if (this.sessionToken) {\r\n headers[\"x-access-token\"] = this.sessionToken;\r\n }\r\n return this._fetch<T>(path, {\r\n method: \"GET\",\r\n headers,\r\n });\r\n }\r\n\r\n /**\r\n * Legacy upload with API key (kept for backward compatibility if needed).\r\n */\r\n async upload<T>(path: string, formData: FormData): Promise<T> {\r\n return this._fetch<T>(path, {\r\n method: \"POST\",\r\n headers: {\r\n \"Authorization\": `Bearer ${this.apiKey}`,\r\n },\r\n body: formData,\r\n });\r\n }\r\n\r\n // ---- Internal ----\r\n\r\n private requireToken(): void {\r\n if (!this.sessionToken) {\r\n throw new AuthError(\r\n \"No session token set. Call sdk.createSession() first.\",\r\n \"NO_SESSION_TOKEN\"\r\n );\r\n }\r\n }\r\n\r\n private async _fetch<T>(path: string, init: RequestInit, retries = 2): Promise<T> {\r\n const controller = new AbortController();\r\n const timer = setTimeout(() => controller.abort(), this.timeout);\r\n\r\n try {\r\n const response = await fetch(`${this.baseUrl}${path}`, {\r\n ...init,\r\n signal: controller.signal,\r\n });\r\n\r\n const contentType = response.headers.get(\"content-type\") || \"\";\r\n if (!contentType.includes(\"application/json\")) {\r\n throw new SDKError(\r\n `Unexpected response from ${path} (${response.status})`,\r\n response.status\r\n );\r\n }\r\n\r\n // Parse the backend's standard response envelope\r\n const envelope: ApiResponse = await response.json();\r\n\r\n if (!response.ok || envelope.status === \"error\") {\r\n const statusCode = response.status;\r\n\r\n // Map specific HTTP statuses to error types\r\n if (statusCode === 401 || statusCode === 403) {\r\n throw new AuthError(\r\n envelope.message || \"Authentication failed\",\r\n envelope.code\r\n );\r\n }\r\n\r\n throw new SDKError(\r\n envelope.message || `Request to ${path} failed`,\r\n statusCode,\r\n envelope.code,\r\n envelope.data as Record<string, unknown>\r\n );\r\n }\r\n\r\n // Return the full envelope for verify responses (so SDK can check status)\r\n // For other endpoints, return unwrapped data\r\n if (path.includes(\"/verify/\")) {\r\n return envelope as T;\r\n }\r\n return envelope.data as T;\r\n\r\n } catch (err: any) {\r\n if (err instanceof SDKError || err instanceof AuthError) throw err;\r\n\r\n // C5: Retry on network errors (not auth/validation errors)\r\n if (retries > 0 && (err.name === \"AbortError\" || err.name === \"TypeError\")) {\r\n clearTimeout(timer);\r\n await new Promise((r) => setTimeout(r, 1000)); // wait 1s before retry\r\n return this._fetch<T>(path, init, retries - 1);\r\n }\r\n\r\n if (err.name === \"AbortError\") {\r\n throw new NetworkError(\"Request timeout. Please check your connection and try again.\");\r\n }\r\n if (err.name === \"TypeError\" && err.message?.includes(\"fetch\")) {\r\n throw new NetworkError(`Network error: ${err.message}`);\r\n }\r\n\r\n throw new SDKError(\r\n err.message || \"Unknown error\",\r\n 0,\r\n \"UNKNOWN_ERROR\"\r\n );\r\n } finally {\r\n clearTimeout(timer);\r\n }\r\n }\r\n}\r\n", "import { HttpClient } from \"../../client/HttpClient\";\r\nimport {\r\n VerifyIdentityRequest,\r\n VerifyIdentityResponse,\r\n} from \"../../types/onboarding\";\r\n\r\n/**\r\n * Onboarding module — identity verification.\r\n *\r\n * All methods use session-token auth (x-access-token header).\r\n */\r\nexport class OnboardingModule {\r\n constructor(private http: HttpClient) {}\r\n\r\n /**\r\n * Verify a user's identity.\r\n *\r\n * POST /v1/onboarding/verify/\r\n * Auth: x-access-token: <sessionToken>\r\n *\r\n * Sends identity_type_id (from ChannelItem.id) and dynamic fields\r\n * collected from the user based on the channel's field definitions.\r\n *\r\n * Example:\r\n * { identity_type_id: 3, fields: { \"bank_verification_number\": \"12345678901\" } }\r\n */\r\n async verify(params: VerifyIdentityRequest): Promise<VerifyIdentityResponse> {\r\n return this.http.sessionRequest<VerifyIdentityResponse>(\r\n \"POST\",\r\n \"/v1/onboarding/verify/\",\r\n {\r\n identity_type_id: params.identity_type_id,\r\n fields: params.fields,\r\n }\r\n );\r\n }\r\n}\r\n", "/**\r\n * Collects device / browser context metadata.\r\n * All values are derived from standard browser APIs — no external library needed.\r\n * Sent to the backend at liveness/create so they appear in the webhook\r\n * request_context block.\r\n */\r\nexport interface DeviceMetadata {\r\n device_type: \"mobile\" | \"desktop\" | \"tablet\";\r\n os_name: string;\r\n browser_timezone: string;\r\n fingerprint_id: string;\r\n}\r\n\r\nfunction detectOs(ua: string): string {\r\n if (/Windows NT/i.test(ua)) return \"Windows\";\r\n if (/Mac OS X|Macintosh/i.test(ua)) return \"macOS\";\r\n if (/Android/i.test(ua)) return \"Android\";\r\n if (/iPhone|iPad|iPod/i.test(ua)) return \"iOS\";\r\n if (/Linux/i.test(ua)) return \"Linux\";\r\n if (/CrOS/i.test(ua)) return \"ChromeOS\";\r\n return \"Unknown\";\r\n}\r\n\r\nfunction getOrCreateFingerprintId(): string {\r\n const KEY = \"_adhere_fid\";\r\n try {\r\n let fid = localStorage.getItem(KEY);\r\n if (!fid) {\r\n fid =\r\n typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\"\r\n ? crypto.randomUUID()\r\n : Math.random().toString(36).slice(2) + Date.now().toString(36);\r\n localStorage.setItem(KEY, fid);\r\n }\r\n return fid;\r\n } catch {\r\n // localStorage unavailable (e.g. private browsing with strict settings)\r\n return Math.random().toString(36).slice(2) + Date.now().toString(36);\r\n }\r\n}\r\n\r\nexport function collectDeviceMetadata(): DeviceMetadata {\r\n const ua = navigator.userAgent;\r\n\r\n const isTablet =\r\n /iPad/i.test(ua) ||\r\n (/Android/i.test(ua) && !/Mobile/i.test(ua));\r\n\r\n const isMobile =\r\n !isTablet &&\r\n /Mobi|Android|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(ua);\r\n\r\n const device_type: DeviceMetadata[\"device_type\"] = isTablet\r\n ? \"tablet\"\r\n : isMobile\r\n ? \"mobile\"\r\n : \"desktop\";\r\n\r\n return {\r\n device_type,\r\n os_name: detectOs(ua),\r\n browser_timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\r\n fingerprint_id: getOrCreateFingerprintId(),\r\n };\r\n}\r\n", "/**\r\n * SDK-wide constants — single source of truth for limits, defaults and\r\n * backend-defined magic values.\r\n */\r\n\r\n// ── Session ──────────────────────────────────────────────────────────────────\r\n\r\n/** Backend session TTL in milliseconds (30 minutes). */\r\nexport const SESSION_TTL_MS = 30 * 60 * 1000;\r\n\r\n/** Warn the user this many ms before session expires. */\r\nexport const SESSION_WARN_BEFORE_MS = 2 * 60 * 1000;\r\n\r\n// ── Network ──────────────────────────────────────────────────────────────────\r\n\r\n/** Default request timeout in milliseconds. */\r\nexport const DEFAULT_TIMEOUT_MS = 30_000;\r\n\r\n/** Number of automatic retries on transient network errors. */\r\nexport const MAX_RETRIES = 2;\r\n\r\n/** Delay between retries in milliseconds. */\r\nexport const RETRY_DELAY_MS = 1_000;\r\n\r\n// ── File uploads ─────────────────────────────────────────────────────────────\r\n\r\n/** Maximum document image size the backend accepts (5 MB). */\r\nexport const MAX_DOCUMENT_BYTES = 5 * 1024 * 1024;\r\n\r\n/** Maximum video size the backend accepts (50 MB). */\r\nexport const MAX_VIDEO_BYTES = 50 * 1024 * 1024;\r\n\r\n/** Maximum snapshot / autoshot size (2 MB). */\r\nexport const MAX_SNAPSHOT_BYTES = 2 * 1024 * 1024;\r\n\r\n/** Accepted MIME types for document images. */\r\nexport const ACCEPTED_IMAGE_TYPES = [\"image/jpeg\", \"image/png\", \"image/webp\"] as const;\r\n\r\n/** JPEG quality used when encoding captured frames (0–1). */\r\nexport const CAPTURE_JPEG_QUALITY = 0.92;\r\n\r\n// ── Liveness scan ────────────────────────────────────────────────────────────\r\n\r\n/** Backend-accepted challenge actions (UPPERCASE). Kept for backward compatibility. */\r\nexport const CHALLENGE_ACTIONS = [\"BLINK\", \"TURN_LEFT\", \"TURN_RIGHT\", \"TURN_HEAD\", \"OPEN_MOUTH\"] as const;\r\n\r\n/**\r\n * Default action tags sent to the backend. The widget no longer runs a\r\n * discrete multi-step challenge (turn left, then right, then open mouth as\r\n * separate gated steps) — it's a single passive scan window where the user\r\n * is asked to blink and turn their head naturally, both within the same\r\n * window. Both tags are sent so the admin dashboard's \"Challenge Actions\"\r\n * label reflects what the user was actually asked to do; the backend does\r\n * not yet score these individually (see LivenessSerializer.get_liveness_\r\n * challenges' docstring) — they're descriptive, not a discrete step gate.\r\n */\r\nexport const DEFAULT_CHALLENGE_ACTIONS = [\"BLINK\", \"TURN_HEAD\"] as const;\r\n\r\n/** Time limit for the natural-motion scan window, in seconds. */\r\nexport const LIVENESS_TIME_LIMIT_SECONDS = 12;\r\n\r\n// ── Camera ───────────────────────────────────────────────────────────────────\r\n\r\n/** Ideal resolution for the front-facing liveness camera. */\r\nexport const CAMERA_IDEAL_WIDTH = 640;\r\nexport const CAMERA_IDEAL_HEIGHT = 480;\r\n\r\n/**\r\n * Ideal resolution for rear-facing document capture camera. Matches the\r\n * document-photo compression target (see compressImage calls in\r\n * DocumentCapture.ts) — requesting less here would cap captured photos\r\n * below what compression is allowed to keep, which is what let camera\r\n * captures come out under-resolution for face-comparison cropping even\r\n * after the compression target itself was raised. `ideal` (not `exact`)\r\n * constraints degrade gracefully on hardware that can't hit this.\r\n */\r\nexport const DOC_CAMERA_IDEAL_WIDTH = 2000;\r\nexport const DOC_CAMERA_IDEAL_HEIGHT = 1500;\r\n\r\n/**\r\n * Video bitrate used by MediaRecorder for liveness recordings — raised from\r\n * an earlier 250k baseline for sharper frames for SmartComply's face\r\n * extractor (see VideoRecorder.ts, the only consumer of this constant).\r\n */\r\nexport const RECORDING_BITS_PER_SECOND = 800_000;\r\n\r\n// ── Face detection ───────────────────────────────────────────────────────────\r\n\r\n/** Max milliseconds to wait for an initial face detection before proceeding. */\r\nexport const FACE_DETECT_TIMEOUT_MS = 10_000;\r\n\r\n/** Polling interval for the face-present check (ms). */\r\nexport const FACE_DETECT_POLL_MS = 100;\r\n\r\n// ── UI / UX ──────────────────────────────────────────────────────────────────\r\n\r\n/** How long (ms) the success overlay is shown before the flow advances. */\r\nexport const RESULT_OVERLAY_DURATION_MS = 2_800;\r\n\r\n/** localStorage key used to persist the browser fingerprint ID. */\r\nexport const FINGERPRINT_STORAGE_KEY = \"_adhere_fid\";\r\n\r\n/** z-index for the SDK overlay — high enough to sit above any app content. */\r\nexport const OVERLAY_Z_INDEX = 99_999;\r\n", "/**\r\n * Camera permission utilities.\r\n *\r\n * Provides helpers to check, request and handle camera permissions in a\r\n * browser-consistent way. All functions are purely async and do NOT throw —\r\n * they return a typed result so callers can handle each case explicitly.\r\n */\r\n\r\nexport type PermissionStatus =\r\n | \"granted\" // camera already accessible\r\n | \"prompt\" // permission dialog will appear on request\r\n | \"denied\" // user previously denied; cannot request again\r\n | \"unsupported\" // Permissions API or getUserMedia not available\r\n | \"unknown\"; // couldn't determine status\r\n\r\nexport interface CameraPermissionResult {\r\n status: PermissionStatus;\r\n /** Human-readable reason (populated on denied / unsupported). */\r\n reason?: string;\r\n}\r\n\r\n/**\r\n * Query the current camera permission state without prompting the user.\r\n *\r\n * Uses the Permissions API when available, falls back to \"unknown\" on older\r\n * browsers (e.g. Safari < 16).\r\n */\r\nexport async function queryCameraPermission(): Promise<CameraPermissionResult> {\r\n if (typeof navigator === \"undefined\" || !navigator.mediaDevices) {\r\n return { status: \"unsupported\", reason: \"getUserMedia is not supported in this browser.\" };\r\n }\r\n\r\n if (!navigator.permissions?.query) {\r\n return { status: \"unknown\" };\r\n }\r\n\r\n try {\r\n const result = await navigator.permissions.query({ name: \"camera\" as PermissionName });\r\n return { status: result.state as PermissionStatus };\r\n } catch {\r\n return { status: \"unknown\" };\r\n }\r\n}\r\n\r\n/**\r\n * Request camera access and return the resulting MediaStream.\r\n *\r\n * Maps browser-specific errors onto actionable `CameraPermissionResult`\r\n * values so callers can show the right UI instead of catching raw DOMExceptions.\r\n *\r\n * @param constraints - Optional MediaStreamConstraints override.\r\n */\r\nexport async function requestCameraAccess(\r\n constraints?: MediaStreamConstraints\r\n): Promise<{ stream: MediaStream; permission: CameraPermissionResult }> {\r\n const defaults: MediaStreamConstraints = {\r\n video: { facingMode: \"user\", width: { ideal: 640 }, height: { ideal: 480 } },\r\n audio: false,\r\n };\r\n\r\n try {\r\n const stream = await navigator.mediaDevices.getUserMedia(constraints ?? defaults);\r\n return { stream, permission: { status: \"granted\" } };\r\n } catch (err: any) {\r\n const name: string = err?.name ?? \"\";\r\n\r\n if (name === \"NotAllowedError\" || name === \"PermissionDeniedError\") {\r\n return {\r\n stream: null as any,\r\n permission: {\r\n status: \"denied\",\r\n reason: \"Camera access was denied. Please allow camera permissions in your browser settings and try again.\",\r\n },\r\n };\r\n }\r\n\r\n if (name === \"NotFoundError\" || name === \"DevicesNotFoundError\") {\r\n return {\r\n stream: null as any,\r\n permission: {\r\n status: \"unsupported\",\r\n reason: \"No camera was found. Please connect a camera and try again.\",\r\n },\r\n };\r\n }\r\n\r\n if (name === \"NotReadableError\" || name === \"TrackStartError\") {\r\n return {\r\n stream: null as any,\r\n permission: {\r\n status: \"unknown\",\r\n reason: \"Camera is already in use by another application. Please close it and try again.\",\r\n },\r\n };\r\n }\r\n\r\n if (name === \"OverconstrainedError\") {\r\n return {\r\n stream: null as any,\r\n permission: {\r\n status: \"unknown\",\r\n reason: \"Camera constraints not supported. Trying with different settings...\",\r\n },\r\n };\r\n }\r\n\r\n return {\r\n stream: null as any,\r\n permission: {\r\n status: \"unknown\",\r\n reason: err?.message ?? \"Unable to access the camera.\",\r\n },\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Whether a failed camera request is worth retrying. \"denied\" (user\r\n * explicitly refused) and \"unsupported\" (no camera device at all) can never\r\n * be fixed by retrying — surfacing the error immediately instead of burning\r\n * several seconds of backoff first. Everything else (busy camera,\r\n * unsupported constraints, anything unrecognized) is treated as\r\n * potentially transient and retried — failing open avoids turning a\r\n * recoverable hiccup into a hard failure on browsers that throw\r\n * non-standard error names (notably Safari/iOS).\r\n */\r\nexport function isRetryableCameraError(status: PermissionStatus): boolean {\r\n return status !== \"denied\" && status !== \"unsupported\";\r\n}\r\n\r\n/**\r\n * Stop all tracks on a MediaStream and release the camera.\r\n * Safe to call with null/undefined.\r\n */\r\nexport function releaseCameraStream(stream: MediaStream | null | undefined): void {\r\n if (!stream) return;\r\n stream.getTracks().forEach((t) => t.stop());\r\n}\r\n\r\n/**\r\n * Returns true if the browser supports the camera APIs needed by the SDK.\r\n */\r\nexport function isCameraSupported(): boolean {\r\n return (\r\n typeof navigator !== \"undefined\" &&\r\n !!navigator.mediaDevices?.getUserMedia &&\r\n typeof MediaRecorder !== \"undefined\"\r\n );\r\n}\r\n", "import { requestCameraAccess, PermissionStatus } from \"./Permission\";\r\n\r\n/** Error thrown by CameraManager.open() — carries the classified permission\r\n * status alongside the friendly message, so callers can decide whether a\r\n * failure is worth retrying without re-deriving it from the raw DOMException. */\r\nexport class CameraAccessError extends Error {\r\n constructor(message: string, public readonly status: PermissionStatus) {\r\n super(message);\r\n this.name = \"CameraAccessError\";\r\n }\r\n}\r\n\r\nexport class CameraManager {\r\n private stream: MediaStream | null = null;\r\n private onInterrupted: (() => void) | null = null;\r\n private trackEndedHandlers: Array<() => void> = [];\r\n\r\n /**\r\n * Opens the camera via requestCameraAccess(), which maps browser errors\r\n * (denied, no device, in-use-by-another-app) to a clean message thrown here.\r\n */\r\n async open(constraints?: MediaStreamConstraints): Promise<MediaStream> {\r\n const defaults: MediaStreamConstraints = {\r\n video: {\r\n facingMode: \"user\",\r\n width: { ideal: 1280 },\r\n height: { ideal: 720 },\r\n },\r\n audio: false,\r\n };\r\n\r\n const { stream, permission } = await requestCameraAccess(constraints || defaults);\r\n if (!stream) {\r\n throw new CameraAccessError(permission.reason || \"Unable to access the camera.\", permission.status);\r\n }\r\n\r\n this.stream = stream;\r\n this._watchTracks();\r\n\r\n return this.stream;\r\n }\r\n\r\n getStream(): MediaStream | null {\r\n return this.stream;\r\n }\r\n\r\n /**\r\n * Adopt an externally-obtained stream (e.g. a pre-warmed getUserMedia\r\n * stream) so stop() also releases it. Without this, a stream assigned\r\n * directly by a caller instead of via open() is never tracked here and\r\n * stop() becomes a no-op for it, leaking the camera.\r\n */\r\n setStream(stream: MediaStream): void {\r\n this.stream = stream;\r\n this._watchTracks();\r\n }\r\n\r\n /**\r\n * Register a callback fired the moment any track in the current stream\r\n * ends unexpectedly (OS revokes camera permission mid-session, another\r\n * app steals the camera, device sleeps and the driver drops the feed).\r\n * Without this, a dead stream is silently invisible — the video element\r\n * just freezes on its last frame and face detection quietly fails\r\n * forever with no indication anything went wrong.\r\n */\r\n onStreamInterrupted(callback: () => void): void {\r\n this.onInterrupted = callback;\r\n }\r\n\r\n private _watchTracks(): void {\r\n this.trackEndedHandlers = [];\r\n if (!this.stream) return;\r\n this.stream.getTracks().forEach((track) => {\r\n const handler = () => {\r\n // A track we intentionally stopped (via stop()) also fires \"ended\" —\r\n // only treat this as an interruption if we still think we have a\r\n // live stream (stop() nulls this.stream before that would happen).\r\n if (this.stream) {\r\n this.onInterrupted?.();\r\n }\r\n };\r\n track.addEventListener(\"ended\", handler);\r\n this.trackEndedHandlers.push(() => track.removeEventListener(\"ended\", handler));\r\n });\r\n }\r\n\r\n stop(): void {\r\n if (this.stream) {\r\n this.stream.getTracks().forEach((track) => track.stop());\r\n this.stream = null;\r\n }\r\n this.trackEndedHandlers.forEach((remove) => remove());\r\n this.trackEndedHandlers = [];\r\n }\r\n}\r\n", "import { RECORDING_BITS_PER_SECOND } from \"../utils/constants\";\r\n\r\nexport class VideoRecorder {\r\n private recorder: MediaRecorder | null = null;\r\n private chunks: Blob[] = [];\r\n private startedAt: number = 0;\r\n private onRecordingError: (() => void) | null = null;\r\n\r\n /** Fires immediately on a mid-recording error, unlike stop()'s onerror which only fires when stop() is later called. */\r\n onError(callback: () => void): void {\r\n this.onRecordingError = callback;\r\n }\r\n\r\n start(stream: MediaStream): void {\r\n this.chunks = [];\r\n\r\n const mimeType = MediaRecorder.isTypeSupported(\"video/webm;codecs=vp9\")\r\n ? \"video/webm;codecs=vp9\"\r\n : \"video/webm\";\r\n\r\n this.recorder = new MediaRecorder(stream, {\r\n mimeType,\r\n videoBitsPerSecond: RECORDING_BITS_PER_SECOND,\r\n });\r\n\r\n this.recorder.ondataavailable = (e) => {\r\n if (e.data.size > 0) {\r\n this.chunks.push(e.data);\r\n }\r\n };\r\n\r\n this.recorder.addEventListener(\"error\", () => {\r\n this.onRecordingError?.();\r\n });\r\n\r\n this.startedAt = Date.now();\r\n this.recorder.start();\r\n }\r\n\r\n stop(): Promise<{ blob: Blob; durationSeconds: number }> {\r\n return new Promise((resolve, reject) => {\r\n if (!this.recorder || this.recorder.state === \"inactive\") {\r\n reject(new Error(\"Recorder is not active\"));\r\n return;\r\n }\r\n\r\n const stoppedAt = Date.now();\r\n\r\n this.recorder.onstop = () => {\r\n const blob = new Blob(this.chunks, { type: \"video/webm\" });\r\n const durationSeconds = parseFloat(\r\n ((stoppedAt - this.startedAt) / 1000).toFixed(2)\r\n );\r\n this.chunks = [];\r\n resolve({ blob, durationSeconds });\r\n };\r\n\r\n this.recorder.onerror = () => {\r\n reject(new Error(\"Recording failed\"));\r\n };\r\n\r\n this.recorder.stop();\r\n });\r\n }\r\n\r\n isRecording(): boolean {\r\n return this.recorder?.state === \"recording\";\r\n }\r\n}\r\n", "var t=\"undefined\"!=typeof self?self:{};function e(e,n){t:{for(var r=[\"CLOSURE_FLAGS\"],i=t,s=0;s<r.length;s++)if(null==(i=i[r[s]])){r=null;break t}r=i}return null!=(e=r&&r[e])?e:n}function n(){throw Error(\"Invalid UTF8\")}function r(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}let i,s;const o=\"undefined\"!=typeof TextDecoder;let a;const c=\"undefined\"!=typeof TextEncoder;function h(t){if(c)t=(a||=new TextEncoder).encode(t);else{let n=0;const r=new Uint8Array(3*t.length);for(let i=0;i<t.length;i++){var e=t.charCodeAt(i);if(e<128)r[n++]=e;else{if(e<2048)r[n++]=e>>6|192;else{if(e>=55296&&e<=57343){if(e<=56319&&i<t.length){const s=t.charCodeAt(++i);if(s>=56320&&s<=57343){e=1024*(e-55296)+s-56320+65536,r[n++]=e>>18|240,r[n++]=e>>12&63|128,r[n++]=e>>6&63|128,r[n++]=63&e|128;continue}i--}e=65533}r[n++]=e>>12|224,r[n++]=e>>6&63|128}r[n++]=63&e|128}}t=n===r.length?r:r.subarray(0,n)}return t}function u(e){t.setTimeout((()=>{throw e}),0)}var l,f=e(610401301,!1),d=e(748402147,!0),p=e(824648567,!0),g=e(824656860,e(1,!0));function m(){var e=t.navigator;return e&&(e=e.userAgent)?e:\"\"}const y=t.navigator;function _(t){return _[\" \"](t),t}l=y&&y.userAgentData||null,_[\" \"]=function(){};const v={};let E=null;function w(t){const e=t.length;let n=3*e/4;n%3?n=Math.floor(n):-1!=\"=.\".indexOf(t[e-1])&&(n=-1!=\"=.\".indexOf(t[e-2])?n-2:n-1);const r=new Uint8Array(n);let i=0;return function(t,e){function n(e){for(;r<t.length;){const e=t.charAt(r++),n=E[e];if(null!=n)return n;if(!/^[\\s\\xa0]*$/.test(e))throw Error(\"Unknown base64 encoding at char: \"+e)}return e}T();let r=0;for(;;){const t=n(-1),r=n(0),i=n(64),s=n(64);if(64===s&&-1===t)break;e(t<<2|r>>4),64!=i&&(e(r<<4&240|i>>2),64!=s&&e(i<<6&192|s))}}(t,(function(t){r[i++]=t})),i!==n?r.subarray(0,i):r}function T(){if(!E){E={};var t=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\".split(\"\"),e=[\"+/=\",\"+/\",\"-_=\",\"-_.\",\"-_\"];for(let n=0;n<5;n++){const r=t.concat(e[n].split(\"\"));v[n]=r;for(let t=0;t<r.length;t++){const e=r[t];void 0===E[e]&&(E[e]=t)}}}}var A=\"undefined\"!=typeof Uint8Array,b=!(!(f&&l&&l.brands.length>0)&&(-1!=m().indexOf(\"Trident\")||-1!=m().indexOf(\"MSIE\")))&&\"function\"==typeof btoa;const k=/[-_.]/g,S={\"-\":\"+\",_:\"/\",\".\":\"=\"};function x(t){return S[t]||\"\"}function L(t){if(!b)return w(t);t=k.test(t)?t.replace(k,x):t,t=atob(t);const e=new Uint8Array(t.length);for(let n=0;n<t.length;n++)e[n]=t.charCodeAt(n);return e}function R(t){return A&&null!=t&&t instanceof Uint8Array}var I={};function F(){return C||=new P(null,I)}function M(t){N(I);var e=t.g;return null==(e=null==e||R(e)?e:\"string\"==typeof e?L(e):null)?e:t.g=e}var P=class{h(){return new Uint8Array(M(this)||0)}constructor(t,e){if(N(e),this.g=t,null!=t&&0===t.length)throw Error(\"ByteString should be constructed with non-empty values\")}};let C,O;function N(t){if(t!==I)throw Error(\"illegal external caller\")}function U(t,e){t.__closure__error__context__984382||(t.__closure__error__context__984382={}),t.__closure__error__context__984382.severity=e}function D(t){return U(t=Error(t),\"warning\"),t}function B(t,e){if(null!=t){var n=O??={},r=n[t]||0;r>=e||(n[t]=r+1,U(t=Error(),\"incident\"),u(t))}}function G(){return\"function\"==typeof BigInt}var j=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol();function V(t,e,n=!1){return\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol()?n&&Symbol.for&&t?Symbol.for(t):null!=t?Symbol(t):Symbol():e}var X=V(\"jas\",void 0,!0),H=V(void 0,\"0di\"),W=V(void 0,\"1oa\"),z=V(void 0,Symbol()),K=V(void 0,\"0ub\"),Y=V(void 0,\"0ubs\"),q=V(void 0,\"0ubsb\"),$=V(void 0,\"0actk\"),J=V(\"m_m\",\"Pa\",!0),Z=V();const Q={Ga:{value:0,configurable:!0,writable:!0,enumerable:!1}},tt=Object.defineProperties,et=j?X:\"Ga\";var nt;const rt=[];function it(t,e){j||et in t||tt(t,Q),t[et]|=e}function st(t,e){j||et in t||tt(t,Q),t[et]=e}function ot(t){return it(t,34),t}function at(t){return it(t,8192),t}st(rt,7),nt=Object.freeze(rt);var ct={};function ht(t,e){return void 0===e?t.h!==ut&&!!(2&(0|t.v[et])):!!(2&e)&&t.h!==ut}const ut={};function lt(t,e){if(null!=t)if(\"string\"==typeof t)t=t?new P(t,I):F();else if(t.constructor!==P)if(R(t))t=t.length?new P(new Uint8Array(t),I):F();else{if(!e)throw Error();t=void 0}return t}class ft{constructor(t,e,n){this.g=t,this.h=e,this.l=n}next(){const t=this.g.next();return t.done||(t.value=this.h.call(this.l,t.value)),t}[Symbol.iterator](){return this}}var dt=Object.freeze({});function pt(t,e,n){const r=128&e?0:-1,i=t.length;var s;(s=!!i)&&(s=null!=(s=t[i-1])&&\"object\"==typeof s&&s.constructor===Object);const o=i+(s?-1:0);for(e=128&e?1:0;e<o;e++)n(e-r,t[e]);if(s){t=t[i-1];for(const e in t)!isNaN(e)&&n(+e,t[e])}}var gt={};function mt(t){return 128&t?gt:void 0}function yt(t){return t.Na=!0,t}var _t=yt((t=>\"number\"==typeof t)),vt=yt((t=>\"string\"==typeof t)),Et=yt((t=>\"boolean\"==typeof t)),wt=\"function\"==typeof t.BigInt&&\"bigint\"==typeof t.BigInt(0);function Tt(t){var e=t;if(vt(e)){if(!/^\\s*(?:-?[1-9]\\d*|0)?\\s*$/.test(e))throw Error(String(e))}else if(_t(e)&&!Number.isSafeInteger(e))throw Error(String(e));return wt?BigInt(t):t=Et(t)?t?\"1\":\"0\":vt(t)?t.trim()||\"0\":String(t)}var At=yt((t=>wt?t>=kt&&t<=xt:\"-\"===t[0]?Lt(t,bt):Lt(t,St)));const bt=Number.MIN_SAFE_INTEGER.toString(),kt=wt?BigInt(Number.MIN_SAFE_INTEGER):void 0,St=Number.MAX_SAFE_INTEGER.toString(),xt=wt?BigInt(Number.MAX_SAFE_INTEGER):void 0;function Lt(t,e){if(t.length>e.length)return!1;if(t.length<e.length||t===e)return!0;for(let n=0;n<t.length;n++){const r=t[n],i=e[n];if(r>i)return!1;if(r<i)return!0}}const Rt=\"function\"==typeof Uint8Array.prototype.slice;let It,Ft=0,Mt=0;function Pt(t){const e=t>>>0;Ft=e,Mt=(t-e)/4294967296>>>0}function Ct(t){if(t<0){Pt(-t);const[e,n]=Ht(Ft,Mt);Ft=e>>>0,Mt=n>>>0}else Pt(t)}function Ot(t){const e=It||=new DataView(new ArrayBuffer(8));e.setFloat32(0,+t,!0),Mt=0,Ft=e.getUint32(0,!0)}function Nt(t,e){const n=4294967296*e+(t>>>0);return Number.isSafeInteger(n)?n:Gt(t,e)}function Ut(t,e){return Tt(G()?BigInt.asUintN(64,(BigInt(e>>>0)<<BigInt(32))+BigInt(t>>>0)):Gt(t,e))}function Dt(t,e){const n=2147483648&e;return n&&(e=~e>>>0,0==(t=1+~t>>>0)&&(e=e+1>>>0)),\"number\"==typeof(t=Nt(t,e))?n?-t:t:n?\"-\"+t:t}function Bt(t,e){return G()?Tt(BigInt.asIntN(64,(BigInt.asUintN(32,BigInt(e))<<BigInt(32))+BigInt.asUintN(32,BigInt(t)))):Tt(Vt(t,e))}function Gt(t,e){if(t>>>=0,(e>>>=0)<=2097151)var n=\"\"+(4294967296*e+t);else G()?n=\"\"+(BigInt(e)<<BigInt(32)|BigInt(t)):(t=(16777215&t)+6777216*(n=16777215&(t>>>24|e<<8))+6710656*(e=e>>16&65535),n+=8147497*e,e*=2,t>=1e7&&(n+=t/1e7>>>0,t%=1e7),n>=1e7&&(e+=n/1e7>>>0,n%=1e7),n=e+jt(n)+jt(t));return n}function jt(t){return t=String(t),\"0000000\".slice(t.length)+t}function Vt(t,e){if(2147483648&e)if(G())t=\"\"+(BigInt(0|e)<<BigInt(32)|BigInt(t>>>0));else{const[n,r]=Ht(t,e);t=\"-\"+Gt(n,r)}else t=Gt(t,e);return t}function Xt(t){if(t.length<16)Ct(Number(t));else if(G())t=BigInt(t),Ft=Number(t&BigInt(4294967295))>>>0,Mt=Number(t>>BigInt(32)&BigInt(4294967295));else{const e=+(\"-\"===t[0]);Mt=Ft=0;const n=t.length;for(let r=e,i=(n-e)%6+e;i<=n;r=i,i+=6){const e=Number(t.slice(r,i));Mt*=1e6,Ft=1e6*Ft+e,Ft>=4294967296&&(Mt+=Math.trunc(Ft/4294967296),Mt>>>=0,Ft>>>=0)}if(e){const[t,e]=Ht(Ft,Mt);Ft=t,Mt=e}}}function Ht(t,e){return e=~e,t?t=1+~t:e+=1,[t,e]}function Wt(t){return Array.prototype.slice.call(t)}const zt=\"function\"==typeof BigInt?BigInt.asIntN:void 0,Kt=\"function\"==typeof BigInt?BigInt.asUintN:void 0,Yt=Number.isSafeInteger,qt=Number.isFinite,$t=Math.trunc,Jt=Tt(0);function Zt(t){if(null!=t&&\"number\"!=typeof t)throw Error(`Value of float/double field must be a number, found ${typeof t}: ${t}`);return t}function Qt(t){return null==t||\"number\"==typeof t?t:\"NaN\"===t||\"Infinity\"===t||\"-Infinity\"===t?Number(t):void 0}function te(t){if(null!=t&&\"boolean\"!=typeof t){var e=typeof t;throw Error(`Expected boolean but got ${\"object\"!=e?e:t?Array.isArray(t)?\"array\":e:\"null\"}: ${t}`)}return t}function ee(t){return null==t||\"boolean\"==typeof t?t:\"number\"==typeof t?!!t:void 0}const ne=/^-?([1-9][0-9]*|0)(\\.[0-9]+)?$/;function re(t){switch(typeof t){case\"bigint\":return!0;case\"number\":return qt(t);case\"string\":return ne.test(t);default:return!1}}function ie(t){if(null==t)return t;if(\"string\"==typeof t&&t)t=+t;else if(\"number\"!=typeof t)return;return qt(t)?0|t:void 0}function se(t){if(null==t)return t;if(\"string\"==typeof t&&t)t=+t;else if(\"number\"!=typeof t)return;return qt(t)?t>>>0:void 0}function oe(t){const e=t.length;return(\"-\"===t[0]?e<20||20===e&&t<=\"-9223372036854775808\":e<19||19===e&&t<=\"9223372036854775807\")?t:(Xt(t),Vt(Ft,Mt))}function ae(t){return t=$t(t),Yt(t)||(Ct(t),t=Dt(Ft,Mt)),t}function ce(t){var e=$t(Number(t));return Yt(e)?String(e):(-1!==(e=t.indexOf(\".\"))&&(t=t.substring(0,e)),oe(t))}function he(t){var e=$t(Number(t));return Yt(e)?Tt(e):(-1!==(e=t.indexOf(\".\"))&&(t=t.substring(0,e)),G()?Tt(zt(64,BigInt(t))):Tt(oe(t)))}function ue(t){return Yt(t)?t=Tt(ae(t)):(t=$t(t),Yt(t)?t=String(t):(Ct(t),t=Vt(Ft,Mt)),t=Tt(t)),t}function le(t){return null==t?t:\"bigint\"==typeof t?(At(t)?t=Number(t):(t=zt(64,t),t=At(t)?Number(t):String(t)),t):re(t)?\"number\"==typeof t?ae(t):ce(t):void 0}function fe(t){const e=typeof t;return null==t?t:\"bigint\"===e?Tt(zt(64,t)):re(t)?\"string\"===e?he(t):ue(t):void 0}function de(t){if(\"string\"!=typeof t)throw Error();return t}function pe(t){if(null!=t&&\"string\"!=typeof t)throw Error();return t}function ge(t){return null==t||\"string\"==typeof t?t:void 0}function me(t,e,n,r){return null!=t&&t[J]===ct?t:Array.isArray(t)?((r=(n=0|t[et])|32&r|2&r)!==n&&st(t,r),new e(t)):(n?2&r?((t=e[H])||(ot((t=new e).v),t=e[H]=t),e=t):e=new e:e=void 0,e)}function ye(t,e,n){if(e)t:{if(!re(e=t))throw D(\"int64\");switch(typeof e){case\"string\":e=he(e);break t;case\"bigint\":e=Tt(zt(64,e));break t;default:e=ue(e)}}else e=fe(t);return null==(t=e)?n?Jt:void 0:t}const _e={};let ve=function(){try{return _(new class extends Map{constructor(){super()}}),!1}catch{return!0}}();class Ee{constructor(){this.g=new Map}get(t){return this.g.get(t)}set(t,e){return this.g.set(t,e),this.size=this.g.size,this}delete(t){return t=this.g.delete(t),this.size=this.g.size,t}clear(){this.g.clear(),this.size=this.g.size}has(t){return this.g.has(t)}entries(){return this.g.entries()}keys(){return this.g.keys()}values(){return this.g.values()}forEach(t,e){return this.g.forEach(t,e)}[Symbol.iterator](){return this.entries()}}const we=ve?(Object.setPrototypeOf(Ee.prototype,Map.prototype),Object.defineProperties(Ee.prototype,{size:{value:0,configurable:!0,enumerable:!0,writable:!0}}),Ee):class extends Map{constructor(){super()}};function Te(t){return t}function Ae(t){if(2&t.J)throw Error(\"Cannot mutate an immutable Map\")}var be=class extends we{constructor(t,e,n=Te,r=Te){super(),this.J=0|t[et],this.K=e,this.S=n,this.fa=this.K?ke:r;for(let i=0;i<t.length;i++){const s=t[i],o=n(s[0],!1,!0);let a=s[1];e?void 0===a&&(a=null):a=r(s[1],!1,!0,void 0,void 0,this.J),super.set(o,a)}}V(t){return at(Array.from(super.entries(),t))}clear(){Ae(this),super.clear()}delete(t){return Ae(this),super.delete(this.S(t,!0,!1))}entries(){if(this.K){var t=super.keys();t=new ft(t,Se,this)}else t=super.entries();return t}values(){if(this.K){var t=super.keys();t=new ft(t,be.prototype.get,this)}else t=super.values();return t}forEach(t,e){this.K?super.forEach(((n,r,i)=>{t.call(e,i.get(r),r,i)})):super.forEach(t,e)}set(t,e){return Ae(this),null==(t=this.S(t,!0,!1))?this:null==e?(super.delete(t),this):super.set(t,this.fa(e,!0,!0,this.K,!1,this.J))}Ma(t){const e=this.S(t[0],!1,!0);t=t[1],t=this.K?void 0===t?null:t:this.fa(t,!1,!0,void 0,!1,this.J),super.set(e,t)}has(t){return super.has(this.S(t,!1,!1))}get(t){t=this.S(t,!1,!1);const e=super.get(t);if(void 0!==e){var n=this.K;return n?((n=this.fa(e,!1,!0,n,this.ra,this.J))!==e&&super.set(t,n),n):e}}[Symbol.iterator](){return this.entries()}};function ke(t,e,n,r,i,s){return t=me(t,r,n,s),i&&(t=Ke(t)),t}function Se(t){return[t,this.get(t)]}let xe;function Le(){return xe||=new be(ot([]),void 0,void 0,void 0,_e)}function Re(t){return z?t[z]:void 0}function Ie(t,e){for(const n in t)!isNaN(n)&&e(t,+n,t[n])}be.prototype.toJSON=void 0;var Fe=class{};const Me={Ka:!0};function Pe(t,e){e<100||B(Y,1)}function Ce(t,e,n,r){const i=void 0!==r;r=!!r;var s,o=z;!i&&j&&o&&(s=t[o])&&Ie(s,Pe),o=[];var a=t.length;let c;s=4294967295;let h=!1;const u=!!(64&e),l=u?128&e?0:-1:void 0;1&e||(c=a&&t[a-1],null!=c&&\"object\"==typeof c&&c.constructor===Object?s=--a:c=void 0,!u||128&e||i||(h=!0,s=s-l+l)),e=void 0;for(var f=0;f<a;f++){let i=t[f];if(null!=i&&null!=(i=n(i,r)))if(u&&f>=s){const t=f-l;(e??={})[t]=i}else o[f]=i}if(c)for(let t in c){if(null==(a=c[t])||null==(a=n(a,r)))continue;let i;f=+t,u&&!Number.isNaN(f)&&(i=f+l)<s?o[i]=a:(e??={})[t]=a}return e&&(h?o.push(e):o[s]=e),i&&z&&(t=Re(t))&&t instanceof Fe&&(o[z]=function(t){const e=new Fe;return Ie(t,((t,n,r)=>{e[n]=Wt(r)})),e.da=t.da,e}(t)),o}function Oe(t){return t[0]=Ne(t[0]),t[1]=Ne(t[1]),t}function Ne(t){switch(typeof t){case\"number\":return Number.isFinite(t)?t:\"\"+t;case\"bigint\":return At(t)?Number(t):\"\"+t;case\"boolean\":return t?1:0;case\"object\":if(Array.isArray(t)){var e=0|t[et];return 0===t.length&&1&e?void 0:Ce(t,e,Ne)}if(null!=t&&t[J]===ct)return Ue(t);if(t instanceof P){if(null==(e=t.g))t=\"\";else if(\"string\"==typeof e)t=e;else{if(b){for(var n=\"\",r=0,i=e.length-10240;r<i;)n+=String.fromCharCode.apply(null,e.subarray(r,r+=10240));n+=String.fromCharCode.apply(null,r?e.subarray(r):e),e=btoa(n)}else{void 0===n&&(n=0),T(),n=v[n],r=Array(Math.floor(e.length/3)),i=n[64]||\"\";let t=0,h=0;for(;t<e.length-2;t+=3){var s=e[t],o=e[t+1],a=e[t+2],c=n[s>>2];s=n[(3&s)<<4|o>>4],o=n[(15&o)<<2|a>>6],a=n[63&a],r[h++]=c+s+o+a}switch(c=0,a=i,e.length-t){case 2:a=n[(15&(c=e[t+1]))<<2]||i;case 1:e=e[t],r[h]=n[e>>2]+n[(3&e)<<4|c>>4]+a+i}e=r.join(\"\")}t=t.g=e}return t}return t instanceof be?t=0!==t.size?t.V(Oe):void 0:void 0}return t}function Ue(t){return Ce(t=t.v,0|t[et],Ne)}let De,Be;function Ge(t,e){return je(t,e[0],e[1])}function je(t,e,n,r=0){if(null==t){var i=32;n?(t=[n],i|=128):t=[],e&&(i=-16760833&i|(1023&e)<<14)}else{if(!Array.isArray(t))throw Error(\"narr\");if(i=0|t[et],d&&1&i)throw Error(\"rfarr\");if(2048&i&&!(2&i)&&function(){if(d)throw Error(\"carr\");B($,5)}(),256&i)throw Error(\"farr\");if(64&i)return(i|r)!==i&&st(t,i|r),t;if(n&&(i|=128,n!==t[0]))throw Error(\"mid\");t:{i|=64;var s=(n=t).length;if(s){var o=s-1;const t=n[o];if(null!=t&&\"object\"==typeof t&&t.constructor===Object){if((o-=e=128&i?0:-1)>=1024)throw Error(\"pvtlmt\");for(var a in t)(s=+a)<o&&(n[s+e]=t[a],delete t[a]);i=-16760833&i|(1023&o)<<14;break t}}if(e){if((a=Math.max(e,s-(128&i?0:-1)))>1024)throw Error(\"spvt\");i=-16760833&i|(1023&a)<<14}}}return st(t,64|i|r),t}function Ve(t,e){if(\"object\"!=typeof t)return t;if(Array.isArray(t)){var n=0|t[et];return 0===t.length&&1&n?void 0:Xe(t,n,e)}if(null!=t&&t[J]===ct)return We(t);if(t instanceof be){if(2&(e=t.J))return t;if(!t.size)return;if(n=ot(t.V()),t.K)for(t=0;t<n.length;t++){const r=n[t];let i=r[1];i=null==i||\"object\"!=typeof i?void 0:null!=i&&i[J]===ct?We(i):Array.isArray(i)?Xe(i,0|i[et],!!(32&e)):void 0,r[1]=i}return n}return t instanceof P?t:void 0}function Xe(t,e,n){return 2&e||(!n||4096&e||16&e?t=ze(t,e,!1,n&&!(16&e)):(it(t,34),4&e&&Object.freeze(t))),t}function He(t,e,n){return t=new t.constructor(e),n&&(t.h=ut),t.m=ut,t}function We(t){const e=t.v,n=0|e[et];return ht(t,n)?t:Je(t,e,n)?He(t,e):ze(e,n)}function ze(t,e,n,r){return r??=!!(34&e),t=Ce(t,e,Ve,r),r=32,n&&(r|=2),st(t,e=16769217&e|r),t}function Ke(t){const e=t.v,n=0|e[et];return ht(t,n)?Je(t,e,n)?He(t,e,!0):new t.constructor(ze(e,n,!1)):t}function Ye(t){if(t.h!==ut)return!1;var e=t.v;return it(e=ze(e,0|e[et]),2048),t.v=e,t.h=void 0,t.m=void 0,!0}function qe(t){if(!Ye(t)&&ht(t,0|t.v[et]))throw Error()}function $e(t,e){void 0===e&&(e=0|t[et]),32&e&&!(4096&e)&&st(t,4096|e)}function Je(t,e,n){return!!(2&n)||!(!(32&n)||4096&n)&&(st(e,2|n),t.h=ut,!0)}const Ze=Tt(0),Qe={};function tn(t,e,n,r,i){if(null!==(e=en(t.v,e,n,i))||r&&t.m!==ut)return e}function en(t,e,n,r){if(-1===e)return null;const i=e+(n?0:-1),s=t.length-1;let o,a;if(!(s<1+(n?0:-1))){if(i>=s)if(o=t[s],null!=o&&\"object\"==typeof o&&o.constructor===Object)n=o[e],a=!0;else{if(i!==s)return;n=o}else n=t[i];if(r&&null!=n){if(null==(r=r(n)))return r;if(!Object.is(r,n))return a?o[e]=r:t[i]=r,r}return n}}function nn(t,e,n,r){qe(t),rn(t=t.v,0|t[et],e,n,r)}function rn(t,e,n,r,i){const s=n+(i?0:-1);var o=t.length-1;if(o>=1+(i?0:-1)&&s>=o){const i=t[o];if(null!=i&&\"object\"==typeof i&&i.constructor===Object)return i[n]=r,e}return s<=o?(t[s]=r,e):(void 0!==r&&(n>=(o=(e??=0|t[et])>>14&1023||536870912)?null!=r&&(t[o+(i?0:-1)]={[n]:r}):t[s]=r),e)}function sn(){return void 0===dt?2:4}function on(t,e,n,r,i){let s=t.v,o=0|s[et];r=ht(t,o)?1:r,i=!!i||3===r,2===r&&Ye(t)&&(s=t.v,o=0|s[et]);let a=(t=cn(s,e))===nt?7:0|t[et],c=hn(a,o);var h=!(4&c);if(h){4&c&&(t=Wt(t),a=0,c=xn(c,o),o=rn(s,o,e,t));let r=0,i=0;for(;r<t.length;r++){const e=n(t[r]);null!=e&&(t[i++]=e)}i<r&&(t.length=i),n=-513&(4|c),c=n&=-1025,c&=-4097}return c!==a&&(st(t,c),2&c&&Object.freeze(t)),an(t,c,s,o,e,r,h,i)}function an(t,e,n,r,i,s,o,a){let c=e;return 1===s||4===s&&(2&e||!(16&e)&&32&r)?un(e)||((e|=!t.length||o&&!(4096&e)||32&r&&!(4096&e||16&e)?2:256)!==c&&st(t,e),Object.freeze(t)):(2===s&&un(e)&&(t=Wt(t),c=0,e=xn(e,r),r=rn(n,r,i,t)),un(e)||(a||(e|=16),e!==c&&st(t,e))),2&e||!(4096&e||16&e)||$e(n,r),t}function cn(t,e,n){return t=en(t,e,n),Array.isArray(t)?t:nt}function hn(t,e){return 2&e&&(t|=2),1|t}function un(t){return!!(2&t)&&!!(4&t)||!!(256&t)}function ln(t){return lt(t,!0)}function fn(t){t=Wt(t);for(let e=0;e<t.length;e++){const n=t[e]=Wt(t[e]);Array.isArray(n[1])&&(n[1]=ot(n[1]))}return at(t)}function dn(t,e,n,r){qe(t),rn(t=t.v,0|t[et],e,(\"0\"===r?0===Number(n):n===r)?void 0:n)}function pn(t,e,n){if(2&e)throw Error();const r=mt(e);let i=cn(t,n,r),s=i===nt?7:0|i[et],o=hn(s,e);return(2&o||un(o)||16&o)&&(o===s||un(o)||st(i,o),i=Wt(i),s=0,o=xn(o,e),rn(t,e,n,i,r)),o&=-13,o!==s&&st(i,o),i}function gn(t,e){var n=Ds;return _n(mn(t=t.v),t,void 0,n)===e?e:-1}function mn(t){if(j)return t[W]??(t[W]=new Map);if(W in t)return t[W];const e=new Map;return Object.defineProperty(t,W,{value:e}),e}function yn(t,e,n,r,i){const s=mn(t),o=_n(s,t,e,n,i);return o!==r&&(o&&(e=rn(t,e,o,void 0,i)),s.set(n,r)),e}function _n(t,e,n,r,i){let s=t.get(r);if(null!=s)return s;s=0;for(let t=0;t<r.length;t++){const o=r[t];null!=en(e,o,i)&&(0!==s&&(n=rn(e,n,s,void 0,i)),s=o)}return t.set(r,s),s}function vn(t,e,n){let r=0|t[et];const i=mt(r),s=en(t,n,i);let o;if(null!=s&&s[J]===ct){if(!ht(s))return Ye(s),s.v;o=s.v}else Array.isArray(s)&&(o=s);if(o){const t=0|o[et];2&t&&(o=ze(o,t))}return o=Ge(o,e),o!==s&&rn(t,r,n,o,i),o}function En(t,e,n,r,i){let s=!1;if(null!=(r=en(t,r,i,(t=>{const r=me(t,n,!1,e);return s=r!==t&&null!=r,r}))))return s&&!ht(r)&&$e(t,e),r}function wn(t,e,n,r){let i=t.v,s=0|i[et];if(null==(e=En(i,s,e,n,r)))return e;if(s=0|i[et],!ht(t,s)){const o=Ke(e);o!==e&&(Ye(t)&&(i=t.v,s=0|i[et]),s=rn(i,s,n,e=o,r),$e(i,s))}return e}function Tn(t,e,n,r,i,s,o,a){var c=ht(t,n);s=c?1:s,o=!!o||3===s,c=a&&!c,(2===s||c)&&Ye(t)&&(n=0|(e=t.v)[et]);var h=(t=cn(e,i))===nt?7:0|t[et],u=hn(h,n);if(a=!(4&u)){var l=t,f=n;const e=!!(2&u);e&&(f|=2);let i=!e,s=!0,o=0,a=0;for(;o<l.length;o++){const t=me(l[o],r,!1,f);if(t instanceof r){if(!e){const e=ht(t);i&&=!e,s&&=e}l[a++]=t}}a<o&&(l.length=a),u|=4,u=s?-4097&u:4096|u,u=i?8|u:-9&u}if(u!==h&&(st(t,u),2&u&&Object.freeze(t)),c&&!(8&u||!t.length&&(1===s||4===s&&(2&u||!(16&u)&&32&n)))){for(un(u)&&(t=Wt(t),u=xn(u,n),n=rn(e,n,i,t)),r=t,c=u,h=0;h<r.length;h++)(l=r[h])!==(u=Ke(l))&&(r[h]=u);c|=8,st(t,u=c=r.length?4096|c:-4097&c)}return an(t,u,e,n,i,s,a,o)}function An(t,e,n){const r=t.v;return Tn(t,r,0|r[et],e,n,sn(),!1,!0)}function bn(t){return null==t&&(t=void 0),t}function kn(t,e,n,r,i){return nn(t,n,r=bn(r),i),r&&!ht(r)&&$e(t.v),t}function Sn(t,e,n,r){t:{var i=r=bn(r);qe(t);const s=t.v;let o=0|s[et];if(null==i){const t=mn(s);if(_n(t,s,o,n)!==e)break t;t.set(n,0)}else o=yn(s,o,n,e);rn(s,o,e,i)}r&&!ht(r)&&$e(t.v)}function xn(t,e){return-273&(2&e?2|t:-3&t)}function Ln(t,e,n,r){var i=r;qe(t),t=Tn(t,r=t.v,0|r[et],n,e,2,!0),i=null!=i?i:new n,t.push(i),e=n=t===nt?7:0|t[et],(i=ht(i))?(n&=-9,1===t.length&&(n&=-4097)):n|=4096,n!==e&&st(t,n),i||$e(r)}function Rn(t,e,n){return ie(tn(t,e,void 0,n))}function In(t){return(g?tn(t,2,void 0,void 0,fe):fe(tn(t,2)))??Ze}function Fn(t,e){return tn(t,e,void 0,void 0,Qt)??0}function Mn(t,e,n){if(null!=n){if(\"number\"!=typeof n)throw D(\"int32\");if(!qt(n))throw D(\"int32\");n|=0}nn(t,e,n)}function Pn(t,e,n){nn(t,e,Zt(n))}function Cn(t,e,n){dn(t,e,pe(n),\"\")}function On(t,e,n){{qe(t);const o=t.v;let a=0|o[et];if(null==n)rn(o,a,e);else{var r=t=n===nt?7:0|n[et],i=un(t),s=i||Object.isFrozen(n);for(i||(t=0),s||(n=Wt(n),r=0,t=xn(t,a),s=!1),t|=5,t|=(4&t?512&t?512:1024&t?1024:0:void 0)??(g?1024:0),i=0;i<n.length;i++){const e=n[i],o=de(e);Object.is(e,o)||(s&&(n=Wt(n),r=0,t=xn(t,a),s=!1),n[i]=o)}t!==r&&(s&&(n=Wt(n),t=xn(t,a)),st(n,t)),rn(o,a,e,n)}}}function Nn(t,e,n){qe(t),on(t,e,ge,2,!0).push(de(n))}var Un=class{constructor(t,e,n){if(this.buffer=t,n&&!e)throw Error();this.g=e}};function Dn(t,e){if(\"string\"==typeof t)return new Un(L(t),e);if(Array.isArray(t))return new Un(new Uint8Array(t),e);if(t.constructor===Uint8Array)return new Un(t,!1);if(t.constructor===ArrayBuffer)return t=new Uint8Array(t),new Un(t,!1);if(t.constructor===P)return e=M(t)||new Uint8Array(0),new Un(e,!0,t);if(t instanceof Uint8Array)return t=t.constructor===Uint8Array?t:new Uint8Array(t.buffer,t.byteOffset,t.byteLength),new Un(t,!1);throw Error()}function Bn(t,e){let n,r=0,i=0,s=0;const o=t.h;let a=t.g;do{n=o[a++],r|=(127&n)<<s,s+=7}while(s<32&&128&n);if(s>32)for(i|=(127&n)>>4,s=3;s<32&&128&n;s+=7)n=o[a++],i|=(127&n)<<s;if(Wn(t,a),!(128&n))return e(r>>>0,i>>>0);throw Error()}function Gn(t){let e=0,n=t.g;const r=n+10,i=t.h;for(;n<r;){const r=i[n++];if(e|=r,0==(128&r))return Wn(t,n),!!(127&e)}throw Error()}function jn(t){const e=t.h;let n=t.g,r=e[n++],i=127&r;if(128&r&&(r=e[n++],i|=(127&r)<<7,128&r&&(r=e[n++],i|=(127&r)<<14,128&r&&(r=e[n++],i|=(127&r)<<21,128&r&&(r=e[n++],i|=r<<28,128&r&&128&e[n++]&&128&e[n++]&&128&e[n++]&&128&e[n++]&&128&e[n++])))))throw Error();return Wn(t,n),i}function Vn(t){return jn(t)>>>0}function Xn(t){var e=t.h;const n=t.g;var r=e[n],i=e[n+1];const s=e[n+2];return e=e[n+3],Wn(t,t.g+4),t=2*((i=(r<<0|i<<8|s<<16|e<<24)>>>0)>>31)+1,r=i>>>23&255,i&=8388607,255==r?i?NaN:t*(1/0):0==r?1401298464324817e-60*t*i:t*Math.pow(2,r-150)*(i+8388608)}function Hn(t){return jn(t)}function Wn(t,e){if(t.g=e,e>t.l)throw Error()}function zn(t,e){if(e<0)throw Error();const n=t.g;if((e=n+e)>t.l)throw Error();return t.g=e,n}function Kn(t,e){if(0==e)return F();var n=zn(t,e);return t.Y&&t.j?n=t.h.subarray(n,n+e):(t=t.h,n=n===(e=n+e)?new Uint8Array(0):Rt?t.slice(n,e):new Uint8Array(t.subarray(n,e))),0==n.length?F():new P(n,I)}var Yn=[];function qn(t,e,n,r){if(ir.length){const i=ir.pop();return i.o(r),i.g.init(t,e,n,r),i}return new rr(t,e,n,r)}function $n(t){t.g.clear(),t.l=-1,t.h=-1,ir.length<100&&ir.push(t)}function Jn(t){var e=t.g;if(e.g==e.l)return!1;t.m=t.g.g;var n=Vn(t.g);if(e=n>>>3,!((n&=7)>=0&&n<=5))throw Error();if(e<1)throw Error();return t.l=e,t.h=n,!0}function Zn(t){switch(t.h){case 0:0!=t.h?Zn(t):Gn(t.g);break;case 1:Wn(t=t.g,t.g+8);break;case 2:if(2!=t.h)Zn(t);else{var e=Vn(t.g);Wn(t=t.g,t.g+e)}break;case 5:Wn(t=t.g,t.g+4);break;case 3:for(e=t.l;;){if(!Jn(t))throw Error();if(4==t.h){if(t.l!=e)throw Error();break}Zn(t)}break;default:throw Error()}}function Qn(t,e,n){const r=t.g.l;var i=Vn(t.g);let s=(i=t.g.g+i)-r;if(s<=0&&(t.g.l=i,n(e,t,void 0,void 0,void 0),s=i-t.g.g),s)throw Error();return t.g.g=i,t.g.l=r,e}function tr(t){var e=Vn(t.g),a=zn(t=t.g,e);if(t=t.h,o){var c,h=t;(c=s)||(c=s=new TextDecoder(\"utf-8\",{fatal:!0})),e=a+e,h=0===a&&e===h.length?h:h.subarray(a,e);try{var u=c.decode(h)}catch(t){if(void 0===i){try{c.decode(new Uint8Array([128]))}catch(t){}try{c.decode(new Uint8Array([97])),i=!0}catch(t){i=!1}}throw!i&&(s=void 0),t}}else{e=(u=a)+e,a=[];let i,s=null;for(;u<e;){var l=t[u++];l<128?a.push(l):l<224?u>=e?n():(i=t[u++],l<194||128!=(192&i)?(u--,n()):a.push((31&l)<<6|63&i)):l<240?u>=e-1?n():(i=t[u++],128!=(192&i)||224===l&&i<160||237===l&&i>=160||128!=(192&(c=t[u++]))?(u--,n()):a.push((15&l)<<12|(63&i)<<6|63&c)):l<=244?u>=e-2?n():(i=t[u++],128!=(192&i)||i-144+(l<<28)>>30!=0||128!=(192&(c=t[u++]))||128!=(192&(h=t[u++]))?(u--,n()):(l=(7&l)<<18|(63&i)<<12|(63&c)<<6|63&h,l-=65536,a.push(55296+(l>>10&1023),56320+(1023&l)))):n(),a.length>=8192&&(s=r(s,a),a.length=0)}u=r(s,a)}return u}function er(t){const e=Vn(t.g);return Kn(t.g,e)}function nr(t,e,n){var r=Vn(t.g);for(r=t.g.g+r;t.g.g<r;)n.push(e(t.g))}var rr=class{constructor(t,e,n,r){if(Yn.length){const i=Yn.pop();i.init(t,e,n,r),t=i}else t=new class{constructor(t,e,n,r){this.h=null,this.j=!1,this.g=this.l=this.m=0,this.init(t,e,n,r)}init(t,e,n,{Y:r=!1,ea:i=!1}={}){this.Y=r,this.ea=i,t&&(t=Dn(t,this.ea),this.h=t.buffer,this.j=t.g,this.m=e||0,this.l=void 0!==n?this.m+n:this.h.length,this.g=this.m)}clear(){this.h=null,this.j=!1,this.g=this.l=this.m=0,this.Y=!1}}(t,e,n,r);this.g=t,this.m=this.g.g,this.h=this.l=-1,this.o(r)}o({ha:t=!1}={}){this.ha=t}},ir=[];function sr(t){return t?/^\\d+$/.test(t)?(Xt(t),new or(Ft,Mt)):null:ar||=new or(0,0)}var or=class{constructor(t,e){this.h=t>>>0,this.g=e>>>0}};let ar;function cr(t){return t?/^-?\\d+$/.test(t)?(Xt(t),new hr(Ft,Mt)):null:ur||=new hr(0,0)}var hr=class{constructor(t,e){this.h=t>>>0,this.g=e>>>0}};let ur;function lr(t,e,n){for(;n>0||e>127;)t.g.push(127&e|128),e=(e>>>7|n<<25)>>>0,n>>>=7;t.g.push(e)}function fr(t,e){for(;e>127;)t.g.push(127&e|128),e>>>=7;t.g.push(e)}function dr(t,e){if(e>=0)fr(t,e);else{for(let n=0;n<9;n++)t.g.push(127&e|128),e>>=7;t.g.push(1)}}function pr(t){var e=Ft;t.g.push(e>>>0&255),t.g.push(e>>>8&255),t.g.push(e>>>16&255),t.g.push(e>>>24&255)}function gr(t,e){0!==e.length&&(t.l.push(e),t.h+=e.length)}function mr(t,e,n){fr(t.g,8*e+n)}function yr(t,e){return mr(t,e,2),e=t.g.end(),gr(t,e),e.push(t.h),e}function _r(t,e){var n=e.pop();for(n=t.h+t.g.length()-n;n>127;)e.push(127&n|128),n>>>=7,t.h++;e.push(n),t.h++}function vr(t,e,n){mr(t,e,2),fr(t.g,n.length),gr(t,t.g.end()),gr(t,n)}function Er(t,e,n,r){null!=n&&(e=yr(t,e),r(n,t),_r(t,e))}function wr(){const t=class{constructor(){throw Error()}};return Object.setPrototypeOf(t,t.prototype),t}var Tr=wr(),Ar=wr(),br=wr(),kr=wr(),Sr=wr(),xr=wr(),Lr=wr(),Rr=wr(),Ir=wr(),Fr=wr();function Mr(t,e,n){var r=t.v;z&&z in r&&(r=r[z])&&delete r[e.g],e.h?e.j(t,e.h,e.g,n,e.l):e.j(t,e.g,n,e.l)}var Pr=class{constructor(t,e){this.v=je(t,e,void 0,2048)}toJSON(){return Ue(this)}j(){var t=Fo,e=this.v,n=t.g,r=z;if(j&&r&&null!=e[r]?.[n]&&B(K,3),e=t.g,Z&&z&&void 0===Z&&(r=(n=this.v)[z])&&(r=r.da))try{r(n,e,Me)}catch(t){u(t)}return t.h?t.m(this,t.h,t.g,t.l):t.m(this,t.g,t.defaultValue,t.l)}clone(){const t=this.v,e=0|t[et];return Je(this,t,e)?He(this,t,!0):new this.constructor(ze(t,e,!1))}};Pr.prototype[J]=ct,Pr.prototype.toString=function(){return this.v.toString()};var Cr=class{constructor(t,e,n){this.g=t,this.h=e,t=Tr,this.l=!!t&&n===t||!1}};function Or(t,e){return new Cr(t,e,Tr)}function Nr(t,e,n,r,i){Er(t,n,Yr(e,r),i)}const Ur=Or((function(t,e,n,r,i){return 2===t.h&&(Qn(t,vn(e,r,n),i),!0)}),Nr),Dr=Or((function(t,e,n,r,i){return 2===t.h&&(Qn(t,vn(e,r,n),i),!0)}),Nr);var Br=Symbol(),Gr=Symbol(),jr=Symbol(),Vr=Symbol(),Xr=Symbol();let Hr,Wr;function zr(t,e,n,r){var i=r[t];if(i)return i;(i={}).qa=r,i.T=function(t){switch(typeof t){case\"boolean\":return De||=[0,void 0,!0];case\"number\":return t>0?void 0:0===t?Be||=[0,void 0]:[-t,void 0];case\"string\":return[0,t];case\"object\":return t}}(r[0]);var s=r[1];let o=1;s&&s.constructor===Object&&(i.ba=s,\"function\"==typeof(s=r[++o])&&(i.ma=!0,Hr??=s,Wr??=r[o+1],s=r[o+=2]));const a={};for(;s&&Array.isArray(s)&&s.length&&\"number\"==typeof s[0]&&s[0]>0;){for(var c=0;c<s.length;c++)a[s[c]]=s;s=r[++o]}for(c=1;void 0!==s;){let t;\"number\"==typeof s&&(c+=s,s=r[++o]);var h=void 0;if(s instanceof Cr?t=s:(t=Ur,o--),t?.l){s=r[++o],h=r;var u=o;\"function\"==typeof s&&(s=s(),h[u]=s),h=s}for(u=c+1,\"number\"==typeof(s=r[++o])&&s<0&&(u-=s,s=r[++o]);c<u;c++){const r=a[c];h?n(i,c,t,h,r):e(i,c,t,r)}}return r[t]=i}function Kr(t){return Array.isArray(t)?t[0]instanceof Cr?t:[Dr,t]:[t,void 0]}function Yr(t,e){return t instanceof Pr?t.v:Array.isArray(t)?Ge(t,e):void 0}function qr(t,e,n,r){const i=n.g;t[e]=r?(t,e,n)=>i(t,e,n,r):i}function $r(t,e,n,r,i){const s=n.g;let o,a;t[e]=(t,e,n)=>s(t,e,n,a||=zr(Gr,qr,$r,r).T,o||=Jr(r),i)}function Jr(t){let e=t[jr];if(null!=e)return e;const n=zr(Gr,qr,$r,t);return e=n.ma?(t,e)=>Hr(t,e,n):(t,e)=>{for(;Jn(e)&&4!=e.h;){var r=e.l,i=n[r];if(null==i){var s=n.ba;s&&(s=s[r])&&(null!=(s=Qr(s))&&(i=n[r]=s))}if(null==i||!i(e,t,r)){if(i=(s=e).m,Zn(s),s.ha)var o=void 0;else o=s.g.g-i,s.g.g=i,o=Kn(s.g,o);i=void 0,s=t,o&&((i=s[z]??(s[z]=new Fe))[r]??(i[r]=[])).push(o)}}return(t=Re(t))&&(t.da=n.qa[Xr]),!0},t[jr]=e,t[Xr]=Zr.bind(t),e}function Zr(t,e,n,r){var i=this[Gr];const s=this[jr],o=Ge(void 0,i.T),a=Re(t);if(a){var c=!1,h=i.ba;if(h){if(i=(e,n,i)=>{if(0!==i.length)if(h[n])for(const t of i){e=qn(t);try{c=!0,s(o,e)}finally{$n(e)}}else r?.(t,n,i)},null==e)Ie(a,i);else if(null!=a){const t=a[e];t&&i(a,e,t)}if(c){let r=0|t[et];if(2&r&&2048&r&&!n?.Ka)throw Error();const i=mt(r),s=(e,s)=>{if(null!=en(t,e,i)){if(1===n?.Qa)return;throw Error()}null!=s&&(r=rn(t,r,e,s,i)),delete a[e]};null==e?pt(o,0|o[et],((t,e)=>{s(t,e)})):s(e,en(o,e,i))}}}}function Qr(t){const e=(t=Kr(t))[0].g;if(t=t[1]){const n=Jr(t),r=zr(Gr,qr,$r,t).T;return(t,i,s)=>e(t,i,s,r,n)}return e}function ti(t,e,n){t[e]=n.h}function ei(t,e,n,r){let i,s;const o=n.h;t[e]=(t,e,n)=>o(t,e,n,s||=zr(Br,ti,ei,r).T,i||=ni(r))}function ni(t){let e=t[Vr];if(!e){const n=zr(Br,ti,ei,t);e=(t,e)=>ri(t,e,n),t[Vr]=e}return e}function ri(t,e,n){pt(t,0|t[et],((t,r)=>{if(null!=r){var i=function(t,e){var n=t[e];if(n)return n;if((n=t.ba)&&(n=n[e])){var r=(n=Kr(n))[0].h;if(n=n[1]){const e=ni(n),i=zr(Br,ti,ei,n).T;n=t.ma?Wr(i,e):(t,n,s)=>r(t,n,s,i,e)}else n=r;return t[e]=n}}(n,t);i?i(e,r,t):t<500||B(q,3)}})),(t=Re(t))&&Ie(t,((t,n,r)=>{for(gr(e,e.g.end()),t=0;t<r.length;t++)gr(e,M(r[t])||new Uint8Array(0))}))}const ii=Tt(0);function si(t,e){if(Array.isArray(e)){var n=0|e[et];if(4&n)return e;for(var r=0,i=0;r<e.length;r++){const n=t(e[r]);null!=n&&(e[i++]=n)}return i<r&&(e.length=i),(t=-1537&(5|n))!==n&&st(e,t),2&t&&Object.freeze(e),e}}function oi(t,e,n){return new Cr(t,e,n)}function ai(t,e,n){return new Cr(t,e,n)}function ci(t,e,n){rn(t,0|t[et],e,n,mt(0|t[et]))}var hi=Or((function(t,e,n,r,i){if(2!==t.h)return!1;if(t=Wt(t=Qn(t,Ge([void 0,void 0],r),i)),i=mt(r=0|e[et]),2&r)throw Error();let s=en(e,n,i);if(s instanceof be)0!=(2&s.J)?(s=s.V(),s.push(t),rn(e,r,n,s,i)):s.Ma(t);else if(Array.isArray(s)){var o=0|s[et];8192&o||st(s,o|=8192),2&o&&(s=fn(s),rn(e,r,n,s,i)),s.push(t)}else rn(e,r,n,at([t]),i);return!0}),(function(t,e,n,r,i){if(e instanceof be)e.forEach(((e,s)=>{Er(t,n,Ge([s,e],r),i)}));else if(Array.isArray(e)){for(let s=0;s<e.length;s++){const o=e[s];Array.isArray(o)&&Er(t,n,Ge(o,r),i)}at(e)}}));function ui(t,e,n){null!=(e=Qt(e))&&(mr(t,n,5),t=t.g,Ot(e),pr(t))}function li(t,e,n){if(e=function(t){if(null==t)return t;const e=typeof t;if(\"bigint\"===e)return String(zt(64,t));if(re(t)){if(\"string\"===e)return ce(t);if(\"number\"===e)return ae(t)}}(e),null!=e){if(\"string\"==typeof e)cr(e);if(null!=e)switch(mr(t,n,0),typeof e){case\"number\":t=t.g,Ct(e),lr(t,Ft,Mt);break;case\"bigint\":n=BigInt.asUintN(64,e),n=new hr(Number(n&BigInt(4294967295)),Number(n>>BigInt(32))),lr(t.g,n.h,n.g);break;default:n=cr(e),lr(t.g,n.h,n.g)}}}function fi(t,e,n){null!=(e=ie(e))&&null!=e&&(mr(t,n,0),dr(t.g,e))}function di(t,e,n){null!=(e=ee(e))&&(mr(t,n,0),t.g.g.push(e?1:0))}function pi(t,e,n){null!=(e=ge(e))&&vr(t,n,h(e))}function gi(t,e,n,r,i){Er(t,n,Yr(e,r),i)}function mi(t,e,n){null!=(e=null==e||\"string\"==typeof e||e instanceof P?e:void 0)&&vr(t,n,Dn(e,!0).buffer)}function yi(t,e,n){return(5===t.h||2===t.h)&&(e=pn(e,0|e[et],n),2==t.h?nr(t,Xn,e):e.push(Xn(t.g)),!0)}var _i=oi((function(t,e,n){return 5===t.h&&(ci(e,n,Xn(t.g)),!0)}),ui,Rr),vi=ai(yi,(function(t,e,n){if(null!=(e=si(Qt,e)))for(let o=0;o<e.length;o++){var r=t,i=n,s=e[o];null!=s&&(mr(r,i,5),r=r.g,Ot(s),pr(r))}}),Rr),Ei=ai(yi,(function(t,e,n){if(null!=(e=si(Qt,e))&&e.length){mr(t,n,2),fr(t.g,4*e.length);for(let r=0;r<e.length;r++)n=t.g,Ot(e[r]),pr(n)}}),Rr),wi=oi((function(t,e,n){return 5===t.h&&(ci(e,n,0===(t=Xn(t.g))?void 0:t),!0)}),ui,Rr),Ti=oi((function(t,e,n){return p?(0!==t.h?t=!1:(ci(e,n,Bn(t.g,Bt)),t=!0),t):0===t.h&&(ci(e,n,Bn(t.g,Dt)),!0)}),li,xr),Ai=oi((function(t,e,n){return p?(0!==t.h?e=!1:(ci(e,n,(t=Bn(t.g,Bt))===ii?void 0:t),e=!0),e):0===t.h&&(ci(e,n,0===(t=Bn(t.g,Dt))?void 0:t),!0)}),li,xr),bi=oi((function(t,e,n){return p?(0!==t.h?t=!1:(ci(e,n,Bn(t.g,Ut)),t=!0),t):0===t.h&&(ci(e,n,Bn(t.g,Nt)),!0)}),(function(t,e,n){if(e=function(t){if(null==t)return t;var e=typeof t;if(\"bigint\"===e)return String(Kt(64,t));if(re(t)){if(\"string\"===e)return e=$t(Number(t)),Yt(e)&&e>=0?t=String(e):(-1!==(e=t.indexOf(\".\"))&&(t=t.substring(0,e)),(e=\"-\"!==t[0]&&((e=t.length)<20||20===e&&t<=\"18446744073709551615\"))||(Xt(t),t=Gt(Ft,Mt))),t;if(\"number\"===e)return(t=$t(t))>=0&&Yt(t)||(Ct(t),t=Nt(Ft,Mt)),t}}(e),null!=e){if(\"string\"==typeof e)sr(e);if(null!=e)switch(mr(t,n,0),typeof e){case\"number\":t=t.g,Ct(e),lr(t,Ft,Mt);break;case\"bigint\":n=BigInt.asUintN(64,e),n=new or(Number(n&BigInt(4294967295)),Number(n>>BigInt(32))),lr(t.g,n.h,n.g);break;default:n=sr(e),lr(t.g,n.h,n.g)}}}),Lr),ki=oi((function(t,e,n){return 0===t.h&&(ci(e,n,jn(t.g)),!0)}),fi,kr),Si=ai((function(t,e,n){return(0===t.h||2===t.h)&&(e=pn(e,0|e[et],n),2==t.h?nr(t,jn,e):e.push(jn(t.g)),!0)}),(function(t,e,n){if(null!=(e=si(ie,e))&&e.length){n=yr(t,n);for(let n=0;n<e.length;n++)dr(t.g,e[n]);_r(t,n)}}),kr),xi=oi((function(t,e,n){return 0===t.h&&(ci(e,n,0===(t=jn(t.g))?void 0:t),!0)}),fi,kr),Li=oi((function(t,e,n){return 0===t.h&&(ci(e,n,Gn(t.g)),!0)}),di,Ar),Ri=oi((function(t,e,n){return 0===t.h&&(ci(e,n,!1===(t=Gn(t.g))?void 0:t),!0)}),di,Ar),Ii=ai((function(t,e,n){return 2===t.h&&(t=tr(t),pn(e,0|e[et],n).push(t),!0)}),(function(t,e,n){if(null!=(e=si(ge,e)))for(let o=0;o<e.length;o++){var r=t,i=n,s=e[o];null!=s&&vr(r,i,h(s))}}),br),Fi=oi((function(t,e,n){return 2===t.h&&(ci(e,n,\"\"===(t=tr(t))?void 0:t),!0)}),pi,br),Mi=oi((function(t,e,n){return 2===t.h&&(ci(e,n,tr(t)),!0)}),pi,br),Pi=function(t,e,n=Tr){return new Cr(t,e,n)}((function(t,e,n,r,i){return 2===t.h&&(r=Ge(void 0,r),pn(e,0|e[et],n).push(r),Qn(t,r,i),!0)}),(function(t,e,n,r,i){if(Array.isArray(e)){for(let s=0;s<e.length;s++)gi(t,e[s],n,r,i);1&(t=0|e[et])||st(e,1|t)}})),Ci=Or((function(t,e,n,r,i,s){if(2!==t.h)return!1;let o=0|e[et];return yn(e,o,s,n,mt(o)),Qn(t,e=vn(e,r,n),i),!0}),gi),Oi=oi((function(t,e,n){return 2===t.h&&(ci(e,n,er(t)),!0)}),mi,Ir),Ni=ai((function(t,e,n){return(0===t.h||2===t.h)&&(e=pn(e,0|e[et],n),2==t.h?nr(t,Vn,e):e.push(Vn(t.g)),!0)}),(function(t,e,n){if(null!=(e=si(se,e)))for(let o=0;o<e.length;o++){var r=t,i=n,s=e[o];null!=s&&(mr(r,i,0),fr(r.g,s))}}),Sr),Ui=oi((function(t,e,n){return 0===t.h&&(ci(e,n,0===(t=Vn(t.g))?void 0:t),!0)}),(function(t,e,n){null!=(e=se(e))&&null!=e&&(mr(t,n,0),fr(t.g,e))}),Sr),Di=oi((function(t,e,n){return 0===t.h&&(ci(e,n,jn(t.g)),!0)}),(function(t,e,n){null!=(e=ie(e))&&(e=parseInt(e,10),mr(t,n,0),dr(t.g,e))}),Fr);class Bi{constructor(t,e){var n=rs;this.g=t,this.h=e,this.m=wn,this.j=kn,this.defaultValue=void 0,this.l=null!=n.Oa?gt:void 0}register(){_(this)}}function Gi(t,e){return new Bi(t,e)}function ji(t,e){return(n,r)=>{{const s={ea:!0};r&&Object.assign(s,r),n=qn(n,void 0,void 0,s);try{const r=new t,s=r.v;Jr(e)(s,n);var i=r}finally{$n(n)}}return i}}function Vi(t){return function(){const e=new class{constructor(){this.l=[],this.h=0,this.g=new class{constructor(){this.g=[]}length(){return this.g.length}end(){const t=this.g;return this.g=[],t}}}};ri(this.v,e,zr(Br,ti,ei,t)),gr(e,e.g.end());const n=new Uint8Array(e.h),r=e.l,i=r.length;let s=0;for(let t=0;t<i;t++){const e=r[t];n.set(e,s),s+=e.length}return e.l=[n],n}}var Xi=class extends Pr{constructor(t){super(t)}},Hi=[0,Fi,oi((function(t,e,n){return 2===t.h&&(ci(e,n,(t=er(t))===F()?void 0:t),!0)}),(function(t,e,n){if(null!=e){if(e instanceof Pr){const r=e.Ra;return void(r?(e=r(e),null!=e&&vr(t,n,Dn(e,!0).buffer)):B(q,3))}if(Array.isArray(e))return void B(q,3)}mi(t,e,n)}),Ir)];let Wi,zi=globalThis.trustedTypes;function Ki(t){var e;return void 0===Wi&&(Wi=function(){let t=null;if(!zi)return t;try{const e=t=>t;t=zi.createPolicy(\"goog#html\",{createHTML:e,createScript:e,createScriptURL:e})}catch(t){}return t}()),t=(e=Wi)?e.createScriptURL(t):t,new class{constructor(t){this.g=t}toString(){return this.g+\"\"}}(t)}function Yi(t,...e){if(0===e.length)return Ki(t[0]);let n=t[0];for(let r=0;r<e.length;r++)n+=encodeURIComponent(e[r])+t[r+1];return Ki(n)}var qi=[0,ki,Di,Li,-1,Si,Di,-1,Li],$i=class extends Pr{constructor(t){super(t)}},Ji=[0,Li,Mi,Li,Di,-1,ai((function(t,e,n){return(0===t.h||2===t.h)&&(e=pn(e,0|e[et],n),2==t.h?nr(t,Hn,e):e.push(jn(t.g)),!0)}),(function(t,e,n){if(null!=(e=si(ie,e))&&e.length){n=yr(t,n);for(let n=0;n<e.length;n++)dr(t.g,e[n]);_r(t,n)}}),Fr),Mi,-1,[0,Li,-1],Di,Li,-1],Zi=[0,3,Li,-1,2,[0,ki],[0,Di,Li],[0,Mi,-1],[0]],Qi=[0,Mi,-2],ts=class extends Pr{constructor(t){super(t)}},es=[0],ns=[0,ki,Li,1,Li,-4],rs=class extends Pr{constructor(t){super(t,2)}},is={};is[336783863]=[0,Mi,Li,-1,ki,[0,[1,2,3,4,5,6,7,8,9],Ci,es,Ci,Ji,Ci,Qi,Ci,ns,Ci,qi,Ci,[0,Mi,-2],Ci,[0,Mi,Di],Ci,Zi,Ci,[0,Di,-1,Li]],[0,Mi],Li,[0,[1,3],[2,4],Ci,[0,Si],-1,Ci,[0,Ii],-1,Pi,[0,Mi,-1]],Mi];var ss=[0,Ai,-1,Ri,-3,Ai,Si,Fi,xi,Ai,-1,Ri,xi,Ri,-2,Fi];function os(t,e){Nn(t,3,e)}function as(t,e){Nn(t,4,e)}var cs=class extends Pr{constructor(t){super(t,500)}o(t){return kn(this,0,7,t)}},hs=[-1,{}],us=[0,Mi,1,hs],ls=[0,Mi,Ii,hs];function fs(t,e){Ln(t,1,cs,e)}function ds(t,e){Nn(t,10,e)}function ps(t,e){Nn(t,15,e)}var gs=class extends Pr{constructor(t){super(t,500)}o(t){return kn(this,0,1001,t)}},ms=[-500,Pi,[-500,Fi,-1,Ii,-3,[-2,is,Li],Pi,Hi,xi,-1,us,ls,Pi,[0,Fi,Ri],Fi,ss,xi,Ii,987,Ii],4,Pi,[-500,Mi,-1,[-1,{}],998,Mi],Pi,[-500,Mi,Ii,-1,[-2,{},Li],997,Ii,-1],xi,Pi,[-500,Mi,Ii,hs,998,Ii],Ii,xi,us,ls,Pi,[0,Fi,-1,hs],Ii,-2,ss,Fi,-1,Ri,[0,Ri,Ui],978,hs,Pi,Hi];gs.prototype.g=Vi(ms);var ys=ji(gs,ms),_s=class extends Pr{constructor(t){super(t)}},vs=class extends Pr{constructor(t){super(t)}g(){return An(this,_s,1)}},Es=[0,Pi,[0,ki,_i,Mi,-1]],ws=ji(vs,Es),Ts=class extends Pr{constructor(t){super(t)}},As=class extends Pr{constructor(t){super(t)}},bs=class extends Pr{constructor(t){super(t)}l(){return wn(this,Ts,2)}g(){return An(this,As,5)}},ks=ji(class extends Pr{constructor(t){super(t)}},[0,Ii,Si,Ei,[0,Di,[0,ki,-3],[0,_i,-3],[0,ki,-1,[0,Pi,[0,ki,-2]]],Pi,[0,_i,-1,Mi,_i]],Mi,-1,Ti,Pi,[0,ki,_i],Ii,Ti]),Ss=class extends Pr{constructor(t){super(t)}},xs=ji(class extends Pr{constructor(t){super(t)}},[0,Pi,[0,_i,-4]]),Ls=class extends Pr{constructor(t){super(t)}},Rs=ji(class extends Pr{constructor(t){super(t)}},[0,Pi,[0,_i,-4]]),Is=class extends Pr{constructor(t){super(t)}},Fs=[0,ki,-1,Ei,Di],Ms=class extends Pr{constructor(t){super(t)}};Ms.prototype.g=Vi([0,_i,-4,Ti]);var Ps=class extends Pr{constructor(t){super(t)}},Cs=ji(class extends Pr{constructor(t){super(t)}},[0,Pi,[0,1,ki,Mi,Es],Ti]),Os=class extends Pr{constructor(t){super(t)}},Ns=class extends Pr{constructor(t){super(t)}na(){const t=tn(this,1,void 0,void 0,ln);return null==t?F():t}},Us=class extends Pr{constructor(t){super(t)}},Ds=[1,2],Bs=ji(class extends Pr{constructor(t){super(t)}},[0,Pi,[0,Ds,Ci,[0,Ei],Ci,[0,Oi],ki,Mi],Ti]),Gs=class extends Pr{constructor(t){super(t)}},js=[0,Mi,ki,_i,Ii,-1],Vs=class extends Pr{constructor(t){super(t)}},Xs=[0,Li,-1],Hs=class extends Pr{constructor(t){super(t)}},Ws=[1,2,3,4,5,6],zs=class extends Pr{constructor(t){super(t)}g(){return null!=tn(this,1,void 0,void 0,ln)}l(){return null!=ge(tn(this,2))}},Ks=class extends Pr{constructor(t){super(t)}g(){return ee(tn(this,2))??!1}},Ys=[0,Oi,Mi,[0,ki,Ti,-1],[0,bi,Ti]],qs=[0,Ys,Li,[0,Ws,Ci,ns,Ci,Ji,Ci,qi,Ci,es,Ci,Qi,Ci,Zi],Di],$s=class extends Pr{constructor(t){super(t)}},Js=[0,qs,_i,-1,ki],Zs=Gi(502141897,$s);is[502141897]=Js;var Qs=ji(class extends Pr{constructor(t){super(t)}},[0,[0,Di,-1,vi,Ni],Fs]),to=class extends Pr{constructor(t){super(t)}},eo=class extends Pr{constructor(t){super(t)}},no=[0,qs,_i,[0,qs],Li],ro=Gi(508968150,eo);is[508968150]=[0,qs,Js,no,_i,[0,[0,Ys]]],is[508968149]=no;var io=class extends Pr{constructor(t){super(t)}l(){return wn(this,Gs,2)}g(){nn(this,2)}},so=[0,qs,js];is[478825465]=so;var oo=class extends Pr{constructor(t){super(t)}},ao=class extends Pr{constructor(t){super(t)}},co=class extends Pr{constructor(t){super(t)}},ho=class extends Pr{constructor(t){super(t)}},uo=class extends Pr{constructor(t){super(t)}},lo=[0,qs,[0,qs],so,-1],fo=[0,qs,_i,ki],po=[0,qs,_i],go=[0,qs,fo,po,_i],mo=Gi(479097054,uo);is[479097054]=[0,qs,go,lo],is[463370452]=lo,is[464864288]=fo;var yo=Gi(462713202,ho);is[462713202]=go,is[474472470]=po;var _o=class extends Pr{constructor(t){super(t)}},vo=class extends Pr{constructor(t){super(t)}},Eo=class extends Pr{constructor(t){super(t)}},wo=class extends Pr{constructor(t){super(t)}},To=[0,qs,_i,-1,ki],Ao=[0,qs,_i,Li];wo.prototype.g=Vi([0,qs,po,[0,qs],Js,no,To,Ao]);var bo=class extends Pr{constructor(t){super(t)}},ko=Gi(456383383,bo);is[456383383]=[0,qs,js];var So=class extends Pr{constructor(t){super(t)}},xo=Gi(476348187,So);is[476348187]=[0,qs,Xs];var Lo=class extends Pr{constructor(t){super(t)}},Ro=class extends Pr{constructor(t){super(t)}},Io=[0,Di,-1],Fo=Gi(458105876,class extends Pr{constructor(t){super(t)}g(){let t;var e=this.v;const n=0|e[et];return t=ht(this,n),e=function(t,e,n,r){var i=Ro;!r&&Ye(t)&&(n=0|(e=t.v)[et]);var s=en(e,2);if(t=!1,null==s){if(r)return Le();s=[]}else if(s.constructor===be){if(!(2&s.J)||r)return s;s=s.V()}else Array.isArray(s)?t=!!(2&(0|s[et])):s=[];if(r){if(!s.length)return Le();t||(t=!0,ot(s))}else t&&(t=!1,at(s),s=fn(s));return!t&&32&n&&it(s,32),n=rn(e,n,2,r=new be(s,i,ye,void 0)),t||$e(e,n),r}(this,e,n,t),!t&&Ro&&(e.ra=!0),e}});is[458105876]=[0,Io,hi,[!0,Ti,[0,Mi,-1,Ii]],[0,Si,Li,Di]];var Mo=class extends Pr{constructor(t){super(t)}},Po=Gi(458105758,Mo);is[458105758]=[0,qs,Mi,Io];var Co=class extends Pr{constructor(t){super(t)}},Oo=[0,wi,-1,Ri],No=class extends Pr{constructor(t){super(t)}},Uo=class extends Pr{constructor(t){super(t)}},Do=[1,2];Uo.prototype.g=Vi([0,Do,Ci,Oo,Ci,[0,Pi,Oo]]);var Bo=class extends Pr{constructor(t){super(t)}},Go=Gi(443442058,Bo);is[443442058]=[0,qs,Mi,ki,_i,Ii,-1,Li,_i],is[514774813]=To;var jo=class extends Pr{constructor(t){super(t)}},Vo=Gi(516587230,jo);function Xo(t,e){return e=e?e.clone():new Gs,void 0!==t.displayNamesLocale?nn(e,1,pe(t.displayNamesLocale)):void 0===t.displayNamesLocale&&nn(e,1),void 0!==t.maxResults?Mn(e,2,t.maxResults):\"maxResults\"in t&&nn(e,2),void 0!==t.scoreThreshold?Pn(e,3,t.scoreThreshold):\"scoreThreshold\"in t&&nn(e,3),void 0!==t.categoryAllowlist?On(e,4,t.categoryAllowlist):\"categoryAllowlist\"in t&&nn(e,4),void 0!==t.categoryDenylist?On(e,5,t.categoryDenylist):\"categoryDenylist\"in t&&nn(e,5),e}function Ho(t){const e=Number(t);return Number.isSafeInteger(e)?e:String(t)}function Wo(t,e=-1,n=\"\"){return{categories:t.map((t=>({index:Rn(t,1)??0??-1,score:Fn(t,2)??0,categoryName:ge(tn(t,3))??\"\"??\"\",displayName:ge(tn(t,4))??\"\"??\"\"}))),headIndex:e,headName:n}}function zo(t){const e={classifications:An(t,Ps,1).map((t=>Wo(wn(t,vs,4)?.g()??[],Rn(t,2)??0,ge(tn(t,3))??\"\")))};return null!=function(t){return le(g?tn(t,2,void 0,void 0,fe):tn(t,2))}(t)&&(e.timestampMs=Ho(In(t))),e}function Ko(t){var e=on(t,3,Qt,sn()),n=on(t,2,ie,sn()),r=on(t,1,ge,sn()),i=on(t,9,ge,sn());const s={categories:[],keypoints:[]};for(let t=0;t<e.length;t++)s.categories.push({score:e[t],index:n[t]??-1,categoryName:r[t]??\"\",displayName:i[t]??\"\"});if((e=wn(t,bs,4)?.l())&&(s.boundingBox={originX:Rn(e,1,Qe)??0,originY:Rn(e,2,Qe)??0,width:Rn(e,3,Qe)??0,height:Rn(e,4,Qe)??0,angle:0}),wn(t,bs,4)?.g().length)for(const e of wn(t,bs,4).g())s.keypoints.push({x:tn(e,1,void 0,Qe,Qt)??0,y:tn(e,2,void 0,Qe,Qt)??0,score:tn(e,4,void 0,Qe,Qt)??0,label:ge(tn(e,3,void 0,Qe))??\"\"});return s}function Yo(t){const e=[];for(const n of An(t,Ls,1))e.push({x:Fn(n,1)??0,y:Fn(n,2)??0,z:Fn(n,3)??0,visibility:Fn(n,4)??0});return e}function qo(t){const e=[];for(const n of An(t,Ss,1))e.push({x:Fn(n,1)??0,y:Fn(n,2)??0,z:Fn(n,3)??0,visibility:Fn(n,4)??0});return e}function $o(t){return Array.from(t,(t=>t>127?t-256:t))}function Jo(t,e){if(t.length!==e.length)throw Error(`Cannot compute cosine similarity between embeddings of different sizes (${t.length} vs. ${e.length}).`);let n=0,r=0,i=0;for(let s=0;s<t.length;s++)n+=t[s]*e[s],r+=t[s]*t[s],i+=e[s]*e[s];if(r<=0||i<=0)throw Error(\"Cannot compute cosine similarity on embedding with 0 norm.\");return n/Math.sqrt(r*i)}let Zo;is[516587230]=[0,qs,To,Ao,_i],is[518928384]=Ao;const Qo=new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]);async function ta(){if(void 0===Zo)try{await WebAssembly.instantiate(Qo),Zo=!0}catch{Zo=!1}return Zo}async function ea(t,e=Yi``){const n=await ta()?\"wasm_internal\":\"wasm_nosimd_internal\";return{wasmLoaderPath:`${e}/${t}_${n}.js`,wasmBinaryPath:`${e}/${t}_${n}.wasm`}}var na=class{};function ra(){var t=navigator;return\"undefined\"!=typeof OffscreenCanvas&&(!function(t=navigator){return(t=t.userAgent).includes(\"Safari\")&&!t.includes(\"Chrome\")}(t)||!!((t=t.userAgent.match(/Version\\/([\\d]+).*Safari/))&&t.length>=1&&Number(t[1])>=17))}async function ia(t){if(\"function\"!=typeof importScripts){const e=document.createElement(\"script\");return e.src=t.toString(),e.crossOrigin=\"anonymous\",new Promise(((t,n)=>{e.addEventListener(\"load\",(()=>{t()}),!1),e.addEventListener(\"error\",(t=>{n(t)}),!1),document.body.appendChild(e)}))}try{importScripts(t.toString())}catch(e){if(!(e instanceof TypeError))throw e;await self.import(t.toString())}}function sa(t){return void 0!==t.videoWidth?[t.videoWidth,t.videoHeight]:void 0!==t.naturalWidth?[t.naturalWidth,t.naturalHeight]:void 0!==t.displayWidth?[t.displayWidth,t.displayHeight]:[t.width,t.height]}function oa(t,e,n){t.m||console.error(\"No wasm multistream support detected: ensure dependency inclusion of :gl_graph_runner_internal_multi_input target\"),n(e=t.i.stringToNewUTF8(e)),t.i._free(e)}function aa(t,e,n){if(!t.i.canvas)throw Error(\"No OpenGL canvas configured.\");if(n?t.i._bindTextureToStream(n):t.i._bindTextureToCanvas(),!(n=t.i.canvas.getContext(\"webgl2\")||t.i.canvas.getContext(\"webgl\")))throw Error(\"Failed to obtain WebGL context from the provided canvas. `getContext()` should only be invoked with `webgl` or `webgl2`.\");t.i.gpuOriginForWebTexturesIsBottomLeft&&n.pixelStorei(n.UNPACK_FLIP_Y_WEBGL,!0),n.texImage2D(n.TEXTURE_2D,0,n.RGBA,n.RGBA,n.UNSIGNED_BYTE,e),t.i.gpuOriginForWebTexturesIsBottomLeft&&n.pixelStorei(n.UNPACK_FLIP_Y_WEBGL,!1);const[r,i]=sa(e);return!t.l||r===t.i.canvas.width&&i===t.i.canvas.height||(t.i.canvas.width=r,t.i.canvas.height=i),[r,i]}function ca(t,e,n){t.m||console.error(\"No wasm multistream support detected: ensure dependency inclusion of :gl_graph_runner_internal_multi_input target\");const r=new Uint32Array(e.length);for(let n=0;n<e.length;n++)r[n]=t.i.stringToNewUTF8(e[n]);e=t.i._malloc(4*r.length),t.i.HEAPU32.set(r,e>>2),n(e);for(const e of r)t.i._free(e);t.i._free(e)}function ha(t,e,n){t.i.simpleListeners=t.i.simpleListeners||{},t.i.simpleListeners[e]=n}function ua(t,e,n){let r=[];t.i.simpleListeners=t.i.simpleListeners||{},t.i.simpleListeners[e]=(t,e,i)=>{e?(n(r,i),r=[]):r.push(t)}}na.forVisionTasks=function(t){return ea(\"vision\",t)},na.forTextTasks=function(t){return ea(\"text\",t)},na.forGenAiExperimentalTasks=function(t){return ea(\"genai_experimental\",t)},na.forGenAiTasks=function(t){return ea(\"genai\",t)},na.forAudioTasks=function(t){return ea(\"audio\",t)},na.isSimdSupported=function(){return ta()};async function la(t,e,n,r){return t=await(async(t,e,n,r,i)=>{if(e&&await ia(e),!self.ModuleFactory)throw Error(\"ModuleFactory not set.\");if(n&&(await ia(n),!self.ModuleFactory))throw Error(\"ModuleFactory not set.\");return self.Module&&i&&((e=self.Module).locateFile=i.locateFile,i.mainScriptUrlOrBlob&&(e.mainScriptUrlOrBlob=i.mainScriptUrlOrBlob)),i=await self.ModuleFactory(self.Module||i),self.ModuleFactory=self.Module=void 0,new t(i,r)})(t,n.wasmLoaderPath,n.assetLoaderPath,e,{locateFile:t=>t.endsWith(\".wasm\")?n.wasmBinaryPath.toString():n.assetBinaryPath&&t.endsWith(\".data\")?n.assetBinaryPath.toString():t}),await t.o(r),t}function fa(t,e){const n=wn(t.baseOptions,zs,1)||new zs;\"string\"==typeof e?(nn(n,2,pe(e)),nn(n,1)):e instanceof Uint8Array&&(nn(n,1,lt(e,!1)),nn(n,2)),kn(t.baseOptions,0,1,n)}function da(t){try{const e=t.H.length;if(1===e)throw Error(t.H[0].message);if(e>1)throw Error(\"Encountered multiple errors: \"+t.H.map((t=>t.message)).join(\", \"))}finally{t.H=[]}}function pa(t,e){t.C=Math.max(t.C,e)}function ga(t,e){t.B=new cs,Cn(t.B,2,\"PassThroughCalculator\"),os(t.B,\"free_memory\"),as(t.B,\"free_memory_unused_out\"),ds(e,\"free_memory\"),fs(e,t.B)}function ma(t,e){os(t.B,e),as(t.B,e+\"_unused_out\")}function ya(t){t.g.addBoolToStream(!0,\"free_memory\",t.C)}var _a=class{constructor(t){this.g=t,this.H=[],this.C=0,this.g.setAutoRenderToScreen(!1)}l(t,e=!0){if(e){const e=t.baseOptions||{};if(t.baseOptions?.modelAssetBuffer&&t.baseOptions?.modelAssetPath)throw Error(\"Cannot set both baseOptions.modelAssetPath and baseOptions.modelAssetBuffer\");if(!(wn(this.baseOptions,zs,1)?.g()||wn(this.baseOptions,zs,1)?.l()||t.baseOptions?.modelAssetBuffer||t.baseOptions?.modelAssetPath))throw Error(\"Either baseOptions.modelAssetPath or baseOptions.modelAssetBuffer must be set\");if(function(t,e){let n=wn(t.baseOptions,Hs,3);if(!n){var r=n=new Hs,i=new ts;Sn(r,4,Ws,i)}\"delegate\"in e&&(\"GPU\"===e.delegate?(e=n,r=new $i,Sn(e,2,Ws,r)):(e=n,r=new ts,Sn(e,4,Ws,r))),kn(t.baseOptions,0,3,n)}(this,e),e.modelAssetPath)return fetch(e.modelAssetPath.toString()).then((t=>{if(t.ok)return t.arrayBuffer();throw Error(`Failed to fetch model: ${e.modelAssetPath} (${t.status})`)})).then((t=>{try{this.g.i.FS_unlink(\"/model.dat\")}catch{}this.g.i.FS_createDataFile(\"/\",\"model.dat\",new Uint8Array(t),!0,!1,!1),fa(this,\"/model.dat\"),this.m(),this.L()}));if(e.modelAssetBuffer instanceof Uint8Array)fa(this,e.modelAssetBuffer);else if(e.modelAssetBuffer)return async function(t){const e=[];for(var n=0;;){const{done:r,value:i}=await t.read();if(r)break;e.push(i),n+=i.length}if(0===e.length)return new Uint8Array(0);if(1===e.length)return e[0];t=new Uint8Array(n),n=0;for(const r of e)t.set(r,n),n+=r.length;return t}(e.modelAssetBuffer).then((t=>{fa(this,t),this.m(),this.L()}))}return this.m(),this.L(),Promise.resolve()}L(){}ca(){let t;if(this.g.ca((e=>{t=ys(e)})),!t)throw Error(\"Failed to retrieve CalculatorGraphConfig\");return t}setGraph(t,e){this.g.attachErrorListener(((t,e)=>{this.H.push(Error(e))})),this.g.Ja(),this.g.setGraph(t,e),this.B=void 0,da(this)}finishProcessing(){this.g.finishProcessing(),da(this)}close(){this.B=void 0,this.g.closeGraph()}};function va(t,e){if(!t)throw Error(`Unable to obtain required WebGL resource: ${e}`);return t}_a.prototype.close=_a.prototype.close;class Ea{constructor(t,e,n,r){this.g=t,this.h=e,this.m=n,this.l=r}bind(){this.g.bindVertexArray(this.h)}close(){this.g.deleteVertexArray(this.h),this.g.deleteBuffer(this.m),this.g.deleteBuffer(this.l)}}function wa(t,e,n){const r=t.g;if(n=va(r.createShader(n),\"Failed to create WebGL shader\"),r.shaderSource(n,e),r.compileShader(n),!r.getShaderParameter(n,r.COMPILE_STATUS))throw Error(`Could not compile WebGL shader: ${r.getShaderInfoLog(n)}`);return r.attachShader(t.h,n),n}function Ta(t,e){const n=t.g,r=va(n.createVertexArray(),\"Failed to create vertex array\");n.bindVertexArray(r);const i=va(n.createBuffer(),\"Failed to create buffer\");n.bindBuffer(n.ARRAY_BUFFER,i),n.enableVertexAttribArray(t.O),n.vertexAttribPointer(t.O,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW);const s=va(n.createBuffer(),\"Failed to create buffer\");return n.bindBuffer(n.ARRAY_BUFFER,s),n.enableVertexAttribArray(t.L),n.vertexAttribPointer(t.L,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array(e?[0,1,0,0,1,0,1,1]:[0,0,0,1,1,1,1,0]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.bindVertexArray(null),new Ea(n,r,i,s)}function Aa(t,e){if(t.g){if(e!==t.g)throw Error(\"Cannot change GL context once initialized\")}else t.g=e}function ba(t,e,n,r){return Aa(t,e),t.h||(t.m(),t.D()),n?(t.u||(t.u=Ta(t,!0)),n=t.u):(t.A||(t.A=Ta(t,!1)),n=t.A),e.useProgram(t.h),n.bind(),t.l(),t=r(),n.g.bindVertexArray(null),t}function ka(t,e,n){return Aa(t,e),t=va(e.createTexture(),\"Failed to create texture\"),e.bindTexture(e.TEXTURE_2D,t),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,n??e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,n??e.LINEAR),e.bindTexture(e.TEXTURE_2D,null),t}function Sa(t,e,n){Aa(t,e),t.B||(t.B=va(e.createFramebuffer(),\"Failed to create framebuffe.\")),e.bindFramebuffer(e.FRAMEBUFFER,t.B),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,n,0)}function xa(t){t.g?.bindFramebuffer(t.g.FRAMEBUFFER,null)}var La=class{H(){return\"\\n precision mediump float;\\n varying vec2 vTex;\\n uniform sampler2D inputTexture;\\n void main() {\\n gl_FragColor = texture2D(inputTexture, vTex);\\n }\\n \"}m(){const t=this.g;if(this.h=va(t.createProgram(),\"Failed to create WebGL program\"),this.X=wa(this,\"\\n attribute vec2 aVertex;\\n attribute vec2 aTex;\\n varying vec2 vTex;\\n void main(void) {\\n gl_Position = vec4(aVertex, 0.0, 1.0);\\n vTex = aTex;\\n }\",t.VERTEX_SHADER),this.W=wa(this,this.H(),t.FRAGMENT_SHADER),t.linkProgram(this.h),!t.getProgramParameter(this.h,t.LINK_STATUS))throw Error(`Error during program linking: ${t.getProgramInfoLog(this.h)}`);this.O=t.getAttribLocation(this.h,\"aVertex\"),this.L=t.getAttribLocation(this.h,\"aTex\")}D(){}l(){}close(){if(this.h){const t=this.g;t.deleteProgram(this.h),t.deleteShader(this.X),t.deleteShader(this.W)}this.B&&this.g.deleteFramebuffer(this.B),this.A&&this.A.close(),this.u&&this.u.close()}};var Ra=class extends La{H(){return\"\\n precision mediump float;\\n uniform sampler2D backgroundTexture;\\n uniform sampler2D maskTexture;\\n uniform sampler2D colorMappingTexture;\\n varying vec2 vTex;\\n void main() {\\n vec4 backgroundColor = texture2D(backgroundTexture, vTex);\\n float category = texture2D(maskTexture, vTex).r;\\n vec4 categoryColor = texture2D(colorMappingTexture, vec2(category, 0.0));\\n gl_FragColor = mix(backgroundColor, categoryColor, categoryColor.a);\\n }\\n \"}D(){const t=this.g;t.activeTexture(t.TEXTURE1),this.C=ka(this,t,t.LINEAR),t.activeTexture(t.TEXTURE2),this.j=ka(this,t,t.NEAREST)}m(){super.m();const t=this.g;this.P=va(t.getUniformLocation(this.h,\"backgroundTexture\"),\"Uniform location\"),this.U=va(t.getUniformLocation(this.h,\"colorMappingTexture\"),\"Uniform location\"),this.M=va(t.getUniformLocation(this.h,\"maskTexture\"),\"Uniform location\")}l(){super.l();const t=this.g;t.uniform1i(this.M,0),t.uniform1i(this.P,1),t.uniform1i(this.U,2)}close(){this.C&&this.g.deleteTexture(this.C),this.j&&this.g.deleteTexture(this.j),super.close()}},Ia=class extends La{H(){return\"\\n precision mediump float;\\n uniform sampler2D maskTexture;\\n uniform sampler2D defaultTexture;\\n uniform sampler2D overlayTexture;\\n varying vec2 vTex;\\n void main() {\\n float confidence = texture2D(maskTexture, vTex).r;\\n vec4 defaultColor = texture2D(defaultTexture, vTex);\\n vec4 overlayColor = texture2D(overlayTexture, vTex);\\n // Apply the alpha from the overlay and merge in the default color\\n overlayColor = mix(defaultColor, overlayColor, overlayColor.a);\\n gl_FragColor = mix(defaultColor, overlayColor, confidence);\\n }\\n \"}D(){const t=this.g;t.activeTexture(t.TEXTURE1),this.j=ka(this,t),t.activeTexture(t.TEXTURE2),this.C=ka(this,t)}m(){super.m();const t=this.g;this.M=va(t.getUniformLocation(this.h,\"defaultTexture\"),\"Uniform location\"),this.P=va(t.getUniformLocation(this.h,\"overlayTexture\"),\"Uniform location\"),this.I=va(t.getUniformLocation(this.h,\"maskTexture\"),\"Uniform location\")}l(){super.l();const t=this.g;t.uniform1i(this.I,0),t.uniform1i(this.M,1),t.uniform1i(this.P,2)}close(){this.j&&this.g.deleteTexture(this.j),this.C&&this.g.deleteTexture(this.C),super.close()}};function Fa(t,e){switch(e){case 0:return t.g.find((t=>t instanceof Uint8Array));case 1:return t.g.find((t=>t instanceof Float32Array));case 2:return t.g.find((t=>\"undefined\"!=typeof WebGLTexture&&t instanceof WebGLTexture));default:throw Error(`Type is not supported: ${e}`)}}function Ma(t){var e=Fa(t,1);if(!e){if(e=Fa(t,0))e=new Float32Array(e).map((t=>t/255));else{e=new Float32Array(t.width*t.height);const r=Ca(t);var n=Na(t);if(Sa(n,r,Pa(t)),\"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod\".split(\";\").includes(navigator.platform)||navigator.userAgent.includes(\"Mac\")&&\"document\"in self&&\"ontouchend\"in self.document){n=new Float32Array(t.width*t.height*4),r.readPixels(0,0,t.width,t.height,r.RGBA,r.FLOAT,n);for(let t=0,r=0;t<e.length;++t,r+=4)e[t]=n[r]}else r.readPixels(0,0,t.width,t.height,r.RED,r.FLOAT,e)}t.g.push(e)}return e}function Pa(t){let e=Fa(t,2);if(!e){const n=Ca(t);e=Ua(t);const r=Ma(t),i=Oa(t);n.texImage2D(n.TEXTURE_2D,0,i,t.width,t.height,0,n.RED,n.FLOAT,r),Da(t)}return e}function Ca(t){if(!t.canvas)throw Error(\"Conversion to different image formats require that a canvas is passed when initializing the image.\");return t.h||(t.h=va(t.canvas.getContext(\"webgl2\"),\"You cannot use a canvas that is already bound to a different type of rendering context.\")),t.h}function Oa(t){if(t=Ca(t),!Ba)if(t.getExtension(\"EXT_color_buffer_float\")&&t.getExtension(\"OES_texture_float_linear\")&&t.getExtension(\"EXT_float_blend\"))Ba=t.R32F;else{if(!t.getExtension(\"EXT_color_buffer_half_float\"))throw Error(\"GPU does not fully support 4-channel float32 or float16 formats\");Ba=t.R16F}return Ba}function Na(t){return t.l||(t.l=new La),t.l}function Ua(t){const e=Ca(t);e.viewport(0,0,t.width,t.height),e.activeTexture(e.TEXTURE0);let n=Fa(t,2);return n||(n=ka(Na(t),e,t.m?e.LINEAR:e.NEAREST),t.g.push(n),t.j=!0),e.bindTexture(e.TEXTURE_2D,n),n}function Da(t){t.h.bindTexture(t.h.TEXTURE_2D,null)}var Ba,Ga=class{constructor(t,e,n,r,i,s,o){this.g=t,this.m=e,this.j=n,this.canvas=r,this.l=i,this.width=s,this.height=o,this.j&&(0===--ja&&console.error(\"You seem to be creating MPMask instances without invoking .close(). This leaks resources.\"))}Fa(){return!!Fa(this,0)}ka(){return!!Fa(this,1)}R(){return!!Fa(this,2)}ja(){return(e=Fa(t=this,0))||(e=Ma(t),e=new Uint8Array(e.map((t=>Math.round(255*t)))),t.g.push(e)),e;var t,e}ia(){return Ma(this)}N(){return Pa(this)}clone(){const t=[];for(const e of this.g){let n;if(e instanceof Uint8Array)n=new Uint8Array(e);else if(e instanceof Float32Array)n=new Float32Array(e);else{if(!(e instanceof WebGLTexture))throw Error(`Type is not supported: ${e}`);{const t=Ca(this),e=Na(this);t.activeTexture(t.TEXTURE1),n=ka(e,t,this.m?t.LINEAR:t.NEAREST),t.bindTexture(t.TEXTURE_2D,n);const r=Oa(this);t.texImage2D(t.TEXTURE_2D,0,r,this.width,this.height,0,t.RED,t.FLOAT,null),t.bindTexture(t.TEXTURE_2D,null),Sa(e,t,n),ba(e,t,!1,(()=>{Ua(this),t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),t.drawArrays(t.TRIANGLE_FAN,0,4),Da(this)})),xa(e),Da(this)}}t.push(n)}return new Ga(t,this.m,this.R(),this.canvas,this.l,this.width,this.height)}close(){this.j&&Ca(this).deleteTexture(Fa(this,2)),ja=-1}};Ga.prototype.close=Ga.prototype.close,Ga.prototype.clone=Ga.prototype.clone,Ga.prototype.getAsWebGLTexture=Ga.prototype.N,Ga.prototype.getAsFloat32Array=Ga.prototype.ia,Ga.prototype.getAsUint8Array=Ga.prototype.ja,Ga.prototype.hasWebGLTexture=Ga.prototype.R,Ga.prototype.hasFloat32Array=Ga.prototype.ka,Ga.prototype.hasUint8Array=Ga.prototype.Fa;var ja=250;const Va={color:\"white\",lineWidth:4,radius:6};function Xa(t){return{...Va,fillColor:(t=t||{}).color,...t}}function Ha(t,e){return t instanceof Function?t(e):t}function Wa(t,e,n){return Math.max(Math.min(e,n),Math.min(Math.max(e,n),t))}function za(t){if(!t.l)throw Error(\"CPU rendering requested but CanvasRenderingContext2D not provided.\");return t.l}function Ka(t){if(!t.j)throw Error(\"GPU rendering requested but WebGL2RenderingContext not provided.\");return t.j}function Ya(t,e,n){if(e.R())n(e.N());else{const r=e.ka()?e.ia():e.ja();t.m=t.m??new La;const i=Ka(t);n((t=new Ga([r],e.m,!1,i.canvas,t.m,e.width,e.height)).N()),t.close()}}function qa(t,e,n,r){const i=function(t){return t.g||(t.g=new Ra),t.g}(t),s=Ka(t),o=Array.isArray(n)?new ImageData(new Uint8ClampedArray(n),1,1):n;ba(i,s,!0,(()=>{!function(t,e,n,r){const i=t.g;if(i.activeTexture(i.TEXTURE0),i.bindTexture(i.TEXTURE_2D,e),i.activeTexture(i.TEXTURE1),i.bindTexture(i.TEXTURE_2D,t.C),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,n),t.I&&function(t,e){if(t!==e)return!1;t=t.entries(),e=e.entries();for(const[r,i]of t){t=r;const s=i;var n=e.next();if(n.done)return!1;const[o,a]=n.value;if(n=a,t!==o||s[0]!==n[0]||s[1]!==n[1]||s[2]!==n[2]||s[3]!==n[3])return!1}return!!e.next().done}(t.I,r))i.activeTexture(i.TEXTURE2),i.bindTexture(i.TEXTURE_2D,t.j);else{t.I=r;const e=Array(1024).fill(0);r.forEach(((t,n)=>{if(4!==t.length)throw Error(`Color at index ${n} is not a four-channel value.`);e[4*n]=t[0],e[4*n+1]=t[1],e[4*n+2]=t[2],e[4*n+3]=t[3]})),i.activeTexture(i.TEXTURE2),i.bindTexture(i.TEXTURE_2D,t.j),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,256,1,0,i.RGBA,i.UNSIGNED_BYTE,new Uint8Array(e))}}(i,e,o,r),s.clearColor(0,0,0,0),s.clear(s.COLOR_BUFFER_BIT),s.drawArrays(s.TRIANGLE_FAN,0,4);const t=i.g;t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,null)}))}function $a(t,e,n,r){const i=Ka(t),s=function(t){return t.h||(t.h=new Ia),t.h}(t),o=Array.isArray(n)?new ImageData(new Uint8ClampedArray(n),1,1):n,a=Array.isArray(r)?new ImageData(new Uint8ClampedArray(r),1,1):r;ba(s,i,!0,(()=>{var t=s.g;t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,e),t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,s.j),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,o),t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,s.C),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,a),i.clearColor(0,0,0,0),i.clear(i.COLOR_BUFFER_BIT),i.drawArrays(i.TRIANGLE_FAN,0,4),i.bindTexture(i.TEXTURE_2D,null),(t=s.g).activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,null)}))}var Ja=class{constructor(t,e){\"undefined\"!=typeof CanvasRenderingContext2D&&t instanceof CanvasRenderingContext2D||t instanceof OffscreenCanvasRenderingContext2D?(this.l=t,this.j=e):this.j=t}ya(t,e){if(t){var n=za(this);e=Xa(e),n.save();var r=n.canvas,i=0;for(const s of t)n.fillStyle=Ha(e.fillColor,{index:i,from:s}),n.strokeStyle=Ha(e.color,{index:i,from:s}),n.lineWidth=Ha(e.lineWidth,{index:i,from:s}),(t=new Path2D).arc(s.x*r.width,s.y*r.height,Ha(e.radius,{index:i,from:s}),0,2*Math.PI),n.fill(t),n.stroke(t),++i;n.restore()}}xa(t,e,n){if(t&&e){var r=za(this);n=Xa(n),r.save();var i=r.canvas,s=0;for(const o of e){r.beginPath(),e=t[o.start];const a=t[o.end];e&&a&&(r.strokeStyle=Ha(n.color,{index:s,from:e,to:a}),r.lineWidth=Ha(n.lineWidth,{index:s,from:e,to:a}),r.moveTo(e.x*i.width,e.y*i.height),r.lineTo(a.x*i.width,a.y*i.height)),++s,r.stroke()}r.restore()}}ua(t,e){const n=za(this);e=Xa(e),n.save(),n.beginPath(),n.lineWidth=Ha(e.lineWidth,{}),n.strokeStyle=Ha(e.color,{}),n.fillStyle=Ha(e.fillColor,{}),n.moveTo(t.originX,t.originY),n.lineTo(t.originX+t.width,t.originY),n.lineTo(t.originX+t.width,t.originY+t.height),n.lineTo(t.originX,t.originY+t.height),n.lineTo(t.originX,t.originY),n.stroke(),n.fill(),n.restore()}va(t,e,n=[0,0,0,255]){this.l?function(t,e,n,r){const i=Ka(t);Ya(t,e,(e=>{qa(t,e,n,r),(e=za(t)).drawImage(i.canvas,0,0,e.canvas.width,e.canvas.height)}))}(this,t,n,e):qa(this,t.N(),n,e)}wa(t,e,n){this.l?function(t,e,n,r){const i=Ka(t);Ya(t,e,(e=>{$a(t,e,n,r),(e=za(t)).drawImage(i.canvas,0,0,e.canvas.width,e.canvas.height)}))}(this,t,e,n):$a(this,t.N(),e,n)}close(){this.g?.close(),this.g=void 0,this.h?.close(),this.h=void 0,this.m?.close(),this.m=void 0}};function Za(t,e){switch(e){case 0:return t.g.find((t=>t instanceof ImageData));case 1:return t.g.find((t=>\"undefined\"!=typeof ImageBitmap&&t instanceof ImageBitmap));case 2:return t.g.find((t=>\"undefined\"!=typeof WebGLTexture&&t instanceof WebGLTexture));default:throw Error(`Type is not supported: ${e}`)}}function Qa(t){var e=Za(t,0);if(!e){e=ec(t);const n=nc(t),r=new Uint8Array(t.width*t.height*4);Sa(n,e,tc(t)),e.readPixels(0,0,t.width,t.height,e.RGBA,e.UNSIGNED_BYTE,r),xa(n),e=new ImageData(new Uint8ClampedArray(r.buffer),t.width,t.height),t.g.push(e)}return e}function tc(t){let e=Za(t,2);if(!e){const n=ec(t);e=rc(t);const r=Za(t,1)||Qa(t);n.texImage2D(n.TEXTURE_2D,0,n.RGBA,n.RGBA,n.UNSIGNED_BYTE,r),ic(t)}return e}function ec(t){if(!t.canvas)throw Error(\"Conversion to different image formats require that a canvas is passed when initializing the image.\");return t.h||(t.h=va(t.canvas.getContext(\"webgl2\"),\"You cannot use a canvas that is already bound to a different type of rendering context.\")),t.h}function nc(t){return t.l||(t.l=new La),t.l}function rc(t){const e=ec(t);e.viewport(0,0,t.width,t.height),e.activeTexture(e.TEXTURE0);let n=Za(t,2);return n||(n=ka(nc(t),e),t.g.push(n),t.m=!0),e.bindTexture(e.TEXTURE_2D,n),n}function ic(t){t.h.bindTexture(t.h.TEXTURE_2D,null)}function sc(t){const e=ec(t);return ba(nc(t),e,!0,(()=>function(t,e){const n=t.canvas;if(n.width===t.width&&n.height===t.height)return e();const r=n.width,i=n.height;return n.width=t.width,n.height=t.height,t=e(),n.width=r,n.height=i,t}(t,(()=>{if(e.bindFramebuffer(e.FRAMEBUFFER,null),e.clearColor(0,0,0,0),e.clear(e.COLOR_BUFFER_BIT),e.drawArrays(e.TRIANGLE_FAN,0,4),!(t.canvas instanceof OffscreenCanvas))throw Error(\"Conversion to ImageBitmap requires that the MediaPipe Tasks is initialized with an OffscreenCanvas\");return t.canvas.transferToImageBitmap()}))))}Ja.prototype.close=Ja.prototype.close,Ja.prototype.drawConfidenceMask=Ja.prototype.wa,Ja.prototype.drawCategoryMask=Ja.prototype.va,Ja.prototype.drawBoundingBox=Ja.prototype.ua,Ja.prototype.drawConnectors=Ja.prototype.xa,Ja.prototype.drawLandmarks=Ja.prototype.ya,Ja.lerp=function(t,e,n,r,i){return Wa(r*(1-(t-e)/(n-e))+i*(1-(n-t)/(n-e)),r,i)},Ja.clamp=Wa;var oc=class{constructor(t,e,n,r,i,s,o){this.g=t,this.j=e,this.m=n,this.canvas=r,this.l=i,this.width=s,this.height=o,(this.j||this.m)&&(0===--ac&&console.error(\"You seem to be creating MPImage instances without invoking .close(). This leaks resources.\"))}Ea(){return!!Za(this,0)}la(){return!!Za(this,1)}R(){return!!Za(this,2)}Ca(){return Qa(this)}Ba(){var t=Za(this,1);return t||(tc(this),rc(this),t=sc(this),ic(this),this.g.push(t),this.j=!0),t}N(){return tc(this)}clone(){const t=[];for(const e of this.g){let n;if(e instanceof ImageData)n=new ImageData(e.data,this.width,this.height);else if(e instanceof WebGLTexture){const t=ec(this),e=nc(this);t.activeTexture(t.TEXTURE1),n=ka(e,t),t.bindTexture(t.TEXTURE_2D,n),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,this.width,this.height,0,t.RGBA,t.UNSIGNED_BYTE,null),t.bindTexture(t.TEXTURE_2D,null),Sa(e,t,n),ba(e,t,!1,(()=>{rc(this),t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),t.drawArrays(t.TRIANGLE_FAN,0,4),ic(this)})),xa(e),ic(this)}else{if(!(e instanceof ImageBitmap))throw Error(`Type is not supported: ${e}`);tc(this),rc(this),n=sc(this),ic(this)}t.push(n)}return new oc(t,this.la(),this.R(),this.canvas,this.l,this.width,this.height)}close(){this.j&&Za(this,1).close(),this.m&&ec(this).deleteTexture(Za(this,2)),ac=-1}};oc.prototype.close=oc.prototype.close,oc.prototype.clone=oc.prototype.clone,oc.prototype.getAsWebGLTexture=oc.prototype.N,oc.prototype.getAsImageBitmap=oc.prototype.Ba,oc.prototype.getAsImageData=oc.prototype.Ca,oc.prototype.hasWebGLTexture=oc.prototype.R,oc.prototype.hasImageBitmap=oc.prototype.la,oc.prototype.hasImageData=oc.prototype.Ea;var ac=250;function cc(...t){return t.map((([t,e])=>({start:t,end:e})))}const hc=function(t){return class extends t{Ja(){this.i._registerModelResourcesGraphService()}}}((uc=class{constructor(t,e){this.l=!0,this.i=t,this.g=null,this.h=0,this.m=\"function\"==typeof this.i._addIntToInputStream,void 0!==e?this.i.canvas=e:ra()?this.i.canvas=new OffscreenCanvas(1,1):(console.warn(\"OffscreenCanvas not supported and GraphRunner constructor glCanvas parameter is undefined. Creating backup canvas.\"),this.i.canvas=document.createElement(\"canvas\"))}async initializeGraph(t){const e=await(await fetch(t)).arrayBuffer();t=!(t.endsWith(\".pbtxt\")||t.endsWith(\".textproto\")),this.setGraph(new Uint8Array(e),t)}setGraphFromString(t){this.setGraph((new TextEncoder).encode(t),!1)}setGraph(t,e){const n=t.length,r=this.i._malloc(n);this.i.HEAPU8.set(t,r),e?this.i._changeBinaryGraph(n,r):this.i._changeTextGraph(n,r),this.i._free(r)}configureAudio(t,e,n,r,i){this.i._configureAudio||console.warn('Attempting to use configureAudio without support for input audio. Is build dep \":gl_graph_runner_audio\" missing?'),oa(this,r||\"input_audio\",(r=>{oa(this,i=i||\"audio_header\",(i=>{this.i._configureAudio(r,i,t,e??0,n)}))}))}setAutoResizeCanvas(t){this.l=t}setAutoRenderToScreen(t){this.i._setAutoRenderToScreen(t)}setGpuBufferVerticalFlip(t){this.i.gpuOriginForWebTexturesIsBottomLeft=t}ca(t){ha(this,\"__graph_config__\",(e=>{t(e)})),oa(this,\"__graph_config__\",(t=>{this.i._getGraphConfig(t,void 0)})),delete this.i.simpleListeners.__graph_config__}attachErrorListener(t){this.i.errorListener=t}attachEmptyPacketListener(t,e){this.i.emptyPacketListeners=this.i.emptyPacketListeners||{},this.i.emptyPacketListeners[t]=e}addAudioToStream(t,e,n){this.addAudioToStreamWithShape(t,0,0,e,n)}addAudioToStreamWithShape(t,e,n,r,i){const s=4*t.length;this.h!==s&&(this.g&&this.i._free(this.g),this.g=this.i._malloc(s),this.h=s),this.i.HEAPF32.set(t,this.g/4),oa(this,r,(t=>{this.i._addAudioToInputStream(this.g,e,n,t,i)}))}addGpuBufferToStream(t,e,n){oa(this,e,(e=>{const[r,i]=aa(this,t,e);this.i._addBoundTextureToStream(e,r,i,n)}))}addBoolToStream(t,e,n){oa(this,e,(e=>{this.i._addBoolToInputStream(t,e,n)}))}addDoubleToStream(t,e,n){oa(this,e,(e=>{this.i._addDoubleToInputStream(t,e,n)}))}addFloatToStream(t,e,n){oa(this,e,(e=>{this.i._addFloatToInputStream(t,e,n)}))}addIntToStream(t,e,n){oa(this,e,(e=>{this.i._addIntToInputStream(t,e,n)}))}addUintToStream(t,e,n){oa(this,e,(e=>{this.i._addUintToInputStream(t,e,n)}))}addStringToStream(t,e,n){oa(this,e,(e=>{oa(this,t,(t=>{this.i._addStringToInputStream(t,e,n)}))}))}addStringRecordToStream(t,e,n){oa(this,e,(e=>{ca(this,Object.keys(t),(r=>{ca(this,Object.values(t),(i=>{this.i._addFlatHashMapToInputStream(r,i,Object.keys(t).length,e,n)}))}))}))}addProtoToStream(t,e,n,r){oa(this,n,(n=>{oa(this,e,(e=>{const i=this.i._malloc(t.length);this.i.HEAPU8.set(t,i),this.i._addProtoToInputStream(i,t.length,e,n,r),this.i._free(i)}))}))}addEmptyPacketToStream(t,e){oa(this,t,(t=>{this.i._addEmptyPacketToInputStream(t,e)}))}addBoolVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateBoolVector(t.length);if(!r)throw Error(\"Unable to allocate new bool vector on heap.\");for(const e of t)this.i._addBoolVectorEntry(r,e);this.i._addBoolVectorToInputStream(r,e,n)}))}addDoubleVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateDoubleVector(t.length);if(!r)throw Error(\"Unable to allocate new double vector on heap.\");for(const e of t)this.i._addDoubleVectorEntry(r,e);this.i._addDoubleVectorToInputStream(r,e,n)}))}addFloatVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateFloatVector(t.length);if(!r)throw Error(\"Unable to allocate new float vector on heap.\");for(const e of t)this.i._addFloatVectorEntry(r,e);this.i._addFloatVectorToInputStream(r,e,n)}))}addIntVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateIntVector(t.length);if(!r)throw Error(\"Unable to allocate new int vector on heap.\");for(const e of t)this.i._addIntVectorEntry(r,e);this.i._addIntVectorToInputStream(r,e,n)}))}addUintVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateUintVector(t.length);if(!r)throw Error(\"Unable to allocate new unsigned int vector on heap.\");for(const e of t)this.i._addUintVectorEntry(r,e);this.i._addUintVectorToInputStream(r,e,n)}))}addStringVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateStringVector(t.length);if(!r)throw Error(\"Unable to allocate new string vector on heap.\");for(const e of t)oa(this,e,(t=>{this.i._addStringVectorEntry(r,t)}));this.i._addStringVectorToInputStream(r,e,n)}))}addBoolToInputSidePacket(t,e){oa(this,e,(e=>{this.i._addBoolToInputSidePacket(t,e)}))}addDoubleToInputSidePacket(t,e){oa(this,e,(e=>{this.i._addDoubleToInputSidePacket(t,e)}))}addFloatToInputSidePacket(t,e){oa(this,e,(e=>{this.i._addFloatToInputSidePacket(t,e)}))}addIntToInputSidePacket(t,e){oa(this,e,(e=>{this.i._addIntToInputSidePacket(t,e)}))}addUintToInputSidePacket(t,e){oa(this,e,(e=>{this.i._addUintToInputSidePacket(t,e)}))}addStringToInputSidePacket(t,e){oa(this,e,(e=>{oa(this,t,(t=>{this.i._addStringToInputSidePacket(t,e)}))}))}addProtoToInputSidePacket(t,e,n){oa(this,n,(n=>{oa(this,e,(e=>{const r=this.i._malloc(t.length);this.i.HEAPU8.set(t,r),this.i._addProtoToInputSidePacket(r,t.length,e,n),this.i._free(r)}))}))}addBoolVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateBoolVector(t.length);if(!n)throw Error(\"Unable to allocate new bool vector on heap.\");for(const e of t)this.i._addBoolVectorEntry(n,e);this.i._addBoolVectorToInputSidePacket(n,e)}))}addDoubleVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateDoubleVector(t.length);if(!n)throw Error(\"Unable to allocate new double vector on heap.\");for(const e of t)this.i._addDoubleVectorEntry(n,e);this.i._addDoubleVectorToInputSidePacket(n,e)}))}addFloatVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateFloatVector(t.length);if(!n)throw Error(\"Unable to allocate new float vector on heap.\");for(const e of t)this.i._addFloatVectorEntry(n,e);this.i._addFloatVectorToInputSidePacket(n,e)}))}addIntVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateIntVector(t.length);if(!n)throw Error(\"Unable to allocate new int vector on heap.\");for(const e of t)this.i._addIntVectorEntry(n,e);this.i._addIntVectorToInputSidePacket(n,e)}))}addUintVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateUintVector(t.length);if(!n)throw Error(\"Unable to allocate new unsigned int vector on heap.\");for(const e of t)this.i._addUintVectorEntry(n,e);this.i._addUintVectorToInputSidePacket(n,e)}))}addStringVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateStringVector(t.length);if(!n)throw Error(\"Unable to allocate new string vector on heap.\");for(const e of t)oa(this,e,(t=>{this.i._addStringVectorEntry(n,t)}));this.i._addStringVectorToInputSidePacket(n,e)}))}attachBoolListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachBoolListener(t)}))}attachBoolVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachBoolVectorListener(t)}))}attachIntListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachIntListener(t)}))}attachIntVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachIntVectorListener(t)}))}attachUintListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachUintListener(t)}))}attachUintVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachUintVectorListener(t)}))}attachDoubleListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachDoubleListener(t)}))}attachDoubleVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachDoubleVectorListener(t)}))}attachFloatListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachFloatListener(t)}))}attachFloatVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachFloatVectorListener(t)}))}attachStringListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachStringListener(t)}))}attachStringVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachStringVectorListener(t)}))}attachProtoListener(t,e,n){ha(this,t,e),oa(this,t,(t=>{this.i._attachProtoListener(t,n||!1)}))}attachProtoVectorListener(t,e,n){ua(this,t,e),oa(this,t,(t=>{this.i._attachProtoVectorListener(t,n||!1)}))}attachAudioListener(t,e,n){this.i._attachAudioListener||console.warn('Attempting to use attachAudioListener without support for output audio. Is build dep \":gl_graph_runner_audio_out\" missing?'),ha(this,t,((t,n)=>{t=new Float32Array(t.buffer,t.byteOffset,t.length/4),e(t,n)})),oa(this,t,(t=>{this.i._attachAudioListener(t,n||!1)}))}finishProcessing(){this.i._waitUntilIdle()}closeGraph(){this.i._closeGraph(),this.i.simpleListeners=void 0,this.i.emptyPacketListeners=void 0}},class extends uc{get ga(){return this.i}pa(t,e,n){oa(this,e,(e=>{const[r,i]=aa(this,t,e);this.ga._addBoundTextureAsImageToStream(e,r,i,n)}))}Z(t,e){ha(this,t,e),oa(this,t,(t=>{this.ga._attachImageListener(t)}))}aa(t,e){ua(this,t,e),oa(this,t,(t=>{this.ga._attachImageVectorListener(t)}))}}));var uc,lc=class extends hc{};async function fc(t,e,n){return async function(t,e,n,r){return la(t,e,n,r)}(t,n.canvas??(ra()?void 0:document.createElement(\"canvas\")),e,n)}function dc(t,e,n,r){if(t.U){const s=new Ms;if(n?.regionOfInterest){if(!t.oa)throw Error(\"This task doesn't support region-of-interest.\");var i=n.regionOfInterest;if(i.left>=i.right||i.top>=i.bottom)throw Error(\"Expected RectF with left < right and top < bottom.\");if(i.left<0||i.top<0||i.right>1||i.bottom>1)throw Error(\"Expected RectF values to be in [0,1].\");Pn(s,1,(i.left+i.right)/2),Pn(s,2,(i.top+i.bottom)/2),Pn(s,4,i.right-i.left),Pn(s,3,i.bottom-i.top)}else Pn(s,1,.5),Pn(s,2,.5),Pn(s,4,1),Pn(s,3,1);if(n?.rotationDegrees){if(n?.rotationDegrees%90!=0)throw Error(\"Expected rotation to be a multiple of 90°.\");if(Pn(s,5,-Math.PI*n.rotationDegrees/180),n?.rotationDegrees%180!=0){const[t,r]=sa(e);n=Fn(s,3)*r/t,i=Fn(s,4)*t/r,Pn(s,4,n),Pn(s,3,i)}}t.g.addProtoToStream(s.g(),\"mediapipe.NormalizedRect\",t.U,r)}t.g.pa(e,t.X,r??performance.now()),t.finishProcessing()}function pc(t,e,n){if(t.baseOptions?.g())throw Error(\"Task is not initialized with image mode. 'runningMode' must be set to 'IMAGE'.\");dc(t,e,n,t.C+1)}function gc(t,e,n,r){if(!t.baseOptions?.g())throw Error(\"Task is not initialized with video mode. 'runningMode' must be set to 'VIDEO'.\");dc(t,e,n,r)}function mc(t,e,n,r){var i=e.data;const s=e.width,o=s*(e=e.height);if((i instanceof Uint8Array||i instanceof Float32Array)&&i.length!==o)throw Error(\"Unsupported channel count: \"+i.length/o);return t=new Ga([i],n,!1,t.g.i.canvas,t.P,s,e),r?t.clone():t}var yc=class extends _a{constructor(t,e,n,r){super(t),this.g=t,this.X=e,this.U=n,this.oa=r,this.P=new La}l(t,e=!0){if(\"runningMode\"in t&&nn(this.baseOptions,2,te(!!t.runningMode&&\"IMAGE\"!==t.runningMode)),void 0!==t.canvas&&this.g.i.canvas!==t.canvas)throw Error(\"You must create a new task to reset the canvas.\");return super.l(t,e)}close(){this.P.close(),super.close()}};yc.prototype.close=yc.prototype.close;var _c=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect_in\",!1),this.j={detections:[]},kn(t=this.h=new $s,0,1,e=new Ks),Pn(this.h,2,.5),Pn(this.h,3,.3)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return\"minDetectionConfidence\"in t&&Pn(this.h,2,t.minDetectionConfidence??.5),\"minSuppressionThreshold\"in t&&Pn(this.h,3,t.minSuppressionThreshold??.3),this.l(t)}F(t,e){return this.j={detections:[]},pc(this,t,e),this.j}G(t,e,n){return this.j={detections:[]},gc(this,t,n,e),this.j}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect_in\"),ps(t,\"detections\");const e=new rs;Mr(e,Zs,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.face_detector.FaceDetectorGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect_in\"),as(n,\"DETECTIONS:detections\"),n.o(e),fs(t,n),this.g.attachProtoVectorListener(\"detections\",((t,e)=>{for(const e of t)t=ks(e),this.j.detections.push(Ko(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"detections\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};_c.prototype.detectForVideo=_c.prototype.G,_c.prototype.detect=_c.prototype.F,_c.prototype.setOptions=_c.prototype.o,_c.createFromModelPath=async function(t,e){return fc(_c,t,{baseOptions:{modelAssetPath:e}})},_c.createFromModelBuffer=function(t,e){return fc(_c,t,{baseOptions:{modelAssetBuffer:e}})},_c.createFromOptions=function(t,e){return fc(_c,t,e)};var vc=cc([61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]),Ec=cc([263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]),wc=cc([276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]),Tc=cc([474,475],[475,476],[476,477],[477,474]),Ac=cc([33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]),bc=cc([46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]),kc=cc([469,470],[470,471],[471,472],[472,469]),Sc=cc([10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]),xc=[...vc,...Ec,...wc,...Ac,...bc,...Sc],Lc=cc([127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]);function Rc(t){t.j={faceLandmarks:[],faceBlendshapes:[],facialTransformationMatrixes:[]}}var Ic=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!1),this.j={faceLandmarks:[],faceBlendshapes:[],facialTransformationMatrixes:[]},this.outputFacialTransformationMatrixes=this.outputFaceBlendshapes=!1,kn(t=this.h=new eo,0,1,e=new Ks),this.A=new to,kn(this.h,0,3,this.A),this.u=new $s,kn(this.h,0,2,this.u),Mn(this.u,4,1),Pn(this.u,2,.5),Pn(this.A,2,.5),Pn(this.h,4,.5)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return\"numFaces\"in t&&Mn(this.u,4,t.numFaces??1),\"minFaceDetectionConfidence\"in t&&Pn(this.u,2,t.minFaceDetectionConfidence??.5),\"minTrackingConfidence\"in t&&Pn(this.h,4,t.minTrackingConfidence??.5),\"minFacePresenceConfidence\"in t&&Pn(this.A,2,t.minFacePresenceConfidence??.5),\"outputFaceBlendshapes\"in t&&(this.outputFaceBlendshapes=!!t.outputFaceBlendshapes),\"outputFacialTransformationMatrixes\"in t&&(this.outputFacialTransformationMatrixes=!!t.outputFacialTransformationMatrixes),this.l(t)}F(t,e){return Rc(this),pc(this,t,e),this.j}G(t,e,n){return Rc(this),gc(this,t,n,e),this.j}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\"),ps(t,\"face_landmarks\");const e=new rs;Mr(e,ro,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.face_landmarker.FaceLandmarkerGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"NORM_LANDMARKS:face_landmarks\"),n.o(e),fs(t,n),this.g.attachProtoVectorListener(\"face_landmarks\",((t,e)=>{for(const e of t)t=Rs(e),this.j.faceLandmarks.push(Yo(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"face_landmarks\",(t=>{pa(this,t)})),this.outputFaceBlendshapes&&(ps(t,\"blendshapes\"),as(n,\"BLENDSHAPES:blendshapes\"),this.g.attachProtoVectorListener(\"blendshapes\",((t,e)=>{if(this.outputFaceBlendshapes)for(const e of t)t=ws(e),this.j.faceBlendshapes.push(Wo(t.g()??[]));pa(this,e)})),this.g.attachEmptyPacketListener(\"blendshapes\",(t=>{pa(this,t)}))),this.outputFacialTransformationMatrixes&&(ps(t,\"face_geometry\"),as(n,\"FACE_GEOMETRY:face_geometry\"),this.g.attachProtoVectorListener(\"face_geometry\",((t,e)=>{if(this.outputFacialTransformationMatrixes)for(const e of t)(t=wn(t=Qs(e),Is,2))&&this.j.facialTransformationMatrixes.push({rows:Rn(t,1)??0??0,columns:Rn(t,2)??0??0,data:on(t,3,Qt,sn()).slice()??[]});pa(this,e)})),this.g.attachEmptyPacketListener(\"face_geometry\",(t=>{pa(this,t)}))),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Ic.prototype.detectForVideo=Ic.prototype.G,Ic.prototype.detect=Ic.prototype.F,Ic.prototype.setOptions=Ic.prototype.o,Ic.createFromModelPath=function(t,e){return fc(Ic,t,{baseOptions:{modelAssetPath:e}})},Ic.createFromModelBuffer=function(t,e){return fc(Ic,t,{baseOptions:{modelAssetBuffer:e}})},Ic.createFromOptions=function(t,e){return fc(Ic,t,e)},Ic.FACE_LANDMARKS_LIPS=vc,Ic.FACE_LANDMARKS_LEFT_EYE=Ec,Ic.FACE_LANDMARKS_LEFT_EYEBROW=wc,Ic.FACE_LANDMARKS_LEFT_IRIS=Tc,Ic.FACE_LANDMARKS_RIGHT_EYE=Ac,Ic.FACE_LANDMARKS_RIGHT_EYEBROW=bc,Ic.FACE_LANDMARKS_RIGHT_IRIS=kc,Ic.FACE_LANDMARKS_FACE_OVAL=Sc,Ic.FACE_LANDMARKS_CONTOURS=xc,Ic.FACE_LANDMARKS_TESSELATION=Lc;var Fc=cc([0,1],[1,2],[2,3],[3,4],[0,5],[5,6],[6,7],[7,8],[5,9],[9,10],[10,11],[11,12],[9,13],[13,14],[14,15],[15,16],[13,17],[0,17],[17,18],[18,19],[19,20]);function Mc(t){t.gestures=[],t.landmarks=[],t.worldLandmarks=[],t.handedness=[]}function Pc(t){return 0===t.gestures.length?{gestures:[],landmarks:[],worldLandmarks:[],handedness:[],handednesses:[]}:{gestures:t.gestures,landmarks:t.landmarks,worldLandmarks:t.worldLandmarks,handedness:t.handedness,handednesses:t.handedness}}function Cc(t,e=!0){const n=[];for(const i of t){var r=ws(i);t=[];for(const n of r.g())r=e&&null!=Rn(n,1)?Rn(n,1)??0:-1,t.push({score:Fn(n,2)??0,index:r,categoryName:ge(tn(n,3))??\"\"??\"\",displayName:ge(tn(n,4))??\"\"??\"\"});n.push(t)}return n}var Oc=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!1),this.gestures=[],this.landmarks=[],this.worldLandmarks=[],this.handedness=[],kn(t=this.j=new uo,0,1,e=new Ks),this.u=new ho,kn(this.j,0,2,this.u),this.D=new co,kn(this.u,0,3,this.D),this.A=new ao,kn(this.u,0,2,this.A),this.h=new oo,kn(this.j,0,3,this.h),Pn(this.A,2,.5),Pn(this.u,4,.5),Pn(this.D,2,.5)}get baseOptions(){return wn(this.j,Ks,1)}set baseOptions(t){kn(this.j,0,1,t)}o(t){if(Mn(this.A,3,t.numHands??1),\"minHandDetectionConfidence\"in t&&Pn(this.A,2,t.minHandDetectionConfidence??.5),\"minTrackingConfidence\"in t&&Pn(this.u,4,t.minTrackingConfidence??.5),\"minHandPresenceConfidence\"in t&&Pn(this.D,2,t.minHandPresenceConfidence??.5),t.cannedGesturesClassifierOptions){var e=new io,n=e,r=Xo(t.cannedGesturesClassifierOptions,wn(this.h,io,3)?.l());kn(n,0,2,r),kn(this.h,0,3,e)}else void 0===t.cannedGesturesClassifierOptions&&wn(this.h,io,3)?.g();return t.customGesturesClassifierOptions?(kn(n=e=new io,0,2,r=Xo(t.customGesturesClassifierOptions,wn(this.h,io,4)?.l())),kn(this.h,0,4,e)):void 0===t.customGesturesClassifierOptions&&wn(this.h,io,4)?.g(),this.l(t)}Ha(t,e){return Mc(this),pc(this,t,e),Pc(this)}Ia(t,e,n){return Mc(this),gc(this,t,n,e),Pc(this)}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\"),ps(t,\"hand_gestures\"),ps(t,\"hand_landmarks\"),ps(t,\"world_hand_landmarks\"),ps(t,\"handedness\");const e=new rs;Mr(e,mo,this.j);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.gesture_recognizer.GestureRecognizerGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"HAND_GESTURES:hand_gestures\"),as(n,\"LANDMARKS:hand_landmarks\"),as(n,\"WORLD_LANDMARKS:world_hand_landmarks\"),as(n,\"HANDEDNESS:handedness\"),n.o(e),fs(t,n),this.g.attachProtoVectorListener(\"hand_landmarks\",((t,e)=>{for(const e of t){t=Rs(e);const n=[];for(const e of An(t,Ls,1))n.push({x:Fn(e,1)??0,y:Fn(e,2)??0,z:Fn(e,3)??0,visibility:Fn(e,4)??0});this.landmarks.push(n)}pa(this,e)})),this.g.attachEmptyPacketListener(\"hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoVectorListener(\"world_hand_landmarks\",((t,e)=>{for(const e of t){t=xs(e);const n=[];for(const e of An(t,Ss,1))n.push({x:Fn(e,1)??0,y:Fn(e,2)??0,z:Fn(e,3)??0,visibility:Fn(e,4)??0});this.worldLandmarks.push(n)}pa(this,e)})),this.g.attachEmptyPacketListener(\"world_hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoVectorListener(\"hand_gestures\",((t,e)=>{this.gestures.push(...Cc(t,!1)),pa(this,e)})),this.g.attachEmptyPacketListener(\"hand_gestures\",(t=>{pa(this,t)})),this.g.attachProtoVectorListener(\"handedness\",((t,e)=>{this.handedness.push(...Cc(t)),pa(this,e)})),this.g.attachEmptyPacketListener(\"handedness\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};function Nc(t){return{landmarks:t.landmarks,worldLandmarks:t.worldLandmarks,handednesses:t.handedness,handedness:t.handedness}}Oc.prototype.recognizeForVideo=Oc.prototype.Ia,Oc.prototype.recognize=Oc.prototype.Ha,Oc.prototype.setOptions=Oc.prototype.o,Oc.createFromModelPath=function(t,e){return fc(Oc,t,{baseOptions:{modelAssetPath:e}})},Oc.createFromModelBuffer=function(t,e){return fc(Oc,t,{baseOptions:{modelAssetBuffer:e}})},Oc.createFromOptions=function(t,e){return fc(Oc,t,e)},Oc.HAND_CONNECTIONS=Fc;var Uc=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!1),this.landmarks=[],this.worldLandmarks=[],this.handedness=[],kn(t=this.h=new ho,0,1,e=new Ks),this.u=new co,kn(this.h,0,3,this.u),this.j=new ao,kn(this.h,0,2,this.j),Mn(this.j,3,1),Pn(this.j,2,.5),Pn(this.u,2,.5),Pn(this.h,4,.5)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return\"numHands\"in t&&Mn(this.j,3,t.numHands??1),\"minHandDetectionConfidence\"in t&&Pn(this.j,2,t.minHandDetectionConfidence??.5),\"minTrackingConfidence\"in t&&Pn(this.h,4,t.minTrackingConfidence??.5),\"minHandPresenceConfidence\"in t&&Pn(this.u,2,t.minHandPresenceConfidence??.5),this.l(t)}F(t,e){return this.landmarks=[],this.worldLandmarks=[],this.handedness=[],pc(this,t,e),Nc(this)}G(t,e,n){return this.landmarks=[],this.worldLandmarks=[],this.handedness=[],gc(this,t,n,e),Nc(this)}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\"),ps(t,\"hand_landmarks\"),ps(t,\"world_hand_landmarks\"),ps(t,\"handedness\");const e=new rs;Mr(e,yo,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.hand_landmarker.HandLandmarkerGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"LANDMARKS:hand_landmarks\"),as(n,\"WORLD_LANDMARKS:world_hand_landmarks\"),as(n,\"HANDEDNESS:handedness\"),n.o(e),fs(t,n),this.g.attachProtoVectorListener(\"hand_landmarks\",((t,e)=>{for(const e of t)t=Rs(e),this.landmarks.push(Yo(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoVectorListener(\"world_hand_landmarks\",((t,e)=>{for(const e of t)t=xs(e),this.worldLandmarks.push(qo(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"world_hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoVectorListener(\"handedness\",((t,e)=>{var n=this.handedness,r=n.push;const i=[];for(const e of t){t=ws(e);const n=[];for(const e of t.g())n.push({score:Fn(e,2)??0,index:Rn(e,1)??0??-1,categoryName:ge(tn(e,3))??\"\"??\"\",displayName:ge(tn(e,4))??\"\"??\"\"});i.push(n)}r.call(n,...i),pa(this,e)})),this.g.attachEmptyPacketListener(\"handedness\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Uc.prototype.detectForVideo=Uc.prototype.G,Uc.prototype.detect=Uc.prototype.F,Uc.prototype.setOptions=Uc.prototype.o,Uc.createFromModelPath=function(t,e){return fc(Uc,t,{baseOptions:{modelAssetPath:e}})},Uc.createFromModelBuffer=function(t,e){return fc(Uc,t,{baseOptions:{modelAssetBuffer:e}})},Uc.createFromOptions=function(t,e){return fc(Uc,t,e)},Uc.HAND_CONNECTIONS=Fc;var Dc=cc([0,1],[1,2],[2,3],[3,7],[0,4],[4,5],[5,6],[6,8],[9,10],[11,12],[11,13],[13,15],[15,17],[15,19],[15,21],[17,19],[12,14],[14,16],[16,18],[16,20],[16,22],[18,20],[11,23],[12,24],[23,24],[23,25],[24,26],[25,27],[26,28],[27,29],[28,30],[29,31],[30,32],[27,31],[28,32]);function Bc(t){t.h={faceLandmarks:[],faceBlendshapes:[],poseLandmarks:[],poseWorldLandmarks:[],poseSegmentationMasks:[],leftHandLandmarks:[],leftHandWorldLandmarks:[],rightHandLandmarks:[],rightHandWorldLandmarks:[]}}function Gc(t){try{if(!t.D)return t.h;t.D(t.h)}finally{ya(t)}}function jc(t,e){t=Rs(t),e.push(Yo(t))}var Vc=class extends yc{constructor(t,e){super(new lc(t,e),\"input_frames_image\",null,!1),this.h={faceLandmarks:[],faceBlendshapes:[],poseLandmarks:[],poseWorldLandmarks:[],poseSegmentationMasks:[],leftHandLandmarks:[],leftHandWorldLandmarks:[],rightHandLandmarks:[],rightHandWorldLandmarks:[]},this.outputPoseSegmentationMasks=this.outputFaceBlendshapes=!1,kn(t=this.j=new wo,0,1,e=new Ks),this.I=new co,kn(this.j,0,2,this.I),this.W=new _o,kn(this.j,0,3,this.W),this.u=new $s,kn(this.j,0,4,this.u),this.O=new to,kn(this.j,0,5,this.O),this.A=new vo,kn(this.j,0,6,this.A),this.M=new Eo,kn(this.j,0,7,this.M),Pn(this.u,2,.5),Pn(this.u,3,.3),Pn(this.O,2,.5),Pn(this.A,2,.5),Pn(this.A,3,.3),Pn(this.M,2,.5),Pn(this.I,2,.5)}get baseOptions(){return wn(this.j,Ks,1)}set baseOptions(t){kn(this.j,0,1,t)}o(t){return\"minFaceDetectionConfidence\"in t&&Pn(this.u,2,t.minFaceDetectionConfidence??.5),\"minFaceSuppressionThreshold\"in t&&Pn(this.u,3,t.minFaceSuppressionThreshold??.3),\"minFacePresenceConfidence\"in t&&Pn(this.O,2,t.minFacePresenceConfidence??.5),\"outputFaceBlendshapes\"in t&&(this.outputFaceBlendshapes=!!t.outputFaceBlendshapes),\"minPoseDetectionConfidence\"in t&&Pn(this.A,2,t.minPoseDetectionConfidence??.5),\"minPoseSuppressionThreshold\"in t&&Pn(this.A,3,t.minPoseSuppressionThreshold??.3),\"minPosePresenceConfidence\"in t&&Pn(this.M,2,t.minPosePresenceConfidence??.5),\"outputPoseSegmentationMasks\"in t&&(this.outputPoseSegmentationMasks=!!t.outputPoseSegmentationMasks),\"minHandLandmarksConfidence\"in t&&Pn(this.I,2,t.minHandLandmarksConfidence??.5),this.l(t)}F(t,e,n){const r=\"function\"!=typeof e?e:{};return this.D=\"function\"==typeof e?e:n,Bc(this),pc(this,t,r),Gc(this)}G(t,e,n,r){const i=\"function\"!=typeof n?n:{};return this.D=\"function\"==typeof n?n:r,Bc(this),gc(this,t,i,e),Gc(this)}m(){var t=new gs;ds(t,\"input_frames_image\"),ps(t,\"pose_landmarks\"),ps(t,\"pose_world_landmarks\"),ps(t,\"face_landmarks\"),ps(t,\"left_hand_landmarks\"),ps(t,\"left_hand_world_landmarks\"),ps(t,\"right_hand_landmarks\"),ps(t,\"right_hand_world_landmarks\");const e=new rs,n=new Xi;Cn(n,1,\"type.googleapis.com/mediapipe.tasks.vision.holistic_landmarker.proto.HolisticLandmarkerGraphOptions\"),function(t,e){if(null!=e)if(Array.isArray(e))nn(t,2,Ce(e,0,Ne));else{if(!(\"string\"==typeof e||e instanceof P||R(e)))throw Error(\"invalid value in Any.value field: \"+e+\" expected a ByteString, a base64 encoded string, a Uint8Array or a jspb array\");dn(t,2,lt(e,!1),F())}}(n,this.j.g());const r=new cs;Cn(r,2,\"mediapipe.tasks.vision.holistic_landmarker.HolisticLandmarkerGraph\"),Ln(r,8,Xi,n),os(r,\"IMAGE:input_frames_image\"),as(r,\"POSE_LANDMARKS:pose_landmarks\"),as(r,\"POSE_WORLD_LANDMARKS:pose_world_landmarks\"),as(r,\"FACE_LANDMARKS:face_landmarks\"),as(r,\"LEFT_HAND_LANDMARKS:left_hand_landmarks\"),as(r,\"LEFT_HAND_WORLD_LANDMARKS:left_hand_world_landmarks\"),as(r,\"RIGHT_HAND_LANDMARKS:right_hand_landmarks\"),as(r,\"RIGHT_HAND_WORLD_LANDMARKS:right_hand_world_landmarks\"),r.o(e),fs(t,r),ga(this,t),this.g.attachProtoListener(\"pose_landmarks\",((t,e)=>{jc(t,this.h.poseLandmarks),pa(this,e)})),this.g.attachEmptyPacketListener(\"pose_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoListener(\"pose_world_landmarks\",((t,e)=>{var n=this.h.poseWorldLandmarks;t=xs(t),n.push(qo(t)),pa(this,e)})),this.g.attachEmptyPacketListener(\"pose_world_landmarks\",(t=>{pa(this,t)})),this.outputPoseSegmentationMasks&&(as(r,\"POSE_SEGMENTATION_MASK:pose_segmentation_mask\"),ma(this,\"pose_segmentation_mask\"),this.g.Z(\"pose_segmentation_mask\",((t,e)=>{this.h.poseSegmentationMasks=[mc(this,t,!0,!this.D)],pa(this,e)})),this.g.attachEmptyPacketListener(\"pose_segmentation_mask\",(t=>{this.h.poseSegmentationMasks=[],pa(this,t)}))),this.g.attachProtoListener(\"face_landmarks\",((t,e)=>{jc(t,this.h.faceLandmarks),pa(this,e)})),this.g.attachEmptyPacketListener(\"face_landmarks\",(t=>{pa(this,t)})),this.outputFaceBlendshapes&&(ps(t,\"extra_blendshapes\"),as(r,\"FACE_BLENDSHAPES:extra_blendshapes\"),this.g.attachProtoListener(\"extra_blendshapes\",((t,e)=>{var n=this.h.faceBlendshapes;this.outputFaceBlendshapes&&(t=ws(t),n.push(Wo(t.g()??[]))),pa(this,e)})),this.g.attachEmptyPacketListener(\"extra_blendshapes\",(t=>{pa(this,t)}))),this.g.attachProtoListener(\"left_hand_landmarks\",((t,e)=>{jc(t,this.h.leftHandLandmarks),pa(this,e)})),this.g.attachEmptyPacketListener(\"left_hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoListener(\"left_hand_world_landmarks\",((t,e)=>{var n=this.h.leftHandWorldLandmarks;t=xs(t),n.push(qo(t)),pa(this,e)})),this.g.attachEmptyPacketListener(\"left_hand_world_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoListener(\"right_hand_landmarks\",((t,e)=>{jc(t,this.h.rightHandLandmarks),pa(this,e)})),this.g.attachEmptyPacketListener(\"right_hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoListener(\"right_hand_world_landmarks\",((t,e)=>{var n=this.h.rightHandWorldLandmarks;t=xs(t),n.push(qo(t)),pa(this,e)})),this.g.attachEmptyPacketListener(\"right_hand_world_landmarks\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Vc.prototype.detectForVideo=Vc.prototype.G,Vc.prototype.detect=Vc.prototype.F,Vc.prototype.setOptions=Vc.prototype.o,Vc.createFromModelPath=function(t,e){return fc(Vc,t,{baseOptions:{modelAssetPath:e}})},Vc.createFromModelBuffer=function(t,e){return fc(Vc,t,{baseOptions:{modelAssetBuffer:e}})},Vc.createFromOptions=function(t,e){return fc(Vc,t,e)},Vc.HAND_CONNECTIONS=Fc,Vc.POSE_CONNECTIONS=Dc,Vc.FACE_LANDMARKS_LIPS=vc,Vc.FACE_LANDMARKS_LEFT_EYE=Ec,Vc.FACE_LANDMARKS_LEFT_EYEBROW=wc,Vc.FACE_LANDMARKS_LEFT_IRIS=Tc,Vc.FACE_LANDMARKS_RIGHT_EYE=Ac,Vc.FACE_LANDMARKS_RIGHT_EYEBROW=bc,Vc.FACE_LANDMARKS_RIGHT_IRIS=kc,Vc.FACE_LANDMARKS_FACE_OVAL=Sc,Vc.FACE_LANDMARKS_CONTOURS=xc,Vc.FACE_LANDMARKS_TESSELATION=Lc;var Xc=class extends yc{constructor(t,e){super(new lc(t,e),\"input_image\",\"norm_rect\",!0),this.j={classifications:[]},kn(t=this.h=new bo,0,1,e=new Ks)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return kn(this.h,0,2,Xo(t,wn(this.h,Gs,2))),this.l(t)}sa(t,e){return this.j={classifications:[]},pc(this,t,e),this.j}ta(t,e,n){return this.j={classifications:[]},gc(this,t,n,e),this.j}m(){var t=new gs;ds(t,\"input_image\"),ds(t,\"norm_rect\"),ps(t,\"classifications\");const e=new rs;Mr(e,ko,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.image_classifier.ImageClassifierGraph\"),os(n,\"IMAGE:input_image\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"CLASSIFICATIONS:classifications\"),n.o(e),fs(t,n),this.g.attachProtoListener(\"classifications\",((t,e)=>{this.j=zo(Cs(t)),pa(this,e)})),this.g.attachEmptyPacketListener(\"classifications\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Xc.prototype.classifyForVideo=Xc.prototype.ta,Xc.prototype.classify=Xc.prototype.sa,Xc.prototype.setOptions=Xc.prototype.o,Xc.createFromModelPath=function(t,e){return fc(Xc,t,{baseOptions:{modelAssetPath:e}})},Xc.createFromModelBuffer=function(t,e){return fc(Xc,t,{baseOptions:{modelAssetBuffer:e}})},Xc.createFromOptions=function(t,e){return fc(Xc,t,e)};var Hc=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!0),this.h=new So,this.embeddings={embeddings:[]},kn(t=this.h,0,1,e=new Ks)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){var e=this.h,n=wn(this.h,Vs,2);return n=n?n.clone():new Vs,void 0!==t.l2Normalize?nn(n,1,te(t.l2Normalize)):\"l2Normalize\"in t&&nn(n,1),void 0!==t.quantize?nn(n,2,te(t.quantize)):\"quantize\"in t&&nn(n,2),kn(e,0,2,n),this.l(t)}za(t,e){return pc(this,t,e),this.embeddings}Aa(t,e,n){return gc(this,t,n,e),this.embeddings}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\"),ps(t,\"embeddings_out\");const e=new rs;Mr(e,xo,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.image_embedder.ImageEmbedderGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"EMBEDDINGS:embeddings_out\"),n.o(e),fs(t,n),this.g.attachProtoListener(\"embeddings_out\",((t,e)=>{t=Bs(t),this.embeddings=function(t){return{embeddings:An(t,Us,1).map((t=>{const e={headIndex:Rn(t,3)??0??-1,headName:ge(tn(t,4))??\"\"??\"\"};var n=t.v;return void 0!==En(n,0|n[et],Os,gn(t,1))?(t=on(t=wn(t,Os,gn(t,1),void 0),1,Qt,sn()),e.floatEmbedding=t.slice()):(n=new Uint8Array(0),e.quantizedEmbedding=wn(t,Ns,gn(t,2),void 0)?.na()?.h()??n),e})),timestampMs:Ho(In(t))}}(t),pa(this,e)})),this.g.attachEmptyPacketListener(\"embeddings_out\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Hc.cosineSimilarity=function(t,e){if(t.floatEmbedding&&e.floatEmbedding)t=Jo(t.floatEmbedding,e.floatEmbedding);else{if(!t.quantizedEmbedding||!e.quantizedEmbedding)throw Error(\"Cannot compute cosine similarity between quantized and float embeddings.\");t=Jo($o(t.quantizedEmbedding),$o(e.quantizedEmbedding))}return t},Hc.prototype.embedForVideo=Hc.prototype.Aa,Hc.prototype.embed=Hc.prototype.za,Hc.prototype.setOptions=Hc.prototype.o,Hc.createFromModelPath=function(t,e){return fc(Hc,t,{baseOptions:{modelAssetPath:e}})},Hc.createFromModelBuffer=function(t,e){return fc(Hc,t,{baseOptions:{modelAssetBuffer:e}})},Hc.createFromOptions=function(t,e){return fc(Hc,t,e)};var Wc=class{constructor(t,e,n){this.confidenceMasks=t,this.categoryMask=e,this.qualityScores=n}close(){this.confidenceMasks?.forEach((t=>{t.close()})),this.categoryMask?.close()}};function zc(t){const e=function(t){return An(t,cs,1)}(t.ca()).filter((t=>(ge(tn(t,1))??\"\").includes(\"mediapipe.tasks.TensorsToSegmentationCalculator\")));if(t.u=[],e.length>1)throw Error(\"The graph has more than one mediapipe.tasks.TensorsToSegmentationCalculator.\");1===e.length&&(wn(e[0],rs,7)?.j()?.g()??new Map).forEach(((e,n)=>{t.u[Number(n)]=ge(tn(e,1))??\"\"}))}function Kc(t){t.categoryMask=void 0,t.confidenceMasks=void 0,t.qualityScores=void 0}function Yc(t){try{const e=new Wc(t.confidenceMasks,t.categoryMask,t.qualityScores);if(!t.j)return e;t.j(e)}finally{ya(t)}}Wc.prototype.close=Wc.prototype.close;var qc=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!1),this.u=[],this.outputCategoryMask=!1,this.outputConfidenceMasks=!0,this.h=new Mo,this.A=new Lo,kn(this.h,0,3,this.A),kn(t=this.h,0,1,e=new Ks)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return void 0!==t.displayNamesLocale?nn(this.h,2,pe(t.displayNamesLocale)):\"displayNamesLocale\"in t&&nn(this.h,2),\"outputCategoryMask\"in t&&(this.outputCategoryMask=t.outputCategoryMask??!1),\"outputConfidenceMasks\"in t&&(this.outputConfidenceMasks=t.outputConfidenceMasks??!0),super.l(t)}L(){zc(this)}segment(t,e,n){const r=\"function\"!=typeof e?e:{};return this.j=\"function\"==typeof e?e:n,Kc(this),pc(this,t,r),Yc(this)}La(t,e,n,r){const i=\"function\"!=typeof n?n:{};return this.j=\"function\"==typeof n?n:r,Kc(this),gc(this,t,i,e),Yc(this)}Da(){return this.u}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\");const e=new rs;Mr(e,Po,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.image_segmenter.ImageSegmenterGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),n.o(e),fs(t,n),ga(this,t),this.outputConfidenceMasks&&(ps(t,\"confidence_masks\"),as(n,\"CONFIDENCE_MASKS:confidence_masks\"),ma(this,\"confidence_masks\"),this.g.aa(\"confidence_masks\",((t,e)=>{this.confidenceMasks=t.map((t=>mc(this,t,!0,!this.j))),pa(this,e)})),this.g.attachEmptyPacketListener(\"confidence_masks\",(t=>{this.confidenceMasks=[],pa(this,t)}))),this.outputCategoryMask&&(ps(t,\"category_mask\"),as(n,\"CATEGORY_MASK:category_mask\"),ma(this,\"category_mask\"),this.g.Z(\"category_mask\",((t,e)=>{this.categoryMask=mc(this,t,!1,!this.j),pa(this,e)})),this.g.attachEmptyPacketListener(\"category_mask\",(t=>{this.categoryMask=void 0,pa(this,t)}))),ps(t,\"quality_scores\"),as(n,\"QUALITY_SCORES:quality_scores\"),this.g.attachFloatVectorListener(\"quality_scores\",((t,e)=>{this.qualityScores=t,pa(this,e)})),this.g.attachEmptyPacketListener(\"quality_scores\",(t=>{this.categoryMask=void 0,pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};qc.prototype.getLabels=qc.prototype.Da,qc.prototype.segmentForVideo=qc.prototype.La,qc.prototype.segment=qc.prototype.segment,qc.prototype.setOptions=qc.prototype.o,qc.createFromModelPath=function(t,e){return fc(qc,t,{baseOptions:{modelAssetPath:e}})},qc.createFromModelBuffer=function(t,e){return fc(qc,t,{baseOptions:{modelAssetBuffer:e}})},qc.createFromOptions=function(t,e){return fc(qc,t,e)};var $c=class{constructor(t,e,n){this.confidenceMasks=t,this.categoryMask=e,this.qualityScores=n}close(){this.confidenceMasks?.forEach((t=>{t.close()})),this.categoryMask?.close()}};$c.prototype.close=$c.prototype.close;var Jc=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect_in\",!1),this.outputCategoryMask=!1,this.outputConfidenceMasks=!0,this.h=new Mo,this.u=new Lo,kn(this.h,0,3,this.u),kn(t=this.h,0,1,e=new Ks)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return\"outputCategoryMask\"in t&&(this.outputCategoryMask=t.outputCategoryMask??!1),\"outputConfidenceMasks\"in t&&(this.outputConfidenceMasks=t.outputConfidenceMasks??!0),super.l(t)}segment(t,e,n,r){const i=\"function\"!=typeof n?n:{};if(this.j=\"function\"==typeof n?n:r,this.qualityScores=this.categoryMask=this.confidenceMasks=void 0,n=this.C+1,r=new Uo,e.keypoint&&e.scribble)throw Error(\"Cannot provide both keypoint and scribble.\");if(e.keypoint){var s=new Co;dn(s,3,te(!0),!1),dn(s,1,Zt(e.keypoint.x),0),dn(s,2,Zt(e.keypoint.y),0),Sn(r,1,Do,s)}else{if(!e.scribble)throw Error(\"Must provide either a keypoint or a scribble.\");{const t=new No;for(s of e.scribble)dn(e=new Co,3,te(!0),!1),dn(e,1,Zt(s.x),0),dn(e,2,Zt(s.y),0),Ln(t,1,Co,e);Sn(r,2,Do,t)}}this.g.addProtoToStream(r.g(),\"mediapipe.tasks.vision.interactive_segmenter.proto.RegionOfInterest\",\"roi_in\",n),pc(this,t,i);t:{try{const t=new $c(this.confidenceMasks,this.categoryMask,this.qualityScores);if(!this.j){var o=t;break t}this.j(t)}finally{ya(this)}o=void 0}return o}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"roi_in\"),ds(t,\"norm_rect_in\");const e=new rs;Mr(e,Po,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.interactive_segmenter.InteractiveSegmenterGraphV2\"),os(n,\"IMAGE:image_in\"),os(n,\"ROI:roi_in\"),os(n,\"NORM_RECT:norm_rect_in\"),n.o(e),fs(t,n),ga(this,t),this.outputConfidenceMasks&&(ps(t,\"confidence_masks\"),as(n,\"CONFIDENCE_MASKS:confidence_masks\"),ma(this,\"confidence_masks\"),this.g.aa(\"confidence_masks\",((t,e)=>{this.confidenceMasks=t.map((t=>mc(this,t,!0,!this.j))),pa(this,e)})),this.g.attachEmptyPacketListener(\"confidence_masks\",(t=>{this.confidenceMasks=[],pa(this,t)}))),this.outputCategoryMask&&(ps(t,\"category_mask\"),as(n,\"CATEGORY_MASK:category_mask\"),ma(this,\"category_mask\"),this.g.Z(\"category_mask\",((t,e)=>{this.categoryMask=mc(this,t,!1,!this.j),pa(this,e)})),this.g.attachEmptyPacketListener(\"category_mask\",(t=>{this.categoryMask=void 0,pa(this,t)}))),ps(t,\"quality_scores\"),as(n,\"QUALITY_SCORES:quality_scores\"),this.g.attachFloatVectorListener(\"quality_scores\",((t,e)=>{this.qualityScores=t,pa(this,e)})),this.g.attachEmptyPacketListener(\"quality_scores\",(t=>{this.categoryMask=void 0,pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Jc.prototype.segment=Jc.prototype.segment,Jc.prototype.setOptions=Jc.prototype.o,Jc.createFromModelPath=function(t,e){return fc(Jc,t,{baseOptions:{modelAssetPath:e}})},Jc.createFromModelBuffer=function(t,e){return fc(Jc,t,{baseOptions:{modelAssetBuffer:e}})},Jc.createFromOptions=function(t,e){return fc(Jc,t,e)};var Zc=class extends yc{constructor(t,e){super(new lc(t,e),\"input_frame_gpu\",\"norm_rect\",!1),this.j={detections:[]},kn(t=this.h=new Bo,0,1,e=new Ks)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return void 0!==t.displayNamesLocale?nn(this.h,2,pe(t.displayNamesLocale)):\"displayNamesLocale\"in t&&nn(this.h,2),void 0!==t.maxResults?Mn(this.h,3,t.maxResults):\"maxResults\"in t&&nn(this.h,3),void 0!==t.scoreThreshold?Pn(this.h,4,t.scoreThreshold):\"scoreThreshold\"in t&&nn(this.h,4),void 0!==t.categoryAllowlist?On(this.h,5,t.categoryAllowlist):\"categoryAllowlist\"in t&&nn(this.h,5),void 0!==t.categoryDenylist?On(this.h,6,t.categoryDenylist):\"categoryDenylist\"in t&&nn(this.h,6),this.l(t)}F(t,e){return this.j={detections:[]},pc(this,t,e),this.j}G(t,e,n){return this.j={detections:[]},gc(this,t,n,e),this.j}m(){var t=new gs;ds(t,\"input_frame_gpu\"),ds(t,\"norm_rect\"),ps(t,\"detections\");const e=new rs;Mr(e,Go,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.ObjectDetectorGraph\"),os(n,\"IMAGE:input_frame_gpu\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"DETECTIONS:detections\"),n.o(e),fs(t,n),this.g.attachProtoVectorListener(\"detections\",((t,e)=>{for(const e of t)t=ks(e),this.j.detections.push(Ko(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"detections\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Zc.prototype.detectForVideo=Zc.prototype.G,Zc.prototype.detect=Zc.prototype.F,Zc.prototype.setOptions=Zc.prototype.o,Zc.createFromModelPath=async function(t,e){return fc(Zc,t,{baseOptions:{modelAssetPath:e}})},Zc.createFromModelBuffer=function(t,e){return fc(Zc,t,{baseOptions:{modelAssetBuffer:e}})},Zc.createFromOptions=function(t,e){return fc(Zc,t,e)};var Qc=class{constructor(t,e,n){this.landmarks=t,this.worldLandmarks=e,this.segmentationMasks=n}close(){this.segmentationMasks?.forEach((t=>{t.close()}))}};function th(t){t.landmarks=[],t.worldLandmarks=[],t.segmentationMasks=void 0}function eh(t){try{const e=new Qc(t.landmarks,t.worldLandmarks,t.segmentationMasks);if(!t.u)return e;t.u(e)}finally{ya(t)}}Qc.prototype.close=Qc.prototype.close;var nh=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!1),this.landmarks=[],this.worldLandmarks=[],this.outputSegmentationMasks=!1,kn(t=this.h=new jo,0,1,e=new Ks),this.A=new Eo,kn(this.h,0,3,this.A),this.j=new vo,kn(this.h,0,2,this.j),Mn(this.j,4,1),Pn(this.j,2,.5),Pn(this.A,2,.5),Pn(this.h,4,.5)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return\"numPoses\"in t&&Mn(this.j,4,t.numPoses??1),\"minPoseDetectionConfidence\"in t&&Pn(this.j,2,t.minPoseDetectionConfidence??.5),\"minTrackingConfidence\"in t&&Pn(this.h,4,t.minTrackingConfidence??.5),\"minPosePresenceConfidence\"in t&&Pn(this.A,2,t.minPosePresenceConfidence??.5),\"outputSegmentationMasks\"in t&&(this.outputSegmentationMasks=t.outputSegmentationMasks??!1),this.l(t)}F(t,e,n){const r=\"function\"!=typeof e?e:{};return this.u=\"function\"==typeof e?e:n,th(this),pc(this,t,r),eh(this)}G(t,e,n,r){const i=\"function\"!=typeof n?n:{};return this.u=\"function\"==typeof n?n:r,th(this),gc(this,t,i,e),eh(this)}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\"),ps(t,\"normalized_landmarks\"),ps(t,\"world_landmarks\"),ps(t,\"segmentation_masks\");const e=new rs;Mr(e,Vo,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.pose_landmarker.PoseLandmarkerGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"NORM_LANDMARKS:normalized_landmarks\"),as(n,\"WORLD_LANDMARKS:world_landmarks\"),n.o(e),fs(t,n),ga(this,t),this.g.attachProtoVectorListener(\"normalized_landmarks\",((t,e)=>{this.landmarks=[];for(const e of t)t=Rs(e),this.landmarks.push(Yo(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"normalized_landmarks\",(t=>{this.landmarks=[],pa(this,t)})),this.g.attachProtoVectorListener(\"world_landmarks\",((t,e)=>{this.worldLandmarks=[];for(const e of t)t=xs(e),this.worldLandmarks.push(qo(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"world_landmarks\",(t=>{this.worldLandmarks=[],pa(this,t)})),this.outputSegmentationMasks&&(as(n,\"SEGMENTATION_MASK:segmentation_masks\"),ma(this,\"segmentation_masks\"),this.g.aa(\"segmentation_masks\",((t,e)=>{this.segmentationMasks=t.map((t=>mc(this,t,!0,!this.u))),pa(this,e)})),this.g.attachEmptyPacketListener(\"segmentation_masks\",(t=>{this.segmentationMasks=[],pa(this,t)}))),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};nh.prototype.detectForVideo=nh.prototype.G,nh.prototype.detect=nh.prototype.F,nh.prototype.setOptions=nh.prototype.o,nh.createFromModelPath=function(t,e){return fc(nh,t,{baseOptions:{modelAssetPath:e}})},nh.createFromModelBuffer=function(t,e){return fc(nh,t,{baseOptions:{modelAssetBuffer:e}})},nh.createFromOptions=function(t,e){return fc(nh,t,e)},nh.POSE_CONNECTIONS=Dc;export{Ja as DrawingUtils,_c as FaceDetector,Ic as FaceLandmarker,na as FilesetResolver,Oc as GestureRecognizer,Uc as HandLandmarker,Vc as HolisticLandmarker,Xc as ImageClassifier,Hc as ImageEmbedder,qc as ImageSegmenter,Wc as ImageSegmenterResult,Jc as InteractiveSegmenter,$c as InteractiveSegmenterResult,oc as MPImage,Ga as MPMask,Zc as ObjectDetector,nh as PoseLandmarker,_a as TaskRunner,yc as VisionTaskRunner};\n//# sourceMappingURL=vision_bundle_mjs.js.map\n", "import {\r\n FilesetResolver,\r\n FaceLandmarker,\r\n FaceLandmarkerResult,\r\n} from \"@mediapipe/tasks-vision\";\r\n\r\n// Pinned to the exact version in package.json (\"@mediapipe/tasks-vision\":\r\n// \"^0.10.32\"). This MUST stay in sync with that dependency — using\r\n// \"@latest\" here let jsDelivr silently swap in a newer WASM build than the\r\n// JS API this SDK was built/tested against, breaking face detection for\r\n// every user at once with no code change on our side. Bump both together.\r\nconst MEDIAPIPE_VERSION = \"0.10.32\";\r\nconst WASM_CDN =\r\n `https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@${MEDIAPIPE_VERSION}/wasm`;\r\n// Also pinned (was \"/latest/\") so a model update can't shift blendshape\r\n// output out from under ActionDetector's calibrated thresholds unannounced.\r\nconst MODEL_URL =\r\n \"https://storage.googleapis.com/mediapipe-models/face_landmarker/face_landmarker/float16/1/face_landmarker.task\";\r\n\r\n// Module-level cache — survives component remounts and retries within the same page session.\r\n// First init fetches ~8MB total (WASM + model); subsequent inits reuse the cache instantly.\r\n// Cached as in-flight PROMISES (not resolved values) so concurrent init() calls\r\n// (e.g. parallel calls from two liveness attempts, or a fast retry) share one\r\n// fetch instead of racing duplicate downloads — and so a failed attempt\r\n// (rejected promise) doesn't get treated as \"cached\" and reused forever.\r\nlet _visionPromise: ReturnType<typeof FilesetResolver.forVisionTasks> | null = null;\r\nlet _modelBufferPromise: Promise<ArrayBuffer> | null = null;\r\n\r\n/** Max time to wait for the WASM runtime / model download before giving up. */\r\nconst INIT_TIMEOUT_MS = 20_000;\r\n\r\nfunction withTimeout<T>(promise: Promise<T>, ms: number, label: string): Promise<T> {\r\n return new Promise<T>((resolve, reject) => {\r\n const timer = setTimeout(\r\n () => reject(new Error(`${label} timed out. Please check your connection and try again.`)),\r\n ms\r\n );\r\n promise.then(\r\n (value) => { clearTimeout(timer); resolve(value); },\r\n (err) => { clearTimeout(timer); reject(err); }\r\n );\r\n });\r\n}\r\n\r\nexport interface FaceDetectionResult {\r\n faceDetected: boolean;\r\n blendshapes: Map<string, number>;\r\n transformMatrix: number[] | null;\r\n}\r\n\r\nexport class FaceDetectorEngine {\r\n private landmarker: FaceLandmarker | null = null;\r\n\r\n async init(): Promise<void> {\r\n // Reuse (or join) the in-flight WASM fileset load — avoids re-fetching\r\n // ~3MB on retry/remount, and avoids kicking off a second parallel fetch\r\n // if init() is called again before the first finishes.\r\n if (!_visionPromise) {\r\n _visionPromise = FilesetResolver.forVisionTasks(WASM_CDN);\r\n _visionPromise.catch(() => { _visionPromise = null; }); // don't cache a failure\r\n }\r\n\r\n // Reuse (or join) the in-flight model download — same reasoning.\r\n if (!_modelBufferPromise) {\r\n _modelBufferPromise = fetch(MODEL_URL).then((res) => {\r\n if (!res.ok) throw new Error(`Failed to download face model (${res.status})`);\r\n return res.arrayBuffer();\r\n });\r\n _modelBufferPromise.catch(() => { _modelBufferPromise = null; }); // don't cache a failure\r\n }\r\n\r\n const [vision, modelBuffer] = await withTimeout(\r\n Promise.all([_visionPromise, _modelBufferPromise]),\r\n INIT_TIMEOUT_MS,\r\n \"Face detection setup\"\r\n );\r\n\r\n this.landmarker = await withTimeout(\r\n FaceLandmarker.createFromOptions(vision, {\r\n baseOptions: {\r\n // Pass a copy — MediaPipe takes ownership of the buffer\r\n modelAssetBuffer: new Uint8Array(modelBuffer.slice(0)),\r\n },\r\n runningMode: \"VIDEO\",\r\n outputFaceBlendshapes: true,\r\n outputFacialTransformationMatrixes: true,\r\n numFaces: 1,\r\n }),\r\n INIT_TIMEOUT_MS,\r\n \"Face detection setup\"\r\n );\r\n }\r\n\r\n detect(video: HTMLVideoElement, timestamp: number): FaceDetectionResult {\r\n if (!this.landmarker) {\r\n return { faceDetected: false, blendshapes: new Map(), transformMatrix: null };\r\n }\r\n\r\n let result: FaceLandmarkerResult;\r\n try {\r\n result = this.landmarker.detectForVideo(video, timestamp);\r\n } catch {\r\n // Video may not be ready yet — return no-face gracefully\r\n return { faceDetected: false, blendshapes: new Map(), transformMatrix: null };\r\n }\r\n\r\n if (!result.faceBlendshapes || result.faceBlendshapes.length === 0) {\r\n return { faceDetected: false, blendshapes: new Map(), transformMatrix: null };\r\n }\r\n\r\n const blendshapes = new Map<string, number>();\r\n for (const bs of result.faceBlendshapes[0].categories) {\r\n blendshapes.set(bs.categoryName, bs.score);\r\n }\r\n\r\n const transformMatrix =\r\n result.facialTransformationMatrixes &&\r\n result.facialTransformationMatrixes.length > 0\r\n ? (Array.from(result.facialTransformationMatrixes[0].data) as number[])\r\n : null;\r\n\r\n return { faceDetected: true, blendshapes, transformMatrix };\r\n }\r\n\r\n destroy(): void {\r\n if (this.landmarker) {\r\n this.landmarker.close();\r\n this.landmarker = null;\r\n }\r\n }\r\n}\r\n", "import { FaceDetectionResult } from \"./FaceDetector\";\n\n/**\n * Passive natural-motion liveness detector.\n *\n * Replaces the earlier sequential \"do BLINK, then TURN_HEAD, then OPEN_MOUTH\"\n * choreography with a single continuous scan window: the user is simply told\n * to \"blink and look around naturally\" while the detector watches for signs\n * of a live face (a genuine blink, or natural head movement) without\n * commanding specific actions in order. This mirrors a passive liveness scan\n * rather than a step-by-step obstacle course.\n *\n * Pass criteria: at least one genuine blink OR a natural head-yaw excursion\n * detected at any point during the window — whichever happens first, since a\n * real person glancing around naturally will trigger one or both without\n * being told to.\n */\n\nconst BLINK_THRESHOLD = 0.25;\nconst BLINK_HOLD_FRAMES = 2;\nconst YAW_MOTION_THRESHOLD_DEG = 6; // small natural head movement, not a commanded turn\n\nexport interface ScanProgress {\n faceDetected: boolean;\n blinkDetected: boolean;\n motionDetected: boolean;\n livenessConfirmed: boolean;\n}\n\nexport class ActionDetector {\n private blinkHoldCount = 0;\n private blinkDetected = false;\n private motionDetected = false;\n private baselineYaw: number | null = null;\n\n check(result: FaceDetectionResult): ScanProgress {\n if (!result.faceDetected) {\n return this.buildProgress(false);\n }\n\n const bs = result.blendshapes;\n const blinkConf = ((bs.get(\"eyeBlinkLeft\") || 0) + (bs.get(\"eyeBlinkRight\") || 0)) / 2;\n\n if (!this.blinkDetected) {\n if (blinkConf >= BLINK_THRESHOLD) {\n this.blinkHoldCount++;\n if (this.blinkHoldCount >= BLINK_HOLD_FRAMES) {\n this.blinkDetected = true;\n }\n } else {\n this.blinkHoldCount = 0;\n }\n }\n\n if (!this.motionDetected) {\n const yaw = this.getHeadYaw(result.transformMatrix);\n if (this.baselineYaw === null) {\n this.baselineYaw = yaw;\n } else if (Math.abs(yaw - this.baselineYaw) >= YAW_MOTION_THRESHOLD_DEG) {\n this.motionDetected = true;\n }\n }\n\n return this.buildProgress(true);\n }\n\n private buildProgress(faceDetected: boolean): ScanProgress {\n return {\n faceDetected,\n blinkDetected: this.blinkDetected,\n motionDetected: this.motionDetected,\n livenessConfirmed: this.blinkDetected || this.motionDetected,\n };\n }\n\n private getHeadYaw(matrix: number[] | null): number {\n if (!matrix || matrix.length < 16) return 0;\n return Math.atan2(-matrix[2], matrix[0]) * (180 / Math.PI);\n }\n}\n", "function injectLivenessKeyframes(): void {\n if (document.getElementById(\"sc-liveness-kf\")) return;\n const s = document.createElement(\"style\");\n s.id = \"sc-liveness-kf\";\n s.textContent = `\n @keyframes sc-pop-in {\n 0% { transform:scale(0.7); opacity:0; }\n 60% { transform:scale(1.05); }\n 100% { transform:scale(1); opacity:1; }\n }\n @keyframes sc-scan-dot {\n 0%,100% { opacity:0.3; transform:scale(0.85); }\n 50% { opacity:1; transform:scale(1); }\n }\n @keyframes sc-scanline-sweep {\n 0% { transform:translateY(-4%); opacity:0; }\n 8% { opacity:0.9; }\n 92% { opacity:0.9; }\n 100% { transform:translateY(104%); opacity:0; }\n }\n @keyframes sc-corner-pulse {\n 0%,100% { opacity:0.55; }\n 50% { opacity:1; }\n }\n @keyframes sc-oval-breathe {\n 0%,100% { opacity:0.5; }\n 50% { opacity:0.85; }\n }\n `;\n document.head.appendChild(s);\n}\n\nexport interface UIChallenge {\n time_limit_seconds: number;\n instruction: string;\n}\n\n/**\n * Single-view passive liveness scan UI: full-width camera, oval face guide,\n * one instruction line, a subtle scanning progress ring. No step-by-step\n * challenge list — replaces the earlier two-column \"BLINK / TURN_HEAD /\n * OPEN_MOUTH\" checklist design with a plain natural-motion scan.\n */\n/** Minimal color contract LivenessUI needs — a subset of flow/theme.ts's\n * ThemeColors so this module doesn't have to import the flow layer. */\nexport interface LivenessUIColors {\n primary: string;\n success: string;\n error: string;\n warning: string;\n}\n\nconst DEFAULT_COLORS: LivenessUIColors = {\n primary: \"#3b82f6\",\n success: \"#22c55e\",\n error: \"#ef4444\",\n warning: \"#fbbf24\",\n};\n\nexport class LivenessUI {\n private root: HTMLDivElement | null = null;\n private colors: LivenessUIColors;\n private videoEl: HTMLVideoElement | null = null;\n private instructionEl: HTMLDivElement | null = null;\n private confidenceRingEl: SVGEllipseElement | null = null;\n private bgOvalEl: SVGEllipseElement | null = null;\n private guideWrapEl: HTMLDivElement | null = null;\n private scanlineEl: HTMLDivElement | null = null;\n private overlayEl: HTMLDivElement | null = null;\n private dotsEl: HTMLDivElement | null = null;\n private docCaptureRoot: HTMLDivElement | null = null;\n private scanStartMs = 0;\n private scanDurationMs = 0;\n private faceTracked = false;\n\n constructor(colors?: Partial<LivenessUIColors>) {\n this.colors = { ...DEFAULT_COLORS, ...colors };\n }\n\n mount(container: HTMLElement, challenge: UIChallenge): HTMLVideoElement {\n injectLivenessKeyframes();\n\n this.root = document.createElement(\"div\");\n this.root.style.cssText = `\n position:relative;width:100%;max-width:420px;margin:0 auto;\n background:#0a0a0a;border-radius:16px;overflow:hidden;\n font-family:system-ui,-apple-system,sans-serif;\n box-shadow:0 8px 32px rgba(0,0,0,0.4);\n aspect-ratio:3/4;\n `;\n\n this.videoEl = document.createElement(\"video\");\n this.videoEl.autoplay = true;\n this.videoEl.playsInline = true;\n this.videoEl.muted = true;\n this.videoEl.setAttribute(\"aria-label\", \"Live camera preview for face verification\");\n this.videoEl.style.cssText = `\n width:100%;height:100%;display:block;\n filter:brightness(1.03) contrast(1.03);\n transform:scaleX(-1);object-fit:cover;\n `;\n\n // Dim everything outside the oval so the guide reads as a scan aperture\n // rather than a shape floating over the raw feed.\n const vignette = document.createElement(\"div\");\n vignette.style.cssText = `\n position:absolute;inset:0;pointer-events:none;\n background:radial-gradient(ellipse 34% 44% at 50% 47%, transparent 55%, rgba(0,0,0,0.55) 100%);\n `;\n\n // Oval guide — centred\n const guideWrap = document.createElement(\"div\");\n guideWrap.style.cssText = `\n position:absolute;top:50%;left:50%;\n transform:translate(-50%,-52%);\n width:64%;aspect-ratio:140/180;pointer-events:none;\n filter:drop-shadow(0 0 18px rgba(59,130,246,0.35));\n transition:filter 0.3s ease;\n `;\n this.guideWrapEl = guideWrap;\n\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svg.setAttribute(\"viewBox\", \"0 0 140 180\");\n svg.setAttribute(\"aria-hidden\", \"true\");\n svg.style.cssText = \"width:100%;height:100%;overflow:visible;\";\n\n const defs = document.createElementNS(\"http://www.w3.org/2000/svg\", \"defs\");\n const clip = document.createElementNS(\"http://www.w3.org/2000/svg\", \"clipPath\");\n clip.setAttribute(\"id\", \"sc-oval-clip\");\n const clipOval = document.createElementNS(\"http://www.w3.org/2000/svg\", \"ellipse\");\n clipOval.setAttribute(\"cx\", \"70\");\n clipOval.setAttribute(\"cy\", \"90\");\n clipOval.setAttribute(\"rx\", \"64\");\n clipOval.setAttribute(\"ry\", \"86\");\n clip.appendChild(clipOval);\n defs.appendChild(clip);\n svg.appendChild(defs);\n\n // Faint dashed inner track — gives the guide a \"scanner reticle\" feel\n // rather than a single plain outline.\n const trackOval = document.createElementNS(\"http://www.w3.org/2000/svg\", \"ellipse\");\n trackOval.setAttribute(\"cx\", \"70\");\n trackOval.setAttribute(\"cy\", \"90\");\n trackOval.setAttribute(\"rx\", \"58\");\n trackOval.setAttribute(\"ry\", \"80\");\n trackOval.setAttribute(\"fill\", \"none\");\n trackOval.setAttribute(\"stroke\", \"rgba(255,255,255,0.16)\");\n trackOval.setAttribute(\"stroke-width\", \"1\");\n trackOval.setAttribute(\"stroke-dasharray\", \"2 5\");\n svg.appendChild(trackOval);\n\n const bgOval = document.createElementNS(\"http://www.w3.org/2000/svg\", \"ellipse\");\n bgOval.setAttribute(\"cx\", \"70\");\n bgOval.setAttribute(\"cy\", \"90\");\n bgOval.setAttribute(\"rx\", \"64\");\n bgOval.setAttribute(\"ry\", \"86\");\n bgOval.setAttribute(\"fill\", \"none\");\n bgOval.setAttribute(\"stroke\", \"rgba(255,255,255,0.4)\");\n bgOval.setAttribute(\"stroke-width\", \"1.5\");\n bgOval.style.cssText = \"animation:sc-oval-breathe 2.4s ease-in-out infinite;transition:stroke 0.3s ease;\";\n this.bgOvalEl = bgOval;\n\n // Progress ring — traces the SAME path as bgOval (identical cx/cy/rx/ry)\n // so it always reads as \"this oval is filling in,\" never as a separate\n // floating stroke. A flat cap (not round) is what makes a short early-\n // scan arc look like a ring segment sitting on the track rather than a\n // stray dash — a round cap on a thin, short arc reads as a loose curve\n // instead of \"part of a circle.\"\n const confOval = document.createElementNS(\"http://www.w3.org/2000/svg\", \"ellipse\");\n confOval.setAttribute(\"cx\", \"70\");\n confOval.setAttribute(\"cy\", \"90\");\n confOval.setAttribute(\"rx\", \"64\");\n confOval.setAttribute(\"ry\", \"86\");\n confOval.setAttribute(\"fill\", \"none\");\n confOval.setAttribute(\"stroke\", this.colors.primary);\n confOval.setAttribute(\"stroke-width\", \"3\");\n confOval.setAttribute(\"stroke-linecap\", \"butt\");\n const circ = 2 * Math.PI * Math.sqrt((64 * 64 + 86 * 86) / 2);\n confOval.setAttribute(\"stroke-dasharray\", `${circ}`);\n confOval.setAttribute(\"stroke-dashoffset\", `${circ}`);\n confOval.style.cssText = \"transition:stroke-dashoffset 0.2s linear,stroke 0.3s ease;transform:rotate(-90deg);transform-origin:70px 90px;filter:drop-shadow(0 0 3px rgba(0,0,0,0.25));\";\n this.confidenceRingEl = confOval;\n\n // Corner brackets — reads as an active biometric scan aperture, matching\n // the document-capture screen's bracket language for visual consistency.\n const bracketGroup = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n bracketGroup.setAttribute(\"stroke\", this.colors.primary);\n bracketGroup.setAttribute(\"stroke-width\", \"3\");\n bracketGroup.setAttribute(\"stroke-linecap\", \"round\");\n bracketGroup.setAttribute(\"fill\", \"none\");\n bracketGroup.style.cssText = \"animation:sc-corner-pulse 2s ease-in-out infinite;\";\n const bracketLen = 14;\n const bx0 = 70 - 64 * 0.74, bx1 = 70 + 64 * 0.74;\n const by0 = 90 - 86 * 0.82, by1 = 90 + 86 * 0.82;\n const brackets = [\n `M${bx0},${by0 + bracketLen} L${bx0},${by0} L${bx0 + bracketLen},${by0}`,\n `M${bx1 - bracketLen},${by0} L${bx1},${by0} L${bx1},${by0 + bracketLen}`,\n `M${bx0},${by1 - bracketLen} L${bx0},${by1} L${bx0 + bracketLen},${by1}`,\n `M${bx1 - bracketLen},${by1} L${bx1},${by1} L${bx1},${by1 - bracketLen}`,\n ];\n for (const d of brackets) {\n const path = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n path.setAttribute(\"d\", d);\n bracketGroup.appendChild(path);\n }\n\n svg.appendChild(bgOval);\n svg.appendChild(confOval);\n svg.appendChild(bracketGroup);\n guideWrap.appendChild(svg);\n\n // Scan-line sweep — clipped to the oval, gives a visible \"actively\n // scanning\" motion cue instead of a static outline.\n const scanlineClipWrap = document.createElement(\"div\");\n scanlineClipWrap.style.cssText = `\n position:absolute;inset:0;\n clip-path:ellipse(45.7% 47.8% at 50% 50%);\n overflow:hidden;\n `;\n const scanline = document.createElement(\"div\");\n scanline.style.cssText = `\n position:absolute;left:0;right:0;height:26%;top:0;\n background:linear-gradient(180deg,transparent 0%,rgba(59,130,246,0.32) 45%,rgba(147,197,253,0.55) 50%,rgba(59,130,246,0.32) 55%,transparent 100%);\n animation:sc-scanline-sweep 2.6s ease-in-out infinite;\n `;\n this.scanlineEl = scanline;\n scanlineClipWrap.appendChild(scanline);\n guideWrap.appendChild(scanlineClipWrap);\n\n // Instruction — top, gradient scrim\n const camTop = document.createElement(\"div\");\n camTop.style.cssText = `\n position:absolute;top:0;left:0;right:0;\n background:linear-gradient(180deg,rgba(0,0,0,0.8) 0%,transparent 100%);\n padding:14px 16px 32px;\n `;\n this.instructionEl = document.createElement(\"div\");\n this.instructionEl.setAttribute(\"aria-live\", \"polite\");\n this.instructionEl.setAttribute(\"role\", \"status\");\n this.instructionEl.style.cssText = `\n color:#fff;font-size:14px;font-weight:600;text-align:center;line-height:1.4;\n `;\n this.instructionEl.textContent = challenge.instruction;\n camTop.appendChild(this.instructionEl);\n\n // Scan progress dots — bottom\n const camBottom = document.createElement(\"div\");\n camBottom.style.cssText = `\n position:absolute;bottom:0;left:0;right:0;\n background:linear-gradient(0deg,rgba(0,0,0,0.7) 0%,transparent 100%);\n padding:28px 10px 18px;display:flex;justify-content:center;\n `;\n this.dotsEl = document.createElement(\"div\");\n this.dotsEl.style.cssText = \"display:flex;gap:6px;\";\n for (let i = 0; i < 3; i++) {\n const dot = document.createElement(\"div\");\n dot.style.cssText = `\n width:6px;height:6px;border-radius:50%;background:${this.colors.primary};\n animation:sc-scan-dot 1.1s ease-in-out ${i * 0.18}s infinite;\n `;\n this.dotsEl.appendChild(dot);\n }\n camBottom.appendChild(this.dotsEl);\n\n this.root.appendChild(this.videoEl);\n this.root.appendChild(vignette);\n this.root.appendChild(guideWrap);\n this.root.appendChild(camTop);\n this.root.appendChild(camBottom);\n\n // Result overlay\n this.overlayEl = document.createElement(\"div\");\n this.overlayEl.style.cssText = `\n position:absolute;inset:0;display:none;align-items:center;\n justify-content:center;z-index:10;\n background:rgba(0,0,0,0.88);backdrop-filter:blur(8px);\n `;\n this.root.appendChild(this.overlayEl);\n\n container.appendChild(this.root);\n this.scanDurationMs = challenge.time_limit_seconds * 1000;\n this.startScanClock();\n\n return this.videoEl;\n }\n\n /**\n * Resets the progress ring's clock to now. The caller (liveness.ts) mounts\n * the UI, then waits ~1s for camera AE/AF to settle before the detection\n * loop actually starts — call this again right when detection begins so\n * the ring's timing matches the real scan window instead of running ahead.\n */\n startScanClock(): void {\n this.scanStartMs = performance.now();\n }\n\n /** Advances the scan progress ring based on elapsed time in the window. */\n updateScanProgress(livenessConfirmed: boolean): void {\n if (!this.confidenceRingEl) return;\n const elapsed = performance.now() - this.scanStartMs;\n const pct = this.scanDurationMs > 0 ? Math.min(1, elapsed / this.scanDurationMs) : 0;\n const circ = 2 * Math.PI * Math.sqrt((64 * 64 + 86 * 86) / 2);\n this.confidenceRingEl.setAttribute(\"stroke-dashoffset\", `${circ * (1 - pct)}`);\n this.confidenceRingEl.setAttribute(\"stroke\", livenessConfirmed ? this.colors.success : this.colors.primary);\n }\n\n /**\n * Reflects whether a face is currently detected in-frame — brightens the\n * oval guide's glow/brackets when locked on, and dims the scan-line sweep\n * so the UI visibly distinguishes \"searching\" from \"actively scanning\".\n */\n setFaceTracking(tracked: boolean): void {\n if (this.faceTracked === tracked) return;\n this.faceTracked = tracked;\n if (this.guideWrapEl) {\n this.guideWrapEl.style.filter = tracked\n ? \"drop-shadow(0 0 22px rgba(34,197,94,0.45))\"\n : \"drop-shadow(0 0 18px rgba(59,130,246,0.35))\";\n }\n if (this.bgOvalEl) {\n this.bgOvalEl.setAttribute(\"stroke\", tracked ? \"rgba(74,222,128,0.55)\" : \"rgba(255,255,255,0.4)\");\n }\n if (this.scanlineEl) {\n this.scanlineEl.style.animationPlayState = tracked ? \"running\" : \"paused\";\n this.scanlineEl.style.opacity = tracked ? \"1\" : \"0.4\";\n }\n }\n\n updateInstruction(text: string): void {\n if (this.instructionEl) this.instructionEl.textContent = text;\n }\n\n showResult(status: \"processing\" | \"failed\", _verificationId?: number): Promise<void> {\n return new Promise((resolve) => {\n if (!this.overlayEl) { resolve(); return; }\n const ok = status === \"processing\";\n this.overlayEl.style.display = \"flex\";\n this.overlayEl.innerHTML = `\n <div style=\"text-align:center;color:#fff;animation:sc-pop-in 0.35s ease;padding:24px;\">\n <div style=\"width:72px;height:72px;border-radius:50%;margin:0 auto 16px;display:flex;align-items:center;justify-content:center;font-size:32px;\n background:${ok ? \"rgba(34,197,94,0.2)\" : \"rgba(239,68,68,0.2)\"};\n border:3px solid ${ok ? this.colors.success : this.colors.error};\">\n ${ok ? \"✓\" : \"✕\"}\n </div>\n <div style=\"font-size:17px;font-weight:700;margin-bottom:8px;\">${ok ? \"Verification submitted\" : \"Submission failed\"}</div>\n <div style=\"font-size:12px;opacity:0.6;line-height:1.6;\">${ok ? \"Hold on while we wrap up…\" : \"Something went wrong. Please try again.\"}</div>\n </div>`;\n setTimeout(resolve, 1800);\n });\n }\n\n showTimeout(onRetry: () => void): Promise<void> {\n return new Promise((resolve) => {\n if (!this.overlayEl) { resolve(); return; }\n this.overlayEl.style.display = \"flex\";\n this.overlayEl.innerHTML = `\n <div style=\"text-align:center;color:#fff;animation:sc-pop-in 0.35s ease;padding:24px;\">\n <div style=\"width:72px;height:72px;border-radius:50%;margin:0 auto 14px;display:flex;align-items:center;justify-content:center;font-size:32px;background:rgba(251,191,36,0.15);border:3px solid ${this.colors.warning};\">⏱</div>\n <div style=\"font-size:17px;font-weight:700;margin-bottom:8px;\">Time's Up</div>\n <div style=\"font-size:12px;opacity:0.6;margin-bottom:18px;\">We couldn't confirm liveness in time. Please try again.</div>\n <button id=\"sc-retry-btn\" style=\"padding:11px 28px;border-radius:10px;background:${this.colors.primary};color:#fff;border:none;cursor:pointer;font-size:14px;font-weight:600;width:100%;max-width:180px;\">Try Again</button>\n </div>`;\n const btn = this.overlayEl.querySelector(\"#sc-retry-btn\") as HTMLButtonElement | null;\n if (btn) {\n btn.addEventListener(\"click\", () => {\n // Prevent a double-click from firing two concurrent retries.\n if (btn.disabled) return;\n btn.disabled = true;\n btn.style.opacity = \"0.6\";\n btn.style.cursor = \"default\";\n onRetry();\n resolve();\n });\n }\n else { setTimeout(resolve, 5000); }\n });\n }\n\n getVideoElement(): HTMLVideoElement | null { return this.videoEl; }\n\n mountDocumentCapture(container: HTMLElement, stream: MediaStream): Promise<Blob> {\n return new Promise((resolve, reject) => {\n injectLivenessKeyframes();\n const docRoot = document.createElement(\"div\");\n docRoot.style.cssText = `position:relative;width:100%;max-width:420px;margin:0 auto;background:#0a0a0a;border-radius:16px;overflow:hidden;font-family:system-ui,-apple-system,sans-serif;box-shadow:0 8px 32px rgba(0,0,0,0.4);`;\n this.docCaptureRoot = docRoot;\n const docVideo = document.createElement(\"video\");\n docVideo.autoplay = true; docVideo.playsInline = true; docVideo.muted = true;\n docVideo.style.cssText = \"width:100%;display:block;aspect-ratio:4/3;object-fit:cover;\";\n docVideo.srcObject = stream;\n const guideOverlay = document.createElement(\"div\");\n guideOverlay.style.cssText = \"position:absolute;inset:0;pointer-events:none;display:flex;align-items:center;justify-content:center;\";\n guideOverlay.innerHTML = `<div style=\"width:83%;height:53%;border:2px dashed rgba(255,255,255,0.55);border-radius:10px;box-shadow:0 0 0 2000px rgba(0,0,0,0.45);position:relative;\"><div style=\"position:absolute;top:-2px;left:-2px;width:18px;height:18px;border-top:3px solid ${this.colors.primary};border-left:3px solid ${this.colors.primary};border-radius:4px 0 0 0;\"></div><div style=\"position:absolute;top:-2px;right:-2px;width:18px;height:18px;border-top:3px solid ${this.colors.primary};border-right:3px solid ${this.colors.primary};border-radius:0 4px 0 0;\"></div><div style=\"position:absolute;bottom:-2px;left:-2px;width:18px;height:18px;border-bottom:3px solid ${this.colors.primary};border-left:3px solid ${this.colors.primary};border-radius:0 0 0 4px;\"></div><div style=\"position:absolute;bottom:-2px;right:-2px;width:18px;height:18px;border-bottom:3px solid ${this.colors.primary};border-right:3px solid ${this.colors.primary};border-radius:0 0 4px 0;\"></div></div>`;\n const header = document.createElement(\"div\");\n header.style.cssText = \"position:absolute;top:0;left:0;right:0;background:linear-gradient(180deg,rgba(0,0,0,0.88) 0%,transparent 100%);padding:18px 16px 40px;text-align:center;\";\n header.innerHTML = `<div style=\"color:#fff;font-size:16px;font-weight:700;margin-bottom:6px;\">Scan Your ID Document</div><div style=\"color:rgba(255,255,255,0.6);font-size:12px;line-height:1.6;\">Fit your document inside the frame.<br>Make sure all text and corners are visible.</div>`;\n const bottomPanel = document.createElement(\"div\");\n bottomPanel.style.cssText = \"position:absolute;bottom:0;left:0;right:0;background:linear-gradient(0deg,rgba(0,0,0,0.92) 0%,rgba(0,0,0,0.6) 70%,transparent 100%);padding:16px;\";\n bottomPanel.innerHTML = `<div style=\"font-size:11px;color:rgba(255,255,255,0.4);text-align:center;margin-bottom:12px;\">Good lighting · No glare · All 4 corners visible</div><button id=\"sc-capture-doc-btn\" style=\"width:100%;padding:12px;border-radius:12px;background:${this.colors.primary};color:#fff;border:none;cursor:pointer;font-size:15px;font-weight:700;margin-bottom:8px;\">Capture Document</button><label style=\"width:100%;display:flex;align-items:center;justify-content:center;gap:6px;padding:9px;border-radius:12px;border:1.5px solid rgba(255,255,255,0.18);cursor:pointer;color:rgba(255,255,255,0.6);font-size:13px;font-weight:500;\"><span>📁</span><span>Upload from gallery instead</span><input id=\"sc-upload-doc-input\" type=\"file\" accept=\"image/*\" style=\"display:none;\" /></label>`;\n docRoot.appendChild(docVideo); docRoot.appendChild(guideOverlay); docRoot.appendChild(header); docRoot.appendChild(bottomPanel);\n container.appendChild(docRoot);\n docVideo.play().catch(() => {});\n const cleanup = () => { try { docRoot.remove(); } catch(_){} this.docCaptureRoot = null; };\n const captureBtn = bottomPanel.querySelector(\"#sc-capture-doc-btn\") as HTMLButtonElement;\n if (captureBtn) {\n captureBtn.addEventListener(\"click\", () => {\n try {\n const canvas = document.createElement(\"canvas\");\n canvas.width = docVideo.videoWidth || 1280; canvas.height = docVideo.videoHeight || 720;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) { reject(new Error(\"Canvas context unavailable\")); return; }\n ctx.drawImage(docVideo, 0, 0);\n canvas.toBlob((blob) => { if (blob) { cleanup(); resolve(blob); } else { reject(new Error(\"Failed to capture document image\")); } }, \"image/jpeg\", 0.92);\n } catch (err) { reject(err); }\n });\n }\n const uploadInput = bottomPanel.querySelector(\"#sc-upload-doc-input\") as HTMLInputElement;\n if (uploadInput) { uploadInput.addEventListener(\"change\", () => { const file = uploadInput.files?.[0]; if (file) { cleanup(); resolve(file); } }); }\n });\n }\n\n unmount(): void {\n try { this.docCaptureRoot?.remove(); } catch(_){} this.docCaptureRoot = null;\n try { this.root?.remove(); } catch(_){}\n this.root = null; this.videoEl = null; this.instructionEl = null;\n this.confidenceRingEl = null; this.overlayEl = null; this.dotsEl = null;\n this.bgOvalEl = null; this.guideWrapEl = null; this.scanlineEl = null;\n this.faceTracked = false;\n }\n}\n", "/**\r\n * Lightweight SDK logger.\r\n *\r\n * Debug output is suppressed in production. Enable verbose logging by calling\r\n * SDKLogger.setDebug(true) before initialising the SDK, or by setting the\r\n * global flag: window.__SC_DEBUG__ = true\r\n */\r\n\r\nconst PREFIX = \"[SmartComply SDK]\";\r\n\r\nfunction isDebugEnabled(): boolean {\r\n try {\r\n return !!(window as any).__SC_DEBUG__;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nexport const SDKLogger = {\r\n /** Emit an informational message (debug mode only). */\r\n info(message: string, ...args: unknown[]): void {\r\n if (!isDebugEnabled()) return;\r\n console.info(`${PREFIX} ℹ ${message}`, ...args);\r\n },\r\n\r\n /** Emit a warning (always visible). */\r\n warn(message: string, ...args: unknown[]): void {\r\n console.warn(`${PREFIX} ⚠ ${message}`, ...args);\r\n },\r\n\r\n /** Emit an error (always visible). */\r\n error(message: string, ...args: unknown[]): void {\r\n console.error(`${PREFIX} ✖ ${message}`, ...args);\r\n },\r\n\r\n /** Emit a debug trace (debug mode only — lowest priority). */\r\n debug(message: string, ...args: unknown[]): void {\r\n if (!isDebugEnabled()) return;\r\n console.debug(`${PREFIX} ⬡ ${message}`, ...args);\r\n },\r\n\r\n /** Log a timed group of related messages (debug mode only). */\r\n group(label: string, fn: () => void): void {\r\n if (!isDebugEnabled()) { fn(); return; }\r\n console.group(`${PREFIX} ${label}`);\r\n fn();\r\n console.groupEnd();\r\n },\r\n\r\n /**\r\n * Enable or disable verbose debug output at runtime.\r\n *\r\n * Example:\r\n * import { SDKLogger } from \"smartcomply-web-sdk\";\r\n * SDKLogger.setDebug(true);\r\n */\r\n setDebug(enabled: boolean): void {\r\n try {\r\n (window as any).__SC_DEBUG__ = enabled;\r\n } catch {\r\n /* no-op in non-browser environments */\r\n }\r\n },\r\n};\r\n", "/**\r\n * LivenessUploader — thin wrapper around the HttpClient's uploadWithSession()\r\n * that adds:\r\n * - Progress callbacks (onProgress)\r\n * - Upload cancellation via AbortController\r\n * - Automatic retry on transient network failure (configurable)\r\n *\r\n * Used internally by LivenessModule.create() and LivenessModule.submit() when\r\n * the caller needs progress reporting (e.g. for a progress bar during video\r\n * upload on slow connections).\r\n */\r\n\r\nimport { HttpClient } from \"../../client/HttpClient\";\r\nimport { MAX_RETRIES, RETRY_DELAY_MS } from \"../../utils/constants\";\r\nimport { SDKLogger } from \"../../utils/logger\";\r\n\r\nexport interface UploadOptions {\r\n /** Called with a value 0–1 as the upload progresses. */\r\n onProgress?: (fraction: number) => void;\r\n\r\n /** Optional AbortSignal to cancel the upload mid-flight. */\r\n signal?: AbortSignal;\r\n\r\n /** Override the default number of retries on transient errors. */\r\n retries?: number;\r\n}\r\n\r\nexport class LivenessUploader {\r\n constructor(private http: HttpClient) {}\r\n\r\n /**\r\n * Upload a FormData payload to `path` with optional progress and\r\n * cancellation support.\r\n *\r\n * Falls back to the standard `uploadWithSession()` on browsers that do not\r\n * support XMLHttpRequest upload progress (very rare).\r\n */\r\n async upload<T>(\r\n path: string,\r\n formData: FormData,\r\n options: UploadOptions = {}\r\n ): Promise<T> {\r\n const { onProgress, signal, retries = MAX_RETRIES } = options;\r\n\r\n // If no progress callback is needed, delegate straight to HttpClient\r\n // which already has retry logic built in.\r\n if (!onProgress) {\r\n return this.http.uploadWithSession<T>(path, formData);\r\n }\r\n\r\n return this.uploadWithProgress<T>(path, formData, onProgress, signal, retries);\r\n }\r\n\r\n // ── Private ────────────────────────────────────────────────────────────────\r\n\r\n private async uploadWithProgress<T>(\r\n path: string,\r\n formData: FormData,\r\n onProgress: (fraction: number) => void,\r\n signal: AbortSignal | undefined,\r\n retriesLeft: number\r\n ): Promise<T> {\r\n const sessionToken = (this.http as any).sessionToken as string | null;\r\n if (!sessionToken) {\r\n throw new Error(\"SDK: No session token. Call sdk.createSession() first.\");\r\n }\r\n\r\n const baseUrl: string = (this.http as any).baseUrl as string;\r\n\r\n return new Promise<T>((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n\r\n // Propagate AbortSignal to XHR\r\n if (signal) {\r\n if (signal.aborted) {\r\n reject(new DOMException(\"Upload cancelled\", \"AbortError\"));\r\n return;\r\n }\r\n signal.addEventListener(\"abort\", () => xhr.abort(), { once: true });\r\n }\r\n\r\n xhr.open(\"POST\", `${baseUrl}${path}`, true);\r\n xhr.setRequestHeader(\"x-access-token\", sessionToken);\r\n\r\n xhr.upload.onprogress = (evt) => {\r\n if (evt.lengthComputable) {\r\n onProgress(evt.loaded / evt.total);\r\n }\r\n };\r\n\r\n xhr.onload = () => {\r\n onProgress(1);\r\n\r\n let envelope: any;\r\n try {\r\n envelope = JSON.parse(xhr.responseText);\r\n } catch {\r\n reject(new Error(`SDK: Non-JSON response from ${path} (${xhr.status})`));\r\n return;\r\n }\r\n\r\n if (xhr.status >= 200 && xhr.status < 300 && envelope.status !== \"error\") {\r\n SDKLogger.info(`Upload to ${path} succeeded`, { status: xhr.status });\r\n resolve(envelope.data as T);\r\n } else {\r\n const err = new Error(envelope.message || `Upload to ${path} failed (${xhr.status})`);\r\n (err as any).statusCode = xhr.status;\r\n (err as any).code = envelope.code;\r\n reject(err);\r\n }\r\n };\r\n\r\n xhr.onerror = async () => {\r\n SDKLogger.warn(`Upload to ${path} failed — network error`, { retriesLeft });\r\n\r\n if (retriesLeft > 0) {\r\n await new Promise((r) => setTimeout(r, RETRY_DELAY_MS));\r\n try {\r\n const result = await this.uploadWithProgress<T>(\r\n path, formData, onProgress, signal, retriesLeft - 1\r\n );\r\n resolve(result);\r\n } catch (retryErr) {\r\n reject(retryErr);\r\n }\r\n } else {\r\n reject(new Error(`SDK: Upload to ${path} failed after all retries.`));\r\n }\r\n };\r\n\r\n xhr.onabort = () => {\r\n reject(new DOMException(\"Upload cancelled by user\", \"AbortError\"));\r\n };\r\n\r\n xhr.send(formData);\r\n });\r\n }\r\n}\r\n", "import { HttpClient } from \"../../client/HttpClient\";\r\nimport {\r\n ChallengeAction,\r\n LivenessCreateRequest,\r\n LivenessCreateResponse,\r\n LivenessSubmitResponse,\r\n} from \"../../types/liveness\";\r\nimport { collectDeviceMetadata } from \"../../utils/device\";\r\nimport { DEFAULT_CHALLENGE_ACTIONS, LIVENESS_TIME_LIMIT_SECONDS } from \"../../utils/constants\";\r\nimport { CameraManager } from \"../../camera/CameraManager\";\r\nimport { VideoRecorder } from \"../../camera/VideoRecorder\";\r\nimport { FaceDetectorEngine } from \"../../camera/FaceDetector\";\r\nimport { ActionDetector } from \"../../camera/ActionDetector\";\r\nimport { LivenessUI, LivenessUIColors } from \"./LivenessUI\";\r\nimport { LivenessUploader } from \"./uploader\";\r\n\r\n/**\r\n * Liveness module — 3-step flow aligned with Adhere backend.\r\n *\r\n * Flow:\r\n * Step 1: liveness.create() → POST /v1/sdk/liveness/create/ (multipart)\r\n * Step 2: [camera runs, user performs challenge actions]\r\n * Step 3: liveness.submit() → POST /v1/sdk/liveness/submit/ (multipart)\r\n *\r\n * After submit, the backend returns status: \"processing\".\r\n * Final results are delivered via webhook (liveness.completed event).\r\n */\r\nexport class LivenessModule {\r\n constructor(private http: HttpClient) { }\r\n\r\n /**\r\n * Step 1: Create a liveness challenge entry.\r\n *\r\n * POST /v1/sdk/liveness/create/\r\n * Auth: x-access-token: <sessionToken>\r\n * Content-Type: multipart/form-data\r\n */\r\n async create(params: LivenessCreateRequest): Promise<LivenessCreateResponse> {\r\n const formData = new FormData();\r\n // W9/B7: when identity_check is present (data verification), the backend\r\n // no longer requires identifier/identifier_type — identity is already\r\n // established via identity_check, so the widget omits them entirely\r\n // instead of sending the user's real ID number/type a second time.\r\n //\r\n // Liveness-only (no identity_check AND no document) is the same story —\r\n // there is no real identifier to send. Without this check, the\r\n // fallback below would invent a synthetic `ID-<timestamp>` identifier\r\n // and store it as the check's identifier, implying an ID number was\r\n // involved when none was — misleading downstream data for a mode that\r\n // has no ID number at all.\r\n const hasDocument = !!(params.document || params.document_front || params.id_file);\r\n if (params.identity_check || (!hasDocument && !params.identifier)) {\r\n // no-op — nothing real to send\r\n } else {\r\n const rawIdentifier = params.identifier || `ID-${Date.now()}`;\r\n const safeIdentifier = rawIdentifier.length > 20\r\n ? rawIdentifier.slice(0, 20)\r\n : rawIdentifier;\r\n formData.append(\"identifier\", safeIdentifier);\r\n formData.append(\"identifier_type\", params.identifier_type);\r\n }\r\n formData.append(\"country\", params.country);\r\n formData.append(\r\n \"challenge_actions\",\r\n JSON.stringify(params.challenge_actions)\r\n );\r\n if (params.autoshot_file) {\r\n formData.append(\"autoshot\", params.autoshot_file, \"autoshot.jpg\");\r\n }\r\n \r\n // Handle document upload - support both legacy and new front/back fields\r\n if (params.document) {\r\n formData.append(\"document\", params.document, \"document.jpg\");\r\n if (params.document_back) {\r\n formData.append(\"document_back\", params.document_back, \"document_back.jpg\");\r\n }\r\n } else if (params.document_front) {\r\n // Legacy support - map to document for backward compatibility\r\n formData.append(\"document\", params.document_front, \"document_front.jpg\");\r\n if (params.document_back) {\r\n formData.append(\"document_back\", params.document_back, \"document_back.jpg\");\r\n }\r\n } else if (params.id_file) {\r\n // Legacy support - map to document for backward compatibility\r\n formData.append(\"document\", params.id_file, \"id_document.jpg\");\r\n }\r\n \r\n if (params.identity_check) {\r\n formData.append(\"identity_check\", String(params.identity_check));\r\n }\r\n if (params.snapshot_file) {\r\n formData.append(\"snapshot\", params.snapshot_file, \"snapshot.jpg\");\r\n }\r\n if (params.device_type) {\r\n formData.append(\"device_type\", params.device_type);\r\n }\r\n if (params.os_name) {\r\n formData.append(\"os_name\", params.os_name);\r\n }\r\n if (params.browser_timezone) {\r\n formData.append(\"browser_timezone\", params.browser_timezone);\r\n }\r\n if (params.fingerprint_id) {\r\n formData.append(\"fingerprint_id\", params.fingerprint_id);\r\n }\r\n\r\n return this.http.uploadWithSession<LivenessCreateResponse>(\r\n \"/v1/sdk/liveness/create/\",\r\n formData\r\n );\r\n }\r\n\r\n /**\r\n * Step 3: Submit liveness video recording.\r\n *\r\n * POST /v1/sdk/liveness/submit/\r\n * Auth: x-access-token: <sessionToken>\r\n * Content-Type: multipart/form-data\r\n *\r\n * Note: After submission, the session is revoked (single-use).\r\n * The backend returns status: \"processing\" — results come via webhook.\r\n *\r\n * Pass onProgress for 0–1 upload-fraction callbacks (via LivenessUploader).\r\n */\r\n async submit(\r\n entryId: number,\r\n videoBlob: Blob,\r\n snapshotBlob: Blob,\r\n autoshotBlob?: Blob,\r\n videoDurationSeconds?: number,\r\n videoSizeBytes?: number,\r\n onProgress?: (fraction: number) => void\r\n ): Promise<LivenessSubmitResponse> {\r\n const formData = new FormData();\r\n formData.append(\"entry\", String(entryId));\r\n formData.append(\"video\", videoBlob, \"liveness.webm\");\r\n formData.append(\"snapshot\", snapshotBlob, \"snapshot.jpg\");\r\n if (autoshotBlob) {\r\n formData.append(\"autoshot\", autoshotBlob, \"autoshot.jpg\");\r\n }\r\n if (videoDurationSeconds !== undefined) {\r\n formData.append(\"video_duration_seconds\", String(videoDurationSeconds));\r\n }\r\n if (videoSizeBytes !== undefined) {\r\n formData.append(\"video_size_bytes\", String(videoSizeBytes));\r\n }\r\n\r\n if (onProgress) {\r\n const uploader = new LivenessUploader(this.http);\r\n return uploader.upload<LivenessSubmitResponse>(\r\n \"/v1/sdk/liveness/submit/\",\r\n formData,\r\n { onProgress }\r\n );\r\n }\r\n\r\n return this.http.uploadWithSession<LivenessSubmitResponse>(\r\n \"/v1/sdk/liveness/submit/\",\r\n formData\r\n );\r\n }\r\n\r\n /**\r\n * Poll the public SDK status endpoint for the final verification result.\r\n * Safe to call after the session has been revoked (no auth required) —\r\n * the ocr_* fields below are only populated by the backend when a live\r\n * session token is still attached (see HttpClient.publicGet), since they\r\n * carry PII (name, document number, face thumbnail).\r\n *\r\n * GET /v1/sdk/liveness/<entryId>/sdk-result/\r\n */\r\n async pollResult(entryId: number): Promise<{\r\n id: number;\r\n status: string;\r\n failure_reason: string | null;\r\n completed_at: string | null;\r\n ocr_status?: string;\r\n is_expired?: boolean;\r\n ocr_quality_failed?: boolean;\r\n ocr_name?: string | null;\r\n ocr_document_number?: string | null;\r\n ocr_expiry_date?: string | null;\r\n ocr_face_image_url?: string | null;\r\n ocr_rejection_reason?: string | null;\r\n }> {\r\n return (this.http as any).publicGet(`/v1/sdk/liveness/${entryId}/sdk-result/`);\r\n }\r\n\r\n /**\r\n * Full liveness check — orchestrates the entire flow:\r\n *\r\n * 1. Run action detection loop (camera + MediaPipe) — challenge actions only,\r\n * not recorded (fast head/mouth motion produces blurry frames).\r\n * 2. Create liveness entry on backend (with challenge actions + optional doc)\r\n * 3. Record a short, clean, post-challenge clip (neutral pose + a natural\r\n * blink) — this is what's sent for face comparison in LIVENESS mode.\r\n * 4. Submit to backend and return response (status: \"processing\")\r\n *\r\n * Backend runs LIVENESS mode (blink/motion check, then its own comparison\r\n * frame extracted from this same video) for both data and document\r\n * verification — see FACE_COMPARISON_USER_GUIDE.md.\r\n *\r\n * @param container - DOM element to mount the liveness UI into\r\n * @param params - identifier info and optional document image\r\n * @param actions - override the challenge_actions tag sent to the backend (default: BLINK)\r\n * @param existingEntryId - reuse an already-created LivenessEntry (avoids double charge)\r\n */\r\n async startCheck(\r\n container: HTMLElement,\r\n params: {\r\n identifier: string;\r\n identifier_type: string;\r\n country: string;\r\n id_file?: File | Blob;\r\n document?: File | Blob;\r\n document_front?: File | Blob;\r\n document_back?: File | Blob;\r\n identity_check?: number;\r\n verification_type?: \"data_verification\" | \"document_verification\" | \"liveness_only\";\r\n // B4: pre-warmed camera stream from the confirmation screen — if provided\r\n // camera.open() is skipped and this stream is used directly, eliminating\r\n // the 1–3s camera init delay when the user taps \"Yes, continue\".\r\n prewarmedStream?: MediaStream | null;\r\n // Client branding — falls back to LivenessUI's default blue/green/red\r\n // if omitted, so callers that don't have a theme still work.\r\n colors?: Partial<LivenessUIColors>;\r\n },\r\n actions?: ChallengeAction[],\r\n existingEntryId?: number\r\n ): Promise<LivenessSubmitResponse> {\r\n const camera = new CameraManager();\r\n const recorder = new VideoRecorder();\r\n const faceEngine = new FaceDetectorEngine();\r\n const ui = new LivenessUI(params.colors);\r\n\r\n // Tracks whether cleanup has already been called (so the finally block\r\n // doesn't double-destroy when retry takes over).\r\n let cleanedUp = false;\r\n const cleanup = () => {\r\n if (cleanedUp) return;\r\n cleanedUp = true;\r\n faceEngine.destroy();\r\n camera.stop();\r\n ui.unmount();\r\n };\r\n\r\n // Rejects the whole flow if the camera stream or recorder dies mid-scan —\r\n // raced against the detection loop below via Promise.race, otherwise the\r\n // video just freezes and detection silently spins until the scan timeout.\r\n let interruptedReject: ((err: Error) => void) | null = null;\r\n const interrupted = new Promise<never>((_, reject) => {\r\n interruptedReject = reject;\r\n });\r\n camera.onStreamInterrupted(() => {\r\n interruptedReject?.(\r\n new Error(\"Camera connection was lost. Please check your camera and try again.\")\r\n );\r\n });\r\n recorder.onError(() => {\r\n interruptedReject?.(\r\n new Error(\"Recording failed unexpectedly. Please try again.\")\r\n );\r\n });\r\n interrupted.catch(() => {});\r\n\r\n try {\r\n // 0. Kick off face-engine load (WASM + ~5MB model download) immediately,\r\n // in parallel with camera permission/open and any document capture step\r\n // below — it used to be a serial `await` right before it was first\r\n // needed (step \"Wait for face to be detected\"), which stacked its full\r\n // multi-second first-load latency on top of everything before it. It's\r\n // only actually awaited right before the first detect() call. Errors\r\n // (including the timeout added in FaceDetectorEngine) are caught there,\r\n // not here, so this unhandled-rejection guard just silences the\r\n // \"uncaught in promise\" console warning if it fails before that await.\r\n const faceInitPromise = faceEngine.init();\r\n faceInitPromise.catch(() => {});\r\n\r\n // 1. Open camera — reuse pre-warmed stream if available (B4)\r\n let stream: MediaStream;\r\n if (params.prewarmedStream && params.prewarmedStream.active) {\r\n // Stream already open from confirmation screen — skip getUserMedia delay.\r\n // Hand it to `camera` so cleanup()'s camera.stop() actually releases it —\r\n // otherwise this stream is untracked by CameraManager and leaks on any\r\n // failure/timeout path that only calls camera.stop().\r\n stream = params.prewarmedStream;\r\n camera.setStream(stream);\r\n } else {\r\n stream = await camera.open();\r\n }\r\n\r\n // 2. Document capture step — skipped if already captured earlier in\r\n // the flow (SmartComplyFlow's document_capture step) and passed in\r\n // via document/document_front; id_file is a legacy alias.\r\n let capturedDocBlob: Blob | undefined =\r\n (params.id_file || params.document || params.document_front) as Blob | undefined;\r\n if (!capturedDocBlob && params.verification_type === \"document_verification\") {\r\n capturedDocBlob = await ui.mountDocumentCapture(container, stream);\r\n }\r\n\r\n // 3. Create a temporary video element to capture autoshot\r\n const tempVideo = document.createElement(\"video\");\r\n tempVideo.srcObject = stream;\r\n tempVideo.muted = true;\r\n tempVideo.playsInline = true;\r\n await tempVideo.play();\r\n\r\n // Wait for face to be detected before capturing autoshot\r\n ui.mount(container, { time_limit_seconds: 0, instruction: \"Fit your face inside the oval outline\" });\r\n const uiVideo = ui.getVideoElement();\r\n if (uiVideo) {\r\n uiVideo.srcObject = stream;\r\n await uiVideo.play();\r\n } else {\r\n tempVideo.style.cssText = \"width:100%;border-radius:12px;transform:scaleX(-1);\";\r\n container.appendChild(tempVideo);\r\n }\r\n\r\n // Join the load kicked off in step 0 — usually already resolved by now\r\n // since it's been running since the top of this function. If it's\r\n // still loading (slow connection), the user now sees the oval/instruction\r\n // UI already mounted rather than a blank wait, and a clear timeout error\r\n // (from FaceDetectorEngine's internal 20s cap) instead of an indefinite hang.\r\n await faceInitPromise;\r\n ui.updateInstruction(\"Fit your face inside the oval outline\");\r\n\r\n // Wait until face is stably centred.\r\n // Tolerant: allows up to 2 missed frames before resetting — avoids\r\n // flickering \"Move closer\" for a single dropped frame.\r\n const videoForDetection = uiVideo || tempVideo;\r\n await new Promise<void>((resolve) => {\r\n let stableFrames = 0;\r\n let missedFrames = 0;\r\n const STABLE_REQUIRED = 4; // increased from 2 — ensures face is properly locked before autoshot\r\n const MISS_TOLERANCE = 2; // allow up to 2 consecutive misses before reset\r\n const MAX_WAIT_MS = 8000;\r\n const startTime = performance.now();\r\n\r\n const checkFace = () => {\r\n if (performance.now() - startTime >= MAX_WAIT_MS) {\r\n resolve(); // proceed anyway after timeout\r\n return;\r\n }\r\n\r\n if (videoForDetection.readyState >= 2) {\r\n const detection = faceEngine.detect(videoForDetection, performance.now());\r\n ui.setFaceTracking(detection.faceDetected);\r\n if (detection.faceDetected) {\r\n stableFrames++;\r\n missedFrames = 0;\r\n ui.updateInstruction(\"Good — hold that position\");\r\n if (stableFrames >= STABLE_REQUIRED) {\r\n resolve();\r\n return;\r\n }\r\n } else {\r\n missedFrames++;\r\n if (missedFrames > MISS_TOLERANCE) {\r\n stableFrames = 0; // full reset only after sustained loss\r\n ui.updateInstruction(\"Move closer so your whole face fits in the oval\");\r\n }\r\n }\r\n }\r\n\r\n requestAnimationFrame(checkFace);\r\n };\r\n requestAnimationFrame(checkFace);\r\n });\r\n\r\n ui.updateInstruction(\"Getting ready…\");\r\n // Settle delay — gives camera AE/AF time to lock before challenge starts\r\n await new Promise((r) => setTimeout(r, 500));\r\n\r\n // W9: Autoshot captured AFTER challenge (moved from before create).\r\n // We take a placeholder-size stub here only to satisfy liveness.create()\r\n // which currently expects autoshot_file — the real autoshot is captured\r\n // after all challenge actions complete and is sent on submit instead.\r\n // The backend ignores the create-time autoshot for face comparison;\r\n // only the submit-time autoshot is used. Pass undefined here and\r\n // capture the real one post-challenge below.\r\n\r\n // 4. Create liveness entry on backend (skip if retrying with existing entry)\r\n const challengeActions = actions || [...DEFAULT_CHALLENGE_ACTIONS];\r\n let entry: LivenessCreateResponse;\r\n\r\n if (existingEntryId) {\r\n entry = { id: existingEntryId, challenge_actions: challengeActions, status: \"pending\", client_id: \"\", expires_at: null };\r\n } else {\r\n const deviceMeta = collectDeviceMetadata();\r\n entry = await this.create({\r\n identifier: params.identifier,\r\n identifier_type: params.identifier_type,\r\n country: params.country,\r\n challenge_actions: challengeActions,\r\n // W9: No autoshot at create time — real one captured post-challenge\r\n autoshot_file: undefined,\r\n document: params.document || params.document_front || params.id_file || capturedDocBlob,\r\n document_back: params.document_back,\r\n identity_check: params.identity_check,\r\n device_type: deviceMeta.device_type,\r\n os_name: deviceMeta.os_name,\r\n browser_timezone: deviceMeta.browser_timezone,\r\n fingerprint_id: deviceMeta.fingerprint_id,\r\n });\r\n }\r\n\r\n tempVideo.pause();\r\n // B3: Remove tempVideo from DOM to release the camera light indicator\r\n // on devices that show it while a video element holds a stream reference.\r\n tempVideo.srcObject = null;\r\n tempVideo.remove();\r\n\r\n // 5. Mount the passive scan UI — single oval view, one instruction,\r\n // no step-by-step challenge list. The backend still receives a\r\n // challenge_actions tag ([\"BLINK\"]) for compatibility; the widget no\r\n // longer commands discrete actions in sequence.\r\n const uiChallenge = {\r\n time_limit_seconds: LIVENESS_TIME_LIMIT_SECONDS,\r\n instruction: \"Blink naturally and slowly turn your head from side to side\",\r\n };\r\n\r\n ui.unmount();\r\n const videoEl = ui.mount(container, { ...uiChallenge, instruction: \"Starting scan…\" });\r\n videoEl.srcObject = stream;\r\n await videoEl.play();\r\n\r\n // 7. Wait for camera AE/AF to re-stabilise after re-mounting the video\r\n // element before scanning/recording — avoids a blurry first second.\r\n // \"Starting scan…\" (set above) covers this wait so the pause between\r\n // phase 1 (centering) and phase 2 (the actual scan) reads as an\r\n // intentional handoff instead of the same instruction just sitting\r\n // there through an unexplained delay.\r\n await new Promise((r) => setTimeout(r, 1000));\r\n ui.updateInstruction(uiChallenge.instruction);\r\n\r\n // 8. Start recording immediately — the whole scan window is short and\r\n // clean by design (no fast head-turn/mouth-open motion to blur it), so\r\n // it doubles as the clip sent to SmartComply's LIVENESS pipeline.\r\n recorder.start(stream);\r\n // Reset the progress ring's clock to now — it was mounted ~1s ago\r\n // (see step 5/7 above), so without this the ring would visually run\r\n // ahead of the actual detection window it's supposed to represent.\r\n ui.startScanClock();\r\n\r\n // Passive natural-motion detection: watch for a genuine blink or head\r\n // movement (whichever the user does first while looking around), for\r\n // up to the scan time limit. A minimum dwell time avoids ending the\r\n // scan on a single lucky frame before the camera has settled.\r\n const MIN_SCAN_MS = 2000;\r\n const actionDetector = new ActionDetector();\r\n\r\n let scanAnimFrameId: number | undefined;\r\n let scanTimeoutId: ReturnType<typeof setTimeout> | undefined;\r\n const scanPromise = new Promise<\"completed\" | \"timeout\">(\r\n (resolve) => {\r\n const scanStart = performance.now();\r\n\r\n scanTimeoutId = setTimeout(() => {\r\n if (scanAnimFrameId !== undefined) cancelAnimationFrame(scanAnimFrameId);\r\n resolve(\"timeout\");\r\n }, uiChallenge.time_limit_seconds * 1000);\r\n\r\n const detectLoop = () => {\r\n if (videoEl.readyState >= 2) {\r\n const detection = faceEngine.detect(videoEl, performance.now());\r\n const scan = actionDetector.check(detection);\r\n ui.updateScanProgress(scan.livenessConfirmed);\r\n ui.setFaceTracking(detection.faceDetected);\r\n\r\n if (!detection.faceDetected) {\r\n ui.updateInstruction(\"Move closer so your whole face fits in the oval\");\r\n } else {\r\n ui.updateInstruction(uiChallenge.instruction);\r\n }\r\n\r\n // Require the face to be present in THIS frame too — scan.livenessConfirmed\r\n // latches true forever once a blink/motion is seen, so without this check\r\n // the scan could complete on elapsed time alone while the user has since\r\n // moved out of frame, ending the recording on an empty/unusable frame\r\n // right before the autoshot capture below.\r\n const elapsed = performance.now() - scanStart;\r\n if (detection.faceDetected && scan.livenessConfirmed && elapsed >= MIN_SCAN_MS) {\r\n clearTimeout(scanTimeoutId);\r\n if (scanAnimFrameId !== undefined) cancelAnimationFrame(scanAnimFrameId);\r\n resolve(\"completed\");\r\n return;\r\n }\r\n }\r\n\r\n scanAnimFrameId = requestAnimationFrame(detectLoop);\r\n };\r\n\r\n detectLoop();\r\n }\r\n );\r\n\r\n let detectionResult: \"completed\" | \"timeout\";\r\n try {\r\n detectionResult = await Promise.race([scanPromise, interrupted]);\r\n } catch (interruptErr) {\r\n // Camera died mid-recording — stop the loop/timer and discard the\r\n // now-unusable (truncated/frozen) recording rather than submitting it.\r\n if (scanAnimFrameId !== undefined) cancelAnimationFrame(scanAnimFrameId);\r\n if (scanTimeoutId !== undefined) clearTimeout(scanTimeoutId);\r\n recorder.stop().catch(() => {});\r\n throw interruptErr;\r\n }\r\n\r\n // ── On timeout: show retry screen, clean up, restart ──────────\r\n if (detectionResult === \"timeout\") {\r\n // IMPORTANT: mark cleanedUp=true BEFORE returning the new Promise so\r\n // the outer `finally` block does NOT call cleanup() immediately —\r\n // which would destroy the UI before the user sees the timeout screen.\r\n cleanedUp = true;\r\n\r\n return new Promise<LivenessSubmitResponse>((resolveRetry, rejectRetry) => {\r\n ui.showTimeout(() => {\r\n // User clicked \"Try Again\" — now it is safe to destroy this attempt\r\n recorder.stop().catch(() => {}); // discard partial recording\r\n faceEngine.destroy();\r\n camera.stop();\r\n ui.unmount();\r\n\r\n // Restart liveness with same entry ID to prevent duplicate charges (D1)\r\n // Pass capturedDocBlob forward so document scan step is not repeated.\r\n this.startCheck(\r\n container,\r\n { ...params, id_file: capturedDocBlob },\r\n actions,\r\n entry.id\r\n )\r\n .then(resolveRetry)\r\n .catch(rejectRetry);\r\n });\r\n // showTimeout waits for the user to click — the promise stays pending.\r\n });\r\n }\r\n\r\n // ── On completion: capture stills, close out the recording, submit ──\r\n\r\n ui.updateInstruction(\"Verifying...\");\r\n\r\n // Capture autoshot (real selfie) — face already settled from the scan,\r\n // camera AE locked. Same quality-gated capture used throughout.\r\n const autoshotBlob = await this.captureFrame(videoEl);\r\n if (!autoshotBlob || autoshotBlob.size === 0) {\r\n recorder.stop().catch(() => {});\r\n throw new Error(\"Failed to capture selfie. Please ensure your face is visible and try again.\");\r\n }\r\n\r\n // Capture a snapshot frame as well (same timing, slightly different use)\r\n const snapshotBlob = await this.captureFrame(videoEl);\r\n\r\n // 9. Stop recording — the scan window itself (short, clean, natural\r\n // blink/motion) is what SmartComply's LIVENESS mode analyses: blink\r\n // and motion detection, then its own comparison frame extracted from\r\n // this same video.\r\n const recorded = await recorder.stop();\r\n const videoBlob = recorded.blob;\r\n const durationSeconds = recorded.durationSeconds;\r\n\r\n // 10. Submit to backend — always include autoshot so document-flow\r\n // entries (which bypassed create() via existingEntryId) still get it.\r\n const submitResult = await this.submit(\r\n entry.id,\r\n videoBlob,\r\n snapshotBlob,\r\n autoshotBlob,\r\n durationSeconds,\r\n videoBlob.size,\r\n (fraction) => {\r\n const pct = Math.round(fraction * 100);\r\n ui.updateInstruction(pct < 100 ? `Uploading... ${pct}%` : \"Verifying...\");\r\n }\r\n );\r\n\r\n // 11. Show success overlay briefly before the flow advances\r\n await ui.showResult(\r\n submitResult.status === \"failed\" ? \"failed\" : \"processing\",\r\n submitResult.id\r\n );\r\n\r\n return submitResult;\r\n\r\n } finally {\r\n cleanup();\r\n }\r\n }\r\n\r\n /**\r\n * Capture a single sharp frame from a video element as a JPEG Blob.\r\n * Retries up to maxAttempts times (300 ms apart) if the Laplacian blur\r\n * score is below threshold, then falls back to the best frame captured.\r\n *\r\n * Threshold calibration:\r\n * The server rejects images with OpenCV Laplacian variance < 80.\r\n * This SDK uses sum-of-squared Laplacian (different normalisation) —\r\n * empirically ~100 here corresponds to ~80 server-side. We aim for 120\r\n * to give a comfortable safety margin.\r\n */\r\n private async captureFrame(\r\n video: HTMLVideoElement,\r\n maxAttempts = 5\r\n ): Promise<Blob> {\r\n const MIN_BLUR_SCORE = 120; // calibrated to server threshold of 80 (different scale)\r\n const MIN_BRIGHTNESS = 40; // 0-255 — below this = too dark for face comparison\r\n const MAX_BRIGHTNESS = 220; // above this = too bright/overexposed\r\n const RETRY_DELAY_MS = 200;\r\n let bestBlob: Blob | null = null;\r\n let bestScore = -1;\r\n\r\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = video.videoWidth || 640;\r\n canvas.height = video.videoHeight || 480;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) throw new Error(\"Failed to get canvas context\");\r\n ctx.drawImage(video, 0, 0);\r\n\r\n const blurScore = this._computeBlurScore(canvas);\r\n const brightness = this._computeBrightness(canvas);\r\n const brightnessOk = brightness >= MIN_BRIGHTNESS && brightness <= MAX_BRIGHTNESS;\r\n\r\n // Combined quality score — blur is primary, brightness gates it\r\n const qualityScore = brightnessOk ? blurScore : 0;\r\n\r\n const blob = await new Promise<Blob | null>((res) =>\r\n canvas.toBlob((b) => res(b), \"image/jpeg\", 0.92)\r\n );\r\n\r\n if (blob && qualityScore > bestScore) {\r\n bestBlob = blob;\r\n bestScore = qualityScore;\r\n }\r\n\r\n // Stop early if both blur and brightness are acceptable\r\n if (blurScore >= MIN_BLUR_SCORE && brightnessOk) break;\r\n\r\n if (attempt < maxAttempts - 1) {\r\n await new Promise((r) => setTimeout(r, RETRY_DELAY_MS));\r\n }\r\n }\r\n\r\n if (bestBlob) return bestBlob;\r\n throw new Error(\"Failed to capture frame\");\r\n }\r\n\r\n /**\r\n * Compute average brightness (0–255) of the centre-cropped frame.\r\n * Used to reject frames that are too dark or overexposed before sending\r\n * to face comparison — server rejects IMAGE_TOO_DARK below ~40 luminance.\r\n */\r\n private _computeBrightness(canvas: HTMLCanvasElement): number {\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return 128;\r\n const sw = Math.min(canvas.width, 320);\r\n const sh = Math.min(canvas.height, 240);\r\n const sx = Math.floor((canvas.width - sw) / 2);\r\n const sy = Math.floor((canvas.height - sh) / 2);\r\n const { data } = ctx.getImageData(sx, sy, sw, sh);\r\n let total = 0;\r\n const pixels = sw * sh;\r\n for (let i = 0; i < pixels; i++) {\r\n total += 0.299 * data[i * 4] + 0.587 * data[i * 4 + 1] + 0.114 * data[i * 4 + 2];\r\n }\r\n return total / pixels;\r\n }\r\n\r\n /**\r\n * Sum-of-squared Laplacian blur metric on a centre-cropped region (320×240 max).\r\n * Higher score = sharper image.\r\n *\r\n * NOTE: This is sum-of-squares, NOT Laplacian variance (which OpenCV uses).\r\n * The two scales differ — empirically, a score of ~120 here corresponds to\r\n * ~80 on the server side (OpenCV cv2.Laplacian().var()). Keep MIN_BLUR_SCORE\r\n * in captureFrame() calibrated against this.\r\n */\r\n private _computeBlurScore(canvas: HTMLCanvasElement): number {\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return 0;\r\n\r\n // Sample a 320×240 centre crop for performance\r\n const sw = Math.min(canvas.width, 320);\r\n const sh = Math.min(canvas.height, 240);\r\n const sx = Math.floor((canvas.width - sw) / 2);\r\n const sy = Math.floor((canvas.height - sh) / 2);\r\n\r\n const { data, width, height } = ctx.getImageData(sx, sy, sw, sh);\r\n\r\n // Convert to greyscale\r\n const gray = new Float32Array(width * height);\r\n for (let i = 0; i < width * height; i++) {\r\n gray[i] =\r\n 0.299 * data[i * 4] +\r\n 0.587 * data[i * 4 + 1] +\r\n 0.114 * data[i * 4 + 2];\r\n }\r\n\r\n // Laplacian convolution [0,1,0 / 1,-4,1 / 0,1,0] — sum of squared responses\r\n let sum = 0;\r\n let n = 0;\r\n for (let y = 1; y < height - 1; y++) {\r\n for (let x = 1; x < width - 1; x++) {\r\n const l =\r\n gray[(y - 1) * width + x] +\r\n gray[(y + 1) * width + x] +\r\n gray[y * width + (x - 1)] +\r\n gray[y * width + (x + 1)] -\r\n 4 * gray[y * width + x];\r\n sum += l * l;\r\n n++;\r\n }\r\n }\r\n return n > 0 ? sum / n : 0;\r\n }\r\n}\r\n", "import { SDKConfig } from \"./Config\";\r\nimport { HttpClient } from \"./HttpClient\";\r\nimport { OnboardingModule } from \"../modules/onboarding/onboarding\";\r\nimport { LivenessModule } from \"../modules/liveness/liveness\";\r\nimport {\r\n SessionResponse,\r\n SDKInitConfig,\r\n} from \"../types/onboarding\";\r\n\r\n/**\r\n * SmartComply SDK — main entry point.\r\n *\r\n * Usage:\r\n * const sdk = new SmartComply({ apiKey: \"pk_...\", clientId: \"uuid-...\", environment: \"sandbox\" });\r\n * const session = await sdk.createSession();\r\n * const config = await sdk.initializeConfig();\r\n * // ... use sdk.onboarding and sdk.liveness modules\r\n */\r\nexport class SmartComply {\r\n private http: HttpClient;\r\n private clientId: string;\r\n private _sessionToken: string | null = null;\r\n private _sessionExpiresAt: string | null = null;\r\n private _sdkConfig: SDKInitConfig | null = null;\r\n\r\n public onboarding: OnboardingModule;\r\n public liveness: LivenessModule;\r\n\r\n constructor(config: SDKConfig) {\r\n if (!config.apiKey) {\r\n throw new Error(\"SmartComply: apiKey is required\");\r\n }\r\n if (!config.clientId) {\r\n throw new Error(\"SmartComply: clientId is required (UUID from your SDK config)\");\r\n }\r\n\r\n this.clientId = config.clientId;\r\n this.http = new HttpClient(config);\r\n\r\n this.onboarding = new OnboardingModule(this.http);\r\n this.liveness = new LivenessModule(this.http);\r\n }\r\n\r\n /** Current session token (null if not created yet) */\r\n get sessionToken(): string | null {\r\n return this._sessionToken;\r\n }\r\n\r\n /** Session expiration ISO timestamp */\r\n get sessionExpiresAt(): string | null {\r\n return this._sessionExpiresAt;\r\n }\r\n\r\n /** SDK config fetched from backend (null until initializeConfig() is called) */\r\n get sdkConfig(): SDKInitConfig | null {\r\n return this._sdkConfig;\r\n }\r\n\r\n /**\r\n * Create a new SDK session.\r\n *\r\n * POST /v1/session/create/\r\n * Auth: Authorization: Bearer <apiKey>\r\n * Body: { client_id: \"<uuid>\" }\r\n *\r\n * Returns: { token: \"...\", expires_at: \"...\" }\r\n */\r\n async createSession(): Promise<SessionResponse> {\r\n const response = await this.http.request<SessionResponse>(\r\n \"POST\",\r\n \"/v1/session/create/\",\r\n { client_id: this.clientId }\r\n );\r\n\r\n this._sessionToken = response.token;\r\n this._sessionExpiresAt = response.expires_at;\r\n\r\n // Set the session token on the HTTP client for subsequent requests\r\n this.http.setSessionToken(response.token);\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Fetch SDK configuration from the backend.\r\n * Must be called after createSession().\r\n *\r\n * GET /v1/initialize/\r\n * Auth: x-access-token: <sessionToken>\r\n *\r\n * Returns: { brand_name, theme, verification_type, channels, redirect_url, ... }\r\n */\r\n async initializeConfig(): Promise<SDKInitConfig> {\r\n const config = await this.http.sessionRequest<SDKInitConfig>(\r\n \"GET\",\r\n \"/v1/initialize/\"\r\n );\r\n\r\n this._sdkConfig = config;\r\n return config;\r\n }\r\n}\r\n", "/**\r\n * Theme system for the SmartComply Flow widget.\r\n * Maps to backend's SDKConfig.THEME_CHOICES:\r\n * default, midnight_blue, sunset_gold, forest_emerald\r\n */\r\n\r\nexport interface ThemeColors {\r\n primary: string;\r\n primaryHover: string;\r\n primaryGlow: string;\r\n bg: string;\r\n cardBg: string;\r\n inputBg: string;\r\n text: string;\r\n textSecondary: string;\r\n textMuted: string;\r\n border: string;\r\n borderFocus: string;\r\n success: string;\r\n successBg: string;\r\n error: string;\r\n errorBg: string;\r\n warning: string;\r\n overlay: string;\r\n shimmer: string;\r\n shadow: string;\r\n isDark: boolean;\r\n}\r\n\r\n/**\r\n * Shared spacing/radius/type scale — one source of truth so every screen's\r\n * card/button/heading proportions visibly belong to the same system instead\r\n * of each picking its own ad hoc pixel value.\r\n */\r\nexport const RADIUS = {\r\n sm: 8,\r\n md: 12,\r\n lg: 16,\r\n pill: 999,\r\n} as const;\r\n\r\nexport const TYPE = {\r\n xs: 12,\r\n sm: 13,\r\n base: 15,\r\n headingSm: 16,\r\n heading: 18,\r\n headingLg: 22,\r\n} as const;\r\n\r\nexport const THEMES: Record<string, ThemeColors> = {\r\n default: {\r\n primary: \"#3b82f6\",\r\n primaryHover: \"#2563eb\",\r\n primaryGlow: \"rgba(59, 130, 246, 0.25)\",\r\n bg: \"#ffffff\",\r\n cardBg: \"#f8fafc\",\r\n inputBg: \"#f1f5f9\",\r\n text: \"#0f172a\",\r\n textSecondary: \"#475569\",\r\n textMuted: \"#94a3b8\",\r\n border: \"#e2e8f0\",\r\n borderFocus: \"#3b82f6\",\r\n success: \"#22c55e\",\r\n successBg: \"rgba(34, 197, 94, 0.1)\",\r\n error: \"#ef4444\",\r\n errorBg: \"rgba(239, 68, 68, 0.1)\",\r\n warning: \"#f59e0b\",\r\n overlay: \"rgba(15, 23, 42, 0.6)\",\r\n shimmer: \"rgba(59, 130, 246, 0.08)\",\r\n shadow: \"0 20px 60px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(0, 0, 0, 0.05)\",\r\n isDark: false,\r\n },\r\n\r\n midnight_blue: {\r\n primary: \"#60a5fa\",\r\n primaryHover: \"#93bbfd\",\r\n primaryGlow: \"rgba(96, 165, 250, 0.2)\",\r\n bg: \"#0b1120\",\r\n cardBg: \"#111d33\",\r\n inputBg: \"#162032\",\r\n text: \"#f1f5f9\",\r\n textSecondary: \"#94a3b8\",\r\n textMuted: \"#64748b\",\r\n border: \"#1e3a5f\",\r\n borderFocus: \"#60a5fa\",\r\n success: \"#4ade80\",\r\n successBg: \"rgba(74, 222, 128, 0.1)\",\r\n error: \"#f87171\",\r\n errorBg: \"rgba(248, 113, 113, 0.1)\",\r\n warning: \"#fbbf24\",\r\n overlay: \"rgba(0, 0, 0, 0.75)\",\r\n shimmer: \"rgba(96, 165, 250, 0.06)\",\r\n shadow: \"0 20px 60px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(96, 165, 250, 0.1)\",\r\n isDark: true,\r\n },\r\n\r\n sunset_gold: {\r\n primary: \"#f59e0b\",\r\n primaryHover: \"#d97706\",\r\n primaryGlow: \"rgba(245, 158, 11, 0.2)\",\r\n bg: \"#fffdf7\",\r\n cardBg: \"#fef9ee\",\r\n inputBg: \"#fef3c7\",\r\n text: \"#1c1917\",\r\n textSecondary: \"#57534e\",\r\n textMuted: \"#a8a29e\",\r\n border: \"#fed7aa\",\r\n borderFocus: \"#f59e0b\",\r\n success: \"#22c55e\",\r\n successBg: \"rgba(34, 197, 94, 0.1)\",\r\n error: \"#ef4444\",\r\n errorBg: \"rgba(239, 68, 68, 0.1)\",\r\n warning: \"#f59e0b\",\r\n overlay: \"rgba(28, 25, 23, 0.6)\",\r\n shimmer: \"rgba(245, 158, 11, 0.08)\",\r\n shadow: \"0 20px 60px rgba(0, 0, 0, 0.12), 0 0 0 1px rgba(245, 158, 11, 0.1)\",\r\n isDark: false,\r\n },\r\n\r\n forest_emerald: {\r\n primary: \"#10b981\",\r\n primaryHover: \"#059669\",\r\n primaryGlow: \"rgba(16, 185, 129, 0.2)\",\r\n bg: \"#f7fdf9\",\r\n cardBg: \"#ecfdf5\",\r\n inputBg: \"#d1fae5\",\r\n text: \"#1a1a2e\",\r\n textSecondary: \"#4b5563\",\r\n textMuted: \"#9ca3af\",\r\n border: \"#a7f3d0\",\r\n borderFocus: \"#10b981\",\r\n success: \"#22c55e\",\r\n successBg: \"rgba(34, 197, 94, 0.1)\",\r\n error: \"#ef4444\",\r\n errorBg: \"rgba(239, 68, 68, 0.1)\",\r\n warning: \"#f59e0b\",\r\n overlay: \"rgba(26, 26, 46, 0.6)\",\r\n shimmer: \"rgba(16, 185, 129, 0.08)\",\r\n shadow: \"0 20px 60px rgba(0, 0, 0, 0.12), 0 0 0 1px rgba(16, 185, 129, 0.1)\",\r\n isDark: false,\r\n },\r\n};\r\n\r\n/**\r\n * Return a theme by name, with an optional hex override for client branding.\r\n * If hex is provided, the named theme is used as the base and all primary\r\n * colour slots are replaced with the client's brand hex — so buttons, borders,\r\n * focus rings, and glows all use the client's colour instead of the default.\r\n */\r\nexport function getTheme(name: string, hex?: string | null): ThemeColors {\r\n const base = { ...(THEMES[name] || THEMES.default) };\r\n if (hex && /^#[0-9A-Fa-f]{6}$/.test(hex.trim())) {\r\n const h = hex.trim();\r\n // Derive a slightly darker hover shade by reducing lightness ~10%\r\n const hover = _darkenHex(h, 15);\r\n base.primary = h;\r\n base.primaryHover = hover;\r\n base.primaryGlow = `${h}40`; // 25% opacity\r\n base.borderFocus = h;\r\n base.shimmer = `${h}14`; // 8% opacity\r\n }\r\n return base;\r\n}\r\n\r\n/** Darken a #rrggbb hex colour by subtracting `amount` from each channel. */\r\nfunction _darkenHex(hex: string, amount: number): string {\r\n const n = parseInt(hex.slice(1), 16);\r\n const r = Math.max(0, (n >> 16) - amount);\r\n const g = Math.max(0, ((n >> 8) & 0xff) - amount);\r\n const b = Math.max(0, (n & 0xff) - amount);\r\n return `#${((r << 16) | (g << 8) | b).toString(16).padStart(6, \"0\")}`;\r\n}\r\n", "/**\n * Shared document-type rules used by both the ID-type selection screen\n * (SmartComplyFlow) and the capture component (DocumentCapture) — kept in\n * one place so the two can't silently diverge on which documents need a\n * back-side photo.\n */\n\n/**\n * Whether a document's back side should be captured:\n * true — required, the flow forces a back-capture step\n * false — never offered\n * \"optional\" — offered, but the user can skip it and proceed on front alone\n */\nexport type BackSideMode = boolean | \"optional\";\n\n/** Documents where the backend OCR pipeline needs (or can use) the reverse side. */\nexport function requiresBackSide(documentType: string): BackSideMode {\n const type = documentType.toLowerCase();\n if (type.includes(\"nin\")) {\n // The physical NIN card is two-sided, but not every printed card in\n // circulation carries meaningful back-side content — offer the step\n // instead of forcing it.\n return \"optional\";\n }\n return type.includes(\"voter\") ||\n type.includes(\"driver\") ||\n type.includes(\"license\") ||\n type.includes(\"national id\") ||\n type.includes(\"national id card\") ||\n type.includes(\"ghana\");\n // Passport: back side is the machine-readable zone but OCR reads from front only.\n}\n\n/**\n * Scale ratio for fitting an image within maxWidth x maxHeight, never\n * upscaling. Shared by DocumentCapture's canvas sizing and compressImage so\n * both agree on the same clamp-at-1 behavior.\n */\nexport function computeScaleRatio(\n srcWidth: number,\n srcHeight: number,\n maxWidth: number,\n maxHeight: number\n): number {\n return Math.min(maxWidth / srcWidth, maxHeight / srcHeight, 1);\n}\n", "/**\r\n * Image Quality Assessment for Document Capture\r\n * Client-side quality checks before sending to backend\r\n */\r\n\r\nexport interface QualityMetrics {\r\n sharpness: number;\r\n contrast: number;\r\n brightness: number;\r\n isBlurry: boolean;\r\n hasGlare: boolean;\r\n overallScore: number;\r\n}\r\n\r\nexport interface QualityFeedback {\r\n isValid: boolean;\r\n message: string;\r\n recommendations: string[];\r\n quality: QualityMetrics;\r\n}\r\n\r\n/**\r\n * Calculate image sharpness using Laplacian variance\r\n * Higher values = sharper image\r\n */\r\nexport function calculateSharpness(imageData: ImageData): number {\r\n const { width, height, data } = imageData;\r\n \r\n // Convert to grayscale\r\n const gray = new Uint8Array(width * height);\r\n for (let i = 0; i < width * height; i++) {\r\n const idx = i * 4;\r\n gray[i] = Math.round(0.299 * data[idx] + 0.587 * data[idx + 1] + 0.114 * data[idx + 2]);\r\n }\r\n \r\n // Apply Laplacian kernel\r\n const laplacian = new Float32Array(width * height);\r\n let sum = 0;\r\n let sumSq = 0;\r\n let count = 0;\r\n \r\n for (let y = 1; y < height - 1; y++) {\r\n for (let x = 1; x < width - 1; x++) {\r\n const idx = y * width + x;\r\n \r\n // Laplacian kernel\r\n const val = \r\n -1 * gray[idx - width] +\r\n -1 * gray[idx - 1] +\r\n 4 * gray[idx] +\r\n -1 * gray[idx + 1] +\r\n -1 * gray[idx + width];\r\n \r\n laplacian[idx] = val;\r\n sum += val;\r\n sumSq += val * val;\r\n count++;\r\n }\r\n }\r\n \r\n // Calculate variance\r\n const mean = sum / count;\r\n const variance = (sumSq / count) - (mean * mean);\r\n \r\n return Math.abs(variance);\r\n}\r\n\r\n/**\r\n * Detect glare (overexposed areas)\r\n */\r\nexport function detectGlare(imageData: ImageData, threshold: number = 250): number {\r\n const { data } = imageData;\r\n let overexposed = 0;\r\n \r\n for (let i = 0; i < data.length; i += 4) {\r\n const brightness = (data[i] + data[i + 1] + data[i + 2]) / 3;\r\n if (brightness > threshold) {\r\n overexposed++;\r\n }\r\n }\r\n \r\n return overexposed / (data.length / 4);\r\n}\r\n\r\n/**\r\n * Calculate contrast (standard deviation)\r\n */\r\nexport function calculateContrast(imageData: ImageData): number {\r\n const { data } = imageData;\r\n let sum = 0;\r\n let sumSq = 0;\r\n const pixelCount = data.length / 4;\r\n \r\n for (let i = 0; i < data.length; i += 4) {\r\n const gray = 0.299 * data[i] + 0.587 * data[i + 1] + 0.114 * data[i + 2];\r\n sum += gray;\r\n sumSq += gray * gray;\r\n }\r\n \r\n const mean = sum / pixelCount;\r\n const variance = (sumSq / pixelCount) - (mean * mean);\r\n \r\n return Math.sqrt(variance);\r\n}\r\n\r\n/**\r\n * Calculate brightness (mean pixel value)\r\n */\r\nexport function calculateBrightness(imageData: ImageData): number {\r\n const { data } = imageData;\r\n let sum = 0;\r\n \r\n for (let i = 0; i < data.length; i += 4) {\r\n sum += (data[i] + data[i + 1] + data[i + 2]) / 3;\r\n }\r\n \r\n return sum / (data.length / 4);\r\n}\r\n\r\n/**\r\n * Full quality assessment.\r\n *\r\n * Threshold note: these cutoffs (sharpness<80, glare>15%, brightness\r\n * outside 50-200, contrast<30) are not calibrated against a specific input\r\n * resolution — Laplacian-variance sharpness in particular scales with image\r\n * size, so scoring a full-resolution capture vs. a downscaled copy can\r\n * shift the result. Caller (DocumentCapture._checkPhotoQuality) downscales\r\n * to a fixed 640px before calling this, so keep that pairing consistent —\r\n * if the downscale size changes, these thresholds should be re-checked\r\n * against real captures at the new size. This function is used as an\r\n * advisory-only nudge (never blocks submission), so a threshold that's\r\n * somewhat off costs an occasional wrong nudge, not a broken flow.\r\n */\r\nexport function assessQuality(imageData: ImageData): QualityFeedback {\r\n const sharpness = calculateSharpness(imageData);\r\n const glare = detectGlare(imageData);\r\n const contrast = calculateContrast(imageData);\r\n const brightness = calculateBrightness(imageData);\r\n \r\n const isBlurry = sharpness < 80;\r\n const hasGlare = glare > 0.15;\r\n const isTooDark = brightness < 50;\r\n const isTooBright = brightness > 200;\r\n const lowContrast = contrast < 30;\r\n \r\n // Calculate overall score (0-100)\r\n let score = 100;\r\n if (isBlurry) score -= 40;\r\n if (hasGlare) score -= 25;\r\n if (isTooDark) score -= 20;\r\n if (isTooBright) score -= 20;\r\n if (lowContrast) score -= 15;\r\n \r\n const metrics: QualityMetrics = {\r\n sharpness: Math.round(sharpness * 10) / 10,\r\n contrast: Math.round(contrast * 10) / 10,\r\n brightness: Math.round(brightness * 10) / 10,\r\n isBlurry,\r\n hasGlare,\r\n overallScore: Math.max(0, score),\r\n };\r\n \r\n // Generate feedback\r\n const issues: string[] = [];\r\n const recommendations: string[] = [];\r\n \r\n if (isBlurry) {\r\n issues.push(\"Too blurry\");\r\n recommendations.push(\"Hold camera steady\");\r\n recommendations.push(\"Ensure good lighting\");\r\n }\r\n \r\n if (hasGlare) {\r\n issues.push(\"Too much glare\");\r\n recommendations.push(\"Avoid direct light on document\");\r\n recommendations.push(\"Tilt document slightly\");\r\n }\r\n \r\n if (isTooDark) {\r\n issues.push(\"Too dark\");\r\n recommendations.push(\"Move to brighter area\");\r\n recommendations.push(\"Turn on more lights\");\r\n }\r\n \r\n if (isTooBright) {\r\n issues.push(\"Too bright\");\r\n recommendations.push(\"Reduce lighting\");\r\n recommendations.push(\"Move away from direct sun\");\r\n }\r\n \r\n if (lowContrast) {\r\n issues.push(\"Low contrast\");\r\n recommendations.push(\"Ensure even lighting\");\r\n }\r\n \r\n const isValid = score >= 60;\r\n const message = issues.length > 0 \r\n ? issues.join(\", \")\r\n : \"Good quality\";\r\n \r\n return {\r\n isValid,\r\n message,\r\n recommendations: recommendations.slice(0, 3), // Max 3 recommendations\r\n quality: metrics,\r\n };\r\n}\r\n\r\n/**\r\n * Get quality color for UI feedback\r\n */\r\nexport function getQualityColor(score: number): string {\r\n if (score >= 80) return \"#22c55e\"; // Green\r\n if (score >= 60) return \"#eab308\"; // Yellow\r\n return \"#ef4444\"; // Red\r\n}\r\n\r\n/**\r\n * Get quality message for display\r\n */\r\nexport function getQualityMessage(score: number): string {\r\n if (score >= 80) return \"Excellent - Ready to capture\";\r\n if (score >= 60) return \"Good - Can capture\";\r\n if (score >= 40) return \"Fair - Improve if possible\";\r\n return \"Poor - Please adjust\";\r\n}\r\n", "/**\n * Shared inline-SVG icon set — replaces raw emoji used as sized/positioned\n * UI chrome (badges, buttons, step icons). Emoji used as plain inline\n * decoration in body copy is intentionally left alone.\n *\n * Every icon is a single-color stroke glyph using currentColor, so it\n * recolors correctly wherever it's placed (theme.primary, theme.error, a\n * plain text color, etc.) via CSS `color`, with no per-call-site fill wiring.\n */\n\ntype IconName =\n | \"shield\"\n | \"id-card\"\n | \"document\"\n | \"check\"\n | \"close\"\n | \"camera\"\n | \"gallery\"\n | \"network\"\n | \"clock\"\n | \"search\"\n | \"calendar\"\n | \"face\"\n | \"warning\"\n | \"passport\"\n | \"car\"\n | \"ballot\"\n | \"refresh\"\n | \"rotate\";\n\nconst PATHS: Record<IconName, string> = {\n shield:\n '<path d=\"M12 2l8 3v6c0 5-3.5 8.5-8 11-4.5-2.5-8-6-8-11V5l8-3z\"/>',\n \"id-card\":\n '<rect x=\"2\" y=\"5\" width=\"20\" height=\"14\" rx=\"2\"/><circle cx=\"8\" cy=\"12\" r=\"2\"/><path d=\"M13 10h6M13 14h4\"/>',\n document:\n '<path d=\"M6 2h9l5 5v15H6z\"/><path d=\"M15 2v5h5\"/><path d=\"M9 13h6M9 17h6\"/>',\n check: '<path d=\"M4 12l6 6L20 6\"/>',\n close: '<path d=\"M5 5l14 14M19 5L5 19\"/>',\n camera:\n '<path d=\"M4 8h3l2-3h6l2 3h3v11H4z\"/><circle cx=\"12\" cy=\"13\" r=\"3.5\"/>',\n gallery:\n '<rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\"/><circle cx=\"8.5\" cy=\"9.5\" r=\"1.5\"/><path d=\"M21 15l-5-5-9 9\"/>',\n network:\n '<path d=\"M2 8.5a17 17 0 0120 0M5.5 12.5a12 12 0 0113 0M9 16.5a6 6 0 016 0\"/><circle cx=\"12\" cy=\"20\" r=\"1\"/>',\n clock: '<circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M12 7v5l3.5 2\"/>',\n search:\n '<circle cx=\"10.5\" cy=\"10.5\" r=\"6.5\"/><path d=\"M20 20l-4.8-4.8\"/>',\n calendar:\n '<rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\"/><path d=\"M3 10h18M8 3v4M16 3v4\"/>',\n face: '<circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M9 10h.01M15 10h.01M8.5 15c1 1.2 2.2 1.8 3.5 1.8s2.5-.6 3.5-1.8\"/>',\n warning:\n '<path d=\"M12 3l10 18H2z\"/><path d=\"M12 10v4\"/><circle cx=\"12\" cy=\"17\" r=\"0.5\" fill=\"currentColor\"/>',\n passport:\n '<rect x=\"5\" y=\"2\" width=\"14\" height=\"20\" rx=\"2\"/><circle cx=\"12\" cy=\"9\" r=\"2.5\"/><path d=\"M9 15h6\"/>',\n car: '<path d=\"M4 16V11l2-5h12l2 5v5\"/><path d=\"M4 16h16M7 16v2M17 16v2\"/><circle cx=\"7.5\" cy=\"14\" r=\"1\"/><circle cx=\"16.5\" cy=\"14\" r=\"1\"/>',\n ballot:\n '<rect x=\"4\" y=\"8\" width=\"16\" height=\"12\" rx=\"1\"/><path d=\"M9 8V5a3 3 0 016 0v3\"/><path d=\"M12 12v4\"/>',\n refresh:\n '<path d=\"M4 4v6h6\"/><path d=\"M20 20v-6h-6\"/><path d=\"M20 10a8 8 0 00-14.6-4.6M4 14a8 8 0 0014.6 4.6\"/>',\n rotate:\n '<rect x=\"7\" y=\"7\" width=\"12\" height=\"12\" rx=\"2\"/><path d=\"M7 4h5a4 4 0 014 4\"/><path d=\"M13 1.5L16 4l-3 2.5\"/>',\n};\n\n/** Returns an inline <svg> markup string for the given icon name. */\nexport function icon(name: IconName, size = 24): string {\n const d = PATHS[name];\n return `<svg width=\"${size}\" height=\"${size}\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">${d}</svg>`;\n}\n\nexport type { IconName };\n", "import { ThemeColors } from \"./theme\";\n\nlet injected = false;\n\nfunction injectSpinnerKeyframes(): void {\n if (injected || document.getElementById(\"sc-spinner-kf\")) { injected = true; return; }\n const style = document.createElement(\"style\");\n style.id = \"sc-spinner-kf\";\n style.textContent = `\n @keyframes sc-spin { to { transform: rotate(360deg); } }\n @keyframes sc-spinner-pulse {\n 0%, 100% { transform: scale(1); opacity: 1; }\n 50% { transform: scale(1.1); opacity: 0.8; }\n }\n `;\n document.head.appendChild(style);\n injected = true;\n}\n\n/**\n * Ring spinner shared by every loading state in the SDK — one keyframe\n * injection, one markup shape, instead of each screen hand-rolling its own.\n * Pass `icon` (inline-SVG markup from ./icons's icon()) to show it pulsing\n * at the ring's center, matching the \"spinner + subject icon\" pattern used\n * for e.g. document-processing states.\n */\nexport function renderSpinner(\n theme: ThemeColors,\n opts: { size?: number; icon?: string } = {}\n): HTMLDivElement {\n injectSpinnerKeyframes();\n const size = opts.size ?? 44;\n\n const wrap = document.createElement(\"div\");\n wrap.style.cssText = `position:relative;width:${size}px;height:${size}px;flex-shrink:0;`;\n\n const ring = document.createElement(\"div\");\n ring.style.cssText = `\n position:absolute;inset:0;border-radius:50%;\n border:${Math.max(2, Math.round(size / 20))}px solid ${theme.border};\n border-top-color:${theme.primary};\n animation:sc-spin 0.9s linear infinite;\n `;\n wrap.appendChild(ring);\n\n if (opts.icon) {\n const center = document.createElement(\"div\");\n center.style.cssText = `\n position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n color:${theme.primary};animation:sc-spinner-pulse 2s ease-in-out infinite;\n `;\n center.innerHTML = opts.icon;\n wrap.appendChild(center);\n }\n\n return wrap;\n}\n\n/** Small inline spinner sized for sitting next to button text. */\nexport function renderInlineSpinner(color = \"#fff\", size = 13): string {\n injectSpinnerKeyframes();\n return `<span style=\"display:inline-block;width:${size}px;height:${size}px;border-radius:50%;border:2px solid rgba(255,255,255,0.3);border-top-color:${color};animation:sc-spin 0.6s linear infinite;flex-shrink:0;\"></span>`;\n}\n", "import { ThemeColors, RADIUS, TYPE } from \"./theme\";\r\nimport { requiresBackSide, computeScaleRatio, BackSideMode } from \"../utils/documentRules\";\r\nimport { CameraManager, CameraAccessError } from \"../camera/CameraManager\";\r\nimport { isRetryableCameraError } from \"../camera/Permission\";\r\nimport { DOC_CAMERA_IDEAL_WIDTH, DOC_CAMERA_IDEAL_HEIGHT, MAX_DOCUMENT_BYTES } from \"../utils/constants\";\r\nimport { assessQuality } from \"../utils/ImageQuality\";\r\nimport { icon, IconName } from \"./icons\";\r\nimport { renderSpinner } from \"./spinner\";\r\n\r\n/**\r\n * Document capture UI — camera-based or file-upload for ID documents.\r\n *\r\n * Supports:\r\n * - Camera capture (rear camera preferred on mobile)\r\n * - File upload fallback\r\n * - Preview with retake/confirm\r\n * - Front and back document capture for documents requiring both sides\r\n */\r\nexport interface DocumentCaptureResult {\r\n front: Blob;\r\n back?: Blob; // Optional for documents that don't require back side\r\n // Whether the front image came from the live camera vs. a gallery/file\r\n // upload — callers use this to decide whether pre-warming the liveness\r\n // camera makes sense (reusing an already-open camera) or would surprise\r\n // a user who never touched their camera at all this session.\r\n viaCamera: boolean;\r\n}\r\n\r\nexport class DocumentCapture {\r\n private root: HTMLDivElement | null = null;\r\n private videoEl: HTMLVideoElement | null = null;\r\n private videoWrapEl: HTMLDivElement | null = null;\r\n private cameraManager: CameraManager = new CameraManager();\r\n private orientationHandler: (() => void) | null = null;\r\n private resolveCapture: ((result: DocumentCaptureResult) => void) | null = null;\r\n private rejectCapture: ((err: Error) => void) | null = null;\r\n private frontViaCamera = false;\r\n private frontBlob: Blob | null = null;\r\n private backBlob: Blob | null = null;\r\n private currentSide: 'front' | 'back' = 'front';\r\n private requiresBackOverride: BackSideMode | undefined = undefined;\r\n\r\n /**\r\n * Mount the document capture UI and return a promise that resolves\r\n * with the captured document image(s).\r\n */\r\n capture(\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n documentType: string,\r\n requiresBack?: BackSideMode\r\n ): Promise<DocumentCaptureResult> {\r\n return new Promise((resolve, reject) => {\r\n // Validate input parameters\r\n if (!container) {\r\n reject(new Error(\"Container element is required\"));\r\n return;\r\n }\r\n if (!theme) {\r\n reject(new Error(\"Theme configuration is required\"));\r\n return;\r\n }\r\n if (!documentType || typeof documentType !== 'string') {\r\n reject(new Error(\"Document type is required and must be a string\"));\r\n return;\r\n }\r\n \r\n // Check if already capturing\r\n if (this.resolveCapture || this.rejectCapture) {\r\n reject(new Error(\"Document capture is already in progress\"));\r\n return;\r\n }\r\n\r\n this.resolveCapture = resolve;\r\n this.rejectCapture = reject;\r\n this.frontBlob = null;\r\n this.backBlob = null;\r\n this.frontViaCamera = false;\r\n this.currentSide = 'front';\r\n this.requiresBackOverride = requiresBack;\r\n this.renderChoiceScreen(container, theme, documentType);\r\n });\r\n }\r\n\r\n destroy(): void {\r\n // Stop any ongoing camera streams\r\n this.stopCamera();\r\n \r\n // Clean up DOM elements\r\n if (this.root && this.root.parentElement) {\r\n this.root.parentElement.removeChild(this.root);\r\n }\r\n this.root = null;\r\n \r\n // Clean up any pending promises\r\n if (this.rejectCapture) {\r\n this.rejectCapture(new Error(\"Document capture was cancelled\"));\r\n this.rejectCapture = null;\r\n }\r\n this.resolveCapture = null;\r\n \r\n // Clean up blob data\r\n this.frontBlob = null;\r\n this.backBlob = null;\r\n this.currentSide = 'front';\r\n }\r\n\r\n private getBackSideMode(documentType: string): BackSideMode {\r\n // Prefer the backend-provided flag; fall back to the shared heuristic only when absent.\r\n return this.requiresBackOverride !== undefined\r\n ? this.requiresBackOverride\r\n : requiresBackSide(documentType);\r\n }\r\n\r\n /** Whether a back-side step should be shown at all (required OR optional). */\r\n private shouldCaptureBackSide(documentType: string): boolean {\r\n return this.getBackSideMode(documentType) !== false;\r\n }\r\n\r\n /** Whether the back-side step, once shown, can be skipped by the user. */\r\n private isBackSideOptional(documentType: string): boolean {\r\n return this.getBackSideMode(documentType) === \"optional\";\r\n }\r\n\r\n private renderChoiceScreen(\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n documentType: string\r\n ): void {\r\n this.root = document.createElement(\"div\");\r\n this.root.style.cssText = `\r\n display:flex;flex-direction:column;gap:0;padding:0;width:100%;\r\n font-family:system-ui,-apple-system,sans-serif;\r\n `;\r\n\r\n const docLabel = this.getDocumentLabel(documentType);\r\n const requiresBack = this.shouldCaptureBackSide(documentType);\r\n const backOptional = this.isBackSideOptional(documentType);\r\n const isCapturingFront = this.currentSide === 'front';\r\n const sideLabel = requiresBack\r\n ? (isCapturingFront ? ' — Front side' : ' — Back side')\r\n : '';\r\n\r\n // ── TOP: compact header row ─────────────────────────────────────\r\n const headerRow = document.createElement(\"div\");\r\n headerRow.style.cssText = `\r\n display:flex;align-items:center;gap:14px;\r\n padding:16px 20px 14px;\r\n `;\r\n\r\n const iconBox = document.createElement(\"div\");\r\n iconBox.style.cssText = `\r\n width:48px;height:48px;border-radius:14px;flex-shrink:0;\r\n display:flex;align-items:center;justify-content:center;\r\n color:${theme.primary};\r\n background:${theme.primary}15;\r\n border:1.5px solid ${theme.primary}30;\r\n `;\r\n iconBox.innerHTML = icon(this._docIcon(documentType), 22);\r\n\r\n const titleBlock = document.createElement(\"div\");\r\n const titleEl = document.createElement(\"div\");\r\n titleEl.style.cssText = `color:${theme.text};font-size:${TYPE.headingSm}px;font-weight:700;line-height:1.3;`;\r\n titleEl.textContent = `Capture your ${docLabel}`;\r\n\r\n const subEl = document.createElement(\"div\");\r\n subEl.style.cssText = `color:${theme.textSecondary};font-size:12px;margin-top:2px;`;\r\n subEl.textContent = requiresBack\r\n ? (isCapturingFront\r\n ? 'Step 1 of 2 — front side'\r\n : backOptional ? 'Step 2 of 2 — back side (optional)' : 'Step 2 of 2 — back side')\r\n : 'Choose how to provide your document';\r\n\r\n titleBlock.appendChild(titleEl);\r\n titleBlock.appendChild(subEl);\r\n headerRow.appendChild(iconBox);\r\n headerRow.appendChild(titleBlock);\r\n this.root.appendChild(headerRow);\r\n\r\n // ── MIDDLE: side-by-side action buttons ─────────────────────────\r\n const btnRow = document.createElement(\"div\");\r\n btnRow.style.cssText = `\r\n display:grid;grid-template-columns:1fr 1fr;gap:10px;\r\n padding:0 20px 14px;\r\n `;\r\n\r\n // Camera button\r\n const cameraBtn = document.createElement(\"button\");\r\n cameraBtn.style.cssText = `\r\n display:flex;flex-direction:column;align-items:center;justify-content:center;\r\n gap:8px;padding:16px 12px;\r\n background:${theme.primary};color:#fff;\r\n border:none;border-radius:14px;cursor:pointer;\r\n font-size:13px;font-weight:600;font-family:inherit;\r\n transition:all 0.15s ease;min-height:80px;\r\n box-shadow:0 4px 14px ${theme.primary}30;\r\n `;\r\n cameraBtn.innerHTML = `<span style=\"display:inline-flex;\">${icon(\"camera\", 24)}</span><span>Take Photo</span><span style=\"font-size:10px;opacity:0.8;font-weight:500;\">Use camera</span>`;\r\n cameraBtn.addEventListener(\"mouseenter\", () => { cameraBtn.style.opacity = \"0.9\"; cameraBtn.style.transform = \"translateY(-1px)\"; });\r\n cameraBtn.addEventListener(\"mouseleave\", () => { cameraBtn.style.opacity = \"1\"; cameraBtn.style.transform = \"none\"; });\r\n cameraBtn.addEventListener(\"click\", () => {\r\n this.root!.innerHTML = \"\";\r\n this.renderCameraView(this.root!, theme, documentType);\r\n });\r\n\r\n // Upload button\r\n const uploadBtn = document.createElement(\"button\");\r\n uploadBtn.style.cssText = `\r\n display:flex;flex-direction:column;align-items:center;justify-content:center;\r\n gap:8px;padding:16px 12px;\r\n background:${theme.cardBg || theme.inputBg};color:${theme.text};\r\n border:2px solid ${theme.border};border-radius:14px;cursor:pointer;\r\n font-size:13px;font-weight:600;font-family:inherit;\r\n transition:all 0.15s ease;min-height:80px;\r\n `;\r\n uploadBtn.innerHTML = `<span style=\"display:inline-flex;\">${icon(\"gallery\", 24)}</span><span>From Gallery</span><span style=\"font-size:10px;color:${theme.textMuted || theme.textSecondary};font-weight:500;\">Upload file</span>`;\r\n uploadBtn.addEventListener(\"mouseenter\", () => { uploadBtn.style.borderColor = theme.primary; uploadBtn.style.transform = \"translateY(-1px)\"; });\r\n uploadBtn.addEventListener(\"mouseleave\", () => { uploadBtn.style.borderColor = theme.border; uploadBtn.style.transform = \"none\"; });\r\n uploadBtn.addEventListener(\"click\", () => { this.handleFileUpload(container, theme); });\r\n\r\n btnRow.appendChild(cameraBtn);\r\n btnRow.appendChild(uploadBtn);\r\n this.root.appendChild(btnRow);\r\n\r\n // ── BOTTOM: compact tips (no scroll) ────────────────────────────\r\n const tips = document.createElement(\"div\");\r\n tips.style.cssText = `\r\n margin:0 20px 16px;padding:12px 14px;\r\n background:${theme.shimmer || theme.cardBg};\r\n border:1px solid ${theme.border};border-radius:${RADIUS.md}px;\r\n `;\r\n\r\n const tipsGrid = document.createElement(\"div\");\r\n tipsGrid.style.cssText = `\r\n display:grid;grid-template-columns:1fr 1fr;gap:6px 12px;\r\n `;\r\n const tipItems = [\r\n \"Lay document flat\",\r\n \"All 4 corners visible\",\r\n \"Good lighting, no glare\",\r\n \"All text clearly readable\",\r\n ];\r\n tipItems.forEach((t) => {\r\n const row = document.createElement(\"div\");\r\n row.style.cssText = `display:flex;align-items:center;gap:5px;font-size:11px;color:${theme.textSecondary};`;\r\n row.innerHTML = `<span style=\"color:${theme.primary};flex-shrink:0;display:inline-flex;\">${icon(\"check\", 12)}</span><span>${t}</span>`;\r\n tipsGrid.appendChild(row);\r\n });\r\n tips.appendChild(tipsGrid);\r\n this.root.appendChild(tips);\r\n\r\n // ── Back-side notice (shown only when requiresBack) ──────────────\r\n if (requiresBack && isCapturingFront) {\r\n const notice = document.createElement(\"div\");\r\n notice.style.cssText = `\r\n margin:0 20px 16px;padding:10px 14px;\r\n background:${theme.primary}0D;\r\n border:1px solid ${theme.primary}25;border-radius:10px;\r\n display:flex;align-items:center;gap:8px;\r\n font-size:12px;color:${theme.textSecondary};line-height:1.5;\r\n `;\r\n // NIN specifically: spell out slip-vs-card rather than the generic\r\n // \"if your document has one\" — the NIN slip (paper printout) has no\r\n // usable back, while the NIN card (plastic card) does, and users\r\n // often don't know which one they're holding is called what.\r\n const isNin = documentType.toLowerCase().includes(\"nin\");\r\n notice.innerHTML = backOptional\r\n ? isNin\r\n ? `<span style=\"font-size:16px;flex-shrink:0;\">ℹ️</span><span>After the <strong style=\"color:${theme.text}\">front</strong>: if you have the <strong style=\"color:${theme.text}\">NIN card</strong> (plastic card), add the back too. If you have the <strong style=\"color:${theme.text}\">NIN slip</strong> (paper printout), there's usually nothing to capture on the back — just skip it.</span>`\r\n : `<span style=\"font-size:16px;flex-shrink:0;\">ℹ️</span><span>After the <strong style=\"color:${theme.text}\">front</strong>, you can optionally add the <strong style=\"color:${theme.text}\">back</strong> if your document has one.</span>`\r\n : `<span style=\"font-size:16px;flex-shrink:0;\">ℹ️</span><span>You'll capture both the <strong style=\"color:${theme.text}\">front</strong> and <strong style=\"color:${theme.text}\">back</strong> of this document.</span>`;\r\n this.root.appendChild(notice);\r\n }\r\n\r\n // ── Skip button (back side only, and only when optional) ─────────\r\n if (requiresBack && !isCapturingFront && backOptional) {\r\n const skipBtn = document.createElement(\"button\");\r\n skipBtn.style.cssText = `\r\n display:block;margin:0 20px 16px;width:calc(100% - 40px);\r\n padding:10px 12px;background:transparent;color:${theme.textSecondary};\r\n border:1.5px dashed ${theme.border};border-radius:10px;cursor:pointer;\r\n font-size:12.5px;font-weight:600;font-family:inherit;\r\n `;\r\n skipBtn.textContent = \"Skip — my document has no back side\";\r\n skipBtn.addEventListener(\"click\", () => {\r\n this.handleCaptureComplete(null, container, theme, documentType, false, true);\r\n });\r\n this.root.appendChild(skipBtn);\r\n }\r\n\r\n // Hidden file input\r\n const fileInput = document.createElement(\"input\");\r\n fileInput.type = \"file\";\r\n fileInput.accept = \"image/jpeg,image/png\";\r\n fileInput.style.display = \"none\";\r\n fileInput.id = \"sc-doc-file-input\";\r\n fileInput.addEventListener(\"change\", (e) => {\r\n const file = (e.target as HTMLInputElement).files?.[0];\r\n if (file) {\r\n const err = this.validateFile(file);\r\n if (err) { this.showError(err); return; }\r\n // Sent as-is unless it's over the upload limit — no re-encoding a\r\n // file that already fits, so no avoidable quality loss.\r\n this.ensureUnderUploadLimit(file)\r\n .then((c) => this.handleFileUploadComplete(c, container, theme, documentType));\r\n }\r\n });\r\n this.root.appendChild(fileInput);\r\n\r\n container.appendChild(this.root);\r\n }\r\n\r\n /** Returns the icon name matching the document type. */\r\n private _docIcon(documentType: string): IconName {\r\n const t = documentType.toLowerCase();\r\n if (t.includes(\"passport\")) return \"passport\";\r\n if (t.includes(\"driver\") || t.includes(\"licen\")) return \"car\";\r\n if (t.includes(\"voter\") || t.includes(\"pvc\")) return \"ballot\";\r\n return \"id-card\";\r\n }\r\n\r\n private renderCameraView(\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n documentType: string\r\n ): void {\r\n // Dark cinematic chrome + corner-bracket guide — matches the liveness\r\n // scan screen's visual language (LivenessUI.ts) instead of the plain\r\n // rectangle outline this used to be, so the two camera experiences in\r\n // the flow read as one product.\r\n const wrapper = document.createElement(\"div\");\r\n wrapper.style.cssText = `\r\n position:relative;width:100%;max-width:420px;margin:0 auto;\r\n background:#0a0a0a;border-radius:${RADIUS.lg}px;overflow:hidden;\r\n box-shadow:0 8px 32px rgba(0,0,0,0.4);\r\n `;\r\n this.videoWrapEl = wrapper;\r\n\r\n this.videoEl = document.createElement(\"video\");\r\n this.videoEl.autoplay = true;\r\n this.videoEl.playsInline = true;\r\n this.videoEl.muted = true;\r\n // Starts at 4:3 (typical document-shaped default); _fitToStream() below\r\n // corrects this to the stream's real aspect ratio once metadata loads,\r\n // instead of force-cropping every device's native ratio into one fixed box.\r\n this.videoEl.style.cssText = \"width:100%;display:block;aspect-ratio:4/3;object-fit:cover;\";\r\n wrapper.appendChild(this.videoEl);\r\n\r\n const vignette = document.createElement(\"div\");\r\n vignette.style.cssText = `\r\n position:absolute;inset:0;pointer-events:none;\r\n box-shadow:inset 0 0 0 9999px rgba(0,0,0,0.38);\r\n -webkit-mask:radial-gradient(ellipse 46% 34% at 50% 50%, transparent 60%, #000 100%);\r\n mask:radial-gradient(ellipse 46% 34% at 50% 50%, transparent 60%, #000 100%);\r\n `;\r\n wrapper.appendChild(vignette);\r\n\r\n // Corner-bracket guide — same bracket-path language as LivenessUI's oval\r\n // guide, adapted to a rectangle since documents (unlike faces) aren't oval.\r\n const guideWrap = document.createElement(\"div\");\r\n guideWrap.style.cssText = `\r\n position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);\r\n width:84%;aspect-ratio:16/10;pointer-events:none;\r\n `;\r\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\r\n svg.setAttribute(\"viewBox\", \"0 0 160 100\");\r\n svg.style.cssText = \"width:100%;height:100%;overflow:visible;\";\r\n const bracketGroup = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\r\n bracketGroup.setAttribute(\"stroke\", theme.primary);\r\n bracketGroup.setAttribute(\"stroke-width\", \"3\");\r\n bracketGroup.setAttribute(\"stroke-linecap\", \"round\");\r\n bracketGroup.setAttribute(\"fill\", \"none\");\r\n const bLen = 16;\r\n const bx0 = 4, bx1 = 156, by0 = 4, by1 = 96;\r\n const brackets = [\r\n `M${bx0},${by0 + bLen} L${bx0},${by0} L${bx0 + bLen},${by0}`,\r\n `M${bx1 - bLen},${by0} L${bx1},${by0} L${bx1},${by0 + bLen}`,\r\n `M${bx0},${by1 - bLen} L${bx0},${by1} L${bx0 + bLen},${by1}`,\r\n `M${bx1 - bLen},${by1} L${bx1},${by1} L${bx1},${by1 - bLen}`,\r\n ];\r\n for (const d of brackets) {\r\n const path = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n path.setAttribute(\"d\", d);\r\n bracketGroup.appendChild(path);\r\n }\r\n svg.appendChild(bracketGroup);\r\n guideWrap.appendChild(svg);\r\n wrapper.appendChild(guideWrap);\r\n\r\n // Header — gradient scrim + document label\r\n const header = document.createElement(\"div\");\r\n header.style.cssText = `\r\n position:absolute;top:0;left:0;right:0;\r\n background:linear-gradient(180deg,rgba(0,0,0,0.8) 0%,transparent 100%);\r\n padding:14px 16px 32px;text-align:center;\r\n `;\r\n header.innerHTML = `<div style=\"color:#fff;font-size:${TYPE.sm}px;font-weight:600;\">Align your ${this.getDocumentLabel(documentType)} within the frame</div>`;\r\n wrapper.appendChild(header);\r\n\r\n // Footer — gradient scrim + tips\r\n const footer = document.createElement(\"div\");\r\n footer.style.cssText = `\r\n position:absolute;bottom:0;left:0;right:0;\r\n background:linear-gradient(0deg,rgba(0,0,0,0.7) 0%,transparent 100%);\r\n padding:28px 10px 18px;text-align:center;\r\n `;\r\n footer.innerHTML = `<div style=\"font-size:${TYPE.xs}px;color:rgba(255,255,255,0.55);\">Good lighting · No glare · All 4 corners visible</div>`;\r\n wrapper.appendChild(footer);\r\n\r\n container.appendChild(wrapper);\r\n\r\n // Capture button\r\n const captureBtn = document.createElement(\"button\");\r\n captureBtn.setAttribute(\"aria-label\", \"Capture photo\");\r\n captureBtn.style.cssText = `\r\n display:block;margin:16px auto 0;width:64px;height:64px;\r\n border-radius:50%;border:4px solid ${theme.primary};\r\n background:transparent;cursor:pointer;position:relative;\r\n transition:all 0.2s ease;\r\n `;\r\n const inner = document.createElement(\"div\");\r\n inner.style.cssText = `\r\n width:48px;height:48px;border-radius:50%;background:${theme.primary};\r\n position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);\r\n transition:all 0.15s ease;\r\n `;\r\n captureBtn.appendChild(inner);\r\n captureBtn.addEventListener(\"mousedown\", () => {\r\n inner.style.transform = \"translate(-50%,-50%) scale(0.9)\";\r\n });\r\n captureBtn.addEventListener(\"mouseup\", () => {\r\n inner.style.transform = \"translate(-50%,-50%) scale(1)\";\r\n });\r\n captureBtn.addEventListener(\"click\", () => {\r\n this.captureFrame(container, theme, documentType);\r\n });\r\n container.appendChild(captureBtn);\r\n\r\n // Open camera\r\n this.openCamera();\r\n }\r\n\r\n /**\r\n * Matches the video box's aspect-ratio CSS to the stream's actual\r\n * negotiated dimensions instead of a single hardcoded ratio — a stream\r\n * that's natively 16:9 no longer gets force-cropped into a 4:3 box.\r\n * Clamped to a sane document-shaped range so a degenerate/unusual stream\r\n * can't produce a sliver-thin or absurdly tall box.\r\n */\r\n private _fitToStream(): void {\r\n if (!this.videoEl) return;\r\n const { videoWidth: w, videoHeight: h } = this.videoEl;\r\n if (!w || !h) return;\r\n const ratio = Math.min(Math.max(w / h, 1), 2); // clamp to [1:1, 2:1]\r\n this.videoEl.style.aspectRatio = `${ratio}`;\r\n }\r\n\r\n /**\r\n * Re-fits the video box when the device rotates mid-capture. Does not\r\n * re-request getUserMedia (disruptive/slow) — the stream's dimensions\r\n * don't change on rotation, only the viewport does, so re-reading the\r\n * already-known videoWidth/videoHeight is enough to keep the box sane.\r\n */\r\n private _watchOrientation(): void {\r\n this._unwatchOrientation();\r\n this.orientationHandler = () => this._fitToStream();\r\n window.addEventListener(\"orientationchange\", this.orientationHandler);\r\n window.addEventListener(\"resize\", this.orientationHandler);\r\n }\r\n\r\n private _unwatchOrientation(): void {\r\n if (this.orientationHandler) {\r\n window.removeEventListener(\"orientationchange\", this.orientationHandler);\r\n window.removeEventListener(\"resize\", this.orientationHandler);\r\n this.orientationHandler = null;\r\n }\r\n }\r\n\r\n private async openCamera(): Promise<void> {\r\n // Check browser compatibility\r\n if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {\r\n this.rejectCapture?.(new Error(\"Camera access is not supported in this browser. Please use a modern browser like Chrome, Firefox, or Safari.\"));\r\n return;\r\n }\r\n\r\n const maxRetries = 3;\r\n\r\n // Retries only transient/negotiable failures (busy camera, unsupported\r\n // constraints, anything unrecognized) — a hard permission denial or \"no\r\n // camera exists\" can never be fixed by retrying, so those short-circuit\r\n // to an immediate error instead of burning ~6s of backoff first.\r\n const attemptCameraAccess = async (\r\n constraints: MediaStreamConstraints,\r\n retryCount = 0\r\n ): Promise<MediaStream> => {\r\n try {\r\n return await this.cameraManager.open(constraints);\r\n } catch (err: any) {\r\n console.warn(`Camera access attempt ${retryCount + 1} failed:`, err);\r\n\r\n const status = err instanceof CameraAccessError ? err.status : \"unknown\";\r\n if (isRetryableCameraError(status) && retryCount < maxRetries - 1) {\r\n await new Promise((resolve) => setTimeout(resolve, 1000 * (retryCount + 1))); // Exponential backoff\r\n return attemptCameraAccess(constraints, retryCount + 1);\r\n }\r\n throw err;\r\n }\r\n };\r\n\r\n let stream: MediaStream;\r\n try {\r\n // Try rear camera first\r\n stream = await attemptCameraAccess({\r\n video: {\r\n facingMode: { ideal: \"environment\" },\r\n width: { ideal: DOC_CAMERA_IDEAL_WIDTH },\r\n height: { ideal: DOC_CAMERA_IDEAL_HEIGHT },\r\n },\r\n });\r\n } catch (err: any) {\r\n console.warn(\"Rear camera failed, trying any camera:\", err);\r\n\r\n // Fallback to any camera\r\n try {\r\n stream = await attemptCameraAccess({\r\n video: { width: { ideal: DOC_CAMERA_IDEAL_WIDTH } },\r\n });\r\n } catch (fallbackErr: any) {\r\n this.rejectCapture?.(new Error(fallbackErr?.message || \"Camera access failed. Please check your camera permissions and try again.\"));\r\n return;\r\n }\r\n }\r\n\r\n // A capture that's already resolved (photo taken, camera intentionally\r\n // stopped) must not surface a stale interruption from the old stream.\r\n this.cameraManager.onStreamInterrupted(() => {\r\n if (this.resolveCapture || this.rejectCapture) {\r\n this.rejectCapture?.(new Error(\"Camera connection was lost. Please check your camera and try again.\"));\r\n }\r\n });\r\n\r\n if (this.videoEl) {\r\n this.videoEl.srcObject = stream;\r\n this.videoEl.addEventListener(\"loadedmetadata\", () => this._fitToStream(), { once: true });\r\n this._watchOrientation();\r\n }\r\n }\r\n\r\n private captureFrame(container: HTMLElement, theme: ThemeColors, documentType: string): void {\r\n if (!this.videoEl) return;\r\n\r\n // Draw at the video's native resolution — the downstream compressImage()\r\n // call (see proceedWithPhoto) is the single place resolution gets capped\r\n // (via computeScaleRatio, which never upscales). Resizing here too used\r\n // to cap captures at 1280x960 before compressImage ever ran, silently\r\n // undermining its higher resolution/quality target.\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = this.videoEl.videoWidth;\r\n canvas.height = this.videoEl.videoHeight;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n\r\n ctx.drawImage(this.videoEl, 0, 0, canvas.width, canvas.height);\r\n\r\n canvas.toBlob(\r\n (blob) => {\r\n if (blob) {\r\n this.stopCamera();\r\n this.showPreview(container, theme, blob, documentType, true);\r\n }\r\n },\r\n \"image/jpeg\",\r\n 0.92\r\n );\r\n }\r\n\r\n private showPreview(\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n imageData: Blob | File,\r\n documentType: string,\r\n viaCamera: boolean\r\n ): void {\r\n if (this.root) this.root.innerHTML = \"\";\r\n else {\r\n this.root = document.createElement(\"div\");\r\n container.appendChild(this.root);\r\n }\r\n\r\n this.root.style.cssText = \"display:flex;flex-direction:column;align-items:center;gap:16px;\";\r\n\r\n // Step badge — same pill treatment as SmartComplyFlow's document-confirm\r\n // screen (Step 2: check what we read), so this doesn't read as\r\n // unexplained repetition of that later screen — they check different\r\n // things (photo clarity here, OCR-extracted data there).\r\n const stepBadge = document.createElement(\"div\");\r\n stepBadge.style.cssText = `\r\n display:inline-flex;align-items:center;gap:5px;\r\n padding:3px 11px;border-radius:${RADIUS.pill}px;\r\n font-size:10.5px;font-weight:600;letter-spacing:0.2px;\r\n color:${theme.primary};background:${theme.primary}15;border:1px solid ${theme.primary}30;\r\n `;\r\n stepBadge.textContent = \"STEP 1 OF 2 · CHECK THE PHOTO\";\r\n this.root.appendChild(stepBadge);\r\n\r\n // Preview image, wrapped so the rotate control can sit as a small\r\n // overlay button anchored to the photo itself — makes it visually\r\n // obvious it acts ON this image, instead of floating unexplained\r\n // between the copy and the quality notice.\r\n const imgWrap = document.createElement(\"div\");\r\n imgWrap.style.cssText = \"position:relative;width:100%;\";\r\n\r\n const img = document.createElement(\"img\");\r\n let currentUrl = URL.createObjectURL(imageData);\r\n img.src = currentUrl;\r\n img.style.cssText = `\r\n display:block;width:100%;max-height:300px;object-fit:contain;\r\n border-radius:${RADIUS.md}px;border:2px solid ${theme.border};\r\n background:${theme.inputBg};\r\n `;\r\n imgWrap.appendChild(img);\r\n\r\n // The blob actually sent on \"Use Photo\" — reassigned in place each time\r\n // rotate is tapped, so retake/use always act on the current orientation.\r\n let currentBlob: Blob = imageData;\r\n let isRotating = false;\r\n\r\n // Rotate control — fixes a document photographed/uploaded sideways or\r\n // upside-down. EXIF auto-rotation (compressImage) only handles phone\r\n // photos with correct orientation metadata; a genuinely sideways\r\n // capture (or a scan/crop with no EXIF) needs the user to say so.\r\n // Sits as a circular overlay button in the photo's corner (same pattern\r\n // as Google Photos/Drive) so its purpose — \"turn this image\" — reads\r\n // immediately from placement alone, with a text label for anyone who\r\n // still wants it spelled out.\r\n const rotateBtn = document.createElement(\"button\");\r\n rotateBtn.type = \"button\";\r\n rotateBtn.setAttribute(\"aria-label\", \"Photo sideways or upside-down? Rotate it 90 degrees\");\r\n rotateBtn.title = \"Rotate 90°\";\r\n rotateBtn.style.cssText = `\r\n position:absolute;bottom:10px;right:10px;\r\n display:flex;align-items:center;justify-content:center;gap:6px;\r\n padding:8px 14px;background:${theme.isDark ? \"rgba(20,20,20,0.72)\" : \"rgba(255,255,255,0.92)\"};\r\n backdrop-filter:blur(6px);color:${theme.text};border:1px solid ${theme.border};\r\n border-radius:${RADIUS.pill}px;cursor:pointer;\r\n box-shadow:0 2px 10px rgba(0,0,0,${theme.isDark ? \"0.4\" : \"0.15\"});\r\n font-size:12.5px;font-weight:600;font-family:inherit;line-height:1;\r\n transition:transform 0.15s ease,opacity 0.15s ease;\r\n `;\r\n rotateBtn.innerHTML = `<span style=\"display:inline-flex;\">${icon(\"rotate\", 15)}</span><span>Rotate</span>`;\r\n rotateBtn.addEventListener(\"mouseenter\", () => { rotateBtn.style.transform = \"translateY(-1px)\"; });\r\n rotateBtn.addEventListener(\"mouseleave\", () => { rotateBtn.style.transform = \"translateY(0)\"; });\r\n rotateBtn.addEventListener(\"click\", async () => {\r\n if (isRotating) return;\r\n isRotating = true;\r\n rotateBtn.style.opacity = \"0.5\";\r\n rotateBtn.disabled = true;\r\n try {\r\n const rotated = await this._rotateImage(currentBlob, 90);\r\n currentBlob = rotated;\r\n URL.revokeObjectURL(currentUrl);\r\n currentUrl = URL.createObjectURL(rotated);\r\n img.src = currentUrl;\r\n this._checkPhotoQuality(currentBlob, qualityNotice, theme);\r\n } catch {\r\n // Leave the current photo untouched — rotation is a convenience,\r\n // not something worth hard-failing the whole capture over.\r\n } finally {\r\n isRotating = false;\r\n rotateBtn.style.opacity = \"1\";\r\n rotateBtn.disabled = false;\r\n }\r\n });\r\n imgWrap.appendChild(rotateBtn);\r\n this.root.appendChild(imgWrap);\r\n\r\n const label = document.createElement(\"div\");\r\n label.style.cssText = `color:${theme.text};font-size:${TYPE.base}px;font-weight:700;text-align:center;`;\r\n label.textContent = \"Does the photo look clear?\";\r\n this.root.appendChild(label);\r\n\r\n const sublabel = document.createElement(\"div\");\r\n sublabel.style.cssText = `color:${theme.textMuted};font-size:${TYPE.xs}px;text-align:center;line-height:1.6;`;\r\n sublabel.textContent = \"All text must be readable and all four corners must be visible. Sideways or upside-down? Use Rotate on the photo above.\";\r\n this.root.appendChild(sublabel);\r\n\r\n // Advisory-only quality nudge — catches an obviously blurry/dark/glare-\r\n // heavy photo right here instead of only finding out several seconds\r\n // later. Never blocks \"Use Photo\": this is a heuristic, not a hard\r\n // rule, so a photo that's actually fine but scores oddly must still be\r\n // usable — it just nudges the user toward retaking with a plain-\r\n // language reason instead of silently letting a bad photo through.\r\n const qualityNotice = document.createElement(\"div\");\r\n qualityNotice.style.cssText = `\r\n display:none;width:100%;padding:10px 14px;border-radius:${RADIUS.md}px;\r\n background:${theme.warning}15;border:1px solid ${theme.warning}35;\r\n color:${theme.text};font-size:12px;text-align:left;line-height:1.5;\r\n `;\r\n qualityNotice.setAttribute(\"role\", \"status\");\r\n this.root.appendChild(qualityNotice);\r\n this._checkPhotoQuality(currentBlob, qualityNotice, theme);\r\n\r\n // Buttons\r\n const btnRow = document.createElement(\"div\");\r\n btnRow.style.cssText = \"display:flex;gap:12px;width:100%;\";\r\n\r\n const retakeBtn = this.createButton(\"Retake\", theme, false);\r\n retakeBtn.style.flex = \"1\";\r\n retakeBtn.addEventListener(\"click\", () => {\r\n URL.revokeObjectURL(currentUrl);\r\n this.root!.innerHTML = \"\";\r\n this.renderChoiceScreen(container, theme, documentType);\r\n });\r\n\r\n const useBtn = this.createButton(\"Use Photo ✓\", theme, true);\r\n useBtn.style.flex = \"1\";\r\n useBtn.addEventListener(\"click\", () => {\r\n URL.revokeObjectURL(currentUrl);\r\n useBtn.textContent = \"Confirming photo…\";\r\n useBtn.disabled = true;\r\n rotateBtn.disabled = true;\r\n // Sent as-is unless it's over the upload limit — no re-encoding a\r\n // photo that already fits, so no avoidable quality loss.\r\n this.ensureUnderUploadLimit(currentBlob)\r\n .then((c) => this.handleCaptureComplete(c, container, theme, documentType, viaCamera));\r\n });\r\n\r\n btnRow.appendChild(retakeBtn);\r\n btnRow.appendChild(useBtn);\r\n this.root.appendChild(btnRow);\r\n }\r\n\r\n /**\r\n * Runs the shared client-side quality heuristic (blur/glare/contrast/\r\n * brightness — see utils/ImageQuality.ts) against the just-captured photo\r\n * and, if it scores poorly, shows a plain-language nudge on the preview\r\n * screen. Fails silently on decode error — this is an advisory extra, not\r\n * a required step, so a browser that can't run it must not block capture.\r\n */\r\n private async _checkPhotoQuality(\r\n imageData: Blob | File,\r\n noticeEl: HTMLElement,\r\n theme: ThemeColors\r\n ): Promise<void> {\r\n try {\r\n // Document photos are captured at up to DOC_CAMERA_IDEAL_WIDTH/HEIGHT\r\n // (2000x1500) — scoring every pixel across four full-image passes in\r\n // assessQuality() would be genuinely slow on the low/mid-range phones\r\n // most likely to produce a poor-quality photo in the first place.\r\n // Downscale a scoring-only copy; the actual captured photo sent for\r\n // upload is completely unaffected by this.\r\n const canvas = await this._blobToCanvas(imageData, 640);\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n const pixels = ctx.getImageData(0, 0, canvas.width, canvas.height);\r\n const result = assessQuality(pixels);\r\n if (noticeEl.isConnected && !result.isValid) {\r\n noticeEl.style.display = \"block\";\r\n noticeEl.textContent =\r\n \"This photo might be hard to read — \" +\r\n (result.recommendations[0] || \"try retaking it in good lighting\") + \".\";\r\n }\r\n } catch {\r\n // Advisory only — no notice shown if scoring fails for any reason.\r\n }\r\n }\r\n\r\n /** Decodes to a canvas, optionally downscaled to maxDim on the long edge (never upscales). */\r\n private _blobToCanvas(source: Blob | File, maxDim?: number): Promise<HTMLCanvasElement> {\r\n return new Promise((resolve, reject) => {\r\n const url = URL.createObjectURL(source);\r\n const imgEl = document.createElement(\"img\");\r\n imgEl.onload = () => {\r\n URL.revokeObjectURL(url);\r\n const { naturalWidth: w, naturalHeight: h } = imgEl;\r\n const ratio = maxDim ? computeScaleRatio(w, h, maxDim, maxDim) : 1;\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = Math.round(w * ratio);\r\n canvas.height = Math.round(h * ratio);\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) { reject(new Error(\"Canvas unavailable\")); return; }\r\n ctx.drawImage(imgEl, 0, 0, canvas.width, canvas.height);\r\n resolve(canvas);\r\n };\r\n imgEl.onerror = () => { URL.revokeObjectURL(url); reject(new Error(\"Image load failed\")); };\r\n imgEl.src = url;\r\n });\r\n }\r\n\r\n /**\r\n * Rotate an image blob by a multiple of 90° and re-encode it — used by the\r\n * preview screen's rotate control for a document photographed or uploaded\r\n * sideways/upside-down. EXIF auto-rotation (see compressImage) only fixes\r\n * phone photos that embed correct orientation metadata; it can't help a\r\n * document whose actual pixel content is sideways (e.g. the phone itself\r\n * was held rotated relative to the document, or a pre-cropped/scanned\r\n * upload with no EXIF at all) — that needs the user to say so directly.\r\n */\r\n private _rotateImage(source: Blob, degrees: 90 | 180 | 270): Promise<Blob> {\r\n return new Promise((resolve, reject) => {\r\n const url = URL.createObjectURL(source);\r\n const imgEl = document.createElement(\"img\");\r\n imgEl.onload = () => {\r\n URL.revokeObjectURL(url);\r\n const { naturalWidth: w, naturalHeight: h } = imgEl;\r\n const swapped = degrees === 90 || degrees === 270;\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = swapped ? h : w;\r\n canvas.height = swapped ? w : h;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) { reject(new Error(\"Canvas unavailable\")); return; }\r\n ctx.translate(canvas.width / 2, canvas.height / 2);\r\n ctx.rotate((degrees * Math.PI) / 180);\r\n ctx.drawImage(imgEl, -w / 2, -h / 2);\r\n canvas.toBlob(\r\n (blob) => { blob ? resolve(blob) : reject(new Error(\"Rotation failed\")); },\r\n \"image/jpeg\",\r\n 0.95\r\n );\r\n };\r\n imgEl.onerror = () => { URL.revokeObjectURL(url); reject(new Error(\"Image load failed\")); };\r\n imgEl.src = url;\r\n });\r\n }\r\n\r\n private handleCaptureComplete(\r\n imageData: Blob | null,\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n documentType: string,\r\n viaCamera: boolean,\r\n skipped: boolean = false\r\n ): void {\r\n const requiresBack = this.shouldCaptureBackSide(documentType);\r\n const wasCapturingFront = this.currentSide === 'front';\r\n\r\n // Store the captured image (skip leaves backBlob unset — front-only submit)\r\n if (wasCapturingFront) {\r\n this.frontBlob = imageData;\r\n this.frontViaCamera = viaCamera;\r\n } else if (!skipped) {\r\n this.backBlob = imageData;\r\n }\r\n\r\n // If we need back side and haven't captured it yet, move to back side\r\n if (requiresBack && wasCapturingFront) {\r\n this.currentSide = 'back';\r\n this.root!.innerHTML = \"\";\r\n this.renderChoiceScreen(container, theme, documentType);\r\n return;\r\n }\r\n\r\n // All captures complete, resolve with result\r\n if (!this.frontBlob) {\r\n this.rejectCapture?.(new Error(\"No front image captured. Please try again.\"));\r\n return;\r\n }\r\n\r\n const result: DocumentCaptureResult = {\r\n front: this.frontBlob,\r\n back: this.backBlob || undefined,\r\n viaCamera: this.frontViaCamera,\r\n };\r\n this.resolveCapture?.(result);\r\n }\r\n\r\n private handleFileUploadComplete(\r\n imageData: Blob,\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n documentType: string\r\n ): void {\r\n this.showPreview(container, theme, imageData, documentType, false);\r\n }\r\n\r\n private validateFile(file: File): string | null {\r\n // Check file type\r\n const allowedTypes = ['image/jpeg', 'image/jpg', 'image/png'];\r\n if (!allowedTypes.includes(file.type)) {\r\n return \"Invalid file type. Please upload a JPEG or PNG image.\";\r\n }\r\n\r\n // Anything under this is sent completely untouched (see proceedWithPhoto /\r\n // the file-input handler) — this is the real backend upload ceiling, not\r\n // a quality target, so it must match MAX_DOCUMENT_BYTES exactly.\r\n if (file.size > MAX_DOCUMENT_BYTES) {\r\n return `File is too large. Please upload an image smaller than ${Math.round(MAX_DOCUMENT_BYTES / (1024 * 1024))}MB.`;\r\n }\r\n\r\n // Check minimum file size (at least 1KB to avoid empty files)\r\n if (file.size < 1024) {\r\n return \"File is too small. Please upload a valid image file.\";\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Only shrinks/re-encodes when the file exceeds the backend's real upload\r\n * ceiling — otherwise returns the original bytes completely untouched.\r\n * Document photos become the face-comparison reference image later\r\n * (see backend _crop_and_save_face), so any avoidable re-encode is a\r\n * quality loss with no upside; compression here exists solely to keep\r\n * oversized captures under MAX_DOCUMENT_BYTES, not to \"optimize\" images\r\n * that already fit.\r\n */\r\n private async ensureUnderUploadLimit(source: Blob | File): Promise<Blob> {\r\n if (source.size <= MAX_DOCUMENT_BYTES) return source;\r\n try {\r\n return await this.compressImage(source, DOC_CAMERA_IDEAL_WIDTH, DOC_CAMERA_IDEAL_HEIGHT, 0.92);\r\n } catch {\r\n return source; // fall back to the original rather than block the user\r\n }\r\n }\r\n\r\n private handleFileUpload(container: HTMLElement, theme: ThemeColors): void {\r\n const input = this.root?.querySelector(\"#sc-doc-file-input\") as HTMLInputElement;\r\n if (input) input.click();\r\n }\r\n\r\n private stopCamera(): void {\r\n this._unwatchOrientation();\r\n this.cameraManager.stop();\r\n if (this.videoEl) {\r\n this.videoEl.srcObject = null;\r\n this.videoEl = null;\r\n }\r\n this.videoWrapEl = null;\r\n }\r\n\r\n private showLoadingState(message: string, theme: ThemeColors): void {\r\n if (!this.root) return;\r\n\r\n this.root.innerHTML = \"\";\r\n this.root.style.cssText = \"display:flex;flex-direction:column;align-items:center;justify-content:center;gap:20px;padding:40px 20px;min-height:300px;\";\r\n this.root.setAttribute(\"aria-live\", \"polite\");\r\n this.root.setAttribute(\"role\", \"status\");\r\n\r\n this.root.appendChild(renderSpinner(theme, { size: 80, icon: icon(\"document\", 28) }));\r\n\r\n const loadingText = document.createElement(\"div\");\r\n loadingText.style.cssText = `color:${theme.text};font-size:${TYPE.heading}px;font-weight:600;text-align:center;`;\r\n loadingText.textContent = message;\r\n this.root.appendChild(loadingText);\r\n }\r\n\r\n private showError(message: string): void {\r\n if (!this.root) return;\r\n\r\n const errorContainer = document.createElement(\"div\");\r\n errorContainer.setAttribute(\"role\", \"alert\");\r\n errorContainer.style.cssText = `\r\n display:flex;align-items:center;gap:12px;padding:16px;\r\n background:#ff444415;border:1px solid #ff444430;border-radius:${RADIUS.md}px;\r\n color:#ff4444;font-size:14px;margin-top:16px;animation:shake 0.5s ease-in-out;\r\n `;\r\n const errIcon = document.createElement(\"span\");\r\n errIcon.style.fontSize = \"18px\";\r\n errIcon.textContent = \"⚠️\";\r\n const errText = document.createElement(\"span\");\r\n errText.textContent = message;\r\n errorContainer.appendChild(errIcon);\r\n errorContainer.appendChild(errText);\r\n\r\n // Add shake animation\r\n if (!document.head.querySelector('style[data-shake-animation]')) {\r\n const style = document.createElement('style');\r\n style.setAttribute('data-shake-animation', 'true');\r\n style.textContent = `\r\n @keyframes shake {\r\n 0%, 100% { transform: translateX(0); }\r\n 25% { transform: translateX(-5px); }\r\n 75% { transform: translateX(5px); }\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n \r\n this.root.appendChild(errorContainer);\r\n setTimeout(() => errorContainer.remove(), 5000);\r\n }\r\n\r\n private createButton(\r\n label: string,\r\n theme: ThemeColors,\r\n isPrimary: boolean\r\n ): HTMLButtonElement {\r\n const btn = document.createElement(\"button\");\r\n btn.textContent = label;\r\n btn.style.cssText = `\r\n padding:16px 24px;border-radius:${RADIUS.md}px;font-size:16px;font-weight:600;\r\n cursor:pointer;transition:all 0.2s ease;border:none;width:100%;\r\n min-height:52px;touch-action:manipulation;-webkit-tap-highlight-color:transparent;\r\n ${\r\n isPrimary\r\n ? `background:${theme.primary};color:#fff;box-shadow:0 4px 12px ${theme.primary}30;`\r\n : `background:${theme.inputBg};color:${theme.text};border:2px solid ${theme.border};`\r\n }\r\n `;\r\n btn.addEventListener(\"mouseenter\", () => {\r\n btn.style.transform = \"translateY(-1px)\";\r\n if (isPrimary) btn.style.background = theme.primaryHover;\r\n });\r\n btn.addEventListener(\"mouseleave\", () => {\r\n btn.style.transform = \"translateY(0)\";\r\n if (isPrimary) btn.style.background = theme.primary;\r\n });\r\n return btn;\r\n }\r\n\r\n private compressImage(\r\n source: Blob | File,\r\n maxWidth: number,\r\n maxHeight: number,\r\n quality: number\r\n ): Promise<Blob> {\r\n return new Promise((resolve, reject) => {\r\n // Read EXIF orientation FIRST so we can correct rotation before canvas draw.\r\n // Canvas ignores EXIF metadata — without this, phone uploads arrive rotated.\r\n this._readExifOrientation(source).then((orientation) => {\r\n const url = URL.createObjectURL(source);\r\n const imgEl = document.createElement(\"img\");\r\n imgEl.onload = () => {\r\n URL.revokeObjectURL(url);\r\n let { naturalWidth: w, naturalHeight: h } = imgEl;\r\n\r\n // For orientations 5-8 the image is rotated 90°/270° — swap dimensions\r\n const swapped = orientation >= 5 && orientation <= 8;\r\n const srcW = swapped ? h : w;\r\n const srcH = swapped ? w : h;\r\n const ratio = computeScaleRatio(srcW, srcH, maxWidth, maxHeight);\r\n const outW = Math.round(srcW * ratio);\r\n const outH = Math.round(srcH * ratio);\r\n\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = outW;\r\n canvas.height = outH;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) { reject(new Error(\"Canvas unavailable\")); return; }\r\n\r\n // Apply EXIF rotation transform before drawing\r\n ctx.save();\r\n if (orientation === 2) { ctx.transform(-1, 0, 0, 1, outW, 0); }\r\n else if (orientation === 3) { ctx.transform(-1, 0, 0, -1, outW, outH); }\r\n else if (orientation === 4) { ctx.transform( 1, 0, 0, -1, 0, outH); }\r\n else if (orientation === 5) { ctx.transform( 0, 1, 1, 0, 0, 0); }\r\n else if (orientation === 6) { ctx.transform( 0, 1, -1, 0, outH, 0); }\r\n else if (orientation === 7) { ctx.transform( 0, -1, -1, 0, outH, outW); }\r\n else if (orientation === 8) { ctx.transform( 0, -1, 1, 0, 0, outW); }\r\n ctx.drawImage(imgEl, 0, 0, swapped ? outH : outW, swapped ? outW : outH);\r\n ctx.restore();\r\n\r\n canvas.toBlob(\r\n (blob) => { blob ? resolve(blob) : reject(new Error(\"Compression failed\")); },\r\n \"image/jpeg\",\r\n quality\r\n );\r\n };\r\n imgEl.onerror = () => { URL.revokeObjectURL(url); reject(new Error(\"Image load failed\")); };\r\n imgEl.src = url;\r\n }).catch(() => {\r\n // If EXIF read fails, fall back to simple compression without rotation\r\n const url = URL.createObjectURL(source);\r\n const imgEl = document.createElement(\"img\");\r\n imgEl.onload = () => {\r\n URL.revokeObjectURL(url);\r\n let { naturalWidth: w, naturalHeight: h } = imgEl;\r\n const ratio = computeScaleRatio(w, h, maxWidth, maxHeight);\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = Math.round(w * ratio);\r\n canvas.height = Math.round(h * ratio);\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) { reject(new Error(\"Canvas unavailable\")); return; }\r\n ctx.drawImage(imgEl, 0, 0, canvas.width, canvas.height);\r\n canvas.toBlob(\r\n (blob) => { blob ? resolve(blob) : reject(new Error(\"Compression failed\")); },\r\n \"image/jpeg\",\r\n quality\r\n );\r\n };\r\n imgEl.onerror = () => { URL.revokeObjectURL(url); reject(new Error(\"Image load failed\")); };\r\n imgEl.src = url;\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Read JPEG EXIF orientation tag (1–8) from a Blob/File.\r\n * Returns 1 (no rotation) if EXIF is absent or unreadable.\r\n */\r\n private _readExifOrientation(source: Blob | File): Promise<number> {\r\n return new Promise((resolve) => {\r\n const reader = new FileReader();\r\n reader.onload = (e) => {\r\n try {\r\n const buf = e.target?.result as ArrayBuffer;\r\n const view = new DataView(buf);\r\n if (view.getUint16(0, false) !== 0xFFD8) { resolve(1); return; } // not JPEG\r\n let offset = 2;\r\n while (offset < view.byteLength) {\r\n const marker = view.getUint16(offset, false);\r\n offset += 2;\r\n if (marker === 0xFFE1) { // APP1 — may contain EXIF\r\n if (view.getUint32(offset + 2, false) !== 0x45786966) { resolve(1); return; }\r\n const little = view.getUint16(offset + 8, false) === 0x4949;\r\n const ifdOff = offset + 8 + view.getUint32(offset + 12, little);\r\n const tags = view.getUint16(ifdOff, little);\r\n for (let i = 0; i < tags; i++) {\r\n if (view.getUint16(ifdOff + 2 + 12 * i, little) === 0x0112) {\r\n resolve(view.getUint16(ifdOff + 2 + 12 * i + 8, little));\r\n return;\r\n }\r\n }\r\n resolve(1); return;\r\n } else if ((marker & 0xFF00) !== 0xFF00) {\r\n break;\r\n } else {\r\n offset += view.getUint16(offset, false);\r\n }\r\n }\r\n resolve(1);\r\n } catch { resolve(1); }\r\n };\r\n reader.onerror = () => resolve(1);\r\n // Only need the first 64KB — EXIF is always in the first APP1 segment\r\n reader.readAsArrayBuffer(source.slice(0, 65536));\r\n });\r\n }\r\n\r\n private getDocumentLabel(type: string): string {\r\n const t = type.toLowerCase();\r\n if (t.includes(\"passport\")) return \"passport\";\r\n if (t.includes(\"driver\") || t.includes(\"licen\")) return \"driver's license\";\r\n if (t.includes(\"voter\") || t.includes(\"pvc\")) return \"voter's card\";\r\n // NIN covers both the NIN slip and the physical NIN card — \"document\"\r\n // rather than \"card\" so slip users don't get told to align a \"card\"\r\n // they don't have.\r\n if (t.includes(\"nin\")) return \"NIN document\";\r\n if (t.includes(\"national\")) return \"national ID card\";\r\n if (t.includes(\"bvn\")) return \"BVN document\";\r\n return \"identity document\";\r\n }\r\n}\r\n", "\uFEFFimport { SmartComply } from \"../client/Smartcomply\";\r\nimport { SDKInitConfig, SDKChannel, VerifyIdentityResponse } from \"../types/onboarding\";\r\nimport { LivenessSubmitResponse, ChallengeAction } from \"../types/liveness\";\r\nimport { ThemeColors, getTheme, TYPE, RADIUS } from \"./theme\";\r\nimport { DocumentCapture, DocumentCaptureResult } from \"./DocumentCapture\";\r\nimport { Environment } from \"../client/Config\";\r\nimport { collectDeviceMetadata } from \"../utils/device\";\r\nimport { requiresBackSide, BackSideMode } from \"../utils/documentRules\";\r\nimport { DEFAULT_CHALLENGE_ACTIONS } from \"../utils/constants\";\r\nimport { icon, IconName } from \"./icons\";\r\nimport { renderSpinner, renderInlineSpinner } from \"./spinner\";\r\n\r\n// A dropped camera/network/upload error is not the user's fault and must not\r\n// cost them a retry attempt — only a genuine verification outcome should.\r\n// Classified by message rather than a typed error class since the errors\r\n// originate from several independent layers (CameraManager, VideoRecorder,\r\n// LivenessUploader) that don't share a common error type today.\r\nconst _INFRASTRUCTURE_ERROR_PATTERNS = [\r\n \"camera connection was lost\",\r\n \"network error\",\r\n \"failed after all retries\",\r\n \"camera access is not supported\",\r\n \"camera access failed\",\r\n \"recording failed unexpectedly\",\r\n // FaceDetectorEngine.init() failures (FaceDetector.ts) — a slow/blocked\r\n // CDN or model download is a connectivity issue, not a failed face scan,\r\n // and must not burn one of the user's limited liveness retry attempts.\r\n \"face detection setup timed out\",\r\n \"failed to download face model\",\r\n];\r\n\r\nfunction _isInfrastructureError(err: any): boolean {\r\n const msg = String(err?.message || \"\").toLowerCase();\r\n return _INFRASTRUCTURE_ERROR_PATTERNS.some((p) => msg.includes(p));\r\n}\r\n\r\n// Keep this plain-language and reassuring for infrastructure hiccups — the\r\n// user did nothing wrong, so the copy should say so rather than sound like\r\n// a rejection.\r\nfunction _userFacingLivenessError(err: any): string {\r\n if (_isInfrastructureError(err)) {\r\n return \"We lost connection during your scan — this wasn't anything you did. Please check your camera and internet connection, then try again.\";\r\n }\r\n return err?.message || \"We couldn't verify your face. Please try again.\";\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────\r\n// Public Types\r\n// ─────────────────────────────────────────────────────────────────────\r\n\r\nexport interface FlowOptions {\r\n apiKey: string;\r\n clientId: string;\r\n environment?: Environment;\r\n timeout?: number;\r\n onComplete?: (result: FlowResult) => void;\r\n onError?: (error: Error) => void;\r\n onClose?: () => void;\r\n}\r\n\r\nexport interface FlowResult {\r\n entryId: number;\r\n sessionId: string | null;\r\n status: string;\r\n submittedAt: string | null;\r\n verificationResult?: VerifyIdentityResponse;\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────\r\n// Step definitions\r\n// ─────────────────────────────────────────────────────────────────────\r\n\r\ntype StepName =\r\n | \"loading\"\r\n | \"welcome\"\r\n | \"country\"\r\n | \"id_type\"\r\n | \"id_input\"\r\n | \"confirm_identity\"\r\n | \"document_capture\"\r\n | \"document_confirm\"\r\n | \"ocr_gate\"\r\n | \"liveness\"\r\n | \"done\"\r\n | \"error\";\r\n\r\nconst STEP_ORDER: StepName[] = [\r\n \"loading\",\r\n \"welcome\",\r\n \"country\",\r\n \"id_type\",\r\n \"id_input\",\r\n \"confirm_identity\",\r\n \"document_capture\",\r\n \"ocr_gate\",\r\n \"document_confirm\",\r\n \"liveness\",\r\n \"done\",\r\n];\r\n\r\nconst COUNTRY_LABELS: Record<string, string> = {\r\n nigeria: \"🇳🇬 Nigeria\",\r\n global: \"🌍 Other Countries\",\r\n ghana: \"🇬🇭 Ghana\",\r\n kenya: \"🇰🇪 Kenya\",\r\n south_africa: \"🇿🇦 South Africa\",\r\n united_states: \"🇺🇸 United States\",\r\n united_kingdom: \"🇬🇧 United Kingdom\",\r\n};\r\n\r\n// Backend/admin data tags document-capture fields inconsistently — the field\r\n// renderer (below) already treats \"image\" and \"file\" as file inputs alongside\r\n// \"upload\", so flow-routing decisions must recognize the same set or a channel\r\n// tagged \"image\"/\"file\" silently falls back to the number-entry screen.\r\nfunction isUploadFieldType(type: unknown): boolean {\r\n return type === \"upload\" || type === \"image\" || type === \"file\";\r\n}\r\n\r\nfunction resolveIdTypeInfo(\r\n typeName: string,\r\n isDocumentFlow: boolean\r\n): { icon: string; desc: string; requiresBack?: BackSideMode } {\r\n const u = typeName.toUpperCase();\r\n const advanced = u.includes(\"ADVANCED\");\r\n\r\n // Strip UI noise from display labels — users don't need \"with face\" or \"(NIN)\" suffixes\r\n const cleanName = typeName\r\n .replace(/\\s*with\\s+face\\s*/gi, ' ')\r\n .replace(/\\s*\\(NIN\\)\\s*/gi, ' ')\r\n .replace(/\\s*\\(BVN\\)\\s*/gi, ' ')\r\n .replace(/\\s{2,}/g, ' ')\r\n .trim();\r\n\r\n // BVN — always 11 digits\r\n if (u.includes(\"BVN\") || u.includes(\"BANK VERIFICATION\")) {\r\n return { icon: \"🏦\", desc: \"Enter your 11-digit Bank Verification Number (BVN)\", requiresBack: false };\r\n }\r\n\r\n // NIN — always 11 digits (covers nin_with_face, NIN slip, etc.). Not every\r\n // NIN document in circulation has a back side — a NIN slip typically\r\n // doesn't, while a NIN card does — so the back photo is offered for\r\n // either, but optional rather than required: add it if your document\r\n // has one, skip it if it doesn't. The plain data-verification flow (just\r\n // typing the 11-digit number, no document) never captures a photo at\r\n // all, so requiresBack stays false there.\r\n if (u.includes(\"NIN\") || u.includes(\"NATIONAL IDENTITY NUMBER\")) {\r\n return {\r\n icon: \"🆔\",\r\n desc: isDocumentFlow\r\n ? \"Capture or upload your NIN (slip or card) — add the back if your document has one\"\r\n : \"Enter your 11-digit National Identification Number (NIN)\",\r\n requiresBack: isDocumentFlow ? \"optional\" : false,\r\n };\r\n }\r\n\r\n // Ghana Card / Ghana National ID\r\n if (u.includes(\"GHANA\")) {\r\n if (isDocumentFlow) return { icon: \"🪪\", desc: \"Capture or upload your Ghana Card\", requiresBack: requiresBackSide(typeName) };\r\n return { icon: \"🪪\", desc: \"Enter your Ghana Card number\", requiresBack: false };\r\n }\r\n\r\n // SSNIT (Ghana social security)\r\n if (u.includes(\"SSNIT\"))\r\n return { icon: \"🏛️\", desc: \"Enter your SSNIT number\", requiresBack: false };\r\n\r\n // Kenya National ID\r\n if (u.includes(\"KENYA\") || (u.includes(\"NATIONAL\") && u.includes(\"KENYA\")))\r\n return { icon: \"🆔\", desc: \"Enter your Kenya National ID number\", requiresBack: false };\r\n\r\n // TIN\r\n if (u.includes(\"TIN\") || u.includes(\"TAX IDENTIFICATION\"))\r\n return { icon: \"🧾\", desc: \"Enter your Tax Identification Number (TIN)\", requiresBack: false };\r\n\r\n // CAC / Company registration\r\n if (u.includes(\"CAC\") || u.includes(\"CORPORATE AFFAIRS\") || u.includes(\"COMPANY\"))\r\n return { icon: \"🏢\", desc: advanced ? \"Enter RC number, company name & type\" : \"Enter your company registration number\", requiresBack: false };\r\n\r\n // Voter / PVC\r\n if (u.includes(\"VOTER\") || u.includes(\"PVC\")) {\r\n const requiresBack = requiresBackSide(typeName);\r\n return { \r\n icon: \"🗳️\", \r\n desc: isDocumentFlow \r\n ? `Capture or upload your voter's card${requiresBack ? \" (front & back)\" : \"\"}` \r\n : \"Enter your voter ID number\",\r\n requiresBack: isDocumentFlow ? requiresBack : false\r\n };\r\n }\r\n\r\n // Passport\r\n if (u.includes(\"PASSPORT\"))\r\n return { icon: \"📘\", desc: isDocumentFlow ? \"Capture or upload your passport\" : \"Enter your passport number\", requiresBack: false };\r\n\r\n // Driver's license\r\n if (u.includes(\"DRIVER\") || u.includes(\"LICENSE\") || u.includes(\"LICENCE\")) {\r\n const requiresBack = requiresBackSide(typeName);\r\n return { \r\n icon: \"🚗\", \r\n desc: isDocumentFlow \r\n ? `Capture or upload your driver's license${requiresBack ? \" (front & back)\" : \"\"}` \r\n : \"Enter your driver's license number\",\r\n requiresBack: isDocumentFlow ? requiresBack : false\r\n };\r\n }\r\n\r\n // National ID card (generic)\r\n if (u.includes(\"NATIONAL ID\") || (u.includes(\"NATIONAL\") && u.includes(\"CARD\"))) {\r\n const requiresBack = requiresBackSide(typeName);\r\n return { \r\n icon: \"🪪\", \r\n desc: isDocumentFlow \r\n ? `Capture or upload your ID card${requiresBack ? \" (front & back)\" : \"\"}` \r\n : \"Enter your National ID number\",\r\n requiresBack: isDocumentFlow ? requiresBack : false\r\n };\r\n }\r\n\r\n // Face liveness / comparison\r\n if (u.includes(\"LIVENESS\") || u.includes(\"FACE COMPARISON\") || u.includes(\"FACE MATCH\"))\r\n return { icon: \"🤳\", desc: \"We'll capture a short selfie video to verify you\", requiresBack: false };\r\n\r\n return {\r\n icon: isDocumentFlow ? \"📄\" : \"🆔\",\r\n desc: isDocumentFlow ? \"Capture or upload your document\" : \"Enter your ID number\",\r\n requiresBack: false,\r\n };\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────\r\n// ── Widget-side message sanitizer ─────────────────────────────────────────────\r\n// Strips anything technical before showing text to the end user.\r\n// Keeps messages that are already written plainly in natural language.\r\nfunction _sanitizeUserMessage(raw: string | null | undefined): string | null {\r\n if (!raw) return null;\r\n const lower = raw.toLowerCase();\r\n\r\n // Block anything that looks internal / technical\r\n const blocklist = [\r\n \"smartcomply\", \"face comparison service\", \"session id\", \"session_id\",\r\n \"provider\", \"ocr\", \"textract\", \"rekognition\", \"deepface\",\r\n \"ivs\", \"celery\", \"exception\", \"traceback\", \"str(e)\",\r\n \"error:\", \"django\", \"python\", \"http \",\r\n \"comparison mode\", \"liveness mode\", \"callback\",\r\n \"face_comparison\", \"face_match\", \"confidence_percentage\",\r\n \"threshold_percentage\", \"polling_fallback\", \"resolved_by\",\r\n // Billing/wallet messages are an operator problem (fund the account,\r\n // configure billing) — never the end user's to act on.\r\n \"wallet\", \"fund your wallet\", \"billing is not configured\",\r\n \"insufficient balance\", \"insufficient fund\",\r\n ];\r\n for (const blocked of blocklist) {\r\n if (lower.includes(blocked)) return null;\r\n }\r\n\r\n // Block a bare exception-style \"Failed:<detail>\" (no space after the colon,\r\n // e.g. \"AuthenticationFailed:invalid_token\") but NOT the backend's\r\n // deliberate natural-language shape \"{Identity Type} check failed: {reason}\"\r\n // (e.g. \"Bank Verification Number Advanced check failed: name does not\r\n // match\") — that phrasing is written for end users and is exactly what\r\n // should surface, not get discarded.\r\n if (/failed:\\S/i.test(raw)) return null;\r\n\r\n // Block snake_case (internal field names accidentally leaking through)\r\n if (/[a-z]+_[a-z]+/.test(raw) && !/\\s/.test(raw.trim())) return null;\r\n\r\n // Block anything starting with a lowercase letter (likely a code/key)\r\n if (raw.trim()[0] === raw.trim()[0].toLowerCase() && /^[a-z]/.test(raw.trim())) return null;\r\n\r\n return raw.trim();\r\n}\r\n\r\n// ── B8: OCR date string normaliser ───────────────────────────────────────────\r\n// OCR providers return dates in wildly different formats. new Date(str) is\r\n// locale-dependent for anything other than ISO 8601 (YYYY-MM-DD), so we\r\n// attempt a set of known patterns before falling back to the native parser.\r\nfunction _parseOcrDate(raw: string): Date | null {\r\n if (!raw) return null;\r\n const s = raw.trim();\r\n\r\n // ISO 8601 or near-ISO — try first, always unambiguous\r\n if (/^\\d{4}-\\d{2}-\\d{2}/.test(s)) return new Date(s.slice(0, 10));\r\n\r\n // DD/MM/YYYY or DD-MM-YYYY\r\n const dmy = s.match(/^(\\d{2})[\\/\\-](\\d{2})[\\/\\-](\\d{4})/);\r\n if (dmy) return new Date(`${dmy[3]}-${dmy[2]}-${dmy[1]}`);\r\n\r\n // MM/DD/YYYY (US format — less common from OCR but possible)\r\n const mdy = s.match(/^(\\d{2})\\/(\\d{2})\\/(\\d{4})/);\r\n if (mdy) {\r\n // Heuristic: if \"month\" > 12 it must be day-first\r\n if (parseInt(mdy[1], 10) > 12) return new Date(`${mdy[3]}-${mdy[2]}-${mdy[1]}`);\r\n return new Date(`${mdy[3]}-${mdy[1]}-${mdy[2]}`);\r\n }\r\n\r\n // DD Mon YYYY e.g. \"12 May 2029\" or \"12 MAY 2029\"\r\n const dMonY = s.match(/^(\\d{1,2})\\s+([A-Za-z]{3,})\\s+(\\d{4})/);\r\n if (dMonY) return new Date(`${dMonY[2]} ${dMonY[1]} ${dMonY[3]}`);\r\n\r\n // Last resort: native parser\r\n const d = new Date(s);\r\n return isNaN(d.getTime()) ? null : d;\r\n}\r\n\r\n// ── W12: Image compression before document upload ────────────────────────────\r\nasync function _compressImage(blob: Blob, maxWidth = 1600, quality = 0.85): Promise<Blob> {\r\n try {\r\n const bmp = await createImageBitmap(blob);\r\n const scale = Math.min(1, maxWidth / bmp.width);\r\n const w = Math.round(bmp.width * scale);\r\n const h = Math.round(bmp.height * scale);\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = w; canvas.height = h;\r\n canvas.getContext(\"2d\")!.drawImage(bmp, 0, 0, w, h);\r\n bmp.close();\r\n return await new Promise<Blob>((res, rej) =>\r\n canvas.toBlob(b => b ? res(b) : rej(new Error(\"Compression failed\")), \"image/jpeg\", quality)\r\n );\r\n } catch {\r\n return blob; // fallback to original on any error\r\n }\r\n}\r\n\r\n// ── Document type code → human label ─────────────────────────────────────────\r\nfunction _formatDocType(code: string): string {\r\n const map: Record<string, string> = {\r\n passport: \"Passport\",\r\n national_id: \"National ID\",\r\n nin_slip: \"NIN Slip\",\r\n nin_with_face: \"National Identity Number\",\r\n drivers_license: \"Driver's Licence\",\r\n voters_card: \"Voter's Card\",\r\n kenya_id: \"Kenya National ID\",\r\n ghana_id: \"Ghana Card\",\r\n };\r\n if (!code) return \"\";\r\n const key = code.toLowerCase().replace(/[\\s-]/g, \"_\");\r\n if (map[key]) return map[key];\r\n // Fallback: title-case the code\r\n return code.replace(/_/g, \" \").replace(/\\b\\w/g, (c) => c.toUpperCase());\r\n}\r\n\r\n// SmartComplyFlow\r\n// ─────────────────────────────────────────────────────────────────────\r\n\r\nexport class SmartComplyFlow {\r\n private sdk: SmartComply;\r\n private options: FlowOptions;\r\n private theme: ThemeColors = getTheme(\"default\");\r\n\r\n // DOM\r\n private overlay: HTMLDivElement | null = null;\r\n private modal: HTMLDivElement | null = null;\r\n private contentArea: HTMLDivElement | null = null;\r\n private progressBar: HTMLDivElement | null = null;\r\n private stepLabel: HTMLDivElement | null = null;\r\n private stageDots: HTMLDivElement | null = null;\r\n private brandLabel: HTMLDivElement | null = null;\r\n\r\n // State\r\n private sdkConfig: SDKInitConfig | null = null;\r\n private currentStep: StepName = \"loading\";\r\n private selectedCountry: string = \"\";\r\n private selectedChannelId: number = 0;\r\n private selectedChannelFields: { type: string; label: string; options?: string[] }[] = [];\r\n private selectedIdType: string = \"\"; // Canonical code (e.g., \"national_id\", \"nin_with_face\")\r\n private selectedIdTypeName: string = \"\"; // Display name (e.g., \"National Identity Number with Face (NIN)\")\r\n private selectedRequiresBack: BackSideMode | undefined = undefined; // Backend-provided back-side flag\r\n private collectedFields: Record<string, string> = {};\r\n private idNumber: string = \"\";\r\n private documentBlob: Blob | null = null;\r\n private documentBackBlob: Blob | null = null;\r\n // Whether the document's front image came from the live camera vs. a\r\n // gallery/file upload — gates whether pre-warming the liveness camera on\r\n // the confirm screens makes sense (reusing an already-open camera) or\r\n // would surprise a user who hasn't touched their camera yet this session.\r\n private _documentViaCamera = false;\r\n private identityCheckId: number | null = null;\r\n private verificationResult: VerifyIdentityResponse | null = null;\r\n private livenessEntryId: number | null = null;\r\n private isDestroyed = false;\r\n private headerBackBtn: HTMLButtonElement | null = null;\r\n private _keydownHandler: ((e: KeyboardEvent) => void) | null = null;\r\n private _visibilityHandler: (() => void) | null = null;\r\n private _hiddenAtMs: number | null = null;\r\n private _popstateHandler: (() => void) | null = null;\r\n private _historyGuardActive = false;\r\n\r\n // Retry safety — max 3 confirmation rejections or liveness failures per session\r\n private _confirmRetries = 0;\r\n private _livenessFailures = 0;\r\n private _livenessAttemptId = 0;\r\n private static readonly MAX_RETRIES = 3;\r\n\r\n // IVS result stored for confirm_identity screen\r\n private _ivsName: string = \"\";\r\n private _ivsGender: string = \"\";\r\n\r\n // OCR result stored for document_confirm screen\r\n private _ocrName: string = \"\";\r\n private _ocrDocNumber: string = \"\";\r\n private _ocrExpiry: string = \"\";\r\n private _ocrFaceImageUrl: string = \"\";\r\n private _ocrIsExpired: boolean = false;\r\n private _ocrExpirySoon: boolean = false;\r\n\r\n // Camera pre-warm stream (created during confirmation screen, used in liveness)\r\n private _prewarmedStream: MediaStream | null = null;\r\n\r\n // OCR gate poll timer — stored so it can be cancelled on navigation or close\r\n private _ocrPollTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n // UI timeout from _startStatusPolling — stored so close() can cancel it\r\n private _uiTimeoutId: ReturnType<typeof setTimeout> | null = null;\r\n\r\n // Session expiry\r\n private sessionExpiryTimer: ReturnType<typeof setTimeout> | null = null;\r\n private sessionExpiredTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n // Status polling (result screen)\r\n private _pollStatusTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n // Components\r\n private docCapture: DocumentCapture | null = null;\r\n\r\n private constructor(options: FlowOptions) {\r\n this.options = options;\r\n this.sdk = new SmartComply({\r\n apiKey: options.apiKey,\r\n clientId: options.clientId,\r\n environment: options.environment || \"sandbox\",\r\n timeout: options.timeout,\r\n });\r\n }\r\n\r\n /**\r\n * Open the SmartComply verification flow.\r\n *\r\n * Usage:\r\n * SmartComplyFlow.open({\r\n * apiKey: \"pk_live_...\",\r\n * clientId: \"uuid-...\",\r\n * environment: \"production\",\r\n * onComplete: (result) => console.log(\"Done!\", result),\r\n * onError: (err) => console.error(err),\r\n * onClose: () => console.log(\"Closed\"),\r\n * });\r\n */\r\n static open(options: FlowOptions): SmartComplyFlow {\r\n const flow = new SmartComplyFlow(options);\r\n flow.mount();\r\n flow.initialize();\r\n return flow;\r\n }\r\n\r\n /**\r\n * Close and destroy the flow widget.\r\n */\r\n close(): void {\r\n this.isDestroyed = true;\r\n if (this._keydownHandler) {\r\n document.removeEventListener(\"keydown\", this._keydownHandler);\r\n this._keydownHandler = null;\r\n }\r\n if (this._visibilityHandler) {\r\n document.removeEventListener(\"visibilitychange\", this._visibilityHandler);\r\n this._visibilityHandler = null;\r\n }\r\n if (this._popstateHandler) {\r\n window.removeEventListener(\"popstate\", this._popstateHandler);\r\n this._popstateHandler = null;\r\n }\r\n // Closing via the ✕/Escape/completion (not via the back gesture, which\r\n // handles its own guard entry above) still leaves our one guard entry\r\n // sitting on top of the host's history — back out of it so the user\r\n // isn't left pressing back once \"into\" a widget that's already gone.\r\n if (this._historyGuardActive) {\r\n this._historyGuardActive = false;\r\n try {\r\n if (history.state?.scFlowGuard) history.back();\r\n } catch { /* ignore — best effort only */ }\r\n }\r\n this.docCapture?.destroy();\r\n // Release any pre-warmed camera stream\r\n if (this._prewarmedStream) {\r\n this._prewarmedStream.getTracks().forEach(t => t.stop());\r\n this._prewarmedStream = null;\r\n }\r\n if (this.sessionExpiryTimer) {\r\n clearTimeout(this.sessionExpiryTimer);\r\n this.sessionExpiryTimer = null;\r\n }\r\n if (this.sessionExpiredTimer) {\r\n clearTimeout(this.sessionExpiredTimer);\r\n this.sessionExpiredTimer = null;\r\n }\r\n if (this._pollStatusTimer) {\r\n clearTimeout(this._pollStatusTimer);\r\n this._pollStatusTimer = null;\r\n }\r\n // B6: cancel OCR gate poll timer\r\n if (this._ocrPollTimer) {\r\n clearTimeout(this._ocrPollTimer);\r\n this._ocrPollTimer = null;\r\n }\r\n // P4: cancel result-screen UI timeout\r\n if (this._uiTimeoutId) {\r\n clearTimeout(this._uiTimeoutId);\r\n this._uiTimeoutId = null;\r\n }\r\n\r\n if (this.overlay) {\r\n this.overlay.style.opacity = \"0\";\r\n setTimeout(() => {\r\n try {\r\n this.overlay?.remove();\r\n } catch (_) { /* extension interference — safe to ignore */ }\r\n this.overlay = null;\r\n this.modal = null;\r\n this.contentArea = null;\r\n }, 300);\r\n }\r\n\r\n this.options.onClose?.();\r\n }\r\n\r\n // ─────────────────────────────────────────────────────────────────\r\n // Initialization\r\n // ─────────────────────────────────────────────────────────────────\r\n\r\n private mount(): void {\r\n // Inject keyframes\r\n this.injectStyles();\r\n\r\n // Overlay\r\n this.overlay = document.createElement(\"div\");\r\n this.overlay.id = \"sc-flow-overlay\";\r\n this.overlay.style.cssText = `\r\n position:fixed;inset:0;z-index:99999;\r\n display:flex;align-items:center;justify-content:center;\r\n background:${this.theme.overlay};\r\n backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);\r\n opacity:0;transition:opacity 0.3s ease;\r\n font-family:'Inter','Segoe UI',system-ui,-apple-system,sans-serif;\r\n `;\r\n\r\n // Modal\r\n this.modal = document.createElement(\"div\");\r\n this.modal.id = \"sc-flow-modal\";\r\n this.modal.setAttribute(\"role\", \"dialog\");\r\n this.modal.setAttribute(\"aria-modal\", \"true\");\r\n this.modal.setAttribute(\"aria-label\", \"Identity verification\");\r\n this.modal.style.cssText = `\r\n width:100%;max-width:580px;max-height:95vh;\r\n background:${this.theme.bg};\r\n border-radius:20px;overflow:hidden;\r\n box-shadow:${this.theme.shadow};\r\n display:flex;flex-direction:column;\r\n transform:translateY(20px) scale(0.97);\r\n transition:transform 0.35s cubic-bezier(0.16,1,0.3,1);\r\n `;\r\n\r\n // Header\r\n const header = this.createHeader();\r\n this.modal.appendChild(header);\r\n\r\n // Progress bar\r\n const progressWrap = document.createElement(\"div\");\r\n progressWrap.style.cssText = `height:3px;background:${this.theme.shimmer};`;\r\n this.progressBar = document.createElement(\"div\");\r\n this.progressBar.style.cssText = `\r\n height:100%;width:0%;background:linear-gradient(90deg,${this.theme.primary},${this.theme.primaryHover});\r\n border-radius:0 2px 2px 0;transition:width 0.5s ease;\r\n `;\r\n progressWrap.appendChild(this.progressBar);\r\n this.modal.appendChild(progressWrap);\r\n\r\n // Content area (scrollable)\r\n this.contentArea = document.createElement(\"div\");\r\n this.contentArea.id = \"sc-flow-content\";\r\n this.contentArea.setAttribute(\"role\", \"main\");\r\n this.contentArea.setAttribute(\"aria-live\", \"polite\");\r\n this.contentArea.setAttribute(\"aria-atomic\", \"false\");\r\n this.contentArea.style.cssText = `\r\n flex:1;overflow-y:auto;padding:16px 20px;\r\n -webkit-overflow-scrolling:touch;\r\n `;\r\n this.modal.appendChild(this.contentArea);\r\n\r\n // Footer\r\n const footer = this.createFooter();\r\n this.modal.appendChild(footer);\r\n\r\n this.overlay.appendChild(this.modal);\r\n document.body.appendChild(this.overlay);\r\n\r\n // Animate in\r\n requestAnimationFrame(() => {\r\n if (this.overlay) this.overlay.style.opacity = \"1\";\r\n if (this.modal) this.modal.style.transform = \"translateY(0) scale(1)\";\r\n });\r\n\r\n // Escape closes the dialog; Tab is trapped inside it (standard WCAG dialog pattern).\r\n this._keydownHandler = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\") {\r\n e.preventDefault();\r\n this.close();\r\n return;\r\n }\r\n if (e.key === \"Tab\" && this.modal) {\r\n const focusable = this.modal.querySelectorAll<HTMLElement>(\r\n 'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'\r\n );\r\n if (focusable.length === 0) return;\r\n const first = focusable[0];\r\n const last = focusable[focusable.length - 1];\r\n if (e.shiftKey && document.activeElement === first) {\r\n e.preventDefault();\r\n last.focus();\r\n } else if (!e.shiftKey && document.activeElement === last) {\r\n e.preventDefault();\r\n first.focus();\r\n }\r\n }\r\n };\r\n document.addEventListener(\"keydown\", this._keydownHandler);\r\n\r\n // A tab backgrounded mid-scan (a notification, switching apps to copy a\r\n // code, a phone call) leaves the camera stream and detection loop in an\r\n // undefined state on most mobile browsers — rAF throttles/pauses while\r\n // hidden, and some browsers suspend the camera outright. Rather than let\r\n // the scan silently continue against stale state and fail confusingly,\r\n // restart the liveness step cleanly once the tab has been away long\r\n // enough to plausibly have disrupted an active camera session. A brief\r\n // glance elsewhere (quick app switch, screen lock tap) is not enough to\r\n // warrant restarting — only a real return-from-away.\r\n const REBACKGROUND_RESTART_MS = 3000;\r\n this._visibilityHandler = () => {\r\n if (this.isDestroyed) return;\r\n if (document.hidden) {\r\n this._hiddenAtMs = Date.now();\r\n return;\r\n }\r\n const hiddenAt = this._hiddenAtMs;\r\n this._hiddenAtMs = null;\r\n if (hiddenAt === null) return;\r\n const awayMs = Date.now() - hiddenAt;\r\n if (awayMs >= REBACKGROUND_RESTART_MS && this.currentStep === \"liveness\") {\r\n this.showStep(\"liveness\");\r\n }\r\n };\r\n document.addEventListener(\"visibilitychange\", this._visibilityHandler);\r\n\r\n // Intercept the browser/OS back gesture so it steps back within the flow\r\n // instead of navigating the host page away and abandoning the session\r\n // mid-verification (camera left open, timers orphaned). One guard entry\r\n // is pushed — not one per step — to minimize interference with a host\r\n // page's own router; popstate re-arms it each time so back can be\r\n // pressed repeatedly. If the current step has no back target, back\r\n // closes the widget cleanly instead (same as the header ✕).\r\n this._historyGuardActive = true;\r\n try {\r\n history.pushState({ scFlowGuard: true }, \"\");\r\n } catch {\r\n this._historyGuardActive = false; // host disallows pushState — degrade silently\r\n }\r\n this._popstateHandler = () => {\r\n if (this.isDestroyed || !this._historyGuardActive) return;\r\n const backAction = this._getBackAction(this.currentStep);\r\n if (backAction) {\r\n backAction();\r\n } else {\r\n this.close();\r\n return; // don't re-arm — we're closing, let the real back navigation proceed\r\n }\r\n try {\r\n history.pushState({ scFlowGuard: true }, \"\");\r\n } catch { /* ignore — nothing more we can do */ }\r\n };\r\n window.addEventListener(\"popstate\", this._popstateHandler);\r\n }\r\n\r\n private async initialize(): Promise<void> {\r\n this.showStep(\"loading\");\r\n\r\n try {\r\n // Create session\r\n await this.sdk.createSession();\r\n\r\n // C4: Start session expiry timer (warn 2 min before 30-min expiry)\r\n const expiresAt = this.sdk.sessionExpiresAt;\r\n if (expiresAt) {\r\n const expiresMs = new Date(expiresAt).getTime() - Date.now();\r\n const warnMs = Math.max(expiresMs - 120000, 0); // warn 2 min before\r\n this.sessionExpiryTimer = setTimeout(\r\n () => this._showExpiryWarningWhenSafe(),\r\n warnMs\r\n );\r\n // The warning above is advisory only and can defer indefinitely\r\n // while the user sits on a camera-active step — without a hard\r\n // stop, an ignored/deferred warning left the widget open against\r\n // an already-expired backend session (SessionToken.expires_at,\r\n // 30 min — see sdk/views.py's SessionToken.objects.create call)\r\n // for as long as the host page stayed open. Force-close once the\r\n // real deadline passes so the widget's lifetime never exceeds\r\n // what the backend actually honors.\r\n this.sessionExpiredTimer = setTimeout(\r\n () => this._enforceSessionExpiry(),\r\n Math.max(expiresMs, 0)\r\n );\r\n }\r\n\r\n // Load config\r\n this.sdkConfig = await this.sdk.initializeConfig();\r\n\r\n // Apply theme from config — use theme_hex to override primary colour if set\r\n if (this.sdkConfig.theme) {\r\n this.theme = getTheme(this.sdkConfig.theme, (this.sdkConfig as any).theme_hex || null);\r\n this.applyTheme();\r\n }\r\n\r\n // Update brand name in header\r\n if (this.brandLabel && this.sdkConfig.brand_name) {\r\n this.brandLabel.textContent = this.sdkConfig.brand_name;\r\n }\r\n\r\n if (this.isDestroyed) return;\r\n\r\n this.showStep(\"welcome\");\r\n\r\n } catch (err: any) {\r\n this.showErrorStep(err.message || \"Failed to initialize. Please try again.\");\r\n }\r\n }\r\n\r\n // Defers the expiry warning while the user is on a camera-active step\r\n // (document_capture/liveness) — showing it there would blow away a live\r\n // video element and in-progress MediaRecorder mid-scan.\r\n private _showExpiryWarningWhenSafe(): void {\r\n if (this.isDestroyed) return;\r\n const cameraActiveSteps: StepName[] = [\"document_capture\", \"liveness\"];\r\n if (cameraActiveSteps.includes(this.currentStep)) {\r\n this.sessionExpiryTimer = setTimeout(() => this._showExpiryWarningWhenSafe(), 5000);\r\n return;\r\n }\r\n this.showErrorStep(\"Your session is about to expire. Please complete verification quickly or restart.\");\r\n }\r\n\r\n // Hard stop once the backend session (SessionToken.expires_at, 30 min)\r\n // has actually passed. Deferred the same way as the warning above while\r\n // a camera is live so we don't tear down an in-progress scan, but capped\r\n // — the earlier warning already gave the user 2 minutes' notice, so\r\n // there's no reason to keep deferring past a short grace window the way\r\n // the advisory warning does.\r\n private static readonly MAX_EXPIRY_DEFERRALS = 12; // 12 * 5s = 60s grace\r\n private _expiryDeferrals = 0;\r\n private _enforceSessionExpiry(): void {\r\n if (this.isDestroyed) return;\r\n const cameraActiveSteps: StepName[] = [\"document_capture\", \"liveness\"];\r\n if (\r\n cameraActiveSteps.includes(this.currentStep) &&\r\n this._expiryDeferrals < SmartComplyFlow.MAX_EXPIRY_DEFERRALS\r\n ) {\r\n this._expiryDeferrals += 1;\r\n this.sessionExpiredTimer = setTimeout(() => this._enforceSessionExpiry(), 5000);\r\n return;\r\n }\r\n this.showErrorStep(\"Your session has expired. Please restart verification.\");\r\n this.close();\r\n }\r\n\r\n // ─────────────────────────────────────────────────────────────────\r\n // Step rendering\r\n // ─────────────────────────────────────────────────────────────────\r\n\r\n private showStep(step: StepName): void {\r\n this.currentStep = step;\r\n if (!this.contentArea) return;\r\n\r\n // P1/B6: cancel any in-flight OCR gate poll when user navigates away\r\n if (this._ocrPollTimer) {\r\n clearTimeout(this._ocrPollTimer);\r\n this._ocrPollTimer = null;\r\n }\r\n\r\n // Release a pre-warmed camera stream if we're navigating anywhere other\r\n // than liveness (the only step that consumes it) — otherwise \"No, use a\r\n // different ID\" / \"No, retake document\" / header back-button leave the\r\n // camera held open indefinitely with no consumer.\r\n if (step !== \"liveness\" && this._prewarmedStream) {\r\n this._prewarmedStream.getTracks().forEach(t => t.stop());\r\n this._prewarmedStream = null;\r\n }\r\n\r\n // Update progress\r\n this.updateProgress();\r\n\r\n // Animate out current content\r\n const oldContent = this.contentArea.firstChild as HTMLElement | null;\r\n if (oldContent) {\r\n oldContent.style.cssText += \"opacity:0;transform:translateX(-20px);transition:all 0.2s ease;\";\r\n setTimeout(() => {\r\n if (this.contentArea) this.contentArea.innerHTML = \"\";\r\n this.renderStep(step);\r\n }, 200);\r\n } else {\r\n this.renderStep(step);\r\n }\r\n }\r\n\r\n private renderStep(step: StepName): void {\r\n if (!this.contentArea) return;\r\n\r\n const wrapper = document.createElement(\"div\");\r\n wrapper.style.cssText = \"opacity:0;transform:translateX(20px);transition:all 0.3s ease;\";\r\n\r\n switch (step) {\r\n case \"loading\":\r\n this.renderLoading(wrapper);\r\n break;\r\n case \"welcome\":\r\n this.renderWelcome(wrapper);\r\n break;\r\n case \"country\":\r\n this.renderCountrySelect(wrapper);\r\n break;\r\n case \"id_type\":\r\n this.renderIdTypeSelect(wrapper);\r\n break;\r\n case \"id_input\":\r\n this.renderIdInput(wrapper);\r\n break;\r\n case \"confirm_identity\":\r\n this.renderConfirmIdentity(wrapper);\r\n break;\r\n case \"document_capture\":\r\n this.renderDocumentCapture(wrapper);\r\n break;\r\n case \"ocr_gate\":\r\n this.renderOcrGate(wrapper);\r\n break;\r\n case \"document_confirm\":\r\n this.renderDocumentConfirm(wrapper);\r\n break;\r\n case \"liveness\":\r\n this.renderLiveness(wrapper);\r\n break;\r\n case \"done\":\r\n this.renderDone(wrapper);\r\n break;\r\n case \"error\":\r\n break;\r\n }\r\n\r\n this.contentArea.appendChild(wrapper);\r\n\r\n // Animate in\r\n requestAnimationFrame(() => {\r\n wrapper.style.opacity = \"1\";\r\n wrapper.style.transform = \"translateX(0)\";\r\n });\r\n\r\n // Move focus to the new step's heading so keyboard/screen-reader users\r\n // aren't left on a now-detached button. Skipped for camera-active steps\r\n // and id_input, which already focuses its first field itself.\r\n const skipAutoFocusSteps: StepName[] = [\"document_capture\", \"liveness\", \"id_input\"];\r\n if (!skipAutoFocusSteps.includes(step)) {\r\n requestAnimationFrame(() => {\r\n const heading = wrapper.querySelector<HTMLElement>(\"h1, h2, h3\");\r\n const target =\r\n heading ||\r\n wrapper.querySelector<HTMLElement>(\r\n 'button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'\r\n );\r\n if (target) {\r\n if (heading && !heading.hasAttribute(\"tabindex\")) {\r\n heading.setAttribute(\"tabindex\", \"-1\");\r\n }\r\n target.focus({ preventScroll: true });\r\n }\r\n });\r\n }\r\n }\r\n\r\n // ── Loading ─────────────────────────────────────────────────────\r\n\r\n private renderLoading(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:300px;gap:16px;\";\r\n\r\n container.appendChild(renderSpinner(this.theme, { size: 60, icon: icon(\"shield\", 22) }));\r\n\r\n const label = document.createElement(\"div\");\r\n label.style.cssText = `color:${this.theme.text};font-size:${TYPE.base}px;font-weight:600;`;\r\n label.textContent = \"Setting up secure session\";\r\n container.appendChild(label);\r\n\r\n const sub = document.createElement(\"div\");\r\n sub.style.cssText = `color:${this.theme.textMuted};font-size:12px;text-align:center;max-width:220px;line-height:1.5;`;\r\n sub.textContent = \"Connecting to the verification service...\";\r\n container.appendChild(sub);\r\n }\r\n\r\n // ── Welcome ────────────────────────────────────────────────────\r\n\r\n private renderWelcome(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:12px;\";\r\n\r\n const isLivenessOnly = this.isLivenessOnlyFlow();\r\n const isDocFlow = isLivenessOnly ? false : this.isDocumentFlow();\r\n\r\n // Icon + badge row (side by side to save vertical space)\r\n const topRow = document.createElement(\"div\");\r\n topRow.style.cssText = \"display:flex;flex-direction:column;align-items:center;gap:8px;\";\r\n\r\n const iconWrap = document.createElement(\"div\");\r\n iconWrap.style.cssText = `\r\n width:50px;height:50px;border-radius:14px;\r\n display:flex;align-items:center;justify-content:center;\r\n color:${this.theme.primary};\r\n background:linear-gradient(135deg,${this.theme.primary}22,${this.theme.primaryGlow});\r\n border:1.5px solid ${this.theme.primary}33;\r\n `;\r\n iconWrap.innerHTML = icon(isDocFlow ? \"id-card\" : \"shield\", 24);\r\n topRow.appendChild(iconWrap);\r\n\r\n const badge = document.createElement(\"div\");\r\n badge.style.cssText = `\r\n display:inline-flex;align-items:center;gap:5px;\r\n padding:3px 11px;border-radius:999px;\r\n font-size:10.5px;font-weight:600;letter-spacing:0.2px;\r\n background:${this.theme.primary}15;\r\n color:${this.theme.primary};\r\n border:1px solid ${this.theme.primary}30;\r\n `;\r\n badge.textContent = isLivenessOnly\r\n ? \"🤳 Liveness Check\"\r\n : isDocFlow ? \"📄 Document Verification\" : \"🔍 Data Verification\";\r\n topRow.appendChild(badge);\r\n container.appendChild(topRow);\r\n\r\n // Title + subtitle (compact)\r\n const titleWrap = document.createElement(\"div\");\r\n titleWrap.style.cssText = \"display:flex;flex-direction:column;align-items:center;gap:5px;width:100%;\";\r\n\r\n const title = document.createElement(\"h2\");\r\n title.style.cssText = `\r\n color:${this.theme.text};font-size:${TYPE.heading}px;font-weight:700;\r\n margin:0;line-height:1.2;\r\n `;\r\n // W2: Use client brand name in title\r\n const brandName = this.sdkConfig?.brand_name;\r\n title.textContent = brandName\r\n ? `${brandName} Identity Verification`\r\n : \"Verify Your Identity\";\r\n titleWrap.appendChild(title);\r\n\r\n const desc = document.createElement(\"p\");\r\n desc.style.cssText = `\r\n color:${this.theme.textSecondary};font-size:13px;line-height:1.5;\r\n margin:0 auto;max-width:300px;text-align:center;\r\n `;\r\n desc.textContent = isLivenessOnly\r\n ? \"You'll just need camera access. This takes about 30 seconds.\"\r\n : isDocFlow\r\n ? \"You'll need your document and camera access. This takes about 2 minutes.\"\r\n : \"You'll need your ID number and camera access. This takes about 2 minutes.\";\r\n titleWrap.appendChild(desc);\r\n container.appendChild(titleWrap);\r\n\r\n // Steps preview — compact rows\r\n const steps = isLivenessOnly\r\n ? [\r\n { icon: \"🤳\", text: \"Face check\", sub: \"Quick selfie to confirm it's you\" },\r\n ]\r\n : isDocFlow\r\n ? [\r\n { icon: \"🪪\", text: \"Choose your document type\", sub: \"Passport, National ID, Driver License\" },\r\n { icon: \"📷\", text: \"Scan your document\", sub: \"Upload or capture a photo of your ID\" },\r\n { icon: \"🤳\", text: \"Face check\", sub: \"Quick selfie to confirm it's you\" },\r\n ]\r\n : [\r\n { icon: \"🆔\", text: \"Choose your ID type\", sub: \"NIN, BVN, Voter's Card and more\" },\r\n { icon: \"📝\", text: \"Enter your ID details\", sub: \"Exactly as shown on your ID\" },\r\n { icon: \"🤳\", text: \"Face check\", sub: \"Quick selfie to confirm it's you\" },\r\n ];\r\n\r\n const stepsWrap = document.createElement(\"div\");\r\n stepsWrap.style.cssText = `\r\n width:100%;display:flex;flex-direction:column;gap:0;\r\n border-radius:${RADIUS.md}px;overflow:hidden;\r\n border:1.5px solid ${this.theme.border};\r\n `;\r\n\r\n steps.forEach((step, i) => {\r\n const row = document.createElement(\"div\");\r\n row.style.cssText = `\r\n display:flex;align-items:center;gap:12px;\r\n padding:8px 14px;\r\n background:${this.theme.cardBg};\r\n ${i < steps.length - 1 ? `border-bottom:1px solid ${this.theme.border};` : \"\"}\r\n `;\r\n\r\n const iconEl = document.createElement(\"div\");\r\n iconEl.style.cssText = `\r\n width:28px;height:28px;border-radius:${RADIUS.sm}px;flex-shrink:0;\r\n display:flex;align-items:center;justify-content:center;\r\n font-size:13px;\r\n background:${this.theme.primary}12;\r\n border:1px solid ${this.theme.primary}20;\r\n `;\r\n iconEl.textContent = step.icon;\r\n\r\n const textWrap = document.createElement(\"div\");\r\n textWrap.style.cssText = \"display:flex;flex-direction:column;gap:1px;text-align:left;\";\r\n\r\n const textEl = document.createElement(\"span\");\r\n textEl.style.cssText = `color:${this.theme.text};font-size:12.5px;font-weight:600;`;\r\n textEl.textContent = step.text;\r\n\r\n const subEl = document.createElement(\"span\");\r\n subEl.style.cssText = `color:${this.theme.textMuted};font-size:10.5px;`;\r\n subEl.textContent = step.sub;\r\n\r\n textWrap.appendChild(textEl);\r\n textWrap.appendChild(subEl);\r\n row.appendChild(iconEl);\r\n row.appendChild(textWrap);\r\n stepsWrap.appendChild(row);\r\n });\r\n\r\n container.appendChild(stepsWrap);\r\n\r\n // CTA\r\n const btn = this.createPrimaryButton(\"Get Started →\");\r\n btn.style.cssText += \"margin-top:2px;\";\r\n btn.addEventListener(\"click\", () => {\r\n if (isLivenessOnly) {\r\n // Liveness-only has no channels at all, so renderCountrySelect's\r\n // single-country auto-skip (countries.length === 1) never fires for\r\n // it — going through \"country\" here would render an empty,\r\n // dead-end country-picker screen. Go straight to liveness instead.\r\n //\r\n // selectedCountry defaults to \"\" and is otherwise only ever set by\r\n // renderCountrySelect, which this mode never visits — renderLiveness\r\n // sends it as a required, non-blank `country` field, so leaving it\r\n // empty would fail create() validation before the scan even starts.\r\n // There's no real country to report here (no identity lookup runs\r\n // in this mode), so this is a neutral placeholder, not a claim\r\n // about the user's actual location.\r\n this.selectedCountry = this.selectedCountry || \"global\";\r\n this.showStep(\"liveness\");\r\n } else {\r\n this.showStep(\"country\");\r\n }\r\n });\r\n container.appendChild(btn);\r\n\r\n // Plain-language line on what the camera/photo is for and what happens\r\n // to it — shown before the \"Get Started\" tap that leads to the first\r\n // camera permission prompt, so the browser's own prompt isn't the only\r\n // context the user gets for why a camera is being requested.\r\n const trust = document.createElement(\"div\");\r\n trust.style.cssText = `\r\n display:flex;align-items:flex-start;gap:6px;text-align:left;\r\n color:${this.theme.textMuted};font-size:10.5px;line-height:1.5;\r\n `;\r\n trust.innerHTML = `<span style=\"flex-shrink:0;\">🔒</span><span>Your photo and camera scan are used only to verify it's really you, and are kept encrypted.</span>`;\r\n container.appendChild(trust);\r\n }\r\n\r\n // ── Country Select ──────────────────────────────────────────────\r\n\r\n private renderCountrySelect(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;gap:14px;\";\r\n\r\n const channels = this.sdkConfig?.channels || {};\r\n const countries = Object.keys(channels);\r\n\r\n // Auto-skip country selection if only one country available\r\n if (countries.length === 1) {\r\n this.selectedCountry = countries[0];\r\n this.showStep(\"id_type\");\r\n return;\r\n }\r\n\r\n const title = this.createStepTitle(\"Select your country\");\r\n container.appendChild(title);\r\n\r\n const subtitle = document.createElement(\"div\");\r\n subtitle.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin-top:-8px;`;\r\n subtitle.textContent = \"Choose the country that issued your ID\";\r\n container.appendChild(subtitle);\r\n\r\n for (const country of countries) {\r\n const card = this.createOptionCard(\r\n COUNTRY_LABELS[country] || country,\r\n `${channels[country].length} ID type${channels[country].length > 1 ? \"s\" : \"\"} available`,\r\n () => {\r\n this.selectedCountry = country;\r\n this.showStep(\"id_type\");\r\n }\r\n );\r\n container.appendChild(card);\r\n }\r\n }\r\n\r\n // ── ID Type Select ──────────────────────────────────────────────\r\n\r\n private renderIdTypeSelect(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;gap:14px;\";\r\n\r\n const globalDocFlow = this.isDocumentFlow();\r\n\r\n const title = this.createStepTitle(globalDocFlow ? \"Select document type\" : \"Select ID type\");\r\n container.appendChild(title);\r\n\r\n const subtitle = document.createElement(\"div\");\r\n subtitle.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin-top:-8px;`;\r\n subtitle.textContent = globalDocFlow\r\n ? \"Choose the document you want to scan\"\r\n : \"Choose the ID you want to verify\";\r\n container.appendChild(subtitle);\r\n\r\n const channels = this.sdkConfig?.channels || {};\r\n const idTypes = channels[this.selectedCountry] || [];\r\n\r\n for (const idType of idTypes) {\r\n const typeName = typeof idType === \"string\" ? idType : idType.name;\r\n // Use code (canonical) for API calls, fallback to name for backward compatibility\r\n const typeCode = typeof idType === \"string\" ? idType : (idType.code || idType.name);\r\n // Detect per-channel: does THIS specific channel have upload fields?\r\n const channelFields: any[] = typeof idType !== \"string\" ? (idType.fields || []) : [];\r\n const isThisDocFlow = channelFields.some((f: any) => isUploadFieldType(f.type)) || globalDocFlow;\r\n const info = resolveIdTypeInfo(typeName, isThisDocFlow);\r\n\r\n // Prefer the backend-provided back-side flag; fall back to local heuristics only when absent.\r\n const requiresBackFromBackend =\r\n typeof idType !== \"string\" ? (idType as SDKChannel).requires_back_side : undefined;\r\n const requiresBack = requiresBackFromBackend ?? info.requiresBack;\r\n\r\n // Add back side indicator to subtitle if needed (only when strictly\r\n // required — \"optional\" already reads correctly from info.desc, e.g.\r\n // NIN's \"back optional\", and must not be overwritten with this warning).\r\n let subtitle = info.desc;\r\n if (requiresBack === true && isThisDocFlow) {\r\n subtitle += \" ⚠️ Both sides required\";\r\n }\r\n\r\n // Clean display name — strip \"with face\", \"(NIN)\", \"(BVN)\" from user-visible label\r\n const displayName = typeName\r\n .replace(/\\s*with\\s+face\\s*/gi, ' ')\r\n .replace(/\\s*\\(NIN\\)\\s*/gi, ' ')\r\n .replace(/\\s*\\(BVN\\)\\s*/gi, ' ')\r\n .replace(/\\s{2,}/g, ' ')\r\n .trim();\r\n\r\n const card = this.createOptionCard(\r\n `${info.icon} ${displayName}`,\r\n subtitle,\r\n () => {\r\n const idTypeChanged = this.selectedIdType !== typeCode;\r\n this.selectedIdType = typeCode; // Store canonical code for API\r\n this.selectedIdTypeName = typeName; // Keep display name for UI\r\n this.selectedRequiresBack = requiresBack;\r\n // Always reset first to avoid stale state when user goes back and changes selection\r\n this.selectedChannelId = 0;\r\n this.selectedChannelFields = [];\r\n this.collectedFields = {};\r\n // Only discard an in-flight liveness/doc capture if the user actually changed ID type\r\n if (idTypeChanged) {\r\n this.livenessEntryId = null;\r\n this.documentBlob = null;\r\n this.documentBackBlob = null;\r\n }\r\n if (typeof idType !== \"string\") {\r\n this.selectedChannelId = idType.id;\r\n this.selectedChannelFields = idType.fields || []; // guard null/undefined from backend\r\n }\r\n // Route: use explicit verification_type when set (more reliable than inspecting all channels)\r\n // Fallback to per-channel upload field check for mixed / unconfigured setups\r\n const hasUpload = (this.selectedChannelFields).some((f: any) => isUploadFieldType(f.type));\r\n const vType = this.sdkConfig?.verification_type;\r\n const vTypes: string[] = vType ? (Array.isArray(vType) ? vType : [vType]) : [];\r\n const isDocChannel = hasUpload || (vTypes.length > 0 && vTypes.includes(\"document_verification\"));\r\n this.showStep(isDocChannel ? \"document_capture\" : \"id_input\");\r\n }\r\n );\r\n container.appendChild(card);\r\n }\r\n\r\n }\r\n\r\n // ── ID Input (data verification — dynamic fields) ─────────────\r\n\r\n private renderIdInput(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;gap:14px;\";\r\n\r\n const dataFields = this.selectedChannelFields.filter((f) => f.type !== \"upload\");\r\n const info = resolveIdTypeInfo(this.selectedIdTypeName || this.selectedIdType, false);\r\n const cleanStepTitle = (this.selectedIdTypeName || this.selectedIdType)\r\n .replace(/\\s*with\\s+face\\s*/gi, ' ')\r\n .replace(/\\s*\\(NIN\\)\\s*/gi, ' ')\r\n .replace(/\\s*\\(BVN\\)\\s*/gi, ' ')\r\n .replace(/\\s{2,}/g, ' ')\r\n .trim();\r\n\r\n const title = this.createStepTitle(`${info.icon} ${cleanStepTitle}`);\r\n container.appendChild(title);\r\n\r\n const subtitle = document.createElement(\"div\");\r\n subtitle.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin-top:-8px;`;\r\n subtitle.textContent = dataFields.length > 0\r\n ? `Enter your ${this.selectedIdTypeName || this.selectedIdType} details exactly as they appear on your ID.`\r\n : \"Fill in the fields below to continue.\";\r\n container.appendChild(subtitle);\r\n\r\n // Edge case: no data fields configured — show fallback and allow submission\r\n if (dataFields.length === 0) {\r\n const empty = document.createElement(\"div\");\r\n empty.style.cssText = `\r\n padding:16px;border-radius:10px;\r\n background:${this.theme.cardBg};border:1px solid ${this.theme.border};\r\n color:${this.theme.textSecondary};font-size:13px;text-align:center;\r\n `;\r\n empty.textContent = \"No additional details required. Click below to continue.\";\r\n container.appendChild(empty);\r\n const autoBtn = this.createPrimaryButton(\"Continue\");\r\n autoBtn.addEventListener(\"click\", () => this.showStep(\"liveness\"));\r\n container.appendChild(autoBtn);\r\n return;\r\n }\r\n\r\n // ── Field format rules ────────────────────────────────────────────────\r\n // Keyed by uppercased label substring → { minLen, maxLen, numeric, pattern, hint }\r\n interface FieldRule {\r\n minLen?: number;\r\n maxLen?: number;\r\n numeric?: boolean; // only digits allowed\r\n alphanumeric?: boolean; // letters + digits only\r\n pattern?: RegExp;\r\n hint: string;\r\n placeholder?: string; // overrides the default \"Enter {label}\" placeholder\r\n }\r\n const _FIELD_RULES: Array<{ match: string; rule: FieldRule }> = [\r\n { match: \"BVN\", rule: { minLen: 11, maxLen: 11, numeric: true, hint: \"BVN must be exactly 11 digits\" } },\r\n { match: \"NIN\", rule: { minLen: 11, maxLen: 11, numeric: true, hint: \"NIN must be exactly 11 digits\" } },\r\n { match: \"NATIONAL IDENTITY\", rule: { minLen: 11, maxLen: 11, numeric: true, hint: \"NIN must be exactly 11 digits\" } },\r\n { match: \"PASSPORT\", rule: { minLen: 6, maxLen: 20, alphanumeric: true, hint: \"Passport number must be 6–20 alphanumeric characters\" } },\r\n { match: \"DRIVER\", rule: { minLen: 3, maxLen: 30, alphanumeric: true, hint: \"Licence number must be 3–30 alphanumeric characters\" } },\r\n { match: \"VOTER\", rule: { minLen: 6, maxLen: 30, alphanumeric: true, hint: \"Voter ID must be 6–30 alphanumeric characters\" } },\r\n { match: \"GHANA\", rule: { minLen: 8, maxLen: 20, alphanumeric: true, hint: \"Ghana Card number must be 8–20 alphanumeric characters\" } },\r\n { match: \"SSNIT\", rule: { minLen: 7, maxLen: 15, alphanumeric: true, hint: \"SSNIT number must be 7–15 alphanumeric characters\" } },\r\n { match: \"TIN\", rule: { minLen: 8, maxLen: 20, alphanumeric: true, hint: \"TIN must be 8–20 characters\" } },\r\n { match: \"KRA\", rule: { minLen: 10, maxLen: 12, alphanumeric: true, hint: \"KRA PIN must be 10–12 characters\" } },\r\n // Backend accepts DD-MM-YYYY, DD/MM/YYYY, YYYY-MM-DD or YYYY/MM/DD\r\n // (see _normalize_date_str in ivs_run_check.py) — DD-MM-YYYY shown here\r\n // since it matches the date format printed on NIN/BVN records.\r\n { match: \"DATE OF BIRTH\", rule: { pattern: /^\\d{2}[-/]\\d{2}[-/]\\d{4}$|^\\d{4}[-/]\\d{2}[-/]\\d{2}$/, hint: \"Format: DD-MM-YYYY (e.g. 15-06-1996)\", placeholder: \"DD-MM-YYYY\" } },\r\n { match: \"DOB\", rule: { pattern: /^\\d{2}[-/]\\d{2}[-/]\\d{4}$|^\\d{4}[-/]\\d{2}[-/]\\d{2}$/, hint: \"Format: DD-MM-YYYY (e.g. 15-06-1996)\", placeholder: \"DD-MM-YYYY\" } },\r\n ];\r\n\r\n function getFieldRule(label: string): FieldRule | null {\r\n const upper = label.toUpperCase();\r\n for (const entry of _FIELD_RULES) {\r\n if (upper.includes(entry.match)) return entry.rule;\r\n }\r\n return null;\r\n }\r\n\r\n function validateFieldValue(label: string, value: string): string | null {\r\n const rule = getFieldRule(label);\r\n if (!rule) return null; // no rule = no validation\r\n const v = value.trim();\r\n if (rule.numeric && !/^\\d+$/.test(v)) return `${label} must contain digits only`;\r\n if (rule.alphanumeric && !/^[A-Za-z0-9]+$/.test(v)) return `${label} must be alphanumeric (letters and digits only)`;\r\n if (rule.pattern && !rule.pattern.test(v)) return rule.hint;\r\n if (rule.minLen && v.length < rule.minLen) return rule.hint;\r\n if (rule.maxLen && v.length > rule.maxLen) return rule.hint;\r\n return null;\r\n }\r\n\r\n // Track input elements for validation\r\n const inputEls: { field: any; el: HTMLInputElement | HTMLSelectElement }[] = [];\r\n\r\n for (const field of dataFields) {\r\n // Send the raw label as the payload key — the backend's\r\n // _SDK_FIELD_KEY_MAP looks up the exact label text (e.g. \"National ID\",\r\n // \"CAC Number\") to remap it to the canonical IVS key. Pre-normalizing\r\n // it here (as this used to do) produced keys like \"national_id\" that\r\n // don't match the map's literal-label entries and silently fall\r\n // through to the wrong key for several identity types.\r\n const fieldKey = field.label;\r\n\r\n const fieldWrap = document.createElement(\"div\");\r\n fieldWrap.style.cssText = \"display:flex;flex-direction:column;gap:6px;\";\r\n\r\n const labelId = `sc-field-label-${fieldKey.replace(/\\s+/g, '-').toLowerCase()}`;\r\n const label = document.createElement(\"label\");\r\n label.id = labelId;\r\n label.htmlFor = `sc-field-input-${fieldKey.replace(/\\s+/g, '-').toLowerCase()}`;\r\n label.style.cssText = `color:${this.theme.textMuted};font-size:10px;font-weight:700;letter-spacing:0.6px;text-transform:uppercase;`;\r\n label.textContent = field.label;\r\n fieldWrap.appendChild(label);\r\n\r\n if (field.type === \"dropdown\" || field.type === \"select\") {\r\n // Dropdown field\r\n const select = document.createElement(\"select\");\r\n select.style.cssText = `\r\n width:100%;padding:13px 16px;border-radius:${RADIUS.md}px;\r\n font-size:15px;\r\n background:${this.theme.inputBg};\r\n color:${this.theme.text};\r\n border:2px solid ${this.theme.border};\r\n outline:none;box-sizing:border-box;\r\n cursor:pointer;transition:border-color 0.2s ease;\r\n `;\r\n const placeholder = document.createElement(\"option\");\r\n placeholder.value = \"\";\r\n placeholder.textContent = `Select ${field.label}`;\r\n placeholder.disabled = true;\r\n placeholder.selected = true;\r\n select.appendChild(placeholder);\r\n\r\n for (const opt of field.options || []) {\r\n const option = document.createElement(\"option\");\r\n option.value = opt;\r\n option.textContent = opt;\r\n select.appendChild(option);\r\n }\r\n\r\n select.addEventListener(\"focus\", () => { select.style.borderColor = this.theme.primary; });\r\n select.addEventListener(\"blur\", () => { select.style.borderColor = this.theme.border; });\r\n select.addEventListener(\"change\", () => {\r\n this.collectedFields[fieldKey] = select.value;\r\n updateSubmitState();\r\n });\r\n fieldWrap.appendChild(select);\r\n inputEls.push({ field, el: select });\r\n } else if (field.type === \"image\" || field.type === \"file\") {\r\n // File upload field — converts to base64 for API submission\r\n const fileInput = document.createElement(\"input\");\r\n fileInput.type = \"file\";\r\n fileInput.accept = \"image/*\";\r\n fileInput.style.cssText = `\r\n width:100%;padding:12px 16px;border-radius:${RADIUS.md}px;\r\n font-size:14px;font-weight:500;\r\n background:${this.theme.inputBg};\r\n color:${this.theme.text};\r\n border:2px dashed ${this.theme.border};\r\n outline:none;transition:border-color 0.2s ease;\r\n box-sizing:border-box;cursor:pointer;\r\n `;\r\n fileInput.addEventListener(\"focus\", () => {\r\n fileInput.style.borderColor = this.theme.primary;\r\n });\r\n fileInput.addEventListener(\"blur\", () => {\r\n fileInput.style.borderColor = this.theme.border;\r\n });\r\n fileInput.addEventListener(\"change\", () => {\r\n const file = fileInput.files?.[0];\r\n if (file) {\r\n const reader = new FileReader();\r\n reader.onload = () => {\r\n const base64 = (reader.result as string).split(\",\")[1] || \"\";\r\n this.collectedFields[fieldKey] = base64;\r\n updateSubmitState();\r\n };\r\n reader.readAsDataURL(file);\r\n }\r\n });\r\n fieldWrap.appendChild(fileInput);\r\n inputEls.push({ field, el: fileInput as any });\r\n } else {\r\n // Text input field\r\n const inputId = `sc-field-input-${fieldKey.replace(/\\s+/g, '-').toLowerCase()}`;\r\n const hintId = `sc-field-hint-${fieldKey.replace(/\\s+/g, '-').toLowerCase()}`;\r\n const rule = getFieldRule(field.label);\r\n\r\n const input = document.createElement(\"input\");\r\n input.type = \"text\";\r\n input.id = inputId;\r\n input.setAttribute(\"aria-labelledby\", labelId);\r\n input.setAttribute(\"aria-describedby\", hintId);\r\n input.placeholder = rule?.placeholder || `Enter ${field.label}`;\r\n input.maxLength = rule?.maxLen ? rule.maxLen + 2 : 50;\r\n if (rule?.numeric) input.inputMode = \"numeric\";\r\n input.style.cssText = `\r\n width:100%;padding:14px 16px;border-radius:${RADIUS.md}px;\r\n font-size:16px;font-weight:500;\r\n background:${this.theme.inputBg};\r\n color:${this.theme.text};\r\n border:2px solid ${this.theme.border};\r\n outline:none;transition:border-color 0.2s ease;\r\n box-sizing:border-box;\r\n letter-spacing:0.5px;\r\n `;\r\n\r\n // Inline hint/error element\r\n const hintEl = document.createElement(\"div\");\r\n hintEl.id = hintId;\r\n hintEl.setAttribute(\"aria-live\", \"polite\");\r\n hintEl.style.cssText = `font-size:11px;min-height:14px;margin-top:-2px;`;\r\n if (rule) {\r\n hintEl.style.color = this.theme.textMuted;\r\n hintEl.textContent = rule.hint;\r\n }\r\n\r\n input.addEventListener(\"focus\", () => {\r\n input.style.borderColor = this.theme.primary;\r\n });\r\n input.addEventListener(\"blur\", () => {\r\n const v = input.value.trim();\r\n if (v) {\r\n const err = validateFieldValue(field.label, v);\r\n if (err) {\r\n input.style.borderColor = this.theme.error;\r\n hintEl.style.color = this.theme.error;\r\n hintEl.textContent = err;\r\n input.setAttribute(\"aria-invalid\", \"true\");\r\n } else {\r\n input.style.borderColor = this.theme.success || this.theme.primary;\r\n hintEl.style.color = this.theme.textMuted;\r\n hintEl.textContent = rule?.hint || \"\";\r\n input.setAttribute(\"aria-invalid\", \"false\");\r\n }\r\n } else {\r\n input.style.borderColor = this.theme.border;\r\n }\r\n });\r\n input.addEventListener(\"input\", () => {\r\n // Reset error styling while typing\r\n input.style.borderColor = this.theme.primary;\r\n hintEl.style.color = this.theme.textMuted;\r\n hintEl.textContent = rule?.hint || \"\";\r\n input.removeAttribute(\"aria-invalid\");\r\n this.collectedFields[fieldKey] = input.value.trim();\r\n updateSubmitState();\r\n });\r\n fieldWrap.appendChild(input);\r\n fieldWrap.appendChild(hintEl);\r\n inputEls.push({ field, el: input });\r\n }\r\n container.appendChild(fieldWrap);\r\n }\r\n\r\n // Error area\r\n const errorEl = document.createElement(\"div\");\r\n errorEl.id = \"sc-id-error\";\r\n errorEl.style.cssText = `\r\n color:${this.theme.error};font-size:13px;display:none;\r\n padding:8px 12px;border-radius:${RADIUS.sm}px;background:${this.theme.errorBg};\r\n `;\r\n container.appendChild(errorEl);\r\n\r\n // Submit\r\n const submitBtn = this.createPrimaryButton(\"Verify & Continue\");\r\n submitBtn.disabled = true;\r\n submitBtn.style.opacity = \"0.5\";\r\n\r\n const updateSubmitState = () => {\r\n // All inputs must have a value AND pass format validation\r\n const allFilled = inputEls.every(({ el }) => el.value.trim().length > 0);\r\n const allValid = inputEls.every(({ field, el }) => {\r\n if (el.tagName === \"SELECT\") return el.value.trim().length > 0;\r\n return !validateFieldValue(field.label, el.value.trim());\r\n });\r\n const ok = allFilled && allValid;\r\n submitBtn.disabled = !ok;\r\n submitBtn.style.opacity = ok ? \"1\" : \"0.5\";\r\n };\r\n\r\n submitBtn.addEventListener(\"click\", async () => {\r\n submitBtn.disabled = true;\r\n submitBtn.innerHTML = `<span style=\"display:inline-flex;align-items:center;justify-content:center;gap:8px;\">${renderInlineSpinner(\"#fff\", 13)}Verifying...</span>`;\r\n errorEl.style.display = \"none\";\r\n\r\n try {\r\n this.verificationResult = await this.sdk.onboarding.verify({\r\n identity_type_id: this.selectedChannelId,\r\n fields: { ...this.collectedFields },\r\n });\r\n\r\n if (this.verificationResult.status === \"success\") {\r\n // Save identifier and identity_check_id for liveness step\r\n const fieldValues = Object.values(this.collectedFields);\r\n this.idNumber = fieldValues[0] || \"\";\r\n this.identityCheckId = (this.verificationResult as any).data?.identity_check_id || null;\r\n\r\n // W3: Store name + gender from IVS result for confirmation screen\r\n const d = (this.verificationResult as any).data || {};\r\n const nd = d.normalized_data || d.data || d;\r\n this._ivsName = [nd.first_name || nd.firstname || \"\", nd.last_name || nd.lastname || nd.surname || \"\"]\r\n .map(s => String(s || \"\").trim()).filter(Boolean).join(\" \");\r\n this._ivsGender = nd.gender || \"\";\r\n\r\n // W4: If IVS returned no name, there is nothing for the user to confirm —\r\n // auto-proceed straight to Stage 2 (liveness) instead of showing a\r\n // confirmation screen with no identity details to check.\r\n if (!this._ivsName) {\r\n this.showStep(\"liveness\");\r\n return;\r\n }\r\n\r\n // Route to confirmation screen — user must confirm before liveness\r\n this.showStep(\"confirm_identity\");\r\n } else {\r\n errorEl.textContent = _sanitizeUserMessage(this.verificationResult.message)\r\n || \"We could not verify your details. Please check and try again.\";\r\n errorEl.style.display = \"block\";\r\n submitBtn.textContent = \"Verify & Continue\";\r\n submitBtn.disabled = false;\r\n submitBtn.style.opacity = \"1\";\r\n }\r\n } catch (err: any) {\r\n // Show a single plain-language error — never raw field:message format\r\n const fieldErrors = err.data?.errors;\r\n if (Array.isArray(fieldErrors) && fieldErrors.length > 0) {\r\n // Pick the first meaningful error message — strip field prefix\r\n const firstMsg = fieldErrors[0]?.message || fieldErrors[0]?.detail || \"\";\r\n errorEl.textContent = _sanitizeUserMessage(firstMsg)\r\n || \"Please check your details and try again.\";\r\n } else if (err.errorCode === \"VERIFICATION_FAILED\") {\r\n // Prefer the backend's actual reason (e.g. \"BVN check failed: name mismatch\")\r\n // over a generic message — it tells the user what to actually fix.\r\n errorEl.textContent = _sanitizeUserMessage(err.message)\r\n || \"We could not verify those details. Please check your ID number and try again.\";\r\n } else if (err.errorCode === \"CHANNEL_NOT_CONFIGURED\") {\r\n errorEl.textContent = \"This ID type is not currently available. Please choose a different option.\";\r\n } else if (err.errorCode === \"INSUFFICIENT_BALANCE\") {\r\n errorEl.textContent = \"Verification is temporarily unavailable. Please contact support.\";\r\n } else {\r\n errorEl.textContent = _sanitizeUserMessage(err.message)\r\n || \"Something went wrong. Please try again.\";\r\n }\r\n errorEl.style.display = \"block\";\r\n submitBtn.textContent = \"Verify & Continue\";\r\n submitBtn.disabled = false;\r\n submitBtn.style.opacity = \"1\";\r\n }\r\n });\r\n container.appendChild(submitBtn);\r\n\r\n\r\n // Focus first input\r\n const firstInput = inputEls[0]?.el;\r\n if (firstInput && firstInput instanceof HTMLInputElement) {\r\n setTimeout(() => firstInput.focus(), 350);\r\n }\r\n }\r\n\r\n // ── Document Capture ────────────────────────────────────────────\r\n\r\n \r\n private renderDocumentCapture(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;gap:14px;\";\r\n\r\n // Strip \"with face\", \"(NIN)\", \"(BVN)\" noise from the user-visible title\r\n const rawName = this.selectedIdTypeName || this.selectedIdType || \"your document\";\r\n const cleanDocTitle = rawName\r\n .replace(/\\s*with\\s+face\\s*/gi, ' ')\r\n .replace(/\\s*\\(NIN\\)\\s*/gi, ' ')\r\n .replace(/\\s*\\(BVN\\)\\s*/gi, ' ')\r\n .replace(/\\s{2,}/g, ' ')\r\n .trim();\r\n\r\n const title = this.createStepTitle(`Capture ${cleanDocTitle}`);\r\n container.appendChild(title);\r\n\r\n const subtitle = document.createElement(\"div\");\r\n subtitle.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin-top:-8px;`;\r\n subtitle.textContent = \"Upload or capture your document photo. Ensure it's clear and readable.\";\r\n container.appendChild(subtitle);\r\n\r\n const captureContainer = document.createElement(\"div\");\r\n captureContainer.style.cssText = `\r\n width: 100%;\r\n max-width: 400px;\r\n margin: 0 auto;\r\n position: relative;\r\n overflow: hidden;\r\n border-radius: 12px;\r\n background: ${this.theme.cardBg};\r\n border: 2px solid ${this.theme.border};\r\n `;\r\n container.appendChild(captureContainer);\r\n\r\n // Use the new DocumentCapture component with front/back support\r\n this.docCapture = new DocumentCapture();\r\n this.docCapture\r\n .capture(\r\n captureContainer,\r\n this.theme,\r\n this.selectedIdTypeName || this.selectedIdType,\r\n this.selectedRequiresBack\r\n )\r\n .then(async (result: DocumentCaptureResult) => {\r\n await this.processDocumentCaptureResult(result, captureContainer, container);\r\n })\r\n .catch((err: any) => {\r\n console.error(\"Document capture failed:\", err);\r\n this.showErrorStep(err.message || \"Document capture failed. Please try again.\");\r\n });\r\n }\r\n\r\n // ── W3: Identity Confirmation (data verification) ───────────────\r\n\r\n private renderConfirmIdentity(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:16px;padding:8px 0;\";\r\n\r\n // W14: Check retry limit before showing screen\r\n if (this._confirmRetries >= SmartComplyFlow.MAX_RETRIES) {\r\n this._renderRetryLimitReached(container);\r\n return;\r\n }\r\n\r\n // W13: Pre-warm camera silently while user reads this screen\r\n this._prewarmCamera();\r\n\r\n const iconWrap = document.createElement(\"div\");\r\n iconWrap.style.cssText = `width:64px;height:64px;border-radius:50%;background:${this.theme.primary}15;border:2px solid ${this.theme.primary}30;display:flex;align-items:center;justify-content:center;color:${this.theme.primary};`;\r\n iconWrap.innerHTML = icon(\"shield\", 28);\r\n container.appendChild(iconWrap);\r\n\r\n const title = document.createElement(\"h2\");\r\n title.style.cssText = `color:${this.theme.text};font-size:${TYPE.heading}px;font-weight:700;margin:0;`;\r\n title.textContent = this._ivsName ? `Is this you?` : \"Identity Confirmed\";\r\n container.appendChild(title);\r\n\r\n if (this._ivsName) {\r\n // Profile card\r\n const card = document.createElement(\"div\");\r\n card.style.cssText = `width:100%;padding:16px;border-radius:14px;background:${this.theme.cardBg};border:1.5px solid ${this.theme.border};text-align:left;display:flex;flex-direction:column;gap:10px;`;\r\n\r\n const rows: { label: string; value: string }[] = [\r\n { label: \"Name\", value: this._ivsName },\r\n ];\r\n if (this._ivsGender) {\r\n const gLabel = this._ivsGender.toLowerCase();\r\n rows.push({ label: \"Gender\", value: gLabel === \"m\" || gLabel === \"male\" || gLabel === \"1\" ? \"Male\" : gLabel === \"f\" || gLabel === \"female\" || gLabel === \"2\" ? \"Female\" : this._ivsGender });\r\n }\r\n rows.push({ label: \"ID Type\", value: _formatDocType(this.selectedIdType) || this.selectedIdTypeName || this.selectedIdType });\r\n\r\n rows.forEach(({ label, value }) => {\r\n const row = document.createElement(\"div\");\r\n row.style.cssText = \"display:flex;justify-content:space-between;align-items:center;\";\r\n const lEl = document.createElement(\"span\");\r\n lEl.style.cssText = `color:${this.theme.textMuted};font-size:12px;font-weight:500;`;\r\n lEl.textContent = label;\r\n const vEl = document.createElement(\"span\");\r\n vEl.style.cssText = `color:${this.theme.text};font-size:13px;font-weight:600;max-width:60%;text-align:right;`;\r\n vEl.textContent = value;\r\n row.appendChild(lEl);\r\n row.appendChild(vEl);\r\n card.appendChild(row);\r\n });\r\n container.appendChild(card);\r\n } else {\r\n const sub = document.createElement(\"p\");\r\n sub.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin:0;max-width:280px;line-height:1.6;`;\r\n sub.textContent = \"Your details have been confirmed. Please continue to the face check.\";\r\n container.appendChild(sub);\r\n }\r\n\r\n const yesBtn = this.createPrimaryButton(\"Yes, that's me — continue\");\r\n this._onceClick(yesBtn, () => {\r\n // B5: Reset retry counter on successful confirmation\r\n this._confirmRetries = 0;\r\n this.showStep(\"liveness\");\r\n });\r\n container.appendChild(yesBtn);\r\n\r\n const noBtn = this.createSecondaryButton(\"No, use a different ID\");\r\n this._onceClick(noBtn, () => {\r\n this._confirmRetries++;\r\n this._ivsName = \"\";\r\n this._ivsGender = \"\";\r\n this.identityCheckId = null;\r\n this.verificationResult = null;\r\n this.showStep(\"id_input\");\r\n });\r\n container.appendChild(noBtn);\r\n }\r\n\r\n // ── W4: Document Confirmation (document verification) ────────────\r\n\r\n private renderDocumentConfirm(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:14px;padding:8px 0;\";\r\n\r\n // W14: Check retry limit\r\n if (this._confirmRetries >= SmartComplyFlow.MAX_RETRIES) {\r\n this._renderRetryLimitReached(container);\r\n return;\r\n }\r\n\r\n // OCR reported \"done\" but extracted nothing usable — do not let the user\r\n // click through to liveness with no verified identity data. This is the\r\n // ocr_status===\"done\"-with-empty-fields sibling of the poll timeout case\r\n // (which _renderOcrTimeout already catches in renderOcrGate).\r\n if (!this._ocrName && !this._ocrDocNumber && !this._ocrExpiry) {\r\n this._renderOcrTimeout(container);\r\n return;\r\n }\r\n\r\n // W13: Pre-warm camera while user reads — but only if the document photo\r\n // itself came from the camera. Pre-warming here when the user uploaded\r\n // from gallery means requesting camera access before they've touched\r\n // their camera at all this session, which reads as an unexplained/\r\n // unexpected prompt rather than a seamless continuation.\r\n if (this._documentViaCamera) this._prewarmCamera();\r\n\r\n // Step badge — pairs with DocumentCapture.showPreview's \"Step 1 of 2\"\r\n // badge shown right after capture, so this doesn't read as unexplained\r\n // repetition: that screen checked photo clarity, this one checks the\r\n // OCR-extracted data.\r\n const stepBadge = document.createElement(\"div\");\r\n stepBadge.style.cssText = `\r\n display:inline-flex;align-items:center;gap:5px;\r\n padding:3px 11px;border-radius:${RADIUS.pill}px;\r\n font-size:10.5px;font-weight:600;letter-spacing:0.2px;\r\n color:${this.theme.primary};background:${this.theme.primary}15;border:1px solid ${this.theme.primary}30;\r\n `;\r\n stepBadge.textContent = \"STEP 2 OF 2 · CHECK WHAT WE READ\";\r\n container.appendChild(stepBadge);\r\n\r\n const iconWrap = document.createElement(\"div\");\r\n iconWrap.style.cssText = `width:64px;height:64px;border-radius:50%;background:${this.theme.primary}15;border:2px solid ${this.theme.primary}30;display:flex;align-items:center;justify-content:center;color:${this.theme.primary};`;\r\n iconWrap.innerHTML = icon(\"document\", 28);\r\n container.appendChild(iconWrap);\r\n\r\n const title = document.createElement(\"h2\");\r\n title.style.cssText = `color:${this.theme.text};font-size:${TYPE.heading}px;font-weight:700;margin:0;`;\r\n title.textContent = \"Are these your details?\";\r\n container.appendChild(title);\r\n\r\n const sub = document.createElement(\"p\");\r\n sub.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin:0;max-width:280px;line-height:1.5;`;\r\n sub.textContent = \"We read the following from your document. Please confirm they are correct before continuing.\";\r\n container.appendChild(sub);\r\n\r\n // Document face thumbnail if available\r\n if (this._ocrFaceImageUrl) {\r\n const faceWrap = document.createElement(\"div\");\r\n faceWrap.style.cssText = `width:80px;height:80px;border-radius:50%;overflow:hidden;border:3px solid ${this.theme.primary};flex-shrink:0;margin:0 auto;`;\r\n const faceImg = document.createElement(\"img\");\r\n faceImg.src = this._ocrFaceImageUrl;\r\n faceImg.alt = \"Photo from your document\";\r\n faceImg.style.cssText = \"width:100%;height:100%;object-fit:cover;\";\r\n faceWrap.appendChild(faceImg);\r\n container.appendChild(faceWrap);\r\n }\r\n\r\n // Expiry soon warning\r\n if (this._ocrExpirySoon && !this._ocrIsExpired) {\r\n const warn = document.createElement(\"div\");\r\n warn.style.cssText = `width:100%;padding:10px 14px;border-radius:10px;background:${this.theme.warning}18;border:1px solid ${this.theme.warning}40;color:${this.theme.warning};font-size:12px;text-align:left;line-height:1.5;`;\r\n warn.textContent = \"⚠️ Your document expires soon. Some services may not accept it, but you can still continue.\";\r\n container.appendChild(warn);\r\n }\r\n\r\n // Details card — show whatever OCR returned, never block on missing fields\r\n const card = document.createElement(\"div\");\r\n card.style.cssText = `width:100%;padding:14px 16px;border-radius:14px;background:${this.theme.cardBg};border:1.5px solid ${this.theme.border};text-align:left;display:flex;flex-direction:column;gap:10px;`;\r\n\r\n const docRows: { label: string; value: string }[] = [];\r\n if (this._ocrName) docRows.push({ label: \"Name\", value: this._ocrName });\r\n if (this._ocrDocNumber) docRows.push({ label: \"Document No\", value: this._ocrDocNumber });\r\n if (this._ocrExpiry) docRows.push({ label: \"Expires\", value: this._ocrExpiry });\r\n docRows.push({ label: \"Document Type\", value: _formatDocType(this.selectedIdType) || this.selectedIdTypeName });\r\n\r\n if (docRows.length === 0) {\r\n const fallback = document.createElement(\"div\");\r\n fallback.style.cssText = `color:${this.theme.textSecondary};font-size:12px;`;\r\n fallback.textContent = \"Document scanned successfully.\";\r\n card.appendChild(fallback);\r\n } else {\r\n docRows.forEach(({ label, value }) => {\r\n if (!value) return;\r\n const row = document.createElement(\"div\");\r\n row.style.cssText = \"display:flex;justify-content:space-between;align-items:center;\";\r\n const lEl = document.createElement(\"span\");\r\n lEl.style.cssText = `color:${this.theme.textMuted};font-size:12px;font-weight:500;`;\r\n lEl.textContent = label;\r\n const vEl = document.createElement(\"span\");\r\n vEl.style.cssText = `color:${this.theme.text};font-size:13px;font-weight:600;max-width:60%;text-align:right;`;\r\n vEl.textContent = value;\r\n row.appendChild(lEl);\r\n row.appendChild(vEl);\r\n card.appendChild(row);\r\n });\r\n }\r\n container.appendChild(card);\r\n\r\n const yesBtn = this.createPrimaryButton(\"Yes, continue\");\r\n this._onceClick(yesBtn, () => {\r\n // B5: Reset retry counter on successful confirmation\r\n this._confirmRetries = 0;\r\n this.showStep(\"liveness\");\r\n });\r\n container.appendChild(yesBtn);\r\n\r\n const noBtn = this.createSecondaryButton(\"No, retake document\");\r\n this._onceClick(noBtn, () => {\r\n // Destroy the old DocumentCapture instance before replacing it —\r\n // matches the header back-button handler for this same step (see\r\n // backTargets.document_confirm) so retaking via either path releases\r\n // any still-open camera stream the same way, instead of silently\r\n // overwriting this.docCapture without cleanup.\r\n this.docCapture?.destroy();\r\n this._confirmRetries++;\r\n this._ocrName = \"\"; this._ocrDocNumber = \"\"; this._ocrExpiry = \"\";\r\n this._ocrFaceImageUrl = \"\"; this._ocrIsExpired = false; this._ocrExpirySoon = false;\r\n this.livenessEntryId = null;\r\n this.documentBlob = null; this.documentBackBlob = null;\r\n this.showStep(\"document_capture\");\r\n });\r\n container.appendChild(noBtn);\r\n }\r\n\r\n // ── W6+W7+W8: OCR Gate (document verification) ───────────────────\r\n\r\n private renderOcrGate(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;gap:14px;padding:20px 0;text-align:center;\";\r\n\r\n container.appendChild(renderSpinner(this.theme, { size: 52, icon: icon(\"document\", 20) }));\r\n\r\n const statusEl = document.createElement(\"div\");\r\n statusEl.setAttribute(\"aria-live\", \"polite\");\r\n statusEl.style.cssText = `color:${this.theme.text};font-size:${TYPE.base}px;font-weight:600;`;\r\n statusEl.textContent = \"Reading your document…\";\r\n container.appendChild(statusEl);\r\n\r\n const subEl = document.createElement(\"div\");\r\n subEl.style.cssText = `color:${this.theme.textSecondary};font-size:12px;max-width:260px;line-height:1.5;`;\r\n subEl.textContent = \"This usually takes 5–15 seconds. Please wait.\";\r\n container.appendChild(subEl);\r\n\r\n if (!this.livenessEntryId) {\r\n this.showErrorStep(\"Document upload failed. Please try again.\");\r\n return;\r\n }\r\n\r\n const entryId = this.livenessEntryId;\r\n // Backend OCR (process_document_ocr) now submits + polls SmartComply\r\n // synchronously in one Celery task, no webhook — up to ~40s per side\r\n // (MAX_POLL_ATTEMPTS x POLL_INTERVAL_SECONDS in smartcomply_ocr.py),\r\n // so a two-sided document (front + back) can take up to ~80s end to\r\n // end. 45 x 2s = 90s comfortably covers that worst case while the loop\r\n // still exits immediately once ocrDone is true — the common case\r\n // (OCR done in a few seconds) is exactly as fast as before.\r\n const MAX_POLLS = 45; // 45 x 2s = 90s timeout\r\n let polls = 0;\r\n\r\n const poll = async () => {\r\n if (this.isDestroyed) return;\r\n polls++;\r\n try {\r\n const result = await this.sdk.liveness.pollResult(entryId) as any;\r\n\r\n // W7: Expired document — stop, do not proceed to liveness\r\n if (result.is_expired === true) {\r\n container.innerHTML = \"\";\r\n this._renderExpiredDocument(container);\r\n return;\r\n }\r\n\r\n // W8: OCR quality fail — offer retake\r\n if (result.ocr_quality_failed === true) {\r\n container.innerHTML = \"\";\r\n this._renderOcrQualityFail(container, result.ocr_rejection_reason);\r\n return;\r\n }\r\n\r\n // OCR complete — store data and show confirmation screen\r\n const ocrDone = result.ocr_status === \"done\" || result.ocr_status === \"ocr_complete\"\r\n || result.ocr_name || result.ocr_document_number || result.ocr_expiry_date;\r\n\r\n if (ocrDone) {\r\n this._ocrName = result.ocr_name || \"\";\r\n this._ocrDocNumber = result.ocr_document_number || \"\";\r\n this._ocrExpiry = result.ocr_expiry_date || \"\";\r\n this._ocrFaceImageUrl = result.ocr_face_image_url || \"\";\r\n this._ocrIsExpired = result.is_expired === true;\r\n\r\n // B8: Normalise expiry date string before parsing — OCR may return\r\n // DD/MM/YYYY, DD-MM-YYYY, YYYY-MM-DD, or \"12 May 2029\" etc.\r\n // new Date() alone is locale-dependent on non-ISO strings.\r\n if (this._ocrExpiry) {\r\n const expDate = _parseOcrDate(this._ocrExpiry);\r\n if (expDate) {\r\n const sixMonths = new Date();\r\n sixMonths.setMonth(sixMonths.getMonth() + 6);\r\n this._ocrExpirySoon = expDate <= sixMonths && expDate > new Date();\r\n }\r\n }\r\n\r\n this.showStep(\"document_confirm\");\r\n return;\r\n }\r\n\r\n // Still pending — keep polling. Past ~20s (the old timeout window)\r\n // update the message so a long-but-healthy OCR pass (front+back can\r\n // take up to ~80s server-side) doesn't look frozen to the user.\r\n if (polls === 10 && !this.isDestroyed) {\r\n statusEl.textContent = \"Still reading your document…\";\r\n subEl.textContent = \"Documents with a back side can take a little longer. Please keep waiting.\";\r\n }\r\n if (polls < MAX_POLLS && !this.isDestroyed) {\r\n this._ocrPollTimer = setTimeout(poll, 2000);\r\n } else if (!this.isDestroyed) {\r\n // Genuinely exhausted the whole window with nothing usable read —\r\n // stop here instead of letting an unverified identity through to\r\n // liveness. document_confirm never blocks on missing fields (by\r\n // design, so a partial-but-real OCR read still lets the user\r\n // continue), so the gate has to live here, before that screen.\r\n container.innerHTML = \"\";\r\n this._renderOcrTimeout(container);\r\n }\r\n } catch {\r\n if (polls < MAX_POLLS && !this.isDestroyed) {\r\n this._ocrPollTimer = setTimeout(poll, 3000);\r\n } else if (!this.isDestroyed) {\r\n this.showErrorStep(\"We could not read your document. Please check your connection and try again.\");\r\n }\r\n }\r\n };\r\n\r\n // First poll after 3s — give OCR submission time to start\r\n this._ocrPollTimer = setTimeout(poll, 3000);\r\n }\r\n\r\n private _renderExpiredDocument(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:14px;padding:20px 0;\";\r\n const icon = document.createElement(\"div\");\r\n icon.style.cssText = `width:72px;height:72px;border-radius:50%;background:${this.theme.errorBg};border:3px solid ${this.theme.error};display:flex;align-items:center;justify-content:center;font-size:28px;`;\r\n icon.textContent = \"📅\";\r\n container.appendChild(icon);\r\n const t = document.createElement(\"h2\");\r\n t.style.cssText = `color:${this.theme.text};font-size:${TYPE.heading}px;font-weight:700;margin:0;`;\r\n t.textContent = \"Document Expired\";\r\n container.appendChild(t);\r\n const d = document.createElement(\"p\");\r\n d.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin:0;max-width:280px;line-height:1.6;`;\r\n d.textContent = \"The document you submitted has expired. Please use a valid, current ID.\";\r\n container.appendChild(d);\r\n const retryBtn = this.createPrimaryButton(\"Try a different document\");\r\n retryBtn.addEventListener(\"click\", () => {\r\n this.livenessEntryId = null; this.documentBlob = null; this.documentBackBlob = null;\r\n this.showStep(\"document_capture\");\r\n });\r\n container.appendChild(retryBtn);\r\n const endBtn = this.createSecondaryButton(\"End session\");\r\n endBtn.addEventListener(\"click\", () => { this.options.onError?.(new Error(\"Document expired\")); this.close(); });\r\n container.appendChild(endBtn);\r\n }\r\n\r\n private _renderOcrQualityFail(container: HTMLElement, reason?: string): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:14px;padding:20px 0;\";\r\n const icon = document.createElement(\"div\");\r\n icon.style.cssText = `width:72px;height:72px;border-radius:50%;background:${this.theme.errorBg};border:3px solid ${this.theme.error};display:flex;align-items:center;justify-content:center;font-size:28px;`;\r\n icon.textContent = \"🔍\";\r\n container.appendChild(icon);\r\n const t = document.createElement(\"h2\");\r\n t.style.cssText = `color:${this.theme.text};font-size:${TYPE.heading}px;font-weight:700;margin:0;`;\r\n // \"Photo unclear\" only fits the blur/lighting reasons below — a wrong\r\n // document entirely (mismatch/no-document-detected) isn't a clarity\r\n // problem, so give it its own, accurate title instead of implying the\r\n // user just needs better lighting.\r\n const isWrongDocument = reason === \"document_not_detected\"\r\n || reason === \"document_type_mismatch\"\r\n || reason === \"country_mismatch\";\r\n t.textContent = isWrongDocument ? \"That Doesn't Look Right\" : \"Document Photo Unclear\";\r\n container.appendChild(t);\r\n const msg = reason === \"image_too_blurry\" ? \"Your document photo is too blurry. Please retake it in good lighting with a steady hand.\"\r\n : reason === \"image_too_dark\" ? \"Your document photo is too dark. Please retake it in better lighting.\"\r\n : reason === \"image_too_bright\" ? \"Your document photo has too much glare. Please reduce reflections and retake.\"\r\n : reason === \"document_not_detected\" ? \"We could not detect a document in the photo. Please make sure you're photographing the actual ID document, with the full document visible.\"\r\n : reason === \"document_type_mismatch\" ? \"This document doesn't match the ID type you selected. Please upload the correct document, or go back and choose the matching type.\"\r\n : reason === \"country_mismatch\" ? \"This document doesn't appear to be from the expected country. Please check you've selected the right country and document.\"\r\n // Any other reason: if it already reads like a real sentence (starts\r\n // capitalized, has spaces — matches the backend's own\r\n // _safe_failure_reason heuristic for \"already user-facing\"), show it\r\n // as-is instead of masking a specific, accurate reason behind a\r\n // generic \"bad lighting\" message that may not describe what's wrong.\r\n : reason && /^[A-Z]/.test(reason) && reason.includes(\" \") ? reason\r\n : \"We could not read your document clearly. Please retake the photo in good lighting with no glare.\";\r\n const d = document.createElement(\"p\");\r\n d.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin:0;max-width:280px;line-height:1.6;`;\r\n d.textContent = msg;\r\n container.appendChild(d);\r\n const retryBtn = this.createPrimaryButton(\"Retake photo\");\r\n retryBtn.addEventListener(\"click\", () => {\r\n this.livenessEntryId = null; this.documentBlob = null; this.documentBackBlob = null;\r\n this.showStep(\"document_capture\");\r\n });\r\n container.appendChild(retryBtn);\r\n }\r\n\r\n /**\r\n * OCR ran to completion but never produced a single usable field within\r\n * the poll window — do not let the flow reach liveness with no verified\r\n * identity data. Distinct from _renderOcrQualityFail (a bad photo) since\r\n * this covers a genuinely stuck/slow OCR pass instead of a rejected image.\r\n */\r\n private _renderOcrTimeout(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:14px;padding:20px 0;\";\r\n const icon = document.createElement(\"div\");\r\n icon.style.cssText = `width:72px;height:72px;border-radius:50%;background:${this.theme.errorBg};border:3px solid ${this.theme.error};display:flex;align-items:center;justify-content:center;font-size:28px;`;\r\n icon.textContent = \"⏱️\";\r\n container.appendChild(icon);\r\n const t = document.createElement(\"h2\");\r\n t.style.cssText = `color:${this.theme.text};font-size:${TYPE.heading}px;font-weight:700;margin:0;`;\r\n t.textContent = \"Couldn't Read Your Document\";\r\n container.appendChild(t);\r\n const d = document.createElement(\"p\");\r\n d.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin:0;max-width:280px;line-height:1.6;`;\r\n d.textContent = \"We weren't able to read any details from your document. Please retake the photo in good lighting, with all four corners visible.\";\r\n container.appendChild(d);\r\n const retryBtn = this.createPrimaryButton(\"Retake photo\");\r\n retryBtn.addEventListener(\"click\", () => {\r\n this.livenessEntryId = null; this.documentBlob = null; this.documentBackBlob = null;\r\n this.showStep(\"document_capture\");\r\n });\r\n container.appendChild(retryBtn);\r\n }\r\n\r\n // ── W11: You're all done (end-user final screen) ─────────────────\r\n\r\n private renderDone(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:16px;padding:24px 0;\";\r\n container.setAttribute(\"role\", \"status\");\r\n\r\n // B7: Fire onComplete immediately when the done screen renders — the end\r\n // user has completed their part regardless of whether they click Close.\r\n // Firing here means the integrator always gets the event even if the user\r\n // closes the modal via the ✕ button instead of the Close button.\r\n this.options.onComplete?.({\r\n entryId: this.livenessEntryId || 0,\r\n sessionId: this.sdk.sessionToken,\r\n status: \"processing\",\r\n submittedAt: new Date().toISOString(),\r\n verificationResult: this.verificationResult || undefined,\r\n });\r\n\r\n const iconWrap = document.createElement(\"div\");\r\n iconWrap.style.cssText = `width:80px;height:80px;border-radius:50%;background:${this.theme.successBg};border:3px solid ${this.theme.success};display:flex;align-items:center;justify-content:center;color:${this.theme.success};animation:sc-pop 0.4s ease;`;\r\n iconWrap.innerHTML = icon(\"check\", 36);\r\n container.appendChild(iconWrap);\r\n\r\n const title = document.createElement(\"h2\");\r\n title.style.cssText = `color:${this.theme.text};font-size:${TYPE.headingLg}px;font-weight:700;margin:0;`;\r\n title.textContent = \"You're all done!\";\r\n container.appendChild(title);\r\n\r\n const desc = document.createElement(\"p\");\r\n desc.style.cssText = `color:${this.theme.textSecondary};font-size:14px;line-height:1.6;margin:0;max-width:300px;`;\r\n desc.textContent = \"Your verification is complete.\";\r\n container.appendChild(desc);\r\n\r\n // Subtle info line\r\n const info = document.createElement(\"div\");\r\n info.style.cssText = `color:${this.theme.textMuted};font-size:11px;display:flex;align-items:center;gap:4px;`;\r\n info.textContent = \"🔒 Your data is encrypted and secure\";\r\n container.appendChild(info);\r\n\r\n const doneBtn = this.createPrimaryButton(\"Close\");\r\n doneBtn.addEventListener(\"click\", () => {\r\n // onComplete already fired on render — just close the modal\r\n this.close();\r\n });\r\n container.appendChild(doneBtn);\r\n }\r\n\r\n // ── W14: Retry limit reached ─────────────────────────────────────\r\n\r\n private _renderRetryLimitReached(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:14px;padding:24px 0;\";\r\n const icon = document.createElement(\"div\");\r\n icon.style.cssText = `width:72px;height:72px;border-radius:50%;background:${this.theme.errorBg};border:3px solid ${this.theme.error};display:flex;align-items:center;justify-content:center;font-size:28px;`;\r\n icon.textContent = \"⚠️\";\r\n container.appendChild(icon);\r\n const t = document.createElement(\"h2\");\r\n t.style.cssText = `color:${this.theme.text};font-size:${TYPE.heading}px;font-weight:700;margin:0;`;\r\n t.textContent = \"Unable to Complete Verification\";\r\n container.appendChild(t);\r\n const d = document.createElement(\"p\");\r\n d.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin:0;max-width:280px;line-height:1.6;`;\r\n d.textContent = \"We were unable to complete your verification at this time. Please contact support or try again later.\";\r\n container.appendChild(d);\r\n const closeBtn = this.createPrimaryButton(\"Close\");\r\n closeBtn.addEventListener(\"click\", () => { this.options.onError?.(new Error(\"Retry limit reached\")); this.close(); });\r\n container.appendChild(closeBtn);\r\n }\r\n\r\n // ── W13: Camera pre-warm ─────────────────────────────────────────\r\n\r\n private _prewarmCamera(): void {\r\n if (this._prewarmedStream || this.isDestroyed) return;\r\n navigator.mediaDevices?.getUserMedia?.({ video: { facingMode: \"user\" } })\r\n .then(stream => {\r\n if (this.isDestroyed) { stream.getTracks().forEach(t => t.stop()); return; }\r\n this._prewarmedStream = stream;\r\n })\r\n .catch(() => { /* silent — pre-warm is best effort */ });\r\n }\r\n\r\n /**\r\n * Process document capture result with front/back support\r\n */\r\n private async processDocumentCaptureResult(\r\n result: DocumentCaptureResult,\r\n captureContainer: HTMLElement,\r\n container: HTMLElement\r\n ): Promise<void> {\r\n // B2+P2: Compress both images once here. Do NOT assign documentBlob twice\r\n // (old code set it to the raw blob first, then overwrote with compressed).\r\n // processDocumentBlob also ran _compressImage — that second pass is removed\r\n // below so compression only happens once.\r\n this.documentBlob = await _compressImage(result.front, 1600, 0.85);\r\n this.documentBackBlob = result.back ? await _compressImage(result.back, 1600, 0.85) : null;\r\n this._documentViaCamera = result.viaCamera;\r\n\r\n // Process the front image — pass the already-compressed blob\r\n await this.processDocumentBlob(this.documentBlob, captureContainer, container);\r\n }\r\n\r\n /**\r\n * Process document blob - common method for both CameraView and DocumentCapture\r\n */\r\n private async processDocumentBlob(\r\n blob: Blob,\r\n captureContainer: HTMLElement,\r\n container: HTMLElement\r\n ): Promise<void> {\r\n const maxRetries = 2;\r\n let retryCount = 0;\r\n\r\n const attemptProcessing = async (): Promise<void> => {\r\n try {\r\n // Validate blob — compression already done in processDocumentCaptureResult (P2)\r\n if (!blob || blob.size === 0) {\r\n throw new Error(\"Failed to capture document. Please try again.\");\r\n }\r\n if (blob.size > 5 * 1024 * 1024) {\r\n throw new Error(\"Document image is too large. Please retake in better lighting or use a clearer photo.\");\r\n }\r\n\r\n this.documentBlob = blob;\r\n\r\n // Show scanning state\r\n captureContainer.innerHTML = \"\";\r\n captureContainer.style.cssText += \"display:flex;flex-direction:column;align-items:center;gap:14px;padding:28px 20px;\";\r\n captureContainer.appendChild(renderSpinner(this.theme, { size: 52, icon: icon(\"search\", 20) }));\r\n captureContainer.insertAdjacentHTML(\"beforeend\", `\r\n <div style=\"color:${this.theme.text};font-size:14px;font-weight:600;\">Scanning document...</div>\r\n <div style=\"color:${this.theme.textSecondary};font-size:12px;text-align:center;max-width:200px;line-height:1.5;\">Running OCR and verifying your identity</div>`);\r\n\r\n // Create liveness entry with document.\r\n // Use the first collected field value as identifier when available\r\n // (document flow has no data-verification step, so collectedFields is\r\n // empty — fall back to the selected ID type code so the webhook\r\n // subject.identifier is at least human-meaningful, not a raw timestamp).\r\n const identifier = Object.values(this.collectedFields)[0]\r\n || this.idNumber\r\n || this.selectedIdType\r\n || `DOC-${Date.now()}`;\r\n const COUNTRY_CODES: Record<string, string> = {\r\n nigeria: \"NG\", ghana: \"GH\", kenya: \"KE\",\r\n south_africa: \"ZA\", united_states: \"US\", united_kingdom: \"GB\", global: \"US\",\r\n };\r\n const country = COUNTRY_CODES[this.selectedCountry] || this.selectedCountry.toUpperCase().slice(0, 2);\r\n\r\n const deviceMeta = collectDeviceMetadata();\r\n let createResult;\r\n try {\r\n createResult = await this.sdk.liveness.create({\r\n identifier,\r\n identifier_type: this.selectedIdType,\r\n country,\r\n challenge_actions: [\"BLINK\"],\r\n document: blob,\r\n document_back: this.documentBackBlob || undefined,\r\n device_type: deviceMeta.device_type,\r\n os_name: deviceMeta.os_name,\r\n browser_timezone: deviceMeta.browser_timezone,\r\n fingerprint_id: deviceMeta.fingerprint_id,\r\n });\r\n } catch (apiError: any) {\r\n // Handle specific network and API errors\r\n if (apiError.message?.includes('fetch') || apiError.message?.includes('network') || apiError.code === 'NETWORK_ERROR') {\r\n throw new Error(\"Network connection failed. Please check your internet connection and try again.\");\r\n } else if (apiError.message?.includes('413') || apiError.message?.includes('too large')) {\r\n throw new Error(\"Document image is too large. Please use a smaller image or retake the photo.\");\r\n } else if (apiError.message?.includes('415') || apiError.message?.includes('format')) {\r\n throw new Error(\"Unsupported image format. Please use JPEG or PNG images.\");\r\n } else if (apiError.message?.includes('401') || apiError.message?.includes('unauthorized')) {\r\n throw new Error(\"Session expired. Please refresh the page and try again.\");\r\n } else if (apiError.message?.includes('429') || apiError.message?.includes('rate limit')) {\r\n throw new Error(\"Too many requests. Please wait a moment and try again.\");\r\n } else {\r\n throw new Error(apiError.message || \"Failed to process document. Please try again.\");\r\n }\r\n }\r\n\r\n this.livenessEntryId = createResult.id;\r\n\r\n // W6: Route to OCR gate — poll until OCR result is ready, validate\r\n // expiry/quality, then show document_confirm before liveness starts.\r\n this.showStep(\"ocr_gate\");\r\n\r\n } catch (err: any) {\r\n console.error(\"Document processing failed:\", err);\r\n \r\n if (retryCount < maxRetries) {\r\n retryCount++;\r\n console.log(`Retrying document processing (attempt ${retryCount}/${maxRetries})`);\r\n \r\n // Show retry message\r\n if (captureContainer) {\r\n captureContainer.innerHTML = \"\";\r\n captureContainer.style.cssText += \"display:flex;flex-direction:column;align-items:center;gap:16px;padding:28px 20px;text-align:center;\";\r\n captureContainer.appendChild(renderSpinner(this.theme, { size: 52, icon: icon(\"refresh\", 20) }));\r\n captureContainer.insertAdjacentHTML(\"beforeend\", `\r\n <div style=\"color:${this.theme.text};font-size:14px;font-weight:600;\">Retrying...</div>\r\n <div style=\"color:${this.theme.textSecondary};font-size:12px;max-width:240px;line-height:1.5;\">Attempt ${retryCount} of ${maxRetries}</div>`);\r\n }\r\n \r\n // Wait before retry\r\n await new Promise(resolve => setTimeout(resolve, 2000));\r\n return attemptProcessing();\r\n } else {\r\n // Final retry failed, show detailed error\r\n this.handleDocumentProcessingError(err, captureContainer);\r\n }\r\n }\r\n };\r\n\r\n await attemptProcessing();\r\n }\r\n\r\n private handleDocumentProcessingError(error: any, captureContainer: HTMLElement): void {\r\n // Map technical errors to user-friendly messages — never pass raw error strings\r\n let userMessage = \"We could not verify your document. Please try again.\";\r\n let canRetry = true;\r\n\r\n const raw = (error?.message || \"\").toLowerCase();\r\n if (raw.includes(\"expired\")) {\r\n userMessage = \"The document you submitted has expired. Please use a valid, current ID.\";\r\n canRetry = false;\r\n } else if (raw.includes(\"quality too low\") || raw.includes(\"blurry\") || raw.includes(\"blur\")) {\r\n userMessage = \"The document photo isn't clear enough. Please retake it in good lighting with no glare.\";\r\n } else if (raw.includes(\"not detected\") || raw.includes(\"document_not_detected\")) {\r\n userMessage = \"We could not detect a document in the photo. Please ensure the full ID is visible and try again.\";\r\n } else if (raw.includes(\"network\") || raw.includes(\"fetch\") || raw.includes(\"connection\")) {\r\n userMessage = \"A connection error occurred. Please check your internet and try again.\";\r\n } else if (raw.includes(\"too large\") || raw.includes(\"413\")) {\r\n userMessage = \"The document image is too large. Please retake the photo.\";\r\n } else if (raw.includes(\"format\") || raw.includes(\"415\")) {\r\n userMessage = \"Unsupported image format. Please use JPEG or PNG.\";\r\n } else if (raw.includes(\"type mismatch\") || raw.includes(\"document_type_mismatch\")) {\r\n userMessage = \"The document does not match the selected ID type. Please choose the correct ID type.\";\r\n }\r\n\r\n if (captureContainer) {\r\n // Build with DOM — never interpolate user-derived content into innerHTML\r\n const wrap = document.createElement(\"div\");\r\n wrap.style.cssText = \"display:flex;flex-direction:column;align-items:center;gap:16px;padding:28px 20px;text-align:center;\";\r\n wrap.setAttribute(\"role\", \"alert\");\r\n\r\n const icon = document.createElement(\"div\");\r\n icon.style.cssText = `width:56px;height:56px;border-radius:50%;background:${this.theme.errorBg};border:3px solid ${this.theme.error};display:flex;align-items:center;justify-content:center;font-size:26px;`;\r\n icon.textContent = \"🔍\";\r\n wrap.appendChild(icon);\r\n\r\n const titleEl = document.createElement(\"div\");\r\n titleEl.style.cssText = `color:${this.theme.text};font-size:14px;font-weight:700;`;\r\n titleEl.textContent = \"Document Could Not Be Verified\";\r\n wrap.appendChild(titleEl);\r\n\r\n const msgEl = document.createElement(\"div\");\r\n msgEl.style.cssText = `color:${this.theme.textSecondary};font-size:13px;max-width:260px;line-height:1.6;`;\r\n msgEl.textContent = userMessage;\r\n wrap.appendChild(msgEl);\r\n\r\n if (canRetry) {\r\n const retryBtn = document.createElement(\"button\");\r\n retryBtn.textContent = \"Try Again\";\r\n retryBtn.setAttribute(\"aria-label\", \"Retake document photo\");\r\n retryBtn.style.cssText = `margin-top:8px;padding:12px 24px;border-radius:${RADIUS.sm}px;background:${this.theme.primary};color:#fff;border:none;font-size:14px;font-weight:600;cursor:pointer;`;\r\n retryBtn.addEventListener(\"click\", () => this.showStep(\"document_capture\"));\r\n wrap.appendChild(retryBtn);\r\n }\r\n\r\n captureContainer.innerHTML = \"\";\r\n captureContainer.appendChild(wrap);\r\n } else {\r\n this.showErrorStep(userMessage);\r\n }\r\n }\r\n\r\n // ── Liveness ────────────────────────────────────────────────────\r\n\r\n private renderLiveness(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;gap:14px;\";\r\n\r\n // W13: Check retry limit before starting another liveness attempt\r\n if (this._livenessFailures >= SmartComplyFlow.MAX_RETRIES) {\r\n this._renderRetryLimitReached(container);\r\n return;\r\n }\r\n\r\n // Each render gets its own id so a stale attempt (e.g. abandoned after\r\n // the tab was backgrounded and we restarted the scan on return) can't\r\n // resolve/reject into the current one — see the visibilitychange\r\n // handler in mount(), which re-renders this step on return-to-foreground.\r\n const attemptId = ++this._livenessAttemptId;\r\n\r\n const title = this.createStepTitle(\"Face verification\");\r\n container.appendChild(title);\r\n\r\n const desc = document.createElement(\"div\");\r\n desc.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin-top:-8px;line-height:1.5;`;\r\n desc.textContent = \"Fit your face inside the oval, then blink naturally while looking around for a few seconds.\";\r\n container.appendChild(desc);\r\n\r\n // Liveness mount point\r\n const livenessContainer = document.createElement(\"div\");\r\n livenessContainer.style.cssText = \"margin:8px 0;width:100%;\";\r\n container.appendChild(livenessContainer);\r\n\r\n // W9: For data verification, identity is already held by the backend via\r\n // identity_check_id — the real ID number/type must not be re-sent, and the\r\n // backend now accepts liveness/create without them when identity_check is\r\n // set (see liveness.ts create(), which omits both fields entirely in that\r\n // case). Only build a real identifier for the non-data-verification path.\r\n const isDataVerification = !!this.identityCheckId;\r\n const identifier = isDataVerification\r\n ? \"\"\r\n : (this.idNumber || Object.values(this.collectedFields)[0] || this.selectedIdType || `DOC-${Date.now()}`);\r\n const identifierType = isDataVerification ? \"\" : this.selectedIdType;\r\n\r\n const COUNTRY_CODES: Record<string, string> = {\r\n nigeria: \"NG\", ghana: \"GH\", kenya: \"KE\",\r\n south_africa: \"ZA\", united_states: \"US\", united_kingdom: \"GB\", global: \"US\",\r\n };\r\n const country = COUNTRY_CODES[this.selectedCountry] || this.selectedCountry.toUpperCase().slice(0, 2);\r\n\r\n // Start liveness check (this handles camera, detection, recording, submission)\r\n // If livenessEntryId exists (document flow), reuse it instead of creating a new one\r\n this.sdk.liveness\r\n .startCheck(\r\n livenessContainer,\r\n {\r\n identifier,\r\n identifier_type: identifierType,\r\n country,\r\n document: this.documentBlob || undefined,\r\n document_back: this.documentBackBlob || undefined,\r\n identity_check: this.identityCheckId || undefined,\r\n verification_type: this.identityCheckId\r\n ? \"data_verification\"\r\n : this.documentBlob\r\n ? \"document_verification\"\r\n : \"liveness_only\",\r\n // B4: pass pre-warmed stream so camera.open() is skipped\r\n prewarmedStream: this._prewarmedStream || undefined,\r\n colors: {\r\n primary: this.theme.primary,\r\n success: this.theme.success,\r\n error: this.theme.error,\r\n warning: this.theme.warning,\r\n },\r\n },\r\n [...DEFAULT_CHALLENGE_ACTIONS] as ChallengeAction[],\r\n this.livenessEntryId || undefined\r\n )\r\n .then((result) => {\r\n // A stale attempt (superseded by a restart after the tab was\r\n // backgrounded) resolving late must not act on the current screen.\r\n if (attemptId !== this._livenessAttemptId) return;\r\n // W11: After submit, end user is done — show \"You're all done\" screen.\r\n // Backend processing continues in background; client receives webhook.\r\n // Track liveness failures for retry limit (W14).\r\n if (result.status === \"failed\") {\r\n this._livenessFailures++;\r\n }\r\n if (result.id) {\r\n this.livenessEntryId = result.id;\r\n }\r\n this.showStep(\"done\");\r\n })\r\n .catch((err) => {\r\n if (attemptId !== this._livenessAttemptId) return;\r\n // Only count a genuine verification failure against the retry limit —\r\n // a dropped camera, network blip, or upload failure isn't the user's\r\n // fault and shouldn't cost them one of their limited attempts. These\r\n // are infrastructure-layer errors (thrown/rejected); a real face-\r\n // match/quality failure comes back as a resolved result with\r\n // status \"failed\" instead (handled in .then() above).\r\n if (!_isInfrastructureError(err)) {\r\n this._livenessFailures++;\r\n }\r\n this.showErrorStep(_userFacingLivenessError(err));\r\n });\r\n }\r\n\r\n // ── Error ───────────────────────────────────────────────────────\r\n\r\n private showErrorStep(message: string): void {\r\n this.currentStep = \"error\";\r\n if (!this.contentArea) return;\r\n this.contentArea.innerHTML = \"\";\r\n\r\n const wrapper = document.createElement(\"div\");\r\n wrapper.setAttribute(\"role\", \"alert\");\r\n wrapper.style.cssText = `\r\n display:flex;flex-direction:column;align-items:center;\r\n text-align:center;gap:16px;padding:20px 0;\r\n `;\r\n\r\n // Classify the error into a user-friendly category\r\n const isCameraErr = /camera|permission|notallowed|notfound/i.test(message);\r\n const isNetworkErr = /network|timeout|connection|fetch/i.test(message);\r\n const isAuthErr = /session.*expired|token.*expired|authentication/i.test(message);\r\n const isDocQuality = /blurry|blur|quality|glare|dark|bright|lighting/i.test(message);\r\n const isExpiredDoc = /document.*expired|expired.*document/i.test(message);\r\n const isFaceMatch = /face.*match|selfie.*match|does not match/i.test(message);\r\n // Billing/wallet failures (e.g. WALLET_NOT_FOUND, INSUFFICIENT_BALANCE from\r\n // /v1/sdk/liveness/submit/) are an operator-facing problem, not something\r\n // the end user can act on — never show \"wallet\"/\"balance\" language to them.\r\n const isBillingErr = /wallet|balance|insufficient.*fund|payment.*required/i.test(message);\r\n\r\n const errorIconName: IconName = isCameraErr ? \"camera\"\r\n : isNetworkErr ? \"network\"\r\n : isAuthErr ? \"clock\"\r\n : isDocQuality ? \"search\"\r\n : isExpiredDoc ? \"calendar\"\r\n : isFaceMatch ? \"face\"\r\n : isBillingErr ? \"warning\"\r\n : \"close\";\r\n\r\n const errorTitle = isCameraErr ? \"Camera Access Required\"\r\n : isNetworkErr ? \"Connection Problem\"\r\n : isAuthErr ? \"Session Expired\"\r\n : isDocQuality ? \"Document Photo Unclear\"\r\n : isExpiredDoc ? \"Document Expired\"\r\n : isFaceMatch ? \"Face Match Failed\"\r\n : isBillingErr ? \"Verification Unavailable\"\r\n : \"Verification Unsuccessful\";\r\n\r\n // Map to user-facing guidance — never show raw internal message\r\n const userMessage = isCameraErr\r\n ? \"Please allow camera access in your browser settings and try again.\"\r\n : isNetworkErr\r\n ? \"Check your internet connection and try again.\"\r\n : isAuthErr\r\n ? \"Your session has expired. Please start again.\"\r\n : isDocQuality\r\n ? _sanitizeUserMessage(message) || \"Please retake your document photo in good lighting with no glare.\"\r\n : isExpiredDoc\r\n ? \"The document you submitted has expired. Please use a valid, current ID.\"\r\n : isFaceMatch\r\n ? \"Your selfie did not match the photo on your ID. Please ensure you are using your own valid document and face the camera directly.\"\r\n : isBillingErr\r\n ? \"Verification is temporarily unavailable. Please contact support.\"\r\n : _sanitizeUserMessage(message) || \"We were unable to complete your verification. Please try again.\";\r\n\r\n const iconWrap = document.createElement(\"div\");\r\n iconWrap.style.cssText = `\r\n width:72px;height:72px;border-radius:50%;\r\n display:flex;align-items:center;justify-content:center;\r\n color:${this.theme.error};\r\n background:${this.theme.errorBg};\r\n border:3px solid ${this.theme.error};\r\n `;\r\n iconWrap.innerHTML = icon(errorIconName, 28);\r\n wrapper.appendChild(iconWrap);\r\n\r\n const title = document.createElement(\"h2\");\r\n title.style.cssText = `color:${this.theme.text};font-size:${TYPE.heading}px;font-weight:700;margin:0;`;\r\n title.textContent = errorTitle;\r\n wrapper.appendChild(title);\r\n\r\n const desc = document.createElement(\"p\");\r\n desc.style.cssText = `color:${this.theme.textSecondary};font-size:14px;line-height:1.6;margin:0;max-width:300px;`;\r\n desc.textContent = userMessage;\r\n wrapper.appendChild(desc);\r\n\r\n const retryBtn = this.createPrimaryButton(\"Try Again\");\r\n retryBtn.setAttribute(\"aria-label\", \"Try verification again\");\r\n retryBtn.addEventListener(\"click\", () => {\r\n this.initialize();\r\n });\r\n wrapper.appendChild(retryBtn);\r\n\r\n const closeBtn = this.createSecondaryButton(\"Close\");\r\n closeBtn.setAttribute(\"aria-label\", \"Close verification widget\");\r\n closeBtn.addEventListener(\"click\", () => {\r\n this.options.onError?.(new Error(message));\r\n this.close();\r\n });\r\n wrapper.appendChild(closeBtn);\r\n\r\n this.contentArea.appendChild(wrapper);\r\n }\r\n\r\n // ─────────────────────────────────────────────────────────────────\r\n // UI Helpers\r\n // ─────────────────────────────────────────────────────────────────\r\n\r\n private createHeader(): HTMLElement {\r\n const header = document.createElement(\"div\");\r\n header.setAttribute(\"role\", \"banner\");\r\n header.style.cssText = `\r\n display:flex;align-items:center;justify-content:space-between;\r\n padding:11px 20px;border-bottom:1px solid ${this.theme.border};\r\n `;\r\n\r\n // Left: back button + brand\r\n const leftArea = document.createElement(\"div\");\r\n leftArea.style.cssText = \"display:flex;align-items:center;gap:8px;min-width:0;\";\r\n\r\n this.headerBackBtn = document.createElement(\"button\");\r\n this.headerBackBtn.innerHTML = \"←\";\r\n this.headerBackBtn.setAttribute(\"aria-label\", \"Go back to previous step\");\r\n this.headerBackBtn.style.cssText = `\r\n width:30px;height:30px;border-radius:${RADIUS.sm}px;flex-shrink:0;\r\n display:none;align-items:center;justify-content:center;\r\n border:1.5px solid ${this.theme.border};cursor:pointer;\r\n font-size:16px;line-height:1;\r\n background:${this.theme.cardBg};color:${this.theme.text};\r\n transition:all 0.2s ease;\r\n `;\r\n this.headerBackBtn.style.cssText += `:focus-visible{outline:2px solid ${this.theme.primary};outline-offset:2px;}`;\r\n this.headerBackBtn.addEventListener(\"mouseenter\", () => {\r\n if (this.headerBackBtn) {\r\n this.headerBackBtn.style.background = this.theme.shimmer;\r\n }\r\n });\r\n this.headerBackBtn.addEventListener(\"mouseleave\", () => {\r\n if (this.headerBackBtn) {\r\n this.headerBackBtn.style.background = this.theme.cardBg;\r\n }\r\n });\r\n leftArea.appendChild(this.headerBackBtn);\r\n\r\n this.brandLabel = document.createElement(\"div\");\r\n this.brandLabel.setAttribute(\"aria-label\", \"Verification provider\");\r\n this.brandLabel.style.cssText = `\r\n font-size:15px;font-weight:700;color:${this.theme.text};\r\n white-space:nowrap;overflow:hidden;text-overflow:ellipsis;\r\n `;\r\n this.brandLabel.textContent = this.sdkConfig?.brand_name || \"SmartComply\";\r\n leftArea.appendChild(this.brandLabel);\r\n header.appendChild(leftArea);\r\n\r\n // Step indicator: stage dots + label\r\n const stepIndicator = document.createElement(\"div\");\r\n stepIndicator.style.cssText = `\r\n display:flex;align-items:center;gap:8px;flex-shrink:0;\r\n `;\r\n\r\n this.stageDots = document.createElement(\"div\");\r\n this.stageDots.style.cssText = `display:flex;align-items:center;gap:4px;`;\r\n for (let i = 0; i < 2; i++) {\r\n const dot = document.createElement(\"span\");\r\n dot.style.cssText = `\r\n width:6px;height:6px;border-radius:50%;\r\n background:${this.theme.border};transition:background 0.2s ease;\r\n `;\r\n this.stageDots.appendChild(dot);\r\n }\r\n stepIndicator.appendChild(this.stageDots);\r\n\r\n this.stepLabel = document.createElement(\"div\");\r\n this.stepLabel.setAttribute(\"aria-live\", \"polite\");\r\n this.stepLabel.setAttribute(\"aria-atomic\", \"true\");\r\n this.stepLabel.style.cssText = `\r\n font-size:12px;color:${this.theme.textMuted};\r\n font-variant-numeric:tabular-nums;flex-shrink:0;\r\n `;\r\n stepIndicator.appendChild(this.stepLabel);\r\n header.appendChild(stepIndicator);\r\n\r\n // Close button\r\n const closeBtn = document.createElement(\"button\");\r\n closeBtn.innerHTML = \"✕\";\r\n closeBtn.setAttribute(\"aria-label\", \"Close identity verification\");\r\n closeBtn.style.cssText = `\r\n width:32px;height:32px;border-radius:${RADIUS.sm}px;flex-shrink:0;\r\n display:flex;align-items:center;justify-content:center;\r\n border:none;cursor:pointer;font-size:16px;\r\n background:${this.theme.shimmer};color:${this.theme.textMuted};\r\n transition:all 0.2s ease;\r\n `;\r\n closeBtn.addEventListener(\"mouseenter\", () => {\r\n closeBtn.style.background = this.theme.errorBg;\r\n closeBtn.style.color = this.theme.error;\r\n });\r\n closeBtn.addEventListener(\"mouseleave\", () => {\r\n closeBtn.style.background = this.theme.shimmer;\r\n closeBtn.style.color = this.theme.textMuted;\r\n });\r\n closeBtn.addEventListener(\"click\", () => this.close());\r\n header.appendChild(closeBtn);\r\n\r\n return header;\r\n }\r\n\r\n private createFooter(): HTMLElement {\r\n const footer = document.createElement(\"div\");\r\n footer.style.cssText = `\r\n padding:9px 20px;border-top:1px solid ${this.theme.border};\r\n display:flex;align-items:center;justify-content:center;gap:6px;\r\n `;\r\n\r\n const powered = document.createElement(\"span\");\r\n powered.style.cssText = `font-size:11px;color:${this.theme.textMuted};`;\r\n powered.textContent = \"Powered by \";\r\n\r\n const brand = document.createElement(\"a\");\r\n brand.href = \"https://adhere.smartcomply.com/\";\r\n brand.target = \"_blank\";\r\n brand.rel = \"noopener noreferrer\";\r\n brand.style.cssText = `font-size:11px;font-weight:700;color:${this.theme.primary};text-decoration:none;`;\r\n brand.textContent = \"Adhere\";\r\n brand.addEventListener(\"mouseenter\", () => { brand.style.textDecoration = \"underline\"; });\r\n brand.addEventListener(\"mouseleave\", () => { brand.style.textDecoration = \"none\"; });\r\n\r\n footer.appendChild(powered);\r\n footer.appendChild(brand);\r\n return footer;\r\n }\r\n\r\n private createStepTitle(text: string): HTMLElement {\r\n const el = document.createElement(\"h3\");\r\n el.style.cssText = `\r\n color:${this.theme.text};font-size:${TYPE.heading}px;font-weight:700;\r\n margin:0;\r\n `;\r\n el.textContent = text;\r\n return el;\r\n }\r\n\r\n private createOptionCard(\r\n title: string,\r\n subtitle: string,\r\n onClick: () => void\r\n ): HTMLElement {\r\n const card = document.createElement(\"button\");\r\n card.setAttribute(\"aria-label\", subtitle ? `${title}: ${subtitle}` : title);\r\n card.style.cssText = `\r\n width:100%;padding:13px 16px;border-radius:${RADIUS.md}px;\r\n background:${this.theme.cardBg};\r\n border:2px solid ${this.theme.border};\r\n cursor:pointer;text-align:left;\r\n display:flex;align-items:center;justify-content:space-between;\r\n transition:all 0.2s ease;\r\n `;\r\n card.addEventListener(\"mouseenter\", () => {\r\n card.style.borderColor = this.theme.primary;\r\n card.style.background = this.theme.shimmer;\r\n card.style.transform = \"translateY(-1px)\";\r\n });\r\n card.addEventListener(\"mouseleave\", () => {\r\n card.style.borderColor = this.theme.border;\r\n card.style.background = this.theme.cardBg;\r\n card.style.transform = \"translateY(0)\";\r\n });\r\n card.addEventListener(\"click\", onClick);\r\n\r\n const textWrap = document.createElement(\"div\");\r\n textWrap.style.cssText = \"flex:1 1 auto;min-width:0;\";\r\n\r\n const titleEl = document.createElement(\"div\");\r\n titleEl.style.cssText = `color:${this.theme.text};font-size:14px;font-weight:600;line-height:1.35;`;\r\n titleEl.textContent = title;\r\n textWrap.appendChild(titleEl);\r\n\r\n if (subtitle) {\r\n const subEl = document.createElement(\"div\");\r\n subEl.style.cssText = `color:${this.theme.textMuted};font-size:12px;line-height:1.4;margin-top:2px;`;\r\n subEl.textContent = subtitle;\r\n textWrap.appendChild(subEl);\r\n }\r\n\r\n const arrow = document.createElement(\"span\");\r\n arrow.style.cssText = `color:${this.theme.textMuted};font-size:18px;flex-shrink:0;margin-left:12px;line-height:1;`;\r\n arrow.textContent = \"→\";\r\n\r\n card.appendChild(textWrap);\r\n card.appendChild(arrow);\r\n return card;\r\n }\r\n\r\n private createPrimaryButton(text: string): HTMLButtonElement {\r\n const btn = document.createElement(\"button\");\r\n btn.textContent = text;\r\n btn.style.cssText = `\r\n width:100%;padding:14px;border-radius:${RADIUS.md}px;\r\n font-size:15px;font-weight:600;\r\n background:${this.theme.primary};color:#fff;\r\n border:none;cursor:pointer;\r\n transition:all 0.2s ease;\r\n box-shadow:0 2px 8px ${this.theme.primaryGlow};\r\n `;\r\n btn.addEventListener(\"mouseenter\", () => {\r\n btn.style.background = this.theme.primaryHover;\r\n btn.style.transform = \"translateY(-1px)\";\r\n });\r\n btn.addEventListener(\"mouseleave\", () => {\r\n btn.style.background = this.theme.primary;\r\n btn.style.transform = \"translateY(0)\";\r\n });\r\n return btn;\r\n }\r\n\r\n private createSecondaryButton(text: string): HTMLButtonElement {\r\n const btn = document.createElement(\"button\");\r\n btn.textContent = text;\r\n btn.style.cssText = `\r\n width:100%;padding:12px;border-radius:${RADIUS.md}px;\r\n font-size:14px;font-weight:500;\r\n background:transparent;color:${this.theme.textSecondary};\r\n border:none;cursor:pointer;\r\n transition:all 0.2s ease;\r\n `;\r\n btn.addEventListener(\"mouseenter\", () => {\r\n btn.style.color = this.theme.text;\r\n });\r\n btn.addEventListener(\"mouseleave\", () => {\r\n btn.style.color = this.theme.textSecondary;\r\n });\r\n return btn;\r\n }\r\n\r\n /** Click handler that fires once and disables the button, preventing a double-tap double-dispatch. */\r\n private _onceClick(btn: HTMLButtonElement, handler: () => void): void {\r\n btn.addEventListener(\"click\", () => {\r\n if (btn.disabled) return;\r\n btn.disabled = true;\r\n btn.style.opacity = \"0.6\";\r\n btn.style.cursor = \"default\";\r\n handler();\r\n });\r\n }\r\n\r\n private isDocumentFlow(): boolean {\r\n // 1. Check verification_type — handle both string and array from backend\r\n const vType = this.sdkConfig?.verification_type;\r\n if (vType) {\r\n const types: string[] = Array.isArray(vType) ? vType : [vType];\r\n if (types.includes(\"document_verification\")) return true;\r\n if (types.includes(\"data_verification\")) return false;\r\n }\r\n // 2. Fallback: inspect channel fields — any upload field = document flow\r\n const channels = this.sdkConfig?.channels || {};\r\n const allFields = (Object.values(channels) as any[])\r\n .flat()\r\n .flatMap((ch: any) => ch.fields || []);\r\n return allFields.some((f: any) => isUploadFieldType(f.type));\r\n }\r\n\r\n /**\r\n * True when the SDK Config is set to skip data/document verification\r\n * entirely and only run the liveness/selfie check — no country picker,\r\n * no ID-type picker, no ID-number entry or document capture. Unlike\r\n * isDocumentFlow(), there's no channel-shape fallback to infer this from:\r\n * a liveness-only config carries no channels at all, so the only signal\r\n * is verification_type itself.\r\n */\r\n private isLivenessOnlyFlow(): boolean {\r\n const vType = this.sdkConfig?.verification_type;\r\n if (!vType) return false;\r\n const types: string[] = Array.isArray(vType) ? vType : [vType];\r\n return types.includes(\"liveness_only\");\r\n }\r\n\r\n /**\r\n * The \"go back one step\" target for a given step, if that step is\r\n * navigable — shared by the header back button and the browser\r\n * back-button (popstate) handler in mount() so both agree on the same\r\n * step order.\r\n */\r\n private _getBackAction(step: StepName): (() => void) | undefined {\r\n const countries = Object.keys(this.sdkConfig?.channels || {});\r\n const backTargets: Partial<Record<StepName, () => void>> = {\r\n id_type: () => this.showStep(countries.length > 1 ? \"country\" : \"welcome\"),\r\n country: () => this.showStep(\"welcome\"),\r\n id_input: () => this.showStep(\"id_type\"),\r\n confirm_identity: () => this.showStep(\"id_input\"),\r\n document_capture: () => { this.docCapture?.destroy(); this.showStep(\"id_type\"); },\r\n document_confirm: () => { this.docCapture?.destroy(); this.showStep(\"document_capture\"); },\r\n };\r\n // liveness-only skips straight from welcome to liveness with nothing in\r\n // between — deliberately no backTargets[\"liveness\"] entry added here,\r\n // so the back button stays hidden on that step in this mode, same as\r\n // it already is for every other mode (liveness has no back target for\r\n // document/data flows either — nothing to go back to except closing).\r\n return backTargets[step];\r\n }\r\n\r\n private updateProgress(): void {\r\n const isLivenessOnly = this.isLivenessOnlyFlow();\r\n const isDocFlow = isLivenessOnly ? false : this.isDocumentFlow();\r\n const countries = Object.keys(this.sdkConfig?.channels || {});\r\n const singleCountry = countries.length <= 1;\r\n\r\n // Two-stage action steps — Stage 1: validate identity, Stage 2: liveness.\r\n // Liveness-only has no Stage 1 at all — welcome goes straight to\r\n // liveness — so stage1Steps stays empty and the progress bar reflects\r\n // a genuinely single-stage flow instead of implying a step that never\r\n // happens in this mode.\r\n const stage1Steps: StepName[] = isLivenessOnly\r\n ? []\r\n : isDocFlow\r\n ? ([\"country\", \"id_type\", \"document_capture\", \"ocr_gate\", \"document_confirm\"] as StepName[]).filter(s => !(s === \"country\" && singleCountry))\r\n : ([\"country\", \"id_type\", \"id_input\", \"confirm_identity\"] as StepName[]).filter(s => !(s === \"country\" && singleCountry));\r\n\r\n const stage2Steps: StepName[] = [\"liveness\"];\r\n const allActionSteps: StepName[] = [...stage1Steps, ...stage2Steps];\r\n\r\n const totalSteps = allActionSteps.length;\r\n const actionIndex = allActionSteps.indexOf(this.currentStep);\r\n\r\n const pct =\r\n this.currentStep === \"done\" ? 100\r\n : actionIndex >= 0 ? ((actionIndex + 1) / totalSteps) * 100\r\n : 0;\r\n\r\n if (this.progressBar) {\r\n this.progressBar.style.width = `${pct}%`;\r\n }\r\n\r\n // Stage label: \"Stage 1 of 2: Verify Identity\" / \"Stage 2 of 2: Face Check\"\r\n // — liveness-only has no Stage 1, so it just says \"Face Check\" with no\r\n // \"of 2\" framing, since there's only ever the one stage in this mode.\r\n if (this.stepLabel) {\r\n if (this.currentStep === \"loading\" || this.currentStep === \"welcome\") {\r\n this.stepLabel.textContent = \"\";\r\n } else if (this.currentStep === \"done\") {\r\n this.stepLabel.textContent = \"Complete ✓\";\r\n } else if (stage2Steps.includes(this.currentStep)) {\r\n this.stepLabel.textContent = isLivenessOnly ? \"Face Check\" : \"Stage 2 of 2: Face Check\";\r\n } else if (stage1Steps.includes(this.currentStep)) {\r\n this.stepLabel.textContent = isDocFlow ? \"Stage 1 of 2: Scan Document\" : \"Stage 1 of 2: Verify Identity\";\r\n } else {\r\n this.stepLabel.textContent = \"\";\r\n }\r\n }\r\n\r\n // W3: Stage dots — dot 1 lights once Stage 1 is reached, dot 2 once Stage 2 is reached\r\n if (this.stageDots) {\r\n const dots = Array.from(this.stageDots.children) as HTMLSpanElement[];\r\n const inStage1 = stage1Steps.includes(this.currentStep);\r\n const inStage2 = stage2Steps.includes(this.currentStep);\r\n const isComplete = this.currentStep === \"done\";\r\n const stage1Active = inStage1 || inStage2 || isComplete;\r\n const stage2Active = inStage2 || isComplete;\r\n if (dots[0]) dots[0].style.background = stage1Active ? this.theme.primary : this.theme.border;\r\n if (dots[1]) dots[1].style.background = stage2Active ? this.theme.primary : this.theme.border;\r\n }\r\n\r\n // Back button — show for navigable steps only\r\n if (this.headerBackBtn) {\r\n const backAction = this._getBackAction(this.currentStep);\r\n if (backAction) {\r\n this.headerBackBtn.style.display = \"flex\";\r\n const newBtn = this.headerBackBtn.cloneNode(true) as HTMLButtonElement;\r\n newBtn.style.cssText = this.headerBackBtn.style.cssText;\r\n this.headerBackBtn.parentNode?.replaceChild(newBtn, this.headerBackBtn);\r\n this.headerBackBtn = newBtn;\r\n this.headerBackBtn.addEventListener(\"mouseenter\", () => {\r\n if (this.headerBackBtn) this.headerBackBtn.style.background = this.theme.shimmer;\r\n });\r\n this.headerBackBtn.addEventListener(\"mouseleave\", () => {\r\n if (this.headerBackBtn) this.headerBackBtn.style.background = this.theme.cardBg;\r\n });\r\n this.headerBackBtn.addEventListener(\"click\", backAction);\r\n } else {\r\n this.headerBackBtn.style.display = \"none\";\r\n }\r\n }\r\n }\r\n\r\n private applyTheme(): void {\r\n if (this.overlay) {\r\n this.overlay.style.background = this.theme.overlay;\r\n }\r\n if (this.modal) {\r\n this.modal.style.background = this.theme.bg;\r\n this.modal.style.boxShadow = this.theme.shadow;\r\n }\r\n }\r\n\r\n private injectStyles(): void {\r\n if (document.getElementById(\"sc-flow-styles\")) return;\r\n\r\n const style = document.createElement(\"style\");\r\n style.id = \"sc-flow-styles\";\r\n style.textContent = `\r\n @keyframes sc-pop {\r\n 0% { transform: scale(0.8); opacity: 0; }\r\n 50% { transform: scale(1.05); }\r\n 100% { transform: scale(1); opacity: 1; }\r\n }\r\n #sc-flow-modal * {\r\n box-sizing: border-box;\r\n }\r\n #sc-flow-modal button:focus-visible,\r\n #sc-flow-modal select:focus-visible,\r\n #sc-flow-modal input:focus-visible {\r\n outline: 2px solid #3b82f6;\r\n outline-offset: 2px;\r\n }\r\n #sc-flow-modal::-webkit-scrollbar {\r\n width: 4px;\r\n }\r\n #sc-flow-content::-webkit-scrollbar {\r\n width: 4px;\r\n }\r\n #sc-flow-content::-webkit-scrollbar-thumb {\r\n background: rgba(128,128,128,0.3);\r\n border-radius: 4px;\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n}\r\n"],
|
|
5
|
-
"mappings": "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AI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KA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",
|
|
4
|
+
"sourcesContent": ["import { SmartComply } from \"./client/Smartcomply\";\r\nimport { SmartComplyFlow } from \"./flow/SmartComplyFlow\";\r\n\r\nexport default SmartComply;\r\nexport { SmartComply, SmartComplyFlow };\r\n\r\n// Config\r\nexport type { SDKConfig, Environment } from \"./client/Config\";\r\n\r\n// Flow types\r\nexport type { FlowOptions, FlowResult } from \"./flow/SmartComplyFlow\";\r\n\r\n// Onboarding types\r\nexport type {\r\n OnboardingType,\r\n VerifyIdentityRequest,\r\n VerifyIdentityResponse,\r\n SessionResponse,\r\n SDKInitConfig,\r\n SDKChannel,\r\n} from \"./types/onboarding\";\r\n\r\n// Liveness types\r\nexport type {\r\n ChallengeAction,\r\n LivenessCreateRequest,\r\n LivenessCreateResponse,\r\n LivenessSubmitResponse,\r\n LivenessWebhookPayload,\r\n} from \"./types/liveness\";\r\n\r\n// Response envelope types\r\nexport type {\r\n ApiResponse,\r\n FieldError,\r\n ErrorData,\r\n} from \"./types/common\";\r\n\r\n// Error classes\r\nexport { SDKError } from \"./errors/SDKError\";\r\nexport { AuthError } from \"./errors/AuthError\";\r\nexport { NetworkError } from \"./errors/NetworkError\";\r\n\r\n// Utilities\r\nexport { SDKLogger } from \"./utils/logger\";\r\nexport { collectDeviceMetadata } from \"./utils/device\";\r\nexport type { DeviceMetadata } from \"./utils/device\";\r\nexport {\r\n isCameraSupported,\r\n queryCameraPermission,\r\n requestCameraAccess,\r\n releaseCameraStream,\r\n} from \"./camera/Permission\";\r\nexport type { PermissionStatus, CameraPermissionResult } from \"./camera/Permission\";\r\n\r\n// Liveness uploader (for integrators that need progress reporting)\r\nexport { LivenessUploader } from \"./modules/liveness/uploader\";\r\nexport type { UploadOptions } from \"./modules/liveness/uploader\";\r\n", "export type Environment = \"sandbox\" | \"production\" | \"local\";\r\n\r\nexport const BASE_URLS: Record<Environment, string> = {\r\n sandbox: \"https://adhere-staging-api.smartcomply.com\",\r\n production: \"https://adhere-api.smartcomply.com\",\r\n local: \"http://127.0.0.1:8000\",\r\n};\r\n\r\nexport interface SDKConfig {\r\n apiKey: string;\r\n clientId: string; // Required UUID — used for session creation\r\n environment?: Environment;\r\n timeout?: number;\r\n}\r\n", "export class SDKError extends Error {\r\n statusCode: number;\r\n errorCode?: string;\r\n errorData?: Record<string, unknown>;\r\n\r\n constructor(\r\n message: string,\r\n statusCode: number,\r\n errorCode?: string,\r\n errorData?: Record<string, unknown>\r\n ) {\r\n super(message);\r\n this.name = \"SDKError\";\r\n this.statusCode = statusCode;\r\n this.errorCode = errorCode;\r\n this.errorData = errorData;\r\n }\r\n}\r\n", "import { SDKError } from \"./SDKError\";\r\n\r\n/**\r\n * Thrown when authentication fails (invalid API key, expired session, etc).\r\n */\r\nexport class AuthError extends SDKError {\r\n constructor(message: string, errorCode?: string) {\r\n super(message, 401, errorCode);\r\n this.name = \"AuthError\";\r\n }\r\n}\r\n", "import { SDKError } from \"./SDKError\";\r\n\r\n/**\r\n * Thrown when a network request fails (timeout, no connection, DNS failure, etc).\r\n */\r\nexport class NetworkError extends SDKError {\r\n constructor(message: string) {\r\n super(message, 0, \"NETWORK_ERROR\");\r\n this.name = \"NetworkError\";\r\n }\r\n}\r\n", "import { SDKConfig, BASE_URLS } from \"./Config\";\r\nimport { SDKError } from \"../errors/SDKError\";\r\nimport { AuthError } from \"../errors/AuthError\";\r\nimport { NetworkError } from \"../errors/NetworkError\";\r\nimport { ApiResponse } from \"../types/common\";\r\n\r\n/**\r\n * HTTP client aligned with Adhere backend contract.\r\n *\r\n * Two auth modes:\r\n * - request() → Authorization: Bearer <apiKey> (session creation)\r\n * - sessionRequest() → x-access-token: <sessionToken> (all other endpoints)\r\n * - uploadWithSession() → multipart + x-access-token (file uploads)\r\n */\r\nexport class HttpClient {\r\n private baseUrl: string;\r\n private apiKey: string;\r\n private timeout: number;\r\n private sessionToken: string | null = null;\r\n\r\n constructor(config: SDKConfig) {\r\n this.baseUrl = BASE_URLS[config.environment || \"sandbox\"];\r\n this.apiKey = config.apiKey;\r\n this.timeout = config.timeout || 30000;\r\n }\r\n\r\n setSessionToken(token: string): void {\r\n this.sessionToken = token;\r\n }\r\n\r\n /**\r\n * API-key authenticated request (used for session creation only).\r\n * Header: Authorization: Bearer <apiKey>\r\n */\r\n async request<T>(\r\n method: string,\r\n path: string,\r\n body?: unknown\r\n ): Promise<T> {\r\n return this._fetch<T>(path, {\r\n method,\r\n headers: {\r\n \"Authorization\": `Bearer ${this.apiKey}`,\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: body ? JSON.stringify(body) : undefined,\r\n });\r\n }\r\n\r\n /**\r\n * Session-token authenticated request (used for all endpoints after session creation).\r\n * Header: x-access-token: <sessionToken>\r\n */\r\n async sessionRequest<T>(\r\n method: string,\r\n path: string,\r\n body?: unknown\r\n ): Promise<T> {\r\n this.requireToken();\r\n\r\n return this._fetch<T>(path, {\r\n method,\r\n headers: {\r\n \"x-access-token\": this.sessionToken!,\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: body ? JSON.stringify(body) : undefined,\r\n });\r\n }\r\n\r\n /**\r\n * Multipart file upload with session-token auth.\r\n * Header: x-access-token: <sessionToken>\r\n * NOTE: Do NOT set Content-Type — browser sets it with boundary automatically.\r\n */\r\n async uploadWithSession<T>(path: string, formData: FormData): Promise<T> {\r\n this.requireToken();\r\n\r\n return this._fetch<T>(path, {\r\n method: \"POST\",\r\n headers: {\r\n \"x-access-token\": this.sessionToken!,\r\n },\r\n body: formData,\r\n });\r\n }\r\n\r\n /**\r\n * GET for endpoints that work without auth (status polling still works after\r\n * session revoke) but return additional fields when a live session token is\r\n * presented — e.g. sdk-result/ only includes OCR/PII fields for the session\r\n * that owns the entry. Attaches the token opportunistically when we still\r\n * have one; the backend falls back to the public (non-PII) response if it's\r\n * missing, invalid, or already revoked.\r\n */\r\n async publicGet<T>(path: string): Promise<T> {\r\n const headers: Record<string, string> = { \"Content-Type\": \"application/json\" };\r\n if (this.sessionToken) {\r\n headers[\"x-access-token\"] = this.sessionToken;\r\n }\r\n return this._fetch<T>(path, {\r\n method: \"GET\",\r\n headers,\r\n });\r\n }\r\n\r\n /**\r\n * Legacy upload with API key (kept for backward compatibility if needed).\r\n */\r\n async upload<T>(path: string, formData: FormData): Promise<T> {\r\n return this._fetch<T>(path, {\r\n method: \"POST\",\r\n headers: {\r\n \"Authorization\": `Bearer ${this.apiKey}`,\r\n },\r\n body: formData,\r\n });\r\n }\r\n\r\n // ---- Internal ----\r\n\r\n private requireToken(): void {\r\n if (!this.sessionToken) {\r\n throw new AuthError(\r\n \"No session token set. Call sdk.createSession() first.\",\r\n \"NO_SESSION_TOKEN\"\r\n );\r\n }\r\n }\r\n\r\n private async _fetch<T>(path: string, init: RequestInit, retries = 2): Promise<T> {\r\n const controller = new AbortController();\r\n const timer = setTimeout(() => controller.abort(), this.timeout);\r\n\r\n try {\r\n const response = await fetch(`${this.baseUrl}${path}`, {\r\n ...init,\r\n signal: controller.signal,\r\n });\r\n\r\n const contentType = response.headers.get(\"content-type\") || \"\";\r\n if (!contentType.includes(\"application/json\")) {\r\n throw new SDKError(\r\n `Unexpected response from ${path} (${response.status})`,\r\n response.status\r\n );\r\n }\r\n\r\n // Parse the backend's standard response envelope\r\n const envelope: ApiResponse = await response.json();\r\n\r\n if (!response.ok || envelope.status === \"error\") {\r\n const statusCode = response.status;\r\n\r\n // Map specific HTTP statuses to error types\r\n if (statusCode === 401 || statusCode === 403) {\r\n throw new AuthError(\r\n envelope.message || \"Authentication failed\",\r\n envelope.code\r\n );\r\n }\r\n\r\n throw new SDKError(\r\n envelope.message || `Request to ${path} failed`,\r\n statusCode,\r\n envelope.code,\r\n envelope.data as Record<string, unknown>\r\n );\r\n }\r\n\r\n // Return the full envelope for verify responses (so SDK can check status)\r\n // For other endpoints, return unwrapped data\r\n if (path.includes(\"/verify/\")) {\r\n return envelope as T;\r\n }\r\n return envelope.data as T;\r\n\r\n } catch (err: any) {\r\n if (err instanceof SDKError || err instanceof AuthError) throw err;\r\n\r\n // C5: Retry on network errors (not auth/validation errors)\r\n if (retries > 0 && (err.name === \"AbortError\" || err.name === \"TypeError\")) {\r\n clearTimeout(timer);\r\n await new Promise((r) => setTimeout(r, 1000)); // wait 1s before retry\r\n return this._fetch<T>(path, init, retries - 1);\r\n }\r\n\r\n if (err.name === \"AbortError\") {\r\n throw new NetworkError(\"Request timeout. Please check your connection and try again.\");\r\n }\r\n if (err.name === \"TypeError\" && err.message?.includes(\"fetch\")) {\r\n throw new NetworkError(`Network error: ${err.message}`);\r\n }\r\n\r\n throw new SDKError(\r\n err.message || \"Unknown error\",\r\n 0,\r\n \"UNKNOWN_ERROR\"\r\n );\r\n } finally {\r\n clearTimeout(timer);\r\n }\r\n }\r\n}\r\n", "import { HttpClient } from \"../../client/HttpClient\";\r\nimport {\r\n VerifyIdentityRequest,\r\n VerifyIdentityResponse,\r\n} from \"../../types/onboarding\";\r\n\r\n/**\r\n * Onboarding module — identity verification.\r\n *\r\n * All methods use session-token auth (x-access-token header).\r\n */\r\nexport class OnboardingModule {\r\n constructor(private http: HttpClient) {}\r\n\r\n /**\r\n * Verify a user's identity.\r\n *\r\n * POST /v1/onboarding/verify/\r\n * Auth: x-access-token: <sessionToken>\r\n *\r\n * Sends identity_type_id (from ChannelItem.id) and dynamic fields\r\n * collected from the user based on the channel's field definitions.\r\n *\r\n * Example:\r\n * { identity_type_id: 3, fields: { \"bank_verification_number\": \"12345678901\" } }\r\n */\r\n async verify(params: VerifyIdentityRequest): Promise<VerifyIdentityResponse> {\r\n return this.http.sessionRequest<VerifyIdentityResponse>(\r\n \"POST\",\r\n \"/v1/onboarding/verify/\",\r\n {\r\n identity_type_id: params.identity_type_id,\r\n fields: params.fields,\r\n }\r\n );\r\n }\r\n}\r\n", "/**\r\n * Collects device / browser context metadata.\r\n * All values are derived from standard browser APIs — no external library needed.\r\n * Sent to the backend at liveness/create so they appear in the webhook\r\n * request_context block.\r\n */\r\nexport interface DeviceMetadata {\r\n device_type: \"mobile\" | \"desktop\" | \"tablet\";\r\n os_name: string;\r\n browser_timezone: string;\r\n fingerprint_id: string;\r\n}\r\n\r\nfunction detectOs(ua: string): string {\r\n if (/Windows NT/i.test(ua)) return \"Windows\";\r\n if (/Mac OS X|Macintosh/i.test(ua)) return \"macOS\";\r\n if (/Android/i.test(ua)) return \"Android\";\r\n if (/iPhone|iPad|iPod/i.test(ua)) return \"iOS\";\r\n if (/Linux/i.test(ua)) return \"Linux\";\r\n if (/CrOS/i.test(ua)) return \"ChromeOS\";\r\n return \"Unknown\";\r\n}\r\n\r\nfunction getOrCreateFingerprintId(): string {\r\n const KEY = \"_adhere_fid\";\r\n try {\r\n let fid = localStorage.getItem(KEY);\r\n if (!fid) {\r\n fid =\r\n typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\"\r\n ? crypto.randomUUID()\r\n : Math.random().toString(36).slice(2) + Date.now().toString(36);\r\n localStorage.setItem(KEY, fid);\r\n }\r\n return fid;\r\n } catch {\r\n // localStorage unavailable (e.g. private browsing with strict settings)\r\n return Math.random().toString(36).slice(2) + Date.now().toString(36);\r\n }\r\n}\r\n\r\nexport function collectDeviceMetadata(): DeviceMetadata {\r\n const ua = navigator.userAgent;\r\n\r\n const isTablet =\r\n /iPad/i.test(ua) ||\r\n (/Android/i.test(ua) && !/Mobile/i.test(ua));\r\n\r\n const isMobile =\r\n !isTablet &&\r\n /Mobi|Android|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(ua);\r\n\r\n const device_type: DeviceMetadata[\"device_type\"] = isTablet\r\n ? \"tablet\"\r\n : isMobile\r\n ? \"mobile\"\r\n : \"desktop\";\r\n\r\n return {\r\n device_type,\r\n os_name: detectOs(ua),\r\n browser_timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\r\n fingerprint_id: getOrCreateFingerprintId(),\r\n };\r\n}\r\n", "/**\r\n * SDK-wide constants — single source of truth for limits, defaults and\r\n * backend-defined magic values.\r\n */\r\n\r\n// ── Session ──────────────────────────────────────────────────────────────────\r\n\r\n/** Backend session TTL in milliseconds (30 minutes). */\r\nexport const SESSION_TTL_MS = 30 * 60 * 1000;\r\n\r\n/** Warn the user this many ms before session expires. */\r\nexport const SESSION_WARN_BEFORE_MS = 2 * 60 * 1000;\r\n\r\n// ── Network ──────────────────────────────────────────────────────────────────\r\n\r\n/** Default request timeout in milliseconds. */\r\nexport const DEFAULT_TIMEOUT_MS = 30_000;\r\n\r\n/** Number of automatic retries on transient network errors. */\r\nexport const MAX_RETRIES = 2;\r\n\r\n/** Delay between retries in milliseconds. */\r\nexport const RETRY_DELAY_MS = 1_000;\r\n\r\n// ── File uploads ─────────────────────────────────────────────────────────────\r\n\r\n/** Maximum document image size the backend accepts (5 MB). */\r\nexport const MAX_DOCUMENT_BYTES = 5 * 1024 * 1024;\r\n\r\n/** Maximum video size the backend accepts (50 MB). */\r\nexport const MAX_VIDEO_BYTES = 50 * 1024 * 1024;\r\n\r\n/** Maximum snapshot / autoshot size (2 MB). */\r\nexport const MAX_SNAPSHOT_BYTES = 2 * 1024 * 1024;\r\n\r\n/** Accepted MIME types for document images. */\r\nexport const ACCEPTED_IMAGE_TYPES = [\"image/jpeg\", \"image/png\", \"image/webp\"] as const;\r\n\r\n/** JPEG quality used when encoding captured frames (0–1). */\r\nexport const CAPTURE_JPEG_QUALITY = 0.92;\r\n\r\n// ── Liveness scan ────────────────────────────────────────────────────────────\r\n\r\n/** Backend-accepted challenge actions (UPPERCASE). Kept for backward compatibility. */\r\nexport const CHALLENGE_ACTIONS = [\"BLINK\", \"TURN_LEFT\", \"TURN_RIGHT\", \"TURN_HEAD\", \"OPEN_MOUTH\"] as const;\r\n\r\n/**\r\n * Default action tags sent to the backend. The widget no longer runs a\r\n * discrete multi-step challenge (turn left, then right, then open mouth as\r\n * separate gated steps) — it's a single passive scan window where the user\r\n * is asked to blink and turn their head naturally, both within the same\r\n * window. Both tags are sent so the admin dashboard's \"Challenge Actions\"\r\n * label reflects what the user was actually asked to do; the backend does\r\n * not yet score these individually (see LivenessSerializer.get_liveness_\r\n * challenges' docstring) — they're descriptive, not a discrete step gate.\r\n */\r\nexport const DEFAULT_CHALLENGE_ACTIONS = [\"BLINK\", \"TURN_HEAD\"] as const;\r\n\r\n/** Time limit for the natural-motion scan window, in seconds. */\r\nexport const LIVENESS_TIME_LIMIT_SECONDS = 12;\r\n\r\n// ── Camera ───────────────────────────────────────────────────────────────────\r\n\r\n/** Ideal resolution for the front-facing liveness camera. */\r\nexport const CAMERA_IDEAL_WIDTH = 640;\r\nexport const CAMERA_IDEAL_HEIGHT = 480;\r\n\r\n/**\r\n * Ideal resolution for rear-facing document capture camera. Matches the\r\n * document-photo compression target (see compressImage calls in\r\n * DocumentCapture.ts) — requesting less here would cap captured photos\r\n * below what compression is allowed to keep, which is what let camera\r\n * captures come out under-resolution for face-comparison cropping even\r\n * after the compression target itself was raised. `ideal` (not `exact`)\r\n * constraints degrade gracefully on hardware that can't hit this.\r\n */\r\nexport const DOC_CAMERA_IDEAL_WIDTH = 2000;\r\nexport const DOC_CAMERA_IDEAL_HEIGHT = 1500;\r\n\r\n/**\r\n * Video bitrate used by MediaRecorder for liveness recordings — raised from\r\n * an earlier 250k baseline for sharper frames for SmartComply's face\r\n * extractor (see VideoRecorder.ts, the only consumer of this constant).\r\n */\r\nexport const RECORDING_BITS_PER_SECOND = 800_000;\r\n\r\n// ── Face detection ───────────────────────────────────────────────────────────\r\n\r\n/** Max milliseconds to wait for an initial face detection before proceeding. */\r\nexport const FACE_DETECT_TIMEOUT_MS = 10_000;\r\n\r\n/** Polling interval for the face-present check (ms). */\r\nexport const FACE_DETECT_POLL_MS = 100;\r\n\r\n// ── UI / UX ──────────────────────────────────────────────────────────────────\r\n\r\n/** How long (ms) the success overlay is shown before the flow advances. */\r\nexport const RESULT_OVERLAY_DURATION_MS = 2_800;\r\n\r\n/** localStorage key used to persist the browser fingerprint ID. */\r\nexport const FINGERPRINT_STORAGE_KEY = \"_adhere_fid\";\r\n\r\n/** z-index for the SDK overlay — high enough to sit above any app content. */\r\nexport const OVERLAY_Z_INDEX = 99_999;\r\n", "/**\r\n * Camera permission utilities.\r\n *\r\n * Provides helpers to check, request and handle camera permissions in a\r\n * browser-consistent way. All functions are purely async and do NOT throw —\r\n * they return a typed result so callers can handle each case explicitly.\r\n */\r\n\r\nexport type PermissionStatus =\r\n | \"granted\" // camera already accessible\r\n | \"prompt\" // permission dialog will appear on request\r\n | \"denied\" // user previously denied; cannot request again\r\n | \"unsupported\" // Permissions API or getUserMedia not available\r\n | \"unknown\"; // couldn't determine status\r\n\r\nexport interface CameraPermissionResult {\r\n status: PermissionStatus;\r\n /** Human-readable reason (populated on denied / unsupported). */\r\n reason?: string;\r\n}\r\n\r\n/**\r\n * Query the current camera permission state without prompting the user.\r\n *\r\n * Uses the Permissions API when available, falls back to \"unknown\" on older\r\n * browsers (e.g. Safari < 16).\r\n */\r\nexport async function queryCameraPermission(): Promise<CameraPermissionResult> {\r\n if (typeof navigator === \"undefined\" || !navigator.mediaDevices) {\r\n return { status: \"unsupported\", reason: \"getUserMedia is not supported in this browser.\" };\r\n }\r\n\r\n if (!navigator.permissions?.query) {\r\n return { status: \"unknown\" };\r\n }\r\n\r\n try {\r\n const result = await navigator.permissions.query({ name: \"camera\" as PermissionName });\r\n return { status: result.state as PermissionStatus };\r\n } catch {\r\n return { status: \"unknown\" };\r\n }\r\n}\r\n\r\n/**\r\n * Request camera access and return the resulting MediaStream.\r\n *\r\n * Maps browser-specific errors onto actionable `CameraPermissionResult`\r\n * values so callers can show the right UI instead of catching raw DOMExceptions.\r\n *\r\n * @param constraints - Optional MediaStreamConstraints override.\r\n */\r\nexport async function requestCameraAccess(\r\n constraints?: MediaStreamConstraints\r\n): Promise<{ stream: MediaStream; permission: CameraPermissionResult }> {\r\n const defaults: MediaStreamConstraints = {\r\n video: { facingMode: \"user\", width: { ideal: 640 }, height: { ideal: 480 } },\r\n audio: false,\r\n };\r\n\r\n try {\r\n const stream = await navigator.mediaDevices.getUserMedia(constraints ?? defaults);\r\n return { stream, permission: { status: \"granted\" } };\r\n } catch (err: any) {\r\n const name: string = err?.name ?? \"\";\r\n\r\n if (name === \"NotAllowedError\" || name === \"PermissionDeniedError\") {\r\n return {\r\n stream: null as any,\r\n permission: {\r\n status: \"denied\",\r\n reason: \"Camera access was denied. Please allow camera permissions in your browser settings and try again.\",\r\n },\r\n };\r\n }\r\n\r\n if (name === \"NotFoundError\" || name === \"DevicesNotFoundError\") {\r\n return {\r\n stream: null as any,\r\n permission: {\r\n status: \"unsupported\",\r\n reason: \"No camera was found. Please connect a camera and try again.\",\r\n },\r\n };\r\n }\r\n\r\n if (name === \"NotReadableError\" || name === \"TrackStartError\") {\r\n return {\r\n stream: null as any,\r\n permission: {\r\n status: \"unknown\",\r\n reason: \"Camera is already in use by another application. Please close it and try again.\",\r\n },\r\n };\r\n }\r\n\r\n if (name === \"OverconstrainedError\") {\r\n return {\r\n stream: null as any,\r\n permission: {\r\n status: \"unknown\",\r\n reason: \"Camera constraints not supported. Trying with different settings...\",\r\n },\r\n };\r\n }\r\n\r\n return {\r\n stream: null as any,\r\n permission: {\r\n status: \"unknown\",\r\n reason: err?.message ?? \"Unable to access the camera.\",\r\n },\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Whether a failed camera request is worth retrying. \"denied\" (user\r\n * explicitly refused) and \"unsupported\" (no camera device at all) can never\r\n * be fixed by retrying — surfacing the error immediately instead of burning\r\n * several seconds of backoff first. Everything else (busy camera,\r\n * unsupported constraints, anything unrecognized) is treated as\r\n * potentially transient and retried — failing open avoids turning a\r\n * recoverable hiccup into a hard failure on browsers that throw\r\n * non-standard error names (notably Safari/iOS).\r\n */\r\nexport function isRetryableCameraError(status: PermissionStatus): boolean {\r\n return status !== \"denied\" && status !== \"unsupported\";\r\n}\r\n\r\n/**\r\n * Stop all tracks on a MediaStream and release the camera.\r\n * Safe to call with null/undefined.\r\n */\r\nexport function releaseCameraStream(stream: MediaStream | null | undefined): void {\r\n if (!stream) return;\r\n stream.getTracks().forEach((t) => t.stop());\r\n}\r\n\r\n/**\r\n * Returns true if the browser supports the camera APIs needed by the SDK.\r\n */\r\nexport function isCameraSupported(): boolean {\r\n return (\r\n typeof navigator !== \"undefined\" &&\r\n !!navigator.mediaDevices?.getUserMedia &&\r\n typeof MediaRecorder !== \"undefined\"\r\n );\r\n}\r\n", "import { requestCameraAccess, PermissionStatus } from \"./Permission\";\r\n\r\n/** Error thrown by CameraManager.open() — carries the classified permission\r\n * status alongside the friendly message, so callers can decide whether a\r\n * failure is worth retrying without re-deriving it from the raw DOMException. */\r\nexport class CameraAccessError extends Error {\r\n constructor(message: string, public readonly status: PermissionStatus) {\r\n super(message);\r\n this.name = \"CameraAccessError\";\r\n }\r\n}\r\n\r\nexport class CameraManager {\r\n private stream: MediaStream | null = null;\r\n private onInterrupted: (() => void) | null = null;\r\n private trackEndedHandlers: Array<() => void> = [];\r\n\r\n /**\r\n * Opens the camera via requestCameraAccess(), which maps browser errors\r\n * (denied, no device, in-use-by-another-app) to a clean message thrown here.\r\n */\r\n async open(constraints?: MediaStreamConstraints): Promise<MediaStream> {\r\n const defaults: MediaStreamConstraints = {\r\n video: {\r\n facingMode: \"user\",\r\n width: { ideal: 1280 },\r\n height: { ideal: 720 },\r\n },\r\n audio: false,\r\n };\r\n\r\n const { stream, permission } = await requestCameraAccess(constraints || defaults);\r\n if (!stream) {\r\n throw new CameraAccessError(permission.reason || \"Unable to access the camera.\", permission.status);\r\n }\r\n\r\n this.stream = stream;\r\n this._watchTracks();\r\n\r\n return this.stream;\r\n }\r\n\r\n getStream(): MediaStream | null {\r\n return this.stream;\r\n }\r\n\r\n /**\r\n * Adopt an externally-obtained stream (e.g. a pre-warmed getUserMedia\r\n * stream) so stop() also releases it. Without this, a stream assigned\r\n * directly by a caller instead of via open() is never tracked here and\r\n * stop() becomes a no-op for it, leaking the camera.\r\n */\r\n setStream(stream: MediaStream): void {\r\n this.stream = stream;\r\n this._watchTracks();\r\n }\r\n\r\n /**\r\n * Register a callback fired the moment any track in the current stream\r\n * ends unexpectedly (OS revokes camera permission mid-session, another\r\n * app steals the camera, device sleeps and the driver drops the feed).\r\n * Without this, a dead stream is silently invisible — the video element\r\n * just freezes on its last frame and face detection quietly fails\r\n * forever with no indication anything went wrong.\r\n */\r\n onStreamInterrupted(callback: () => void): void {\r\n this.onInterrupted = callback;\r\n }\r\n\r\n private _watchTracks(): void {\r\n this.trackEndedHandlers = [];\r\n if (!this.stream) return;\r\n this.stream.getTracks().forEach((track) => {\r\n const handler = () => {\r\n // A track we intentionally stopped (via stop()) also fires \"ended\" —\r\n // only treat this as an interruption if we still think we have a\r\n // live stream (stop() nulls this.stream before that would happen).\r\n if (this.stream) {\r\n this.onInterrupted?.();\r\n }\r\n };\r\n track.addEventListener(\"ended\", handler);\r\n this.trackEndedHandlers.push(() => track.removeEventListener(\"ended\", handler));\r\n });\r\n }\r\n\r\n stop(): void {\r\n if (this.stream) {\r\n this.stream.getTracks().forEach((track) => track.stop());\r\n this.stream = null;\r\n }\r\n this.trackEndedHandlers.forEach((remove) => remove());\r\n this.trackEndedHandlers = [];\r\n }\r\n}\r\n", "import { RECORDING_BITS_PER_SECOND } from \"../utils/constants\";\r\n\r\nexport class VideoRecorder {\r\n private recorder: MediaRecorder | null = null;\r\n private chunks: Blob[] = [];\r\n private startedAt: number = 0;\r\n private onRecordingError: (() => void) | null = null;\r\n\r\n /** Fires immediately on a mid-recording error, unlike stop()'s onerror which only fires when stop() is later called. */\r\n onError(callback: () => void): void {\r\n this.onRecordingError = callback;\r\n }\r\n\r\n start(stream: MediaStream): void {\r\n this.chunks = [];\r\n\r\n const mimeType = MediaRecorder.isTypeSupported(\"video/webm;codecs=vp9\")\r\n ? \"video/webm;codecs=vp9\"\r\n : \"video/webm\";\r\n\r\n this.recorder = new MediaRecorder(stream, {\r\n mimeType,\r\n videoBitsPerSecond: RECORDING_BITS_PER_SECOND,\r\n });\r\n\r\n this.recorder.ondataavailable = (e) => {\r\n if (e.data.size > 0) {\r\n this.chunks.push(e.data);\r\n }\r\n };\r\n\r\n this.recorder.addEventListener(\"error\", () => {\r\n this.onRecordingError?.();\r\n });\r\n\r\n this.startedAt = Date.now();\r\n this.recorder.start();\r\n }\r\n\r\n stop(): Promise<{ blob: Blob; durationSeconds: number }> {\r\n return new Promise((resolve, reject) => {\r\n if (!this.recorder || this.recorder.state === \"inactive\") {\r\n reject(new Error(\"Recorder is not active\"));\r\n return;\r\n }\r\n\r\n const stoppedAt = Date.now();\r\n\r\n this.recorder.onstop = () => {\r\n const blob = new Blob(this.chunks, { type: \"video/webm\" });\r\n const durationSeconds = parseFloat(\r\n ((stoppedAt - this.startedAt) / 1000).toFixed(2)\r\n );\r\n this.chunks = [];\r\n resolve({ blob, durationSeconds });\r\n };\r\n\r\n this.recorder.onerror = () => {\r\n reject(new Error(\"Recording failed\"));\r\n };\r\n\r\n this.recorder.stop();\r\n });\r\n }\r\n\r\n isRecording(): boolean {\r\n return this.recorder?.state === \"recording\";\r\n }\r\n}\r\n", "var t=\"undefined\"!=typeof self?self:{};function e(e,n){t:{for(var r=[\"CLOSURE_FLAGS\"],i=t,s=0;s<r.length;s++)if(null==(i=i[r[s]])){r=null;break t}r=i}return null!=(e=r&&r[e])?e:n}function n(){throw Error(\"Invalid UTF8\")}function r(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}let i,s;const o=\"undefined\"!=typeof TextDecoder;let a;const c=\"undefined\"!=typeof TextEncoder;function h(t){if(c)t=(a||=new TextEncoder).encode(t);else{let n=0;const r=new Uint8Array(3*t.length);for(let i=0;i<t.length;i++){var e=t.charCodeAt(i);if(e<128)r[n++]=e;else{if(e<2048)r[n++]=e>>6|192;else{if(e>=55296&&e<=57343){if(e<=56319&&i<t.length){const s=t.charCodeAt(++i);if(s>=56320&&s<=57343){e=1024*(e-55296)+s-56320+65536,r[n++]=e>>18|240,r[n++]=e>>12&63|128,r[n++]=e>>6&63|128,r[n++]=63&e|128;continue}i--}e=65533}r[n++]=e>>12|224,r[n++]=e>>6&63|128}r[n++]=63&e|128}}t=n===r.length?r:r.subarray(0,n)}return t}function u(e){t.setTimeout((()=>{throw e}),0)}var l,f=e(610401301,!1),d=e(748402147,!0),p=e(824648567,!0),g=e(824656860,e(1,!0));function m(){var e=t.navigator;return e&&(e=e.userAgent)?e:\"\"}const y=t.navigator;function _(t){return _[\" \"](t),t}l=y&&y.userAgentData||null,_[\" \"]=function(){};const v={};let E=null;function w(t){const e=t.length;let n=3*e/4;n%3?n=Math.floor(n):-1!=\"=.\".indexOf(t[e-1])&&(n=-1!=\"=.\".indexOf(t[e-2])?n-2:n-1);const r=new Uint8Array(n);let i=0;return function(t,e){function n(e){for(;r<t.length;){const e=t.charAt(r++),n=E[e];if(null!=n)return n;if(!/^[\\s\\xa0]*$/.test(e))throw Error(\"Unknown base64 encoding at char: \"+e)}return e}T();let r=0;for(;;){const t=n(-1),r=n(0),i=n(64),s=n(64);if(64===s&&-1===t)break;e(t<<2|r>>4),64!=i&&(e(r<<4&240|i>>2),64!=s&&e(i<<6&192|s))}}(t,(function(t){r[i++]=t})),i!==n?r.subarray(0,i):r}function T(){if(!E){E={};var t=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\".split(\"\"),e=[\"+/=\",\"+/\",\"-_=\",\"-_.\",\"-_\"];for(let n=0;n<5;n++){const r=t.concat(e[n].split(\"\"));v[n]=r;for(let t=0;t<r.length;t++){const e=r[t];void 0===E[e]&&(E[e]=t)}}}}var A=\"undefined\"!=typeof Uint8Array,b=!(!(f&&l&&l.brands.length>0)&&(-1!=m().indexOf(\"Trident\")||-1!=m().indexOf(\"MSIE\")))&&\"function\"==typeof btoa;const k=/[-_.]/g,S={\"-\":\"+\",_:\"/\",\".\":\"=\"};function x(t){return S[t]||\"\"}function L(t){if(!b)return w(t);t=k.test(t)?t.replace(k,x):t,t=atob(t);const e=new Uint8Array(t.length);for(let n=0;n<t.length;n++)e[n]=t.charCodeAt(n);return e}function R(t){return A&&null!=t&&t instanceof Uint8Array}var I={};function F(){return C||=new P(null,I)}function M(t){N(I);var e=t.g;return null==(e=null==e||R(e)?e:\"string\"==typeof e?L(e):null)?e:t.g=e}var P=class{h(){return new Uint8Array(M(this)||0)}constructor(t,e){if(N(e),this.g=t,null!=t&&0===t.length)throw Error(\"ByteString should be constructed with non-empty values\")}};let C,O;function N(t){if(t!==I)throw Error(\"illegal external caller\")}function U(t,e){t.__closure__error__context__984382||(t.__closure__error__context__984382={}),t.__closure__error__context__984382.severity=e}function D(t){return U(t=Error(t),\"warning\"),t}function B(t,e){if(null!=t){var n=O??={},r=n[t]||0;r>=e||(n[t]=r+1,U(t=Error(),\"incident\"),u(t))}}function G(){return\"function\"==typeof BigInt}var j=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol();function V(t,e,n=!1){return\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol()?n&&Symbol.for&&t?Symbol.for(t):null!=t?Symbol(t):Symbol():e}var X=V(\"jas\",void 0,!0),H=V(void 0,\"0di\"),W=V(void 0,\"1oa\"),z=V(void 0,Symbol()),K=V(void 0,\"0ub\"),Y=V(void 0,\"0ubs\"),q=V(void 0,\"0ubsb\"),$=V(void 0,\"0actk\"),J=V(\"m_m\",\"Pa\",!0),Z=V();const Q={Ga:{value:0,configurable:!0,writable:!0,enumerable:!1}},tt=Object.defineProperties,et=j?X:\"Ga\";var nt;const rt=[];function it(t,e){j||et in t||tt(t,Q),t[et]|=e}function st(t,e){j||et in t||tt(t,Q),t[et]=e}function ot(t){return it(t,34),t}function at(t){return it(t,8192),t}st(rt,7),nt=Object.freeze(rt);var ct={};function ht(t,e){return void 0===e?t.h!==ut&&!!(2&(0|t.v[et])):!!(2&e)&&t.h!==ut}const ut={};function lt(t,e){if(null!=t)if(\"string\"==typeof t)t=t?new P(t,I):F();else if(t.constructor!==P)if(R(t))t=t.length?new P(new Uint8Array(t),I):F();else{if(!e)throw Error();t=void 0}return t}class ft{constructor(t,e,n){this.g=t,this.h=e,this.l=n}next(){const t=this.g.next();return t.done||(t.value=this.h.call(this.l,t.value)),t}[Symbol.iterator](){return this}}var dt=Object.freeze({});function pt(t,e,n){const r=128&e?0:-1,i=t.length;var s;(s=!!i)&&(s=null!=(s=t[i-1])&&\"object\"==typeof s&&s.constructor===Object);const o=i+(s?-1:0);for(e=128&e?1:0;e<o;e++)n(e-r,t[e]);if(s){t=t[i-1];for(const e in t)!isNaN(e)&&n(+e,t[e])}}var gt={};function mt(t){return 128&t?gt:void 0}function yt(t){return t.Na=!0,t}var _t=yt((t=>\"number\"==typeof t)),vt=yt((t=>\"string\"==typeof t)),Et=yt((t=>\"boolean\"==typeof t)),wt=\"function\"==typeof t.BigInt&&\"bigint\"==typeof t.BigInt(0);function Tt(t){var e=t;if(vt(e)){if(!/^\\s*(?:-?[1-9]\\d*|0)?\\s*$/.test(e))throw Error(String(e))}else if(_t(e)&&!Number.isSafeInteger(e))throw Error(String(e));return wt?BigInt(t):t=Et(t)?t?\"1\":\"0\":vt(t)?t.trim()||\"0\":String(t)}var At=yt((t=>wt?t>=kt&&t<=xt:\"-\"===t[0]?Lt(t,bt):Lt(t,St)));const bt=Number.MIN_SAFE_INTEGER.toString(),kt=wt?BigInt(Number.MIN_SAFE_INTEGER):void 0,St=Number.MAX_SAFE_INTEGER.toString(),xt=wt?BigInt(Number.MAX_SAFE_INTEGER):void 0;function Lt(t,e){if(t.length>e.length)return!1;if(t.length<e.length||t===e)return!0;for(let n=0;n<t.length;n++){const r=t[n],i=e[n];if(r>i)return!1;if(r<i)return!0}}const Rt=\"function\"==typeof Uint8Array.prototype.slice;let It,Ft=0,Mt=0;function Pt(t){const e=t>>>0;Ft=e,Mt=(t-e)/4294967296>>>0}function Ct(t){if(t<0){Pt(-t);const[e,n]=Ht(Ft,Mt);Ft=e>>>0,Mt=n>>>0}else Pt(t)}function Ot(t){const e=It||=new DataView(new ArrayBuffer(8));e.setFloat32(0,+t,!0),Mt=0,Ft=e.getUint32(0,!0)}function Nt(t,e){const n=4294967296*e+(t>>>0);return Number.isSafeInteger(n)?n:Gt(t,e)}function Ut(t,e){return Tt(G()?BigInt.asUintN(64,(BigInt(e>>>0)<<BigInt(32))+BigInt(t>>>0)):Gt(t,e))}function Dt(t,e){const n=2147483648&e;return n&&(e=~e>>>0,0==(t=1+~t>>>0)&&(e=e+1>>>0)),\"number\"==typeof(t=Nt(t,e))?n?-t:t:n?\"-\"+t:t}function Bt(t,e){return G()?Tt(BigInt.asIntN(64,(BigInt.asUintN(32,BigInt(e))<<BigInt(32))+BigInt.asUintN(32,BigInt(t)))):Tt(Vt(t,e))}function Gt(t,e){if(t>>>=0,(e>>>=0)<=2097151)var n=\"\"+(4294967296*e+t);else G()?n=\"\"+(BigInt(e)<<BigInt(32)|BigInt(t)):(t=(16777215&t)+6777216*(n=16777215&(t>>>24|e<<8))+6710656*(e=e>>16&65535),n+=8147497*e,e*=2,t>=1e7&&(n+=t/1e7>>>0,t%=1e7),n>=1e7&&(e+=n/1e7>>>0,n%=1e7),n=e+jt(n)+jt(t));return n}function jt(t){return t=String(t),\"0000000\".slice(t.length)+t}function Vt(t,e){if(2147483648&e)if(G())t=\"\"+(BigInt(0|e)<<BigInt(32)|BigInt(t>>>0));else{const[n,r]=Ht(t,e);t=\"-\"+Gt(n,r)}else t=Gt(t,e);return t}function Xt(t){if(t.length<16)Ct(Number(t));else if(G())t=BigInt(t),Ft=Number(t&BigInt(4294967295))>>>0,Mt=Number(t>>BigInt(32)&BigInt(4294967295));else{const e=+(\"-\"===t[0]);Mt=Ft=0;const n=t.length;for(let r=e,i=(n-e)%6+e;i<=n;r=i,i+=6){const e=Number(t.slice(r,i));Mt*=1e6,Ft=1e6*Ft+e,Ft>=4294967296&&(Mt+=Math.trunc(Ft/4294967296),Mt>>>=0,Ft>>>=0)}if(e){const[t,e]=Ht(Ft,Mt);Ft=t,Mt=e}}}function Ht(t,e){return e=~e,t?t=1+~t:e+=1,[t,e]}function Wt(t){return Array.prototype.slice.call(t)}const zt=\"function\"==typeof BigInt?BigInt.asIntN:void 0,Kt=\"function\"==typeof BigInt?BigInt.asUintN:void 0,Yt=Number.isSafeInteger,qt=Number.isFinite,$t=Math.trunc,Jt=Tt(0);function Zt(t){if(null!=t&&\"number\"!=typeof t)throw Error(`Value of float/double field must be a number, found ${typeof t}: ${t}`);return t}function Qt(t){return null==t||\"number\"==typeof t?t:\"NaN\"===t||\"Infinity\"===t||\"-Infinity\"===t?Number(t):void 0}function te(t){if(null!=t&&\"boolean\"!=typeof t){var e=typeof t;throw Error(`Expected boolean but got ${\"object\"!=e?e:t?Array.isArray(t)?\"array\":e:\"null\"}: ${t}`)}return t}function ee(t){return null==t||\"boolean\"==typeof t?t:\"number\"==typeof t?!!t:void 0}const ne=/^-?([1-9][0-9]*|0)(\\.[0-9]+)?$/;function re(t){switch(typeof t){case\"bigint\":return!0;case\"number\":return qt(t);case\"string\":return ne.test(t);default:return!1}}function ie(t){if(null==t)return t;if(\"string\"==typeof t&&t)t=+t;else if(\"number\"!=typeof t)return;return qt(t)?0|t:void 0}function se(t){if(null==t)return t;if(\"string\"==typeof t&&t)t=+t;else if(\"number\"!=typeof t)return;return qt(t)?t>>>0:void 0}function oe(t){const e=t.length;return(\"-\"===t[0]?e<20||20===e&&t<=\"-9223372036854775808\":e<19||19===e&&t<=\"9223372036854775807\")?t:(Xt(t),Vt(Ft,Mt))}function ae(t){return t=$t(t),Yt(t)||(Ct(t),t=Dt(Ft,Mt)),t}function ce(t){var e=$t(Number(t));return Yt(e)?String(e):(-1!==(e=t.indexOf(\".\"))&&(t=t.substring(0,e)),oe(t))}function he(t){var e=$t(Number(t));return Yt(e)?Tt(e):(-1!==(e=t.indexOf(\".\"))&&(t=t.substring(0,e)),G()?Tt(zt(64,BigInt(t))):Tt(oe(t)))}function ue(t){return Yt(t)?t=Tt(ae(t)):(t=$t(t),Yt(t)?t=String(t):(Ct(t),t=Vt(Ft,Mt)),t=Tt(t)),t}function le(t){return null==t?t:\"bigint\"==typeof t?(At(t)?t=Number(t):(t=zt(64,t),t=At(t)?Number(t):String(t)),t):re(t)?\"number\"==typeof t?ae(t):ce(t):void 0}function fe(t){const e=typeof t;return null==t?t:\"bigint\"===e?Tt(zt(64,t)):re(t)?\"string\"===e?he(t):ue(t):void 0}function de(t){if(\"string\"!=typeof t)throw Error();return t}function pe(t){if(null!=t&&\"string\"!=typeof t)throw Error();return t}function ge(t){return null==t||\"string\"==typeof t?t:void 0}function me(t,e,n,r){return null!=t&&t[J]===ct?t:Array.isArray(t)?((r=(n=0|t[et])|32&r|2&r)!==n&&st(t,r),new e(t)):(n?2&r?((t=e[H])||(ot((t=new e).v),t=e[H]=t),e=t):e=new e:e=void 0,e)}function ye(t,e,n){if(e)t:{if(!re(e=t))throw D(\"int64\");switch(typeof e){case\"string\":e=he(e);break t;case\"bigint\":e=Tt(zt(64,e));break t;default:e=ue(e)}}else e=fe(t);return null==(t=e)?n?Jt:void 0:t}const _e={};let ve=function(){try{return _(new class extends Map{constructor(){super()}}),!1}catch{return!0}}();class Ee{constructor(){this.g=new Map}get(t){return this.g.get(t)}set(t,e){return this.g.set(t,e),this.size=this.g.size,this}delete(t){return t=this.g.delete(t),this.size=this.g.size,t}clear(){this.g.clear(),this.size=this.g.size}has(t){return this.g.has(t)}entries(){return this.g.entries()}keys(){return this.g.keys()}values(){return this.g.values()}forEach(t,e){return this.g.forEach(t,e)}[Symbol.iterator](){return this.entries()}}const we=ve?(Object.setPrototypeOf(Ee.prototype,Map.prototype),Object.defineProperties(Ee.prototype,{size:{value:0,configurable:!0,enumerable:!0,writable:!0}}),Ee):class extends Map{constructor(){super()}};function Te(t){return t}function Ae(t){if(2&t.J)throw Error(\"Cannot mutate an immutable Map\")}var be=class extends we{constructor(t,e,n=Te,r=Te){super(),this.J=0|t[et],this.K=e,this.S=n,this.fa=this.K?ke:r;for(let i=0;i<t.length;i++){const s=t[i],o=n(s[0],!1,!0);let a=s[1];e?void 0===a&&(a=null):a=r(s[1],!1,!0,void 0,void 0,this.J),super.set(o,a)}}V(t){return at(Array.from(super.entries(),t))}clear(){Ae(this),super.clear()}delete(t){return Ae(this),super.delete(this.S(t,!0,!1))}entries(){if(this.K){var t=super.keys();t=new ft(t,Se,this)}else t=super.entries();return t}values(){if(this.K){var t=super.keys();t=new ft(t,be.prototype.get,this)}else t=super.values();return t}forEach(t,e){this.K?super.forEach(((n,r,i)=>{t.call(e,i.get(r),r,i)})):super.forEach(t,e)}set(t,e){return Ae(this),null==(t=this.S(t,!0,!1))?this:null==e?(super.delete(t),this):super.set(t,this.fa(e,!0,!0,this.K,!1,this.J))}Ma(t){const e=this.S(t[0],!1,!0);t=t[1],t=this.K?void 0===t?null:t:this.fa(t,!1,!0,void 0,!1,this.J),super.set(e,t)}has(t){return super.has(this.S(t,!1,!1))}get(t){t=this.S(t,!1,!1);const e=super.get(t);if(void 0!==e){var n=this.K;return n?((n=this.fa(e,!1,!0,n,this.ra,this.J))!==e&&super.set(t,n),n):e}}[Symbol.iterator](){return this.entries()}};function ke(t,e,n,r,i,s){return t=me(t,r,n,s),i&&(t=Ke(t)),t}function Se(t){return[t,this.get(t)]}let xe;function Le(){return xe||=new be(ot([]),void 0,void 0,void 0,_e)}function Re(t){return z?t[z]:void 0}function Ie(t,e){for(const n in t)!isNaN(n)&&e(t,+n,t[n])}be.prototype.toJSON=void 0;var Fe=class{};const Me={Ka:!0};function Pe(t,e){e<100||B(Y,1)}function Ce(t,e,n,r){const i=void 0!==r;r=!!r;var s,o=z;!i&&j&&o&&(s=t[o])&&Ie(s,Pe),o=[];var a=t.length;let c;s=4294967295;let h=!1;const u=!!(64&e),l=u?128&e?0:-1:void 0;1&e||(c=a&&t[a-1],null!=c&&\"object\"==typeof c&&c.constructor===Object?s=--a:c=void 0,!u||128&e||i||(h=!0,s=s-l+l)),e=void 0;for(var f=0;f<a;f++){let i=t[f];if(null!=i&&null!=(i=n(i,r)))if(u&&f>=s){const t=f-l;(e??={})[t]=i}else o[f]=i}if(c)for(let t in c){if(null==(a=c[t])||null==(a=n(a,r)))continue;let i;f=+t,u&&!Number.isNaN(f)&&(i=f+l)<s?o[i]=a:(e??={})[t]=a}return e&&(h?o.push(e):o[s]=e),i&&z&&(t=Re(t))&&t instanceof Fe&&(o[z]=function(t){const e=new Fe;return Ie(t,((t,n,r)=>{e[n]=Wt(r)})),e.da=t.da,e}(t)),o}function Oe(t){return t[0]=Ne(t[0]),t[1]=Ne(t[1]),t}function Ne(t){switch(typeof t){case\"number\":return Number.isFinite(t)?t:\"\"+t;case\"bigint\":return At(t)?Number(t):\"\"+t;case\"boolean\":return t?1:0;case\"object\":if(Array.isArray(t)){var e=0|t[et];return 0===t.length&&1&e?void 0:Ce(t,e,Ne)}if(null!=t&&t[J]===ct)return Ue(t);if(t instanceof P){if(null==(e=t.g))t=\"\";else if(\"string\"==typeof e)t=e;else{if(b){for(var n=\"\",r=0,i=e.length-10240;r<i;)n+=String.fromCharCode.apply(null,e.subarray(r,r+=10240));n+=String.fromCharCode.apply(null,r?e.subarray(r):e),e=btoa(n)}else{void 0===n&&(n=0),T(),n=v[n],r=Array(Math.floor(e.length/3)),i=n[64]||\"\";let t=0,h=0;for(;t<e.length-2;t+=3){var s=e[t],o=e[t+1],a=e[t+2],c=n[s>>2];s=n[(3&s)<<4|o>>4],o=n[(15&o)<<2|a>>6],a=n[63&a],r[h++]=c+s+o+a}switch(c=0,a=i,e.length-t){case 2:a=n[(15&(c=e[t+1]))<<2]||i;case 1:e=e[t],r[h]=n[e>>2]+n[(3&e)<<4|c>>4]+a+i}e=r.join(\"\")}t=t.g=e}return t}return t instanceof be?t=0!==t.size?t.V(Oe):void 0:void 0}return t}function Ue(t){return Ce(t=t.v,0|t[et],Ne)}let De,Be;function Ge(t,e){return je(t,e[0],e[1])}function je(t,e,n,r=0){if(null==t){var i=32;n?(t=[n],i|=128):t=[],e&&(i=-16760833&i|(1023&e)<<14)}else{if(!Array.isArray(t))throw Error(\"narr\");if(i=0|t[et],d&&1&i)throw Error(\"rfarr\");if(2048&i&&!(2&i)&&function(){if(d)throw Error(\"carr\");B($,5)}(),256&i)throw Error(\"farr\");if(64&i)return(i|r)!==i&&st(t,i|r),t;if(n&&(i|=128,n!==t[0]))throw Error(\"mid\");t:{i|=64;var s=(n=t).length;if(s){var o=s-1;const t=n[o];if(null!=t&&\"object\"==typeof t&&t.constructor===Object){if((o-=e=128&i?0:-1)>=1024)throw Error(\"pvtlmt\");for(var a in t)(s=+a)<o&&(n[s+e]=t[a],delete t[a]);i=-16760833&i|(1023&o)<<14;break t}}if(e){if((a=Math.max(e,s-(128&i?0:-1)))>1024)throw Error(\"spvt\");i=-16760833&i|(1023&a)<<14}}}return st(t,64|i|r),t}function Ve(t,e){if(\"object\"!=typeof t)return t;if(Array.isArray(t)){var n=0|t[et];return 0===t.length&&1&n?void 0:Xe(t,n,e)}if(null!=t&&t[J]===ct)return We(t);if(t instanceof be){if(2&(e=t.J))return t;if(!t.size)return;if(n=ot(t.V()),t.K)for(t=0;t<n.length;t++){const r=n[t];let i=r[1];i=null==i||\"object\"!=typeof i?void 0:null!=i&&i[J]===ct?We(i):Array.isArray(i)?Xe(i,0|i[et],!!(32&e)):void 0,r[1]=i}return n}return t instanceof P?t:void 0}function Xe(t,e,n){return 2&e||(!n||4096&e||16&e?t=ze(t,e,!1,n&&!(16&e)):(it(t,34),4&e&&Object.freeze(t))),t}function He(t,e,n){return t=new t.constructor(e),n&&(t.h=ut),t.m=ut,t}function We(t){const e=t.v,n=0|e[et];return ht(t,n)?t:Je(t,e,n)?He(t,e):ze(e,n)}function ze(t,e,n,r){return r??=!!(34&e),t=Ce(t,e,Ve,r),r=32,n&&(r|=2),st(t,e=16769217&e|r),t}function Ke(t){const e=t.v,n=0|e[et];return ht(t,n)?Je(t,e,n)?He(t,e,!0):new t.constructor(ze(e,n,!1)):t}function Ye(t){if(t.h!==ut)return!1;var e=t.v;return it(e=ze(e,0|e[et]),2048),t.v=e,t.h=void 0,t.m=void 0,!0}function qe(t){if(!Ye(t)&&ht(t,0|t.v[et]))throw Error()}function $e(t,e){void 0===e&&(e=0|t[et]),32&e&&!(4096&e)&&st(t,4096|e)}function Je(t,e,n){return!!(2&n)||!(!(32&n)||4096&n)&&(st(e,2|n),t.h=ut,!0)}const Ze=Tt(0),Qe={};function tn(t,e,n,r,i){if(null!==(e=en(t.v,e,n,i))||r&&t.m!==ut)return e}function en(t,e,n,r){if(-1===e)return null;const i=e+(n?0:-1),s=t.length-1;let o,a;if(!(s<1+(n?0:-1))){if(i>=s)if(o=t[s],null!=o&&\"object\"==typeof o&&o.constructor===Object)n=o[e],a=!0;else{if(i!==s)return;n=o}else n=t[i];if(r&&null!=n){if(null==(r=r(n)))return r;if(!Object.is(r,n))return a?o[e]=r:t[i]=r,r}return n}}function nn(t,e,n,r){qe(t),rn(t=t.v,0|t[et],e,n,r)}function rn(t,e,n,r,i){const s=n+(i?0:-1);var o=t.length-1;if(o>=1+(i?0:-1)&&s>=o){const i=t[o];if(null!=i&&\"object\"==typeof i&&i.constructor===Object)return i[n]=r,e}return s<=o?(t[s]=r,e):(void 0!==r&&(n>=(o=(e??=0|t[et])>>14&1023||536870912)?null!=r&&(t[o+(i?0:-1)]={[n]:r}):t[s]=r),e)}function sn(){return void 0===dt?2:4}function on(t,e,n,r,i){let s=t.v,o=0|s[et];r=ht(t,o)?1:r,i=!!i||3===r,2===r&&Ye(t)&&(s=t.v,o=0|s[et]);let a=(t=cn(s,e))===nt?7:0|t[et],c=hn(a,o);var h=!(4&c);if(h){4&c&&(t=Wt(t),a=0,c=xn(c,o),o=rn(s,o,e,t));let r=0,i=0;for(;r<t.length;r++){const e=n(t[r]);null!=e&&(t[i++]=e)}i<r&&(t.length=i),n=-513&(4|c),c=n&=-1025,c&=-4097}return c!==a&&(st(t,c),2&c&&Object.freeze(t)),an(t,c,s,o,e,r,h,i)}function an(t,e,n,r,i,s,o,a){let c=e;return 1===s||4===s&&(2&e||!(16&e)&&32&r)?un(e)||((e|=!t.length||o&&!(4096&e)||32&r&&!(4096&e||16&e)?2:256)!==c&&st(t,e),Object.freeze(t)):(2===s&&un(e)&&(t=Wt(t),c=0,e=xn(e,r),r=rn(n,r,i,t)),un(e)||(a||(e|=16),e!==c&&st(t,e))),2&e||!(4096&e||16&e)||$e(n,r),t}function cn(t,e,n){return t=en(t,e,n),Array.isArray(t)?t:nt}function hn(t,e){return 2&e&&(t|=2),1|t}function un(t){return!!(2&t)&&!!(4&t)||!!(256&t)}function ln(t){return lt(t,!0)}function fn(t){t=Wt(t);for(let e=0;e<t.length;e++){const n=t[e]=Wt(t[e]);Array.isArray(n[1])&&(n[1]=ot(n[1]))}return at(t)}function dn(t,e,n,r){qe(t),rn(t=t.v,0|t[et],e,(\"0\"===r?0===Number(n):n===r)?void 0:n)}function pn(t,e,n){if(2&e)throw Error();const r=mt(e);let i=cn(t,n,r),s=i===nt?7:0|i[et],o=hn(s,e);return(2&o||un(o)||16&o)&&(o===s||un(o)||st(i,o),i=Wt(i),s=0,o=xn(o,e),rn(t,e,n,i,r)),o&=-13,o!==s&&st(i,o),i}function gn(t,e){var n=Ds;return _n(mn(t=t.v),t,void 0,n)===e?e:-1}function mn(t){if(j)return t[W]??(t[W]=new Map);if(W in t)return t[W];const e=new Map;return Object.defineProperty(t,W,{value:e}),e}function yn(t,e,n,r,i){const s=mn(t),o=_n(s,t,e,n,i);return o!==r&&(o&&(e=rn(t,e,o,void 0,i)),s.set(n,r)),e}function _n(t,e,n,r,i){let s=t.get(r);if(null!=s)return s;s=0;for(let t=0;t<r.length;t++){const o=r[t];null!=en(e,o,i)&&(0!==s&&(n=rn(e,n,s,void 0,i)),s=o)}return t.set(r,s),s}function vn(t,e,n){let r=0|t[et];const i=mt(r),s=en(t,n,i);let o;if(null!=s&&s[J]===ct){if(!ht(s))return Ye(s),s.v;o=s.v}else Array.isArray(s)&&(o=s);if(o){const t=0|o[et];2&t&&(o=ze(o,t))}return o=Ge(o,e),o!==s&&rn(t,r,n,o,i),o}function En(t,e,n,r,i){let s=!1;if(null!=(r=en(t,r,i,(t=>{const r=me(t,n,!1,e);return s=r!==t&&null!=r,r}))))return s&&!ht(r)&&$e(t,e),r}function wn(t,e,n,r){let i=t.v,s=0|i[et];if(null==(e=En(i,s,e,n,r)))return e;if(s=0|i[et],!ht(t,s)){const o=Ke(e);o!==e&&(Ye(t)&&(i=t.v,s=0|i[et]),s=rn(i,s,n,e=o,r),$e(i,s))}return e}function Tn(t,e,n,r,i,s,o,a){var c=ht(t,n);s=c?1:s,o=!!o||3===s,c=a&&!c,(2===s||c)&&Ye(t)&&(n=0|(e=t.v)[et]);var h=(t=cn(e,i))===nt?7:0|t[et],u=hn(h,n);if(a=!(4&u)){var l=t,f=n;const e=!!(2&u);e&&(f|=2);let i=!e,s=!0,o=0,a=0;for(;o<l.length;o++){const t=me(l[o],r,!1,f);if(t instanceof r){if(!e){const e=ht(t);i&&=!e,s&&=e}l[a++]=t}}a<o&&(l.length=a),u|=4,u=s?-4097&u:4096|u,u=i?8|u:-9&u}if(u!==h&&(st(t,u),2&u&&Object.freeze(t)),c&&!(8&u||!t.length&&(1===s||4===s&&(2&u||!(16&u)&&32&n)))){for(un(u)&&(t=Wt(t),u=xn(u,n),n=rn(e,n,i,t)),r=t,c=u,h=0;h<r.length;h++)(l=r[h])!==(u=Ke(l))&&(r[h]=u);c|=8,st(t,u=c=r.length?4096|c:-4097&c)}return an(t,u,e,n,i,s,a,o)}function An(t,e,n){const r=t.v;return Tn(t,r,0|r[et],e,n,sn(),!1,!0)}function bn(t){return null==t&&(t=void 0),t}function kn(t,e,n,r,i){return nn(t,n,r=bn(r),i),r&&!ht(r)&&$e(t.v),t}function Sn(t,e,n,r){t:{var i=r=bn(r);qe(t);const s=t.v;let o=0|s[et];if(null==i){const t=mn(s);if(_n(t,s,o,n)!==e)break t;t.set(n,0)}else o=yn(s,o,n,e);rn(s,o,e,i)}r&&!ht(r)&&$e(t.v)}function xn(t,e){return-273&(2&e?2|t:-3&t)}function Ln(t,e,n,r){var i=r;qe(t),t=Tn(t,r=t.v,0|r[et],n,e,2,!0),i=null!=i?i:new n,t.push(i),e=n=t===nt?7:0|t[et],(i=ht(i))?(n&=-9,1===t.length&&(n&=-4097)):n|=4096,n!==e&&st(t,n),i||$e(r)}function Rn(t,e,n){return ie(tn(t,e,void 0,n))}function In(t){return(g?tn(t,2,void 0,void 0,fe):fe(tn(t,2)))??Ze}function Fn(t,e){return tn(t,e,void 0,void 0,Qt)??0}function Mn(t,e,n){if(null!=n){if(\"number\"!=typeof n)throw D(\"int32\");if(!qt(n))throw D(\"int32\");n|=0}nn(t,e,n)}function Pn(t,e,n){nn(t,e,Zt(n))}function Cn(t,e,n){dn(t,e,pe(n),\"\")}function On(t,e,n){{qe(t);const o=t.v;let a=0|o[et];if(null==n)rn(o,a,e);else{var r=t=n===nt?7:0|n[et],i=un(t),s=i||Object.isFrozen(n);for(i||(t=0),s||(n=Wt(n),r=0,t=xn(t,a),s=!1),t|=5,t|=(4&t?512&t?512:1024&t?1024:0:void 0)??(g?1024:0),i=0;i<n.length;i++){const e=n[i],o=de(e);Object.is(e,o)||(s&&(n=Wt(n),r=0,t=xn(t,a),s=!1),n[i]=o)}t!==r&&(s&&(n=Wt(n),t=xn(t,a)),st(n,t)),rn(o,a,e,n)}}}function Nn(t,e,n){qe(t),on(t,e,ge,2,!0).push(de(n))}var Un=class{constructor(t,e,n){if(this.buffer=t,n&&!e)throw Error();this.g=e}};function Dn(t,e){if(\"string\"==typeof t)return new Un(L(t),e);if(Array.isArray(t))return new Un(new Uint8Array(t),e);if(t.constructor===Uint8Array)return new Un(t,!1);if(t.constructor===ArrayBuffer)return t=new Uint8Array(t),new Un(t,!1);if(t.constructor===P)return e=M(t)||new Uint8Array(0),new Un(e,!0,t);if(t instanceof Uint8Array)return t=t.constructor===Uint8Array?t:new Uint8Array(t.buffer,t.byteOffset,t.byteLength),new Un(t,!1);throw Error()}function Bn(t,e){let n,r=0,i=0,s=0;const o=t.h;let a=t.g;do{n=o[a++],r|=(127&n)<<s,s+=7}while(s<32&&128&n);if(s>32)for(i|=(127&n)>>4,s=3;s<32&&128&n;s+=7)n=o[a++],i|=(127&n)<<s;if(Wn(t,a),!(128&n))return e(r>>>0,i>>>0);throw Error()}function Gn(t){let e=0,n=t.g;const r=n+10,i=t.h;for(;n<r;){const r=i[n++];if(e|=r,0==(128&r))return Wn(t,n),!!(127&e)}throw Error()}function jn(t){const e=t.h;let n=t.g,r=e[n++],i=127&r;if(128&r&&(r=e[n++],i|=(127&r)<<7,128&r&&(r=e[n++],i|=(127&r)<<14,128&r&&(r=e[n++],i|=(127&r)<<21,128&r&&(r=e[n++],i|=r<<28,128&r&&128&e[n++]&&128&e[n++]&&128&e[n++]&&128&e[n++]&&128&e[n++])))))throw Error();return Wn(t,n),i}function Vn(t){return jn(t)>>>0}function Xn(t){var e=t.h;const n=t.g;var r=e[n],i=e[n+1];const s=e[n+2];return e=e[n+3],Wn(t,t.g+4),t=2*((i=(r<<0|i<<8|s<<16|e<<24)>>>0)>>31)+1,r=i>>>23&255,i&=8388607,255==r?i?NaN:t*(1/0):0==r?1401298464324817e-60*t*i:t*Math.pow(2,r-150)*(i+8388608)}function Hn(t){return jn(t)}function Wn(t,e){if(t.g=e,e>t.l)throw Error()}function zn(t,e){if(e<0)throw Error();const n=t.g;if((e=n+e)>t.l)throw Error();return t.g=e,n}function Kn(t,e){if(0==e)return F();var n=zn(t,e);return t.Y&&t.j?n=t.h.subarray(n,n+e):(t=t.h,n=n===(e=n+e)?new Uint8Array(0):Rt?t.slice(n,e):new Uint8Array(t.subarray(n,e))),0==n.length?F():new P(n,I)}var Yn=[];function qn(t,e,n,r){if(ir.length){const i=ir.pop();return i.o(r),i.g.init(t,e,n,r),i}return new rr(t,e,n,r)}function $n(t){t.g.clear(),t.l=-1,t.h=-1,ir.length<100&&ir.push(t)}function Jn(t){var e=t.g;if(e.g==e.l)return!1;t.m=t.g.g;var n=Vn(t.g);if(e=n>>>3,!((n&=7)>=0&&n<=5))throw Error();if(e<1)throw Error();return t.l=e,t.h=n,!0}function Zn(t){switch(t.h){case 0:0!=t.h?Zn(t):Gn(t.g);break;case 1:Wn(t=t.g,t.g+8);break;case 2:if(2!=t.h)Zn(t);else{var e=Vn(t.g);Wn(t=t.g,t.g+e)}break;case 5:Wn(t=t.g,t.g+4);break;case 3:for(e=t.l;;){if(!Jn(t))throw Error();if(4==t.h){if(t.l!=e)throw Error();break}Zn(t)}break;default:throw Error()}}function Qn(t,e,n){const r=t.g.l;var i=Vn(t.g);let s=(i=t.g.g+i)-r;if(s<=0&&(t.g.l=i,n(e,t,void 0,void 0,void 0),s=i-t.g.g),s)throw Error();return t.g.g=i,t.g.l=r,e}function tr(t){var e=Vn(t.g),a=zn(t=t.g,e);if(t=t.h,o){var c,h=t;(c=s)||(c=s=new TextDecoder(\"utf-8\",{fatal:!0})),e=a+e,h=0===a&&e===h.length?h:h.subarray(a,e);try{var u=c.decode(h)}catch(t){if(void 0===i){try{c.decode(new Uint8Array([128]))}catch(t){}try{c.decode(new Uint8Array([97])),i=!0}catch(t){i=!1}}throw!i&&(s=void 0),t}}else{e=(u=a)+e,a=[];let i,s=null;for(;u<e;){var l=t[u++];l<128?a.push(l):l<224?u>=e?n():(i=t[u++],l<194||128!=(192&i)?(u--,n()):a.push((31&l)<<6|63&i)):l<240?u>=e-1?n():(i=t[u++],128!=(192&i)||224===l&&i<160||237===l&&i>=160||128!=(192&(c=t[u++]))?(u--,n()):a.push((15&l)<<12|(63&i)<<6|63&c)):l<=244?u>=e-2?n():(i=t[u++],128!=(192&i)||i-144+(l<<28)>>30!=0||128!=(192&(c=t[u++]))||128!=(192&(h=t[u++]))?(u--,n()):(l=(7&l)<<18|(63&i)<<12|(63&c)<<6|63&h,l-=65536,a.push(55296+(l>>10&1023),56320+(1023&l)))):n(),a.length>=8192&&(s=r(s,a),a.length=0)}u=r(s,a)}return u}function er(t){const e=Vn(t.g);return Kn(t.g,e)}function nr(t,e,n){var r=Vn(t.g);for(r=t.g.g+r;t.g.g<r;)n.push(e(t.g))}var rr=class{constructor(t,e,n,r){if(Yn.length){const i=Yn.pop();i.init(t,e,n,r),t=i}else t=new class{constructor(t,e,n,r){this.h=null,this.j=!1,this.g=this.l=this.m=0,this.init(t,e,n,r)}init(t,e,n,{Y:r=!1,ea:i=!1}={}){this.Y=r,this.ea=i,t&&(t=Dn(t,this.ea),this.h=t.buffer,this.j=t.g,this.m=e||0,this.l=void 0!==n?this.m+n:this.h.length,this.g=this.m)}clear(){this.h=null,this.j=!1,this.g=this.l=this.m=0,this.Y=!1}}(t,e,n,r);this.g=t,this.m=this.g.g,this.h=this.l=-1,this.o(r)}o({ha:t=!1}={}){this.ha=t}},ir=[];function sr(t){return t?/^\\d+$/.test(t)?(Xt(t),new or(Ft,Mt)):null:ar||=new or(0,0)}var or=class{constructor(t,e){this.h=t>>>0,this.g=e>>>0}};let ar;function cr(t){return t?/^-?\\d+$/.test(t)?(Xt(t),new hr(Ft,Mt)):null:ur||=new hr(0,0)}var hr=class{constructor(t,e){this.h=t>>>0,this.g=e>>>0}};let ur;function lr(t,e,n){for(;n>0||e>127;)t.g.push(127&e|128),e=(e>>>7|n<<25)>>>0,n>>>=7;t.g.push(e)}function fr(t,e){for(;e>127;)t.g.push(127&e|128),e>>>=7;t.g.push(e)}function dr(t,e){if(e>=0)fr(t,e);else{for(let n=0;n<9;n++)t.g.push(127&e|128),e>>=7;t.g.push(1)}}function pr(t){var e=Ft;t.g.push(e>>>0&255),t.g.push(e>>>8&255),t.g.push(e>>>16&255),t.g.push(e>>>24&255)}function gr(t,e){0!==e.length&&(t.l.push(e),t.h+=e.length)}function mr(t,e,n){fr(t.g,8*e+n)}function yr(t,e){return mr(t,e,2),e=t.g.end(),gr(t,e),e.push(t.h),e}function _r(t,e){var n=e.pop();for(n=t.h+t.g.length()-n;n>127;)e.push(127&n|128),n>>>=7,t.h++;e.push(n),t.h++}function vr(t,e,n){mr(t,e,2),fr(t.g,n.length),gr(t,t.g.end()),gr(t,n)}function Er(t,e,n,r){null!=n&&(e=yr(t,e),r(n,t),_r(t,e))}function wr(){const t=class{constructor(){throw Error()}};return Object.setPrototypeOf(t,t.prototype),t}var Tr=wr(),Ar=wr(),br=wr(),kr=wr(),Sr=wr(),xr=wr(),Lr=wr(),Rr=wr(),Ir=wr(),Fr=wr();function Mr(t,e,n){var r=t.v;z&&z in r&&(r=r[z])&&delete r[e.g],e.h?e.j(t,e.h,e.g,n,e.l):e.j(t,e.g,n,e.l)}var Pr=class{constructor(t,e){this.v=je(t,e,void 0,2048)}toJSON(){return Ue(this)}j(){var t=Fo,e=this.v,n=t.g,r=z;if(j&&r&&null!=e[r]?.[n]&&B(K,3),e=t.g,Z&&z&&void 0===Z&&(r=(n=this.v)[z])&&(r=r.da))try{r(n,e,Me)}catch(t){u(t)}return t.h?t.m(this,t.h,t.g,t.l):t.m(this,t.g,t.defaultValue,t.l)}clone(){const t=this.v,e=0|t[et];return Je(this,t,e)?He(this,t,!0):new this.constructor(ze(t,e,!1))}};Pr.prototype[J]=ct,Pr.prototype.toString=function(){return this.v.toString()};var Cr=class{constructor(t,e,n){this.g=t,this.h=e,t=Tr,this.l=!!t&&n===t||!1}};function Or(t,e){return new Cr(t,e,Tr)}function Nr(t,e,n,r,i){Er(t,n,Yr(e,r),i)}const Ur=Or((function(t,e,n,r,i){return 2===t.h&&(Qn(t,vn(e,r,n),i),!0)}),Nr),Dr=Or((function(t,e,n,r,i){return 2===t.h&&(Qn(t,vn(e,r,n),i),!0)}),Nr);var Br=Symbol(),Gr=Symbol(),jr=Symbol(),Vr=Symbol(),Xr=Symbol();let Hr,Wr;function zr(t,e,n,r){var i=r[t];if(i)return i;(i={}).qa=r,i.T=function(t){switch(typeof t){case\"boolean\":return De||=[0,void 0,!0];case\"number\":return t>0?void 0:0===t?Be||=[0,void 0]:[-t,void 0];case\"string\":return[0,t];case\"object\":return t}}(r[0]);var s=r[1];let o=1;s&&s.constructor===Object&&(i.ba=s,\"function\"==typeof(s=r[++o])&&(i.ma=!0,Hr??=s,Wr??=r[o+1],s=r[o+=2]));const a={};for(;s&&Array.isArray(s)&&s.length&&\"number\"==typeof s[0]&&s[0]>0;){for(var c=0;c<s.length;c++)a[s[c]]=s;s=r[++o]}for(c=1;void 0!==s;){let t;\"number\"==typeof s&&(c+=s,s=r[++o]);var h=void 0;if(s instanceof Cr?t=s:(t=Ur,o--),t?.l){s=r[++o],h=r;var u=o;\"function\"==typeof s&&(s=s(),h[u]=s),h=s}for(u=c+1,\"number\"==typeof(s=r[++o])&&s<0&&(u-=s,s=r[++o]);c<u;c++){const r=a[c];h?n(i,c,t,h,r):e(i,c,t,r)}}return r[t]=i}function Kr(t){return Array.isArray(t)?t[0]instanceof Cr?t:[Dr,t]:[t,void 0]}function Yr(t,e){return t instanceof Pr?t.v:Array.isArray(t)?Ge(t,e):void 0}function qr(t,e,n,r){const i=n.g;t[e]=r?(t,e,n)=>i(t,e,n,r):i}function $r(t,e,n,r,i){const s=n.g;let o,a;t[e]=(t,e,n)=>s(t,e,n,a||=zr(Gr,qr,$r,r).T,o||=Jr(r),i)}function Jr(t){let e=t[jr];if(null!=e)return e;const n=zr(Gr,qr,$r,t);return e=n.ma?(t,e)=>Hr(t,e,n):(t,e)=>{for(;Jn(e)&&4!=e.h;){var r=e.l,i=n[r];if(null==i){var s=n.ba;s&&(s=s[r])&&(null!=(s=Qr(s))&&(i=n[r]=s))}if(null==i||!i(e,t,r)){if(i=(s=e).m,Zn(s),s.ha)var o=void 0;else o=s.g.g-i,s.g.g=i,o=Kn(s.g,o);i=void 0,s=t,o&&((i=s[z]??(s[z]=new Fe))[r]??(i[r]=[])).push(o)}}return(t=Re(t))&&(t.da=n.qa[Xr]),!0},t[jr]=e,t[Xr]=Zr.bind(t),e}function Zr(t,e,n,r){var i=this[Gr];const s=this[jr],o=Ge(void 0,i.T),a=Re(t);if(a){var c=!1,h=i.ba;if(h){if(i=(e,n,i)=>{if(0!==i.length)if(h[n])for(const t of i){e=qn(t);try{c=!0,s(o,e)}finally{$n(e)}}else r?.(t,n,i)},null==e)Ie(a,i);else if(null!=a){const t=a[e];t&&i(a,e,t)}if(c){let r=0|t[et];if(2&r&&2048&r&&!n?.Ka)throw Error();const i=mt(r),s=(e,s)=>{if(null!=en(t,e,i)){if(1===n?.Qa)return;throw Error()}null!=s&&(r=rn(t,r,e,s,i)),delete a[e]};null==e?pt(o,0|o[et],((t,e)=>{s(t,e)})):s(e,en(o,e,i))}}}}function Qr(t){const e=(t=Kr(t))[0].g;if(t=t[1]){const n=Jr(t),r=zr(Gr,qr,$r,t).T;return(t,i,s)=>e(t,i,s,r,n)}return e}function ti(t,e,n){t[e]=n.h}function ei(t,e,n,r){let i,s;const o=n.h;t[e]=(t,e,n)=>o(t,e,n,s||=zr(Br,ti,ei,r).T,i||=ni(r))}function ni(t){let e=t[Vr];if(!e){const n=zr(Br,ti,ei,t);e=(t,e)=>ri(t,e,n),t[Vr]=e}return e}function ri(t,e,n){pt(t,0|t[et],((t,r)=>{if(null!=r){var i=function(t,e){var n=t[e];if(n)return n;if((n=t.ba)&&(n=n[e])){var r=(n=Kr(n))[0].h;if(n=n[1]){const e=ni(n),i=zr(Br,ti,ei,n).T;n=t.ma?Wr(i,e):(t,n,s)=>r(t,n,s,i,e)}else n=r;return t[e]=n}}(n,t);i?i(e,r,t):t<500||B(q,3)}})),(t=Re(t))&&Ie(t,((t,n,r)=>{for(gr(e,e.g.end()),t=0;t<r.length;t++)gr(e,M(r[t])||new Uint8Array(0))}))}const ii=Tt(0);function si(t,e){if(Array.isArray(e)){var n=0|e[et];if(4&n)return e;for(var r=0,i=0;r<e.length;r++){const n=t(e[r]);null!=n&&(e[i++]=n)}return i<r&&(e.length=i),(t=-1537&(5|n))!==n&&st(e,t),2&t&&Object.freeze(e),e}}function oi(t,e,n){return new Cr(t,e,n)}function ai(t,e,n){return new Cr(t,e,n)}function ci(t,e,n){rn(t,0|t[et],e,n,mt(0|t[et]))}var hi=Or((function(t,e,n,r,i){if(2!==t.h)return!1;if(t=Wt(t=Qn(t,Ge([void 0,void 0],r),i)),i=mt(r=0|e[et]),2&r)throw Error();let s=en(e,n,i);if(s instanceof be)0!=(2&s.J)?(s=s.V(),s.push(t),rn(e,r,n,s,i)):s.Ma(t);else if(Array.isArray(s)){var o=0|s[et];8192&o||st(s,o|=8192),2&o&&(s=fn(s),rn(e,r,n,s,i)),s.push(t)}else rn(e,r,n,at([t]),i);return!0}),(function(t,e,n,r,i){if(e instanceof be)e.forEach(((e,s)=>{Er(t,n,Ge([s,e],r),i)}));else if(Array.isArray(e)){for(let s=0;s<e.length;s++){const o=e[s];Array.isArray(o)&&Er(t,n,Ge(o,r),i)}at(e)}}));function ui(t,e,n){null!=(e=Qt(e))&&(mr(t,n,5),t=t.g,Ot(e),pr(t))}function li(t,e,n){if(e=function(t){if(null==t)return t;const e=typeof t;if(\"bigint\"===e)return String(zt(64,t));if(re(t)){if(\"string\"===e)return ce(t);if(\"number\"===e)return ae(t)}}(e),null!=e){if(\"string\"==typeof e)cr(e);if(null!=e)switch(mr(t,n,0),typeof e){case\"number\":t=t.g,Ct(e),lr(t,Ft,Mt);break;case\"bigint\":n=BigInt.asUintN(64,e),n=new hr(Number(n&BigInt(4294967295)),Number(n>>BigInt(32))),lr(t.g,n.h,n.g);break;default:n=cr(e),lr(t.g,n.h,n.g)}}}function fi(t,e,n){null!=(e=ie(e))&&null!=e&&(mr(t,n,0),dr(t.g,e))}function di(t,e,n){null!=(e=ee(e))&&(mr(t,n,0),t.g.g.push(e?1:0))}function pi(t,e,n){null!=(e=ge(e))&&vr(t,n,h(e))}function gi(t,e,n,r,i){Er(t,n,Yr(e,r),i)}function mi(t,e,n){null!=(e=null==e||\"string\"==typeof e||e instanceof P?e:void 0)&&vr(t,n,Dn(e,!0).buffer)}function yi(t,e,n){return(5===t.h||2===t.h)&&(e=pn(e,0|e[et],n),2==t.h?nr(t,Xn,e):e.push(Xn(t.g)),!0)}var _i=oi((function(t,e,n){return 5===t.h&&(ci(e,n,Xn(t.g)),!0)}),ui,Rr),vi=ai(yi,(function(t,e,n){if(null!=(e=si(Qt,e)))for(let o=0;o<e.length;o++){var r=t,i=n,s=e[o];null!=s&&(mr(r,i,5),r=r.g,Ot(s),pr(r))}}),Rr),Ei=ai(yi,(function(t,e,n){if(null!=(e=si(Qt,e))&&e.length){mr(t,n,2),fr(t.g,4*e.length);for(let r=0;r<e.length;r++)n=t.g,Ot(e[r]),pr(n)}}),Rr),wi=oi((function(t,e,n){return 5===t.h&&(ci(e,n,0===(t=Xn(t.g))?void 0:t),!0)}),ui,Rr),Ti=oi((function(t,e,n){return p?(0!==t.h?t=!1:(ci(e,n,Bn(t.g,Bt)),t=!0),t):0===t.h&&(ci(e,n,Bn(t.g,Dt)),!0)}),li,xr),Ai=oi((function(t,e,n){return p?(0!==t.h?e=!1:(ci(e,n,(t=Bn(t.g,Bt))===ii?void 0:t),e=!0),e):0===t.h&&(ci(e,n,0===(t=Bn(t.g,Dt))?void 0:t),!0)}),li,xr),bi=oi((function(t,e,n){return p?(0!==t.h?t=!1:(ci(e,n,Bn(t.g,Ut)),t=!0),t):0===t.h&&(ci(e,n,Bn(t.g,Nt)),!0)}),(function(t,e,n){if(e=function(t){if(null==t)return t;var e=typeof t;if(\"bigint\"===e)return String(Kt(64,t));if(re(t)){if(\"string\"===e)return e=$t(Number(t)),Yt(e)&&e>=0?t=String(e):(-1!==(e=t.indexOf(\".\"))&&(t=t.substring(0,e)),(e=\"-\"!==t[0]&&((e=t.length)<20||20===e&&t<=\"18446744073709551615\"))||(Xt(t),t=Gt(Ft,Mt))),t;if(\"number\"===e)return(t=$t(t))>=0&&Yt(t)||(Ct(t),t=Nt(Ft,Mt)),t}}(e),null!=e){if(\"string\"==typeof e)sr(e);if(null!=e)switch(mr(t,n,0),typeof e){case\"number\":t=t.g,Ct(e),lr(t,Ft,Mt);break;case\"bigint\":n=BigInt.asUintN(64,e),n=new or(Number(n&BigInt(4294967295)),Number(n>>BigInt(32))),lr(t.g,n.h,n.g);break;default:n=sr(e),lr(t.g,n.h,n.g)}}}),Lr),ki=oi((function(t,e,n){return 0===t.h&&(ci(e,n,jn(t.g)),!0)}),fi,kr),Si=ai((function(t,e,n){return(0===t.h||2===t.h)&&(e=pn(e,0|e[et],n),2==t.h?nr(t,jn,e):e.push(jn(t.g)),!0)}),(function(t,e,n){if(null!=(e=si(ie,e))&&e.length){n=yr(t,n);for(let n=0;n<e.length;n++)dr(t.g,e[n]);_r(t,n)}}),kr),xi=oi((function(t,e,n){return 0===t.h&&(ci(e,n,0===(t=jn(t.g))?void 0:t),!0)}),fi,kr),Li=oi((function(t,e,n){return 0===t.h&&(ci(e,n,Gn(t.g)),!0)}),di,Ar),Ri=oi((function(t,e,n){return 0===t.h&&(ci(e,n,!1===(t=Gn(t.g))?void 0:t),!0)}),di,Ar),Ii=ai((function(t,e,n){return 2===t.h&&(t=tr(t),pn(e,0|e[et],n).push(t),!0)}),(function(t,e,n){if(null!=(e=si(ge,e)))for(let o=0;o<e.length;o++){var r=t,i=n,s=e[o];null!=s&&vr(r,i,h(s))}}),br),Fi=oi((function(t,e,n){return 2===t.h&&(ci(e,n,\"\"===(t=tr(t))?void 0:t),!0)}),pi,br),Mi=oi((function(t,e,n){return 2===t.h&&(ci(e,n,tr(t)),!0)}),pi,br),Pi=function(t,e,n=Tr){return new Cr(t,e,n)}((function(t,e,n,r,i){return 2===t.h&&(r=Ge(void 0,r),pn(e,0|e[et],n).push(r),Qn(t,r,i),!0)}),(function(t,e,n,r,i){if(Array.isArray(e)){for(let s=0;s<e.length;s++)gi(t,e[s],n,r,i);1&(t=0|e[et])||st(e,1|t)}})),Ci=Or((function(t,e,n,r,i,s){if(2!==t.h)return!1;let o=0|e[et];return yn(e,o,s,n,mt(o)),Qn(t,e=vn(e,r,n),i),!0}),gi),Oi=oi((function(t,e,n){return 2===t.h&&(ci(e,n,er(t)),!0)}),mi,Ir),Ni=ai((function(t,e,n){return(0===t.h||2===t.h)&&(e=pn(e,0|e[et],n),2==t.h?nr(t,Vn,e):e.push(Vn(t.g)),!0)}),(function(t,e,n){if(null!=(e=si(se,e)))for(let o=0;o<e.length;o++){var r=t,i=n,s=e[o];null!=s&&(mr(r,i,0),fr(r.g,s))}}),Sr),Ui=oi((function(t,e,n){return 0===t.h&&(ci(e,n,0===(t=Vn(t.g))?void 0:t),!0)}),(function(t,e,n){null!=(e=se(e))&&null!=e&&(mr(t,n,0),fr(t.g,e))}),Sr),Di=oi((function(t,e,n){return 0===t.h&&(ci(e,n,jn(t.g)),!0)}),(function(t,e,n){null!=(e=ie(e))&&(e=parseInt(e,10),mr(t,n,0),dr(t.g,e))}),Fr);class Bi{constructor(t,e){var n=rs;this.g=t,this.h=e,this.m=wn,this.j=kn,this.defaultValue=void 0,this.l=null!=n.Oa?gt:void 0}register(){_(this)}}function Gi(t,e){return new Bi(t,e)}function ji(t,e){return(n,r)=>{{const s={ea:!0};r&&Object.assign(s,r),n=qn(n,void 0,void 0,s);try{const r=new t,s=r.v;Jr(e)(s,n);var i=r}finally{$n(n)}}return i}}function Vi(t){return function(){const e=new class{constructor(){this.l=[],this.h=0,this.g=new class{constructor(){this.g=[]}length(){return this.g.length}end(){const t=this.g;return this.g=[],t}}}};ri(this.v,e,zr(Br,ti,ei,t)),gr(e,e.g.end());const n=new Uint8Array(e.h),r=e.l,i=r.length;let s=0;for(let t=0;t<i;t++){const e=r[t];n.set(e,s),s+=e.length}return e.l=[n],n}}var Xi=class extends Pr{constructor(t){super(t)}},Hi=[0,Fi,oi((function(t,e,n){return 2===t.h&&(ci(e,n,(t=er(t))===F()?void 0:t),!0)}),(function(t,e,n){if(null!=e){if(e instanceof Pr){const r=e.Ra;return void(r?(e=r(e),null!=e&&vr(t,n,Dn(e,!0).buffer)):B(q,3))}if(Array.isArray(e))return void B(q,3)}mi(t,e,n)}),Ir)];let Wi,zi=globalThis.trustedTypes;function Ki(t){var e;return void 0===Wi&&(Wi=function(){let t=null;if(!zi)return t;try{const e=t=>t;t=zi.createPolicy(\"goog#html\",{createHTML:e,createScript:e,createScriptURL:e})}catch(t){}return t}()),t=(e=Wi)?e.createScriptURL(t):t,new class{constructor(t){this.g=t}toString(){return this.g+\"\"}}(t)}function Yi(t,...e){if(0===e.length)return Ki(t[0]);let n=t[0];for(let r=0;r<e.length;r++)n+=encodeURIComponent(e[r])+t[r+1];return Ki(n)}var qi=[0,ki,Di,Li,-1,Si,Di,-1,Li],$i=class extends Pr{constructor(t){super(t)}},Ji=[0,Li,Mi,Li,Di,-1,ai((function(t,e,n){return(0===t.h||2===t.h)&&(e=pn(e,0|e[et],n),2==t.h?nr(t,Hn,e):e.push(jn(t.g)),!0)}),(function(t,e,n){if(null!=(e=si(ie,e))&&e.length){n=yr(t,n);for(let n=0;n<e.length;n++)dr(t.g,e[n]);_r(t,n)}}),Fr),Mi,-1,[0,Li,-1],Di,Li,-1],Zi=[0,3,Li,-1,2,[0,ki],[0,Di,Li],[0,Mi,-1],[0]],Qi=[0,Mi,-2],ts=class extends Pr{constructor(t){super(t)}},es=[0],ns=[0,ki,Li,1,Li,-4],rs=class extends Pr{constructor(t){super(t,2)}},is={};is[336783863]=[0,Mi,Li,-1,ki,[0,[1,2,3,4,5,6,7,8,9],Ci,es,Ci,Ji,Ci,Qi,Ci,ns,Ci,qi,Ci,[0,Mi,-2],Ci,[0,Mi,Di],Ci,Zi,Ci,[0,Di,-1,Li]],[0,Mi],Li,[0,[1,3],[2,4],Ci,[0,Si],-1,Ci,[0,Ii],-1,Pi,[0,Mi,-1]],Mi];var ss=[0,Ai,-1,Ri,-3,Ai,Si,Fi,xi,Ai,-1,Ri,xi,Ri,-2,Fi];function os(t,e){Nn(t,3,e)}function as(t,e){Nn(t,4,e)}var cs=class extends Pr{constructor(t){super(t,500)}o(t){return kn(this,0,7,t)}},hs=[-1,{}],us=[0,Mi,1,hs],ls=[0,Mi,Ii,hs];function fs(t,e){Ln(t,1,cs,e)}function ds(t,e){Nn(t,10,e)}function ps(t,e){Nn(t,15,e)}var gs=class extends Pr{constructor(t){super(t,500)}o(t){return kn(this,0,1001,t)}},ms=[-500,Pi,[-500,Fi,-1,Ii,-3,[-2,is,Li],Pi,Hi,xi,-1,us,ls,Pi,[0,Fi,Ri],Fi,ss,xi,Ii,987,Ii],4,Pi,[-500,Mi,-1,[-1,{}],998,Mi],Pi,[-500,Mi,Ii,-1,[-2,{},Li],997,Ii,-1],xi,Pi,[-500,Mi,Ii,hs,998,Ii],Ii,xi,us,ls,Pi,[0,Fi,-1,hs],Ii,-2,ss,Fi,-1,Ri,[0,Ri,Ui],978,hs,Pi,Hi];gs.prototype.g=Vi(ms);var ys=ji(gs,ms),_s=class extends Pr{constructor(t){super(t)}},vs=class extends Pr{constructor(t){super(t)}g(){return An(this,_s,1)}},Es=[0,Pi,[0,ki,_i,Mi,-1]],ws=ji(vs,Es),Ts=class extends Pr{constructor(t){super(t)}},As=class extends Pr{constructor(t){super(t)}},bs=class extends Pr{constructor(t){super(t)}l(){return wn(this,Ts,2)}g(){return An(this,As,5)}},ks=ji(class extends Pr{constructor(t){super(t)}},[0,Ii,Si,Ei,[0,Di,[0,ki,-3],[0,_i,-3],[0,ki,-1,[0,Pi,[0,ki,-2]]],Pi,[0,_i,-1,Mi,_i]],Mi,-1,Ti,Pi,[0,ki,_i],Ii,Ti]),Ss=class extends Pr{constructor(t){super(t)}},xs=ji(class extends Pr{constructor(t){super(t)}},[0,Pi,[0,_i,-4]]),Ls=class extends Pr{constructor(t){super(t)}},Rs=ji(class extends Pr{constructor(t){super(t)}},[0,Pi,[0,_i,-4]]),Is=class extends Pr{constructor(t){super(t)}},Fs=[0,ki,-1,Ei,Di],Ms=class extends Pr{constructor(t){super(t)}};Ms.prototype.g=Vi([0,_i,-4,Ti]);var Ps=class extends Pr{constructor(t){super(t)}},Cs=ji(class extends Pr{constructor(t){super(t)}},[0,Pi,[0,1,ki,Mi,Es],Ti]),Os=class extends Pr{constructor(t){super(t)}},Ns=class extends Pr{constructor(t){super(t)}na(){const t=tn(this,1,void 0,void 0,ln);return null==t?F():t}},Us=class extends Pr{constructor(t){super(t)}},Ds=[1,2],Bs=ji(class extends Pr{constructor(t){super(t)}},[0,Pi,[0,Ds,Ci,[0,Ei],Ci,[0,Oi],ki,Mi],Ti]),Gs=class extends Pr{constructor(t){super(t)}},js=[0,Mi,ki,_i,Ii,-1],Vs=class extends Pr{constructor(t){super(t)}},Xs=[0,Li,-1],Hs=class extends Pr{constructor(t){super(t)}},Ws=[1,2,3,4,5,6],zs=class extends Pr{constructor(t){super(t)}g(){return null!=tn(this,1,void 0,void 0,ln)}l(){return null!=ge(tn(this,2))}},Ks=class extends Pr{constructor(t){super(t)}g(){return ee(tn(this,2))??!1}},Ys=[0,Oi,Mi,[0,ki,Ti,-1],[0,bi,Ti]],qs=[0,Ys,Li,[0,Ws,Ci,ns,Ci,Ji,Ci,qi,Ci,es,Ci,Qi,Ci,Zi],Di],$s=class extends Pr{constructor(t){super(t)}},Js=[0,qs,_i,-1,ki],Zs=Gi(502141897,$s);is[502141897]=Js;var Qs=ji(class extends Pr{constructor(t){super(t)}},[0,[0,Di,-1,vi,Ni],Fs]),to=class extends Pr{constructor(t){super(t)}},eo=class extends Pr{constructor(t){super(t)}},no=[0,qs,_i,[0,qs],Li],ro=Gi(508968150,eo);is[508968150]=[0,qs,Js,no,_i,[0,[0,Ys]]],is[508968149]=no;var io=class extends Pr{constructor(t){super(t)}l(){return wn(this,Gs,2)}g(){nn(this,2)}},so=[0,qs,js];is[478825465]=so;var oo=class extends Pr{constructor(t){super(t)}},ao=class extends Pr{constructor(t){super(t)}},co=class extends Pr{constructor(t){super(t)}},ho=class extends Pr{constructor(t){super(t)}},uo=class extends Pr{constructor(t){super(t)}},lo=[0,qs,[0,qs],so,-1],fo=[0,qs,_i,ki],po=[0,qs,_i],go=[0,qs,fo,po,_i],mo=Gi(479097054,uo);is[479097054]=[0,qs,go,lo],is[463370452]=lo,is[464864288]=fo;var yo=Gi(462713202,ho);is[462713202]=go,is[474472470]=po;var _o=class extends Pr{constructor(t){super(t)}},vo=class extends Pr{constructor(t){super(t)}},Eo=class extends Pr{constructor(t){super(t)}},wo=class extends Pr{constructor(t){super(t)}},To=[0,qs,_i,-1,ki],Ao=[0,qs,_i,Li];wo.prototype.g=Vi([0,qs,po,[0,qs],Js,no,To,Ao]);var bo=class extends Pr{constructor(t){super(t)}},ko=Gi(456383383,bo);is[456383383]=[0,qs,js];var So=class extends Pr{constructor(t){super(t)}},xo=Gi(476348187,So);is[476348187]=[0,qs,Xs];var Lo=class extends Pr{constructor(t){super(t)}},Ro=class extends Pr{constructor(t){super(t)}},Io=[0,Di,-1],Fo=Gi(458105876,class extends Pr{constructor(t){super(t)}g(){let t;var e=this.v;const n=0|e[et];return t=ht(this,n),e=function(t,e,n,r){var i=Ro;!r&&Ye(t)&&(n=0|(e=t.v)[et]);var s=en(e,2);if(t=!1,null==s){if(r)return Le();s=[]}else if(s.constructor===be){if(!(2&s.J)||r)return s;s=s.V()}else Array.isArray(s)?t=!!(2&(0|s[et])):s=[];if(r){if(!s.length)return Le();t||(t=!0,ot(s))}else t&&(t=!1,at(s),s=fn(s));return!t&&32&n&&it(s,32),n=rn(e,n,2,r=new be(s,i,ye,void 0)),t||$e(e,n),r}(this,e,n,t),!t&&Ro&&(e.ra=!0),e}});is[458105876]=[0,Io,hi,[!0,Ti,[0,Mi,-1,Ii]],[0,Si,Li,Di]];var Mo=class extends Pr{constructor(t){super(t)}},Po=Gi(458105758,Mo);is[458105758]=[0,qs,Mi,Io];var Co=class extends Pr{constructor(t){super(t)}},Oo=[0,wi,-1,Ri],No=class extends Pr{constructor(t){super(t)}},Uo=class extends Pr{constructor(t){super(t)}},Do=[1,2];Uo.prototype.g=Vi([0,Do,Ci,Oo,Ci,[0,Pi,Oo]]);var Bo=class extends Pr{constructor(t){super(t)}},Go=Gi(443442058,Bo);is[443442058]=[0,qs,Mi,ki,_i,Ii,-1,Li,_i],is[514774813]=To;var jo=class extends Pr{constructor(t){super(t)}},Vo=Gi(516587230,jo);function Xo(t,e){return e=e?e.clone():new Gs,void 0!==t.displayNamesLocale?nn(e,1,pe(t.displayNamesLocale)):void 0===t.displayNamesLocale&&nn(e,1),void 0!==t.maxResults?Mn(e,2,t.maxResults):\"maxResults\"in t&&nn(e,2),void 0!==t.scoreThreshold?Pn(e,3,t.scoreThreshold):\"scoreThreshold\"in t&&nn(e,3),void 0!==t.categoryAllowlist?On(e,4,t.categoryAllowlist):\"categoryAllowlist\"in t&&nn(e,4),void 0!==t.categoryDenylist?On(e,5,t.categoryDenylist):\"categoryDenylist\"in t&&nn(e,5),e}function Ho(t){const e=Number(t);return Number.isSafeInteger(e)?e:String(t)}function Wo(t,e=-1,n=\"\"){return{categories:t.map((t=>({index:Rn(t,1)??0??-1,score:Fn(t,2)??0,categoryName:ge(tn(t,3))??\"\"??\"\",displayName:ge(tn(t,4))??\"\"??\"\"}))),headIndex:e,headName:n}}function zo(t){const e={classifications:An(t,Ps,1).map((t=>Wo(wn(t,vs,4)?.g()??[],Rn(t,2)??0,ge(tn(t,3))??\"\")))};return null!=function(t){return le(g?tn(t,2,void 0,void 0,fe):tn(t,2))}(t)&&(e.timestampMs=Ho(In(t))),e}function Ko(t){var e=on(t,3,Qt,sn()),n=on(t,2,ie,sn()),r=on(t,1,ge,sn()),i=on(t,9,ge,sn());const s={categories:[],keypoints:[]};for(let t=0;t<e.length;t++)s.categories.push({score:e[t],index:n[t]??-1,categoryName:r[t]??\"\",displayName:i[t]??\"\"});if((e=wn(t,bs,4)?.l())&&(s.boundingBox={originX:Rn(e,1,Qe)??0,originY:Rn(e,2,Qe)??0,width:Rn(e,3,Qe)??0,height:Rn(e,4,Qe)??0,angle:0}),wn(t,bs,4)?.g().length)for(const e of wn(t,bs,4).g())s.keypoints.push({x:tn(e,1,void 0,Qe,Qt)??0,y:tn(e,2,void 0,Qe,Qt)??0,score:tn(e,4,void 0,Qe,Qt)??0,label:ge(tn(e,3,void 0,Qe))??\"\"});return s}function Yo(t){const e=[];for(const n of An(t,Ls,1))e.push({x:Fn(n,1)??0,y:Fn(n,2)??0,z:Fn(n,3)??0,visibility:Fn(n,4)??0});return e}function qo(t){const e=[];for(const n of An(t,Ss,1))e.push({x:Fn(n,1)??0,y:Fn(n,2)??0,z:Fn(n,3)??0,visibility:Fn(n,4)??0});return e}function $o(t){return Array.from(t,(t=>t>127?t-256:t))}function Jo(t,e){if(t.length!==e.length)throw Error(`Cannot compute cosine similarity between embeddings of different sizes (${t.length} vs. ${e.length}).`);let n=0,r=0,i=0;for(let s=0;s<t.length;s++)n+=t[s]*e[s],r+=t[s]*t[s],i+=e[s]*e[s];if(r<=0||i<=0)throw Error(\"Cannot compute cosine similarity on embedding with 0 norm.\");return n/Math.sqrt(r*i)}let Zo;is[516587230]=[0,qs,To,Ao,_i],is[518928384]=Ao;const Qo=new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11]);async function ta(){if(void 0===Zo)try{await WebAssembly.instantiate(Qo),Zo=!0}catch{Zo=!1}return Zo}async function ea(t,e=Yi``){const n=await ta()?\"wasm_internal\":\"wasm_nosimd_internal\";return{wasmLoaderPath:`${e}/${t}_${n}.js`,wasmBinaryPath:`${e}/${t}_${n}.wasm`}}var na=class{};function ra(){var t=navigator;return\"undefined\"!=typeof OffscreenCanvas&&(!function(t=navigator){return(t=t.userAgent).includes(\"Safari\")&&!t.includes(\"Chrome\")}(t)||!!((t=t.userAgent.match(/Version\\/([\\d]+).*Safari/))&&t.length>=1&&Number(t[1])>=17))}async function ia(t){if(\"function\"!=typeof importScripts){const e=document.createElement(\"script\");return e.src=t.toString(),e.crossOrigin=\"anonymous\",new Promise(((t,n)=>{e.addEventListener(\"load\",(()=>{t()}),!1),e.addEventListener(\"error\",(t=>{n(t)}),!1),document.body.appendChild(e)}))}try{importScripts(t.toString())}catch(e){if(!(e instanceof TypeError))throw e;await self.import(t.toString())}}function sa(t){return void 0!==t.videoWidth?[t.videoWidth,t.videoHeight]:void 0!==t.naturalWidth?[t.naturalWidth,t.naturalHeight]:void 0!==t.displayWidth?[t.displayWidth,t.displayHeight]:[t.width,t.height]}function oa(t,e,n){t.m||console.error(\"No wasm multistream support detected: ensure dependency inclusion of :gl_graph_runner_internal_multi_input target\"),n(e=t.i.stringToNewUTF8(e)),t.i._free(e)}function aa(t,e,n){if(!t.i.canvas)throw Error(\"No OpenGL canvas configured.\");if(n?t.i._bindTextureToStream(n):t.i._bindTextureToCanvas(),!(n=t.i.canvas.getContext(\"webgl2\")||t.i.canvas.getContext(\"webgl\")))throw Error(\"Failed to obtain WebGL context from the provided canvas. `getContext()` should only be invoked with `webgl` or `webgl2`.\");t.i.gpuOriginForWebTexturesIsBottomLeft&&n.pixelStorei(n.UNPACK_FLIP_Y_WEBGL,!0),n.texImage2D(n.TEXTURE_2D,0,n.RGBA,n.RGBA,n.UNSIGNED_BYTE,e),t.i.gpuOriginForWebTexturesIsBottomLeft&&n.pixelStorei(n.UNPACK_FLIP_Y_WEBGL,!1);const[r,i]=sa(e);return!t.l||r===t.i.canvas.width&&i===t.i.canvas.height||(t.i.canvas.width=r,t.i.canvas.height=i),[r,i]}function ca(t,e,n){t.m||console.error(\"No wasm multistream support detected: ensure dependency inclusion of :gl_graph_runner_internal_multi_input target\");const r=new Uint32Array(e.length);for(let n=0;n<e.length;n++)r[n]=t.i.stringToNewUTF8(e[n]);e=t.i._malloc(4*r.length),t.i.HEAPU32.set(r,e>>2),n(e);for(const e of r)t.i._free(e);t.i._free(e)}function ha(t,e,n){t.i.simpleListeners=t.i.simpleListeners||{},t.i.simpleListeners[e]=n}function ua(t,e,n){let r=[];t.i.simpleListeners=t.i.simpleListeners||{},t.i.simpleListeners[e]=(t,e,i)=>{e?(n(r,i),r=[]):r.push(t)}}na.forVisionTasks=function(t){return ea(\"vision\",t)},na.forTextTasks=function(t){return ea(\"text\",t)},na.forGenAiExperimentalTasks=function(t){return ea(\"genai_experimental\",t)},na.forGenAiTasks=function(t){return ea(\"genai\",t)},na.forAudioTasks=function(t){return ea(\"audio\",t)},na.isSimdSupported=function(){return ta()};async function la(t,e,n,r){return t=await(async(t,e,n,r,i)=>{if(e&&await ia(e),!self.ModuleFactory)throw Error(\"ModuleFactory not set.\");if(n&&(await ia(n),!self.ModuleFactory))throw Error(\"ModuleFactory not set.\");return self.Module&&i&&((e=self.Module).locateFile=i.locateFile,i.mainScriptUrlOrBlob&&(e.mainScriptUrlOrBlob=i.mainScriptUrlOrBlob)),i=await self.ModuleFactory(self.Module||i),self.ModuleFactory=self.Module=void 0,new t(i,r)})(t,n.wasmLoaderPath,n.assetLoaderPath,e,{locateFile:t=>t.endsWith(\".wasm\")?n.wasmBinaryPath.toString():n.assetBinaryPath&&t.endsWith(\".data\")?n.assetBinaryPath.toString():t}),await t.o(r),t}function fa(t,e){const n=wn(t.baseOptions,zs,1)||new zs;\"string\"==typeof e?(nn(n,2,pe(e)),nn(n,1)):e instanceof Uint8Array&&(nn(n,1,lt(e,!1)),nn(n,2)),kn(t.baseOptions,0,1,n)}function da(t){try{const e=t.H.length;if(1===e)throw Error(t.H[0].message);if(e>1)throw Error(\"Encountered multiple errors: \"+t.H.map((t=>t.message)).join(\", \"))}finally{t.H=[]}}function pa(t,e){t.C=Math.max(t.C,e)}function ga(t,e){t.B=new cs,Cn(t.B,2,\"PassThroughCalculator\"),os(t.B,\"free_memory\"),as(t.B,\"free_memory_unused_out\"),ds(e,\"free_memory\"),fs(e,t.B)}function ma(t,e){os(t.B,e),as(t.B,e+\"_unused_out\")}function ya(t){t.g.addBoolToStream(!0,\"free_memory\",t.C)}var _a=class{constructor(t){this.g=t,this.H=[],this.C=0,this.g.setAutoRenderToScreen(!1)}l(t,e=!0){if(e){const e=t.baseOptions||{};if(t.baseOptions?.modelAssetBuffer&&t.baseOptions?.modelAssetPath)throw Error(\"Cannot set both baseOptions.modelAssetPath and baseOptions.modelAssetBuffer\");if(!(wn(this.baseOptions,zs,1)?.g()||wn(this.baseOptions,zs,1)?.l()||t.baseOptions?.modelAssetBuffer||t.baseOptions?.modelAssetPath))throw Error(\"Either baseOptions.modelAssetPath or baseOptions.modelAssetBuffer must be set\");if(function(t,e){let n=wn(t.baseOptions,Hs,3);if(!n){var r=n=new Hs,i=new ts;Sn(r,4,Ws,i)}\"delegate\"in e&&(\"GPU\"===e.delegate?(e=n,r=new $i,Sn(e,2,Ws,r)):(e=n,r=new ts,Sn(e,4,Ws,r))),kn(t.baseOptions,0,3,n)}(this,e),e.modelAssetPath)return fetch(e.modelAssetPath.toString()).then((t=>{if(t.ok)return t.arrayBuffer();throw Error(`Failed to fetch model: ${e.modelAssetPath} (${t.status})`)})).then((t=>{try{this.g.i.FS_unlink(\"/model.dat\")}catch{}this.g.i.FS_createDataFile(\"/\",\"model.dat\",new Uint8Array(t),!0,!1,!1),fa(this,\"/model.dat\"),this.m(),this.L()}));if(e.modelAssetBuffer instanceof Uint8Array)fa(this,e.modelAssetBuffer);else if(e.modelAssetBuffer)return async function(t){const e=[];for(var n=0;;){const{done:r,value:i}=await t.read();if(r)break;e.push(i),n+=i.length}if(0===e.length)return new Uint8Array(0);if(1===e.length)return e[0];t=new Uint8Array(n),n=0;for(const r of e)t.set(r,n),n+=r.length;return t}(e.modelAssetBuffer).then((t=>{fa(this,t),this.m(),this.L()}))}return this.m(),this.L(),Promise.resolve()}L(){}ca(){let t;if(this.g.ca((e=>{t=ys(e)})),!t)throw Error(\"Failed to retrieve CalculatorGraphConfig\");return t}setGraph(t,e){this.g.attachErrorListener(((t,e)=>{this.H.push(Error(e))})),this.g.Ja(),this.g.setGraph(t,e),this.B=void 0,da(this)}finishProcessing(){this.g.finishProcessing(),da(this)}close(){this.B=void 0,this.g.closeGraph()}};function va(t,e){if(!t)throw Error(`Unable to obtain required WebGL resource: ${e}`);return t}_a.prototype.close=_a.prototype.close;class Ea{constructor(t,e,n,r){this.g=t,this.h=e,this.m=n,this.l=r}bind(){this.g.bindVertexArray(this.h)}close(){this.g.deleteVertexArray(this.h),this.g.deleteBuffer(this.m),this.g.deleteBuffer(this.l)}}function wa(t,e,n){const r=t.g;if(n=va(r.createShader(n),\"Failed to create WebGL shader\"),r.shaderSource(n,e),r.compileShader(n),!r.getShaderParameter(n,r.COMPILE_STATUS))throw Error(`Could not compile WebGL shader: ${r.getShaderInfoLog(n)}`);return r.attachShader(t.h,n),n}function Ta(t,e){const n=t.g,r=va(n.createVertexArray(),\"Failed to create vertex array\");n.bindVertexArray(r);const i=va(n.createBuffer(),\"Failed to create buffer\");n.bindBuffer(n.ARRAY_BUFFER,i),n.enableVertexAttribArray(t.O),n.vertexAttribPointer(t.O,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW);const s=va(n.createBuffer(),\"Failed to create buffer\");return n.bindBuffer(n.ARRAY_BUFFER,s),n.enableVertexAttribArray(t.L),n.vertexAttribPointer(t.L,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array(e?[0,1,0,0,1,0,1,1]:[0,0,0,1,1,1,1,0]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.bindVertexArray(null),new Ea(n,r,i,s)}function Aa(t,e){if(t.g){if(e!==t.g)throw Error(\"Cannot change GL context once initialized\")}else t.g=e}function ba(t,e,n,r){return Aa(t,e),t.h||(t.m(),t.D()),n?(t.u||(t.u=Ta(t,!0)),n=t.u):(t.A||(t.A=Ta(t,!1)),n=t.A),e.useProgram(t.h),n.bind(),t.l(),t=r(),n.g.bindVertexArray(null),t}function ka(t,e,n){return Aa(t,e),t=va(e.createTexture(),\"Failed to create texture\"),e.bindTexture(e.TEXTURE_2D,t),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,n??e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,n??e.LINEAR),e.bindTexture(e.TEXTURE_2D,null),t}function Sa(t,e,n){Aa(t,e),t.B||(t.B=va(e.createFramebuffer(),\"Failed to create framebuffe.\")),e.bindFramebuffer(e.FRAMEBUFFER,t.B),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,n,0)}function xa(t){t.g?.bindFramebuffer(t.g.FRAMEBUFFER,null)}var La=class{H(){return\"\\n precision mediump float;\\n varying vec2 vTex;\\n uniform sampler2D inputTexture;\\n void main() {\\n gl_FragColor = texture2D(inputTexture, vTex);\\n }\\n \"}m(){const t=this.g;if(this.h=va(t.createProgram(),\"Failed to create WebGL program\"),this.X=wa(this,\"\\n attribute vec2 aVertex;\\n attribute vec2 aTex;\\n varying vec2 vTex;\\n void main(void) {\\n gl_Position = vec4(aVertex, 0.0, 1.0);\\n vTex = aTex;\\n }\",t.VERTEX_SHADER),this.W=wa(this,this.H(),t.FRAGMENT_SHADER),t.linkProgram(this.h),!t.getProgramParameter(this.h,t.LINK_STATUS))throw Error(`Error during program linking: ${t.getProgramInfoLog(this.h)}`);this.O=t.getAttribLocation(this.h,\"aVertex\"),this.L=t.getAttribLocation(this.h,\"aTex\")}D(){}l(){}close(){if(this.h){const t=this.g;t.deleteProgram(this.h),t.deleteShader(this.X),t.deleteShader(this.W)}this.B&&this.g.deleteFramebuffer(this.B),this.A&&this.A.close(),this.u&&this.u.close()}};var Ra=class extends La{H(){return\"\\n precision mediump float;\\n uniform sampler2D backgroundTexture;\\n uniform sampler2D maskTexture;\\n uniform sampler2D colorMappingTexture;\\n varying vec2 vTex;\\n void main() {\\n vec4 backgroundColor = texture2D(backgroundTexture, vTex);\\n float category = texture2D(maskTexture, vTex).r;\\n vec4 categoryColor = texture2D(colorMappingTexture, vec2(category, 0.0));\\n gl_FragColor = mix(backgroundColor, categoryColor, categoryColor.a);\\n }\\n \"}D(){const t=this.g;t.activeTexture(t.TEXTURE1),this.C=ka(this,t,t.LINEAR),t.activeTexture(t.TEXTURE2),this.j=ka(this,t,t.NEAREST)}m(){super.m();const t=this.g;this.P=va(t.getUniformLocation(this.h,\"backgroundTexture\"),\"Uniform location\"),this.U=va(t.getUniformLocation(this.h,\"colorMappingTexture\"),\"Uniform location\"),this.M=va(t.getUniformLocation(this.h,\"maskTexture\"),\"Uniform location\")}l(){super.l();const t=this.g;t.uniform1i(this.M,0),t.uniform1i(this.P,1),t.uniform1i(this.U,2)}close(){this.C&&this.g.deleteTexture(this.C),this.j&&this.g.deleteTexture(this.j),super.close()}},Ia=class extends La{H(){return\"\\n precision mediump float;\\n uniform sampler2D maskTexture;\\n uniform sampler2D defaultTexture;\\n uniform sampler2D overlayTexture;\\n varying vec2 vTex;\\n void main() {\\n float confidence = texture2D(maskTexture, vTex).r;\\n vec4 defaultColor = texture2D(defaultTexture, vTex);\\n vec4 overlayColor = texture2D(overlayTexture, vTex);\\n // Apply the alpha from the overlay and merge in the default color\\n overlayColor = mix(defaultColor, overlayColor, overlayColor.a);\\n gl_FragColor = mix(defaultColor, overlayColor, confidence);\\n }\\n \"}D(){const t=this.g;t.activeTexture(t.TEXTURE1),this.j=ka(this,t),t.activeTexture(t.TEXTURE2),this.C=ka(this,t)}m(){super.m();const t=this.g;this.M=va(t.getUniformLocation(this.h,\"defaultTexture\"),\"Uniform location\"),this.P=va(t.getUniformLocation(this.h,\"overlayTexture\"),\"Uniform location\"),this.I=va(t.getUniformLocation(this.h,\"maskTexture\"),\"Uniform location\")}l(){super.l();const t=this.g;t.uniform1i(this.I,0),t.uniform1i(this.M,1),t.uniform1i(this.P,2)}close(){this.j&&this.g.deleteTexture(this.j),this.C&&this.g.deleteTexture(this.C),super.close()}};function Fa(t,e){switch(e){case 0:return t.g.find((t=>t instanceof Uint8Array));case 1:return t.g.find((t=>t instanceof Float32Array));case 2:return t.g.find((t=>\"undefined\"!=typeof WebGLTexture&&t instanceof WebGLTexture));default:throw Error(`Type is not supported: ${e}`)}}function Ma(t){var e=Fa(t,1);if(!e){if(e=Fa(t,0))e=new Float32Array(e).map((t=>t/255));else{e=new Float32Array(t.width*t.height);const r=Ca(t);var n=Na(t);if(Sa(n,r,Pa(t)),\"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod\".split(\";\").includes(navigator.platform)||navigator.userAgent.includes(\"Mac\")&&\"document\"in self&&\"ontouchend\"in self.document){n=new Float32Array(t.width*t.height*4),r.readPixels(0,0,t.width,t.height,r.RGBA,r.FLOAT,n);for(let t=0,r=0;t<e.length;++t,r+=4)e[t]=n[r]}else r.readPixels(0,0,t.width,t.height,r.RED,r.FLOAT,e)}t.g.push(e)}return e}function Pa(t){let e=Fa(t,2);if(!e){const n=Ca(t);e=Ua(t);const r=Ma(t),i=Oa(t);n.texImage2D(n.TEXTURE_2D,0,i,t.width,t.height,0,n.RED,n.FLOAT,r),Da(t)}return e}function Ca(t){if(!t.canvas)throw Error(\"Conversion to different image formats require that a canvas is passed when initializing the image.\");return t.h||(t.h=va(t.canvas.getContext(\"webgl2\"),\"You cannot use a canvas that is already bound to a different type of rendering context.\")),t.h}function Oa(t){if(t=Ca(t),!Ba)if(t.getExtension(\"EXT_color_buffer_float\")&&t.getExtension(\"OES_texture_float_linear\")&&t.getExtension(\"EXT_float_blend\"))Ba=t.R32F;else{if(!t.getExtension(\"EXT_color_buffer_half_float\"))throw Error(\"GPU does not fully support 4-channel float32 or float16 formats\");Ba=t.R16F}return Ba}function Na(t){return t.l||(t.l=new La),t.l}function Ua(t){const e=Ca(t);e.viewport(0,0,t.width,t.height),e.activeTexture(e.TEXTURE0);let n=Fa(t,2);return n||(n=ka(Na(t),e,t.m?e.LINEAR:e.NEAREST),t.g.push(n),t.j=!0),e.bindTexture(e.TEXTURE_2D,n),n}function Da(t){t.h.bindTexture(t.h.TEXTURE_2D,null)}var Ba,Ga=class{constructor(t,e,n,r,i,s,o){this.g=t,this.m=e,this.j=n,this.canvas=r,this.l=i,this.width=s,this.height=o,this.j&&(0===--ja&&console.error(\"You seem to be creating MPMask instances without invoking .close(). This leaks resources.\"))}Fa(){return!!Fa(this,0)}ka(){return!!Fa(this,1)}R(){return!!Fa(this,2)}ja(){return(e=Fa(t=this,0))||(e=Ma(t),e=new Uint8Array(e.map((t=>Math.round(255*t)))),t.g.push(e)),e;var t,e}ia(){return Ma(this)}N(){return Pa(this)}clone(){const t=[];for(const e of this.g){let n;if(e instanceof Uint8Array)n=new Uint8Array(e);else if(e instanceof Float32Array)n=new Float32Array(e);else{if(!(e instanceof WebGLTexture))throw Error(`Type is not supported: ${e}`);{const t=Ca(this),e=Na(this);t.activeTexture(t.TEXTURE1),n=ka(e,t,this.m?t.LINEAR:t.NEAREST),t.bindTexture(t.TEXTURE_2D,n);const r=Oa(this);t.texImage2D(t.TEXTURE_2D,0,r,this.width,this.height,0,t.RED,t.FLOAT,null),t.bindTexture(t.TEXTURE_2D,null),Sa(e,t,n),ba(e,t,!1,(()=>{Ua(this),t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),t.drawArrays(t.TRIANGLE_FAN,0,4),Da(this)})),xa(e),Da(this)}}t.push(n)}return new Ga(t,this.m,this.R(),this.canvas,this.l,this.width,this.height)}close(){this.j&&Ca(this).deleteTexture(Fa(this,2)),ja=-1}};Ga.prototype.close=Ga.prototype.close,Ga.prototype.clone=Ga.prototype.clone,Ga.prototype.getAsWebGLTexture=Ga.prototype.N,Ga.prototype.getAsFloat32Array=Ga.prototype.ia,Ga.prototype.getAsUint8Array=Ga.prototype.ja,Ga.prototype.hasWebGLTexture=Ga.prototype.R,Ga.prototype.hasFloat32Array=Ga.prototype.ka,Ga.prototype.hasUint8Array=Ga.prototype.Fa;var ja=250;const Va={color:\"white\",lineWidth:4,radius:6};function Xa(t){return{...Va,fillColor:(t=t||{}).color,...t}}function Ha(t,e){return t instanceof Function?t(e):t}function Wa(t,e,n){return Math.max(Math.min(e,n),Math.min(Math.max(e,n),t))}function za(t){if(!t.l)throw Error(\"CPU rendering requested but CanvasRenderingContext2D not provided.\");return t.l}function Ka(t){if(!t.j)throw Error(\"GPU rendering requested but WebGL2RenderingContext not provided.\");return t.j}function Ya(t,e,n){if(e.R())n(e.N());else{const r=e.ka()?e.ia():e.ja();t.m=t.m??new La;const i=Ka(t);n((t=new Ga([r],e.m,!1,i.canvas,t.m,e.width,e.height)).N()),t.close()}}function qa(t,e,n,r){const i=function(t){return t.g||(t.g=new Ra),t.g}(t),s=Ka(t),o=Array.isArray(n)?new ImageData(new Uint8ClampedArray(n),1,1):n;ba(i,s,!0,(()=>{!function(t,e,n,r){const i=t.g;if(i.activeTexture(i.TEXTURE0),i.bindTexture(i.TEXTURE_2D,e),i.activeTexture(i.TEXTURE1),i.bindTexture(i.TEXTURE_2D,t.C),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,n),t.I&&function(t,e){if(t!==e)return!1;t=t.entries(),e=e.entries();for(const[r,i]of t){t=r;const s=i;var n=e.next();if(n.done)return!1;const[o,a]=n.value;if(n=a,t!==o||s[0]!==n[0]||s[1]!==n[1]||s[2]!==n[2]||s[3]!==n[3])return!1}return!!e.next().done}(t.I,r))i.activeTexture(i.TEXTURE2),i.bindTexture(i.TEXTURE_2D,t.j);else{t.I=r;const e=Array(1024).fill(0);r.forEach(((t,n)=>{if(4!==t.length)throw Error(`Color at index ${n} is not a four-channel value.`);e[4*n]=t[0],e[4*n+1]=t[1],e[4*n+2]=t[2],e[4*n+3]=t[3]})),i.activeTexture(i.TEXTURE2),i.bindTexture(i.TEXTURE_2D,t.j),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,256,1,0,i.RGBA,i.UNSIGNED_BYTE,new Uint8Array(e))}}(i,e,o,r),s.clearColor(0,0,0,0),s.clear(s.COLOR_BUFFER_BIT),s.drawArrays(s.TRIANGLE_FAN,0,4);const t=i.g;t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,null)}))}function $a(t,e,n,r){const i=Ka(t),s=function(t){return t.h||(t.h=new Ia),t.h}(t),o=Array.isArray(n)?new ImageData(new Uint8ClampedArray(n),1,1):n,a=Array.isArray(r)?new ImageData(new Uint8ClampedArray(r),1,1):r;ba(s,i,!0,(()=>{var t=s.g;t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,e),t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,s.j),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,o),t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,s.C),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,a),i.clearColor(0,0,0,0),i.clear(i.COLOR_BUFFER_BIT),i.drawArrays(i.TRIANGLE_FAN,0,4),i.bindTexture(i.TEXTURE_2D,null),(t=s.g).activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,null)}))}var Ja=class{constructor(t,e){\"undefined\"!=typeof CanvasRenderingContext2D&&t instanceof CanvasRenderingContext2D||t instanceof OffscreenCanvasRenderingContext2D?(this.l=t,this.j=e):this.j=t}ya(t,e){if(t){var n=za(this);e=Xa(e),n.save();var r=n.canvas,i=0;for(const s of t)n.fillStyle=Ha(e.fillColor,{index:i,from:s}),n.strokeStyle=Ha(e.color,{index:i,from:s}),n.lineWidth=Ha(e.lineWidth,{index:i,from:s}),(t=new Path2D).arc(s.x*r.width,s.y*r.height,Ha(e.radius,{index:i,from:s}),0,2*Math.PI),n.fill(t),n.stroke(t),++i;n.restore()}}xa(t,e,n){if(t&&e){var r=za(this);n=Xa(n),r.save();var i=r.canvas,s=0;for(const o of e){r.beginPath(),e=t[o.start];const a=t[o.end];e&&a&&(r.strokeStyle=Ha(n.color,{index:s,from:e,to:a}),r.lineWidth=Ha(n.lineWidth,{index:s,from:e,to:a}),r.moveTo(e.x*i.width,e.y*i.height),r.lineTo(a.x*i.width,a.y*i.height)),++s,r.stroke()}r.restore()}}ua(t,e){const n=za(this);e=Xa(e),n.save(),n.beginPath(),n.lineWidth=Ha(e.lineWidth,{}),n.strokeStyle=Ha(e.color,{}),n.fillStyle=Ha(e.fillColor,{}),n.moveTo(t.originX,t.originY),n.lineTo(t.originX+t.width,t.originY),n.lineTo(t.originX+t.width,t.originY+t.height),n.lineTo(t.originX,t.originY+t.height),n.lineTo(t.originX,t.originY),n.stroke(),n.fill(),n.restore()}va(t,e,n=[0,0,0,255]){this.l?function(t,e,n,r){const i=Ka(t);Ya(t,e,(e=>{qa(t,e,n,r),(e=za(t)).drawImage(i.canvas,0,0,e.canvas.width,e.canvas.height)}))}(this,t,n,e):qa(this,t.N(),n,e)}wa(t,e,n){this.l?function(t,e,n,r){const i=Ka(t);Ya(t,e,(e=>{$a(t,e,n,r),(e=za(t)).drawImage(i.canvas,0,0,e.canvas.width,e.canvas.height)}))}(this,t,e,n):$a(this,t.N(),e,n)}close(){this.g?.close(),this.g=void 0,this.h?.close(),this.h=void 0,this.m?.close(),this.m=void 0}};function Za(t,e){switch(e){case 0:return t.g.find((t=>t instanceof ImageData));case 1:return t.g.find((t=>\"undefined\"!=typeof ImageBitmap&&t instanceof ImageBitmap));case 2:return t.g.find((t=>\"undefined\"!=typeof WebGLTexture&&t instanceof WebGLTexture));default:throw Error(`Type is not supported: ${e}`)}}function Qa(t){var e=Za(t,0);if(!e){e=ec(t);const n=nc(t),r=new Uint8Array(t.width*t.height*4);Sa(n,e,tc(t)),e.readPixels(0,0,t.width,t.height,e.RGBA,e.UNSIGNED_BYTE,r),xa(n),e=new ImageData(new Uint8ClampedArray(r.buffer),t.width,t.height),t.g.push(e)}return e}function tc(t){let e=Za(t,2);if(!e){const n=ec(t);e=rc(t);const r=Za(t,1)||Qa(t);n.texImage2D(n.TEXTURE_2D,0,n.RGBA,n.RGBA,n.UNSIGNED_BYTE,r),ic(t)}return e}function ec(t){if(!t.canvas)throw Error(\"Conversion to different image formats require that a canvas is passed when initializing the image.\");return t.h||(t.h=va(t.canvas.getContext(\"webgl2\"),\"You cannot use a canvas that is already bound to a different type of rendering context.\")),t.h}function nc(t){return t.l||(t.l=new La),t.l}function rc(t){const e=ec(t);e.viewport(0,0,t.width,t.height),e.activeTexture(e.TEXTURE0);let n=Za(t,2);return n||(n=ka(nc(t),e),t.g.push(n),t.m=!0),e.bindTexture(e.TEXTURE_2D,n),n}function ic(t){t.h.bindTexture(t.h.TEXTURE_2D,null)}function sc(t){const e=ec(t);return ba(nc(t),e,!0,(()=>function(t,e){const n=t.canvas;if(n.width===t.width&&n.height===t.height)return e();const r=n.width,i=n.height;return n.width=t.width,n.height=t.height,t=e(),n.width=r,n.height=i,t}(t,(()=>{if(e.bindFramebuffer(e.FRAMEBUFFER,null),e.clearColor(0,0,0,0),e.clear(e.COLOR_BUFFER_BIT),e.drawArrays(e.TRIANGLE_FAN,0,4),!(t.canvas instanceof OffscreenCanvas))throw Error(\"Conversion to ImageBitmap requires that the MediaPipe Tasks is initialized with an OffscreenCanvas\");return t.canvas.transferToImageBitmap()}))))}Ja.prototype.close=Ja.prototype.close,Ja.prototype.drawConfidenceMask=Ja.prototype.wa,Ja.prototype.drawCategoryMask=Ja.prototype.va,Ja.prototype.drawBoundingBox=Ja.prototype.ua,Ja.prototype.drawConnectors=Ja.prototype.xa,Ja.prototype.drawLandmarks=Ja.prototype.ya,Ja.lerp=function(t,e,n,r,i){return Wa(r*(1-(t-e)/(n-e))+i*(1-(n-t)/(n-e)),r,i)},Ja.clamp=Wa;var oc=class{constructor(t,e,n,r,i,s,o){this.g=t,this.j=e,this.m=n,this.canvas=r,this.l=i,this.width=s,this.height=o,(this.j||this.m)&&(0===--ac&&console.error(\"You seem to be creating MPImage instances without invoking .close(). This leaks resources.\"))}Ea(){return!!Za(this,0)}la(){return!!Za(this,1)}R(){return!!Za(this,2)}Ca(){return Qa(this)}Ba(){var t=Za(this,1);return t||(tc(this),rc(this),t=sc(this),ic(this),this.g.push(t),this.j=!0),t}N(){return tc(this)}clone(){const t=[];for(const e of this.g){let n;if(e instanceof ImageData)n=new ImageData(e.data,this.width,this.height);else if(e instanceof WebGLTexture){const t=ec(this),e=nc(this);t.activeTexture(t.TEXTURE1),n=ka(e,t),t.bindTexture(t.TEXTURE_2D,n),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,this.width,this.height,0,t.RGBA,t.UNSIGNED_BYTE,null),t.bindTexture(t.TEXTURE_2D,null),Sa(e,t,n),ba(e,t,!1,(()=>{rc(this),t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),t.drawArrays(t.TRIANGLE_FAN,0,4),ic(this)})),xa(e),ic(this)}else{if(!(e instanceof ImageBitmap))throw Error(`Type is not supported: ${e}`);tc(this),rc(this),n=sc(this),ic(this)}t.push(n)}return new oc(t,this.la(),this.R(),this.canvas,this.l,this.width,this.height)}close(){this.j&&Za(this,1).close(),this.m&&ec(this).deleteTexture(Za(this,2)),ac=-1}};oc.prototype.close=oc.prototype.close,oc.prototype.clone=oc.prototype.clone,oc.prototype.getAsWebGLTexture=oc.prototype.N,oc.prototype.getAsImageBitmap=oc.prototype.Ba,oc.prototype.getAsImageData=oc.prototype.Ca,oc.prototype.hasWebGLTexture=oc.prototype.R,oc.prototype.hasImageBitmap=oc.prototype.la,oc.prototype.hasImageData=oc.prototype.Ea;var ac=250;function cc(...t){return t.map((([t,e])=>({start:t,end:e})))}const hc=function(t){return class extends t{Ja(){this.i._registerModelResourcesGraphService()}}}((uc=class{constructor(t,e){this.l=!0,this.i=t,this.g=null,this.h=0,this.m=\"function\"==typeof this.i._addIntToInputStream,void 0!==e?this.i.canvas=e:ra()?this.i.canvas=new OffscreenCanvas(1,1):(console.warn(\"OffscreenCanvas not supported and GraphRunner constructor glCanvas parameter is undefined. Creating backup canvas.\"),this.i.canvas=document.createElement(\"canvas\"))}async initializeGraph(t){const e=await(await fetch(t)).arrayBuffer();t=!(t.endsWith(\".pbtxt\")||t.endsWith(\".textproto\")),this.setGraph(new Uint8Array(e),t)}setGraphFromString(t){this.setGraph((new TextEncoder).encode(t),!1)}setGraph(t,e){const n=t.length,r=this.i._malloc(n);this.i.HEAPU8.set(t,r),e?this.i._changeBinaryGraph(n,r):this.i._changeTextGraph(n,r),this.i._free(r)}configureAudio(t,e,n,r,i){this.i._configureAudio||console.warn('Attempting to use configureAudio without support for input audio. Is build dep \":gl_graph_runner_audio\" missing?'),oa(this,r||\"input_audio\",(r=>{oa(this,i=i||\"audio_header\",(i=>{this.i._configureAudio(r,i,t,e??0,n)}))}))}setAutoResizeCanvas(t){this.l=t}setAutoRenderToScreen(t){this.i._setAutoRenderToScreen(t)}setGpuBufferVerticalFlip(t){this.i.gpuOriginForWebTexturesIsBottomLeft=t}ca(t){ha(this,\"__graph_config__\",(e=>{t(e)})),oa(this,\"__graph_config__\",(t=>{this.i._getGraphConfig(t,void 0)})),delete this.i.simpleListeners.__graph_config__}attachErrorListener(t){this.i.errorListener=t}attachEmptyPacketListener(t,e){this.i.emptyPacketListeners=this.i.emptyPacketListeners||{},this.i.emptyPacketListeners[t]=e}addAudioToStream(t,e,n){this.addAudioToStreamWithShape(t,0,0,e,n)}addAudioToStreamWithShape(t,e,n,r,i){const s=4*t.length;this.h!==s&&(this.g&&this.i._free(this.g),this.g=this.i._malloc(s),this.h=s),this.i.HEAPF32.set(t,this.g/4),oa(this,r,(t=>{this.i._addAudioToInputStream(this.g,e,n,t,i)}))}addGpuBufferToStream(t,e,n){oa(this,e,(e=>{const[r,i]=aa(this,t,e);this.i._addBoundTextureToStream(e,r,i,n)}))}addBoolToStream(t,e,n){oa(this,e,(e=>{this.i._addBoolToInputStream(t,e,n)}))}addDoubleToStream(t,e,n){oa(this,e,(e=>{this.i._addDoubleToInputStream(t,e,n)}))}addFloatToStream(t,e,n){oa(this,e,(e=>{this.i._addFloatToInputStream(t,e,n)}))}addIntToStream(t,e,n){oa(this,e,(e=>{this.i._addIntToInputStream(t,e,n)}))}addUintToStream(t,e,n){oa(this,e,(e=>{this.i._addUintToInputStream(t,e,n)}))}addStringToStream(t,e,n){oa(this,e,(e=>{oa(this,t,(t=>{this.i._addStringToInputStream(t,e,n)}))}))}addStringRecordToStream(t,e,n){oa(this,e,(e=>{ca(this,Object.keys(t),(r=>{ca(this,Object.values(t),(i=>{this.i._addFlatHashMapToInputStream(r,i,Object.keys(t).length,e,n)}))}))}))}addProtoToStream(t,e,n,r){oa(this,n,(n=>{oa(this,e,(e=>{const i=this.i._malloc(t.length);this.i.HEAPU8.set(t,i),this.i._addProtoToInputStream(i,t.length,e,n,r),this.i._free(i)}))}))}addEmptyPacketToStream(t,e){oa(this,t,(t=>{this.i._addEmptyPacketToInputStream(t,e)}))}addBoolVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateBoolVector(t.length);if(!r)throw Error(\"Unable to allocate new bool vector on heap.\");for(const e of t)this.i._addBoolVectorEntry(r,e);this.i._addBoolVectorToInputStream(r,e,n)}))}addDoubleVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateDoubleVector(t.length);if(!r)throw Error(\"Unable to allocate new double vector on heap.\");for(const e of t)this.i._addDoubleVectorEntry(r,e);this.i._addDoubleVectorToInputStream(r,e,n)}))}addFloatVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateFloatVector(t.length);if(!r)throw Error(\"Unable to allocate new float vector on heap.\");for(const e of t)this.i._addFloatVectorEntry(r,e);this.i._addFloatVectorToInputStream(r,e,n)}))}addIntVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateIntVector(t.length);if(!r)throw Error(\"Unable to allocate new int vector on heap.\");for(const e of t)this.i._addIntVectorEntry(r,e);this.i._addIntVectorToInputStream(r,e,n)}))}addUintVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateUintVector(t.length);if(!r)throw Error(\"Unable to allocate new unsigned int vector on heap.\");for(const e of t)this.i._addUintVectorEntry(r,e);this.i._addUintVectorToInputStream(r,e,n)}))}addStringVectorToStream(t,e,n){oa(this,e,(e=>{const r=this.i._allocateStringVector(t.length);if(!r)throw Error(\"Unable to allocate new string vector on heap.\");for(const e of t)oa(this,e,(t=>{this.i._addStringVectorEntry(r,t)}));this.i._addStringVectorToInputStream(r,e,n)}))}addBoolToInputSidePacket(t,e){oa(this,e,(e=>{this.i._addBoolToInputSidePacket(t,e)}))}addDoubleToInputSidePacket(t,e){oa(this,e,(e=>{this.i._addDoubleToInputSidePacket(t,e)}))}addFloatToInputSidePacket(t,e){oa(this,e,(e=>{this.i._addFloatToInputSidePacket(t,e)}))}addIntToInputSidePacket(t,e){oa(this,e,(e=>{this.i._addIntToInputSidePacket(t,e)}))}addUintToInputSidePacket(t,e){oa(this,e,(e=>{this.i._addUintToInputSidePacket(t,e)}))}addStringToInputSidePacket(t,e){oa(this,e,(e=>{oa(this,t,(t=>{this.i._addStringToInputSidePacket(t,e)}))}))}addProtoToInputSidePacket(t,e,n){oa(this,n,(n=>{oa(this,e,(e=>{const r=this.i._malloc(t.length);this.i.HEAPU8.set(t,r),this.i._addProtoToInputSidePacket(r,t.length,e,n),this.i._free(r)}))}))}addBoolVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateBoolVector(t.length);if(!n)throw Error(\"Unable to allocate new bool vector on heap.\");for(const e of t)this.i._addBoolVectorEntry(n,e);this.i._addBoolVectorToInputSidePacket(n,e)}))}addDoubleVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateDoubleVector(t.length);if(!n)throw Error(\"Unable to allocate new double vector on heap.\");for(const e of t)this.i._addDoubleVectorEntry(n,e);this.i._addDoubleVectorToInputSidePacket(n,e)}))}addFloatVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateFloatVector(t.length);if(!n)throw Error(\"Unable to allocate new float vector on heap.\");for(const e of t)this.i._addFloatVectorEntry(n,e);this.i._addFloatVectorToInputSidePacket(n,e)}))}addIntVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateIntVector(t.length);if(!n)throw Error(\"Unable to allocate new int vector on heap.\");for(const e of t)this.i._addIntVectorEntry(n,e);this.i._addIntVectorToInputSidePacket(n,e)}))}addUintVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateUintVector(t.length);if(!n)throw Error(\"Unable to allocate new unsigned int vector on heap.\");for(const e of t)this.i._addUintVectorEntry(n,e);this.i._addUintVectorToInputSidePacket(n,e)}))}addStringVectorToInputSidePacket(t,e){oa(this,e,(e=>{const n=this.i._allocateStringVector(t.length);if(!n)throw Error(\"Unable to allocate new string vector on heap.\");for(const e of t)oa(this,e,(t=>{this.i._addStringVectorEntry(n,t)}));this.i._addStringVectorToInputSidePacket(n,e)}))}attachBoolListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachBoolListener(t)}))}attachBoolVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachBoolVectorListener(t)}))}attachIntListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachIntListener(t)}))}attachIntVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachIntVectorListener(t)}))}attachUintListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachUintListener(t)}))}attachUintVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachUintVectorListener(t)}))}attachDoubleListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachDoubleListener(t)}))}attachDoubleVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachDoubleVectorListener(t)}))}attachFloatListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachFloatListener(t)}))}attachFloatVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachFloatVectorListener(t)}))}attachStringListener(t,e){ha(this,t,e),oa(this,t,(t=>{this.i._attachStringListener(t)}))}attachStringVectorListener(t,e){ua(this,t,e),oa(this,t,(t=>{this.i._attachStringVectorListener(t)}))}attachProtoListener(t,e,n){ha(this,t,e),oa(this,t,(t=>{this.i._attachProtoListener(t,n||!1)}))}attachProtoVectorListener(t,e,n){ua(this,t,e),oa(this,t,(t=>{this.i._attachProtoVectorListener(t,n||!1)}))}attachAudioListener(t,e,n){this.i._attachAudioListener||console.warn('Attempting to use attachAudioListener without support for output audio. Is build dep \":gl_graph_runner_audio_out\" missing?'),ha(this,t,((t,n)=>{t=new Float32Array(t.buffer,t.byteOffset,t.length/4),e(t,n)})),oa(this,t,(t=>{this.i._attachAudioListener(t,n||!1)}))}finishProcessing(){this.i._waitUntilIdle()}closeGraph(){this.i._closeGraph(),this.i.simpleListeners=void 0,this.i.emptyPacketListeners=void 0}},class extends uc{get ga(){return this.i}pa(t,e,n){oa(this,e,(e=>{const[r,i]=aa(this,t,e);this.ga._addBoundTextureAsImageToStream(e,r,i,n)}))}Z(t,e){ha(this,t,e),oa(this,t,(t=>{this.ga._attachImageListener(t)}))}aa(t,e){ua(this,t,e),oa(this,t,(t=>{this.ga._attachImageVectorListener(t)}))}}));var uc,lc=class extends hc{};async function fc(t,e,n){return async function(t,e,n,r){return la(t,e,n,r)}(t,n.canvas??(ra()?void 0:document.createElement(\"canvas\")),e,n)}function dc(t,e,n,r){if(t.U){const s=new Ms;if(n?.regionOfInterest){if(!t.oa)throw Error(\"This task doesn't support region-of-interest.\");var i=n.regionOfInterest;if(i.left>=i.right||i.top>=i.bottom)throw Error(\"Expected RectF with left < right and top < bottom.\");if(i.left<0||i.top<0||i.right>1||i.bottom>1)throw Error(\"Expected RectF values to be in [0,1].\");Pn(s,1,(i.left+i.right)/2),Pn(s,2,(i.top+i.bottom)/2),Pn(s,4,i.right-i.left),Pn(s,3,i.bottom-i.top)}else Pn(s,1,.5),Pn(s,2,.5),Pn(s,4,1),Pn(s,3,1);if(n?.rotationDegrees){if(n?.rotationDegrees%90!=0)throw Error(\"Expected rotation to be a multiple of 90°.\");if(Pn(s,5,-Math.PI*n.rotationDegrees/180),n?.rotationDegrees%180!=0){const[t,r]=sa(e);n=Fn(s,3)*r/t,i=Fn(s,4)*t/r,Pn(s,4,n),Pn(s,3,i)}}t.g.addProtoToStream(s.g(),\"mediapipe.NormalizedRect\",t.U,r)}t.g.pa(e,t.X,r??performance.now()),t.finishProcessing()}function pc(t,e,n){if(t.baseOptions?.g())throw Error(\"Task is not initialized with image mode. 'runningMode' must be set to 'IMAGE'.\");dc(t,e,n,t.C+1)}function gc(t,e,n,r){if(!t.baseOptions?.g())throw Error(\"Task is not initialized with video mode. 'runningMode' must be set to 'VIDEO'.\");dc(t,e,n,r)}function mc(t,e,n,r){var i=e.data;const s=e.width,o=s*(e=e.height);if((i instanceof Uint8Array||i instanceof Float32Array)&&i.length!==o)throw Error(\"Unsupported channel count: \"+i.length/o);return t=new Ga([i],n,!1,t.g.i.canvas,t.P,s,e),r?t.clone():t}var yc=class extends _a{constructor(t,e,n,r){super(t),this.g=t,this.X=e,this.U=n,this.oa=r,this.P=new La}l(t,e=!0){if(\"runningMode\"in t&&nn(this.baseOptions,2,te(!!t.runningMode&&\"IMAGE\"!==t.runningMode)),void 0!==t.canvas&&this.g.i.canvas!==t.canvas)throw Error(\"You must create a new task to reset the canvas.\");return super.l(t,e)}close(){this.P.close(),super.close()}};yc.prototype.close=yc.prototype.close;var _c=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect_in\",!1),this.j={detections:[]},kn(t=this.h=new $s,0,1,e=new Ks),Pn(this.h,2,.5),Pn(this.h,3,.3)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return\"minDetectionConfidence\"in t&&Pn(this.h,2,t.minDetectionConfidence??.5),\"minSuppressionThreshold\"in t&&Pn(this.h,3,t.minSuppressionThreshold??.3),this.l(t)}F(t,e){return this.j={detections:[]},pc(this,t,e),this.j}G(t,e,n){return this.j={detections:[]},gc(this,t,n,e),this.j}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect_in\"),ps(t,\"detections\");const e=new rs;Mr(e,Zs,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.face_detector.FaceDetectorGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect_in\"),as(n,\"DETECTIONS:detections\"),n.o(e),fs(t,n),this.g.attachProtoVectorListener(\"detections\",((t,e)=>{for(const e of t)t=ks(e),this.j.detections.push(Ko(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"detections\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};_c.prototype.detectForVideo=_c.prototype.G,_c.prototype.detect=_c.prototype.F,_c.prototype.setOptions=_c.prototype.o,_c.createFromModelPath=async function(t,e){return fc(_c,t,{baseOptions:{modelAssetPath:e}})},_c.createFromModelBuffer=function(t,e){return fc(_c,t,{baseOptions:{modelAssetBuffer:e}})},_c.createFromOptions=function(t,e){return fc(_c,t,e)};var vc=cc([61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]),Ec=cc([263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]),wc=cc([276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]),Tc=cc([474,475],[475,476],[476,477],[477,474]),Ac=cc([33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]),bc=cc([46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]),kc=cc([469,470],[470,471],[471,472],[472,469]),Sc=cc([10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]),xc=[...vc,...Ec,...wc,...Ac,...bc,...Sc],Lc=cc([127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]);function Rc(t){t.j={faceLandmarks:[],faceBlendshapes:[],facialTransformationMatrixes:[]}}var Ic=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!1),this.j={faceLandmarks:[],faceBlendshapes:[],facialTransformationMatrixes:[]},this.outputFacialTransformationMatrixes=this.outputFaceBlendshapes=!1,kn(t=this.h=new eo,0,1,e=new Ks),this.A=new to,kn(this.h,0,3,this.A),this.u=new $s,kn(this.h,0,2,this.u),Mn(this.u,4,1),Pn(this.u,2,.5),Pn(this.A,2,.5),Pn(this.h,4,.5)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return\"numFaces\"in t&&Mn(this.u,4,t.numFaces??1),\"minFaceDetectionConfidence\"in t&&Pn(this.u,2,t.minFaceDetectionConfidence??.5),\"minTrackingConfidence\"in t&&Pn(this.h,4,t.minTrackingConfidence??.5),\"minFacePresenceConfidence\"in t&&Pn(this.A,2,t.minFacePresenceConfidence??.5),\"outputFaceBlendshapes\"in t&&(this.outputFaceBlendshapes=!!t.outputFaceBlendshapes),\"outputFacialTransformationMatrixes\"in t&&(this.outputFacialTransformationMatrixes=!!t.outputFacialTransformationMatrixes),this.l(t)}F(t,e){return Rc(this),pc(this,t,e),this.j}G(t,e,n){return Rc(this),gc(this,t,n,e),this.j}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\"),ps(t,\"face_landmarks\");const e=new rs;Mr(e,ro,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.face_landmarker.FaceLandmarkerGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"NORM_LANDMARKS:face_landmarks\"),n.o(e),fs(t,n),this.g.attachProtoVectorListener(\"face_landmarks\",((t,e)=>{for(const e of t)t=Rs(e),this.j.faceLandmarks.push(Yo(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"face_landmarks\",(t=>{pa(this,t)})),this.outputFaceBlendshapes&&(ps(t,\"blendshapes\"),as(n,\"BLENDSHAPES:blendshapes\"),this.g.attachProtoVectorListener(\"blendshapes\",((t,e)=>{if(this.outputFaceBlendshapes)for(const e of t)t=ws(e),this.j.faceBlendshapes.push(Wo(t.g()??[]));pa(this,e)})),this.g.attachEmptyPacketListener(\"blendshapes\",(t=>{pa(this,t)}))),this.outputFacialTransformationMatrixes&&(ps(t,\"face_geometry\"),as(n,\"FACE_GEOMETRY:face_geometry\"),this.g.attachProtoVectorListener(\"face_geometry\",((t,e)=>{if(this.outputFacialTransformationMatrixes)for(const e of t)(t=wn(t=Qs(e),Is,2))&&this.j.facialTransformationMatrixes.push({rows:Rn(t,1)??0??0,columns:Rn(t,2)??0??0,data:on(t,3,Qt,sn()).slice()??[]});pa(this,e)})),this.g.attachEmptyPacketListener(\"face_geometry\",(t=>{pa(this,t)}))),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Ic.prototype.detectForVideo=Ic.prototype.G,Ic.prototype.detect=Ic.prototype.F,Ic.prototype.setOptions=Ic.prototype.o,Ic.createFromModelPath=function(t,e){return fc(Ic,t,{baseOptions:{modelAssetPath:e}})},Ic.createFromModelBuffer=function(t,e){return fc(Ic,t,{baseOptions:{modelAssetBuffer:e}})},Ic.createFromOptions=function(t,e){return fc(Ic,t,e)},Ic.FACE_LANDMARKS_LIPS=vc,Ic.FACE_LANDMARKS_LEFT_EYE=Ec,Ic.FACE_LANDMARKS_LEFT_EYEBROW=wc,Ic.FACE_LANDMARKS_LEFT_IRIS=Tc,Ic.FACE_LANDMARKS_RIGHT_EYE=Ac,Ic.FACE_LANDMARKS_RIGHT_EYEBROW=bc,Ic.FACE_LANDMARKS_RIGHT_IRIS=kc,Ic.FACE_LANDMARKS_FACE_OVAL=Sc,Ic.FACE_LANDMARKS_CONTOURS=xc,Ic.FACE_LANDMARKS_TESSELATION=Lc;var Fc=cc([0,1],[1,2],[2,3],[3,4],[0,5],[5,6],[6,7],[7,8],[5,9],[9,10],[10,11],[11,12],[9,13],[13,14],[14,15],[15,16],[13,17],[0,17],[17,18],[18,19],[19,20]);function Mc(t){t.gestures=[],t.landmarks=[],t.worldLandmarks=[],t.handedness=[]}function Pc(t){return 0===t.gestures.length?{gestures:[],landmarks:[],worldLandmarks:[],handedness:[],handednesses:[]}:{gestures:t.gestures,landmarks:t.landmarks,worldLandmarks:t.worldLandmarks,handedness:t.handedness,handednesses:t.handedness}}function Cc(t,e=!0){const n=[];for(const i of t){var r=ws(i);t=[];for(const n of r.g())r=e&&null!=Rn(n,1)?Rn(n,1)??0:-1,t.push({score:Fn(n,2)??0,index:r,categoryName:ge(tn(n,3))??\"\"??\"\",displayName:ge(tn(n,4))??\"\"??\"\"});n.push(t)}return n}var Oc=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!1),this.gestures=[],this.landmarks=[],this.worldLandmarks=[],this.handedness=[],kn(t=this.j=new uo,0,1,e=new Ks),this.u=new ho,kn(this.j,0,2,this.u),this.D=new co,kn(this.u,0,3,this.D),this.A=new ao,kn(this.u,0,2,this.A),this.h=new oo,kn(this.j,0,3,this.h),Pn(this.A,2,.5),Pn(this.u,4,.5),Pn(this.D,2,.5)}get baseOptions(){return wn(this.j,Ks,1)}set baseOptions(t){kn(this.j,0,1,t)}o(t){if(Mn(this.A,3,t.numHands??1),\"minHandDetectionConfidence\"in t&&Pn(this.A,2,t.minHandDetectionConfidence??.5),\"minTrackingConfidence\"in t&&Pn(this.u,4,t.minTrackingConfidence??.5),\"minHandPresenceConfidence\"in t&&Pn(this.D,2,t.minHandPresenceConfidence??.5),t.cannedGesturesClassifierOptions){var e=new io,n=e,r=Xo(t.cannedGesturesClassifierOptions,wn(this.h,io,3)?.l());kn(n,0,2,r),kn(this.h,0,3,e)}else void 0===t.cannedGesturesClassifierOptions&&wn(this.h,io,3)?.g();return t.customGesturesClassifierOptions?(kn(n=e=new io,0,2,r=Xo(t.customGesturesClassifierOptions,wn(this.h,io,4)?.l())),kn(this.h,0,4,e)):void 0===t.customGesturesClassifierOptions&&wn(this.h,io,4)?.g(),this.l(t)}Ha(t,e){return Mc(this),pc(this,t,e),Pc(this)}Ia(t,e,n){return Mc(this),gc(this,t,n,e),Pc(this)}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\"),ps(t,\"hand_gestures\"),ps(t,\"hand_landmarks\"),ps(t,\"world_hand_landmarks\"),ps(t,\"handedness\");const e=new rs;Mr(e,mo,this.j);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.gesture_recognizer.GestureRecognizerGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"HAND_GESTURES:hand_gestures\"),as(n,\"LANDMARKS:hand_landmarks\"),as(n,\"WORLD_LANDMARKS:world_hand_landmarks\"),as(n,\"HANDEDNESS:handedness\"),n.o(e),fs(t,n),this.g.attachProtoVectorListener(\"hand_landmarks\",((t,e)=>{for(const e of t){t=Rs(e);const n=[];for(const e of An(t,Ls,1))n.push({x:Fn(e,1)??0,y:Fn(e,2)??0,z:Fn(e,3)??0,visibility:Fn(e,4)??0});this.landmarks.push(n)}pa(this,e)})),this.g.attachEmptyPacketListener(\"hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoVectorListener(\"world_hand_landmarks\",((t,e)=>{for(const e of t){t=xs(e);const n=[];for(const e of An(t,Ss,1))n.push({x:Fn(e,1)??0,y:Fn(e,2)??0,z:Fn(e,3)??0,visibility:Fn(e,4)??0});this.worldLandmarks.push(n)}pa(this,e)})),this.g.attachEmptyPacketListener(\"world_hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoVectorListener(\"hand_gestures\",((t,e)=>{this.gestures.push(...Cc(t,!1)),pa(this,e)})),this.g.attachEmptyPacketListener(\"hand_gestures\",(t=>{pa(this,t)})),this.g.attachProtoVectorListener(\"handedness\",((t,e)=>{this.handedness.push(...Cc(t)),pa(this,e)})),this.g.attachEmptyPacketListener(\"handedness\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};function Nc(t){return{landmarks:t.landmarks,worldLandmarks:t.worldLandmarks,handednesses:t.handedness,handedness:t.handedness}}Oc.prototype.recognizeForVideo=Oc.prototype.Ia,Oc.prototype.recognize=Oc.prototype.Ha,Oc.prototype.setOptions=Oc.prototype.o,Oc.createFromModelPath=function(t,e){return fc(Oc,t,{baseOptions:{modelAssetPath:e}})},Oc.createFromModelBuffer=function(t,e){return fc(Oc,t,{baseOptions:{modelAssetBuffer:e}})},Oc.createFromOptions=function(t,e){return fc(Oc,t,e)},Oc.HAND_CONNECTIONS=Fc;var Uc=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!1),this.landmarks=[],this.worldLandmarks=[],this.handedness=[],kn(t=this.h=new ho,0,1,e=new Ks),this.u=new co,kn(this.h,0,3,this.u),this.j=new ao,kn(this.h,0,2,this.j),Mn(this.j,3,1),Pn(this.j,2,.5),Pn(this.u,2,.5),Pn(this.h,4,.5)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return\"numHands\"in t&&Mn(this.j,3,t.numHands??1),\"minHandDetectionConfidence\"in t&&Pn(this.j,2,t.minHandDetectionConfidence??.5),\"minTrackingConfidence\"in t&&Pn(this.h,4,t.minTrackingConfidence??.5),\"minHandPresenceConfidence\"in t&&Pn(this.u,2,t.minHandPresenceConfidence??.5),this.l(t)}F(t,e){return this.landmarks=[],this.worldLandmarks=[],this.handedness=[],pc(this,t,e),Nc(this)}G(t,e,n){return this.landmarks=[],this.worldLandmarks=[],this.handedness=[],gc(this,t,n,e),Nc(this)}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\"),ps(t,\"hand_landmarks\"),ps(t,\"world_hand_landmarks\"),ps(t,\"handedness\");const e=new rs;Mr(e,yo,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.hand_landmarker.HandLandmarkerGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"LANDMARKS:hand_landmarks\"),as(n,\"WORLD_LANDMARKS:world_hand_landmarks\"),as(n,\"HANDEDNESS:handedness\"),n.o(e),fs(t,n),this.g.attachProtoVectorListener(\"hand_landmarks\",((t,e)=>{for(const e of t)t=Rs(e),this.landmarks.push(Yo(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoVectorListener(\"world_hand_landmarks\",((t,e)=>{for(const e of t)t=xs(e),this.worldLandmarks.push(qo(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"world_hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoVectorListener(\"handedness\",((t,e)=>{var n=this.handedness,r=n.push;const i=[];for(const e of t){t=ws(e);const n=[];for(const e of t.g())n.push({score:Fn(e,2)??0,index:Rn(e,1)??0??-1,categoryName:ge(tn(e,3))??\"\"??\"\",displayName:ge(tn(e,4))??\"\"??\"\"});i.push(n)}r.call(n,...i),pa(this,e)})),this.g.attachEmptyPacketListener(\"handedness\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Uc.prototype.detectForVideo=Uc.prototype.G,Uc.prototype.detect=Uc.prototype.F,Uc.prototype.setOptions=Uc.prototype.o,Uc.createFromModelPath=function(t,e){return fc(Uc,t,{baseOptions:{modelAssetPath:e}})},Uc.createFromModelBuffer=function(t,e){return fc(Uc,t,{baseOptions:{modelAssetBuffer:e}})},Uc.createFromOptions=function(t,e){return fc(Uc,t,e)},Uc.HAND_CONNECTIONS=Fc;var Dc=cc([0,1],[1,2],[2,3],[3,7],[0,4],[4,5],[5,6],[6,8],[9,10],[11,12],[11,13],[13,15],[15,17],[15,19],[15,21],[17,19],[12,14],[14,16],[16,18],[16,20],[16,22],[18,20],[11,23],[12,24],[23,24],[23,25],[24,26],[25,27],[26,28],[27,29],[28,30],[29,31],[30,32],[27,31],[28,32]);function Bc(t){t.h={faceLandmarks:[],faceBlendshapes:[],poseLandmarks:[],poseWorldLandmarks:[],poseSegmentationMasks:[],leftHandLandmarks:[],leftHandWorldLandmarks:[],rightHandLandmarks:[],rightHandWorldLandmarks:[]}}function Gc(t){try{if(!t.D)return t.h;t.D(t.h)}finally{ya(t)}}function jc(t,e){t=Rs(t),e.push(Yo(t))}var Vc=class extends yc{constructor(t,e){super(new lc(t,e),\"input_frames_image\",null,!1),this.h={faceLandmarks:[],faceBlendshapes:[],poseLandmarks:[],poseWorldLandmarks:[],poseSegmentationMasks:[],leftHandLandmarks:[],leftHandWorldLandmarks:[],rightHandLandmarks:[],rightHandWorldLandmarks:[]},this.outputPoseSegmentationMasks=this.outputFaceBlendshapes=!1,kn(t=this.j=new wo,0,1,e=new Ks),this.I=new co,kn(this.j,0,2,this.I),this.W=new _o,kn(this.j,0,3,this.W),this.u=new $s,kn(this.j,0,4,this.u),this.O=new to,kn(this.j,0,5,this.O),this.A=new vo,kn(this.j,0,6,this.A),this.M=new Eo,kn(this.j,0,7,this.M),Pn(this.u,2,.5),Pn(this.u,3,.3),Pn(this.O,2,.5),Pn(this.A,2,.5),Pn(this.A,3,.3),Pn(this.M,2,.5),Pn(this.I,2,.5)}get baseOptions(){return wn(this.j,Ks,1)}set baseOptions(t){kn(this.j,0,1,t)}o(t){return\"minFaceDetectionConfidence\"in t&&Pn(this.u,2,t.minFaceDetectionConfidence??.5),\"minFaceSuppressionThreshold\"in t&&Pn(this.u,3,t.minFaceSuppressionThreshold??.3),\"minFacePresenceConfidence\"in t&&Pn(this.O,2,t.minFacePresenceConfidence??.5),\"outputFaceBlendshapes\"in t&&(this.outputFaceBlendshapes=!!t.outputFaceBlendshapes),\"minPoseDetectionConfidence\"in t&&Pn(this.A,2,t.minPoseDetectionConfidence??.5),\"minPoseSuppressionThreshold\"in t&&Pn(this.A,3,t.minPoseSuppressionThreshold??.3),\"minPosePresenceConfidence\"in t&&Pn(this.M,2,t.minPosePresenceConfidence??.5),\"outputPoseSegmentationMasks\"in t&&(this.outputPoseSegmentationMasks=!!t.outputPoseSegmentationMasks),\"minHandLandmarksConfidence\"in t&&Pn(this.I,2,t.minHandLandmarksConfidence??.5),this.l(t)}F(t,e,n){const r=\"function\"!=typeof e?e:{};return this.D=\"function\"==typeof e?e:n,Bc(this),pc(this,t,r),Gc(this)}G(t,e,n,r){const i=\"function\"!=typeof n?n:{};return this.D=\"function\"==typeof n?n:r,Bc(this),gc(this,t,i,e),Gc(this)}m(){var t=new gs;ds(t,\"input_frames_image\"),ps(t,\"pose_landmarks\"),ps(t,\"pose_world_landmarks\"),ps(t,\"face_landmarks\"),ps(t,\"left_hand_landmarks\"),ps(t,\"left_hand_world_landmarks\"),ps(t,\"right_hand_landmarks\"),ps(t,\"right_hand_world_landmarks\");const e=new rs,n=new Xi;Cn(n,1,\"type.googleapis.com/mediapipe.tasks.vision.holistic_landmarker.proto.HolisticLandmarkerGraphOptions\"),function(t,e){if(null!=e)if(Array.isArray(e))nn(t,2,Ce(e,0,Ne));else{if(!(\"string\"==typeof e||e instanceof P||R(e)))throw Error(\"invalid value in Any.value field: \"+e+\" expected a ByteString, a base64 encoded string, a Uint8Array or a jspb array\");dn(t,2,lt(e,!1),F())}}(n,this.j.g());const r=new cs;Cn(r,2,\"mediapipe.tasks.vision.holistic_landmarker.HolisticLandmarkerGraph\"),Ln(r,8,Xi,n),os(r,\"IMAGE:input_frames_image\"),as(r,\"POSE_LANDMARKS:pose_landmarks\"),as(r,\"POSE_WORLD_LANDMARKS:pose_world_landmarks\"),as(r,\"FACE_LANDMARKS:face_landmarks\"),as(r,\"LEFT_HAND_LANDMARKS:left_hand_landmarks\"),as(r,\"LEFT_HAND_WORLD_LANDMARKS:left_hand_world_landmarks\"),as(r,\"RIGHT_HAND_LANDMARKS:right_hand_landmarks\"),as(r,\"RIGHT_HAND_WORLD_LANDMARKS:right_hand_world_landmarks\"),r.o(e),fs(t,r),ga(this,t),this.g.attachProtoListener(\"pose_landmarks\",((t,e)=>{jc(t,this.h.poseLandmarks),pa(this,e)})),this.g.attachEmptyPacketListener(\"pose_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoListener(\"pose_world_landmarks\",((t,e)=>{var n=this.h.poseWorldLandmarks;t=xs(t),n.push(qo(t)),pa(this,e)})),this.g.attachEmptyPacketListener(\"pose_world_landmarks\",(t=>{pa(this,t)})),this.outputPoseSegmentationMasks&&(as(r,\"POSE_SEGMENTATION_MASK:pose_segmentation_mask\"),ma(this,\"pose_segmentation_mask\"),this.g.Z(\"pose_segmentation_mask\",((t,e)=>{this.h.poseSegmentationMasks=[mc(this,t,!0,!this.D)],pa(this,e)})),this.g.attachEmptyPacketListener(\"pose_segmentation_mask\",(t=>{this.h.poseSegmentationMasks=[],pa(this,t)}))),this.g.attachProtoListener(\"face_landmarks\",((t,e)=>{jc(t,this.h.faceLandmarks),pa(this,e)})),this.g.attachEmptyPacketListener(\"face_landmarks\",(t=>{pa(this,t)})),this.outputFaceBlendshapes&&(ps(t,\"extra_blendshapes\"),as(r,\"FACE_BLENDSHAPES:extra_blendshapes\"),this.g.attachProtoListener(\"extra_blendshapes\",((t,e)=>{var n=this.h.faceBlendshapes;this.outputFaceBlendshapes&&(t=ws(t),n.push(Wo(t.g()??[]))),pa(this,e)})),this.g.attachEmptyPacketListener(\"extra_blendshapes\",(t=>{pa(this,t)}))),this.g.attachProtoListener(\"left_hand_landmarks\",((t,e)=>{jc(t,this.h.leftHandLandmarks),pa(this,e)})),this.g.attachEmptyPacketListener(\"left_hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoListener(\"left_hand_world_landmarks\",((t,e)=>{var n=this.h.leftHandWorldLandmarks;t=xs(t),n.push(qo(t)),pa(this,e)})),this.g.attachEmptyPacketListener(\"left_hand_world_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoListener(\"right_hand_landmarks\",((t,e)=>{jc(t,this.h.rightHandLandmarks),pa(this,e)})),this.g.attachEmptyPacketListener(\"right_hand_landmarks\",(t=>{pa(this,t)})),this.g.attachProtoListener(\"right_hand_world_landmarks\",((t,e)=>{var n=this.h.rightHandWorldLandmarks;t=xs(t),n.push(qo(t)),pa(this,e)})),this.g.attachEmptyPacketListener(\"right_hand_world_landmarks\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Vc.prototype.detectForVideo=Vc.prototype.G,Vc.prototype.detect=Vc.prototype.F,Vc.prototype.setOptions=Vc.prototype.o,Vc.createFromModelPath=function(t,e){return fc(Vc,t,{baseOptions:{modelAssetPath:e}})},Vc.createFromModelBuffer=function(t,e){return fc(Vc,t,{baseOptions:{modelAssetBuffer:e}})},Vc.createFromOptions=function(t,e){return fc(Vc,t,e)},Vc.HAND_CONNECTIONS=Fc,Vc.POSE_CONNECTIONS=Dc,Vc.FACE_LANDMARKS_LIPS=vc,Vc.FACE_LANDMARKS_LEFT_EYE=Ec,Vc.FACE_LANDMARKS_LEFT_EYEBROW=wc,Vc.FACE_LANDMARKS_LEFT_IRIS=Tc,Vc.FACE_LANDMARKS_RIGHT_EYE=Ac,Vc.FACE_LANDMARKS_RIGHT_EYEBROW=bc,Vc.FACE_LANDMARKS_RIGHT_IRIS=kc,Vc.FACE_LANDMARKS_FACE_OVAL=Sc,Vc.FACE_LANDMARKS_CONTOURS=xc,Vc.FACE_LANDMARKS_TESSELATION=Lc;var Xc=class extends yc{constructor(t,e){super(new lc(t,e),\"input_image\",\"norm_rect\",!0),this.j={classifications:[]},kn(t=this.h=new bo,0,1,e=new Ks)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return kn(this.h,0,2,Xo(t,wn(this.h,Gs,2))),this.l(t)}sa(t,e){return this.j={classifications:[]},pc(this,t,e),this.j}ta(t,e,n){return this.j={classifications:[]},gc(this,t,n,e),this.j}m(){var t=new gs;ds(t,\"input_image\"),ds(t,\"norm_rect\"),ps(t,\"classifications\");const e=new rs;Mr(e,ko,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.image_classifier.ImageClassifierGraph\"),os(n,\"IMAGE:input_image\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"CLASSIFICATIONS:classifications\"),n.o(e),fs(t,n),this.g.attachProtoListener(\"classifications\",((t,e)=>{this.j=zo(Cs(t)),pa(this,e)})),this.g.attachEmptyPacketListener(\"classifications\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Xc.prototype.classifyForVideo=Xc.prototype.ta,Xc.prototype.classify=Xc.prototype.sa,Xc.prototype.setOptions=Xc.prototype.o,Xc.createFromModelPath=function(t,e){return fc(Xc,t,{baseOptions:{modelAssetPath:e}})},Xc.createFromModelBuffer=function(t,e){return fc(Xc,t,{baseOptions:{modelAssetBuffer:e}})},Xc.createFromOptions=function(t,e){return fc(Xc,t,e)};var Hc=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!0),this.h=new So,this.embeddings={embeddings:[]},kn(t=this.h,0,1,e=new Ks)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){var e=this.h,n=wn(this.h,Vs,2);return n=n?n.clone():new Vs,void 0!==t.l2Normalize?nn(n,1,te(t.l2Normalize)):\"l2Normalize\"in t&&nn(n,1),void 0!==t.quantize?nn(n,2,te(t.quantize)):\"quantize\"in t&&nn(n,2),kn(e,0,2,n),this.l(t)}za(t,e){return pc(this,t,e),this.embeddings}Aa(t,e,n){return gc(this,t,n,e),this.embeddings}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\"),ps(t,\"embeddings_out\");const e=new rs;Mr(e,xo,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.image_embedder.ImageEmbedderGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"EMBEDDINGS:embeddings_out\"),n.o(e),fs(t,n),this.g.attachProtoListener(\"embeddings_out\",((t,e)=>{t=Bs(t),this.embeddings=function(t){return{embeddings:An(t,Us,1).map((t=>{const e={headIndex:Rn(t,3)??0??-1,headName:ge(tn(t,4))??\"\"??\"\"};var n=t.v;return void 0!==En(n,0|n[et],Os,gn(t,1))?(t=on(t=wn(t,Os,gn(t,1),void 0),1,Qt,sn()),e.floatEmbedding=t.slice()):(n=new Uint8Array(0),e.quantizedEmbedding=wn(t,Ns,gn(t,2),void 0)?.na()?.h()??n),e})),timestampMs:Ho(In(t))}}(t),pa(this,e)})),this.g.attachEmptyPacketListener(\"embeddings_out\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Hc.cosineSimilarity=function(t,e){if(t.floatEmbedding&&e.floatEmbedding)t=Jo(t.floatEmbedding,e.floatEmbedding);else{if(!t.quantizedEmbedding||!e.quantizedEmbedding)throw Error(\"Cannot compute cosine similarity between quantized and float embeddings.\");t=Jo($o(t.quantizedEmbedding),$o(e.quantizedEmbedding))}return t},Hc.prototype.embedForVideo=Hc.prototype.Aa,Hc.prototype.embed=Hc.prototype.za,Hc.prototype.setOptions=Hc.prototype.o,Hc.createFromModelPath=function(t,e){return fc(Hc,t,{baseOptions:{modelAssetPath:e}})},Hc.createFromModelBuffer=function(t,e){return fc(Hc,t,{baseOptions:{modelAssetBuffer:e}})},Hc.createFromOptions=function(t,e){return fc(Hc,t,e)};var Wc=class{constructor(t,e,n){this.confidenceMasks=t,this.categoryMask=e,this.qualityScores=n}close(){this.confidenceMasks?.forEach((t=>{t.close()})),this.categoryMask?.close()}};function zc(t){const e=function(t){return An(t,cs,1)}(t.ca()).filter((t=>(ge(tn(t,1))??\"\").includes(\"mediapipe.tasks.TensorsToSegmentationCalculator\")));if(t.u=[],e.length>1)throw Error(\"The graph has more than one mediapipe.tasks.TensorsToSegmentationCalculator.\");1===e.length&&(wn(e[0],rs,7)?.j()?.g()??new Map).forEach(((e,n)=>{t.u[Number(n)]=ge(tn(e,1))??\"\"}))}function Kc(t){t.categoryMask=void 0,t.confidenceMasks=void 0,t.qualityScores=void 0}function Yc(t){try{const e=new Wc(t.confidenceMasks,t.categoryMask,t.qualityScores);if(!t.j)return e;t.j(e)}finally{ya(t)}}Wc.prototype.close=Wc.prototype.close;var qc=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!1),this.u=[],this.outputCategoryMask=!1,this.outputConfidenceMasks=!0,this.h=new Mo,this.A=new Lo,kn(this.h,0,3,this.A),kn(t=this.h,0,1,e=new Ks)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return void 0!==t.displayNamesLocale?nn(this.h,2,pe(t.displayNamesLocale)):\"displayNamesLocale\"in t&&nn(this.h,2),\"outputCategoryMask\"in t&&(this.outputCategoryMask=t.outputCategoryMask??!1),\"outputConfidenceMasks\"in t&&(this.outputConfidenceMasks=t.outputConfidenceMasks??!0),super.l(t)}L(){zc(this)}segment(t,e,n){const r=\"function\"!=typeof e?e:{};return this.j=\"function\"==typeof e?e:n,Kc(this),pc(this,t,r),Yc(this)}La(t,e,n,r){const i=\"function\"!=typeof n?n:{};return this.j=\"function\"==typeof n?n:r,Kc(this),gc(this,t,i,e),Yc(this)}Da(){return this.u}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\");const e=new rs;Mr(e,Po,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.image_segmenter.ImageSegmenterGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),n.o(e),fs(t,n),ga(this,t),this.outputConfidenceMasks&&(ps(t,\"confidence_masks\"),as(n,\"CONFIDENCE_MASKS:confidence_masks\"),ma(this,\"confidence_masks\"),this.g.aa(\"confidence_masks\",((t,e)=>{this.confidenceMasks=t.map((t=>mc(this,t,!0,!this.j))),pa(this,e)})),this.g.attachEmptyPacketListener(\"confidence_masks\",(t=>{this.confidenceMasks=[],pa(this,t)}))),this.outputCategoryMask&&(ps(t,\"category_mask\"),as(n,\"CATEGORY_MASK:category_mask\"),ma(this,\"category_mask\"),this.g.Z(\"category_mask\",((t,e)=>{this.categoryMask=mc(this,t,!1,!this.j),pa(this,e)})),this.g.attachEmptyPacketListener(\"category_mask\",(t=>{this.categoryMask=void 0,pa(this,t)}))),ps(t,\"quality_scores\"),as(n,\"QUALITY_SCORES:quality_scores\"),this.g.attachFloatVectorListener(\"quality_scores\",((t,e)=>{this.qualityScores=t,pa(this,e)})),this.g.attachEmptyPacketListener(\"quality_scores\",(t=>{this.categoryMask=void 0,pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};qc.prototype.getLabels=qc.prototype.Da,qc.prototype.segmentForVideo=qc.prototype.La,qc.prototype.segment=qc.prototype.segment,qc.prototype.setOptions=qc.prototype.o,qc.createFromModelPath=function(t,e){return fc(qc,t,{baseOptions:{modelAssetPath:e}})},qc.createFromModelBuffer=function(t,e){return fc(qc,t,{baseOptions:{modelAssetBuffer:e}})},qc.createFromOptions=function(t,e){return fc(qc,t,e)};var $c=class{constructor(t,e,n){this.confidenceMasks=t,this.categoryMask=e,this.qualityScores=n}close(){this.confidenceMasks?.forEach((t=>{t.close()})),this.categoryMask?.close()}};$c.prototype.close=$c.prototype.close;var Jc=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect_in\",!1),this.outputCategoryMask=!1,this.outputConfidenceMasks=!0,this.h=new Mo,this.u=new Lo,kn(this.h,0,3,this.u),kn(t=this.h,0,1,e=new Ks)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return\"outputCategoryMask\"in t&&(this.outputCategoryMask=t.outputCategoryMask??!1),\"outputConfidenceMasks\"in t&&(this.outputConfidenceMasks=t.outputConfidenceMasks??!0),super.l(t)}segment(t,e,n,r){const i=\"function\"!=typeof n?n:{};if(this.j=\"function\"==typeof n?n:r,this.qualityScores=this.categoryMask=this.confidenceMasks=void 0,n=this.C+1,r=new Uo,e.keypoint&&e.scribble)throw Error(\"Cannot provide both keypoint and scribble.\");if(e.keypoint){var s=new Co;dn(s,3,te(!0),!1),dn(s,1,Zt(e.keypoint.x),0),dn(s,2,Zt(e.keypoint.y),0),Sn(r,1,Do,s)}else{if(!e.scribble)throw Error(\"Must provide either a keypoint or a scribble.\");{const t=new No;for(s of e.scribble)dn(e=new Co,3,te(!0),!1),dn(e,1,Zt(s.x),0),dn(e,2,Zt(s.y),0),Ln(t,1,Co,e);Sn(r,2,Do,t)}}this.g.addProtoToStream(r.g(),\"mediapipe.tasks.vision.interactive_segmenter.proto.RegionOfInterest\",\"roi_in\",n),pc(this,t,i);t:{try{const t=new $c(this.confidenceMasks,this.categoryMask,this.qualityScores);if(!this.j){var o=t;break t}this.j(t)}finally{ya(this)}o=void 0}return o}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"roi_in\"),ds(t,\"norm_rect_in\");const e=new rs;Mr(e,Po,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.interactive_segmenter.InteractiveSegmenterGraphV2\"),os(n,\"IMAGE:image_in\"),os(n,\"ROI:roi_in\"),os(n,\"NORM_RECT:norm_rect_in\"),n.o(e),fs(t,n),ga(this,t),this.outputConfidenceMasks&&(ps(t,\"confidence_masks\"),as(n,\"CONFIDENCE_MASKS:confidence_masks\"),ma(this,\"confidence_masks\"),this.g.aa(\"confidence_masks\",((t,e)=>{this.confidenceMasks=t.map((t=>mc(this,t,!0,!this.j))),pa(this,e)})),this.g.attachEmptyPacketListener(\"confidence_masks\",(t=>{this.confidenceMasks=[],pa(this,t)}))),this.outputCategoryMask&&(ps(t,\"category_mask\"),as(n,\"CATEGORY_MASK:category_mask\"),ma(this,\"category_mask\"),this.g.Z(\"category_mask\",((t,e)=>{this.categoryMask=mc(this,t,!1,!this.j),pa(this,e)})),this.g.attachEmptyPacketListener(\"category_mask\",(t=>{this.categoryMask=void 0,pa(this,t)}))),ps(t,\"quality_scores\"),as(n,\"QUALITY_SCORES:quality_scores\"),this.g.attachFloatVectorListener(\"quality_scores\",((t,e)=>{this.qualityScores=t,pa(this,e)})),this.g.attachEmptyPacketListener(\"quality_scores\",(t=>{this.categoryMask=void 0,pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Jc.prototype.segment=Jc.prototype.segment,Jc.prototype.setOptions=Jc.prototype.o,Jc.createFromModelPath=function(t,e){return fc(Jc,t,{baseOptions:{modelAssetPath:e}})},Jc.createFromModelBuffer=function(t,e){return fc(Jc,t,{baseOptions:{modelAssetBuffer:e}})},Jc.createFromOptions=function(t,e){return fc(Jc,t,e)};var Zc=class extends yc{constructor(t,e){super(new lc(t,e),\"input_frame_gpu\",\"norm_rect\",!1),this.j={detections:[]},kn(t=this.h=new Bo,0,1,e=new Ks)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return void 0!==t.displayNamesLocale?nn(this.h,2,pe(t.displayNamesLocale)):\"displayNamesLocale\"in t&&nn(this.h,2),void 0!==t.maxResults?Mn(this.h,3,t.maxResults):\"maxResults\"in t&&nn(this.h,3),void 0!==t.scoreThreshold?Pn(this.h,4,t.scoreThreshold):\"scoreThreshold\"in t&&nn(this.h,4),void 0!==t.categoryAllowlist?On(this.h,5,t.categoryAllowlist):\"categoryAllowlist\"in t&&nn(this.h,5),void 0!==t.categoryDenylist?On(this.h,6,t.categoryDenylist):\"categoryDenylist\"in t&&nn(this.h,6),this.l(t)}F(t,e){return this.j={detections:[]},pc(this,t,e),this.j}G(t,e,n){return this.j={detections:[]},gc(this,t,n,e),this.j}m(){var t=new gs;ds(t,\"input_frame_gpu\"),ds(t,\"norm_rect\"),ps(t,\"detections\");const e=new rs;Mr(e,Go,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.ObjectDetectorGraph\"),os(n,\"IMAGE:input_frame_gpu\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"DETECTIONS:detections\"),n.o(e),fs(t,n),this.g.attachProtoVectorListener(\"detections\",((t,e)=>{for(const e of t)t=ks(e),this.j.detections.push(Ko(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"detections\",(t=>{pa(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Zc.prototype.detectForVideo=Zc.prototype.G,Zc.prototype.detect=Zc.prototype.F,Zc.prototype.setOptions=Zc.prototype.o,Zc.createFromModelPath=async function(t,e){return fc(Zc,t,{baseOptions:{modelAssetPath:e}})},Zc.createFromModelBuffer=function(t,e){return fc(Zc,t,{baseOptions:{modelAssetBuffer:e}})},Zc.createFromOptions=function(t,e){return fc(Zc,t,e)};var Qc=class{constructor(t,e,n){this.landmarks=t,this.worldLandmarks=e,this.segmentationMasks=n}close(){this.segmentationMasks?.forEach((t=>{t.close()}))}};function th(t){t.landmarks=[],t.worldLandmarks=[],t.segmentationMasks=void 0}function eh(t){try{const e=new Qc(t.landmarks,t.worldLandmarks,t.segmentationMasks);if(!t.u)return e;t.u(e)}finally{ya(t)}}Qc.prototype.close=Qc.prototype.close;var nh=class extends yc{constructor(t,e){super(new lc(t,e),\"image_in\",\"norm_rect\",!1),this.landmarks=[],this.worldLandmarks=[],this.outputSegmentationMasks=!1,kn(t=this.h=new jo,0,1,e=new Ks),this.A=new Eo,kn(this.h,0,3,this.A),this.j=new vo,kn(this.h,0,2,this.j),Mn(this.j,4,1),Pn(this.j,2,.5),Pn(this.A,2,.5),Pn(this.h,4,.5)}get baseOptions(){return wn(this.h,Ks,1)}set baseOptions(t){kn(this.h,0,1,t)}o(t){return\"numPoses\"in t&&Mn(this.j,4,t.numPoses??1),\"minPoseDetectionConfidence\"in t&&Pn(this.j,2,t.minPoseDetectionConfidence??.5),\"minTrackingConfidence\"in t&&Pn(this.h,4,t.minTrackingConfidence??.5),\"minPosePresenceConfidence\"in t&&Pn(this.A,2,t.minPosePresenceConfidence??.5),\"outputSegmentationMasks\"in t&&(this.outputSegmentationMasks=t.outputSegmentationMasks??!1),this.l(t)}F(t,e,n){const r=\"function\"!=typeof e?e:{};return this.u=\"function\"==typeof e?e:n,th(this),pc(this,t,r),eh(this)}G(t,e,n,r){const i=\"function\"!=typeof n?n:{};return this.u=\"function\"==typeof n?n:r,th(this),gc(this,t,i,e),eh(this)}m(){var t=new gs;ds(t,\"image_in\"),ds(t,\"norm_rect\"),ps(t,\"normalized_landmarks\"),ps(t,\"world_landmarks\"),ps(t,\"segmentation_masks\");const e=new rs;Mr(e,Vo,this.h);const n=new cs;Cn(n,2,\"mediapipe.tasks.vision.pose_landmarker.PoseLandmarkerGraph\"),os(n,\"IMAGE:image_in\"),os(n,\"NORM_RECT:norm_rect\"),as(n,\"NORM_LANDMARKS:normalized_landmarks\"),as(n,\"WORLD_LANDMARKS:world_landmarks\"),n.o(e),fs(t,n),ga(this,t),this.g.attachProtoVectorListener(\"normalized_landmarks\",((t,e)=>{this.landmarks=[];for(const e of t)t=Rs(e),this.landmarks.push(Yo(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"normalized_landmarks\",(t=>{this.landmarks=[],pa(this,t)})),this.g.attachProtoVectorListener(\"world_landmarks\",((t,e)=>{this.worldLandmarks=[];for(const e of t)t=xs(e),this.worldLandmarks.push(qo(t));pa(this,e)})),this.g.attachEmptyPacketListener(\"world_landmarks\",(t=>{this.worldLandmarks=[],pa(this,t)})),this.outputSegmentationMasks&&(as(n,\"SEGMENTATION_MASK:segmentation_masks\"),ma(this,\"segmentation_masks\"),this.g.aa(\"segmentation_masks\",((t,e)=>{this.segmentationMasks=t.map((t=>mc(this,t,!0,!this.u))),pa(this,e)})),this.g.attachEmptyPacketListener(\"segmentation_masks\",(t=>{this.segmentationMasks=[],pa(this,t)}))),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};nh.prototype.detectForVideo=nh.prototype.G,nh.prototype.detect=nh.prototype.F,nh.prototype.setOptions=nh.prototype.o,nh.createFromModelPath=function(t,e){return fc(nh,t,{baseOptions:{modelAssetPath:e}})},nh.createFromModelBuffer=function(t,e){return fc(nh,t,{baseOptions:{modelAssetBuffer:e}})},nh.createFromOptions=function(t,e){return fc(nh,t,e)},nh.POSE_CONNECTIONS=Dc;export{Ja as DrawingUtils,_c as FaceDetector,Ic as FaceLandmarker,na as FilesetResolver,Oc as GestureRecognizer,Uc as HandLandmarker,Vc as HolisticLandmarker,Xc as ImageClassifier,Hc as ImageEmbedder,qc as ImageSegmenter,Wc as ImageSegmenterResult,Jc as InteractiveSegmenter,$c as InteractiveSegmenterResult,oc as MPImage,Ga as MPMask,Zc as ObjectDetector,nh as PoseLandmarker,_a as TaskRunner,yc as VisionTaskRunner};\n//# sourceMappingURL=vision_bundle_mjs.js.map\n", "import {\r\n FilesetResolver,\r\n FaceLandmarker,\r\n FaceLandmarkerResult,\r\n} from \"@mediapipe/tasks-vision\";\r\n\r\n// Pinned to the exact version in package.json (\"@mediapipe/tasks-vision\":\r\n// \"^0.10.32\"). This MUST stay in sync with that dependency — using\r\n// \"@latest\" here let jsDelivr silently swap in a newer WASM build than the\r\n// JS API this SDK was built/tested against, breaking face detection for\r\n// every user at once with no code change on our side. Bump both together.\r\nconst MEDIAPIPE_VERSION = \"0.10.32\";\r\nconst WASM_CDN =\r\n `https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@${MEDIAPIPE_VERSION}/wasm`;\r\n// Also pinned (was \"/latest/\") so a model update can't shift blendshape\r\n// output out from under ActionDetector's calibrated thresholds unannounced.\r\nconst MODEL_URL =\r\n \"https://storage.googleapis.com/mediapipe-models/face_landmarker/face_landmarker/float16/1/face_landmarker.task\";\r\n\r\n// Module-level cache — survives component remounts and retries within the same page session.\r\n// First init fetches ~8MB total (WASM + model); subsequent inits reuse the cache instantly.\r\n// Cached as in-flight PROMISES (not resolved values) so concurrent init() calls\r\n// (e.g. parallel calls from two liveness attempts, or a fast retry) share one\r\n// fetch instead of racing duplicate downloads — and so a failed attempt\r\n// (rejected promise) doesn't get treated as \"cached\" and reused forever.\r\nlet _visionPromise: ReturnType<typeof FilesetResolver.forVisionTasks> | null = null;\r\nlet _modelBufferPromise: Promise<ArrayBuffer> | null = null;\r\n\r\n/** Max time to wait for the WASM runtime / model download before giving up. */\r\nconst INIT_TIMEOUT_MS = 20_000;\r\n\r\nfunction withTimeout<T>(promise: Promise<T>, ms: number, label: string): Promise<T> {\r\n return new Promise<T>((resolve, reject) => {\r\n const timer = setTimeout(\r\n () => reject(new Error(`${label} timed out. Please check your connection and try again.`)),\r\n ms\r\n );\r\n promise.then(\r\n (value) => { clearTimeout(timer); resolve(value); },\r\n (err) => { clearTimeout(timer); reject(err); }\r\n );\r\n });\r\n}\r\n\r\nexport interface FaceDetectionResult {\r\n faceDetected: boolean;\r\n blendshapes: Map<string, number>;\r\n transformMatrix: number[] | null;\r\n}\r\n\r\nexport class FaceDetectorEngine {\r\n private landmarker: FaceLandmarker | null = null;\r\n\r\n async init(): Promise<void> {\r\n // Reuse (or join) the in-flight WASM fileset load — avoids re-fetching\r\n // ~3MB on retry/remount, and avoids kicking off a second parallel fetch\r\n // if init() is called again before the first finishes.\r\n if (!_visionPromise) {\r\n _visionPromise = FilesetResolver.forVisionTasks(WASM_CDN);\r\n _visionPromise.catch(() => { _visionPromise = null; }); // don't cache a failure\r\n }\r\n\r\n // Reuse (or join) the in-flight model download — same reasoning.\r\n if (!_modelBufferPromise) {\r\n _modelBufferPromise = fetch(MODEL_URL).then((res) => {\r\n if (!res.ok) throw new Error(`Failed to download face model (${res.status})`);\r\n return res.arrayBuffer();\r\n });\r\n _modelBufferPromise.catch(() => { _modelBufferPromise = null; }); // don't cache a failure\r\n }\r\n\r\n const [vision, modelBuffer] = await withTimeout(\r\n Promise.all([_visionPromise, _modelBufferPromise]),\r\n INIT_TIMEOUT_MS,\r\n \"Face detection setup\"\r\n );\r\n\r\n this.landmarker = await withTimeout(\r\n FaceLandmarker.createFromOptions(vision, {\r\n baseOptions: {\r\n // Pass a copy — MediaPipe takes ownership of the buffer\r\n modelAssetBuffer: new Uint8Array(modelBuffer.slice(0)),\r\n },\r\n runningMode: \"VIDEO\",\r\n outputFaceBlendshapes: true,\r\n outputFacialTransformationMatrixes: true,\r\n numFaces: 1,\r\n }),\r\n INIT_TIMEOUT_MS,\r\n \"Face detection setup\"\r\n );\r\n }\r\n\r\n detect(video: HTMLVideoElement, timestamp: number): FaceDetectionResult {\r\n if (!this.landmarker) {\r\n return { faceDetected: false, blendshapes: new Map(), transformMatrix: null };\r\n }\r\n\r\n let result: FaceLandmarkerResult;\r\n try {\r\n result = this.landmarker.detectForVideo(video, timestamp);\r\n } catch {\r\n // Video may not be ready yet — return no-face gracefully\r\n return { faceDetected: false, blendshapes: new Map(), transformMatrix: null };\r\n }\r\n\r\n if (!result.faceBlendshapes || result.faceBlendshapes.length === 0) {\r\n return { faceDetected: false, blendshapes: new Map(), transformMatrix: null };\r\n }\r\n\r\n const blendshapes = new Map<string, number>();\r\n for (const bs of result.faceBlendshapes[0].categories) {\r\n blendshapes.set(bs.categoryName, bs.score);\r\n }\r\n\r\n const transformMatrix =\r\n result.facialTransformationMatrixes &&\r\n result.facialTransformationMatrixes.length > 0\r\n ? (Array.from(result.facialTransformationMatrixes[0].data) as number[])\r\n : null;\r\n\r\n return { faceDetected: true, blendshapes, transformMatrix };\r\n }\r\n\r\n destroy(): void {\r\n if (this.landmarker) {\r\n this.landmarker.close();\r\n this.landmarker = null;\r\n }\r\n }\r\n}\r\n", "import { FaceDetectionResult } from \"./FaceDetector\";\n\n/**\n * Passive natural-motion liveness detector.\n *\n * Replaces the earlier sequential \"do BLINK, then TURN_HEAD, then OPEN_MOUTH\"\n * choreography with a single continuous scan window: the user is simply told\n * to \"blink and look around naturally\" while the detector watches for signs\n * of a live face (a genuine blink, or natural head movement) without\n * commanding specific actions in order. This mirrors a passive liveness scan\n * rather than a step-by-step obstacle course.\n *\n * Pass criteria: at least one genuine blink OR a natural head-yaw excursion\n * detected at any point during the window — whichever happens first, since a\n * real person glancing around naturally will trigger one or both without\n * being told to.\n */\n\nconst BLINK_THRESHOLD = 0.25;\nconst BLINK_HOLD_FRAMES = 2;\nconst YAW_MOTION_THRESHOLD_DEG = 6; // small natural head movement, not a commanded turn\n\nexport interface ScanProgress {\n faceDetected: boolean;\n blinkDetected: boolean;\n motionDetected: boolean;\n livenessConfirmed: boolean;\n}\n\nexport class ActionDetector {\n private blinkHoldCount = 0;\n private blinkDetected = false;\n private motionDetected = false;\n private baselineYaw: number | null = null;\n\n check(result: FaceDetectionResult): ScanProgress {\n if (!result.faceDetected) {\n return this.buildProgress(false);\n }\n\n const bs = result.blendshapes;\n const blinkConf = ((bs.get(\"eyeBlinkLeft\") || 0) + (bs.get(\"eyeBlinkRight\") || 0)) / 2;\n\n if (!this.blinkDetected) {\n if (blinkConf >= BLINK_THRESHOLD) {\n this.blinkHoldCount++;\n if (this.blinkHoldCount >= BLINK_HOLD_FRAMES) {\n this.blinkDetected = true;\n }\n } else {\n this.blinkHoldCount = 0;\n }\n }\n\n if (!this.motionDetected) {\n const yaw = this.getHeadYaw(result.transformMatrix);\n if (this.baselineYaw === null) {\n this.baselineYaw = yaw;\n } else if (Math.abs(yaw - this.baselineYaw) >= YAW_MOTION_THRESHOLD_DEG) {\n this.motionDetected = true;\n }\n }\n\n return this.buildProgress(true);\n }\n\n private buildProgress(faceDetected: boolean): ScanProgress {\n return {\n faceDetected,\n blinkDetected: this.blinkDetected,\n motionDetected: this.motionDetected,\n livenessConfirmed: this.blinkDetected || this.motionDetected,\n };\n }\n\n private getHeadYaw(matrix: number[] | null): number {\n if (!matrix || matrix.length < 16) return 0;\n return Math.atan2(-matrix[2], matrix[0]) * (180 / Math.PI);\n }\n}\n", "function injectLivenessKeyframes(): void {\n if (document.getElementById(\"sc-liveness-kf\")) return;\n const s = document.createElement(\"style\");\n s.id = \"sc-liveness-kf\";\n s.textContent = `\n @keyframes sc-pop-in {\n 0% { transform:scale(0.7); opacity:0; }\n 60% { transform:scale(1.05); }\n 100% { transform:scale(1); opacity:1; }\n }\n @keyframes sc-scan-dot {\n 0%,100% { opacity:0.3; transform:scale(0.85); }\n 50% { opacity:1; transform:scale(1); }\n }\n @keyframes sc-scanline-sweep {\n 0% { transform:translateY(-4%); opacity:0; }\n 8% { opacity:0.9; }\n 92% { opacity:0.9; }\n 100% { transform:translateY(104%); opacity:0; }\n }\n @keyframes sc-corner-pulse {\n 0%,100% { opacity:0.55; }\n 50% { opacity:1; }\n }\n @keyframes sc-oval-breathe {\n 0%,100% { opacity:0.5; }\n 50% { opacity:0.85; }\n }\n `;\n document.head.appendChild(s);\n}\n\nexport interface UIChallenge {\n time_limit_seconds: number;\n instruction: string;\n}\n\n/**\n * Single-view passive liveness scan UI: full-width camera, oval face guide,\n * one instruction line, a subtle scanning progress ring. No step-by-step\n * challenge list — replaces the earlier two-column \"BLINK / TURN_HEAD /\n * OPEN_MOUTH\" checklist design with a plain natural-motion scan.\n */\n/** Minimal color contract LivenessUI needs — a subset of flow/theme.ts's\n * ThemeColors so this module doesn't have to import the flow layer. */\nexport interface LivenessUIColors {\n primary: string;\n success: string;\n error: string;\n warning: string;\n}\n\nconst DEFAULT_COLORS: LivenessUIColors = {\n primary: \"#3b82f6\",\n success: \"#22c55e\",\n error: \"#ef4444\",\n warning: \"#fbbf24\",\n};\n\nexport class LivenessUI {\n private root: HTMLDivElement | null = null;\n private colors: LivenessUIColors;\n private videoEl: HTMLVideoElement | null = null;\n private instructionEl: HTMLDivElement | null = null;\n private confidenceRingEl: SVGEllipseElement | null = null;\n private bgOvalEl: SVGEllipseElement | null = null;\n private guideWrapEl: HTMLDivElement | null = null;\n private scanlineEl: HTMLDivElement | null = null;\n private overlayEl: HTMLDivElement | null = null;\n private dotsEl: HTMLDivElement | null = null;\n private docCaptureRoot: HTMLDivElement | null = null;\n private scanStartMs = 0;\n private scanDurationMs = 0;\n private faceTracked = false;\n\n constructor(colors?: Partial<LivenessUIColors>) {\n this.colors = { ...DEFAULT_COLORS, ...colors };\n }\n\n mount(container: HTMLElement, challenge: UIChallenge): HTMLVideoElement {\n injectLivenessKeyframes();\n\n this.root = document.createElement(\"div\");\n this.root.style.cssText = `\n position:relative;width:100%;max-width:420px;margin:0 auto;\n background:#0a0a0a;border-radius:16px;overflow:hidden;\n font-family:system-ui,-apple-system,sans-serif;\n box-shadow:0 8px 32px rgba(0,0,0,0.4);\n aspect-ratio:3/4;\n `;\n\n this.videoEl = document.createElement(\"video\");\n this.videoEl.autoplay = true;\n this.videoEl.playsInline = true;\n this.videoEl.muted = true;\n this.videoEl.setAttribute(\"aria-label\", \"Live camera preview for face verification\");\n this.videoEl.style.cssText = `\n width:100%;height:100%;display:block;\n filter:brightness(1.03) contrast(1.03);\n transform:scaleX(-1);object-fit:cover;\n `;\n\n // Dim everything outside the oval so the guide reads as a scan aperture\n // rather than a shape floating over the raw feed.\n const vignette = document.createElement(\"div\");\n vignette.style.cssText = `\n position:absolute;inset:0;pointer-events:none;\n background:radial-gradient(ellipse 34% 44% at 50% 47%, transparent 55%, rgba(0,0,0,0.55) 100%);\n `;\n\n // Oval guide — centred\n const guideWrap = document.createElement(\"div\");\n guideWrap.style.cssText = `\n position:absolute;top:50%;left:50%;\n transform:translate(-50%,-52%);\n width:64%;aspect-ratio:140/180;pointer-events:none;\n filter:drop-shadow(0 0 18px rgba(59,130,246,0.35));\n transition:filter 0.3s ease;\n `;\n this.guideWrapEl = guideWrap;\n\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svg.setAttribute(\"viewBox\", \"0 0 140 180\");\n svg.setAttribute(\"aria-hidden\", \"true\");\n svg.style.cssText = \"width:100%;height:100%;overflow:visible;\";\n\n const defs = document.createElementNS(\"http://www.w3.org/2000/svg\", \"defs\");\n const clip = document.createElementNS(\"http://www.w3.org/2000/svg\", \"clipPath\");\n clip.setAttribute(\"id\", \"sc-oval-clip\");\n const clipOval = document.createElementNS(\"http://www.w3.org/2000/svg\", \"ellipse\");\n clipOval.setAttribute(\"cx\", \"70\");\n clipOval.setAttribute(\"cy\", \"90\");\n clipOval.setAttribute(\"rx\", \"64\");\n clipOval.setAttribute(\"ry\", \"86\");\n clip.appendChild(clipOval);\n defs.appendChild(clip);\n svg.appendChild(defs);\n\n // Faint dashed inner track — gives the guide a \"scanner reticle\" feel\n // rather than a single plain outline.\n const trackOval = document.createElementNS(\"http://www.w3.org/2000/svg\", \"ellipse\");\n trackOval.setAttribute(\"cx\", \"70\");\n trackOval.setAttribute(\"cy\", \"90\");\n trackOval.setAttribute(\"rx\", \"58\");\n trackOval.setAttribute(\"ry\", \"80\");\n trackOval.setAttribute(\"fill\", \"none\");\n trackOval.setAttribute(\"stroke\", \"rgba(255,255,255,0.16)\");\n trackOval.setAttribute(\"stroke-width\", \"1\");\n trackOval.setAttribute(\"stroke-dasharray\", \"2 5\");\n svg.appendChild(trackOval);\n\n const bgOval = document.createElementNS(\"http://www.w3.org/2000/svg\", \"ellipse\");\n bgOval.setAttribute(\"cx\", \"70\");\n bgOval.setAttribute(\"cy\", \"90\");\n bgOval.setAttribute(\"rx\", \"64\");\n bgOval.setAttribute(\"ry\", \"86\");\n bgOval.setAttribute(\"fill\", \"none\");\n bgOval.setAttribute(\"stroke\", \"rgba(255,255,255,0.4)\");\n bgOval.setAttribute(\"stroke-width\", \"1.5\");\n bgOval.style.cssText = \"animation:sc-oval-breathe 2.4s ease-in-out infinite;transition:stroke 0.3s ease;\";\n this.bgOvalEl = bgOval;\n\n // Progress ring — traces the SAME path as bgOval (identical cx/cy/rx/ry)\n // so it always reads as \"this oval is filling in,\" never as a separate\n // floating stroke. A flat cap (not round) is what makes a short early-\n // scan arc look like a ring segment sitting on the track rather than a\n // stray dash — a round cap on a thin, short arc reads as a loose curve\n // instead of \"part of a circle.\"\n const confOval = document.createElementNS(\"http://www.w3.org/2000/svg\", \"ellipse\");\n confOval.setAttribute(\"cx\", \"70\");\n confOval.setAttribute(\"cy\", \"90\");\n confOval.setAttribute(\"rx\", \"64\");\n confOval.setAttribute(\"ry\", \"86\");\n confOval.setAttribute(\"fill\", \"none\");\n confOval.setAttribute(\"stroke\", this.colors.primary);\n confOval.setAttribute(\"stroke-width\", \"3\");\n confOval.setAttribute(\"stroke-linecap\", \"butt\");\n const circ = 2 * Math.PI * Math.sqrt((64 * 64 + 86 * 86) / 2);\n confOval.setAttribute(\"stroke-dasharray\", `${circ}`);\n confOval.setAttribute(\"stroke-dashoffset\", `${circ}`);\n confOval.style.cssText = \"transition:stroke-dashoffset 0.2s linear,stroke 0.3s ease;transform:rotate(-90deg);transform-origin:70px 90px;filter:drop-shadow(0 0 3px rgba(0,0,0,0.25));\";\n this.confidenceRingEl = confOval;\n\n // Corner brackets — reads as an active biometric scan aperture, matching\n // the document-capture screen's bracket language for visual consistency.\n const bracketGroup = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n bracketGroup.setAttribute(\"stroke\", this.colors.primary);\n bracketGroup.setAttribute(\"stroke-width\", \"3\");\n bracketGroup.setAttribute(\"stroke-linecap\", \"round\");\n bracketGroup.setAttribute(\"fill\", \"none\");\n bracketGroup.style.cssText = \"animation:sc-corner-pulse 2s ease-in-out infinite;\";\n const bracketLen = 14;\n const bx0 = 70 - 64 * 0.74, bx1 = 70 + 64 * 0.74;\n const by0 = 90 - 86 * 0.82, by1 = 90 + 86 * 0.82;\n const brackets = [\n `M${bx0},${by0 + bracketLen} L${bx0},${by0} L${bx0 + bracketLen},${by0}`,\n `M${bx1 - bracketLen},${by0} L${bx1},${by0} L${bx1},${by0 + bracketLen}`,\n `M${bx0},${by1 - bracketLen} L${bx0},${by1} L${bx0 + bracketLen},${by1}`,\n `M${bx1 - bracketLen},${by1} L${bx1},${by1} L${bx1},${by1 - bracketLen}`,\n ];\n for (const d of brackets) {\n const path = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n path.setAttribute(\"d\", d);\n bracketGroup.appendChild(path);\n }\n\n svg.appendChild(bgOval);\n svg.appendChild(confOval);\n svg.appendChild(bracketGroup);\n guideWrap.appendChild(svg);\n\n // Scan-line sweep — clipped to the oval, gives a visible \"actively\n // scanning\" motion cue instead of a static outline.\n const scanlineClipWrap = document.createElement(\"div\");\n scanlineClipWrap.style.cssText = `\n position:absolute;inset:0;\n clip-path:ellipse(45.7% 47.8% at 50% 50%);\n overflow:hidden;\n `;\n const scanline = document.createElement(\"div\");\n scanline.style.cssText = `\n position:absolute;left:0;right:0;height:26%;top:0;\n background:linear-gradient(180deg,transparent 0%,rgba(59,130,246,0.32) 45%,rgba(147,197,253,0.55) 50%,rgba(59,130,246,0.32) 55%,transparent 100%);\n animation:sc-scanline-sweep 2.6s ease-in-out infinite;\n `;\n this.scanlineEl = scanline;\n scanlineClipWrap.appendChild(scanline);\n guideWrap.appendChild(scanlineClipWrap);\n\n // Instruction — top, gradient scrim\n const camTop = document.createElement(\"div\");\n camTop.style.cssText = `\n position:absolute;top:0;left:0;right:0;\n background:linear-gradient(180deg,rgba(0,0,0,0.8) 0%,transparent 100%);\n padding:14px 16px 32px;\n `;\n this.instructionEl = document.createElement(\"div\");\n this.instructionEl.setAttribute(\"aria-live\", \"polite\");\n this.instructionEl.setAttribute(\"role\", \"status\");\n this.instructionEl.style.cssText = `\n color:#fff;font-size:14px;font-weight:600;text-align:center;line-height:1.4;\n `;\n this.instructionEl.textContent = challenge.instruction;\n camTop.appendChild(this.instructionEl);\n\n // Scan progress dots — bottom\n const camBottom = document.createElement(\"div\");\n camBottom.style.cssText = `\n position:absolute;bottom:0;left:0;right:0;\n background:linear-gradient(0deg,rgba(0,0,0,0.7) 0%,transparent 100%);\n padding:28px 10px 18px;display:flex;justify-content:center;\n `;\n this.dotsEl = document.createElement(\"div\");\n this.dotsEl.style.cssText = \"display:flex;gap:6px;\";\n for (let i = 0; i < 3; i++) {\n const dot = document.createElement(\"div\");\n dot.style.cssText = `\n width:6px;height:6px;border-radius:50%;background:${this.colors.primary};\n animation:sc-scan-dot 1.1s ease-in-out ${i * 0.18}s infinite;\n `;\n this.dotsEl.appendChild(dot);\n }\n camBottom.appendChild(this.dotsEl);\n\n this.root.appendChild(this.videoEl);\n this.root.appendChild(vignette);\n this.root.appendChild(guideWrap);\n this.root.appendChild(camTop);\n this.root.appendChild(camBottom);\n\n // Result overlay\n this.overlayEl = document.createElement(\"div\");\n this.overlayEl.style.cssText = `\n position:absolute;inset:0;display:none;align-items:center;\n justify-content:center;z-index:10;\n background:rgba(0,0,0,0.88);backdrop-filter:blur(8px);\n `;\n this.root.appendChild(this.overlayEl);\n\n container.appendChild(this.root);\n this.scanDurationMs = challenge.time_limit_seconds * 1000;\n this.startScanClock();\n\n return this.videoEl;\n }\n\n /**\n * Resets the progress ring's clock to now. The caller (liveness.ts) mounts\n * the UI, then waits ~1s for camera AE/AF to settle before the detection\n * loop actually starts — call this again right when detection begins so\n * the ring's timing matches the real scan window instead of running ahead.\n */\n startScanClock(): void {\n this.scanStartMs = performance.now();\n }\n\n /** Advances the scan progress ring based on elapsed time in the window. */\n updateScanProgress(livenessConfirmed: boolean): void {\n if (!this.confidenceRingEl) return;\n const elapsed = performance.now() - this.scanStartMs;\n const pct = this.scanDurationMs > 0 ? Math.min(1, elapsed / this.scanDurationMs) : 0;\n const circ = 2 * Math.PI * Math.sqrt((64 * 64 + 86 * 86) / 2);\n this.confidenceRingEl.setAttribute(\"stroke-dashoffset\", `${circ * (1 - pct)}`);\n this.confidenceRingEl.setAttribute(\"stroke\", livenessConfirmed ? this.colors.success : this.colors.primary);\n }\n\n /**\n * Reflects whether a face is currently detected in-frame — brightens the\n * oval guide's glow/brackets when locked on, and dims the scan-line sweep\n * so the UI visibly distinguishes \"searching\" from \"actively scanning\".\n */\n setFaceTracking(tracked: boolean): void {\n if (this.faceTracked === tracked) return;\n this.faceTracked = tracked;\n if (this.guideWrapEl) {\n this.guideWrapEl.style.filter = tracked\n ? \"drop-shadow(0 0 22px rgba(34,197,94,0.45))\"\n : \"drop-shadow(0 0 18px rgba(59,130,246,0.35))\";\n }\n if (this.bgOvalEl) {\n this.bgOvalEl.setAttribute(\"stroke\", tracked ? \"rgba(74,222,128,0.55)\" : \"rgba(255,255,255,0.4)\");\n }\n if (this.scanlineEl) {\n this.scanlineEl.style.animationPlayState = tracked ? \"running\" : \"paused\";\n this.scanlineEl.style.opacity = tracked ? \"1\" : \"0.4\";\n }\n }\n\n updateInstruction(text: string): void {\n if (this.instructionEl) this.instructionEl.textContent = text;\n }\n\n showResult(status: \"processing\" | \"failed\", _verificationId?: number): Promise<void> {\n return new Promise((resolve) => {\n if (!this.overlayEl) { resolve(); return; }\n const ok = status === \"processing\";\n this.overlayEl.style.display = \"flex\";\n this.overlayEl.innerHTML = `\n <div style=\"text-align:center;color:#fff;animation:sc-pop-in 0.35s ease;padding:24px;\">\n <div style=\"width:72px;height:72px;border-radius:50%;margin:0 auto 16px;display:flex;align-items:center;justify-content:center;font-size:32px;\n background:${ok ? \"rgba(34,197,94,0.2)\" : \"rgba(239,68,68,0.2)\"};\n border:3px solid ${ok ? this.colors.success : this.colors.error};\">\n ${ok ? \"✓\" : \"✕\"}\n </div>\n <div style=\"font-size:17px;font-weight:700;margin-bottom:8px;\">${ok ? \"Verification submitted\" : \"Submission failed\"}</div>\n <div style=\"font-size:12px;opacity:0.6;line-height:1.6;\">${ok ? \"Hold on while we wrap up…\" : \"Something went wrong. Please try again.\"}</div>\n </div>`;\n setTimeout(resolve, 1800);\n });\n }\n\n showTimeout(onRetry: () => void): Promise<void> {\n return new Promise((resolve) => {\n if (!this.overlayEl) { resolve(); return; }\n this.overlayEl.style.display = \"flex\";\n this.overlayEl.innerHTML = `\n <div style=\"text-align:center;color:#fff;animation:sc-pop-in 0.35s ease;padding:24px;\">\n <div style=\"width:72px;height:72px;border-radius:50%;margin:0 auto 14px;display:flex;align-items:center;justify-content:center;font-size:32px;background:rgba(251,191,36,0.15);border:3px solid ${this.colors.warning};\">⏱</div>\n <div style=\"font-size:17px;font-weight:700;margin-bottom:8px;\">Time's Up</div>\n <div style=\"font-size:12px;opacity:0.6;margin-bottom:18px;\">We couldn't confirm liveness in time. Please try again.</div>\n <button id=\"sc-retry-btn\" style=\"padding:11px 28px;border-radius:10px;background:${this.colors.primary};color:#fff;border:none;cursor:pointer;font-size:14px;font-weight:600;width:100%;max-width:180px;\">Try Again</button>\n </div>`;\n const btn = this.overlayEl.querySelector(\"#sc-retry-btn\") as HTMLButtonElement | null;\n if (btn) {\n btn.addEventListener(\"click\", () => {\n // Prevent a double-click from firing two concurrent retries.\n if (btn.disabled) return;\n btn.disabled = true;\n btn.style.opacity = \"0.6\";\n btn.style.cursor = \"default\";\n onRetry();\n resolve();\n });\n }\n else { setTimeout(resolve, 5000); }\n });\n }\n\n getVideoElement(): HTMLVideoElement | null { return this.videoEl; }\n\n mountDocumentCapture(container: HTMLElement, stream: MediaStream): Promise<Blob> {\n return new Promise((resolve, reject) => {\n injectLivenessKeyframes();\n const docRoot = document.createElement(\"div\");\n docRoot.style.cssText = `position:relative;width:100%;max-width:420px;margin:0 auto;background:#0a0a0a;border-radius:16px;overflow:hidden;font-family:system-ui,-apple-system,sans-serif;box-shadow:0 8px 32px rgba(0,0,0,0.4);`;\n this.docCaptureRoot = docRoot;\n const docVideo = document.createElement(\"video\");\n docVideo.autoplay = true; docVideo.playsInline = true; docVideo.muted = true;\n docVideo.style.cssText = \"width:100%;display:block;aspect-ratio:4/3;object-fit:cover;\";\n docVideo.srcObject = stream;\n const guideOverlay = document.createElement(\"div\");\n guideOverlay.style.cssText = \"position:absolute;inset:0;pointer-events:none;display:flex;align-items:center;justify-content:center;\";\n guideOverlay.innerHTML = `<div style=\"width:83%;height:53%;border:2px dashed rgba(255,255,255,0.55);border-radius:10px;box-shadow:0 0 0 2000px rgba(0,0,0,0.45);position:relative;\"><div style=\"position:absolute;top:-2px;left:-2px;width:18px;height:18px;border-top:3px solid ${this.colors.primary};border-left:3px solid ${this.colors.primary};border-radius:4px 0 0 0;\"></div><div style=\"position:absolute;top:-2px;right:-2px;width:18px;height:18px;border-top:3px solid ${this.colors.primary};border-right:3px solid ${this.colors.primary};border-radius:0 4px 0 0;\"></div><div style=\"position:absolute;bottom:-2px;left:-2px;width:18px;height:18px;border-bottom:3px solid ${this.colors.primary};border-left:3px solid ${this.colors.primary};border-radius:0 0 0 4px;\"></div><div style=\"position:absolute;bottom:-2px;right:-2px;width:18px;height:18px;border-bottom:3px solid ${this.colors.primary};border-right:3px solid ${this.colors.primary};border-radius:0 0 4px 0;\"></div></div>`;\n const header = document.createElement(\"div\");\n header.style.cssText = \"position:absolute;top:0;left:0;right:0;background:linear-gradient(180deg,rgba(0,0,0,0.88) 0%,transparent 100%);padding:18px 16px 40px;text-align:center;\";\n header.innerHTML = `<div style=\"color:#fff;font-size:16px;font-weight:700;margin-bottom:6px;\">Scan Your ID Document</div><div style=\"color:rgba(255,255,255,0.6);font-size:12px;line-height:1.6;\">Fit your document inside the frame.<br>Make sure all text and corners are visible.</div>`;\n const bottomPanel = document.createElement(\"div\");\n bottomPanel.style.cssText = \"position:absolute;bottom:0;left:0;right:0;background:linear-gradient(0deg,rgba(0,0,0,0.92) 0%,rgba(0,0,0,0.6) 70%,transparent 100%);padding:16px;\";\n bottomPanel.innerHTML = `<div style=\"font-size:11px;color:rgba(255,255,255,0.4);text-align:center;margin-bottom:12px;\">Good lighting · No glare · All 4 corners visible</div><button id=\"sc-capture-doc-btn\" style=\"width:100%;padding:12px;border-radius:12px;background:${this.colors.primary};color:#fff;border:none;cursor:pointer;font-size:15px;font-weight:700;margin-bottom:8px;\">Capture Document</button><label style=\"width:100%;display:flex;align-items:center;justify-content:center;gap:6px;padding:9px;border-radius:12px;border:1.5px solid rgba(255,255,255,0.18);cursor:pointer;color:rgba(255,255,255,0.6);font-size:13px;font-weight:500;\"><span>📁</span><span>Upload from gallery instead</span><input id=\"sc-upload-doc-input\" type=\"file\" accept=\"image/*\" style=\"display:none;\" /></label>`;\n docRoot.appendChild(docVideo); docRoot.appendChild(guideOverlay); docRoot.appendChild(header); docRoot.appendChild(bottomPanel);\n container.appendChild(docRoot);\n docVideo.play().catch(() => {});\n const cleanup = () => { try { docRoot.remove(); } catch(_){} this.docCaptureRoot = null; };\n const captureBtn = bottomPanel.querySelector(\"#sc-capture-doc-btn\") as HTMLButtonElement;\n if (captureBtn) {\n captureBtn.addEventListener(\"click\", () => {\n try {\n const canvas = document.createElement(\"canvas\");\n canvas.width = docVideo.videoWidth || 1280; canvas.height = docVideo.videoHeight || 720;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) { reject(new Error(\"Canvas context unavailable\")); return; }\n ctx.drawImage(docVideo, 0, 0);\n canvas.toBlob((blob) => { if (blob) { cleanup(); resolve(blob); } else { reject(new Error(\"Failed to capture document image\")); } }, \"image/jpeg\", 0.92);\n } catch (err) { reject(err); }\n });\n }\n const uploadInput = bottomPanel.querySelector(\"#sc-upload-doc-input\") as HTMLInputElement;\n if (uploadInput) { uploadInput.addEventListener(\"change\", () => { const file = uploadInput.files?.[0]; if (file) { cleanup(); resolve(file); } }); }\n });\n }\n\n unmount(): void {\n try { this.docCaptureRoot?.remove(); } catch(_){} this.docCaptureRoot = null;\n try { this.root?.remove(); } catch(_){}\n this.root = null; this.videoEl = null; this.instructionEl = null;\n this.confidenceRingEl = null; this.overlayEl = null; this.dotsEl = null;\n this.bgOvalEl = null; this.guideWrapEl = null; this.scanlineEl = null;\n this.faceTracked = false;\n }\n}\n", "/**\r\n * Lightweight SDK logger.\r\n *\r\n * Debug output is suppressed in production. Enable verbose logging by calling\r\n * SDKLogger.setDebug(true) before initialising the SDK, or by setting the\r\n * global flag: window.__SC_DEBUG__ = true\r\n */\r\n\r\nconst PREFIX = \"[SmartComply SDK]\";\r\n\r\nfunction isDebugEnabled(): boolean {\r\n try {\r\n return !!(window as any).__SC_DEBUG__;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nexport const SDKLogger = {\r\n /** Emit an informational message (debug mode only). */\r\n info(message: string, ...args: unknown[]): void {\r\n if (!isDebugEnabled()) return;\r\n console.info(`${PREFIX} ℹ ${message}`, ...args);\r\n },\r\n\r\n /**\r\n * Emit a low-noise informational message that's always visible, debug\r\n * mode or not — for the rare case (e.g. the SDK version on init) where\r\n * knowing this without having to flip on debug logging first matters\r\n * more than staying silent by default.\r\n */\r\n always(message: string, ...args: unknown[]): void {\r\n console.info(`${PREFIX} ${message}`, ...args);\r\n },\r\n\r\n /** Emit a warning (always visible). */\r\n warn(message: string, ...args: unknown[]): void {\r\n console.warn(`${PREFIX} ⚠ ${message}`, ...args);\r\n },\r\n\r\n /** Emit an error (always visible). */\r\n error(message: string, ...args: unknown[]): void {\r\n console.error(`${PREFIX} ✖ ${message}`, ...args);\r\n },\r\n\r\n /** Emit a debug trace (debug mode only — lowest priority). */\r\n debug(message: string, ...args: unknown[]): void {\r\n if (!isDebugEnabled()) return;\r\n console.debug(`${PREFIX} ⬡ ${message}`, ...args);\r\n },\r\n\r\n /** Log a timed group of related messages (debug mode only). */\r\n group(label: string, fn: () => void): void {\r\n if (!isDebugEnabled()) { fn(); return; }\r\n console.group(`${PREFIX} ${label}`);\r\n fn();\r\n console.groupEnd();\r\n },\r\n\r\n /**\r\n * Enable or disable verbose debug output at runtime.\r\n *\r\n * Example:\r\n * import { SDKLogger } from \"smartcomply-web-sdk\";\r\n * SDKLogger.setDebug(true);\r\n */\r\n setDebug(enabled: boolean): void {\r\n try {\r\n (window as any).__SC_DEBUG__ = enabled;\r\n } catch {\r\n /* no-op in non-browser environments */\r\n }\r\n },\r\n};\r\n", "/**\r\n * LivenessUploader — thin wrapper around the HttpClient's uploadWithSession()\r\n * that adds:\r\n * - Progress callbacks (onProgress)\r\n * - Upload cancellation via AbortController\r\n * - Automatic retry on transient network failure (configurable)\r\n *\r\n * Used internally by LivenessModule.create() and LivenessModule.submit() when\r\n * the caller needs progress reporting (e.g. for a progress bar during video\r\n * upload on slow connections).\r\n */\r\n\r\nimport { HttpClient } from \"../../client/HttpClient\";\r\nimport { MAX_RETRIES, RETRY_DELAY_MS } from \"../../utils/constants\";\r\nimport { SDKLogger } from \"../../utils/logger\";\r\n\r\nexport interface UploadOptions {\r\n /** Called with a value 0–1 as the upload progresses. */\r\n onProgress?: (fraction: number) => void;\r\n\r\n /** Optional AbortSignal to cancel the upload mid-flight. */\r\n signal?: AbortSignal;\r\n\r\n /** Override the default number of retries on transient errors. */\r\n retries?: number;\r\n}\r\n\r\nexport class LivenessUploader {\r\n constructor(private http: HttpClient) {}\r\n\r\n /**\r\n * Upload a FormData payload to `path` with optional progress and\r\n * cancellation support.\r\n *\r\n * Falls back to the standard `uploadWithSession()` on browsers that do not\r\n * support XMLHttpRequest upload progress (very rare).\r\n */\r\n async upload<T>(\r\n path: string,\r\n formData: FormData,\r\n options: UploadOptions = {}\r\n ): Promise<T> {\r\n const { onProgress, signal, retries = MAX_RETRIES } = options;\r\n\r\n // If no progress callback is needed, delegate straight to HttpClient\r\n // which already has retry logic built in.\r\n if (!onProgress) {\r\n return this.http.uploadWithSession<T>(path, formData);\r\n }\r\n\r\n return this.uploadWithProgress<T>(path, formData, onProgress, signal, retries);\r\n }\r\n\r\n // ── Private ────────────────────────────────────────────────────────────────\r\n\r\n private async uploadWithProgress<T>(\r\n path: string,\r\n formData: FormData,\r\n onProgress: (fraction: number) => void,\r\n signal: AbortSignal | undefined,\r\n retriesLeft: number\r\n ): Promise<T> {\r\n const sessionToken = (this.http as any).sessionToken as string | null;\r\n if (!sessionToken) {\r\n throw new Error(\"SDK: No session token. Call sdk.createSession() first.\");\r\n }\r\n\r\n const baseUrl: string = (this.http as any).baseUrl as string;\r\n\r\n return new Promise<T>((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n\r\n // Propagate AbortSignal to XHR\r\n if (signal) {\r\n if (signal.aborted) {\r\n reject(new DOMException(\"Upload cancelled\", \"AbortError\"));\r\n return;\r\n }\r\n signal.addEventListener(\"abort\", () => xhr.abort(), { once: true });\r\n }\r\n\r\n xhr.open(\"POST\", `${baseUrl}${path}`, true);\r\n xhr.setRequestHeader(\"x-access-token\", sessionToken);\r\n\r\n xhr.upload.onprogress = (evt) => {\r\n if (evt.lengthComputable) {\r\n onProgress(evt.loaded / evt.total);\r\n }\r\n };\r\n\r\n xhr.onload = () => {\r\n onProgress(1);\r\n\r\n let envelope: any;\r\n try {\r\n envelope = JSON.parse(xhr.responseText);\r\n } catch {\r\n reject(new Error(`SDK: Non-JSON response from ${path} (${xhr.status})`));\r\n return;\r\n }\r\n\r\n if (xhr.status >= 200 && xhr.status < 300 && envelope.status !== \"error\") {\r\n SDKLogger.info(`Upload to ${path} succeeded`, { status: xhr.status });\r\n resolve(envelope.data as T);\r\n } else {\r\n const err = new Error(envelope.message || `Upload to ${path} failed (${xhr.status})`);\r\n (err as any).statusCode = xhr.status;\r\n (err as any).code = envelope.code;\r\n reject(err);\r\n }\r\n };\r\n\r\n xhr.onerror = async () => {\r\n SDKLogger.warn(`Upload to ${path} failed — network error`, { retriesLeft });\r\n\r\n if (retriesLeft > 0) {\r\n await new Promise((r) => setTimeout(r, RETRY_DELAY_MS));\r\n try {\r\n const result = await this.uploadWithProgress<T>(\r\n path, formData, onProgress, signal, retriesLeft - 1\r\n );\r\n resolve(result);\r\n } catch (retryErr) {\r\n reject(retryErr);\r\n }\r\n } else {\r\n reject(new Error(`SDK: Upload to ${path} failed after all retries.`));\r\n }\r\n };\r\n\r\n xhr.onabort = () => {\r\n reject(new DOMException(\"Upload cancelled by user\", \"AbortError\"));\r\n };\r\n\r\n xhr.send(formData);\r\n });\r\n }\r\n}\r\n", "import { HttpClient } from \"../../client/HttpClient\";\r\nimport {\r\n ChallengeAction,\r\n LivenessCreateRequest,\r\n LivenessCreateResponse,\r\n LivenessSubmitResponse,\r\n} from \"../../types/liveness\";\r\nimport { collectDeviceMetadata } from \"../../utils/device\";\r\nimport { DEFAULT_CHALLENGE_ACTIONS, LIVENESS_TIME_LIMIT_SECONDS } from \"../../utils/constants\";\r\nimport { CameraManager } from \"../../camera/CameraManager\";\r\nimport { VideoRecorder } from \"../../camera/VideoRecorder\";\r\nimport { FaceDetectorEngine } from \"../../camera/FaceDetector\";\r\nimport { ActionDetector } from \"../../camera/ActionDetector\";\r\nimport { LivenessUI, LivenessUIColors } from \"./LivenessUI\";\r\nimport { LivenessUploader } from \"./uploader\";\r\n\r\n/**\r\n * Liveness module — 3-step flow aligned with Adhere backend.\r\n *\r\n * Flow:\r\n * Step 1: liveness.create() → POST /v1/sdk/liveness/create/ (multipart)\r\n * Step 2: [camera runs, user performs challenge actions]\r\n * Step 3: liveness.submit() → POST /v1/sdk/liveness/submit/ (multipart)\r\n *\r\n * After submit, the backend returns status: \"processing\".\r\n * Final results are delivered via webhook (liveness.completed event).\r\n */\r\nexport class LivenessModule {\r\n constructor(private http: HttpClient) { }\r\n\r\n /**\r\n * Step 1: Create a liveness challenge entry.\r\n *\r\n * POST /v1/sdk/liveness/create/\r\n * Auth: x-access-token: <sessionToken>\r\n * Content-Type: multipart/form-data\r\n */\r\n async create(params: LivenessCreateRequest): Promise<LivenessCreateResponse> {\r\n const formData = new FormData();\r\n // W9/B7: when identity_check is present (data verification), the backend\r\n // no longer requires identifier/identifier_type — identity is already\r\n // established via identity_check, so the widget omits them entirely\r\n // instead of sending the user's real ID number/type a second time.\r\n //\r\n // Liveness-only (no identity_check AND no document) is the same story —\r\n // there is no real identifier to send. Without this check, the\r\n // fallback below would invent a synthetic `ID-<timestamp>` identifier\r\n // and store it as the check's identifier, implying an ID number was\r\n // involved when none was — misleading downstream data for a mode that\r\n // has no ID number at all.\r\n const hasDocument = !!(params.document || params.document_front || params.id_file);\r\n if (params.identity_check || (!hasDocument && !params.identifier)) {\r\n // no-op — nothing real to send\r\n } else {\r\n const rawIdentifier = params.identifier || `ID-${Date.now()}`;\r\n const safeIdentifier = rawIdentifier.length > 20\r\n ? rawIdentifier.slice(0, 20)\r\n : rawIdentifier;\r\n formData.append(\"identifier\", safeIdentifier);\r\n formData.append(\"identifier_type\", params.identifier_type);\r\n }\r\n formData.append(\"country\", params.country);\r\n formData.append(\r\n \"challenge_actions\",\r\n JSON.stringify(params.challenge_actions)\r\n );\r\n if (params.autoshot_file) {\r\n formData.append(\"autoshot\", params.autoshot_file, \"autoshot.jpg\");\r\n }\r\n \r\n // Handle document upload - support both legacy and new front/back fields\r\n if (params.document) {\r\n formData.append(\"document\", params.document, \"document.jpg\");\r\n if (params.document_back) {\r\n formData.append(\"document_back\", params.document_back, \"document_back.jpg\");\r\n }\r\n } else if (params.document_front) {\r\n // Legacy support - map to document for backward compatibility\r\n formData.append(\"document\", params.document_front, \"document_front.jpg\");\r\n if (params.document_back) {\r\n formData.append(\"document_back\", params.document_back, \"document_back.jpg\");\r\n }\r\n } else if (params.id_file) {\r\n // Legacy support - map to document for backward compatibility\r\n formData.append(\"document\", params.id_file, \"id_document.jpg\");\r\n }\r\n \r\n if (params.identity_check) {\r\n formData.append(\"identity_check\", String(params.identity_check));\r\n }\r\n if (params.snapshot_file) {\r\n formData.append(\"snapshot\", params.snapshot_file, \"snapshot.jpg\");\r\n }\r\n if (params.device_type) {\r\n formData.append(\"device_type\", params.device_type);\r\n }\r\n if (params.os_name) {\r\n formData.append(\"os_name\", params.os_name);\r\n }\r\n if (params.browser_timezone) {\r\n formData.append(\"browser_timezone\", params.browser_timezone);\r\n }\r\n if (params.fingerprint_id) {\r\n formData.append(\"fingerprint_id\", params.fingerprint_id);\r\n }\r\n\r\n return this.http.uploadWithSession<LivenessCreateResponse>(\r\n \"/v1/sdk/liveness/create/\",\r\n formData\r\n );\r\n }\r\n\r\n /**\r\n * Step 3: Submit liveness video recording.\r\n *\r\n * POST /v1/sdk/liveness/submit/\r\n * Auth: x-access-token: <sessionToken>\r\n * Content-Type: multipart/form-data\r\n *\r\n * Note: After submission, the session is revoked (single-use).\r\n * The backend returns status: \"processing\" — results come via webhook.\r\n *\r\n * Pass onProgress for 0–1 upload-fraction callbacks (via LivenessUploader).\r\n */\r\n async submit(\r\n entryId: number,\r\n videoBlob: Blob,\r\n snapshotBlob: Blob,\r\n autoshotBlob?: Blob,\r\n videoDurationSeconds?: number,\r\n videoSizeBytes?: number,\r\n onProgress?: (fraction: number) => void\r\n ): Promise<LivenessSubmitResponse> {\r\n const formData = new FormData();\r\n formData.append(\"entry\", String(entryId));\r\n formData.append(\"video\", videoBlob, \"liveness.webm\");\r\n formData.append(\"snapshot\", snapshotBlob, \"snapshot.jpg\");\r\n if (autoshotBlob) {\r\n formData.append(\"autoshot\", autoshotBlob, \"autoshot.jpg\");\r\n }\r\n if (videoDurationSeconds !== undefined) {\r\n formData.append(\"video_duration_seconds\", String(videoDurationSeconds));\r\n }\r\n if (videoSizeBytes !== undefined) {\r\n formData.append(\"video_size_bytes\", String(videoSizeBytes));\r\n }\r\n\r\n if (onProgress) {\r\n const uploader = new LivenessUploader(this.http);\r\n return uploader.upload<LivenessSubmitResponse>(\r\n \"/v1/sdk/liveness/submit/\",\r\n formData,\r\n { onProgress }\r\n );\r\n }\r\n\r\n return this.http.uploadWithSession<LivenessSubmitResponse>(\r\n \"/v1/sdk/liveness/submit/\",\r\n formData\r\n );\r\n }\r\n\r\n /**\r\n * Poll the public SDK status endpoint for the final verification result.\r\n * Safe to call after the session has been revoked (no auth required) —\r\n * the ocr_* fields below are only populated by the backend when a live\r\n * session token is still attached (see HttpClient.publicGet), since they\r\n * carry PII (name, document number, face thumbnail).\r\n *\r\n * GET /v1/sdk/liveness/<entryId>/sdk-result/\r\n */\r\n async pollResult(entryId: number): Promise<{\r\n id: number;\r\n status: string;\r\n failure_reason: string | null;\r\n completed_at: string | null;\r\n ocr_status?: string;\r\n is_expired?: boolean;\r\n ocr_quality_failed?: boolean;\r\n ocr_name?: string | null;\r\n ocr_document_number?: string | null;\r\n ocr_expiry_date?: string | null;\r\n ocr_face_image_url?: string | null;\r\n ocr_rejection_reason?: string | null;\r\n }> {\r\n return (this.http as any).publicGet(`/v1/sdk/liveness/${entryId}/sdk-result/`);\r\n }\r\n\r\n /**\r\n * Full liveness check — orchestrates the entire flow:\r\n *\r\n * 1. Run action detection loop (camera + MediaPipe) — challenge actions only,\r\n * not recorded (fast head/mouth motion produces blurry frames).\r\n * 2. Create liveness entry on backend (with challenge actions + optional doc)\r\n * 3. Record a short, clean, post-challenge clip (neutral pose + a natural\r\n * blink) — this is what's sent for face comparison in LIVENESS mode.\r\n * 4. Submit to backend and return response (status: \"processing\")\r\n *\r\n * Backend runs LIVENESS mode (blink/motion check, then its own comparison\r\n * frame extracted from this same video) for both data and document\r\n * verification — see FACE_COMPARISON_USER_GUIDE.md.\r\n *\r\n * @param container - DOM element to mount the liveness UI into\r\n * @param params - identifier info and optional document image\r\n * @param actions - override the challenge_actions tag sent to the backend (default: BLINK)\r\n * @param existingEntryId - reuse an already-created LivenessEntry (avoids double charge)\r\n */\r\n async startCheck(\r\n container: HTMLElement,\r\n params: {\r\n identifier: string;\r\n identifier_type: string;\r\n country: string;\r\n id_file?: File | Blob;\r\n document?: File | Blob;\r\n document_front?: File | Blob;\r\n document_back?: File | Blob;\r\n identity_check?: number;\r\n verification_type?: \"data_verification\" | \"document_verification\" | \"liveness_only\";\r\n // B4: pre-warmed camera stream from the confirmation screen — if provided\r\n // camera.open() is skipped and this stream is used directly, eliminating\r\n // the 1–3s camera init delay when the user taps \"Yes, continue\".\r\n prewarmedStream?: MediaStream | null;\r\n // Client branding — falls back to LivenessUI's default blue/green/red\r\n // if omitted, so callers that don't have a theme still work.\r\n colors?: Partial<LivenessUIColors>;\r\n },\r\n actions?: ChallengeAction[],\r\n existingEntryId?: number\r\n ): Promise<LivenessSubmitResponse> {\r\n const camera = new CameraManager();\r\n const recorder = new VideoRecorder();\r\n const faceEngine = new FaceDetectorEngine();\r\n const ui = new LivenessUI(params.colors);\r\n\r\n // Tracks whether cleanup has already been called (so the finally block\r\n // doesn't double-destroy when retry takes over).\r\n let cleanedUp = false;\r\n const cleanup = () => {\r\n if (cleanedUp) return;\r\n cleanedUp = true;\r\n faceEngine.destroy();\r\n camera.stop();\r\n ui.unmount();\r\n };\r\n\r\n // Rejects the whole flow if the camera stream or recorder dies mid-scan —\r\n // raced against the detection loop below via Promise.race, otherwise the\r\n // video just freezes and detection silently spins until the scan timeout.\r\n let interruptedReject: ((err: Error) => void) | null = null;\r\n const interrupted = new Promise<never>((_, reject) => {\r\n interruptedReject = reject;\r\n });\r\n camera.onStreamInterrupted(() => {\r\n interruptedReject?.(\r\n new Error(\"Camera connection was lost. Please check your camera and try again.\")\r\n );\r\n });\r\n recorder.onError(() => {\r\n interruptedReject?.(\r\n new Error(\"Recording failed unexpectedly. Please try again.\")\r\n );\r\n });\r\n interrupted.catch(() => {});\r\n\r\n try {\r\n // 0. Kick off face-engine load (WASM + ~5MB model download) immediately,\r\n // in parallel with camera permission/open and any document capture step\r\n // below — it used to be a serial `await` right before it was first\r\n // needed (step \"Wait for face to be detected\"), which stacked its full\r\n // multi-second first-load latency on top of everything before it. It's\r\n // only actually awaited right before the first detect() call. Errors\r\n // (including the timeout added in FaceDetectorEngine) are caught there,\r\n // not here, so this unhandled-rejection guard just silences the\r\n // \"uncaught in promise\" console warning if it fails before that await.\r\n const faceInitPromise = faceEngine.init();\r\n faceInitPromise.catch(() => {});\r\n\r\n // 1. Open camera — reuse pre-warmed stream if available (B4)\r\n let stream: MediaStream;\r\n if (params.prewarmedStream && params.prewarmedStream.active) {\r\n // Stream already open from confirmation screen — skip getUserMedia delay.\r\n // Hand it to `camera` so cleanup()'s camera.stop() actually releases it —\r\n // otherwise this stream is untracked by CameraManager and leaks on any\r\n // failure/timeout path that only calls camera.stop().\r\n stream = params.prewarmedStream;\r\n camera.setStream(stream);\r\n } else {\r\n stream = await camera.open();\r\n }\r\n\r\n // 2. Document capture step — skipped if already captured earlier in\r\n // the flow (SmartComplyFlow's document_capture step) and passed in\r\n // via document/document_front; id_file is a legacy alias.\r\n let capturedDocBlob: Blob | undefined =\r\n (params.id_file || params.document || params.document_front) as Blob | undefined;\r\n if (!capturedDocBlob && params.verification_type === \"document_verification\") {\r\n capturedDocBlob = await ui.mountDocumentCapture(container, stream);\r\n }\r\n\r\n // 3. Create a temporary video element to capture autoshot\r\n const tempVideo = document.createElement(\"video\");\r\n tempVideo.srcObject = stream;\r\n tempVideo.muted = true;\r\n tempVideo.playsInline = true;\r\n await tempVideo.play();\r\n\r\n // Wait for face to be detected before capturing autoshot\r\n ui.mount(container, { time_limit_seconds: 0, instruction: \"Fit your face inside the oval outline\" });\r\n const uiVideo = ui.getVideoElement();\r\n if (uiVideo) {\r\n uiVideo.srcObject = stream;\r\n await uiVideo.play();\r\n } else {\r\n tempVideo.style.cssText = \"width:100%;border-radius:12px;transform:scaleX(-1);\";\r\n container.appendChild(tempVideo);\r\n }\r\n\r\n // Join the load kicked off in step 0 — usually already resolved by now\r\n // since it's been running since the top of this function. If it's\r\n // still loading (slow connection), the user now sees the oval/instruction\r\n // UI already mounted rather than a blank wait, and a clear timeout error\r\n // (from FaceDetectorEngine's internal 20s cap) instead of an indefinite hang.\r\n await faceInitPromise;\r\n ui.updateInstruction(\"Fit your face inside the oval outline\");\r\n\r\n // Wait until face is stably centred.\r\n // Tolerant: allows up to 2 missed frames before resetting — avoids\r\n // flickering \"Move closer\" for a single dropped frame.\r\n const videoForDetection = uiVideo || tempVideo;\r\n await new Promise<void>((resolve) => {\r\n let stableFrames = 0;\r\n let missedFrames = 0;\r\n const STABLE_REQUIRED = 4; // increased from 2 — ensures face is properly locked before autoshot\r\n const MISS_TOLERANCE = 2; // allow up to 2 consecutive misses before reset\r\n const MAX_WAIT_MS = 8000;\r\n const startTime = performance.now();\r\n\r\n const checkFace = () => {\r\n if (performance.now() - startTime >= MAX_WAIT_MS) {\r\n resolve(); // proceed anyway after timeout\r\n return;\r\n }\r\n\r\n if (videoForDetection.readyState >= 2) {\r\n const detection = faceEngine.detect(videoForDetection, performance.now());\r\n ui.setFaceTracking(detection.faceDetected);\r\n if (detection.faceDetected) {\r\n stableFrames++;\r\n missedFrames = 0;\r\n ui.updateInstruction(\"Good — hold that position\");\r\n if (stableFrames >= STABLE_REQUIRED) {\r\n resolve();\r\n return;\r\n }\r\n } else {\r\n missedFrames++;\r\n if (missedFrames > MISS_TOLERANCE) {\r\n stableFrames = 0; // full reset only after sustained loss\r\n ui.updateInstruction(\"Move closer so your whole face fits in the oval\");\r\n }\r\n }\r\n }\r\n\r\n requestAnimationFrame(checkFace);\r\n };\r\n requestAnimationFrame(checkFace);\r\n });\r\n\r\n ui.updateInstruction(\"Getting ready…\");\r\n // Settle delay — gives camera AE/AF time to lock before challenge starts\r\n await new Promise((r) => setTimeout(r, 500));\r\n\r\n // W9: Autoshot captured AFTER challenge (moved from before create).\r\n // We take a placeholder-size stub here only to satisfy liveness.create()\r\n // which currently expects autoshot_file — the real autoshot is captured\r\n // after all challenge actions complete and is sent on submit instead.\r\n // The backend ignores the create-time autoshot for face comparison;\r\n // only the submit-time autoshot is used. Pass undefined here and\r\n // capture the real one post-challenge below.\r\n\r\n // 4. Create liveness entry on backend (skip if retrying with existing entry)\r\n const challengeActions = actions || [...DEFAULT_CHALLENGE_ACTIONS];\r\n let entry: LivenessCreateResponse;\r\n\r\n if (existingEntryId) {\r\n entry = { id: existingEntryId, challenge_actions: challengeActions, status: \"pending\", client_id: \"\", expires_at: null };\r\n } else {\r\n const deviceMeta = collectDeviceMetadata();\r\n entry = await this.create({\r\n identifier: params.identifier,\r\n identifier_type: params.identifier_type,\r\n country: params.country,\r\n challenge_actions: challengeActions,\r\n // W9: No autoshot at create time — real one captured post-challenge\r\n autoshot_file: undefined,\r\n document: params.document || params.document_front || params.id_file || capturedDocBlob,\r\n document_back: params.document_back,\r\n identity_check: params.identity_check,\r\n device_type: deviceMeta.device_type,\r\n os_name: deviceMeta.os_name,\r\n browser_timezone: deviceMeta.browser_timezone,\r\n fingerprint_id: deviceMeta.fingerprint_id,\r\n });\r\n }\r\n\r\n tempVideo.pause();\r\n // B3: Remove tempVideo from DOM to release the camera light indicator\r\n // on devices that show it while a video element holds a stream reference.\r\n tempVideo.srcObject = null;\r\n tempVideo.remove();\r\n\r\n // 5. Mount the passive scan UI — single oval view, one instruction,\r\n // no step-by-step challenge list. The backend still receives a\r\n // challenge_actions tag ([\"BLINK\"]) for compatibility; the widget no\r\n // longer commands discrete actions in sequence.\r\n const uiChallenge = {\r\n time_limit_seconds: LIVENESS_TIME_LIMIT_SECONDS,\r\n instruction: \"Blink naturally and slowly turn your head from side to side\",\r\n };\r\n\r\n ui.unmount();\r\n const videoEl = ui.mount(container, { ...uiChallenge, instruction: \"Starting scan…\" });\r\n videoEl.srcObject = stream;\r\n await videoEl.play();\r\n\r\n // 7. Wait for camera AE/AF to re-stabilise after re-mounting the video\r\n // element before scanning/recording — avoids a blurry first second.\r\n // \"Starting scan…\" (set above) covers this wait so the pause between\r\n // phase 1 (centering) and phase 2 (the actual scan) reads as an\r\n // intentional handoff instead of the same instruction just sitting\r\n // there through an unexplained delay.\r\n await new Promise((r) => setTimeout(r, 1000));\r\n ui.updateInstruction(uiChallenge.instruction);\r\n\r\n // 8. Start recording immediately — the whole scan window is short and\r\n // clean by design (no fast head-turn/mouth-open motion to blur it), so\r\n // it doubles as the clip sent to SmartComply's LIVENESS pipeline.\r\n recorder.start(stream);\r\n // Reset the progress ring's clock to now — it was mounted ~1s ago\r\n // (see step 5/7 above), so without this the ring would visually run\r\n // ahead of the actual detection window it's supposed to represent.\r\n ui.startScanClock();\r\n\r\n // Passive natural-motion detection: watch for a genuine blink or head\r\n // movement (whichever the user does first while looking around), for\r\n // up to the scan time limit. A minimum dwell time avoids ending the\r\n // scan on a single lucky frame before the camera has settled.\r\n const MIN_SCAN_MS = 2000;\r\n const actionDetector = new ActionDetector();\r\n\r\n let scanAnimFrameId: number | undefined;\r\n let scanTimeoutId: ReturnType<typeof setTimeout> | undefined;\r\n const scanPromise = new Promise<\"completed\" | \"timeout\">(\r\n (resolve) => {\r\n const scanStart = performance.now();\r\n\r\n scanTimeoutId = setTimeout(() => {\r\n if (scanAnimFrameId !== undefined) cancelAnimationFrame(scanAnimFrameId);\r\n resolve(\"timeout\");\r\n }, uiChallenge.time_limit_seconds * 1000);\r\n\r\n const detectLoop = () => {\r\n if (videoEl.readyState >= 2) {\r\n const detection = faceEngine.detect(videoEl, performance.now());\r\n const scan = actionDetector.check(detection);\r\n ui.updateScanProgress(scan.livenessConfirmed);\r\n ui.setFaceTracking(detection.faceDetected);\r\n\r\n if (!detection.faceDetected) {\r\n ui.updateInstruction(\"Move closer so your whole face fits in the oval\");\r\n } else {\r\n ui.updateInstruction(uiChallenge.instruction);\r\n }\r\n\r\n // Require the face to be present in THIS frame too — scan.livenessConfirmed\r\n // latches true forever once a blink/motion is seen, so without this check\r\n // the scan could complete on elapsed time alone while the user has since\r\n // moved out of frame, ending the recording on an empty/unusable frame\r\n // right before the autoshot capture below.\r\n const elapsed = performance.now() - scanStart;\r\n if (detection.faceDetected && scan.livenessConfirmed && elapsed >= MIN_SCAN_MS) {\r\n clearTimeout(scanTimeoutId);\r\n if (scanAnimFrameId !== undefined) cancelAnimationFrame(scanAnimFrameId);\r\n resolve(\"completed\");\r\n return;\r\n }\r\n }\r\n\r\n scanAnimFrameId = requestAnimationFrame(detectLoop);\r\n };\r\n\r\n detectLoop();\r\n }\r\n );\r\n\r\n let detectionResult: \"completed\" | \"timeout\";\r\n try {\r\n detectionResult = await Promise.race([scanPromise, interrupted]);\r\n } catch (interruptErr) {\r\n // Camera died mid-recording — stop the loop/timer and discard the\r\n // now-unusable (truncated/frozen) recording rather than submitting it.\r\n if (scanAnimFrameId !== undefined) cancelAnimationFrame(scanAnimFrameId);\r\n if (scanTimeoutId !== undefined) clearTimeout(scanTimeoutId);\r\n recorder.stop().catch(() => {});\r\n throw interruptErr;\r\n }\r\n\r\n // ── On timeout: show retry screen, clean up, restart ──────────\r\n if (detectionResult === \"timeout\") {\r\n // IMPORTANT: mark cleanedUp=true BEFORE returning the new Promise so\r\n // the outer `finally` block does NOT call cleanup() immediately —\r\n // which would destroy the UI before the user sees the timeout screen.\r\n cleanedUp = true;\r\n\r\n return new Promise<LivenessSubmitResponse>((resolveRetry, rejectRetry) => {\r\n ui.showTimeout(() => {\r\n // User clicked \"Try Again\" — now it is safe to destroy this attempt\r\n recorder.stop().catch(() => {}); // discard partial recording\r\n faceEngine.destroy();\r\n camera.stop();\r\n ui.unmount();\r\n\r\n // Restart liveness with same entry ID to prevent duplicate charges (D1)\r\n // Pass capturedDocBlob forward so document scan step is not repeated.\r\n this.startCheck(\r\n container,\r\n { ...params, id_file: capturedDocBlob },\r\n actions,\r\n entry.id\r\n )\r\n .then(resolveRetry)\r\n .catch(rejectRetry);\r\n });\r\n // showTimeout waits for the user to click — the promise stays pending.\r\n });\r\n }\r\n\r\n // ── On completion: capture stills, close out the recording, submit ──\r\n\r\n ui.updateInstruction(\"Verifying...\");\r\n\r\n // Capture autoshot (real selfie) — face already settled from the scan,\r\n // camera AE locked. Same quality-gated capture used throughout.\r\n const autoshotBlob = await this.captureFrame(videoEl);\r\n if (!autoshotBlob || autoshotBlob.size === 0) {\r\n recorder.stop().catch(() => {});\r\n throw new Error(\"Failed to capture selfie. Please ensure your face is visible and try again.\");\r\n }\r\n\r\n // Capture a snapshot frame as well (same timing, slightly different use)\r\n const snapshotBlob = await this.captureFrame(videoEl);\r\n\r\n // 9. Stop recording — the scan window itself (short, clean, natural\r\n // blink/motion) is what SmartComply's LIVENESS mode analyses: blink\r\n // and motion detection, then its own comparison frame extracted from\r\n // this same video.\r\n const recorded = await recorder.stop();\r\n const videoBlob = recorded.blob;\r\n const durationSeconds = recorded.durationSeconds;\r\n\r\n // 10. Submit to backend — always include autoshot so document-flow\r\n // entries (which bypassed create() via existingEntryId) still get it.\r\n const submitResult = await this.submit(\r\n entry.id,\r\n videoBlob,\r\n snapshotBlob,\r\n autoshotBlob,\r\n durationSeconds,\r\n videoBlob.size,\r\n (fraction) => {\r\n const pct = Math.round(fraction * 100);\r\n ui.updateInstruction(pct < 100 ? `Uploading... ${pct}%` : \"Verifying...\");\r\n }\r\n );\r\n\r\n // 11. Show success overlay briefly before the flow advances\r\n await ui.showResult(\r\n submitResult.status === \"failed\" ? \"failed\" : \"processing\",\r\n submitResult.id\r\n );\r\n\r\n return submitResult;\r\n\r\n } finally {\r\n cleanup();\r\n }\r\n }\r\n\r\n /**\r\n * Capture a single sharp frame from a video element as a JPEG Blob.\r\n * Retries up to maxAttempts times (300 ms apart) if the Laplacian blur\r\n * score is below threshold, then falls back to the best frame captured.\r\n *\r\n * Threshold calibration:\r\n * The server rejects images with OpenCV Laplacian variance < 80.\r\n * This SDK uses sum-of-squared Laplacian (different normalisation) —\r\n * empirically ~100 here corresponds to ~80 server-side. We aim for 120\r\n * to give a comfortable safety margin.\r\n */\r\n private async captureFrame(\r\n video: HTMLVideoElement,\r\n maxAttempts = 5\r\n ): Promise<Blob> {\r\n const MIN_BLUR_SCORE = 120; // calibrated to server threshold of 80 (different scale)\r\n const MIN_BRIGHTNESS = 40; // 0-255 — below this = too dark for face comparison\r\n const MAX_BRIGHTNESS = 220; // above this = too bright/overexposed\r\n const RETRY_DELAY_MS = 200;\r\n let bestBlob: Blob | null = null;\r\n let bestScore = -1;\r\n\r\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = video.videoWidth || 640;\r\n canvas.height = video.videoHeight || 480;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) throw new Error(\"Failed to get canvas context\");\r\n ctx.drawImage(video, 0, 0);\r\n\r\n const blurScore = this._computeBlurScore(canvas);\r\n const brightness = this._computeBrightness(canvas);\r\n const brightnessOk = brightness >= MIN_BRIGHTNESS && brightness <= MAX_BRIGHTNESS;\r\n\r\n // Combined quality score — blur is primary, brightness gates it\r\n const qualityScore = brightnessOk ? blurScore : 0;\r\n\r\n const blob = await new Promise<Blob | null>((res) =>\r\n canvas.toBlob((b) => res(b), \"image/jpeg\", 0.92)\r\n );\r\n\r\n if (blob && qualityScore > bestScore) {\r\n bestBlob = blob;\r\n bestScore = qualityScore;\r\n }\r\n\r\n // Stop early if both blur and brightness are acceptable\r\n if (blurScore >= MIN_BLUR_SCORE && brightnessOk) break;\r\n\r\n if (attempt < maxAttempts - 1) {\r\n await new Promise((r) => setTimeout(r, RETRY_DELAY_MS));\r\n }\r\n }\r\n\r\n if (bestBlob) return bestBlob;\r\n throw new Error(\"Failed to capture frame\");\r\n }\r\n\r\n /**\r\n * Compute average brightness (0–255) of the centre-cropped frame.\r\n * Used to reject frames that are too dark or overexposed before sending\r\n * to face comparison — server rejects IMAGE_TOO_DARK below ~40 luminance.\r\n */\r\n private _computeBrightness(canvas: HTMLCanvasElement): number {\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return 128;\r\n const sw = Math.min(canvas.width, 320);\r\n const sh = Math.min(canvas.height, 240);\r\n const sx = Math.floor((canvas.width - sw) / 2);\r\n const sy = Math.floor((canvas.height - sh) / 2);\r\n const { data } = ctx.getImageData(sx, sy, sw, sh);\r\n let total = 0;\r\n const pixels = sw * sh;\r\n for (let i = 0; i < pixels; i++) {\r\n total += 0.299 * data[i * 4] + 0.587 * data[i * 4 + 1] + 0.114 * data[i * 4 + 2];\r\n }\r\n return total / pixels;\r\n }\r\n\r\n /**\r\n * Sum-of-squared Laplacian blur metric on a centre-cropped region (320×240 max).\r\n * Higher score = sharper image.\r\n *\r\n * NOTE: This is sum-of-squares, NOT Laplacian variance (which OpenCV uses).\r\n * The two scales differ — empirically, a score of ~120 here corresponds to\r\n * ~80 on the server side (OpenCV cv2.Laplacian().var()). Keep MIN_BLUR_SCORE\r\n * in captureFrame() calibrated against this.\r\n */\r\n private _computeBlurScore(canvas: HTMLCanvasElement): number {\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return 0;\r\n\r\n // Sample a 320×240 centre crop for performance\r\n const sw = Math.min(canvas.width, 320);\r\n const sh = Math.min(canvas.height, 240);\r\n const sx = Math.floor((canvas.width - sw) / 2);\r\n const sy = Math.floor((canvas.height - sh) / 2);\r\n\r\n const { data, width, height } = ctx.getImageData(sx, sy, sw, sh);\r\n\r\n // Convert to greyscale\r\n const gray = new Float32Array(width * height);\r\n for (let i = 0; i < width * height; i++) {\r\n gray[i] =\r\n 0.299 * data[i * 4] +\r\n 0.587 * data[i * 4 + 1] +\r\n 0.114 * data[i * 4 + 2];\r\n }\r\n\r\n // Laplacian convolution [0,1,0 / 1,-4,1 / 0,1,0] — sum of squared responses\r\n let sum = 0;\r\n let n = 0;\r\n for (let y = 1; y < height - 1; y++) {\r\n for (let x = 1; x < width - 1; x++) {\r\n const l =\r\n gray[(y - 1) * width + x] +\r\n gray[(y + 1) * width + x] +\r\n gray[y * width + (x - 1)] +\r\n gray[y * width + (x + 1)] -\r\n 4 * gray[y * width + x];\r\n sum += l * l;\r\n n++;\r\n }\r\n }\r\n return n > 0 ? sum / n : 0;\r\n }\r\n}\r\n", "import { SDKConfig } from \"./Config\";\r\nimport { HttpClient } from \"./HttpClient\";\r\nimport { OnboardingModule } from \"../modules/onboarding/onboarding\";\r\nimport { LivenessModule } from \"../modules/liveness/liveness\";\r\nimport { SDKLogger } from \"../utils/logger\";\r\nimport {\r\n SessionResponse,\r\n SDKInitConfig,\r\n} from \"../types/onboarding\";\r\n\r\n/**\r\n * SmartComply SDK — main entry point.\r\n *\r\n * Usage:\r\n * const sdk = new SmartComply({ apiKey: \"pk_...\", clientId: \"uuid-...\", environment: \"sandbox\" });\r\n * const session = await sdk.createSession();\r\n * const config = await sdk.initializeConfig();\r\n * // ... use sdk.onboarding and sdk.liveness modules\r\n */\r\nexport class SmartComply {\r\n /**\r\n * Package version, hardcoded to match package.json — bump this alongside\r\n * every version bump there (same manual-sync convention already used for\r\n * MEDIAPIPE_VERSION in camera/FaceDetector.ts). Exists so a client's\r\n * running version can be confirmed directly (SmartComply.VERSION, or the\r\n * console log on construction below) instead of trusting that whatever\r\n * CDN tag they installed with (e.g. @1, which floats to the latest\r\n * matching release) actually resolved to the version they expect.\r\n */\r\n static readonly VERSION = \"1.0.80\";\r\n\r\n private http: HttpClient;\r\n private clientId: string;\r\n private _sessionToken: string | null = null;\r\n private _sessionExpiresAt: string | null = null;\r\n private _sdkConfig: SDKInitConfig | null = null;\r\n\r\n public onboarding: OnboardingModule;\r\n public liveness: LivenessModule;\r\n\r\n constructor(config: SDKConfig) {\r\n if (!config.apiKey) {\r\n throw new Error(\"SmartComply: apiKey is required\");\r\n }\r\n if (!config.clientId) {\r\n throw new Error(\"SmartComply: clientId is required (UUID from your SDK config)\");\r\n }\r\n\r\n this.clientId = config.clientId;\r\n this.http = new HttpClient(config);\r\n\r\n this.onboarding = new OnboardingModule(this.http);\r\n this.liveness = new LivenessModule(this.http);\r\n\r\n SDKLogger.always(`v${SmartComply.VERSION}`);\r\n }\r\n\r\n /** Current session token (null if not created yet) */\r\n get sessionToken(): string | null {\r\n return this._sessionToken;\r\n }\r\n\r\n /** Session expiration ISO timestamp */\r\n get sessionExpiresAt(): string | null {\r\n return this._sessionExpiresAt;\r\n }\r\n\r\n /** SDK config fetched from backend (null until initializeConfig() is called) */\r\n get sdkConfig(): SDKInitConfig | null {\r\n return this._sdkConfig;\r\n }\r\n\r\n /**\r\n * Create a new SDK session.\r\n *\r\n * POST /v1/session/create/\r\n * Auth: Authorization: Bearer <apiKey>\r\n * Body: { client_id: \"<uuid>\" }\r\n *\r\n * Returns: { token: \"...\", expires_at: \"...\" }\r\n */\r\n async createSession(): Promise<SessionResponse> {\r\n const response = await this.http.request<SessionResponse>(\r\n \"POST\",\r\n \"/v1/session/create/\",\r\n { client_id: this.clientId }\r\n );\r\n\r\n this._sessionToken = response.token;\r\n this._sessionExpiresAt = response.expires_at;\r\n\r\n // Set the session token on the HTTP client for subsequent requests\r\n this.http.setSessionToken(response.token);\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Fetch SDK configuration from the backend.\r\n * Must be called after createSession().\r\n *\r\n * GET /v1/initialize/\r\n * Auth: x-access-token: <sessionToken>\r\n *\r\n * Returns: { brand_name, theme, verification_type, channels, redirect_url, ... }\r\n */\r\n async initializeConfig(): Promise<SDKInitConfig> {\r\n const config = await this.http.sessionRequest<SDKInitConfig>(\r\n \"GET\",\r\n \"/v1/initialize/\"\r\n );\r\n\r\n this._sdkConfig = config;\r\n return config;\r\n }\r\n}\r\n", "/**\r\n * Theme system for the SmartComply Flow widget.\r\n * Maps to backend's SDKConfig.THEME_CHOICES:\r\n * default, midnight_blue, sunset_gold, forest_emerald\r\n */\r\n\r\nexport interface ThemeColors {\r\n primary: string;\r\n primaryHover: string;\r\n primaryGlow: string;\r\n bg: string;\r\n cardBg: string;\r\n inputBg: string;\r\n text: string;\r\n textSecondary: string;\r\n textMuted: string;\r\n border: string;\r\n borderFocus: string;\r\n success: string;\r\n successBg: string;\r\n error: string;\r\n errorBg: string;\r\n warning: string;\r\n overlay: string;\r\n shimmer: string;\r\n shadow: string;\r\n isDark: boolean;\r\n}\r\n\r\n/**\r\n * Shared spacing/radius/type scale — one source of truth so every screen's\r\n * card/button/heading proportions visibly belong to the same system instead\r\n * of each picking its own ad hoc pixel value.\r\n */\r\nexport const RADIUS = {\r\n sm: 8,\r\n md: 12,\r\n lg: 16,\r\n pill: 999,\r\n} as const;\r\n\r\nexport const TYPE = {\r\n xs: 12,\r\n sm: 13,\r\n base: 15,\r\n headingSm: 16,\r\n heading: 18,\r\n headingLg: 22,\r\n} as const;\r\n\r\nexport const THEMES: Record<string, ThemeColors> = {\r\n default: {\r\n primary: \"#3b82f6\",\r\n primaryHover: \"#2563eb\",\r\n primaryGlow: \"rgba(59, 130, 246, 0.25)\",\r\n bg: \"#ffffff\",\r\n cardBg: \"#f8fafc\",\r\n inputBg: \"#f1f5f9\",\r\n text: \"#0f172a\",\r\n textSecondary: \"#475569\",\r\n textMuted: \"#94a3b8\",\r\n border: \"#e2e8f0\",\r\n borderFocus: \"#3b82f6\",\r\n success: \"#22c55e\",\r\n successBg: \"rgba(34, 197, 94, 0.1)\",\r\n error: \"#ef4444\",\r\n errorBg: \"rgba(239, 68, 68, 0.1)\",\r\n warning: \"#f59e0b\",\r\n overlay: \"rgba(15, 23, 42, 0.6)\",\r\n shimmer: \"rgba(59, 130, 246, 0.08)\",\r\n shadow: \"0 20px 60px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(0, 0, 0, 0.05)\",\r\n isDark: false,\r\n },\r\n\r\n midnight_blue: {\r\n primary: \"#60a5fa\",\r\n primaryHover: \"#93bbfd\",\r\n primaryGlow: \"rgba(96, 165, 250, 0.2)\",\r\n bg: \"#0b1120\",\r\n cardBg: \"#111d33\",\r\n inputBg: \"#162032\",\r\n text: \"#f1f5f9\",\r\n textSecondary: \"#94a3b8\",\r\n textMuted: \"#64748b\",\r\n border: \"#1e3a5f\",\r\n borderFocus: \"#60a5fa\",\r\n success: \"#4ade80\",\r\n successBg: \"rgba(74, 222, 128, 0.1)\",\r\n error: \"#f87171\",\r\n errorBg: \"rgba(248, 113, 113, 0.1)\",\r\n warning: \"#fbbf24\",\r\n overlay: \"rgba(0, 0, 0, 0.75)\",\r\n shimmer: \"rgba(96, 165, 250, 0.06)\",\r\n shadow: \"0 20px 60px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(96, 165, 250, 0.1)\",\r\n isDark: true,\r\n },\r\n\r\n sunset_gold: {\r\n primary: \"#f59e0b\",\r\n primaryHover: \"#d97706\",\r\n primaryGlow: \"rgba(245, 158, 11, 0.2)\",\r\n bg: \"#fffdf7\",\r\n cardBg: \"#fef9ee\",\r\n inputBg: \"#fef3c7\",\r\n text: \"#1c1917\",\r\n textSecondary: \"#57534e\",\r\n textMuted: \"#a8a29e\",\r\n border: \"#fed7aa\",\r\n borderFocus: \"#f59e0b\",\r\n success: \"#22c55e\",\r\n successBg: \"rgba(34, 197, 94, 0.1)\",\r\n error: \"#ef4444\",\r\n errorBg: \"rgba(239, 68, 68, 0.1)\",\r\n warning: \"#f59e0b\",\r\n overlay: \"rgba(28, 25, 23, 0.6)\",\r\n shimmer: \"rgba(245, 158, 11, 0.08)\",\r\n shadow: \"0 20px 60px rgba(0, 0, 0, 0.12), 0 0 0 1px rgba(245, 158, 11, 0.1)\",\r\n isDark: false,\r\n },\r\n\r\n forest_emerald: {\r\n primary: \"#10b981\",\r\n primaryHover: \"#059669\",\r\n primaryGlow: \"rgba(16, 185, 129, 0.2)\",\r\n bg: \"#f7fdf9\",\r\n cardBg: \"#ecfdf5\",\r\n inputBg: \"#d1fae5\",\r\n text: \"#1a1a2e\",\r\n textSecondary: \"#4b5563\",\r\n textMuted: \"#9ca3af\",\r\n border: \"#a7f3d0\",\r\n borderFocus: \"#10b981\",\r\n success: \"#22c55e\",\r\n successBg: \"rgba(34, 197, 94, 0.1)\",\r\n error: \"#ef4444\",\r\n errorBg: \"rgba(239, 68, 68, 0.1)\",\r\n warning: \"#f59e0b\",\r\n overlay: \"rgba(26, 26, 46, 0.6)\",\r\n shimmer: \"rgba(16, 185, 129, 0.08)\",\r\n shadow: \"0 20px 60px rgba(0, 0, 0, 0.12), 0 0 0 1px rgba(16, 185, 129, 0.1)\",\r\n isDark: false,\r\n },\r\n};\r\n\r\n/**\r\n * Return a theme by name, with an optional hex override for client branding.\r\n * If hex is provided, the named theme is used as the base and all primary\r\n * colour slots are replaced with the client's brand hex — so buttons, borders,\r\n * focus rings, and glows all use the client's colour instead of the default.\r\n */\r\nexport function getTheme(name: string, hex?: string | null): ThemeColors {\r\n const base = { ...(THEMES[name] || THEMES.default) };\r\n if (hex && /^#[0-9A-Fa-f]{6}$/.test(hex.trim())) {\r\n const h = hex.trim();\r\n // Derive a slightly darker hover shade by reducing lightness ~10%\r\n const hover = _darkenHex(h, 15);\r\n base.primary = h;\r\n base.primaryHover = hover;\r\n base.primaryGlow = `${h}40`; // 25% opacity\r\n base.borderFocus = h;\r\n base.shimmer = `${h}14`; // 8% opacity\r\n }\r\n return base;\r\n}\r\n\r\n/** Darken a #rrggbb hex colour by subtracting `amount` from each channel. */\r\nfunction _darkenHex(hex: string, amount: number): string {\r\n const n = parseInt(hex.slice(1), 16);\r\n const r = Math.max(0, (n >> 16) - amount);\r\n const g = Math.max(0, ((n >> 8) & 0xff) - amount);\r\n const b = Math.max(0, (n & 0xff) - amount);\r\n return `#${((r << 16) | (g << 8) | b).toString(16).padStart(6, \"0\")}`;\r\n}\r\n", "/**\n * Shared document-type rules used by both the ID-type selection screen\n * (SmartComplyFlow) and the capture component (DocumentCapture) — kept in\n * one place so the two can't silently diverge on which documents need a\n * back-side photo.\n */\n\n/**\n * Whether a document's back side should be captured:\n * true — required, the flow forces a back-capture step\n * false — never offered\n * \"optional\" — offered, but the user can skip it and proceed on front alone\n */\nexport type BackSideMode = boolean | \"optional\";\n\n/** Documents where the backend OCR pipeline needs (or can use) the reverse side. */\nexport function requiresBackSide(documentType: string): BackSideMode {\n const type = documentType.toLowerCase();\n if (type.includes(\"nin\")) {\n // The physical NIN card is two-sided, but not every printed card in\n // circulation carries meaningful back-side content — offer the step\n // instead of forcing it.\n return \"optional\";\n }\n return type.includes(\"voter\") ||\n type.includes(\"driver\") ||\n type.includes(\"license\") ||\n type.includes(\"national id\") ||\n type.includes(\"national id card\") ||\n type.includes(\"ghana\");\n // Passport: back side is the machine-readable zone but OCR reads from front only.\n}\n\n/**\n * Scale ratio for fitting an image within maxWidth x maxHeight, never\n * upscaling. Shared by DocumentCapture's canvas sizing and compressImage so\n * both agree on the same clamp-at-1 behavior.\n */\nexport function computeScaleRatio(\n srcWidth: number,\n srcHeight: number,\n maxWidth: number,\n maxHeight: number\n): number {\n return Math.min(maxWidth / srcWidth, maxHeight / srcHeight, 1);\n}\n", "/**\r\n * Image Quality Assessment for Document Capture\r\n * Client-side quality checks before sending to backend\r\n */\r\n\r\nexport interface QualityMetrics {\r\n sharpness: number;\r\n contrast: number;\r\n brightness: number;\r\n isBlurry: boolean;\r\n hasGlare: boolean;\r\n overallScore: number;\r\n}\r\n\r\nexport interface QualityFeedback {\r\n isValid: boolean;\r\n message: string;\r\n recommendations: string[];\r\n quality: QualityMetrics;\r\n}\r\n\r\n/**\r\n * Calculate image sharpness using Laplacian variance\r\n * Higher values = sharper image\r\n */\r\nexport function calculateSharpness(imageData: ImageData): number {\r\n const { width, height, data } = imageData;\r\n \r\n // Convert to grayscale\r\n const gray = new Uint8Array(width * height);\r\n for (let i = 0; i < width * height; i++) {\r\n const idx = i * 4;\r\n gray[i] = Math.round(0.299 * data[idx] + 0.587 * data[idx + 1] + 0.114 * data[idx + 2]);\r\n }\r\n \r\n // Apply Laplacian kernel\r\n const laplacian = new Float32Array(width * height);\r\n let sum = 0;\r\n let sumSq = 0;\r\n let count = 0;\r\n \r\n for (let y = 1; y < height - 1; y++) {\r\n for (let x = 1; x < width - 1; x++) {\r\n const idx = y * width + x;\r\n \r\n // Laplacian kernel\r\n const val = \r\n -1 * gray[idx - width] +\r\n -1 * gray[idx - 1] +\r\n 4 * gray[idx] +\r\n -1 * gray[idx + 1] +\r\n -1 * gray[idx + width];\r\n \r\n laplacian[idx] = val;\r\n sum += val;\r\n sumSq += val * val;\r\n count++;\r\n }\r\n }\r\n \r\n // Calculate variance\r\n const mean = sum / count;\r\n const variance = (sumSq / count) - (mean * mean);\r\n \r\n return Math.abs(variance);\r\n}\r\n\r\n/**\r\n * Detect glare (overexposed areas)\r\n */\r\nexport function detectGlare(imageData: ImageData, threshold: number = 250): number {\r\n const { data } = imageData;\r\n let overexposed = 0;\r\n \r\n for (let i = 0; i < data.length; i += 4) {\r\n const brightness = (data[i] + data[i + 1] + data[i + 2]) / 3;\r\n if (brightness > threshold) {\r\n overexposed++;\r\n }\r\n }\r\n \r\n return overexposed / (data.length / 4);\r\n}\r\n\r\n/**\r\n * Calculate contrast (standard deviation)\r\n */\r\nexport function calculateContrast(imageData: ImageData): number {\r\n const { data } = imageData;\r\n let sum = 0;\r\n let sumSq = 0;\r\n const pixelCount = data.length / 4;\r\n \r\n for (let i = 0; i < data.length; i += 4) {\r\n const gray = 0.299 * data[i] + 0.587 * data[i + 1] + 0.114 * data[i + 2];\r\n sum += gray;\r\n sumSq += gray * gray;\r\n }\r\n \r\n const mean = sum / pixelCount;\r\n const variance = (sumSq / pixelCount) - (mean * mean);\r\n \r\n return Math.sqrt(variance);\r\n}\r\n\r\n/**\r\n * Calculate brightness (mean pixel value)\r\n */\r\nexport function calculateBrightness(imageData: ImageData): number {\r\n const { data } = imageData;\r\n let sum = 0;\r\n \r\n for (let i = 0; i < data.length; i += 4) {\r\n sum += (data[i] + data[i + 1] + data[i + 2]) / 3;\r\n }\r\n \r\n return sum / (data.length / 4);\r\n}\r\n\r\n/**\r\n * Full quality assessment.\r\n *\r\n * Threshold note: these cutoffs (sharpness<80, glare>15%, brightness\r\n * outside 50-200, contrast<30) are not calibrated against a specific input\r\n * resolution — Laplacian-variance sharpness in particular scales with image\r\n * size, so scoring a full-resolution capture vs. a downscaled copy can\r\n * shift the result. Caller (DocumentCapture._checkPhotoQuality) downscales\r\n * to a fixed 640px before calling this, so keep that pairing consistent —\r\n * if the downscale size changes, these thresholds should be re-checked\r\n * against real captures at the new size. This function is used as an\r\n * advisory-only nudge (never blocks submission), so a threshold that's\r\n * somewhat off costs an occasional wrong nudge, not a broken flow.\r\n */\r\nexport function assessQuality(imageData: ImageData): QualityFeedback {\r\n const sharpness = calculateSharpness(imageData);\r\n const glare = detectGlare(imageData);\r\n const contrast = calculateContrast(imageData);\r\n const brightness = calculateBrightness(imageData);\r\n \r\n const isBlurry = sharpness < 80;\r\n const hasGlare = glare > 0.15;\r\n const isTooDark = brightness < 50;\r\n const isTooBright = brightness > 200;\r\n const lowContrast = contrast < 30;\r\n \r\n // Calculate overall score (0-100)\r\n let score = 100;\r\n if (isBlurry) score -= 40;\r\n if (hasGlare) score -= 25;\r\n if (isTooDark) score -= 20;\r\n if (isTooBright) score -= 20;\r\n if (lowContrast) score -= 15;\r\n \r\n const metrics: QualityMetrics = {\r\n sharpness: Math.round(sharpness * 10) / 10,\r\n contrast: Math.round(contrast * 10) / 10,\r\n brightness: Math.round(brightness * 10) / 10,\r\n isBlurry,\r\n hasGlare,\r\n overallScore: Math.max(0, score),\r\n };\r\n \r\n // Generate feedback\r\n const issues: string[] = [];\r\n const recommendations: string[] = [];\r\n \r\n if (isBlurry) {\r\n issues.push(\"Too blurry\");\r\n recommendations.push(\"Hold camera steady\");\r\n recommendations.push(\"Ensure good lighting\");\r\n }\r\n \r\n if (hasGlare) {\r\n issues.push(\"Too much glare\");\r\n recommendations.push(\"Avoid direct light on document\");\r\n recommendations.push(\"Tilt document slightly\");\r\n }\r\n \r\n if (isTooDark) {\r\n issues.push(\"Too dark\");\r\n recommendations.push(\"Move to brighter area\");\r\n recommendations.push(\"Turn on more lights\");\r\n }\r\n \r\n if (isTooBright) {\r\n issues.push(\"Too bright\");\r\n recommendations.push(\"Reduce lighting\");\r\n recommendations.push(\"Move away from direct sun\");\r\n }\r\n \r\n if (lowContrast) {\r\n issues.push(\"Low contrast\");\r\n recommendations.push(\"Ensure even lighting\");\r\n }\r\n \r\n const isValid = score >= 60;\r\n const message = issues.length > 0 \r\n ? issues.join(\", \")\r\n : \"Good quality\";\r\n \r\n return {\r\n isValid,\r\n message,\r\n recommendations: recommendations.slice(0, 3), // Max 3 recommendations\r\n quality: metrics,\r\n };\r\n}\r\n\r\n/**\r\n * Get quality color for UI feedback\r\n */\r\nexport function getQualityColor(score: number): string {\r\n if (score >= 80) return \"#22c55e\"; // Green\r\n if (score >= 60) return \"#eab308\"; // Yellow\r\n return \"#ef4444\"; // Red\r\n}\r\n\r\n/**\r\n * Get quality message for display\r\n */\r\nexport function getQualityMessage(score: number): string {\r\n if (score >= 80) return \"Excellent - Ready to capture\";\r\n if (score >= 60) return \"Good - Can capture\";\r\n if (score >= 40) return \"Fair - Improve if possible\";\r\n return \"Poor - Please adjust\";\r\n}\r\n", "/**\n * Shared inline-SVG icon set — replaces raw emoji used as sized/positioned\n * UI chrome (badges, buttons, step icons). Emoji used as plain inline\n * decoration in body copy is intentionally left alone.\n *\n * Every icon is a single-color stroke glyph using currentColor, so it\n * recolors correctly wherever it's placed (theme.primary, theme.error, a\n * plain text color, etc.) via CSS `color`, with no per-call-site fill wiring.\n */\n\ntype IconName =\n | \"shield\"\n | \"id-card\"\n | \"document\"\n | \"check\"\n | \"close\"\n | \"camera\"\n | \"gallery\"\n | \"network\"\n | \"clock\"\n | \"search\"\n | \"calendar\"\n | \"face\"\n | \"warning\"\n | \"passport\"\n | \"car\"\n | \"ballot\"\n | \"refresh\"\n | \"rotate\";\n\nconst PATHS: Record<IconName, string> = {\n shield:\n '<path d=\"M12 2l8 3v6c0 5-3.5 8.5-8 11-4.5-2.5-8-6-8-11V5l8-3z\"/>',\n \"id-card\":\n '<rect x=\"2\" y=\"5\" width=\"20\" height=\"14\" rx=\"2\"/><circle cx=\"8\" cy=\"12\" r=\"2\"/><path d=\"M13 10h6M13 14h4\"/>',\n document:\n '<path d=\"M6 2h9l5 5v15H6z\"/><path d=\"M15 2v5h5\"/><path d=\"M9 13h6M9 17h6\"/>',\n check: '<path d=\"M4 12l6 6L20 6\"/>',\n close: '<path d=\"M5 5l14 14M19 5L5 19\"/>',\n camera:\n '<path d=\"M4 8h3l2-3h6l2 3h3v11H4z\"/><circle cx=\"12\" cy=\"13\" r=\"3.5\"/>',\n gallery:\n '<rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\"/><circle cx=\"8.5\" cy=\"9.5\" r=\"1.5\"/><path d=\"M21 15l-5-5-9 9\"/>',\n network:\n '<path d=\"M2 8.5a17 17 0 0120 0M5.5 12.5a12 12 0 0113 0M9 16.5a6 6 0 016 0\"/><circle cx=\"12\" cy=\"20\" r=\"1\"/>',\n clock: '<circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M12 7v5l3.5 2\"/>',\n search:\n '<circle cx=\"10.5\" cy=\"10.5\" r=\"6.5\"/><path d=\"M20 20l-4.8-4.8\"/>',\n calendar:\n '<rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\"/><path d=\"M3 10h18M8 3v4M16 3v4\"/>',\n face: '<circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M9 10h.01M15 10h.01M8.5 15c1 1.2 2.2 1.8 3.5 1.8s2.5-.6 3.5-1.8\"/>',\n warning:\n '<path d=\"M12 3l10 18H2z\"/><path d=\"M12 10v4\"/><circle cx=\"12\" cy=\"17\" r=\"0.5\" fill=\"currentColor\"/>',\n passport:\n '<rect x=\"5\" y=\"2\" width=\"14\" height=\"20\" rx=\"2\"/><circle cx=\"12\" cy=\"9\" r=\"2.5\"/><path d=\"M9 15h6\"/>',\n car: '<path d=\"M4 16V11l2-5h12l2 5v5\"/><path d=\"M4 16h16M7 16v2M17 16v2\"/><circle cx=\"7.5\" cy=\"14\" r=\"1\"/><circle cx=\"16.5\" cy=\"14\" r=\"1\"/>',\n ballot:\n '<rect x=\"4\" y=\"8\" width=\"16\" height=\"12\" rx=\"1\"/><path d=\"M9 8V5a3 3 0 016 0v3\"/><path d=\"M12 12v4\"/>',\n refresh:\n '<path d=\"M4 4v6h6\"/><path d=\"M20 20v-6h-6\"/><path d=\"M20 10a8 8 0 00-14.6-4.6M4 14a8 8 0 0014.6 4.6\"/>',\n rotate:\n '<rect x=\"7\" y=\"7\" width=\"12\" height=\"12\" rx=\"2\"/><path d=\"M7 4h5a4 4 0 014 4\"/><path d=\"M13 1.5L16 4l-3 2.5\"/>',\n};\n\n/** Returns an inline <svg> markup string for the given icon name. */\nexport function icon(name: IconName, size = 24): string {\n const d = PATHS[name];\n return `<svg width=\"${size}\" height=\"${size}\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">${d}</svg>`;\n}\n\nexport type { IconName };\n", "import { ThemeColors } from \"./theme\";\n\nlet injected = false;\n\nfunction injectSpinnerKeyframes(): void {\n if (injected || document.getElementById(\"sc-spinner-kf\")) { injected = true; return; }\n const style = document.createElement(\"style\");\n style.id = \"sc-spinner-kf\";\n style.textContent = `\n @keyframes sc-spin { to { transform: rotate(360deg); } }\n @keyframes sc-spinner-pulse {\n 0%, 100% { transform: scale(1); opacity: 1; }\n 50% { transform: scale(1.1); opacity: 0.8; }\n }\n `;\n document.head.appendChild(style);\n injected = true;\n}\n\n/**\n * Ring spinner shared by every loading state in the SDK — one keyframe\n * injection, one markup shape, instead of each screen hand-rolling its own.\n * Pass `icon` (inline-SVG markup from ./icons's icon()) to show it pulsing\n * at the ring's center, matching the \"spinner + subject icon\" pattern used\n * for e.g. document-processing states.\n */\nexport function renderSpinner(\n theme: ThemeColors,\n opts: { size?: number; icon?: string } = {}\n): HTMLDivElement {\n injectSpinnerKeyframes();\n const size = opts.size ?? 44;\n\n const wrap = document.createElement(\"div\");\n wrap.style.cssText = `position:relative;width:${size}px;height:${size}px;flex-shrink:0;`;\n\n const ring = document.createElement(\"div\");\n ring.style.cssText = `\n position:absolute;inset:0;border-radius:50%;\n border:${Math.max(2, Math.round(size / 20))}px solid ${theme.border};\n border-top-color:${theme.primary};\n animation:sc-spin 0.9s linear infinite;\n `;\n wrap.appendChild(ring);\n\n if (opts.icon) {\n const center = document.createElement(\"div\");\n center.style.cssText = `\n position:absolute;inset:0;display:flex;align-items:center;justify-content:center;\n color:${theme.primary};animation:sc-spinner-pulse 2s ease-in-out infinite;\n `;\n center.innerHTML = opts.icon;\n wrap.appendChild(center);\n }\n\n return wrap;\n}\n\n/** Small inline spinner sized for sitting next to button text. */\nexport function renderInlineSpinner(color = \"#fff\", size = 13): string {\n injectSpinnerKeyframes();\n return `<span style=\"display:inline-block;width:${size}px;height:${size}px;border-radius:50%;border:2px solid rgba(255,255,255,0.3);border-top-color:${color};animation:sc-spin 0.6s linear infinite;flex-shrink:0;\"></span>`;\n}\n", "import { ThemeColors, RADIUS, TYPE } from \"./theme\";\r\nimport { requiresBackSide, computeScaleRatio, BackSideMode } from \"../utils/documentRules\";\r\nimport { CameraManager, CameraAccessError } from \"../camera/CameraManager\";\r\nimport { isRetryableCameraError } from \"../camera/Permission\";\r\nimport { DOC_CAMERA_IDEAL_WIDTH, DOC_CAMERA_IDEAL_HEIGHT, MAX_DOCUMENT_BYTES } from \"../utils/constants\";\r\nimport { assessQuality } from \"../utils/ImageQuality\";\r\nimport { icon, IconName } from \"./icons\";\r\nimport { renderSpinner } from \"./spinner\";\r\n\r\n/**\r\n * Document capture UI — camera-based or file-upload for ID documents.\r\n *\r\n * Supports:\r\n * - Camera capture (rear camera preferred on mobile)\r\n * - File upload fallback\r\n * - Preview with retake/confirm\r\n * - Front and back document capture for documents requiring both sides\r\n */\r\nexport interface DocumentCaptureResult {\r\n front: Blob;\r\n back?: Blob; // Optional for documents that don't require back side\r\n // Whether the front image came from the live camera vs. a gallery/file\r\n // upload — callers use this to decide whether pre-warming the liveness\r\n // camera makes sense (reusing an already-open camera) or would surprise\r\n // a user who never touched their camera at all this session.\r\n viaCamera: boolean;\r\n}\r\n\r\nexport class DocumentCapture {\r\n private root: HTMLDivElement | null = null;\r\n private videoEl: HTMLVideoElement | null = null;\r\n private videoWrapEl: HTMLDivElement | null = null;\r\n private cameraManager: CameraManager = new CameraManager();\r\n private orientationHandler: (() => void) | null = null;\r\n private resolveCapture: ((result: DocumentCaptureResult) => void) | null = null;\r\n private rejectCapture: ((err: Error) => void) | null = null;\r\n private frontViaCamera = false;\r\n private frontBlob: Blob | null = null;\r\n private backBlob: Blob | null = null;\r\n private currentSide: 'front' | 'back' = 'front';\r\n private requiresBackOverride: BackSideMode | undefined = undefined;\r\n\r\n /**\r\n * Mount the document capture UI and return a promise that resolves\r\n * with the captured document image(s).\r\n */\r\n capture(\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n documentType: string,\r\n requiresBack?: BackSideMode\r\n ): Promise<DocumentCaptureResult> {\r\n return new Promise((resolve, reject) => {\r\n // Validate input parameters\r\n if (!container) {\r\n reject(new Error(\"Container element is required\"));\r\n return;\r\n }\r\n if (!theme) {\r\n reject(new Error(\"Theme configuration is required\"));\r\n return;\r\n }\r\n if (!documentType || typeof documentType !== 'string') {\r\n reject(new Error(\"Document type is required and must be a string\"));\r\n return;\r\n }\r\n \r\n // Check if already capturing\r\n if (this.resolveCapture || this.rejectCapture) {\r\n reject(new Error(\"Document capture is already in progress\"));\r\n return;\r\n }\r\n\r\n this.resolveCapture = resolve;\r\n this.rejectCapture = reject;\r\n this.frontBlob = null;\r\n this.backBlob = null;\r\n this.frontViaCamera = false;\r\n this.currentSide = 'front';\r\n this.requiresBackOverride = requiresBack;\r\n this.renderChoiceScreen(container, theme, documentType);\r\n });\r\n }\r\n\r\n destroy(): void {\r\n // Stop any ongoing camera streams\r\n this.stopCamera();\r\n \r\n // Clean up DOM elements\r\n if (this.root && this.root.parentElement) {\r\n this.root.parentElement.removeChild(this.root);\r\n }\r\n this.root = null;\r\n \r\n // Clean up any pending promises\r\n if (this.rejectCapture) {\r\n this.rejectCapture(new Error(\"Document capture was cancelled\"));\r\n this.rejectCapture = null;\r\n }\r\n this.resolveCapture = null;\r\n \r\n // Clean up blob data\r\n this.frontBlob = null;\r\n this.backBlob = null;\r\n this.currentSide = 'front';\r\n }\r\n\r\n private getBackSideMode(documentType: string): BackSideMode {\r\n // Prefer the backend-provided flag; fall back to the shared heuristic only when absent.\r\n return this.requiresBackOverride !== undefined\r\n ? this.requiresBackOverride\r\n : requiresBackSide(documentType);\r\n }\r\n\r\n /** Whether a back-side step should be shown at all (required OR optional). */\r\n private shouldCaptureBackSide(documentType: string): boolean {\r\n return this.getBackSideMode(documentType) !== false;\r\n }\r\n\r\n /** Whether the back-side step, once shown, can be skipped by the user. */\r\n private isBackSideOptional(documentType: string): boolean {\r\n return this.getBackSideMode(documentType) === \"optional\";\r\n }\r\n\r\n private renderChoiceScreen(\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n documentType: string\r\n ): void {\r\n this.root = document.createElement(\"div\");\r\n this.root.style.cssText = `\r\n display:flex;flex-direction:column;gap:0;padding:0;width:100%;\r\n font-family:system-ui,-apple-system,sans-serif;\r\n `;\r\n\r\n const docLabel = this.getDocumentLabel(documentType);\r\n const requiresBack = this.shouldCaptureBackSide(documentType);\r\n const backOptional = this.isBackSideOptional(documentType);\r\n const isCapturingFront = this.currentSide === 'front';\r\n const sideLabel = requiresBack\r\n ? (isCapturingFront ? ' — Front side' : ' — Back side')\r\n : '';\r\n\r\n // ── TOP: compact header row ─────────────────────────────────────\r\n const headerRow = document.createElement(\"div\");\r\n headerRow.style.cssText = `\r\n display:flex;align-items:center;gap:14px;\r\n padding:16px 20px 14px;\r\n `;\r\n\r\n const iconBox = document.createElement(\"div\");\r\n iconBox.style.cssText = `\r\n width:48px;height:48px;border-radius:14px;flex-shrink:0;\r\n display:flex;align-items:center;justify-content:center;\r\n color:${theme.primary};\r\n background:${theme.primary}15;\r\n border:1.5px solid ${theme.primary}30;\r\n `;\r\n iconBox.innerHTML = icon(this._docIcon(documentType), 22);\r\n\r\n const titleBlock = document.createElement(\"div\");\r\n const titleEl = document.createElement(\"div\");\r\n titleEl.style.cssText = `color:${theme.text};font-size:${TYPE.headingSm}px;font-weight:700;line-height:1.3;`;\r\n titleEl.textContent = `Capture your ${docLabel}`;\r\n\r\n const subEl = document.createElement(\"div\");\r\n subEl.style.cssText = `color:${theme.textSecondary};font-size:12px;margin-top:2px;`;\r\n subEl.textContent = requiresBack\r\n ? (isCapturingFront\r\n ? 'Step 1 of 2 — front side'\r\n : backOptional ? 'Step 2 of 2 — back side (optional)' : 'Step 2 of 2 — back side')\r\n : 'Choose how to provide your document';\r\n\r\n titleBlock.appendChild(titleEl);\r\n titleBlock.appendChild(subEl);\r\n headerRow.appendChild(iconBox);\r\n headerRow.appendChild(titleBlock);\r\n this.root.appendChild(headerRow);\r\n\r\n // ── MIDDLE: side-by-side action buttons ─────────────────────────\r\n const btnRow = document.createElement(\"div\");\r\n btnRow.style.cssText = `\r\n display:grid;grid-template-columns:1fr 1fr;gap:10px;\r\n padding:0 20px 14px;\r\n `;\r\n\r\n // Camera button\r\n const cameraBtn = document.createElement(\"button\");\r\n cameraBtn.style.cssText = `\r\n display:flex;flex-direction:column;align-items:center;justify-content:center;\r\n gap:8px;padding:16px 12px;\r\n background:${theme.primary};color:#fff;\r\n border:none;border-radius:14px;cursor:pointer;\r\n font-size:13px;font-weight:600;font-family:inherit;\r\n transition:all 0.15s ease;min-height:80px;\r\n box-shadow:0 4px 14px ${theme.primary}30;\r\n `;\r\n cameraBtn.innerHTML = `<span style=\"display:inline-flex;\">${icon(\"camera\", 24)}</span><span>Take Photo</span><span style=\"font-size:10px;opacity:0.8;font-weight:500;\">Use camera</span>`;\r\n cameraBtn.addEventListener(\"mouseenter\", () => { cameraBtn.style.opacity = \"0.9\"; cameraBtn.style.transform = \"translateY(-1px)\"; });\r\n cameraBtn.addEventListener(\"mouseleave\", () => { cameraBtn.style.opacity = \"1\"; cameraBtn.style.transform = \"none\"; });\r\n cameraBtn.addEventListener(\"click\", () => {\r\n this.root!.innerHTML = \"\";\r\n this.renderCameraView(this.root!, theme, documentType);\r\n });\r\n\r\n // Upload button\r\n const uploadBtn = document.createElement(\"button\");\r\n uploadBtn.style.cssText = `\r\n display:flex;flex-direction:column;align-items:center;justify-content:center;\r\n gap:8px;padding:16px 12px;\r\n background:${theme.cardBg || theme.inputBg};color:${theme.text};\r\n border:2px solid ${theme.border};border-radius:14px;cursor:pointer;\r\n font-size:13px;font-weight:600;font-family:inherit;\r\n transition:all 0.15s ease;min-height:80px;\r\n `;\r\n uploadBtn.innerHTML = `<span style=\"display:inline-flex;\">${icon(\"gallery\", 24)}</span><span>From Gallery</span><span style=\"font-size:10px;color:${theme.textMuted || theme.textSecondary};font-weight:500;\">Upload file</span>`;\r\n uploadBtn.addEventListener(\"mouseenter\", () => { uploadBtn.style.borderColor = theme.primary; uploadBtn.style.transform = \"translateY(-1px)\"; });\r\n uploadBtn.addEventListener(\"mouseleave\", () => { uploadBtn.style.borderColor = theme.border; uploadBtn.style.transform = \"none\"; });\r\n uploadBtn.addEventListener(\"click\", () => { this.handleFileUpload(container, theme); });\r\n\r\n btnRow.appendChild(cameraBtn);\r\n btnRow.appendChild(uploadBtn);\r\n this.root.appendChild(btnRow);\r\n\r\n // ── BOTTOM: compact tips (no scroll) ────────────────────────────\r\n const tips = document.createElement(\"div\");\r\n tips.style.cssText = `\r\n margin:0 20px 16px;padding:12px 14px;\r\n background:${theme.shimmer || theme.cardBg};\r\n border:1px solid ${theme.border};border-radius:${RADIUS.md}px;\r\n `;\r\n\r\n const tipsGrid = document.createElement(\"div\");\r\n tipsGrid.style.cssText = `\r\n display:grid;grid-template-columns:1fr 1fr;gap:6px 12px;\r\n `;\r\n const tipItems = [\r\n \"Lay document flat\",\r\n \"All 4 corners visible\",\r\n \"Good lighting, no glare\",\r\n \"All text clearly readable\",\r\n ];\r\n tipItems.forEach((t) => {\r\n const row = document.createElement(\"div\");\r\n row.style.cssText = `display:flex;align-items:center;gap:5px;font-size:11px;color:${theme.textSecondary};`;\r\n row.innerHTML = `<span style=\"color:${theme.primary};flex-shrink:0;display:inline-flex;\">${icon(\"check\", 12)}</span><span>${t}</span>`;\r\n tipsGrid.appendChild(row);\r\n });\r\n tips.appendChild(tipsGrid);\r\n this.root.appendChild(tips);\r\n\r\n // ── Back-side notice (shown only when requiresBack) ──────────────\r\n if (requiresBack && isCapturingFront) {\r\n const notice = document.createElement(\"div\");\r\n notice.style.cssText = `\r\n margin:0 20px 16px;padding:10px 14px;\r\n background:${theme.primary}0D;\r\n border:1px solid ${theme.primary}25;border-radius:10px;\r\n display:flex;align-items:center;gap:8px;\r\n font-size:12px;color:${theme.textSecondary};line-height:1.5;\r\n `;\r\n // NIN specifically: spell out slip-vs-card rather than the generic\r\n // \"if your document has one\" — the NIN slip (paper printout) has no\r\n // usable back, while the NIN card (plastic card) does, and users\r\n // often don't know which one they're holding is called what.\r\n const isNin = documentType.toLowerCase().includes(\"nin\");\r\n notice.innerHTML = backOptional\r\n ? isNin\r\n ? `<span style=\"font-size:16px;flex-shrink:0;\">ℹ️</span><span>After the <strong style=\"color:${theme.text}\">front</strong>: if you have the <strong style=\"color:${theme.text}\">NIN card</strong> (plastic card), add the back too. If you have the <strong style=\"color:${theme.text}\">NIN slip</strong> (paper printout), there's usually nothing to capture on the back — just skip it.</span>`\r\n : `<span style=\"font-size:16px;flex-shrink:0;\">ℹ️</span><span>After the <strong style=\"color:${theme.text}\">front</strong>, you can optionally add the <strong style=\"color:${theme.text}\">back</strong> if your document has one.</span>`\r\n : `<span style=\"font-size:16px;flex-shrink:0;\">ℹ️</span><span>You'll capture both the <strong style=\"color:${theme.text}\">front</strong> and <strong style=\"color:${theme.text}\">back</strong> of this document.</span>`;\r\n this.root.appendChild(notice);\r\n }\r\n\r\n // ── Skip button (back side only, and only when optional) ─────────\r\n if (requiresBack && !isCapturingFront && backOptional) {\r\n const skipBtn = document.createElement(\"button\");\r\n skipBtn.style.cssText = `\r\n display:block;margin:0 20px 16px;width:calc(100% - 40px);\r\n padding:10px 12px;background:transparent;color:${theme.textSecondary};\r\n border:1.5px dashed ${theme.border};border-radius:10px;cursor:pointer;\r\n font-size:12.5px;font-weight:600;font-family:inherit;\r\n `;\r\n skipBtn.textContent = \"Skip — my document has no back side\";\r\n skipBtn.addEventListener(\"click\", () => {\r\n this.handleCaptureComplete(null, container, theme, documentType, false, true);\r\n });\r\n this.root.appendChild(skipBtn);\r\n }\r\n\r\n // Hidden file input\r\n const fileInput = document.createElement(\"input\");\r\n fileInput.type = \"file\";\r\n fileInput.accept = \"image/jpeg,image/png\";\r\n fileInput.style.display = \"none\";\r\n fileInput.id = \"sc-doc-file-input\";\r\n fileInput.addEventListener(\"change\", (e) => {\r\n const file = (e.target as HTMLInputElement).files?.[0];\r\n if (file) {\r\n const err = this.validateFile(file);\r\n if (err) { this.showError(err); return; }\r\n // Sent as-is unless it's over the upload limit — no re-encoding a\r\n // file that already fits, so no avoidable quality loss.\r\n this.ensureUnderUploadLimit(file)\r\n .then((c) => this.handleFileUploadComplete(c, container, theme, documentType));\r\n }\r\n });\r\n this.root.appendChild(fileInput);\r\n\r\n container.appendChild(this.root);\r\n }\r\n\r\n /** Returns the icon name matching the document type. */\r\n private _docIcon(documentType: string): IconName {\r\n const t = documentType.toLowerCase();\r\n if (t.includes(\"passport\")) return \"passport\";\r\n if (t.includes(\"driver\") || t.includes(\"licen\")) return \"car\";\r\n if (t.includes(\"voter\") || t.includes(\"pvc\")) return \"ballot\";\r\n return \"id-card\";\r\n }\r\n\r\n private renderCameraView(\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n documentType: string\r\n ): void {\r\n // Dark cinematic chrome + corner-bracket guide — matches the liveness\r\n // scan screen's visual language (LivenessUI.ts) instead of the plain\r\n // rectangle outline this used to be, so the two camera experiences in\r\n // the flow read as one product.\r\n const wrapper = document.createElement(\"div\");\r\n wrapper.style.cssText = `\r\n position:relative;width:100%;max-width:420px;margin:0 auto;\r\n background:#0a0a0a;border-radius:${RADIUS.lg}px;overflow:hidden;\r\n box-shadow:0 8px 32px rgba(0,0,0,0.4);\r\n `;\r\n this.videoWrapEl = wrapper;\r\n\r\n this.videoEl = document.createElement(\"video\");\r\n this.videoEl.autoplay = true;\r\n this.videoEl.playsInline = true;\r\n this.videoEl.muted = true;\r\n // Starts at 4:3 (typical document-shaped default); _fitToStream() below\r\n // corrects this to the stream's real aspect ratio once metadata loads,\r\n // instead of force-cropping every device's native ratio into one fixed box.\r\n this.videoEl.style.cssText = \"width:100%;display:block;aspect-ratio:4/3;object-fit:cover;\";\r\n wrapper.appendChild(this.videoEl);\r\n\r\n const vignette = document.createElement(\"div\");\r\n vignette.style.cssText = `\r\n position:absolute;inset:0;pointer-events:none;\r\n box-shadow:inset 0 0 0 9999px rgba(0,0,0,0.38);\r\n -webkit-mask:radial-gradient(ellipse 46% 34% at 50% 50%, transparent 60%, #000 100%);\r\n mask:radial-gradient(ellipse 46% 34% at 50% 50%, transparent 60%, #000 100%);\r\n `;\r\n wrapper.appendChild(vignette);\r\n\r\n // Corner-bracket guide — same bracket-path language as LivenessUI's oval\r\n // guide, adapted to a rectangle since documents (unlike faces) aren't oval.\r\n const guideWrap = document.createElement(\"div\");\r\n guideWrap.style.cssText = `\r\n position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);\r\n width:84%;aspect-ratio:16/10;pointer-events:none;\r\n `;\r\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\r\n svg.setAttribute(\"viewBox\", \"0 0 160 100\");\r\n svg.style.cssText = \"width:100%;height:100%;overflow:visible;\";\r\n const bracketGroup = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\r\n bracketGroup.setAttribute(\"stroke\", theme.primary);\r\n bracketGroup.setAttribute(\"stroke-width\", \"3\");\r\n bracketGroup.setAttribute(\"stroke-linecap\", \"round\");\r\n bracketGroup.setAttribute(\"fill\", \"none\");\r\n const bLen = 16;\r\n const bx0 = 4, bx1 = 156, by0 = 4, by1 = 96;\r\n const brackets = [\r\n `M${bx0},${by0 + bLen} L${bx0},${by0} L${bx0 + bLen},${by0}`,\r\n `M${bx1 - bLen},${by0} L${bx1},${by0} L${bx1},${by0 + bLen}`,\r\n `M${bx0},${by1 - bLen} L${bx0},${by1} L${bx0 + bLen},${by1}`,\r\n `M${bx1 - bLen},${by1} L${bx1},${by1} L${bx1},${by1 - bLen}`,\r\n ];\r\n for (const d of brackets) {\r\n const path = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n path.setAttribute(\"d\", d);\r\n bracketGroup.appendChild(path);\r\n }\r\n svg.appendChild(bracketGroup);\r\n guideWrap.appendChild(svg);\r\n wrapper.appendChild(guideWrap);\r\n\r\n // Header — gradient scrim + document label\r\n const header = document.createElement(\"div\");\r\n header.style.cssText = `\r\n position:absolute;top:0;left:0;right:0;\r\n background:linear-gradient(180deg,rgba(0,0,0,0.8) 0%,transparent 100%);\r\n padding:14px 16px 32px;text-align:center;\r\n `;\r\n header.innerHTML = `<div style=\"color:#fff;font-size:${TYPE.sm}px;font-weight:600;\">Align your ${this.getDocumentLabel(documentType)} within the frame</div>`;\r\n wrapper.appendChild(header);\r\n\r\n // Footer — gradient scrim + tips\r\n const footer = document.createElement(\"div\");\r\n footer.style.cssText = `\r\n position:absolute;bottom:0;left:0;right:0;\r\n background:linear-gradient(0deg,rgba(0,0,0,0.7) 0%,transparent 100%);\r\n padding:28px 10px 18px;text-align:center;\r\n `;\r\n footer.innerHTML = `<div style=\"font-size:${TYPE.xs}px;color:rgba(255,255,255,0.55);\">Good lighting · No glare · All 4 corners visible</div>`;\r\n wrapper.appendChild(footer);\r\n\r\n container.appendChild(wrapper);\r\n\r\n // Capture button\r\n const captureBtn = document.createElement(\"button\");\r\n captureBtn.setAttribute(\"aria-label\", \"Capture photo\");\r\n captureBtn.style.cssText = `\r\n display:block;margin:16px auto 0;width:64px;height:64px;\r\n border-radius:50%;border:4px solid ${theme.primary};\r\n background:transparent;cursor:pointer;position:relative;\r\n transition:all 0.2s ease;\r\n `;\r\n const inner = document.createElement(\"div\");\r\n inner.style.cssText = `\r\n width:48px;height:48px;border-radius:50%;background:${theme.primary};\r\n position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);\r\n transition:all 0.15s ease;\r\n `;\r\n captureBtn.appendChild(inner);\r\n captureBtn.addEventListener(\"mousedown\", () => {\r\n inner.style.transform = \"translate(-50%,-50%) scale(0.9)\";\r\n });\r\n captureBtn.addEventListener(\"mouseup\", () => {\r\n inner.style.transform = \"translate(-50%,-50%) scale(1)\";\r\n });\r\n captureBtn.addEventListener(\"click\", () => {\r\n this.captureFrame(container, theme, documentType);\r\n });\r\n container.appendChild(captureBtn);\r\n\r\n // Open camera\r\n this.openCamera();\r\n }\r\n\r\n /**\r\n * Matches the video box's aspect-ratio CSS to the stream's actual\r\n * negotiated dimensions instead of a single hardcoded ratio — a stream\r\n * that's natively 16:9 no longer gets force-cropped into a 4:3 box.\r\n * Clamped to a sane document-shaped range so a degenerate/unusual stream\r\n * can't produce a sliver-thin or absurdly tall box.\r\n */\r\n private _fitToStream(): void {\r\n if (!this.videoEl) return;\r\n const { videoWidth: w, videoHeight: h } = this.videoEl;\r\n if (!w || !h) return;\r\n const ratio = Math.min(Math.max(w / h, 1), 2); // clamp to [1:1, 2:1]\r\n this.videoEl.style.aspectRatio = `${ratio}`;\r\n }\r\n\r\n /**\r\n * Re-fits the video box when the device rotates mid-capture. Does not\r\n * re-request getUserMedia (disruptive/slow) — the stream's dimensions\r\n * don't change on rotation, only the viewport does, so re-reading the\r\n * already-known videoWidth/videoHeight is enough to keep the box sane.\r\n */\r\n private _watchOrientation(): void {\r\n this._unwatchOrientation();\r\n this.orientationHandler = () => this._fitToStream();\r\n window.addEventListener(\"orientationchange\", this.orientationHandler);\r\n window.addEventListener(\"resize\", this.orientationHandler);\r\n }\r\n\r\n private _unwatchOrientation(): void {\r\n if (this.orientationHandler) {\r\n window.removeEventListener(\"orientationchange\", this.orientationHandler);\r\n window.removeEventListener(\"resize\", this.orientationHandler);\r\n this.orientationHandler = null;\r\n }\r\n }\r\n\r\n private async openCamera(): Promise<void> {\r\n // Check browser compatibility\r\n if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {\r\n this.rejectCapture?.(new Error(\"Camera access is not supported in this browser. Please use a modern browser like Chrome, Firefox, or Safari.\"));\r\n return;\r\n }\r\n\r\n const maxRetries = 3;\r\n\r\n // Retries only transient/negotiable failures (busy camera, unsupported\r\n // constraints, anything unrecognized) — a hard permission denial or \"no\r\n // camera exists\" can never be fixed by retrying, so those short-circuit\r\n // to an immediate error instead of burning ~6s of backoff first.\r\n const attemptCameraAccess = async (\r\n constraints: MediaStreamConstraints,\r\n retryCount = 0\r\n ): Promise<MediaStream> => {\r\n try {\r\n return await this.cameraManager.open(constraints);\r\n } catch (err: any) {\r\n console.warn(`Camera access attempt ${retryCount + 1} failed:`, err);\r\n\r\n const status = err instanceof CameraAccessError ? err.status : \"unknown\";\r\n if (isRetryableCameraError(status) && retryCount < maxRetries - 1) {\r\n await new Promise((resolve) => setTimeout(resolve, 1000 * (retryCount + 1))); // Exponential backoff\r\n return attemptCameraAccess(constraints, retryCount + 1);\r\n }\r\n throw err;\r\n }\r\n };\r\n\r\n let stream: MediaStream;\r\n try {\r\n // Try rear camera first\r\n stream = await attemptCameraAccess({\r\n video: {\r\n facingMode: { ideal: \"environment\" },\r\n width: { ideal: DOC_CAMERA_IDEAL_WIDTH },\r\n height: { ideal: DOC_CAMERA_IDEAL_HEIGHT },\r\n },\r\n });\r\n } catch (err: any) {\r\n console.warn(\"Rear camera failed, trying any camera:\", err);\r\n\r\n // Fallback to any camera\r\n try {\r\n stream = await attemptCameraAccess({\r\n video: { width: { ideal: DOC_CAMERA_IDEAL_WIDTH } },\r\n });\r\n } catch (fallbackErr: any) {\r\n this.rejectCapture?.(new Error(fallbackErr?.message || \"Camera access failed. Please check your camera permissions and try again.\"));\r\n return;\r\n }\r\n }\r\n\r\n // A capture that's already resolved (photo taken, camera intentionally\r\n // stopped) must not surface a stale interruption from the old stream.\r\n this.cameraManager.onStreamInterrupted(() => {\r\n if (this.resolveCapture || this.rejectCapture) {\r\n this.rejectCapture?.(new Error(\"Camera connection was lost. Please check your camera and try again.\"));\r\n }\r\n });\r\n\r\n if (this.videoEl) {\r\n this.videoEl.srcObject = stream;\r\n this.videoEl.addEventListener(\"loadedmetadata\", () => this._fitToStream(), { once: true });\r\n this._watchOrientation();\r\n }\r\n }\r\n\r\n private captureFrame(container: HTMLElement, theme: ThemeColors, documentType: string): void {\r\n if (!this.videoEl) return;\r\n\r\n // Draw at the video's native resolution — the downstream compressImage()\r\n // call (see proceedWithPhoto) is the single place resolution gets capped\r\n // (via computeScaleRatio, which never upscales). Resizing here too used\r\n // to cap captures at 1280x960 before compressImage ever ran, silently\r\n // undermining its higher resolution/quality target.\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = this.videoEl.videoWidth;\r\n canvas.height = this.videoEl.videoHeight;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n\r\n ctx.drawImage(this.videoEl, 0, 0, canvas.width, canvas.height);\r\n\r\n canvas.toBlob(\r\n (blob) => {\r\n if (blob) {\r\n this.stopCamera();\r\n this.showPreview(container, theme, blob, documentType, true);\r\n }\r\n },\r\n \"image/jpeg\",\r\n 0.92\r\n );\r\n }\r\n\r\n private showPreview(\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n imageData: Blob | File,\r\n documentType: string,\r\n viaCamera: boolean\r\n ): void {\r\n if (this.root) this.root.innerHTML = \"\";\r\n else {\r\n this.root = document.createElement(\"div\");\r\n container.appendChild(this.root);\r\n }\r\n\r\n this.root.style.cssText = \"display:flex;flex-direction:column;align-items:center;gap:16px;\";\r\n\r\n // Step badge — same pill treatment as SmartComplyFlow's document-confirm\r\n // screen (Step 2: check what we read), so this doesn't read as\r\n // unexplained repetition of that later screen — they check different\r\n // things (photo clarity here, OCR-extracted data there).\r\n const stepBadge = document.createElement(\"div\");\r\n stepBadge.style.cssText = `\r\n display:inline-flex;align-items:center;gap:5px;\r\n padding:3px 11px;border-radius:${RADIUS.pill}px;\r\n font-size:10.5px;font-weight:600;letter-spacing:0.2px;\r\n color:${theme.primary};background:${theme.primary}15;border:1px solid ${theme.primary}30;\r\n `;\r\n stepBadge.textContent = \"STEP 1 OF 2 · CHECK THE PHOTO\";\r\n this.root.appendChild(stepBadge);\r\n\r\n // Preview image, wrapped so the rotate control can sit as a small\r\n // overlay button anchored to the photo itself — makes it visually\r\n // obvious it acts ON this image, instead of floating unexplained\r\n // between the copy and the quality notice.\r\n const imgWrap = document.createElement(\"div\");\r\n imgWrap.style.cssText = \"position:relative;width:100%;\";\r\n\r\n const img = document.createElement(\"img\");\r\n let currentUrl = URL.createObjectURL(imageData);\r\n img.src = currentUrl;\r\n img.style.cssText = `\r\n display:block;width:100%;max-height:300px;object-fit:contain;\r\n border-radius:${RADIUS.md}px;border:2px solid ${theme.border};\r\n background:${theme.inputBg};\r\n `;\r\n imgWrap.appendChild(img);\r\n\r\n // The blob actually sent on \"Use Photo\" — reassigned in place each time\r\n // rotate is tapped, so retake/use always act on the current orientation.\r\n let currentBlob: Blob = imageData;\r\n let isRotating = false;\r\n\r\n // Rotate control — fixes a document photographed/uploaded sideways or\r\n // upside-down. EXIF auto-rotation (compressImage) only handles phone\r\n // photos with correct orientation metadata; a genuinely sideways\r\n // capture (or a scan/crop with no EXIF) needs the user to say so.\r\n // Sits as a circular overlay button in the photo's corner (same pattern\r\n // as Google Photos/Drive) so its purpose — \"turn this image\" — reads\r\n // immediately from placement alone, with a text label for anyone who\r\n // still wants it spelled out.\r\n const rotateBtn = document.createElement(\"button\");\r\n rotateBtn.type = \"button\";\r\n rotateBtn.setAttribute(\"aria-label\", \"Photo sideways or upside-down? Rotate it 90 degrees\");\r\n rotateBtn.title = \"Rotate 90°\";\r\n rotateBtn.style.cssText = `\r\n position:absolute;bottom:10px;right:10px;\r\n display:flex;align-items:center;justify-content:center;gap:6px;\r\n padding:8px 14px;background:${theme.isDark ? \"rgba(20,20,20,0.72)\" : \"rgba(255,255,255,0.92)\"};\r\n backdrop-filter:blur(6px);color:${theme.text};border:1px solid ${theme.border};\r\n border-radius:${RADIUS.pill}px;cursor:pointer;\r\n box-shadow:0 2px 10px rgba(0,0,0,${theme.isDark ? \"0.4\" : \"0.15\"});\r\n font-size:12.5px;font-weight:600;font-family:inherit;line-height:1;\r\n transition:transform 0.15s ease,opacity 0.15s ease;\r\n `;\r\n rotateBtn.innerHTML = `<span style=\"display:inline-flex;\">${icon(\"rotate\", 15)}</span><span>Rotate</span>`;\r\n rotateBtn.addEventListener(\"mouseenter\", () => { rotateBtn.style.transform = \"translateY(-1px)\"; });\r\n rotateBtn.addEventListener(\"mouseleave\", () => { rotateBtn.style.transform = \"translateY(0)\"; });\r\n rotateBtn.addEventListener(\"click\", async () => {\r\n if (isRotating) return;\r\n isRotating = true;\r\n rotateBtn.style.opacity = \"0.5\";\r\n rotateBtn.disabled = true;\r\n try {\r\n const rotated = await this._rotateImage(currentBlob, 90);\r\n currentBlob = rotated;\r\n URL.revokeObjectURL(currentUrl);\r\n currentUrl = URL.createObjectURL(rotated);\r\n img.src = currentUrl;\r\n this._checkPhotoQuality(currentBlob, qualityNotice, theme);\r\n } catch {\r\n // Leave the current photo untouched — rotation is a convenience,\r\n // not something worth hard-failing the whole capture over.\r\n } finally {\r\n isRotating = false;\r\n rotateBtn.style.opacity = \"1\";\r\n rotateBtn.disabled = false;\r\n }\r\n });\r\n imgWrap.appendChild(rotateBtn);\r\n this.root.appendChild(imgWrap);\r\n\r\n const label = document.createElement(\"div\");\r\n label.style.cssText = `color:${theme.text};font-size:${TYPE.base}px;font-weight:700;text-align:center;`;\r\n label.textContent = \"Does the photo look clear?\";\r\n this.root.appendChild(label);\r\n\r\n const sublabel = document.createElement(\"div\");\r\n sublabel.style.cssText = `color:${theme.textMuted};font-size:${TYPE.xs}px;text-align:center;line-height:1.6;`;\r\n sublabel.textContent = \"All text must be readable and all four corners must be visible. Sideways or upside-down? Use Rotate on the photo above.\";\r\n this.root.appendChild(sublabel);\r\n\r\n // Advisory-only quality nudge — catches an obviously blurry/dark/glare-\r\n // heavy photo right here instead of only finding out several seconds\r\n // later. Never blocks \"Use Photo\": this is a heuristic, not a hard\r\n // rule, so a photo that's actually fine but scores oddly must still be\r\n // usable — it just nudges the user toward retaking with a plain-\r\n // language reason instead of silently letting a bad photo through.\r\n const qualityNotice = document.createElement(\"div\");\r\n qualityNotice.style.cssText = `\r\n display:none;width:100%;padding:10px 14px;border-radius:${RADIUS.md}px;\r\n background:${theme.warning}15;border:1px solid ${theme.warning}35;\r\n color:${theme.text};font-size:12px;text-align:left;line-height:1.5;\r\n `;\r\n qualityNotice.setAttribute(\"role\", \"status\");\r\n this.root.appendChild(qualityNotice);\r\n this._checkPhotoQuality(currentBlob, qualityNotice, theme);\r\n\r\n // Buttons\r\n const btnRow = document.createElement(\"div\");\r\n btnRow.style.cssText = \"display:flex;gap:12px;width:100%;\";\r\n\r\n const retakeBtn = this.createButton(\"Retake\", theme, false);\r\n retakeBtn.style.flex = \"1\";\r\n retakeBtn.addEventListener(\"click\", () => {\r\n URL.revokeObjectURL(currentUrl);\r\n this.root!.innerHTML = \"\";\r\n this.renderChoiceScreen(container, theme, documentType);\r\n });\r\n\r\n const useBtn = this.createButton(\"Use Photo ✓\", theme, true);\r\n useBtn.style.flex = \"1\";\r\n useBtn.addEventListener(\"click\", () => {\r\n URL.revokeObjectURL(currentUrl);\r\n useBtn.textContent = \"Confirming photo…\";\r\n useBtn.disabled = true;\r\n rotateBtn.disabled = true;\r\n // Sent as-is unless it's over the upload limit — no re-encoding a\r\n // photo that already fits, so no avoidable quality loss.\r\n this.ensureUnderUploadLimit(currentBlob)\r\n .then((c) => this.handleCaptureComplete(c, container, theme, documentType, viaCamera));\r\n });\r\n\r\n btnRow.appendChild(retakeBtn);\r\n btnRow.appendChild(useBtn);\r\n this.root.appendChild(btnRow);\r\n }\r\n\r\n /**\r\n * Runs the shared client-side quality heuristic (blur/glare/contrast/\r\n * brightness — see utils/ImageQuality.ts) against the just-captured photo\r\n * and, if it scores poorly, shows a plain-language nudge on the preview\r\n * screen. Fails silently on decode error — this is an advisory extra, not\r\n * a required step, so a browser that can't run it must not block capture.\r\n */\r\n private async _checkPhotoQuality(\r\n imageData: Blob | File,\r\n noticeEl: HTMLElement,\r\n theme: ThemeColors\r\n ): Promise<void> {\r\n try {\r\n // Document photos are captured at up to DOC_CAMERA_IDEAL_WIDTH/HEIGHT\r\n // (2000x1500) — scoring every pixel across four full-image passes in\r\n // assessQuality() would be genuinely slow on the low/mid-range phones\r\n // most likely to produce a poor-quality photo in the first place.\r\n // Downscale a scoring-only copy; the actual captured photo sent for\r\n // upload is completely unaffected by this.\r\n const canvas = await this._blobToCanvas(imageData, 640);\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) return;\r\n const pixels = ctx.getImageData(0, 0, canvas.width, canvas.height);\r\n const result = assessQuality(pixels);\r\n if (noticeEl.isConnected && !result.isValid) {\r\n noticeEl.style.display = \"block\";\r\n noticeEl.textContent =\r\n \"This photo might be hard to read — \" +\r\n (result.recommendations[0] || \"try retaking it in good lighting\") + \".\";\r\n }\r\n } catch {\r\n // Advisory only — no notice shown if scoring fails for any reason.\r\n }\r\n }\r\n\r\n /** Decodes to a canvas, optionally downscaled to maxDim on the long edge (never upscales). */\r\n private _blobToCanvas(source: Blob | File, maxDim?: number): Promise<HTMLCanvasElement> {\r\n return new Promise((resolve, reject) => {\r\n const url = URL.createObjectURL(source);\r\n const imgEl = document.createElement(\"img\");\r\n imgEl.onload = () => {\r\n URL.revokeObjectURL(url);\r\n const { naturalWidth: w, naturalHeight: h } = imgEl;\r\n const ratio = maxDim ? computeScaleRatio(w, h, maxDim, maxDim) : 1;\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = Math.round(w * ratio);\r\n canvas.height = Math.round(h * ratio);\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) { reject(new Error(\"Canvas unavailable\")); return; }\r\n ctx.drawImage(imgEl, 0, 0, canvas.width, canvas.height);\r\n resolve(canvas);\r\n };\r\n imgEl.onerror = () => { URL.revokeObjectURL(url); reject(new Error(\"Image load failed\")); };\r\n imgEl.src = url;\r\n });\r\n }\r\n\r\n /**\r\n * Rotate an image blob by a multiple of 90° and re-encode it — used by the\r\n * preview screen's rotate control for a document photographed or uploaded\r\n * sideways/upside-down. EXIF auto-rotation (see compressImage) only fixes\r\n * phone photos that embed correct orientation metadata; it can't help a\r\n * document whose actual pixel content is sideways (e.g. the phone itself\r\n * was held rotated relative to the document, or a pre-cropped/scanned\r\n * upload with no EXIF at all) — that needs the user to say so directly.\r\n */\r\n private _rotateImage(source: Blob, degrees: 90 | 180 | 270): Promise<Blob> {\r\n return new Promise((resolve, reject) => {\r\n const url = URL.createObjectURL(source);\r\n const imgEl = document.createElement(\"img\");\r\n imgEl.onload = () => {\r\n URL.revokeObjectURL(url);\r\n const { naturalWidth: w, naturalHeight: h } = imgEl;\r\n const swapped = degrees === 90 || degrees === 270;\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = swapped ? h : w;\r\n canvas.height = swapped ? w : h;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) { reject(new Error(\"Canvas unavailable\")); return; }\r\n ctx.translate(canvas.width / 2, canvas.height / 2);\r\n ctx.rotate((degrees * Math.PI) / 180);\r\n ctx.drawImage(imgEl, -w / 2, -h / 2);\r\n canvas.toBlob(\r\n (blob) => { blob ? resolve(blob) : reject(new Error(\"Rotation failed\")); },\r\n \"image/jpeg\",\r\n 0.95\r\n );\r\n };\r\n imgEl.onerror = () => { URL.revokeObjectURL(url); reject(new Error(\"Image load failed\")); };\r\n imgEl.src = url;\r\n });\r\n }\r\n\r\n private handleCaptureComplete(\r\n imageData: Blob | null,\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n documentType: string,\r\n viaCamera: boolean,\r\n skipped: boolean = false\r\n ): void {\r\n const requiresBack = this.shouldCaptureBackSide(documentType);\r\n const wasCapturingFront = this.currentSide === 'front';\r\n\r\n // Store the captured image (skip leaves backBlob unset — front-only submit)\r\n if (wasCapturingFront) {\r\n this.frontBlob = imageData;\r\n this.frontViaCamera = viaCamera;\r\n } else if (!skipped) {\r\n this.backBlob = imageData;\r\n }\r\n\r\n // If we need back side and haven't captured it yet, move to back side\r\n if (requiresBack && wasCapturingFront) {\r\n this.currentSide = 'back';\r\n this.root!.innerHTML = \"\";\r\n this.renderChoiceScreen(container, theme, documentType);\r\n return;\r\n }\r\n\r\n // All captures complete, resolve with result\r\n if (!this.frontBlob) {\r\n this.rejectCapture?.(new Error(\"No front image captured. Please try again.\"));\r\n return;\r\n }\r\n\r\n const result: DocumentCaptureResult = {\r\n front: this.frontBlob,\r\n back: this.backBlob || undefined,\r\n viaCamera: this.frontViaCamera,\r\n };\r\n this.resolveCapture?.(result);\r\n }\r\n\r\n private handleFileUploadComplete(\r\n imageData: Blob,\r\n container: HTMLElement,\r\n theme: ThemeColors,\r\n documentType: string\r\n ): void {\r\n this.showPreview(container, theme, imageData, documentType, false);\r\n }\r\n\r\n private validateFile(file: File): string | null {\r\n // Check file type\r\n const allowedTypes = ['image/jpeg', 'image/jpg', 'image/png'];\r\n if (!allowedTypes.includes(file.type)) {\r\n return \"Invalid file type. Please upload a JPEG or PNG image.\";\r\n }\r\n\r\n // Anything under this is sent completely untouched (see proceedWithPhoto /\r\n // the file-input handler) — this is the real backend upload ceiling, not\r\n // a quality target, so it must match MAX_DOCUMENT_BYTES exactly.\r\n if (file.size > MAX_DOCUMENT_BYTES) {\r\n return `File is too large. Please upload an image smaller than ${Math.round(MAX_DOCUMENT_BYTES / (1024 * 1024))}MB.`;\r\n }\r\n\r\n // Check minimum file size (at least 1KB to avoid empty files)\r\n if (file.size < 1024) {\r\n return \"File is too small. Please upload a valid image file.\";\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Only shrinks/re-encodes when the file exceeds the backend's real upload\r\n * ceiling — otherwise returns the original bytes completely untouched.\r\n * Document photos become the face-comparison reference image later\r\n * (see backend _crop_and_save_face), so any avoidable re-encode is a\r\n * quality loss with no upside; compression here exists solely to keep\r\n * oversized captures under MAX_DOCUMENT_BYTES, not to \"optimize\" images\r\n * that already fit.\r\n */\r\n private async ensureUnderUploadLimit(source: Blob | File): Promise<Blob> {\r\n if (source.size <= MAX_DOCUMENT_BYTES) return source;\r\n try {\r\n return await this.compressImage(source, DOC_CAMERA_IDEAL_WIDTH, DOC_CAMERA_IDEAL_HEIGHT, 0.92);\r\n } catch {\r\n return source; // fall back to the original rather than block the user\r\n }\r\n }\r\n\r\n private handleFileUpload(container: HTMLElement, theme: ThemeColors): void {\r\n const input = this.root?.querySelector(\"#sc-doc-file-input\") as HTMLInputElement;\r\n if (input) input.click();\r\n }\r\n\r\n private stopCamera(): void {\r\n this._unwatchOrientation();\r\n this.cameraManager.stop();\r\n if (this.videoEl) {\r\n this.videoEl.srcObject = null;\r\n this.videoEl = null;\r\n }\r\n this.videoWrapEl = null;\r\n }\r\n\r\n private showLoadingState(message: string, theme: ThemeColors): void {\r\n if (!this.root) return;\r\n\r\n this.root.innerHTML = \"\";\r\n this.root.style.cssText = \"display:flex;flex-direction:column;align-items:center;justify-content:center;gap:20px;padding:40px 20px;min-height:300px;\";\r\n this.root.setAttribute(\"aria-live\", \"polite\");\r\n this.root.setAttribute(\"role\", \"status\");\r\n\r\n this.root.appendChild(renderSpinner(theme, { size: 80, icon: icon(\"document\", 28) }));\r\n\r\n const loadingText = document.createElement(\"div\");\r\n loadingText.style.cssText = `color:${theme.text};font-size:${TYPE.heading}px;font-weight:600;text-align:center;`;\r\n loadingText.textContent = message;\r\n this.root.appendChild(loadingText);\r\n }\r\n\r\n private showError(message: string): void {\r\n if (!this.root) return;\r\n\r\n const errorContainer = document.createElement(\"div\");\r\n errorContainer.setAttribute(\"role\", \"alert\");\r\n errorContainer.style.cssText = `\r\n display:flex;align-items:center;gap:12px;padding:16px;\r\n background:#ff444415;border:1px solid #ff444430;border-radius:${RADIUS.md}px;\r\n color:#ff4444;font-size:14px;margin-top:16px;animation:shake 0.5s ease-in-out;\r\n `;\r\n const errIcon = document.createElement(\"span\");\r\n errIcon.style.fontSize = \"18px\";\r\n errIcon.textContent = \"⚠️\";\r\n const errText = document.createElement(\"span\");\r\n errText.textContent = message;\r\n errorContainer.appendChild(errIcon);\r\n errorContainer.appendChild(errText);\r\n\r\n // Add shake animation\r\n if (!document.head.querySelector('style[data-shake-animation]')) {\r\n const style = document.createElement('style');\r\n style.setAttribute('data-shake-animation', 'true');\r\n style.textContent = `\r\n @keyframes shake {\r\n 0%, 100% { transform: translateX(0); }\r\n 25% { transform: translateX(-5px); }\r\n 75% { transform: translateX(5px); }\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n \r\n this.root.appendChild(errorContainer);\r\n setTimeout(() => errorContainer.remove(), 5000);\r\n }\r\n\r\n private createButton(\r\n label: string,\r\n theme: ThemeColors,\r\n isPrimary: boolean\r\n ): HTMLButtonElement {\r\n const btn = document.createElement(\"button\");\r\n btn.textContent = label;\r\n btn.style.cssText = `\r\n padding:16px 24px;border-radius:${RADIUS.md}px;font-size:16px;font-weight:600;\r\n cursor:pointer;transition:all 0.2s ease;border:none;width:100%;\r\n min-height:52px;touch-action:manipulation;-webkit-tap-highlight-color:transparent;\r\n ${\r\n isPrimary\r\n ? `background:${theme.primary};color:#fff;box-shadow:0 4px 12px ${theme.primary}30;`\r\n : `background:${theme.inputBg};color:${theme.text};border:2px solid ${theme.border};`\r\n }\r\n `;\r\n btn.addEventListener(\"mouseenter\", () => {\r\n btn.style.transform = \"translateY(-1px)\";\r\n if (isPrimary) btn.style.background = theme.primaryHover;\r\n });\r\n btn.addEventListener(\"mouseleave\", () => {\r\n btn.style.transform = \"translateY(0)\";\r\n if (isPrimary) btn.style.background = theme.primary;\r\n });\r\n return btn;\r\n }\r\n\r\n private compressImage(\r\n source: Blob | File,\r\n maxWidth: number,\r\n maxHeight: number,\r\n quality: number\r\n ): Promise<Blob> {\r\n return new Promise((resolve, reject) => {\r\n // Read EXIF orientation FIRST so we can correct rotation before canvas draw.\r\n // Canvas ignores EXIF metadata — without this, phone uploads arrive rotated.\r\n this._readExifOrientation(source).then((orientation) => {\r\n const url = URL.createObjectURL(source);\r\n const imgEl = document.createElement(\"img\");\r\n imgEl.onload = () => {\r\n URL.revokeObjectURL(url);\r\n let { naturalWidth: w, naturalHeight: h } = imgEl;\r\n\r\n // For orientations 5-8 the image is rotated 90°/270° — swap dimensions\r\n const swapped = orientation >= 5 && orientation <= 8;\r\n const srcW = swapped ? h : w;\r\n const srcH = swapped ? w : h;\r\n const ratio = computeScaleRatio(srcW, srcH, maxWidth, maxHeight);\r\n const outW = Math.round(srcW * ratio);\r\n const outH = Math.round(srcH * ratio);\r\n\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = outW;\r\n canvas.height = outH;\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) { reject(new Error(\"Canvas unavailable\")); return; }\r\n\r\n // Apply EXIF rotation transform before drawing\r\n ctx.save();\r\n if (orientation === 2) { ctx.transform(-1, 0, 0, 1, outW, 0); }\r\n else if (orientation === 3) { ctx.transform(-1, 0, 0, -1, outW, outH); }\r\n else if (orientation === 4) { ctx.transform( 1, 0, 0, -1, 0, outH); }\r\n else if (orientation === 5) { ctx.transform( 0, 1, 1, 0, 0, 0); }\r\n else if (orientation === 6) { ctx.transform( 0, 1, -1, 0, outH, 0); }\r\n else if (orientation === 7) { ctx.transform( 0, -1, -1, 0, outH, outW); }\r\n else if (orientation === 8) { ctx.transform( 0, -1, 1, 0, 0, outW); }\r\n ctx.drawImage(imgEl, 0, 0, swapped ? outH : outW, swapped ? outW : outH);\r\n ctx.restore();\r\n\r\n canvas.toBlob(\r\n (blob) => { blob ? resolve(blob) : reject(new Error(\"Compression failed\")); },\r\n \"image/jpeg\",\r\n quality\r\n );\r\n };\r\n imgEl.onerror = () => { URL.revokeObjectURL(url); reject(new Error(\"Image load failed\")); };\r\n imgEl.src = url;\r\n }).catch(() => {\r\n // If EXIF read fails, fall back to simple compression without rotation\r\n const url = URL.createObjectURL(source);\r\n const imgEl = document.createElement(\"img\");\r\n imgEl.onload = () => {\r\n URL.revokeObjectURL(url);\r\n let { naturalWidth: w, naturalHeight: h } = imgEl;\r\n const ratio = computeScaleRatio(w, h, maxWidth, maxHeight);\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = Math.round(w * ratio);\r\n canvas.height = Math.round(h * ratio);\r\n const ctx = canvas.getContext(\"2d\");\r\n if (!ctx) { reject(new Error(\"Canvas unavailable\")); return; }\r\n ctx.drawImage(imgEl, 0, 0, canvas.width, canvas.height);\r\n canvas.toBlob(\r\n (blob) => { blob ? resolve(blob) : reject(new Error(\"Compression failed\")); },\r\n \"image/jpeg\",\r\n quality\r\n );\r\n };\r\n imgEl.onerror = () => { URL.revokeObjectURL(url); reject(new Error(\"Image load failed\")); };\r\n imgEl.src = url;\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Read JPEG EXIF orientation tag (1–8) from a Blob/File.\r\n * Returns 1 (no rotation) if EXIF is absent or unreadable.\r\n */\r\n private _readExifOrientation(source: Blob | File): Promise<number> {\r\n return new Promise((resolve) => {\r\n const reader = new FileReader();\r\n reader.onload = (e) => {\r\n try {\r\n const buf = e.target?.result as ArrayBuffer;\r\n const view = new DataView(buf);\r\n if (view.getUint16(0, false) !== 0xFFD8) { resolve(1); return; } // not JPEG\r\n let offset = 2;\r\n while (offset < view.byteLength) {\r\n const marker = view.getUint16(offset, false);\r\n offset += 2;\r\n if (marker === 0xFFE1) { // APP1 — may contain EXIF\r\n if (view.getUint32(offset + 2, false) !== 0x45786966) { resolve(1); return; }\r\n const little = view.getUint16(offset + 8, false) === 0x4949;\r\n const ifdOff = offset + 8 + view.getUint32(offset + 12, little);\r\n const tags = view.getUint16(ifdOff, little);\r\n for (let i = 0; i < tags; i++) {\r\n if (view.getUint16(ifdOff + 2 + 12 * i, little) === 0x0112) {\r\n resolve(view.getUint16(ifdOff + 2 + 12 * i + 8, little));\r\n return;\r\n }\r\n }\r\n resolve(1); return;\r\n } else if ((marker & 0xFF00) !== 0xFF00) {\r\n break;\r\n } else {\r\n offset += view.getUint16(offset, false);\r\n }\r\n }\r\n resolve(1);\r\n } catch { resolve(1); }\r\n };\r\n reader.onerror = () => resolve(1);\r\n // Only need the first 64KB — EXIF is always in the first APP1 segment\r\n reader.readAsArrayBuffer(source.slice(0, 65536));\r\n });\r\n }\r\n\r\n private getDocumentLabel(type: string): string {\r\n const t = type.toLowerCase();\r\n if (t.includes(\"passport\")) return \"passport\";\r\n if (t.includes(\"driver\") || t.includes(\"licen\")) return \"driver's license\";\r\n if (t.includes(\"voter\") || t.includes(\"pvc\")) return \"voter's card\";\r\n // NIN covers both the NIN slip and the physical NIN card — \"document\"\r\n // rather than \"card\" so slip users don't get told to align a \"card\"\r\n // they don't have.\r\n if (t.includes(\"nin\")) return \"NIN document\";\r\n if (t.includes(\"national\")) return \"national ID card\";\r\n if (t.includes(\"bvn\")) return \"BVN document\";\r\n return \"identity document\";\r\n }\r\n}\r\n", "\uFEFFimport { SmartComply } from \"../client/Smartcomply\";\r\nimport { SDKInitConfig, SDKChannel, VerifyIdentityResponse } from \"../types/onboarding\";\r\nimport { LivenessSubmitResponse, ChallengeAction } from \"../types/liveness\";\r\nimport { ThemeColors, getTheme, TYPE, RADIUS } from \"./theme\";\r\nimport { DocumentCapture, DocumentCaptureResult } from \"./DocumentCapture\";\r\nimport { Environment } from \"../client/Config\";\r\nimport { collectDeviceMetadata } from \"../utils/device\";\r\nimport { requiresBackSide, BackSideMode } from \"../utils/documentRules\";\r\nimport { DEFAULT_CHALLENGE_ACTIONS } from \"../utils/constants\";\r\nimport { icon, IconName } from \"./icons\";\r\nimport { renderSpinner, renderInlineSpinner } from \"./spinner\";\r\n\r\n// A dropped camera/network/upload error is not the user's fault and must not\r\n// cost them a retry attempt — only a genuine verification outcome should.\r\n// Classified by message rather than a typed error class since the errors\r\n// originate from several independent layers (CameraManager, VideoRecorder,\r\n// LivenessUploader) that don't share a common error type today.\r\nconst _INFRASTRUCTURE_ERROR_PATTERNS = [\r\n \"camera connection was lost\",\r\n \"network error\",\r\n \"failed after all retries\",\r\n \"camera access is not supported\",\r\n \"camera access failed\",\r\n \"recording failed unexpectedly\",\r\n // FaceDetectorEngine.init() failures (FaceDetector.ts) — a slow/blocked\r\n // CDN or model download is a connectivity issue, not a failed face scan,\r\n // and must not burn one of the user's limited liveness retry attempts.\r\n \"face detection setup timed out\",\r\n \"failed to download face model\",\r\n];\r\n\r\nfunction _isInfrastructureError(err: any): boolean {\r\n const msg = String(err?.message || \"\").toLowerCase();\r\n return _INFRASTRUCTURE_ERROR_PATTERNS.some((p) => msg.includes(p));\r\n}\r\n\r\n// Keep this plain-language and reassuring for infrastructure hiccups — the\r\n// user did nothing wrong, so the copy should say so rather than sound like\r\n// a rejection.\r\nfunction _userFacingLivenessError(err: any): string {\r\n if (_isInfrastructureError(err)) {\r\n return \"We lost connection during your scan — this wasn't anything you did. Please check your camera and internet connection, then try again.\";\r\n }\r\n return err?.message || \"We couldn't verify your face. Please try again.\";\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────\r\n// Public Types\r\n// ─────────────────────────────────────────────────────────────────────\r\n\r\nexport interface FlowOptions {\r\n apiKey: string;\r\n clientId: string;\r\n environment?: Environment;\r\n timeout?: number;\r\n onComplete?: (result: FlowResult) => void;\r\n onError?: (error: Error) => void;\r\n onClose?: () => void;\r\n}\r\n\r\nexport interface FlowResult {\r\n entryId: number;\r\n sessionId: string | null;\r\n status: string;\r\n submittedAt: string | null;\r\n verificationResult?: VerifyIdentityResponse;\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────\r\n// Step definitions\r\n// ─────────────────────────────────────────────────────────────────────\r\n\r\ntype StepName =\r\n | \"loading\"\r\n | \"welcome\"\r\n | \"country\"\r\n | \"id_type\"\r\n | \"id_input\"\r\n | \"confirm_identity\"\r\n | \"document_capture\"\r\n | \"document_confirm\"\r\n | \"ocr_gate\"\r\n | \"liveness\"\r\n | \"done\"\r\n | \"error\";\r\n\r\nconst STEP_ORDER: StepName[] = [\r\n \"loading\",\r\n \"welcome\",\r\n \"country\",\r\n \"id_type\",\r\n \"id_input\",\r\n \"confirm_identity\",\r\n \"document_capture\",\r\n \"ocr_gate\",\r\n \"document_confirm\",\r\n \"liveness\",\r\n \"done\",\r\n];\r\n\r\nconst COUNTRY_LABELS: Record<string, string> = {\r\n nigeria: \"🇳🇬 Nigeria\",\r\n global: \"🌍 Other Countries\",\r\n ghana: \"🇬🇭 Ghana\",\r\n kenya: \"🇰🇪 Kenya\",\r\n south_africa: \"🇿🇦 South Africa\",\r\n united_states: \"🇺🇸 United States\",\r\n united_kingdom: \"🇬🇧 United Kingdom\",\r\n};\r\n\r\n// Backend/admin data tags document-capture fields inconsistently — the field\r\n// renderer (below) already treats \"image\" and \"file\" as file inputs alongside\r\n// \"upload\", so flow-routing decisions must recognize the same set or a channel\r\n// tagged \"image\"/\"file\" silently falls back to the number-entry screen.\r\nfunction isUploadFieldType(type: unknown): boolean {\r\n return type === \"upload\" || type === \"image\" || type === \"file\";\r\n}\r\n\r\nfunction resolveIdTypeInfo(\r\n typeName: string,\r\n isDocumentFlow: boolean\r\n): { icon: string; desc: string; requiresBack?: BackSideMode } {\r\n const u = typeName.toUpperCase();\r\n const advanced = u.includes(\"ADVANCED\");\r\n\r\n // Strip UI noise from display labels — users don't need \"with face\" or \"(NIN)\" suffixes\r\n const cleanName = typeName\r\n .replace(/\\s*with\\s+face\\s*/gi, ' ')\r\n .replace(/\\s*\\(NIN\\)\\s*/gi, ' ')\r\n .replace(/\\s*\\(BVN\\)\\s*/gi, ' ')\r\n .replace(/\\s{2,}/g, ' ')\r\n .trim();\r\n\r\n // BVN — always 11 digits\r\n if (u.includes(\"BVN\") || u.includes(\"BANK VERIFICATION\")) {\r\n return { icon: \"🏦\", desc: \"Enter your 11-digit Bank Verification Number (BVN)\", requiresBack: false };\r\n }\r\n\r\n // NIN — always 11 digits (covers nin_with_face, NIN slip, etc.). Not every\r\n // NIN document in circulation has a back side — a NIN slip typically\r\n // doesn't, while a NIN card does — so the back photo is offered for\r\n // either, but optional rather than required: add it if your document\r\n // has one, skip it if it doesn't. The plain data-verification flow (just\r\n // typing the 11-digit number, no document) never captures a photo at\r\n // all, so requiresBack stays false there.\r\n if (u.includes(\"NIN\") || u.includes(\"NATIONAL IDENTITY NUMBER\")) {\r\n return {\r\n icon: \"🆔\",\r\n desc: isDocumentFlow\r\n ? \"Capture or upload your NIN (slip or card) — add the back if your document has one\"\r\n : \"Enter your 11-digit National Identification Number (NIN)\",\r\n requiresBack: isDocumentFlow ? \"optional\" : false,\r\n };\r\n }\r\n\r\n // Ghana Card / Ghana National ID\r\n if (u.includes(\"GHANA\")) {\r\n if (isDocumentFlow) return { icon: \"🪪\", desc: \"Capture or upload your Ghana Card\", requiresBack: requiresBackSide(typeName) };\r\n return { icon: \"🪪\", desc: \"Enter your Ghana Card number\", requiresBack: false };\r\n }\r\n\r\n // SSNIT (Ghana social security)\r\n if (u.includes(\"SSNIT\"))\r\n return { icon: \"🏛️\", desc: \"Enter your SSNIT number\", requiresBack: false };\r\n\r\n // Kenya National ID\r\n if (u.includes(\"KENYA\") || (u.includes(\"NATIONAL\") && u.includes(\"KENYA\")))\r\n return { icon: \"🆔\", desc: \"Enter your Kenya National ID number\", requiresBack: false };\r\n\r\n // TIN\r\n if (u.includes(\"TIN\") || u.includes(\"TAX IDENTIFICATION\"))\r\n return { icon: \"🧾\", desc: \"Enter your Tax Identification Number (TIN)\", requiresBack: false };\r\n\r\n // CAC / Company registration\r\n if (u.includes(\"CAC\") || u.includes(\"CORPORATE AFFAIRS\") || u.includes(\"COMPANY\"))\r\n return { icon: \"🏢\", desc: advanced ? \"Enter RC number, company name & type\" : \"Enter your company registration number\", requiresBack: false };\r\n\r\n // Voter / PVC\r\n if (u.includes(\"VOTER\") || u.includes(\"PVC\")) {\r\n const requiresBack = requiresBackSide(typeName);\r\n return { \r\n icon: \"🗳️\", \r\n desc: isDocumentFlow \r\n ? `Capture or upload your voter's card${requiresBack ? \" (front & back)\" : \"\"}` \r\n : \"Enter your voter ID number\",\r\n requiresBack: isDocumentFlow ? requiresBack : false\r\n };\r\n }\r\n\r\n // Passport\r\n if (u.includes(\"PASSPORT\"))\r\n return { icon: \"📘\", desc: isDocumentFlow ? \"Capture or upload your passport\" : \"Enter your passport number\", requiresBack: false };\r\n\r\n // Driver's license\r\n if (u.includes(\"DRIVER\") || u.includes(\"LICENSE\") || u.includes(\"LICENCE\")) {\r\n const requiresBack = requiresBackSide(typeName);\r\n return { \r\n icon: \"🚗\", \r\n desc: isDocumentFlow \r\n ? `Capture or upload your driver's license${requiresBack ? \" (front & back)\" : \"\"}` \r\n : \"Enter your driver's license number\",\r\n requiresBack: isDocumentFlow ? requiresBack : false\r\n };\r\n }\r\n\r\n // National ID card (generic)\r\n if (u.includes(\"NATIONAL ID\") || (u.includes(\"NATIONAL\") && u.includes(\"CARD\"))) {\r\n const requiresBack = requiresBackSide(typeName);\r\n return { \r\n icon: \"🪪\", \r\n desc: isDocumentFlow \r\n ? `Capture or upload your ID card${requiresBack ? \" (front & back)\" : \"\"}` \r\n : \"Enter your National ID number\",\r\n requiresBack: isDocumentFlow ? requiresBack : false\r\n };\r\n }\r\n\r\n // Face liveness / comparison\r\n if (u.includes(\"LIVENESS\") || u.includes(\"FACE COMPARISON\") || u.includes(\"FACE MATCH\"))\r\n return { icon: \"🤳\", desc: \"We'll capture a short selfie video to verify you\", requiresBack: false };\r\n\r\n return {\r\n icon: isDocumentFlow ? \"📄\" : \"🆔\",\r\n desc: isDocumentFlow ? \"Capture or upload your document\" : \"Enter your ID number\",\r\n requiresBack: false,\r\n };\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────\r\n// ── Widget-side message sanitizer ─────────────────────────────────────────────\r\n// Strips anything technical before showing text to the end user.\r\n// Keeps messages that are already written plainly in natural language.\r\nfunction _sanitizeUserMessage(raw: string | null | undefined): string | null {\r\n if (!raw) return null;\r\n const lower = raw.toLowerCase();\r\n\r\n // Block anything that looks internal / technical\r\n const blocklist = [\r\n \"smartcomply\", \"face comparison service\", \"session id\", \"session_id\",\r\n \"provider\", \"ocr\", \"textract\", \"rekognition\", \"deepface\",\r\n \"ivs\", \"celery\", \"exception\", \"traceback\", \"str(e)\",\r\n \"error:\", \"django\", \"python\", \"http \",\r\n \"comparison mode\", \"liveness mode\", \"callback\",\r\n \"face_comparison\", \"face_match\", \"confidence_percentage\",\r\n \"threshold_percentage\", \"polling_fallback\", \"resolved_by\",\r\n // Billing/wallet messages are an operator problem (fund the account,\r\n // configure billing) — never the end user's to act on.\r\n \"wallet\", \"fund your wallet\", \"billing is not configured\",\r\n \"insufficient balance\", \"insufficient fund\",\r\n ];\r\n for (const blocked of blocklist) {\r\n if (lower.includes(blocked)) return null;\r\n }\r\n\r\n // Block a bare exception-style \"Failed:<detail>\" (no space after the colon,\r\n // e.g. \"AuthenticationFailed:invalid_token\") but NOT the backend's\r\n // deliberate natural-language shape \"{Identity Type} check failed: {reason}\"\r\n // (e.g. \"Bank Verification Number Advanced check failed: name does not\r\n // match\") — that phrasing is written for end users and is exactly what\r\n // should surface, not get discarded.\r\n if (/failed:\\S/i.test(raw)) return null;\r\n\r\n // Block snake_case (internal field names accidentally leaking through)\r\n if (/[a-z]+_[a-z]+/.test(raw) && !/\\s/.test(raw.trim())) return null;\r\n\r\n // Block anything starting with a lowercase letter (likely a code/key)\r\n if (raw.trim()[0] === raw.trim()[0].toLowerCase() && /^[a-z]/.test(raw.trim())) return null;\r\n\r\n return raw.trim();\r\n}\r\n\r\n// ── B8: OCR date string normaliser ───────────────────────────────────────────\r\n// OCR providers return dates in wildly different formats. new Date(str) is\r\n// locale-dependent for anything other than ISO 8601 (YYYY-MM-DD), so we\r\n// attempt a set of known patterns before falling back to the native parser.\r\nfunction _parseOcrDate(raw: string): Date | null {\r\n if (!raw) return null;\r\n const s = raw.trim();\r\n\r\n // ISO 8601 or near-ISO — try first, always unambiguous\r\n if (/^\\d{4}-\\d{2}-\\d{2}/.test(s)) return new Date(s.slice(0, 10));\r\n\r\n // DD/MM/YYYY or DD-MM-YYYY\r\n const dmy = s.match(/^(\\d{2})[\\/\\-](\\d{2})[\\/\\-](\\d{4})/);\r\n if (dmy) return new Date(`${dmy[3]}-${dmy[2]}-${dmy[1]}`);\r\n\r\n // MM/DD/YYYY (US format — less common from OCR but possible)\r\n const mdy = s.match(/^(\\d{2})\\/(\\d{2})\\/(\\d{4})/);\r\n if (mdy) {\r\n // Heuristic: if \"month\" > 12 it must be day-first\r\n if (parseInt(mdy[1], 10) > 12) return new Date(`${mdy[3]}-${mdy[2]}-${mdy[1]}`);\r\n return new Date(`${mdy[3]}-${mdy[1]}-${mdy[2]}`);\r\n }\r\n\r\n // DD Mon YYYY e.g. \"12 May 2029\" or \"12 MAY 2029\"\r\n const dMonY = s.match(/^(\\d{1,2})\\s+([A-Za-z]{3,})\\s+(\\d{4})/);\r\n if (dMonY) return new Date(`${dMonY[2]} ${dMonY[1]} ${dMonY[3]}`);\r\n\r\n // Last resort: native parser\r\n const d = new Date(s);\r\n return isNaN(d.getTime()) ? null : d;\r\n}\r\n\r\n// ── W12: Image compression before document upload ────────────────────────────\r\nasync function _compressImage(blob: Blob, maxWidth = 1600, quality = 0.85): Promise<Blob> {\r\n try {\r\n const bmp = await createImageBitmap(blob);\r\n const scale = Math.min(1, maxWidth / bmp.width);\r\n const w = Math.round(bmp.width * scale);\r\n const h = Math.round(bmp.height * scale);\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = w; canvas.height = h;\r\n canvas.getContext(\"2d\")!.drawImage(bmp, 0, 0, w, h);\r\n bmp.close();\r\n return await new Promise<Blob>((res, rej) =>\r\n canvas.toBlob(b => b ? res(b) : rej(new Error(\"Compression failed\")), \"image/jpeg\", quality)\r\n );\r\n } catch {\r\n return blob; // fallback to original on any error\r\n }\r\n}\r\n\r\n// ── Document type code → human label ─────────────────────────────────────────\r\nfunction _formatDocType(code: string): string {\r\n const map: Record<string, string> = {\r\n passport: \"Passport\",\r\n national_id: \"National ID\",\r\n nin_slip: \"NIN Slip\",\r\n nin_with_face: \"National Identity Number\",\r\n drivers_license: \"Driver's Licence\",\r\n voters_card: \"Voter's Card\",\r\n kenya_id: \"Kenya National ID\",\r\n ghana_id: \"Ghana Card\",\r\n };\r\n if (!code) return \"\";\r\n const key = code.toLowerCase().replace(/[\\s-]/g, \"_\");\r\n if (map[key]) return map[key];\r\n // Fallback: title-case the code\r\n return code.replace(/_/g, \" \").replace(/\\b\\w/g, (c) => c.toUpperCase());\r\n}\r\n\r\n// SmartComplyFlow\r\n// ─────────────────────────────────────────────────────────────────────\r\n\r\nexport class SmartComplyFlow {\r\n private sdk: SmartComply;\r\n private options: FlowOptions;\r\n private theme: ThemeColors = getTheme(\"default\");\r\n\r\n // DOM\r\n private overlay: HTMLDivElement | null = null;\r\n private modal: HTMLDivElement | null = null;\r\n private contentArea: HTMLDivElement | null = null;\r\n private progressBar: HTMLDivElement | null = null;\r\n private stepLabel: HTMLDivElement | null = null;\r\n private stageDots: HTMLDivElement | null = null;\r\n private brandLabel: HTMLDivElement | null = null;\r\n private brandLogoImg: HTMLImageElement | null = null;\r\n\r\n // State\r\n private sdkConfig: SDKInitConfig | null = null;\r\n private currentStep: StepName = \"loading\";\r\n private selectedCountry: string = \"\";\r\n private selectedChannelId: number = 0;\r\n private selectedChannelFields: { type: string; label: string; options?: string[] }[] = [];\r\n private selectedIdType: string = \"\"; // Canonical code (e.g., \"national_id\", \"nin_with_face\")\r\n private selectedIdTypeName: string = \"\"; // Display name (e.g., \"National Identity Number with Face (NIN)\")\r\n private selectedRequiresBack: BackSideMode | undefined = undefined; // Backend-provided back-side flag\r\n private collectedFields: Record<string, string> = {};\r\n private idNumber: string = \"\";\r\n private documentBlob: Blob | null = null;\r\n private documentBackBlob: Blob | null = null;\r\n // Whether the document's front image came from the live camera vs. a\r\n // gallery/file upload — gates whether pre-warming the liveness camera on\r\n // the confirm screens makes sense (reusing an already-open camera) or\r\n // would surprise a user who hasn't touched their camera yet this session.\r\n private _documentViaCamera = false;\r\n private identityCheckId: number | null = null;\r\n private verificationResult: VerifyIdentityResponse | null = null;\r\n private livenessEntryId: number | null = null;\r\n private isDestroyed = false;\r\n private headerBackBtn: HTMLButtonElement | null = null;\r\n private _keydownHandler: ((e: KeyboardEvent) => void) | null = null;\r\n private _visibilityHandler: (() => void) | null = null;\r\n private _hiddenAtMs: number | null = null;\r\n // Set just before a re-background restart re-renders the liveness step\r\n // (see the visibilitychange handler below), read once by renderLiveness\r\n // to show a \"your scan was interrupted\" notice instead of silently\r\n // swapping back into a fresh scan with no explanation.\r\n private _restartedAfterBackground = false;\r\n private _popstateHandler: (() => void) | null = null;\r\n private _historyGuardActive = false;\r\n\r\n // Retry safety — max 3 confirmation rejections or liveness failures per session\r\n private _confirmRetries = 0;\r\n private _livenessFailures = 0;\r\n private _livenessAttemptId = 0;\r\n private static readonly MAX_RETRIES = 3;\r\n\r\n // IVS result stored for confirm_identity screen\r\n private _ivsName: string = \"\";\r\n private _ivsGender: string = \"\";\r\n\r\n // OCR result stored for document_confirm screen\r\n private _ocrName: string = \"\";\r\n private _ocrDocNumber: string = \"\";\r\n private _ocrExpiry: string = \"\";\r\n private _ocrFaceImageUrl: string = \"\";\r\n private _ocrIsExpired: boolean = false;\r\n private _ocrExpirySoon: boolean = false;\r\n\r\n // Camera pre-warm stream (created during confirmation screen, used in liveness)\r\n private _prewarmedStream: MediaStream | null = null;\r\n\r\n // OCR gate poll timer — stored so it can be cancelled on navigation or close\r\n private _ocrPollTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n // UI timeout from _startStatusPolling — stored so close() can cancel it\r\n private _uiTimeoutId: ReturnType<typeof setTimeout> | null = null;\r\n\r\n // Session expiry\r\n private sessionExpiryTimer: ReturnType<typeof setTimeout> | null = null;\r\n private sessionExpiredTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n // Status polling (result screen)\r\n private _pollStatusTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n // Components\r\n private docCapture: DocumentCapture | null = null;\r\n\r\n private constructor(options: FlowOptions) {\r\n this.options = options;\r\n this.sdk = new SmartComply({\r\n apiKey: options.apiKey,\r\n clientId: options.clientId,\r\n environment: options.environment || \"sandbox\",\r\n timeout: options.timeout,\r\n });\r\n }\r\n\r\n /**\r\n * Open the SmartComply verification flow.\r\n *\r\n * Usage:\r\n * SmartComplyFlow.open({\r\n * apiKey: \"pk_live_...\",\r\n * clientId: \"uuid-...\",\r\n * environment: \"production\",\r\n * onComplete: (result) => console.log(\"Done!\", result),\r\n * onError: (err) => console.error(err),\r\n * onClose: () => console.log(\"Closed\"),\r\n * });\r\n */\r\n static open(options: FlowOptions): SmartComplyFlow {\r\n const flow = new SmartComplyFlow(options);\r\n flow.mount();\r\n flow.initialize();\r\n return flow;\r\n }\r\n\r\n /**\r\n * Close and destroy the flow widget.\r\n */\r\n close(): void {\r\n this.isDestroyed = true;\r\n if (this._keydownHandler) {\r\n document.removeEventListener(\"keydown\", this._keydownHandler);\r\n this._keydownHandler = null;\r\n }\r\n if (this._visibilityHandler) {\r\n document.removeEventListener(\"visibilitychange\", this._visibilityHandler);\r\n this._visibilityHandler = null;\r\n }\r\n if (this._popstateHandler) {\r\n window.removeEventListener(\"popstate\", this._popstateHandler);\r\n this._popstateHandler = null;\r\n }\r\n // Closing via the ✕/Escape/completion (not via the back gesture, which\r\n // handles its own guard entry above) still leaves our one guard entry\r\n // sitting on top of the host's history — back out of it so the user\r\n // isn't left pressing back once \"into\" a widget that's already gone.\r\n if (this._historyGuardActive) {\r\n this._historyGuardActive = false;\r\n try {\r\n if (history.state?.scFlowGuard) history.back();\r\n } catch { /* ignore — best effort only */ }\r\n }\r\n this.docCapture?.destroy();\r\n // Release any pre-warmed camera stream\r\n if (this._prewarmedStream) {\r\n this._prewarmedStream.getTracks().forEach(t => t.stop());\r\n this._prewarmedStream = null;\r\n }\r\n if (this.sessionExpiryTimer) {\r\n clearTimeout(this.sessionExpiryTimer);\r\n this.sessionExpiryTimer = null;\r\n }\r\n if (this.sessionExpiredTimer) {\r\n clearTimeout(this.sessionExpiredTimer);\r\n this.sessionExpiredTimer = null;\r\n }\r\n if (this._pollStatusTimer) {\r\n clearTimeout(this._pollStatusTimer);\r\n this._pollStatusTimer = null;\r\n }\r\n // B6: cancel OCR gate poll timer\r\n if (this._ocrPollTimer) {\r\n clearTimeout(this._ocrPollTimer);\r\n this._ocrPollTimer = null;\r\n }\r\n // P4: cancel result-screen UI timeout\r\n if (this._uiTimeoutId) {\r\n clearTimeout(this._uiTimeoutId);\r\n this._uiTimeoutId = null;\r\n }\r\n\r\n if (this.overlay) {\r\n this.overlay.style.opacity = \"0\";\r\n setTimeout(() => {\r\n try {\r\n this.overlay?.remove();\r\n } catch (_) { /* extension interference — safe to ignore */ }\r\n this.overlay = null;\r\n this.modal = null;\r\n this.contentArea = null;\r\n }, 300);\r\n }\r\n\r\n this.options.onClose?.();\r\n }\r\n\r\n // ─────────────────────────────────────────────────────────────────\r\n // Initialization\r\n // ─────────────────────────────────────────────────────────────────\r\n\r\n private mount(): void {\r\n // Inject keyframes\r\n this.injectStyles();\r\n\r\n // Overlay\r\n this.overlay = document.createElement(\"div\");\r\n this.overlay.id = \"sc-flow-overlay\";\r\n this.overlay.style.cssText = `\r\n position:fixed;inset:0;z-index:99999;\r\n display:flex;align-items:center;justify-content:center;\r\n background:${this.theme.overlay};\r\n backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);\r\n opacity:0;transition:opacity 0.3s ease;\r\n font-family:'Inter','Segoe UI',system-ui,-apple-system,sans-serif;\r\n `;\r\n\r\n // Modal\r\n this.modal = document.createElement(\"div\");\r\n this.modal.id = \"sc-flow-modal\";\r\n this.modal.setAttribute(\"role\", \"dialog\");\r\n this.modal.setAttribute(\"aria-modal\", \"true\");\r\n this.modal.setAttribute(\"aria-label\", \"Identity verification\");\r\n this.modal.style.cssText = `\r\n width:100%;max-width:580px;max-height:95vh;\r\n background:${this.theme.bg};\r\n border-radius:20px;overflow:hidden;\r\n box-shadow:${this.theme.shadow};\r\n display:flex;flex-direction:column;\r\n transform:translateY(20px) scale(0.97);\r\n transition:transform 0.35s cubic-bezier(0.16,1,0.3,1);\r\n `;\r\n\r\n // Header\r\n const header = this.createHeader();\r\n this.modal.appendChild(header);\r\n\r\n // Progress bar\r\n const progressWrap = document.createElement(\"div\");\r\n progressWrap.style.cssText = `height:3px;background:${this.theme.shimmer};`;\r\n this.progressBar = document.createElement(\"div\");\r\n this.progressBar.style.cssText = `\r\n height:100%;width:0%;background:linear-gradient(90deg,${this.theme.primary},${this.theme.primaryHover});\r\n border-radius:0 2px 2px 0;transition:width 0.5s ease;\r\n `;\r\n progressWrap.appendChild(this.progressBar);\r\n this.modal.appendChild(progressWrap);\r\n\r\n // Content area (scrollable)\r\n this.contentArea = document.createElement(\"div\");\r\n this.contentArea.id = \"sc-flow-content\";\r\n this.contentArea.setAttribute(\"role\", \"main\");\r\n this.contentArea.setAttribute(\"aria-live\", \"polite\");\r\n this.contentArea.setAttribute(\"aria-atomic\", \"false\");\r\n this.contentArea.style.cssText = `\r\n flex:1;overflow-y:auto;padding:16px 20px;\r\n -webkit-overflow-scrolling:touch;\r\n `;\r\n this.modal.appendChild(this.contentArea);\r\n\r\n // Footer\r\n const footer = this.createFooter();\r\n this.modal.appendChild(footer);\r\n\r\n this.overlay.appendChild(this.modal);\r\n document.body.appendChild(this.overlay);\r\n\r\n // Animate in\r\n requestAnimationFrame(() => {\r\n if (this.overlay) this.overlay.style.opacity = \"1\";\r\n if (this.modal) this.modal.style.transform = \"translateY(0) scale(1)\";\r\n });\r\n\r\n // Escape closes the dialog; Tab is trapped inside it (standard WCAG dialog pattern).\r\n this._keydownHandler = (e: KeyboardEvent) => {\r\n if (e.key === \"Escape\") {\r\n e.preventDefault();\r\n this.close();\r\n return;\r\n }\r\n if (e.key === \"Tab\" && this.modal) {\r\n const focusable = this.modal.querySelectorAll<HTMLElement>(\r\n 'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'\r\n );\r\n if (focusable.length === 0) return;\r\n const first = focusable[0];\r\n const last = focusable[focusable.length - 1];\r\n if (e.shiftKey && document.activeElement === first) {\r\n e.preventDefault();\r\n last.focus();\r\n } else if (!e.shiftKey && document.activeElement === last) {\r\n e.preventDefault();\r\n first.focus();\r\n }\r\n }\r\n };\r\n document.addEventListener(\"keydown\", this._keydownHandler);\r\n\r\n // A tab backgrounded mid-scan (a notification, switching apps to copy a\r\n // code, a phone call) leaves the camera stream and detection loop in an\r\n // undefined state on most mobile browsers — rAF throttles/pauses while\r\n // hidden, and some browsers suspend the camera outright. Rather than let\r\n // the scan silently continue against stale state and fail confusingly,\r\n // restart the liveness step cleanly once the tab has been away long\r\n // enough to plausibly have disrupted an active camera session. A brief\r\n // glance elsewhere (quick app switch, screen lock tap) is not enough to\r\n // warrant restarting — only a real return-from-away.\r\n const REBACKGROUND_RESTART_MS = 3000;\r\n this._visibilityHandler = () => {\r\n if (this.isDestroyed) return;\r\n if (document.hidden) {\r\n this._hiddenAtMs = Date.now();\r\n return;\r\n }\r\n const hiddenAt = this._hiddenAtMs;\r\n this._hiddenAtMs = null;\r\n if (hiddenAt === null) return;\r\n const awayMs = Date.now() - hiddenAt;\r\n if (awayMs >= REBACKGROUND_RESTART_MS && this.currentStep === \"liveness\") {\r\n this._restartedAfterBackground = true;\r\n this.showStep(\"liveness\");\r\n }\r\n };\r\n document.addEventListener(\"visibilitychange\", this._visibilityHandler);\r\n\r\n // Intercept the browser/OS back gesture so it steps back within the flow\r\n // instead of navigating the host page away and abandoning the session\r\n // mid-verification (camera left open, timers orphaned). One guard entry\r\n // is pushed — not one per step — to minimize interference with a host\r\n // page's own router; popstate re-arms it each time so back can be\r\n // pressed repeatedly. If the current step has no back target, back\r\n // closes the widget cleanly instead (same as the header ✕).\r\n this._historyGuardActive = true;\r\n try {\r\n history.pushState({ scFlowGuard: true }, \"\");\r\n } catch {\r\n this._historyGuardActive = false; // host disallows pushState — degrade silently\r\n }\r\n this._popstateHandler = () => {\r\n if (this.isDestroyed || !this._historyGuardActive) return;\r\n const backAction = this._getBackAction(this.currentStep);\r\n if (backAction) {\r\n backAction();\r\n } else {\r\n this.close();\r\n return; // don't re-arm — we're closing, let the real back navigation proceed\r\n }\r\n try {\r\n history.pushState({ scFlowGuard: true }, \"\");\r\n } catch { /* ignore — nothing more we can do */ }\r\n };\r\n window.addEventListener(\"popstate\", this._popstateHandler);\r\n }\r\n\r\n private async initialize(): Promise<void> {\r\n this.showStep(\"loading\");\r\n\r\n try {\r\n // Create session\r\n await this.sdk.createSession();\r\n\r\n // C4: Start session expiry timer (warn 2 min before 30-min expiry)\r\n const expiresAt = this.sdk.sessionExpiresAt;\r\n if (expiresAt) {\r\n const expiresMs = new Date(expiresAt).getTime() - Date.now();\r\n const warnMs = Math.max(expiresMs - 120000, 0); // warn 2 min before\r\n this.sessionExpiryTimer = setTimeout(\r\n () => this._showExpiryWarningWhenSafe(),\r\n warnMs\r\n );\r\n // The warning above is advisory only and can defer indefinitely\r\n // while the user sits on a camera-active step — without a hard\r\n // stop, an ignored/deferred warning left the widget open against\r\n // an already-expired backend session (SessionToken.expires_at,\r\n // 30 min — see sdk/views.py's SessionToken.objects.create call)\r\n // for as long as the host page stayed open. Force-close once the\r\n // real deadline passes so the widget's lifetime never exceeds\r\n // what the backend actually honors.\r\n this.sessionExpiredTimer = setTimeout(\r\n () => this._enforceSessionExpiry(),\r\n Math.max(expiresMs, 0)\r\n );\r\n }\r\n\r\n // Load config\r\n this.sdkConfig = await this.sdk.initializeConfig();\r\n\r\n // Apply theme from config — use theme_hex to override primary colour if set\r\n if (this.sdkConfig.theme) {\r\n this.theme = getTheme(this.sdkConfig.theme, (this.sdkConfig as any).theme_hex || null);\r\n this.applyTheme();\r\n }\r\n\r\n // Update brand name in header\r\n if (this.brandLabel && this.sdkConfig.brand_name) {\r\n this.brandLabel.textContent = this.sdkConfig.brand_name;\r\n }\r\n\r\n // Show the client's logo if this config has one — src is only set\r\n // once a URL exists, so the \"error\" fallback wired up in\r\n // createHeader() never fires from an empty/undefined src.\r\n if (this.brandLogoImg && this.sdkConfig.logo_url) {\r\n this.brandLogoImg.src = this.sdkConfig.logo_url;\r\n this.brandLogoImg.style.display = \"block\";\r\n }\r\n\r\n if (this.isDestroyed) return;\r\n\r\n this.showStep(\"welcome\");\r\n\r\n } catch (err: any) {\r\n this.showErrorStep(err.message || \"Failed to initialize. Please try again.\");\r\n }\r\n }\r\n\r\n // Defers the expiry warning while the user is on a camera-active step\r\n // (document_capture/liveness) — showing it there would blow away a live\r\n // video element and in-progress MediaRecorder mid-scan.\r\n private _showExpiryWarningWhenSafe(): void {\r\n if (this.isDestroyed) return;\r\n const cameraActiveSteps: StepName[] = [\"document_capture\", \"liveness\"];\r\n if (cameraActiveSteps.includes(this.currentStep)) {\r\n this.sessionExpiryTimer = setTimeout(() => this._showExpiryWarningWhenSafe(), 5000);\r\n return;\r\n }\r\n this.showErrorStep(\"Your session is about to expire. Please complete verification quickly or restart.\");\r\n }\r\n\r\n // Hard stop once the backend session (SessionToken.expires_at, 30 min)\r\n // has actually passed. Deferred the same way as the warning above while\r\n // a camera is live so we don't tear down an in-progress scan, but capped\r\n // — the earlier warning already gave the user 2 minutes' notice, so\r\n // there's no reason to keep deferring past a short grace window the way\r\n // the advisory warning does.\r\n private static readonly MAX_EXPIRY_DEFERRALS = 12; // 12 * 5s = 60s grace\r\n private _expiryDeferrals = 0;\r\n private _enforceSessionExpiry(): void {\r\n if (this.isDestroyed) return;\r\n const cameraActiveSteps: StepName[] = [\"document_capture\", \"liveness\"];\r\n if (\r\n cameraActiveSteps.includes(this.currentStep) &&\r\n this._expiryDeferrals < SmartComplyFlow.MAX_EXPIRY_DEFERRALS\r\n ) {\r\n this._expiryDeferrals += 1;\r\n this.sessionExpiredTimer = setTimeout(() => this._enforceSessionExpiry(), 5000);\r\n return;\r\n }\r\n this.showErrorStep(\"Your session has expired. Please restart verification.\");\r\n this.close();\r\n }\r\n\r\n // ─────────────────────────────────────────────────────────────────\r\n // Step rendering\r\n // ─────────────────────────────────────────────────────────────────\r\n\r\n private showStep(step: StepName): void {\r\n this.currentStep = step;\r\n if (!this.contentArea) return;\r\n\r\n // P1/B6: cancel any in-flight OCR gate poll when user navigates away\r\n if (this._ocrPollTimer) {\r\n clearTimeout(this._ocrPollTimer);\r\n this._ocrPollTimer = null;\r\n }\r\n\r\n // Release a pre-warmed camera stream if we're navigating anywhere other\r\n // than liveness (the only step that consumes it) — otherwise \"No, use a\r\n // different ID\" / \"No, retake document\" / header back-button leave the\r\n // camera held open indefinitely with no consumer.\r\n if (step !== \"liveness\" && this._prewarmedStream) {\r\n this._prewarmedStream.getTracks().forEach(t => t.stop());\r\n this._prewarmedStream = null;\r\n }\r\n\r\n // Update progress\r\n this.updateProgress();\r\n\r\n // Animate out current content\r\n const oldContent = this.contentArea.firstChild as HTMLElement | null;\r\n if (oldContent) {\r\n oldContent.style.cssText += \"opacity:0;transform:translateX(-20px);transition:all 0.2s ease;\";\r\n setTimeout(() => {\r\n if (this.contentArea) this.contentArea.innerHTML = \"\";\r\n this.renderStep(step);\r\n }, 200);\r\n } else {\r\n this.renderStep(step);\r\n }\r\n }\r\n\r\n private renderStep(step: StepName): void {\r\n if (!this.contentArea) return;\r\n\r\n const wrapper = document.createElement(\"div\");\r\n wrapper.style.cssText = \"opacity:0;transform:translateX(20px);transition:all 0.3s ease;\";\r\n\r\n switch (step) {\r\n case \"loading\":\r\n this.renderLoading(wrapper);\r\n break;\r\n case \"welcome\":\r\n this.renderWelcome(wrapper);\r\n break;\r\n case \"country\":\r\n this.renderCountrySelect(wrapper);\r\n break;\r\n case \"id_type\":\r\n this.renderIdTypeSelect(wrapper);\r\n break;\r\n case \"id_input\":\r\n this.renderIdInput(wrapper);\r\n break;\r\n case \"confirm_identity\":\r\n this.renderConfirmIdentity(wrapper);\r\n break;\r\n case \"document_capture\":\r\n this.renderDocumentCapture(wrapper);\r\n break;\r\n case \"ocr_gate\":\r\n this.renderOcrGate(wrapper);\r\n break;\r\n case \"document_confirm\":\r\n this.renderDocumentConfirm(wrapper);\r\n break;\r\n case \"liveness\":\r\n this.renderLiveness(wrapper);\r\n break;\r\n case \"done\":\r\n this.renderDone(wrapper);\r\n break;\r\n case \"error\":\r\n break;\r\n }\r\n\r\n this.contentArea.appendChild(wrapper);\r\n\r\n // Animate in\r\n requestAnimationFrame(() => {\r\n wrapper.style.opacity = \"1\";\r\n wrapper.style.transform = \"translateX(0)\";\r\n });\r\n\r\n // Move focus to the new step's heading so keyboard/screen-reader users\r\n // aren't left on a now-detached button. Skipped for camera-active steps\r\n // and id_input, which already focuses its first field itself.\r\n const skipAutoFocusSteps: StepName[] = [\"document_capture\", \"liveness\", \"id_input\"];\r\n if (!skipAutoFocusSteps.includes(step)) {\r\n requestAnimationFrame(() => {\r\n const heading = wrapper.querySelector<HTMLElement>(\"h1, h2, h3\");\r\n const target =\r\n heading ||\r\n wrapper.querySelector<HTMLElement>(\r\n 'button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'\r\n );\r\n if (target) {\r\n if (heading && !heading.hasAttribute(\"tabindex\")) {\r\n heading.setAttribute(\"tabindex\", \"-1\");\r\n }\r\n target.focus({ preventScroll: true });\r\n }\r\n });\r\n }\r\n }\r\n\r\n // ── Loading ─────────────────────────────────────────────────────\r\n\r\n private renderLoading(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:300px;gap:16px;\";\r\n\r\n container.appendChild(renderSpinner(this.theme, { size: 60, icon: icon(\"shield\", 22) }));\r\n\r\n const label = document.createElement(\"div\");\r\n label.style.cssText = `color:${this.theme.text};font-size:${TYPE.base}px;font-weight:600;`;\r\n label.textContent = \"Setting up secure session\";\r\n container.appendChild(label);\r\n\r\n const sub = document.createElement(\"div\");\r\n sub.style.cssText = `color:${this.theme.textMuted};font-size:12px;text-align:center;max-width:220px;line-height:1.5;`;\r\n sub.textContent = \"Connecting to the verification service...\";\r\n container.appendChild(sub);\r\n }\r\n\r\n // ── Welcome ────────────────────────────────────────────────────\r\n\r\n private renderWelcome(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:12px;\";\r\n\r\n const isLivenessOnly = this.isLivenessOnlyFlow();\r\n const isDocFlow = isLivenessOnly ? false : this.isDocumentFlow();\r\n\r\n // Icon + badge row (side by side to save vertical space)\r\n const topRow = document.createElement(\"div\");\r\n topRow.style.cssText = \"display:flex;flex-direction:column;align-items:center;gap:8px;\";\r\n\r\n const iconWrap = document.createElement(\"div\");\r\n iconWrap.style.cssText = `\r\n width:50px;height:50px;border-radius:14px;\r\n display:flex;align-items:center;justify-content:center;\r\n color:${this.theme.primary};\r\n background:linear-gradient(135deg,${this.theme.primary}22,${this.theme.primaryGlow});\r\n border:1.5px solid ${this.theme.primary}33;\r\n overflow:hidden;\r\n `;\r\n // Client's logo takes over this hero spot when set — otherwise the\r\n // generic shield/id-card mark that every tenant used to see regardless\r\n // of who they were.\r\n const logoUrl = this.sdkConfig?.logo_url;\r\n if (logoUrl) {\r\n const logoImg = document.createElement(\"img\");\r\n logoImg.src = logoUrl;\r\n logoImg.alt = \"\";\r\n logoImg.style.cssText = \"width:100%;height:100%;object-fit:contain;padding:6px;\";\r\n // Same fallback as the header logo — a broken image here is worse\r\n // than the generic icon it would otherwise have shown.\r\n logoImg.addEventListener(\"error\", () => {\r\n iconWrap.innerHTML = icon(isDocFlow ? \"id-card\" : \"shield\", 24);\r\n });\r\n iconWrap.appendChild(logoImg);\r\n } else {\r\n iconWrap.innerHTML = icon(isDocFlow ? \"id-card\" : \"shield\", 24);\r\n }\r\n topRow.appendChild(iconWrap);\r\n\r\n const badge = document.createElement(\"div\");\r\n badge.style.cssText = `\r\n display:inline-flex;align-items:center;gap:5px;\r\n padding:3px 11px;border-radius:999px;\r\n font-size:10.5px;font-weight:600;letter-spacing:0.2px;\r\n background:${this.theme.primary}15;\r\n color:${this.theme.primary};\r\n border:1px solid ${this.theme.primary}30;\r\n `;\r\n badge.textContent = isLivenessOnly\r\n ? \"🤳 Liveness Check\"\r\n : isDocFlow ? \"📄 Document Verification\" : \"🔍 Data Verification\";\r\n topRow.appendChild(badge);\r\n container.appendChild(topRow);\r\n\r\n // Title + subtitle (compact)\r\n const titleWrap = document.createElement(\"div\");\r\n titleWrap.style.cssText = \"display:flex;flex-direction:column;align-items:center;gap:5px;width:100%;\";\r\n\r\n const title = document.createElement(\"h2\");\r\n title.style.cssText = `\r\n color:${this.theme.text};font-size:${TYPE.heading}px;font-weight:700;\r\n margin:0;line-height:1.2;\r\n `;\r\n // W2: Use client brand name in title\r\n const brandName = this.sdkConfig?.brand_name;\r\n title.textContent = brandName\r\n ? `${brandName} Identity Verification`\r\n : \"Verify Your Identity\";\r\n titleWrap.appendChild(title);\r\n\r\n const desc = document.createElement(\"p\");\r\n desc.style.cssText = `\r\n color:${this.theme.textSecondary};font-size:13px;line-height:1.5;\r\n margin:0 auto;max-width:300px;text-align:center;\r\n `;\r\n desc.textContent = isLivenessOnly\r\n ? \"You'll just need camera access. This takes about 30 seconds.\"\r\n : isDocFlow\r\n ? \"You'll need your document and camera access. This takes about 2 minutes.\"\r\n : \"You'll need your ID number and camera access. This takes about 2 minutes.\";\r\n titleWrap.appendChild(desc);\r\n container.appendChild(titleWrap);\r\n\r\n // Steps preview — compact rows\r\n const steps = isLivenessOnly\r\n ? [\r\n { icon: \"🤳\", text: \"Face check\", sub: \"Quick selfie to confirm it's you\" },\r\n ]\r\n : isDocFlow\r\n ? [\r\n { icon: \"🪪\", text: \"Choose your document type\", sub: \"Passport, National ID, Driver License\" },\r\n { icon: \"📷\", text: \"Scan your document\", sub: \"Upload or capture a photo of your ID\" },\r\n { icon: \"🤳\", text: \"Face check\", sub: \"Quick selfie to confirm it's you\" },\r\n ]\r\n : [\r\n { icon: \"🆔\", text: \"Choose your ID type\", sub: \"NIN, BVN, Voter's Card and more\" },\r\n { icon: \"📝\", text: \"Enter your ID details\", sub: \"Exactly as shown on your ID\" },\r\n { icon: \"🤳\", text: \"Face check\", sub: \"Quick selfie to confirm it's you\" },\r\n ];\r\n\r\n const stepsWrap = document.createElement(\"div\");\r\n stepsWrap.style.cssText = `\r\n width:100%;display:flex;flex-direction:column;gap:0;\r\n border-radius:${RADIUS.md}px;overflow:hidden;\r\n border:1.5px solid ${this.theme.border};\r\n `;\r\n\r\n steps.forEach((step, i) => {\r\n const row = document.createElement(\"div\");\r\n row.style.cssText = `\r\n display:flex;align-items:center;gap:12px;\r\n padding:8px 14px;\r\n background:${this.theme.cardBg};\r\n ${i < steps.length - 1 ? `border-bottom:1px solid ${this.theme.border};` : \"\"}\r\n `;\r\n\r\n const iconEl = document.createElement(\"div\");\r\n iconEl.style.cssText = `\r\n width:28px;height:28px;border-radius:${RADIUS.sm}px;flex-shrink:0;\r\n display:flex;align-items:center;justify-content:center;\r\n font-size:13px;\r\n background:${this.theme.primary}12;\r\n border:1px solid ${this.theme.primary}20;\r\n `;\r\n iconEl.textContent = step.icon;\r\n\r\n const textWrap = document.createElement(\"div\");\r\n textWrap.style.cssText = \"display:flex;flex-direction:column;gap:1px;text-align:left;\";\r\n\r\n const textEl = document.createElement(\"span\");\r\n textEl.style.cssText = `color:${this.theme.text};font-size:12.5px;font-weight:600;`;\r\n textEl.textContent = step.text;\r\n\r\n const subEl = document.createElement(\"span\");\r\n subEl.style.cssText = `color:${this.theme.textMuted};font-size:10.5px;`;\r\n subEl.textContent = step.sub;\r\n\r\n textWrap.appendChild(textEl);\r\n textWrap.appendChild(subEl);\r\n row.appendChild(iconEl);\r\n row.appendChild(textWrap);\r\n stepsWrap.appendChild(row);\r\n });\r\n\r\n container.appendChild(stepsWrap);\r\n\r\n // CTA\r\n const btn = this.createPrimaryButton(\"Get Started →\");\r\n btn.style.cssText += \"margin-top:2px;\";\r\n btn.addEventListener(\"click\", () => {\r\n if (isLivenessOnly) {\r\n // Liveness-only has no channels at all, so renderCountrySelect's\r\n // single-country auto-skip (countries.length === 1) never fires for\r\n // it — going through \"country\" here would render an empty,\r\n // dead-end country-picker screen. Go straight to liveness instead.\r\n //\r\n // selectedCountry defaults to \"\" and is otherwise only ever set by\r\n // renderCountrySelect, which this mode never visits — renderLiveness\r\n // sends it as a required, non-blank `country` field, so leaving it\r\n // empty would fail create() validation before the scan even starts.\r\n // There's no real country to report here (no identity lookup runs\r\n // in this mode), so this is a neutral placeholder, not a claim\r\n // about the user's actual location.\r\n this.selectedCountry = this.selectedCountry || \"global\";\r\n this.showStep(\"liveness\");\r\n } else {\r\n this.showStep(\"country\");\r\n }\r\n });\r\n container.appendChild(btn);\r\n\r\n // Plain-language line on what the camera/photo is for and what happens\r\n // to it — shown before the \"Get Started\" tap that leads to the first\r\n // camera permission prompt, so the browser's own prompt isn't the only\r\n // context the user gets for why a camera is being requested.\r\n const trust = document.createElement(\"div\");\r\n trust.style.cssText = `\r\n display:flex;align-items:flex-start;gap:6px;text-align:left;\r\n color:${this.theme.textMuted};font-size:10.5px;line-height:1.5;\r\n `;\r\n trust.innerHTML = `<span style=\"flex-shrink:0;\">🔒</span><span>Your photo and camera scan are used only to verify it's really you, and are kept encrypted.</span>`;\r\n container.appendChild(trust);\r\n }\r\n\r\n // ── Country Select ──────────────────────────────────────────────\r\n\r\n private renderCountrySelect(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;gap:14px;\";\r\n\r\n const channels = this.sdkConfig?.channels || {};\r\n const countries = Object.keys(channels);\r\n\r\n // Auto-skip country selection if only one country available\r\n if (countries.length === 1) {\r\n this.selectedCountry = countries[0];\r\n this.showStep(\"id_type\");\r\n return;\r\n }\r\n\r\n const title = this.createStepTitle(\"Select your country\");\r\n container.appendChild(title);\r\n\r\n const subtitle = document.createElement(\"div\");\r\n subtitle.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin-top:-8px;`;\r\n subtitle.textContent = \"Choose the country that issued your ID\";\r\n container.appendChild(subtitle);\r\n\r\n for (const country of countries) {\r\n const card = this.createOptionCard(\r\n COUNTRY_LABELS[country] || country,\r\n `${channels[country].length} ID type${channels[country].length > 1 ? \"s\" : \"\"} available`,\r\n () => {\r\n this.selectedCountry = country;\r\n this.showStep(\"id_type\");\r\n }\r\n );\r\n container.appendChild(card);\r\n }\r\n }\r\n\r\n // ── ID Type Select ──────────────────────────────────────────────\r\n\r\n private renderIdTypeSelect(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;gap:14px;\";\r\n\r\n const globalDocFlow = this.isDocumentFlow();\r\n\r\n const title = this.createStepTitle(globalDocFlow ? \"Select document type\" : \"Select ID type\");\r\n container.appendChild(title);\r\n\r\n const subtitle = document.createElement(\"div\");\r\n subtitle.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin-top:-8px;`;\r\n subtitle.textContent = globalDocFlow\r\n ? \"Choose the document you want to scan\"\r\n : \"Choose the ID you want to verify\";\r\n container.appendChild(subtitle);\r\n\r\n const channels = this.sdkConfig?.channels || {};\r\n const idTypes = channels[this.selectedCountry] || [];\r\n\r\n for (const idType of idTypes) {\r\n const typeName = typeof idType === \"string\" ? idType : idType.name;\r\n // Use code (canonical) for API calls, fallback to name for backward compatibility\r\n const typeCode = typeof idType === \"string\" ? idType : (idType.code || idType.name);\r\n // Detect per-channel: does THIS specific channel have upload fields?\r\n const channelFields: any[] = typeof idType !== \"string\" ? (idType.fields || []) : [];\r\n const isThisDocFlow = channelFields.some((f: any) => isUploadFieldType(f.type)) || globalDocFlow;\r\n const info = resolveIdTypeInfo(typeName, isThisDocFlow);\r\n\r\n // Prefer the backend-provided back-side flag; fall back to local heuristics only when absent.\r\n const requiresBackFromBackend =\r\n typeof idType !== \"string\" ? (idType as SDKChannel).requires_back_side : undefined;\r\n const requiresBack = requiresBackFromBackend ?? info.requiresBack;\r\n\r\n // Add back side indicator to subtitle if needed (only when strictly\r\n // required — \"optional\" already reads correctly from info.desc, e.g.\r\n // NIN's \"back optional\", and must not be overwritten with this warning).\r\n let subtitle = info.desc;\r\n if (requiresBack === true && isThisDocFlow) {\r\n subtitle += \" ⚠️ Both sides required\";\r\n }\r\n\r\n // Clean display name — strip \"with face\", \"(NIN)\", \"(BVN)\" from user-visible label\r\n const displayName = typeName\r\n .replace(/\\s*with\\s+face\\s*/gi, ' ')\r\n .replace(/\\s*\\(NIN\\)\\s*/gi, ' ')\r\n .replace(/\\s*\\(BVN\\)\\s*/gi, ' ')\r\n .replace(/\\s{2,}/g, ' ')\r\n .trim();\r\n\r\n const card = this.createOptionCard(\r\n `${info.icon} ${displayName}`,\r\n subtitle,\r\n () => {\r\n const idTypeChanged = this.selectedIdType !== typeCode;\r\n this.selectedIdType = typeCode; // Store canonical code for API\r\n this.selectedIdTypeName = typeName; // Keep display name for UI\r\n this.selectedRequiresBack = requiresBack;\r\n // Always reset first to avoid stale state when user goes back and changes selection\r\n this.selectedChannelId = 0;\r\n this.selectedChannelFields = [];\r\n this.collectedFields = {};\r\n // Only discard an in-flight liveness/doc capture if the user actually changed ID type\r\n if (idTypeChanged) {\r\n this.livenessEntryId = null;\r\n this.documentBlob = null;\r\n this.documentBackBlob = null;\r\n }\r\n if (typeof idType !== \"string\") {\r\n this.selectedChannelId = idType.id;\r\n this.selectedChannelFields = idType.fields || []; // guard null/undefined from backend\r\n }\r\n // Route: use explicit verification_type when set (more reliable than inspecting all channels)\r\n // Fallback to per-channel upload field check for mixed / unconfigured setups\r\n const hasUpload = (this.selectedChannelFields).some((f: any) => isUploadFieldType(f.type));\r\n const vType = this.sdkConfig?.verification_type;\r\n const vTypes: string[] = vType ? (Array.isArray(vType) ? vType : [vType]) : [];\r\n const isDocChannel = hasUpload || (vTypes.length > 0 && vTypes.includes(\"document_verification\"));\r\n this.showStep(isDocChannel ? \"document_capture\" : \"id_input\");\r\n }\r\n );\r\n container.appendChild(card);\r\n }\r\n\r\n }\r\n\r\n // ── ID Input (data verification — dynamic fields) ─────────────\r\n\r\n private renderIdInput(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;gap:14px;\";\r\n\r\n const dataFields = this.selectedChannelFields.filter((f) => f.type !== \"upload\");\r\n const info = resolveIdTypeInfo(this.selectedIdTypeName || this.selectedIdType, false);\r\n const cleanStepTitle = (this.selectedIdTypeName || this.selectedIdType)\r\n .replace(/\\s*with\\s+face\\s*/gi, ' ')\r\n .replace(/\\s*\\(NIN\\)\\s*/gi, ' ')\r\n .replace(/\\s*\\(BVN\\)\\s*/gi, ' ')\r\n .replace(/\\s{2,}/g, ' ')\r\n .trim();\r\n\r\n const title = this.createStepTitle(`${info.icon} ${cleanStepTitle}`);\r\n container.appendChild(title);\r\n\r\n const subtitle = document.createElement(\"div\");\r\n subtitle.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin-top:-8px;`;\r\n subtitle.textContent = dataFields.length > 0\r\n ? `Enter your ${this.selectedIdTypeName || this.selectedIdType} details exactly as they appear on your ID.`\r\n : \"Fill in the fields below to continue.\";\r\n container.appendChild(subtitle);\r\n\r\n // Edge case: no data fields configured — show fallback and allow submission\r\n if (dataFields.length === 0) {\r\n const empty = document.createElement(\"div\");\r\n empty.style.cssText = `\r\n padding:16px;border-radius:10px;\r\n background:${this.theme.cardBg};border:1px solid ${this.theme.border};\r\n color:${this.theme.textSecondary};font-size:13px;text-align:center;\r\n `;\r\n empty.textContent = \"No additional details required. Click below to continue.\";\r\n container.appendChild(empty);\r\n const autoBtn = this.createPrimaryButton(\"Continue\");\r\n autoBtn.addEventListener(\"click\", () => this.showStep(\"liveness\"));\r\n container.appendChild(autoBtn);\r\n return;\r\n }\r\n\r\n // ── Field format rules ────────────────────────────────────────────────\r\n // Keyed by uppercased label substring → { minLen, maxLen, numeric, pattern, hint }\r\n interface FieldRule {\r\n minLen?: number;\r\n maxLen?: number;\r\n numeric?: boolean; // only digits allowed\r\n alphanumeric?: boolean; // letters + digits only\r\n pattern?: RegExp;\r\n hint: string;\r\n placeholder?: string; // overrides the default \"Enter {label}\" placeholder\r\n }\r\n const _FIELD_RULES: Array<{ match: string; rule: FieldRule }> = [\r\n { match: \"BVN\", rule: { minLen: 11, maxLen: 11, numeric: true, hint: \"BVN must be exactly 11 digits\" } },\r\n { match: \"NIN\", rule: { minLen: 11, maxLen: 11, numeric: true, hint: \"NIN must be exactly 11 digits\" } },\r\n { match: \"NATIONAL IDENTITY\", rule: { minLen: 11, maxLen: 11, numeric: true, hint: \"NIN must be exactly 11 digits\" } },\r\n { match: \"PASSPORT\", rule: { minLen: 6, maxLen: 20, alphanumeric: true, hint: \"Passport number must be 6–20 alphanumeric characters\" } },\r\n { match: \"DRIVER\", rule: { minLen: 3, maxLen: 30, alphanumeric: true, hint: \"Licence number must be 3–30 alphanumeric characters\" } },\r\n { match: \"VOTER\", rule: { minLen: 6, maxLen: 30, alphanumeric: true, hint: \"Voter ID must be 6–30 alphanumeric characters\" } },\r\n { match: \"GHANA\", rule: { minLen: 8, maxLen: 20, alphanumeric: true, hint: \"Ghana Card number must be 8–20 alphanumeric characters\" } },\r\n { match: \"SSNIT\", rule: { minLen: 7, maxLen: 15, alphanumeric: true, hint: \"SSNIT number must be 7–15 alphanumeric characters\" } },\r\n { match: \"TIN\", rule: { minLen: 8, maxLen: 20, alphanumeric: true, hint: \"TIN must be 8–20 characters\" } },\r\n { match: \"KRA\", rule: { minLen: 10, maxLen: 12, alphanumeric: true, hint: \"KRA PIN must be 10–12 characters\" } },\r\n // Backend accepts DD-MM-YYYY, DD/MM/YYYY, YYYY-MM-DD or YYYY/MM/DD\r\n // (see _normalize_date_str in ivs_run_check.py) — DD-MM-YYYY shown here\r\n // since it matches the date format printed on NIN/BVN records.\r\n { match: \"DATE OF BIRTH\", rule: { pattern: /^\\d{2}[-/]\\d{2}[-/]\\d{4}$|^\\d{4}[-/]\\d{2}[-/]\\d{2}$/, hint: \"Format: DD-MM-YYYY (e.g. 15-06-1996)\", placeholder: \"DD-MM-YYYY\" } },\r\n { match: \"DOB\", rule: { pattern: /^\\d{2}[-/]\\d{2}[-/]\\d{4}$|^\\d{4}[-/]\\d{2}[-/]\\d{2}$/, hint: \"Format: DD-MM-YYYY (e.g. 15-06-1996)\", placeholder: \"DD-MM-YYYY\" } },\r\n ];\r\n\r\n function getFieldRule(label: string): FieldRule | null {\r\n const upper = label.toUpperCase();\r\n for (const entry of _FIELD_RULES) {\r\n if (upper.includes(entry.match)) return entry.rule;\r\n }\r\n return null;\r\n }\r\n\r\n function validateFieldValue(label: string, value: string): string | null {\r\n const rule = getFieldRule(label);\r\n if (!rule) return null; // no rule = no validation\r\n const v = value.trim();\r\n if (rule.numeric && !/^\\d+$/.test(v)) return `${label} must contain digits only`;\r\n if (rule.alphanumeric && !/^[A-Za-z0-9]+$/.test(v)) return `${label} must be alphanumeric (letters and digits only)`;\r\n if (rule.pattern && !rule.pattern.test(v)) return rule.hint;\r\n if (rule.minLen && v.length < rule.minLen) return rule.hint;\r\n if (rule.maxLen && v.length > rule.maxLen) return rule.hint;\r\n return null;\r\n }\r\n\r\n // Track input elements for validation\r\n const inputEls: { field: any; el: HTMLInputElement | HTMLSelectElement }[] = [];\r\n\r\n for (const field of dataFields) {\r\n // Send the raw label as the payload key — the backend's\r\n // _SDK_FIELD_KEY_MAP looks up the exact label text (e.g. \"National ID\",\r\n // \"CAC Number\") to remap it to the canonical IVS key. Pre-normalizing\r\n // it here (as this used to do) produced keys like \"national_id\" that\r\n // don't match the map's literal-label entries and silently fall\r\n // through to the wrong key for several identity types.\r\n const fieldKey = field.label;\r\n\r\n const fieldWrap = document.createElement(\"div\");\r\n fieldWrap.style.cssText = \"display:flex;flex-direction:column;gap:6px;\";\r\n\r\n const labelId = `sc-field-label-${fieldKey.replace(/\\s+/g, '-').toLowerCase()}`;\r\n const label = document.createElement(\"label\");\r\n label.id = labelId;\r\n label.htmlFor = `sc-field-input-${fieldKey.replace(/\\s+/g, '-').toLowerCase()}`;\r\n label.style.cssText = `color:${this.theme.textMuted};font-size:10px;font-weight:700;letter-spacing:0.6px;text-transform:uppercase;`;\r\n label.textContent = field.label;\r\n fieldWrap.appendChild(label);\r\n\r\n if (field.type === \"dropdown\" || field.type === \"select\") {\r\n // Dropdown field\r\n const select = document.createElement(\"select\");\r\n select.style.cssText = `\r\n width:100%;padding:13px 16px;border-radius:${RADIUS.md}px;\r\n font-size:15px;\r\n background:${this.theme.inputBg};\r\n color:${this.theme.text};\r\n border:2px solid ${this.theme.border};\r\n outline:none;box-sizing:border-box;\r\n cursor:pointer;transition:border-color 0.2s ease;\r\n `;\r\n const placeholder = document.createElement(\"option\");\r\n placeholder.value = \"\";\r\n placeholder.textContent = `Select ${field.label}`;\r\n placeholder.disabled = true;\r\n placeholder.selected = true;\r\n select.appendChild(placeholder);\r\n\r\n for (const opt of field.options || []) {\r\n const option = document.createElement(\"option\");\r\n option.value = opt;\r\n option.textContent = opt;\r\n select.appendChild(option);\r\n }\r\n\r\n select.addEventListener(\"focus\", () => { select.style.borderColor = this.theme.primary; });\r\n select.addEventListener(\"blur\", () => { select.style.borderColor = this.theme.border; });\r\n select.addEventListener(\"change\", () => {\r\n this.collectedFields[fieldKey] = select.value;\r\n updateSubmitState();\r\n });\r\n fieldWrap.appendChild(select);\r\n inputEls.push({ field, el: select });\r\n } else if (field.type === \"image\" || field.type === \"file\") {\r\n // File upload field — converts to base64 for API submission\r\n const fileInput = document.createElement(\"input\");\r\n fileInput.type = \"file\";\r\n fileInput.accept = \"image/*\";\r\n fileInput.style.cssText = `\r\n width:100%;padding:12px 16px;border-radius:${RADIUS.md}px;\r\n font-size:14px;font-weight:500;\r\n background:${this.theme.inputBg};\r\n color:${this.theme.text};\r\n border:2px dashed ${this.theme.border};\r\n outline:none;transition:border-color 0.2s ease;\r\n box-sizing:border-box;cursor:pointer;\r\n `;\r\n fileInput.addEventListener(\"focus\", () => {\r\n fileInput.style.borderColor = this.theme.primary;\r\n });\r\n fileInput.addEventListener(\"blur\", () => {\r\n fileInput.style.borderColor = this.theme.border;\r\n });\r\n fileInput.addEventListener(\"change\", () => {\r\n const file = fileInput.files?.[0];\r\n if (file) {\r\n const reader = new FileReader();\r\n reader.onload = () => {\r\n const base64 = (reader.result as string).split(\",\")[1] || \"\";\r\n this.collectedFields[fieldKey] = base64;\r\n updateSubmitState();\r\n };\r\n reader.readAsDataURL(file);\r\n }\r\n });\r\n fieldWrap.appendChild(fileInput);\r\n inputEls.push({ field, el: fileInput as any });\r\n } else {\r\n // Text input field\r\n const inputId = `sc-field-input-${fieldKey.replace(/\\s+/g, '-').toLowerCase()}`;\r\n const hintId = `sc-field-hint-${fieldKey.replace(/\\s+/g, '-').toLowerCase()}`;\r\n const rule = getFieldRule(field.label);\r\n\r\n const input = document.createElement(\"input\");\r\n input.type = \"text\";\r\n input.id = inputId;\r\n input.setAttribute(\"aria-labelledby\", labelId);\r\n input.setAttribute(\"aria-describedby\", hintId);\r\n input.placeholder = rule?.placeholder || `Enter ${field.label}`;\r\n input.maxLength = rule?.maxLen ? rule.maxLen + 2 : 50;\r\n if (rule?.numeric) input.inputMode = \"numeric\";\r\n input.style.cssText = `\r\n width:100%;padding:14px 16px;border-radius:${RADIUS.md}px;\r\n font-size:16px;font-weight:500;\r\n background:${this.theme.inputBg};\r\n color:${this.theme.text};\r\n border:2px solid ${this.theme.border};\r\n outline:none;transition:border-color 0.2s ease;\r\n box-sizing:border-box;\r\n letter-spacing:0.5px;\r\n `;\r\n\r\n // Inline hint/error element\r\n const hintEl = document.createElement(\"div\");\r\n hintEl.id = hintId;\r\n hintEl.setAttribute(\"aria-live\", \"polite\");\r\n hintEl.style.cssText = `font-size:11px;min-height:14px;margin-top:-2px;`;\r\n if (rule) {\r\n hintEl.style.color = this.theme.textMuted;\r\n hintEl.textContent = rule.hint;\r\n }\r\n\r\n input.addEventListener(\"focus\", () => {\r\n input.style.borderColor = this.theme.primary;\r\n });\r\n input.addEventListener(\"blur\", () => {\r\n const v = input.value.trim();\r\n if (v) {\r\n const err = validateFieldValue(field.label, v);\r\n if (err) {\r\n input.style.borderColor = this.theme.error;\r\n hintEl.style.color = this.theme.error;\r\n hintEl.textContent = err;\r\n input.setAttribute(\"aria-invalid\", \"true\");\r\n } else {\r\n input.style.borderColor = this.theme.success || this.theme.primary;\r\n hintEl.style.color = this.theme.textMuted;\r\n hintEl.textContent = rule?.hint || \"\";\r\n input.setAttribute(\"aria-invalid\", \"false\");\r\n }\r\n } else {\r\n input.style.borderColor = this.theme.border;\r\n }\r\n });\r\n input.addEventListener(\"input\", () => {\r\n // Reset error styling while typing\r\n input.style.borderColor = this.theme.primary;\r\n hintEl.style.color = this.theme.textMuted;\r\n hintEl.textContent = rule?.hint || \"\";\r\n input.removeAttribute(\"aria-invalid\");\r\n this.collectedFields[fieldKey] = input.value.trim();\r\n updateSubmitState();\r\n });\r\n fieldWrap.appendChild(input);\r\n fieldWrap.appendChild(hintEl);\r\n inputEls.push({ field, el: input });\r\n }\r\n container.appendChild(fieldWrap);\r\n }\r\n\r\n // Error area\r\n const errorEl = document.createElement(\"div\");\r\n errorEl.id = \"sc-id-error\";\r\n errorEl.style.cssText = `\r\n color:${this.theme.error};font-size:13px;display:none;\r\n padding:8px 12px;border-radius:${RADIUS.sm}px;background:${this.theme.errorBg};\r\n `;\r\n container.appendChild(errorEl);\r\n\r\n // Submit\r\n const submitBtn = this.createPrimaryButton(\"Verify & Continue\");\r\n submitBtn.disabled = true;\r\n submitBtn.style.opacity = \"0.5\";\r\n\r\n const updateSubmitState = () => {\r\n // All inputs must have a value AND pass format validation\r\n const allFilled = inputEls.every(({ el }) => el.value.trim().length > 0);\r\n const allValid = inputEls.every(({ field, el }) => {\r\n if (el.tagName === \"SELECT\") return el.value.trim().length > 0;\r\n return !validateFieldValue(field.label, el.value.trim());\r\n });\r\n const ok = allFilled && allValid;\r\n submitBtn.disabled = !ok;\r\n submitBtn.style.opacity = ok ? \"1\" : \"0.5\";\r\n };\r\n\r\n submitBtn.addEventListener(\"click\", async () => {\r\n submitBtn.disabled = true;\r\n submitBtn.innerHTML = `<span style=\"display:inline-flex;align-items:center;justify-content:center;gap:8px;\">${renderInlineSpinner(\"#fff\", 13)}Verifying...</span>`;\r\n errorEl.style.display = \"none\";\r\n\r\n try {\r\n this.verificationResult = await this.sdk.onboarding.verify({\r\n identity_type_id: this.selectedChannelId,\r\n fields: { ...this.collectedFields },\r\n });\r\n\r\n if (this.verificationResult.status === \"success\") {\r\n // Save identifier and identity_check_id for liveness step\r\n const fieldValues = Object.values(this.collectedFields);\r\n this.idNumber = fieldValues[0] || \"\";\r\n this.identityCheckId = (this.verificationResult as any).data?.identity_check_id || null;\r\n\r\n // W3: Store name + gender from IVS result for confirmation screen\r\n const d = (this.verificationResult as any).data || {};\r\n const nd = d.normalized_data || d.data || d;\r\n this._ivsName = [nd.first_name || nd.firstname || \"\", nd.last_name || nd.lastname || nd.surname || \"\"]\r\n .map(s => String(s || \"\").trim()).filter(Boolean).join(\" \");\r\n this._ivsGender = nd.gender || \"\";\r\n\r\n // W4: If IVS returned no name, there is nothing for the user to confirm —\r\n // auto-proceed straight to Stage 2 (liveness) instead of showing a\r\n // confirmation screen with no identity details to check.\r\n if (!this._ivsName) {\r\n this.showStep(\"liveness\");\r\n return;\r\n }\r\n\r\n // Route to confirmation screen — user must confirm before liveness\r\n this.showStep(\"confirm_identity\");\r\n } else {\r\n errorEl.textContent = _sanitizeUserMessage(this.verificationResult.message)\r\n || \"We could not verify your details. Please check and try again.\";\r\n errorEl.style.display = \"block\";\r\n submitBtn.textContent = \"Verify & Continue\";\r\n submitBtn.disabled = false;\r\n submitBtn.style.opacity = \"1\";\r\n }\r\n } catch (err: any) {\r\n // Show a single plain-language error — never raw field:message format\r\n const fieldErrors = err.data?.errors;\r\n if (Array.isArray(fieldErrors) && fieldErrors.length > 0) {\r\n // Pick the first meaningful error message — strip field prefix\r\n const firstMsg = fieldErrors[0]?.message || fieldErrors[0]?.detail || \"\";\r\n errorEl.textContent = _sanitizeUserMessage(firstMsg)\r\n || \"Please check your details and try again.\";\r\n } else if (err.errorCode === \"VERIFICATION_FAILED\") {\r\n // Prefer the backend's actual reason (e.g. \"BVN check failed: name mismatch\")\r\n // over a generic message — it tells the user what to actually fix.\r\n errorEl.textContent = _sanitizeUserMessage(err.message)\r\n || \"We could not verify those details. Please check your ID number and try again.\";\r\n } else if (err.errorCode === \"CHANNEL_NOT_CONFIGURED\") {\r\n errorEl.textContent = \"This ID type is not currently available. Please choose a different option.\";\r\n } else if (err.errorCode === \"INSUFFICIENT_BALANCE\") {\r\n errorEl.textContent = \"Verification is temporarily unavailable. Please contact support.\";\r\n } else {\r\n errorEl.textContent = _sanitizeUserMessage(err.message)\r\n || \"Something went wrong. Please try again.\";\r\n }\r\n errorEl.style.display = \"block\";\r\n submitBtn.textContent = \"Verify & Continue\";\r\n submitBtn.disabled = false;\r\n submitBtn.style.opacity = \"1\";\r\n }\r\n });\r\n container.appendChild(submitBtn);\r\n\r\n\r\n // Focus first input\r\n const firstInput = inputEls[0]?.el;\r\n if (firstInput && firstInput instanceof HTMLInputElement) {\r\n setTimeout(() => firstInput.focus(), 350);\r\n }\r\n }\r\n\r\n // ── Document Capture ────────────────────────────────────────────\r\n\r\n \r\n private renderDocumentCapture(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;gap:14px;\";\r\n\r\n // Strip \"with face\", \"(NIN)\", \"(BVN)\" noise from the user-visible title\r\n const rawName = this.selectedIdTypeName || this.selectedIdType || \"your document\";\r\n const cleanDocTitle = rawName\r\n .replace(/\\s*with\\s+face\\s*/gi, ' ')\r\n .replace(/\\s*\\(NIN\\)\\s*/gi, ' ')\r\n .replace(/\\s*\\(BVN\\)\\s*/gi, ' ')\r\n .replace(/\\s{2,}/g, ' ')\r\n .trim();\r\n\r\n const title = this.createStepTitle(`Capture ${cleanDocTitle}`);\r\n container.appendChild(title);\r\n\r\n const subtitle = document.createElement(\"div\");\r\n subtitle.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin-top:-8px;`;\r\n subtitle.textContent = \"Upload or capture your document photo. Ensure it's clear and readable.\";\r\n container.appendChild(subtitle);\r\n\r\n const captureContainer = document.createElement(\"div\");\r\n captureContainer.style.cssText = `\r\n width: 100%;\r\n max-width: 400px;\r\n margin: 0 auto;\r\n position: relative;\r\n overflow: hidden;\r\n border-radius: 12px;\r\n background: ${this.theme.cardBg};\r\n border: 2px solid ${this.theme.border};\r\n `;\r\n container.appendChild(captureContainer);\r\n\r\n // Use the new DocumentCapture component with front/back support\r\n this.docCapture = new DocumentCapture();\r\n this.docCapture\r\n .capture(\r\n captureContainer,\r\n this.theme,\r\n this.selectedIdTypeName || this.selectedIdType,\r\n this.selectedRequiresBack\r\n )\r\n .then(async (result: DocumentCaptureResult) => {\r\n await this.processDocumentCaptureResult(result, captureContainer, container);\r\n })\r\n .catch((err: any) => {\r\n console.error(\"Document capture failed:\", err);\r\n this.showErrorStep(err.message || \"Document capture failed. Please try again.\");\r\n });\r\n }\r\n\r\n // ── W3: Identity Confirmation (data verification) ───────────────\r\n\r\n private renderConfirmIdentity(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:16px;padding:8px 0;\";\r\n\r\n // W14: Check retry limit before showing screen\r\n if (this._confirmRetries >= SmartComplyFlow.MAX_RETRIES) {\r\n this._renderRetryLimitReached(container);\r\n return;\r\n }\r\n\r\n // W13: Pre-warm camera silently while user reads this screen\r\n this._prewarmCamera();\r\n\r\n const iconWrap = document.createElement(\"div\");\r\n iconWrap.style.cssText = `width:64px;height:64px;border-radius:50%;background:${this.theme.primary}15;border:2px solid ${this.theme.primary}30;display:flex;align-items:center;justify-content:center;color:${this.theme.primary};`;\r\n iconWrap.innerHTML = icon(\"shield\", 28);\r\n container.appendChild(iconWrap);\r\n\r\n const title = document.createElement(\"h2\");\r\n title.style.cssText = `color:${this.theme.text};font-size:${TYPE.heading}px;font-weight:700;margin:0;`;\r\n title.textContent = this._ivsName ? `Is this you?` : \"Identity Confirmed\";\r\n container.appendChild(title);\r\n\r\n if (this._ivsName) {\r\n // Profile card\r\n const card = document.createElement(\"div\");\r\n card.style.cssText = `width:100%;padding:16px;border-radius:14px;background:${this.theme.cardBg};border:1.5px solid ${this.theme.border};text-align:left;display:flex;flex-direction:column;gap:10px;`;\r\n\r\n const rows: { label: string; value: string }[] = [\r\n { label: \"Name\", value: this._ivsName },\r\n ];\r\n if (this._ivsGender) {\r\n const gLabel = this._ivsGender.toLowerCase();\r\n rows.push({ label: \"Gender\", value: gLabel === \"m\" || gLabel === \"male\" || gLabel === \"1\" ? \"Male\" : gLabel === \"f\" || gLabel === \"female\" || gLabel === \"2\" ? \"Female\" : this._ivsGender });\r\n }\r\n rows.push({ label: \"ID Type\", value: _formatDocType(this.selectedIdType) || this.selectedIdTypeName || this.selectedIdType });\r\n\r\n rows.forEach(({ label, value }) => {\r\n const row = document.createElement(\"div\");\r\n row.style.cssText = \"display:flex;justify-content:space-between;align-items:center;\";\r\n const lEl = document.createElement(\"span\");\r\n lEl.style.cssText = `color:${this.theme.textMuted};font-size:12px;font-weight:500;`;\r\n lEl.textContent = label;\r\n const vEl = document.createElement(\"span\");\r\n vEl.style.cssText = `color:${this.theme.text};font-size:13px;font-weight:600;max-width:60%;text-align:right;`;\r\n vEl.textContent = value;\r\n row.appendChild(lEl);\r\n row.appendChild(vEl);\r\n card.appendChild(row);\r\n });\r\n container.appendChild(card);\r\n } else {\r\n const sub = document.createElement(\"p\");\r\n sub.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin:0;max-width:280px;line-height:1.6;`;\r\n sub.textContent = \"Your details have been confirmed. Please continue to the face check.\";\r\n container.appendChild(sub);\r\n }\r\n\r\n const yesBtn = this.createPrimaryButton(\"Yes, that's me — continue\");\r\n this._onceClick(yesBtn, () => {\r\n // B5: Reset retry counter on successful confirmation\r\n this._confirmRetries = 0;\r\n this.showStep(\"liveness\");\r\n });\r\n container.appendChild(yesBtn);\r\n\r\n const noBtn = this.createSecondaryButton(\"No, use a different ID\");\r\n this._onceClick(noBtn, () => {\r\n this._confirmRetries++;\r\n this._ivsName = \"\";\r\n this._ivsGender = \"\";\r\n this.identityCheckId = null;\r\n this.verificationResult = null;\r\n this.showStep(\"id_input\");\r\n });\r\n container.appendChild(noBtn);\r\n }\r\n\r\n // ── W4: Document Confirmation (document verification) ────────────\r\n\r\n private renderDocumentConfirm(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:14px;padding:8px 0;\";\r\n\r\n // W14: Check retry limit\r\n if (this._confirmRetries >= SmartComplyFlow.MAX_RETRIES) {\r\n this._renderRetryLimitReached(container);\r\n return;\r\n }\r\n\r\n // OCR reported \"done\" but extracted nothing usable — do not let the user\r\n // click through to liveness with no verified identity data. This is the\r\n // ocr_status===\"done\"-with-empty-fields sibling of the poll timeout case\r\n // (which _renderOcrTimeout already catches in renderOcrGate).\r\n if (!this._ocrName && !this._ocrDocNumber && !this._ocrExpiry) {\r\n this._renderOcrTimeout(container);\r\n return;\r\n }\r\n\r\n // W13: Pre-warm camera while user reads — but only if the document photo\r\n // itself came from the camera. Pre-warming here when the user uploaded\r\n // from gallery means requesting camera access before they've touched\r\n // their camera at all this session, which reads as an unexplained/\r\n // unexpected prompt rather than a seamless continuation.\r\n if (this._documentViaCamera) this._prewarmCamera();\r\n\r\n // Step badge — pairs with DocumentCapture.showPreview's \"Step 1 of 2\"\r\n // badge shown right after capture, so this doesn't read as unexplained\r\n // repetition: that screen checked photo clarity, this one checks the\r\n // OCR-extracted data.\r\n const stepBadge = document.createElement(\"div\");\r\n stepBadge.style.cssText = `\r\n display:inline-flex;align-items:center;gap:5px;\r\n padding:3px 11px;border-radius:${RADIUS.pill}px;\r\n font-size:10.5px;font-weight:600;letter-spacing:0.2px;\r\n color:${this.theme.primary};background:${this.theme.primary}15;border:1px solid ${this.theme.primary}30;\r\n `;\r\n stepBadge.textContent = \"STEP 2 OF 2 · CHECK WHAT WE READ\";\r\n container.appendChild(stepBadge);\r\n\r\n const iconWrap = document.createElement(\"div\");\r\n iconWrap.style.cssText = `width:64px;height:64px;border-radius:50%;background:${this.theme.primary}15;border:2px solid ${this.theme.primary}30;display:flex;align-items:center;justify-content:center;color:${this.theme.primary};`;\r\n iconWrap.innerHTML = icon(\"document\", 28);\r\n container.appendChild(iconWrap);\r\n\r\n const title = document.createElement(\"h2\");\r\n title.style.cssText = `color:${this.theme.text};font-size:${TYPE.heading}px;font-weight:700;margin:0;`;\r\n title.textContent = \"Are these your details?\";\r\n container.appendChild(title);\r\n\r\n const sub = document.createElement(\"p\");\r\n sub.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin:0;max-width:280px;line-height:1.5;`;\r\n sub.textContent = \"We read the following from your document. Please confirm they are correct before continuing.\";\r\n container.appendChild(sub);\r\n\r\n // Document face thumbnail if available\r\n if (this._ocrFaceImageUrl) {\r\n const faceWrap = document.createElement(\"div\");\r\n faceWrap.style.cssText = `width:80px;height:80px;border-radius:50%;overflow:hidden;border:3px solid ${this.theme.primary};flex-shrink:0;margin:0 auto;`;\r\n const faceImg = document.createElement(\"img\");\r\n faceImg.src = this._ocrFaceImageUrl;\r\n faceImg.alt = \"Photo from your document\";\r\n faceImg.style.cssText = \"width:100%;height:100%;object-fit:cover;\";\r\n faceWrap.appendChild(faceImg);\r\n container.appendChild(faceWrap);\r\n }\r\n\r\n // Expiry soon warning\r\n if (this._ocrExpirySoon && !this._ocrIsExpired) {\r\n const warn = document.createElement(\"div\");\r\n warn.style.cssText = `width:100%;padding:10px 14px;border-radius:10px;background:${this.theme.warning}18;border:1px solid ${this.theme.warning}40;color:${this.theme.warning};font-size:12px;text-align:left;line-height:1.5;`;\r\n warn.textContent = \"⚠️ Your document expires soon. Some services may not accept it, but you can still continue.\";\r\n container.appendChild(warn);\r\n }\r\n\r\n // Details card — show whatever OCR returned, never block on missing fields\r\n const card = document.createElement(\"div\");\r\n card.style.cssText = `width:100%;padding:14px 16px;border-radius:14px;background:${this.theme.cardBg};border:1.5px solid ${this.theme.border};text-align:left;display:flex;flex-direction:column;gap:10px;`;\r\n\r\n const docRows: { label: string; value: string }[] = [];\r\n if (this._ocrName) docRows.push({ label: \"Name\", value: this._ocrName });\r\n if (this._ocrDocNumber) docRows.push({ label: \"Document No\", value: this._ocrDocNumber });\r\n if (this._ocrExpiry) docRows.push({ label: \"Expires\", value: this._ocrExpiry });\r\n docRows.push({ label: \"Document Type\", value: _formatDocType(this.selectedIdType) || this.selectedIdTypeName });\r\n\r\n if (docRows.length === 0) {\r\n const fallback = document.createElement(\"div\");\r\n fallback.style.cssText = `color:${this.theme.textSecondary};font-size:12px;`;\r\n fallback.textContent = \"Document scanned successfully.\";\r\n card.appendChild(fallback);\r\n } else {\r\n docRows.forEach(({ label, value }) => {\r\n if (!value) return;\r\n const row = document.createElement(\"div\");\r\n row.style.cssText = \"display:flex;justify-content:space-between;align-items:center;\";\r\n const lEl = document.createElement(\"span\");\r\n lEl.style.cssText = `color:${this.theme.textMuted};font-size:12px;font-weight:500;`;\r\n lEl.textContent = label;\r\n const vEl = document.createElement(\"span\");\r\n vEl.style.cssText = `color:${this.theme.text};font-size:13px;font-weight:600;max-width:60%;text-align:right;`;\r\n vEl.textContent = value;\r\n row.appendChild(lEl);\r\n row.appendChild(vEl);\r\n card.appendChild(row);\r\n });\r\n }\r\n container.appendChild(card);\r\n\r\n const yesBtn = this.createPrimaryButton(\"Yes, continue\");\r\n this._onceClick(yesBtn, () => {\r\n // B5: Reset retry counter on successful confirmation\r\n this._confirmRetries = 0;\r\n this.showStep(\"liveness\");\r\n });\r\n container.appendChild(yesBtn);\r\n\r\n const noBtn = this.createSecondaryButton(\"No, retake document\");\r\n this._onceClick(noBtn, () => {\r\n // Destroy the old DocumentCapture instance before replacing it —\r\n // matches the header back-button handler for this same step (see\r\n // backTargets.document_confirm) so retaking via either path releases\r\n // any still-open camera stream the same way, instead of silently\r\n // overwriting this.docCapture without cleanup.\r\n this.docCapture?.destroy();\r\n this._confirmRetries++;\r\n this._ocrName = \"\"; this._ocrDocNumber = \"\"; this._ocrExpiry = \"\";\r\n this._ocrFaceImageUrl = \"\"; this._ocrIsExpired = false; this._ocrExpirySoon = false;\r\n this.livenessEntryId = null;\r\n this.documentBlob = null; this.documentBackBlob = null;\r\n this.showStep(\"document_capture\");\r\n });\r\n container.appendChild(noBtn);\r\n }\r\n\r\n // ── W6+W7+W8: OCR Gate (document verification) ───────────────────\r\n\r\n private renderOcrGate(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;gap:14px;padding:20px 0;text-align:center;\";\r\n\r\n container.appendChild(renderSpinner(this.theme, { size: 52, icon: icon(\"document\", 20) }));\r\n\r\n const statusEl = document.createElement(\"div\");\r\n statusEl.setAttribute(\"aria-live\", \"polite\");\r\n statusEl.style.cssText = `color:${this.theme.text};font-size:${TYPE.base}px;font-weight:600;`;\r\n statusEl.textContent = \"Reading your document…\";\r\n container.appendChild(statusEl);\r\n\r\n const subEl = document.createElement(\"div\");\r\n subEl.style.cssText = `color:${this.theme.textSecondary};font-size:12px;max-width:260px;line-height:1.5;`;\r\n subEl.textContent = \"This usually takes 5–15 seconds. Please wait.\";\r\n container.appendChild(subEl);\r\n\r\n if (!this.livenessEntryId) {\r\n this.showErrorStep(\"Document upload failed. Please try again.\");\r\n return;\r\n }\r\n\r\n const entryId = this.livenessEntryId;\r\n // Backend OCR (process_document_ocr) now submits + polls SmartComply\r\n // synchronously in one Celery task, no webhook — up to ~40s per side\r\n // (MAX_POLL_ATTEMPTS x POLL_INTERVAL_SECONDS in smartcomply_ocr.py),\r\n // so a two-sided document (front + back) can take up to ~80s end to\r\n // end. 45 x 2s = 90s comfortably covers that worst case while the loop\r\n // still exits immediately once ocrDone is true — the common case\r\n // (OCR done in a few seconds) is exactly as fast as before.\r\n const MAX_POLLS = 45; // 45 x 2s = 90s timeout\r\n let polls = 0;\r\n\r\n const poll = async () => {\r\n if (this.isDestroyed) return;\r\n polls++;\r\n try {\r\n const result = await this.sdk.liveness.pollResult(entryId) as any;\r\n\r\n // W7: Expired document — stop, do not proceed to liveness\r\n if (result.is_expired === true) {\r\n container.innerHTML = \"\";\r\n this._renderExpiredDocument(container);\r\n return;\r\n }\r\n\r\n // W8: OCR quality fail — offer retake\r\n if (result.ocr_quality_failed === true) {\r\n container.innerHTML = \"\";\r\n this._renderOcrQualityFail(container, result.ocr_rejection_reason);\r\n return;\r\n }\r\n\r\n // OCR complete — store data and show confirmation screen\r\n const ocrDone = result.ocr_status === \"done\" || result.ocr_status === \"ocr_complete\"\r\n || result.ocr_name || result.ocr_document_number || result.ocr_expiry_date;\r\n\r\n if (ocrDone) {\r\n this._ocrName = result.ocr_name || \"\";\r\n this._ocrDocNumber = result.ocr_document_number || \"\";\r\n this._ocrExpiry = result.ocr_expiry_date || \"\";\r\n this._ocrFaceImageUrl = result.ocr_face_image_url || \"\";\r\n this._ocrIsExpired = result.is_expired === true;\r\n\r\n // B8: Normalise expiry date string before parsing — OCR may return\r\n // DD/MM/YYYY, DD-MM-YYYY, YYYY-MM-DD, or \"12 May 2029\" etc.\r\n // new Date() alone is locale-dependent on non-ISO strings.\r\n if (this._ocrExpiry) {\r\n const expDate = _parseOcrDate(this._ocrExpiry);\r\n if (expDate) {\r\n const sixMonths = new Date();\r\n sixMonths.setMonth(sixMonths.getMonth() + 6);\r\n this._ocrExpirySoon = expDate <= sixMonths && expDate > new Date();\r\n }\r\n }\r\n\r\n this.showStep(\"document_confirm\");\r\n return;\r\n }\r\n\r\n // Still pending — keep polling. Past ~20s (the old timeout window)\r\n // update the message so a long-but-healthy OCR pass (front+back can\r\n // take up to ~80s server-side) doesn't look frozen to the user.\r\n if (polls === 10 && !this.isDestroyed) {\r\n statusEl.textContent = \"Still reading your document…\";\r\n subEl.textContent = \"Documents with a back side can take a little longer. Please keep waiting.\";\r\n }\r\n if (polls < MAX_POLLS && !this.isDestroyed) {\r\n this._ocrPollTimer = setTimeout(poll, 2000);\r\n } else if (!this.isDestroyed) {\r\n // Genuinely exhausted the whole window with nothing usable read —\r\n // stop here instead of letting an unverified identity through to\r\n // liveness. document_confirm never blocks on missing fields (by\r\n // design, so a partial-but-real OCR read still lets the user\r\n // continue), so the gate has to live here, before that screen.\r\n container.innerHTML = \"\";\r\n this._renderOcrTimeout(container);\r\n }\r\n } catch {\r\n if (polls < MAX_POLLS && !this.isDestroyed) {\r\n this._ocrPollTimer = setTimeout(poll, 3000);\r\n } else if (!this.isDestroyed) {\r\n this.showErrorStep(\"We could not read your document. Please check your connection and try again.\");\r\n }\r\n }\r\n };\r\n\r\n // First poll after 3s — give OCR submission time to start\r\n this._ocrPollTimer = setTimeout(poll, 3000);\r\n }\r\n\r\n private _renderExpiredDocument(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:14px;padding:20px 0;\";\r\n const icon = document.createElement(\"div\");\r\n icon.style.cssText = `width:72px;height:72px;border-radius:50%;background:${this.theme.errorBg};border:3px solid ${this.theme.error};display:flex;align-items:center;justify-content:center;font-size:28px;`;\r\n icon.textContent = \"📅\";\r\n container.appendChild(icon);\r\n const t = document.createElement(\"h2\");\r\n t.style.cssText = `color:${this.theme.text};font-size:${TYPE.heading}px;font-weight:700;margin:0;`;\r\n t.textContent = \"Document Expired\";\r\n container.appendChild(t);\r\n const d = document.createElement(\"p\");\r\n d.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin:0;max-width:280px;line-height:1.6;`;\r\n d.textContent = \"The document you submitted has expired. Please use a valid, current ID.\";\r\n container.appendChild(d);\r\n const retryBtn = this.createPrimaryButton(\"Try a different document\");\r\n retryBtn.addEventListener(\"click\", () => {\r\n this.livenessEntryId = null; this.documentBlob = null; this.documentBackBlob = null;\r\n this.showStep(\"document_capture\");\r\n });\r\n container.appendChild(retryBtn);\r\n const endBtn = this.createSecondaryButton(\"End session\");\r\n endBtn.addEventListener(\"click\", () => { this.options.onError?.(new Error(\"Document expired\")); this.close(); });\r\n container.appendChild(endBtn);\r\n }\r\n\r\n private _renderOcrQualityFail(container: HTMLElement, reason?: string): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:14px;padding:20px 0;\";\r\n const icon = document.createElement(\"div\");\r\n icon.style.cssText = `width:72px;height:72px;border-radius:50%;background:${this.theme.errorBg};border:3px solid ${this.theme.error};display:flex;align-items:center;justify-content:center;font-size:28px;`;\r\n icon.textContent = \"🔍\";\r\n container.appendChild(icon);\r\n const t = document.createElement(\"h2\");\r\n t.style.cssText = `color:${this.theme.text};font-size:${TYPE.heading}px;font-weight:700;margin:0;`;\r\n // \"Photo unclear\" only fits the blur/lighting reasons below — a wrong\r\n // document entirely (mismatch/no-document-detected) isn't a clarity\r\n // problem, so give it its own, accurate title instead of implying the\r\n // user just needs better lighting.\r\n const isWrongDocument = reason === \"document_not_detected\"\r\n || reason === \"document_type_mismatch\"\r\n || reason === \"country_mismatch\";\r\n t.textContent = isWrongDocument ? \"That Doesn't Look Right\" : \"Document Photo Unclear\";\r\n container.appendChild(t);\r\n const msg = reason === \"image_too_blurry\" ? \"Your document photo is too blurry. Please retake it in good lighting with a steady hand.\"\r\n : reason === \"image_too_dark\" ? \"Your document photo is too dark. Please retake it in better lighting.\"\r\n : reason === \"image_too_bright\" ? \"Your document photo has too much glare. Please reduce reflections and retake.\"\r\n : reason === \"document_not_detected\" ? \"We could not detect a document in the photo. Please make sure you're photographing the actual ID document, with the full document visible.\"\r\n : reason === \"document_type_mismatch\" ? \"This document doesn't match the ID type you selected. Please upload the correct document, or go back and choose the matching type.\"\r\n : reason === \"country_mismatch\" ? \"This document doesn't appear to be from the expected country. Please check you've selected the right country and document.\"\r\n // Any other reason: if it already reads like a real sentence (starts\r\n // capitalized, has spaces — matches the backend's own\r\n // _safe_failure_reason heuristic for \"already user-facing\"), show it\r\n // as-is instead of masking a specific, accurate reason behind a\r\n // generic \"bad lighting\" message that may not describe what's wrong.\r\n : reason && /^[A-Z]/.test(reason) && reason.includes(\" \") ? reason\r\n : \"We could not read your document clearly. Please retake the photo in good lighting with no glare.\";\r\n const d = document.createElement(\"p\");\r\n d.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin:0;max-width:280px;line-height:1.6;`;\r\n d.textContent = msg;\r\n container.appendChild(d);\r\n const retryBtn = this.createPrimaryButton(\"Retake photo\");\r\n retryBtn.addEventListener(\"click\", () => {\r\n this.livenessEntryId = null; this.documentBlob = null; this.documentBackBlob = null;\r\n this.showStep(\"document_capture\");\r\n });\r\n container.appendChild(retryBtn);\r\n }\r\n\r\n /**\r\n * OCR ran to completion but never produced a single usable field within\r\n * the poll window — do not let the flow reach liveness with no verified\r\n * identity data. Distinct from _renderOcrQualityFail (a bad photo) since\r\n * this covers a genuinely stuck/slow OCR pass instead of a rejected image.\r\n */\r\n private _renderOcrTimeout(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:14px;padding:20px 0;\";\r\n const icon = document.createElement(\"div\");\r\n icon.style.cssText = `width:72px;height:72px;border-radius:50%;background:${this.theme.errorBg};border:3px solid ${this.theme.error};display:flex;align-items:center;justify-content:center;font-size:28px;`;\r\n icon.textContent = \"⏱️\";\r\n container.appendChild(icon);\r\n const t = document.createElement(\"h2\");\r\n t.style.cssText = `color:${this.theme.text};font-size:${TYPE.heading}px;font-weight:700;margin:0;`;\r\n t.textContent = \"Couldn't Read Your Document\";\r\n container.appendChild(t);\r\n const d = document.createElement(\"p\");\r\n d.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin:0;max-width:280px;line-height:1.6;`;\r\n d.textContent = \"We weren't able to read any details from your document. Please retake the photo in good lighting, with all four corners visible.\";\r\n container.appendChild(d);\r\n const retryBtn = this.createPrimaryButton(\"Retake photo\");\r\n retryBtn.addEventListener(\"click\", () => {\r\n this.livenessEntryId = null; this.documentBlob = null; this.documentBackBlob = null;\r\n this.showStep(\"document_capture\");\r\n });\r\n container.appendChild(retryBtn);\r\n }\r\n\r\n // ── W11: You're all done (end-user final screen) ─────────────────\r\n\r\n private renderDone(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:16px;padding:24px 0;\";\r\n container.setAttribute(\"role\", \"status\");\r\n\r\n // B7: Fire onComplete immediately when the done screen renders — the end\r\n // user has completed their part regardless of whether they click Close.\r\n // Firing here means the integrator always gets the event even if the user\r\n // closes the modal via the ✕ button instead of the Close button.\r\n this.options.onComplete?.({\r\n entryId: this.livenessEntryId || 0,\r\n sessionId: this.sdk.sessionToken,\r\n status: \"processing\",\r\n submittedAt: new Date().toISOString(),\r\n verificationResult: this.verificationResult || undefined,\r\n });\r\n\r\n const iconWrap = document.createElement(\"div\");\r\n iconWrap.style.cssText = `width:80px;height:80px;border-radius:50%;background:${this.theme.successBg};border:3px solid ${this.theme.success};display:flex;align-items:center;justify-content:center;color:${this.theme.success};animation:sc-pop 0.4s ease;`;\r\n iconWrap.innerHTML = icon(\"check\", 36);\r\n container.appendChild(iconWrap);\r\n\r\n const title = document.createElement(\"h2\");\r\n title.style.cssText = `color:${this.theme.text};font-size:${TYPE.headingLg}px;font-weight:700;margin:0;`;\r\n title.textContent = \"You're all done!\";\r\n container.appendChild(title);\r\n\r\n const desc = document.createElement(\"p\");\r\n desc.style.cssText = `color:${this.theme.textSecondary};font-size:14px;line-height:1.6;margin:0;max-width:300px;`;\r\n desc.textContent = \"Your verification is complete.\";\r\n container.appendChild(desc);\r\n\r\n // Subtle info line\r\n const info = document.createElement(\"div\");\r\n info.style.cssText = `color:${this.theme.textMuted};font-size:11px;display:flex;align-items:center;gap:4px;`;\r\n info.textContent = \"🔒 Your data is encrypted and secure\";\r\n container.appendChild(info);\r\n\r\n const doneBtn = this.createPrimaryButton(\"Close\");\r\n doneBtn.addEventListener(\"click\", () => {\r\n // onComplete already fired on render — just close the modal\r\n this.close();\r\n });\r\n container.appendChild(doneBtn);\r\n }\r\n\r\n // ── W14: Retry limit reached ─────────────────────────────────────\r\n\r\n private _renderRetryLimitReached(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;align-items:center;text-align:center;gap:14px;padding:24px 0;\";\r\n const icon = document.createElement(\"div\");\r\n icon.style.cssText = `width:72px;height:72px;border-radius:50%;background:${this.theme.errorBg};border:3px solid ${this.theme.error};display:flex;align-items:center;justify-content:center;font-size:28px;`;\r\n icon.textContent = \"⚠️\";\r\n container.appendChild(icon);\r\n const t = document.createElement(\"h2\");\r\n t.style.cssText = `color:${this.theme.text};font-size:${TYPE.heading}px;font-weight:700;margin:0;`;\r\n t.textContent = \"Unable to Complete Verification\";\r\n container.appendChild(t);\r\n const d = document.createElement(\"p\");\r\n d.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin:0;max-width:280px;line-height:1.6;`;\r\n d.textContent = \"We were unable to complete your verification at this time. Please contact support or try again later.\";\r\n container.appendChild(d);\r\n const closeBtn = this.createPrimaryButton(\"Close\");\r\n closeBtn.addEventListener(\"click\", () => { this.options.onError?.(new Error(\"Retry limit reached\")); this.close(); });\r\n container.appendChild(closeBtn);\r\n }\r\n\r\n // ── W13: Camera pre-warm ─────────────────────────────────────────\r\n\r\n private _prewarmCamera(): void {\r\n if (this._prewarmedStream || this.isDestroyed) return;\r\n navigator.mediaDevices?.getUserMedia?.({ video: { facingMode: \"user\" } })\r\n .then(stream => {\r\n if (this.isDestroyed) { stream.getTracks().forEach(t => t.stop()); return; }\r\n this._prewarmedStream = stream;\r\n })\r\n .catch(() => { /* silent — pre-warm is best effort */ });\r\n }\r\n\r\n /**\r\n * Process document capture result with front/back support\r\n */\r\n private async processDocumentCaptureResult(\r\n result: DocumentCaptureResult,\r\n captureContainer: HTMLElement,\r\n container: HTMLElement\r\n ): Promise<void> {\r\n // B2+P2: Compress both images once here. Do NOT assign documentBlob twice\r\n // (old code set it to the raw blob first, then overwrote with compressed).\r\n // processDocumentBlob also ran _compressImage — that second pass is removed\r\n // below so compression only happens once.\r\n this.documentBlob = await _compressImage(result.front, 1600, 0.85);\r\n this.documentBackBlob = result.back ? await _compressImage(result.back, 1600, 0.85) : null;\r\n this._documentViaCamera = result.viaCamera;\r\n\r\n // Process the front image — pass the already-compressed blob\r\n await this.processDocumentBlob(this.documentBlob, captureContainer, container);\r\n }\r\n\r\n /**\r\n * Process document blob - common method for both CameraView and DocumentCapture\r\n */\r\n private async processDocumentBlob(\r\n blob: Blob,\r\n captureContainer: HTMLElement,\r\n container: HTMLElement\r\n ): Promise<void> {\r\n const maxRetries = 2;\r\n let retryCount = 0;\r\n\r\n const attemptProcessing = async (): Promise<void> => {\r\n try {\r\n // Validate blob — compression already done in processDocumentCaptureResult (P2)\r\n if (!blob || blob.size === 0) {\r\n throw new Error(\"Failed to capture document. Please try again.\");\r\n }\r\n if (blob.size > 5 * 1024 * 1024) {\r\n throw new Error(\"Document image is too large. Please retake in better lighting or use a clearer photo.\");\r\n }\r\n\r\n this.documentBlob = blob;\r\n\r\n // Show scanning state\r\n captureContainer.innerHTML = \"\";\r\n captureContainer.style.cssText += \"display:flex;flex-direction:column;align-items:center;gap:14px;padding:28px 20px;\";\r\n captureContainer.appendChild(renderSpinner(this.theme, { size: 52, icon: icon(\"search\", 20) }));\r\n captureContainer.insertAdjacentHTML(\"beforeend\", `\r\n <div style=\"color:${this.theme.text};font-size:14px;font-weight:600;\">Scanning document...</div>\r\n <div style=\"color:${this.theme.textSecondary};font-size:12px;text-align:center;max-width:200px;line-height:1.5;\">Running OCR and verifying your identity</div>`);\r\n\r\n // Create liveness entry with document.\r\n // Use the first collected field value as identifier when available\r\n // (document flow has no data-verification step, so collectedFields is\r\n // empty — fall back to the selected ID type code so the webhook\r\n // subject.identifier is at least human-meaningful, not a raw timestamp).\r\n const identifier = Object.values(this.collectedFields)[0]\r\n || this.idNumber\r\n || this.selectedIdType\r\n || `DOC-${Date.now()}`;\r\n const COUNTRY_CODES: Record<string, string> = {\r\n nigeria: \"NG\", ghana: \"GH\", kenya: \"KE\",\r\n south_africa: \"ZA\", united_states: \"US\", united_kingdom: \"GB\", global: \"US\",\r\n };\r\n const country = COUNTRY_CODES[this.selectedCountry] || this.selectedCountry.toUpperCase().slice(0, 2);\r\n\r\n const deviceMeta = collectDeviceMetadata();\r\n let createResult;\r\n try {\r\n createResult = await this.sdk.liveness.create({\r\n identifier,\r\n identifier_type: this.selectedIdType,\r\n country,\r\n challenge_actions: [\"BLINK\"],\r\n document: blob,\r\n document_back: this.documentBackBlob || undefined,\r\n device_type: deviceMeta.device_type,\r\n os_name: deviceMeta.os_name,\r\n browser_timezone: deviceMeta.browser_timezone,\r\n fingerprint_id: deviceMeta.fingerprint_id,\r\n });\r\n } catch (apiError: any) {\r\n // Handle specific network and API errors\r\n if (apiError.message?.includes('fetch') || apiError.message?.includes('network') || apiError.code === 'NETWORK_ERROR') {\r\n throw new Error(\"Network connection failed. Please check your internet connection and try again.\");\r\n } else if (apiError.message?.includes('413') || apiError.message?.includes('too large')) {\r\n throw new Error(\"Document image is too large. Please use a smaller image or retake the photo.\");\r\n } else if (apiError.message?.includes('415') || apiError.message?.includes('format')) {\r\n throw new Error(\"Unsupported image format. Please use JPEG or PNG images.\");\r\n } else if (apiError.message?.includes('401') || apiError.message?.includes('unauthorized')) {\r\n throw new Error(\"Session expired. Please refresh the page and try again.\");\r\n } else if (apiError.message?.includes('429') || apiError.message?.includes('rate limit')) {\r\n throw new Error(\"Too many requests. Please wait a moment and try again.\");\r\n } else {\r\n throw new Error(apiError.message || \"Failed to process document. Please try again.\");\r\n }\r\n }\r\n\r\n this.livenessEntryId = createResult.id;\r\n\r\n // W6: Route to OCR gate — poll until OCR result is ready, validate\r\n // expiry/quality, then show document_confirm before liveness starts.\r\n this.showStep(\"ocr_gate\");\r\n\r\n } catch (err: any) {\r\n console.error(\"Document processing failed:\", err);\r\n \r\n if (retryCount < maxRetries) {\r\n retryCount++;\r\n console.log(`Retrying document processing (attempt ${retryCount}/${maxRetries})`);\r\n \r\n // Show retry message\r\n if (captureContainer) {\r\n captureContainer.innerHTML = \"\";\r\n captureContainer.style.cssText += \"display:flex;flex-direction:column;align-items:center;gap:16px;padding:28px 20px;text-align:center;\";\r\n captureContainer.appendChild(renderSpinner(this.theme, { size: 52, icon: icon(\"refresh\", 20) }));\r\n captureContainer.insertAdjacentHTML(\"beforeend\", `\r\n <div style=\"color:${this.theme.text};font-size:14px;font-weight:600;\">Retrying...</div>\r\n <div style=\"color:${this.theme.textSecondary};font-size:12px;max-width:240px;line-height:1.5;\">Attempt ${retryCount} of ${maxRetries}</div>`);\r\n }\r\n \r\n // Wait before retry\r\n await new Promise(resolve => setTimeout(resolve, 2000));\r\n return attemptProcessing();\r\n } else {\r\n // Final retry failed, show detailed error\r\n this.handleDocumentProcessingError(err, captureContainer);\r\n }\r\n }\r\n };\r\n\r\n await attemptProcessing();\r\n }\r\n\r\n private handleDocumentProcessingError(error: any, captureContainer: HTMLElement): void {\r\n // Map technical errors to user-friendly messages — never pass raw error strings\r\n let userMessage = \"We could not verify your document. Please try again.\";\r\n let canRetry = true;\r\n\r\n const raw = (error?.message || \"\").toLowerCase();\r\n if (raw.includes(\"expired\")) {\r\n userMessage = \"The document you submitted has expired. Please use a valid, current ID.\";\r\n canRetry = false;\r\n } else if (raw.includes(\"quality too low\") || raw.includes(\"blurry\") || raw.includes(\"blur\")) {\r\n userMessage = \"The document photo isn't clear enough. Please retake it in good lighting with no glare.\";\r\n } else if (raw.includes(\"not detected\") || raw.includes(\"document_not_detected\")) {\r\n userMessage = \"We could not detect a document in the photo. Please ensure the full ID is visible and try again.\";\r\n } else if (raw.includes(\"network\") || raw.includes(\"fetch\") || raw.includes(\"connection\")) {\r\n userMessage = \"A connection error occurred. Please check your internet and try again.\";\r\n } else if (raw.includes(\"too large\") || raw.includes(\"413\")) {\r\n userMessage = \"The document image is too large. Please retake the photo.\";\r\n } else if (raw.includes(\"format\") || raw.includes(\"415\")) {\r\n userMessage = \"Unsupported image format. Please use JPEG or PNG.\";\r\n } else if (raw.includes(\"type mismatch\") || raw.includes(\"document_type_mismatch\")) {\r\n userMessage = \"The document does not match the selected ID type. Please choose the correct ID type.\";\r\n }\r\n\r\n if (captureContainer) {\r\n // Build with DOM — never interpolate user-derived content into innerHTML\r\n const wrap = document.createElement(\"div\");\r\n wrap.style.cssText = \"display:flex;flex-direction:column;align-items:center;gap:16px;padding:28px 20px;text-align:center;\";\r\n wrap.setAttribute(\"role\", \"alert\");\r\n\r\n const icon = document.createElement(\"div\");\r\n icon.style.cssText = `width:56px;height:56px;border-radius:50%;background:${this.theme.errorBg};border:3px solid ${this.theme.error};display:flex;align-items:center;justify-content:center;font-size:26px;`;\r\n icon.textContent = \"🔍\";\r\n wrap.appendChild(icon);\r\n\r\n const titleEl = document.createElement(\"div\");\r\n titleEl.style.cssText = `color:${this.theme.text};font-size:14px;font-weight:700;`;\r\n titleEl.textContent = \"Document Could Not Be Verified\";\r\n wrap.appendChild(titleEl);\r\n\r\n const msgEl = document.createElement(\"div\");\r\n msgEl.style.cssText = `color:${this.theme.textSecondary};font-size:13px;max-width:260px;line-height:1.6;`;\r\n msgEl.textContent = userMessage;\r\n wrap.appendChild(msgEl);\r\n\r\n if (canRetry) {\r\n const retryBtn = document.createElement(\"button\");\r\n retryBtn.textContent = \"Try Again\";\r\n retryBtn.setAttribute(\"aria-label\", \"Retake document photo\");\r\n retryBtn.style.cssText = `margin-top:8px;padding:12px 24px;border-radius:${RADIUS.sm}px;background:${this.theme.primary};color:#fff;border:none;font-size:14px;font-weight:600;cursor:pointer;`;\r\n retryBtn.addEventListener(\"click\", () => this.showStep(\"document_capture\"));\r\n wrap.appendChild(retryBtn);\r\n }\r\n\r\n captureContainer.innerHTML = \"\";\r\n captureContainer.appendChild(wrap);\r\n } else {\r\n this.showErrorStep(userMessage);\r\n }\r\n }\r\n\r\n // ── Liveness ────────────────────────────────────────────────────\r\n\r\n private renderLiveness(container: HTMLElement): void {\r\n container.style.cssText += \"display:flex;flex-direction:column;gap:14px;\";\r\n\r\n // Consumed unconditionally (even on the retry-limit-reached exit below)\r\n // so it never leaks into a later, unrelated render of this step.\r\n const restartedAfterBackground = this._restartedAfterBackground;\r\n this._restartedAfterBackground = false;\r\n\r\n // W13: Check retry limit before starting another liveness attempt\r\n if (this._livenessFailures >= SmartComplyFlow.MAX_RETRIES) {\r\n this._renderRetryLimitReached(container);\r\n return;\r\n }\r\n\r\n // Each render gets its own id so a stale attempt (e.g. abandoned after\r\n // the tab was backgrounded and we restarted the scan on return) can't\r\n // resolve/reject into the current one — see the visibilitychange\r\n // handler in mount(), which re-renders this step on return-to-foreground.\r\n const attemptId = ++this._livenessAttemptId;\r\n\r\n // Tell the user why the scan restarted instead of silently swapping\r\n // back into a fresh camera view with no explanation — a backgrounded\r\n // tab/app can leave the camera and detection loop in a stale state\r\n // (see the visibilitychange handler), so this restart is intentional,\r\n // but it must not look like the scan \"just resumed\" on its own.\r\n if (restartedAfterBackground) {\r\n const notice = document.createElement(\"div\");\r\n notice.setAttribute(\"role\", \"status\");\r\n notice.style.cssText = `width:100%;padding:10px 14px;border-radius:10px;background:${this.theme.warning}18;border:1px solid ${this.theme.warning}40;color:${this.theme.warning};font-size:12px;text-align:left;line-height:1.5;`;\r\n notice.textContent = \"Your scan was interrupted when you left the page. Starting over — please stay on this screen until it's done.\";\r\n container.appendChild(notice);\r\n }\r\n\r\n const title = this.createStepTitle(\"Face verification\");\r\n container.appendChild(title);\r\n\r\n const desc = document.createElement(\"div\");\r\n desc.style.cssText = `color:${this.theme.textSecondary};font-size:13px;margin-top:-8px;line-height:1.5;`;\r\n desc.textContent = \"Fit your face inside the oval, then blink naturally while looking around for a few seconds.\";\r\n container.appendChild(desc);\r\n\r\n // Liveness mount point\r\n const livenessContainer = document.createElement(\"div\");\r\n livenessContainer.style.cssText = \"margin:8px 0;width:100%;\";\r\n container.appendChild(livenessContainer);\r\n\r\n // W9: For data verification, identity is already held by the backend via\r\n // identity_check_id — the real ID number/type must not be re-sent, and the\r\n // backend now accepts liveness/create without them when identity_check is\r\n // set (see liveness.ts create(), which omits both fields entirely in that\r\n // case). Only build a real identifier for the non-data-verification path.\r\n const isDataVerification = !!this.identityCheckId;\r\n const identifier = isDataVerification\r\n ? \"\"\r\n : (this.idNumber || Object.values(this.collectedFields)[0] || this.selectedIdType || `DOC-${Date.now()}`);\r\n const identifierType = isDataVerification ? \"\" : this.selectedIdType;\r\n\r\n const COUNTRY_CODES: Record<string, string> = {\r\n nigeria: \"NG\", ghana: \"GH\", kenya: \"KE\",\r\n south_africa: \"ZA\", united_states: \"US\", united_kingdom: \"GB\", global: \"US\",\r\n };\r\n const country = COUNTRY_CODES[this.selectedCountry] || this.selectedCountry.toUpperCase().slice(0, 2);\r\n\r\n // Start liveness check (this handles camera, detection, recording, submission)\r\n // If livenessEntryId exists (document flow), reuse it instead of creating a new one\r\n this.sdk.liveness\r\n .startCheck(\r\n livenessContainer,\r\n {\r\n identifier,\r\n identifier_type: identifierType,\r\n country,\r\n document: this.documentBlob || undefined,\r\n document_back: this.documentBackBlob || undefined,\r\n identity_check: this.identityCheckId || undefined,\r\n verification_type: this.identityCheckId\r\n ? \"data_verification\"\r\n : this.documentBlob\r\n ? \"document_verification\"\r\n : \"liveness_only\",\r\n // B4: pass pre-warmed stream so camera.open() is skipped\r\n prewarmedStream: this._prewarmedStream || undefined,\r\n colors: {\r\n primary: this.theme.primary,\r\n success: this.theme.success,\r\n error: this.theme.error,\r\n warning: this.theme.warning,\r\n },\r\n },\r\n [...DEFAULT_CHALLENGE_ACTIONS] as ChallengeAction[],\r\n this.livenessEntryId || undefined\r\n )\r\n .then((result) => {\r\n // A stale attempt (superseded by a restart after the tab was\r\n // backgrounded) resolving late must not act on the current screen.\r\n if (attemptId !== this._livenessAttemptId) return;\r\n // W11: After submit, end user is done — show \"You're all done\" screen.\r\n // Backend processing continues in background; client receives webhook.\r\n // Track liveness failures for retry limit (W14).\r\n if (result.status === \"failed\") {\r\n this._livenessFailures++;\r\n }\r\n if (result.id) {\r\n this.livenessEntryId = result.id;\r\n }\r\n this.showStep(\"done\");\r\n })\r\n .catch((err) => {\r\n if (attemptId !== this._livenessAttemptId) return;\r\n // Only count a genuine verification failure against the retry limit —\r\n // a dropped camera, network blip, or upload failure isn't the user's\r\n // fault and shouldn't cost them one of their limited attempts. These\r\n // are infrastructure-layer errors (thrown/rejected); a real face-\r\n // match/quality failure comes back as a resolved result with\r\n // status \"failed\" instead (handled in .then() above).\r\n if (!_isInfrastructureError(err)) {\r\n this._livenessFailures++;\r\n }\r\n this.showErrorStep(_userFacingLivenessError(err));\r\n });\r\n }\r\n\r\n // ── Error ───────────────────────────────────────────────────────\r\n\r\n private showErrorStep(message: string): void {\r\n this.currentStep = \"error\";\r\n if (!this.contentArea) return;\r\n this.contentArea.innerHTML = \"\";\r\n\r\n const wrapper = document.createElement(\"div\");\r\n wrapper.setAttribute(\"role\", \"alert\");\r\n wrapper.style.cssText = `\r\n display:flex;flex-direction:column;align-items:center;\r\n text-align:center;gap:16px;padding:20px 0;\r\n `;\r\n\r\n // Classify the error into a user-friendly category\r\n const isCameraErr = /camera|permission|notallowed|notfound/i.test(message);\r\n const isNetworkErr = /network|timeout|connection|fetch/i.test(message);\r\n const isAuthErr = /session.*expired|token.*expired|authentication/i.test(message);\r\n const isDocQuality = /blurry|blur|quality|glare|dark|bright|lighting/i.test(message);\r\n const isExpiredDoc = /document.*expired|expired.*document/i.test(message);\r\n const isFaceMatch = /face.*match|selfie.*match|does not match/i.test(message);\r\n // Billing/wallet failures (e.g. WALLET_NOT_FOUND, INSUFFICIENT_BALANCE from\r\n // /v1/sdk/liveness/submit/) are an operator-facing problem, not something\r\n // the end user can act on — never show \"wallet\"/\"balance\" language to them.\r\n const isBillingErr = /wallet|balance|insufficient.*fund|payment.*required/i.test(message);\r\n\r\n const errorIconName: IconName = isCameraErr ? \"camera\"\r\n : isNetworkErr ? \"network\"\r\n : isAuthErr ? \"clock\"\r\n : isDocQuality ? \"search\"\r\n : isExpiredDoc ? \"calendar\"\r\n : isFaceMatch ? \"face\"\r\n : isBillingErr ? \"warning\"\r\n : \"close\";\r\n\r\n const errorTitle = isCameraErr ? \"Camera Access Required\"\r\n : isNetworkErr ? \"Connection Problem\"\r\n : isAuthErr ? \"Session Expired\"\r\n : isDocQuality ? \"Document Photo Unclear\"\r\n : isExpiredDoc ? \"Document Expired\"\r\n : isFaceMatch ? \"Face Match Failed\"\r\n : isBillingErr ? \"Verification Unavailable\"\r\n : \"Verification Unsuccessful\";\r\n\r\n // Map to user-facing guidance — never show raw internal message\r\n const userMessage = isCameraErr\r\n ? \"Please allow camera access in your browser settings and try again.\"\r\n : isNetworkErr\r\n ? \"Check your internet connection and try again.\"\r\n : isAuthErr\r\n ? \"Your session has expired. Please start again.\"\r\n : isDocQuality\r\n ? _sanitizeUserMessage(message) || \"Please retake your document photo in good lighting with no glare.\"\r\n : isExpiredDoc\r\n ? \"The document you submitted has expired. Please use a valid, current ID.\"\r\n : isFaceMatch\r\n ? \"Your selfie did not match the photo on your ID. Please ensure you are using your own valid document and face the camera directly.\"\r\n : isBillingErr\r\n ? \"Verification is temporarily unavailable. Please contact support.\"\r\n : _sanitizeUserMessage(message) || \"We were unable to complete your verification. Please try again.\";\r\n\r\n const iconWrap = document.createElement(\"div\");\r\n iconWrap.style.cssText = `\r\n width:72px;height:72px;border-radius:50%;\r\n display:flex;align-items:center;justify-content:center;\r\n color:${this.theme.error};\r\n background:${this.theme.errorBg};\r\n border:3px solid ${this.theme.error};\r\n `;\r\n iconWrap.innerHTML = icon(errorIconName, 28);\r\n wrapper.appendChild(iconWrap);\r\n\r\n const title = document.createElement(\"h2\");\r\n title.style.cssText = `color:${this.theme.text};font-size:${TYPE.heading}px;font-weight:700;margin:0;`;\r\n title.textContent = errorTitle;\r\n wrapper.appendChild(title);\r\n\r\n const desc = document.createElement(\"p\");\r\n desc.style.cssText = `color:${this.theme.textSecondary};font-size:14px;line-height:1.6;margin:0;max-width:300px;`;\r\n desc.textContent = userMessage;\r\n wrapper.appendChild(desc);\r\n\r\n const retryBtn = this.createPrimaryButton(\"Try Again\");\r\n retryBtn.setAttribute(\"aria-label\", \"Try verification again\");\r\n retryBtn.addEventListener(\"click\", () => {\r\n this.initialize();\r\n });\r\n wrapper.appendChild(retryBtn);\r\n\r\n const closeBtn = this.createSecondaryButton(\"Close\");\r\n closeBtn.setAttribute(\"aria-label\", \"Close verification widget\");\r\n closeBtn.addEventListener(\"click\", () => {\r\n this.options.onError?.(new Error(message));\r\n this.close();\r\n });\r\n wrapper.appendChild(closeBtn);\r\n\r\n this.contentArea.appendChild(wrapper);\r\n }\r\n\r\n // ─────────────────────────────────────────────────────────────────\r\n // UI Helpers\r\n // ─────────────────────────────────────────────────────────────────\r\n\r\n private createHeader(): HTMLElement {\r\n const header = document.createElement(\"div\");\r\n header.setAttribute(\"role\", \"banner\");\r\n header.style.cssText = `\r\n display:flex;align-items:center;justify-content:space-between;\r\n padding:11px 20px;border-bottom:1px solid ${this.theme.border};\r\n `;\r\n\r\n // Left: back button + brand\r\n const leftArea = document.createElement(\"div\");\r\n leftArea.style.cssText = \"display:flex;align-items:center;gap:8px;min-width:0;\";\r\n\r\n this.headerBackBtn = document.createElement(\"button\");\r\n this.headerBackBtn.innerHTML = \"←\";\r\n this.headerBackBtn.setAttribute(\"aria-label\", \"Go back to previous step\");\r\n this.headerBackBtn.style.cssText = `\r\n width:30px;height:30px;border-radius:${RADIUS.sm}px;flex-shrink:0;\r\n display:none;align-items:center;justify-content:center;\r\n border:1.5px solid ${this.theme.border};cursor:pointer;\r\n font-size:16px;line-height:1;\r\n background:${this.theme.cardBg};color:${this.theme.text};\r\n transition:all 0.2s ease;\r\n `;\r\n this.headerBackBtn.style.cssText += `:focus-visible{outline:2px solid ${this.theme.primary};outline-offset:2px;}`;\r\n this.headerBackBtn.addEventListener(\"mouseenter\", () => {\r\n if (this.headerBackBtn) {\r\n this.headerBackBtn.style.background = this.theme.shimmer;\r\n }\r\n });\r\n this.headerBackBtn.addEventListener(\"mouseleave\", () => {\r\n if (this.headerBackBtn) {\r\n this.headerBackBtn.style.background = this.theme.cardBg;\r\n }\r\n });\r\n leftArea.appendChild(this.headerBackBtn);\r\n\r\n // Client's per-config logo — hidden until a valid logo_url is known and\r\n // actually loads (createHeader() runs before initializeConfig()\r\n // resolves, see the \"Update brand logo\" patch-in in initialize() below).\r\n // No placeholder/spinner: an empty gap for a fraction of a second reads\r\n // better than a flash of a generic mark that isn't this client's.\r\n this.brandLogoImg = document.createElement(\"img\");\r\n this.brandLogoImg.alt = \"\";\r\n this.brandLogoImg.style.cssText = `\r\n height:28px;max-width:120px;object-fit:contain;flex-shrink:0;\r\n display:none;\r\n `;\r\n this.brandLogoImg.addEventListener(\"error\", () => {\r\n // A stale/unreachable logo_url must not leave a broken-image icon in\r\n // the header — fall back to text-only, same as no logo being set.\r\n if (this.brandLogoImg) this.brandLogoImg.style.display = \"none\";\r\n });\r\n leftArea.appendChild(this.brandLogoImg);\r\n\r\n this.brandLabel = document.createElement(\"div\");\r\n this.brandLabel.setAttribute(\"aria-label\", \"Verification provider\");\r\n this.brandLabel.style.cssText = `\r\n font-size:15px;font-weight:700;color:${this.theme.text};\r\n white-space:nowrap;overflow:hidden;text-overflow:ellipsis;\r\n `;\r\n this.brandLabel.textContent = this.sdkConfig?.brand_name || \"SmartComply\";\r\n leftArea.appendChild(this.brandLabel);\r\n header.appendChild(leftArea);\r\n\r\n // Step indicator: stage dots + label\r\n const stepIndicator = document.createElement(\"div\");\r\n stepIndicator.style.cssText = `\r\n display:flex;align-items:center;gap:8px;flex-shrink:0;\r\n `;\r\n\r\n this.stageDots = document.createElement(\"div\");\r\n this.stageDots.style.cssText = `display:flex;align-items:center;gap:4px;`;\r\n for (let i = 0; i < 2; i++) {\r\n const dot = document.createElement(\"span\");\r\n dot.style.cssText = `\r\n width:6px;height:6px;border-radius:50%;\r\n background:${this.theme.border};transition:background 0.2s ease;\r\n `;\r\n this.stageDots.appendChild(dot);\r\n }\r\n stepIndicator.appendChild(this.stageDots);\r\n\r\n this.stepLabel = document.createElement(\"div\");\r\n this.stepLabel.setAttribute(\"aria-live\", \"polite\");\r\n this.stepLabel.setAttribute(\"aria-atomic\", \"true\");\r\n this.stepLabel.style.cssText = `\r\n font-size:12px;color:${this.theme.textMuted};\r\n font-variant-numeric:tabular-nums;flex-shrink:0;\r\n `;\r\n stepIndicator.appendChild(this.stepLabel);\r\n header.appendChild(stepIndicator);\r\n\r\n // Close button\r\n const closeBtn = document.createElement(\"button\");\r\n closeBtn.innerHTML = \"✕\";\r\n closeBtn.setAttribute(\"aria-label\", \"Close identity verification\");\r\n closeBtn.style.cssText = `\r\n width:32px;height:32px;border-radius:${RADIUS.sm}px;flex-shrink:0;\r\n display:flex;align-items:center;justify-content:center;\r\n border:none;cursor:pointer;font-size:16px;\r\n background:${this.theme.shimmer};color:${this.theme.textMuted};\r\n transition:all 0.2s ease;\r\n `;\r\n closeBtn.addEventListener(\"mouseenter\", () => {\r\n closeBtn.style.background = this.theme.errorBg;\r\n closeBtn.style.color = this.theme.error;\r\n });\r\n closeBtn.addEventListener(\"mouseleave\", () => {\r\n closeBtn.style.background = this.theme.shimmer;\r\n closeBtn.style.color = this.theme.textMuted;\r\n });\r\n closeBtn.addEventListener(\"click\", () => this.close());\r\n header.appendChild(closeBtn);\r\n\r\n return header;\r\n }\r\n\r\n private createFooter(): HTMLElement {\r\n const footer = document.createElement(\"div\");\r\n footer.style.cssText = `\r\n padding:9px 20px;border-top:1px solid ${this.theme.border};\r\n display:flex;align-items:center;justify-content:center;gap:6px;\r\n `;\r\n\r\n const powered = document.createElement(\"span\");\r\n powered.style.cssText = `font-size:11px;color:${this.theme.textMuted};`;\r\n powered.textContent = \"Powered by \";\r\n\r\n const brand = document.createElement(\"a\");\r\n brand.href = \"https://adhere.smartcomply.com/\";\r\n brand.target = \"_blank\";\r\n brand.rel = \"noopener noreferrer\";\r\n brand.style.cssText = `font-size:11px;font-weight:700;color:${this.theme.primary};text-decoration:none;`;\r\n brand.textContent = \"Adhere\";\r\n brand.addEventListener(\"mouseenter\", () => { brand.style.textDecoration = \"underline\"; });\r\n brand.addEventListener(\"mouseleave\", () => { brand.style.textDecoration = \"none\"; });\r\n\r\n footer.appendChild(powered);\r\n footer.appendChild(brand);\r\n return footer;\r\n }\r\n\r\n private createStepTitle(text: string): HTMLElement {\r\n const el = document.createElement(\"h3\");\r\n el.style.cssText = `\r\n color:${this.theme.text};font-size:${TYPE.heading}px;font-weight:700;\r\n margin:0;\r\n `;\r\n el.textContent = text;\r\n return el;\r\n }\r\n\r\n private createOptionCard(\r\n title: string,\r\n subtitle: string,\r\n onClick: () => void\r\n ): HTMLElement {\r\n const card = document.createElement(\"button\");\r\n card.setAttribute(\"aria-label\", subtitle ? `${title}: ${subtitle}` : title);\r\n card.style.cssText = `\r\n width:100%;padding:13px 16px;border-radius:${RADIUS.md}px;\r\n background:${this.theme.cardBg};\r\n border:2px solid ${this.theme.border};\r\n cursor:pointer;text-align:left;\r\n display:flex;align-items:center;justify-content:space-between;\r\n transition:all 0.2s ease;\r\n `;\r\n card.addEventListener(\"mouseenter\", () => {\r\n card.style.borderColor = this.theme.primary;\r\n card.style.background = this.theme.shimmer;\r\n card.style.transform = \"translateY(-1px)\";\r\n });\r\n card.addEventListener(\"mouseleave\", () => {\r\n card.style.borderColor = this.theme.border;\r\n card.style.background = this.theme.cardBg;\r\n card.style.transform = \"translateY(0)\";\r\n });\r\n card.addEventListener(\"click\", onClick);\r\n\r\n const textWrap = document.createElement(\"div\");\r\n textWrap.style.cssText = \"flex:1 1 auto;min-width:0;\";\r\n\r\n const titleEl = document.createElement(\"div\");\r\n titleEl.style.cssText = `color:${this.theme.text};font-size:14px;font-weight:600;line-height:1.35;`;\r\n titleEl.textContent = title;\r\n textWrap.appendChild(titleEl);\r\n\r\n if (subtitle) {\r\n const subEl = document.createElement(\"div\");\r\n subEl.style.cssText = `color:${this.theme.textMuted};font-size:12px;line-height:1.4;margin-top:2px;`;\r\n subEl.textContent = subtitle;\r\n textWrap.appendChild(subEl);\r\n }\r\n\r\n const arrow = document.createElement(\"span\");\r\n arrow.style.cssText = `color:${this.theme.textMuted};font-size:18px;flex-shrink:0;margin-left:12px;line-height:1;`;\r\n arrow.textContent = \"→\";\r\n\r\n card.appendChild(textWrap);\r\n card.appendChild(arrow);\r\n return card;\r\n }\r\n\r\n private createPrimaryButton(text: string): HTMLButtonElement {\r\n const btn = document.createElement(\"button\");\r\n btn.textContent = text;\r\n btn.style.cssText = `\r\n width:100%;padding:14px;border-radius:${RADIUS.md}px;\r\n font-size:15px;font-weight:600;\r\n background:${this.theme.primary};color:#fff;\r\n border:none;cursor:pointer;\r\n transition:all 0.2s ease;\r\n box-shadow:0 2px 8px ${this.theme.primaryGlow};\r\n `;\r\n btn.addEventListener(\"mouseenter\", () => {\r\n btn.style.background = this.theme.primaryHover;\r\n btn.style.transform = \"translateY(-1px)\";\r\n });\r\n btn.addEventListener(\"mouseleave\", () => {\r\n btn.style.background = this.theme.primary;\r\n btn.style.transform = \"translateY(0)\";\r\n });\r\n return btn;\r\n }\r\n\r\n private createSecondaryButton(text: string): HTMLButtonElement {\r\n const btn = document.createElement(\"button\");\r\n btn.textContent = text;\r\n btn.style.cssText = `\r\n width:100%;padding:12px;border-radius:${RADIUS.md}px;\r\n font-size:14px;font-weight:500;\r\n background:transparent;color:${this.theme.textSecondary};\r\n border:none;cursor:pointer;\r\n transition:all 0.2s ease;\r\n `;\r\n btn.addEventListener(\"mouseenter\", () => {\r\n btn.style.color = this.theme.text;\r\n });\r\n btn.addEventListener(\"mouseleave\", () => {\r\n btn.style.color = this.theme.textSecondary;\r\n });\r\n return btn;\r\n }\r\n\r\n /** Click handler that fires once and disables the button, preventing a double-tap double-dispatch. */\r\n private _onceClick(btn: HTMLButtonElement, handler: () => void): void {\r\n btn.addEventListener(\"click\", () => {\r\n if (btn.disabled) return;\r\n btn.disabled = true;\r\n btn.style.opacity = \"0.6\";\r\n btn.style.cursor = \"default\";\r\n handler();\r\n });\r\n }\r\n\r\n private isDocumentFlow(): boolean {\r\n // 1. Check verification_type — handle both string and array from backend\r\n const vType = this.sdkConfig?.verification_type;\r\n if (vType) {\r\n const types: string[] = Array.isArray(vType) ? vType : [vType];\r\n if (types.includes(\"document_verification\")) return true;\r\n if (types.includes(\"data_verification\")) return false;\r\n }\r\n // 2. Fallback: inspect channel fields — any upload field = document flow\r\n const channels = this.sdkConfig?.channels || {};\r\n const allFields = (Object.values(channels) as any[])\r\n .flat()\r\n .flatMap((ch: any) => ch.fields || []);\r\n return allFields.some((f: any) => isUploadFieldType(f.type));\r\n }\r\n\r\n /**\r\n * True when the SDK Config is set to skip data/document verification\r\n * entirely and only run the liveness/selfie check — no country picker,\r\n * no ID-type picker, no ID-number entry or document capture. Unlike\r\n * isDocumentFlow(), there's no channel-shape fallback to infer this from:\r\n * a liveness-only config carries no channels at all, so the only signal\r\n * is verification_type itself.\r\n */\r\n private isLivenessOnlyFlow(): boolean {\r\n const vType = this.sdkConfig?.verification_type;\r\n if (!vType) return false;\r\n const types: string[] = Array.isArray(vType) ? vType : [vType];\r\n return types.includes(\"liveness_only\");\r\n }\r\n\r\n /**\r\n * The \"go back one step\" target for a given step, if that step is\r\n * navigable — shared by the header back button and the browser\r\n * back-button (popstate) handler in mount() so both agree on the same\r\n * step order.\r\n */\r\n private _getBackAction(step: StepName): (() => void) | undefined {\r\n const countries = Object.keys(this.sdkConfig?.channels || {});\r\n const backTargets: Partial<Record<StepName, () => void>> = {\r\n id_type: () => this.showStep(countries.length > 1 ? \"country\" : \"welcome\"),\r\n country: () => this.showStep(\"welcome\"),\r\n id_input: () => this.showStep(\"id_type\"),\r\n confirm_identity: () => this.showStep(\"id_input\"),\r\n document_capture: () => { this.docCapture?.destroy(); this.showStep(\"id_type\"); },\r\n document_confirm: () => { this.docCapture?.destroy(); this.showStep(\"document_capture\"); },\r\n };\r\n // liveness-only skips straight from welcome to liveness with nothing in\r\n // between — deliberately no backTargets[\"liveness\"] entry added here,\r\n // so the back button stays hidden on that step in this mode, same as\r\n // it already is for every other mode (liveness has no back target for\r\n // document/data flows either — nothing to go back to except closing).\r\n return backTargets[step];\r\n }\r\n\r\n private updateProgress(): void {\r\n const isLivenessOnly = this.isLivenessOnlyFlow();\r\n const isDocFlow = isLivenessOnly ? false : this.isDocumentFlow();\r\n const countries = Object.keys(this.sdkConfig?.channels || {});\r\n const singleCountry = countries.length <= 1;\r\n\r\n // Two-stage action steps — Stage 1: validate identity, Stage 2: liveness.\r\n // Liveness-only has no Stage 1 at all — welcome goes straight to\r\n // liveness — so stage1Steps stays empty and the progress bar reflects\r\n // a genuinely single-stage flow instead of implying a step that never\r\n // happens in this mode.\r\n const stage1Steps: StepName[] = isLivenessOnly\r\n ? []\r\n : isDocFlow\r\n ? ([\"country\", \"id_type\", \"document_capture\", \"ocr_gate\", \"document_confirm\"] as StepName[]).filter(s => !(s === \"country\" && singleCountry))\r\n : ([\"country\", \"id_type\", \"id_input\", \"confirm_identity\"] as StepName[]).filter(s => !(s === \"country\" && singleCountry));\r\n\r\n const stage2Steps: StepName[] = [\"liveness\"];\r\n const allActionSteps: StepName[] = [...stage1Steps, ...stage2Steps];\r\n\r\n const totalSteps = allActionSteps.length;\r\n const actionIndex = allActionSteps.indexOf(this.currentStep);\r\n\r\n const pct =\r\n this.currentStep === \"done\" ? 100\r\n : actionIndex >= 0 ? ((actionIndex + 1) / totalSteps) * 100\r\n : 0;\r\n\r\n if (this.progressBar) {\r\n this.progressBar.style.width = `${pct}%`;\r\n }\r\n\r\n // Stage label: \"Stage 1 of 2: Verify Identity\" / \"Stage 2 of 2: Face Check\"\r\n // — liveness-only has no Stage 1, so it just says \"Face Check\" with no\r\n // \"of 2\" framing, since there's only ever the one stage in this mode.\r\n if (this.stepLabel) {\r\n if (this.currentStep === \"loading\" || this.currentStep === \"welcome\") {\r\n this.stepLabel.textContent = \"\";\r\n } else if (this.currentStep === \"done\") {\r\n this.stepLabel.textContent = \"Complete ✓\";\r\n } else if (stage2Steps.includes(this.currentStep)) {\r\n this.stepLabel.textContent = isLivenessOnly ? \"Face Check\" : \"Stage 2 of 2: Face Check\";\r\n } else if (stage1Steps.includes(this.currentStep)) {\r\n this.stepLabel.textContent = isDocFlow ? \"Stage 1 of 2: Scan Document\" : \"Stage 1 of 2: Verify Identity\";\r\n } else {\r\n this.stepLabel.textContent = \"\";\r\n }\r\n }\r\n\r\n // W3: Stage dots — dot 1 lights once Stage 1 is reached, dot 2 once Stage 2 is reached\r\n if (this.stageDots) {\r\n const dots = Array.from(this.stageDots.children) as HTMLSpanElement[];\r\n const inStage1 = stage1Steps.includes(this.currentStep);\r\n const inStage2 = stage2Steps.includes(this.currentStep);\r\n const isComplete = this.currentStep === \"done\";\r\n const stage1Active = inStage1 || inStage2 || isComplete;\r\n const stage2Active = inStage2 || isComplete;\r\n if (dots[0]) dots[0].style.background = stage1Active ? this.theme.primary : this.theme.border;\r\n if (dots[1]) dots[1].style.background = stage2Active ? this.theme.primary : this.theme.border;\r\n }\r\n\r\n // Back button — show for navigable steps only\r\n if (this.headerBackBtn) {\r\n const backAction = this._getBackAction(this.currentStep);\r\n if (backAction) {\r\n this.headerBackBtn.style.display = \"flex\";\r\n const newBtn = this.headerBackBtn.cloneNode(true) as HTMLButtonElement;\r\n newBtn.style.cssText = this.headerBackBtn.style.cssText;\r\n this.headerBackBtn.parentNode?.replaceChild(newBtn, this.headerBackBtn);\r\n this.headerBackBtn = newBtn;\r\n this.headerBackBtn.addEventListener(\"mouseenter\", () => {\r\n if (this.headerBackBtn) this.headerBackBtn.style.background = this.theme.shimmer;\r\n });\r\n this.headerBackBtn.addEventListener(\"mouseleave\", () => {\r\n if (this.headerBackBtn) this.headerBackBtn.style.background = this.theme.cardBg;\r\n });\r\n this.headerBackBtn.addEventListener(\"click\", backAction);\r\n } else {\r\n this.headerBackBtn.style.display = \"none\";\r\n }\r\n }\r\n }\r\n\r\n private applyTheme(): void {\r\n if (this.overlay) {\r\n this.overlay.style.background = this.theme.overlay;\r\n }\r\n if (this.modal) {\r\n this.modal.style.background = this.theme.bg;\r\n this.modal.style.boxShadow = this.theme.shadow;\r\n }\r\n }\r\n\r\n private injectStyles(): void {\r\n if (document.getElementById(\"sc-flow-styles\")) return;\r\n\r\n const style = document.createElement(\"style\");\r\n style.id = \"sc-flow-styles\";\r\n style.textContent = `\r\n @keyframes sc-pop {\r\n 0% { transform: scale(0.8); opacity: 0; }\r\n 50% { transform: scale(1.05); }\r\n 100% { transform: scale(1); opacity: 1; }\r\n }\r\n #sc-flow-modal * {\r\n box-sizing: border-box;\r\n }\r\n #sc-flow-modal button:focus-visible,\r\n #sc-flow-modal select:focus-visible,\r\n #sc-flow-modal input:focus-visible {\r\n outline: 2px solid #3b82f6;\r\n outline-offset: 2px;\r\n }\r\n #sc-flow-modal::-webkit-scrollbar {\r\n width: 4px;\r\n }\r\n #sc-flow-content::-webkit-scrollbar {\r\n width: 4px;\r\n }\r\n #sc-flow-content::-webkit-scrollbar-thumb {\r\n background: rgba(128,128,128,0.3);\r\n border-radius: 4px;\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n}\r\n"],
|
|
5
|
+
"mappings": "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AI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,IAAG,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,GAAE,GAAG,GAAE,CAAC,KAAI,EAAE,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KA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",
|
|
6
6
|
"names": ["r", "ua", "t", "e", "e", "n", "r", "i", "s", "t", "o", "a", "c", "h", "u", "l", "f", "ms", "bs", "bs", "s", "d", "i", "_", "fn", "r", "ui", "_", "r", "RETRY_DELAY_MS", "b", "i", "n", "y", "x", "l", "h", "n", "r", "g", "b", "i", "y", "x", "d", "t", "e", "c", "d", "w", "h", "i", "p", "u", "s", "d", "w", "h", "b", "c", "t", "_", "e", "i", "f", "subtitle", "v", "icon"]
|
|
7
7
|
}
|