@smileid/web-components 11.5.0 → 11.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/DocumentCaptureScreens-DjSTdVP-.js +5398 -0
- package/dist/esm/DocumentCaptureScreens-DjSTdVP-.js.map +1 -0
- package/dist/esm/{Navigation-Xg565kcu.js → Navigation-6DH3vF4-.js} +2 -2
- package/dist/esm/{Navigation-Xg565kcu.js.map → Navigation-6DH3vF4-.js.map} +1 -1
- package/dist/esm/{PoweredBySmileId-CxbaihMu.js → PoweredBySmileId-DoKwoPUd.js} +424 -6
- package/dist/esm/PoweredBySmileId-DoKwoPUd.js.map +1 -0
- package/dist/esm/{SelfieCaptureScreens-D3KuMzZA.js → SelfieCaptureScreens-CtX-4Tco.js} +5 -6
- package/dist/esm/SelfieCaptureScreens-CtX-4Tco.js.map +1 -0
- package/dist/esm/combobox.js +1 -1
- package/dist/esm/document.js +1 -1
- package/dist/esm/end-user-consent.js +713 -2
- package/dist/esm/end-user-consent.js.map +1 -1
- package/dist/esm/index-BqyuTk9f.js +1366 -0
- package/dist/esm/{index-CUwa6MPI.js.map → index-BqyuTk9f.js.map} +1 -1
- package/dist/esm/localisation.js +1 -1
- package/dist/esm/main.js +14 -14
- package/dist/esm/navigation.js +1 -1
- package/dist/esm/{package-BmVbDNny.js → package-CjZI-cNQ.js} +177 -172
- package/dist/esm/{package-BmVbDNny.js.map → package-CjZI-cNQ.js.map} +1 -1
- package/dist/esm/selfie.js +1 -1
- package/dist/esm/smart-camera-web.js +32 -18
- package/dist/esm/smart-camera-web.js.map +1 -1
- package/dist/esm/totp-consent.js +731 -2
- package/dist/esm/totp-consent.js.map +1 -1
- package/dist/esm/validate.js +31 -0
- package/dist/esm/validate.js.map +1 -0
- package/dist/smart-camera-web.js +696 -321
- package/dist/smart-camera-web.js.map +1 -1
- package/dist/types/main.d.ts +7 -1
- package/dist/types/validate.d.ts +21 -0
- package/lib/components/document/src/DocumentCaptureScreens.js +97 -18
- package/lib/components/document/src/assets/lottie.d.ts +12 -0
- package/lib/components/document/src/assets/svg-inline.d.ts +8 -0
- package/lib/components/document/src/document-auto-capture/DocumentAutoCapture.stories.js +75 -0
- package/lib/components/document/src/document-auto-capture/DocumentAutoCapture.tsx +1458 -0
- package/lib/components/document/src/document-auto-capture/README.md +73 -0
- package/lib/components/document/src/document-auto-capture/assets/Greenbook_Shimmer.svg +42 -0
- package/lib/components/document/src/document-auto-capture/assets/ID_Back_Shimmer.svg +8 -0
- package/lib/components/document/src/document-auto-capture/assets/ID_Front_Shimmer.svg +20 -0
- package/lib/components/document/src/document-auto-capture/assets/Passport-Shimmer.svg +143 -0
- package/lib/components/document/src/document-auto-capture/assets/shimmers.ts +21 -0
- package/lib/components/document/src/document-auto-capture/assets/svg-raw.d.ts +4 -0
- package/lib/components/document/src/document-auto-capture/components/CaptureButton.tsx +122 -0
- package/lib/components/document/src/document-auto-capture/components/Overlay.tsx +167 -0
- package/lib/components/document/src/document-auto-capture/components/TuningPanel.tsx +856 -0
- package/lib/components/document/src/document-auto-capture/constants/captureLayout.ts +58 -0
- package/lib/components/document/src/document-auto-capture/detection/cvErrorRecovery.ts +40 -0
- package/lib/components/document/src/document-auto-capture/detection/documentAspect.ts +20 -0
- package/lib/components/document/src/document-auto-capture/detection/qualityScoring.ts +35 -0
- package/lib/components/document/src/document-auto-capture/detection/seamRejection.ts +209 -0
- package/lib/components/document/src/document-auto-capture/detection/synthesisTiming.ts +10 -0
- package/lib/components/document/src/document-auto-capture/hooks/useCamera.ts +117 -0
- package/lib/components/document/src/document-auto-capture/hooks/useCardDetection.ts +3059 -0
- package/lib/components/document/src/document-auto-capture/index.ts +4 -0
- package/lib/components/document/src/document-auto-capture/theme.ts +40 -0
- package/lib/components/document/src/document-auto-capture/utils/debug.ts +25 -0
- package/lib/components/document/src/document-auto-capture/utils/opencvLoader.ts +86 -0
- package/lib/components/document/src/document-capture-instructions/DocumentCaptureInstructions.tsx +327 -244
- package/lib/components/document/src/document-capture-review/DocumentCaptureReview.js +153 -189
- package/lib/components/document/src/document-capture-submission/DocumentCaptureSubmission.tsx +432 -0
- package/lib/components/document/src/document-capture-submission/index.js +3 -0
- package/lib/components/selfie/README.md +13 -0
- package/lib/components/signature-pad/package.json +1 -1
- package/lib/components/smart-camera-web/src/README.md +11 -0
- package/lib/components/smart-camera-web/src/SmartCameraWeb.js +25 -1
- package/lib/components/totp-consent/src/TotpConsent.js +1 -1
- package/package.json +8 -4
- package/dist/esm/DocumentCaptureScreens-ucJDu5nH.js +0 -2232
- package/dist/esm/DocumentCaptureScreens-ucJDu5nH.js.map +0 -1
- package/dist/esm/EndUserConsent-CsiwoThZ.js +0 -717
- package/dist/esm/EndUserConsent-CsiwoThZ.js.map +0 -1
- package/dist/esm/PoweredBySmileId-CxbaihMu.js.map +0 -1
- package/dist/esm/SelfieCaptureScreens-D3KuMzZA.js.map +0 -1
- package/dist/esm/TotpConsent-CRtmtudl.js +0 -734
- package/dist/esm/TotpConsent-CRtmtudl.js.map +0 -1
- package/dist/esm/index-CUwa6MPI.js +0 -1363
- package/dist/esm/styles-BTEClL7R.js +0 -419
- package/dist/esm/styles-BTEClL7R.js.map +0 -1
- /package/lib/components/document/src/assets/lottie/{taking photo of green book passport.lottie → greenbook.lottie} +0 -0
- /package/lib/components/document/src/assets/lottie/{taking photo of ID FLIP 2D.lottie → id-card-flip.lottie} +0 -0
- /package/lib/components/document/src/assets/lottie/{taking photo of ID.lottie → id-card.lottie} +0 -0
- /package/lib/components/document/src/assets/lottie/{taking photo of passport 2.lottie → passport.lottie} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelfieCaptureScreens-CtX-4Tco.js","sources":["../../lib/components/selfie/src/selfie-capture-instructions/SelfieCaptureInstructions.js","../../lib/components/selfie/src/selfie-capture-review/SelfieCaptureReview.js","../../../../node_modules/@tabler/icons-preact/dist/esm/defaultAttributes.mjs","../../../../node_modules/@tabler/icons-preact/dist/esm/createPreactComponent.mjs","../../../../node_modules/@tabler/icons-preact/dist/esm/icons/IconLoader2.mjs","../../lib/components/selfie/src/smartselfie-capture/hooks/useCamera.ts","../../../../node_modules/@preact/signals-core/dist/signals-core.module.js","../../../../node_modules/@preact/signals/dist/signals.module.js","../../../../node_modules/@mediapipe/tasks-vision/vision_bundle.mjs","../../node_modules/lodash/now.js","../../node_modules/lodash/_trimmedEndIndex.js","../../node_modules/lodash/_baseTrim.js","../../node_modules/lodash/isSymbol.js","../../node_modules/lodash/toNumber.js","../../node_modules/lodash/debounce.js","../../node_modules/lodash/throttle.js","../../lib/components/selfie/src/smartselfie-capture/utils/faceDetection.ts","../../lib/components/selfie/src/smartselfie-capture/utils/canvas.ts","../../lib/components/selfie/src/smartselfie-capture/utils/imageCapture.ts","../../lib/components/selfie/src/smartselfie-capture/constants.ts","../../lib/components/selfie/src/smartselfie-capture/utils/alertMessages.ts","../../lib/components/selfie/src/smartselfie-capture/utils/mediapipeManager.ts","../../lib/components/selfie/src/smartselfie-capture/hooks/useFaceCapture.ts","../../lib/components/selfie/src/smartselfie-capture/OvalProgress.tsx","../../lib/components/selfie/src/smartselfie-capture/components/CameraPreview.tsx","../../lib/components/selfie/src/smartselfie-capture/components/AlertDisplay.tsx","../../lib/components/selfie/src/smartselfie-capture/components/CaptureControls.tsx","../../lib/components/selfie/src/smartselfie-capture/SmartSelfieCapture.tsx","../../lib/components/selfie/src/enhanced-smartselfie-capture/hooks/useCamera.ts","../../lib/components/selfie/src/enhanced-smartselfie-capture/utils/faceDetection.ts","../../lib/components/selfie/src/enhanced-smartselfie-capture/utils/imageQuality.ts","../../lib/components/selfie/src/enhanced-smartselfie-capture/utils/canvas.ts","../../lib/components/selfie/src/enhanced-smartselfie-capture/utils/imageCapture.ts","../../lib/components/selfie/src/enhanced-smartselfie-capture/constants.ts","../../lib/components/selfie/src/enhanced-smartselfie-capture/utils/alertMessages.ts","../../lib/components/selfie/src/enhanced-smartselfie-capture/utils/mediapipeManager.ts","../../lib/components/selfie/src/enhanced-smartselfie-capture/hooks/useFaceCapture.ts","../../lib/components/selfie/src/enhanced-smartselfie-capture/OvalProgress.tsx","../../lib/components/selfie/src/enhanced-smartselfie-capture/components/CameraPreview.tsx","../../lib/components/selfie/src/enhanced-smartselfie-capture/components/AlertDisplay.tsx","../../lib/components/selfie/src/enhanced-smartselfie-capture/components/CaptureControls.tsx","../../lib/components/selfie/src/enhanced-smartselfie-capture/assets/active_liveness_animation.lottie","../../lib/components/selfie/src/enhanced-smartselfie-capture/assets/too_dark_animation.lottie","../../lib/components/selfie/src/enhanced-smartselfie-capture/assets/device_orientation.lottie","../../lib/components/selfie/src/enhanced-smartselfie-capture/components/ActiveLivenessOverlay.tsx","../../lib/components/selfie/src/enhanced-smartselfie-capture/assets/illustrations.tsx","../../lib/components/selfie/src/enhanced-smartselfie-capture/components/BackNavigation.tsx","../../lib/components/selfie/src/enhanced-smartselfie-capture/components/CaptureGuidelines.tsx","../../lib/components/selfie/src/enhanced-smartselfie-capture/components/SubmissionView.tsx","../../lib/components/selfie/src/enhanced-smartselfie-capture/assets/phone.svg","../../lib/components/selfie/src/enhanced-smartselfie-capture/assets/person.svg","../../lib/components/selfie/src/enhanced-smartselfie-capture/assets/id-card.svg","../../lib/components/selfie/src/enhanced-smartselfie-capture/assets/device.svg","../../lib/components/selfie/src/enhanced-smartselfie-capture/components/ConsentView.tsx","../../lib/components/selfie/src/enhanced-smartselfie-capture/EnhancedSmartSelfieConsent.tsx","../../lib/components/selfie/src/enhanced-smartselfie-capture/EnhancedSmartSelfieSubmission.tsx","../../lib/components/selfie/src/enhanced-smartselfie-capture/EnhancedSmartSelfieCapture.tsx","../../lib/components/selfie/src/selfie-capture/SelfieCapture.js","../../lib/components/selfie/src/selfie-capture-wrapper/SelfieCaptureWrapper.tsx","../../lib/components/selfie/src/SelfieCaptureScreens.js"],"sourcesContent":["import styles from '../../../../styles/src/styles';\nimport '../../../navigation/src';\nimport { t, getDirection } from '../../../../domain/localisation';\n\nfunction templateString() {\n return `\n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" />\n <link\n href=\"https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;700&display=swap\"\n rel=\"stylesheet\"\n />\n <style>\n :host {\n --theme-color: ${this.themeColor || '#001096'}\n --color-active: #001096;\n --color-default: #2d2b2a;\n --color-disabled: #848282;\n }\n\n * {\n font-family: \"DM Sans\", sans-serif;\n }\n\n [hidden] {\n display: none !important;\n }\n\n [disabled] {\n cursor: not-allowed !important;\n filter: grayscale(75%);\n }\n\n .visually-hidden {\n border: 0;\n clip: rect(1px 1px 1px 1px);\n clip: rect(1px, 1px, 1px, 1px);\n height: auto;\n margin: 0;\n overflow: hidden;\n padding: 0;\n position: absolute;\n white-space: nowrap;\n width: 1px;\n }\n\n img {\n height: auto;\n max-width: 100%;\n transform: scaleX(-1);\n }\n\n video {\n background-color: black;\n }\n\n a {\n color: currentColor;\n text-decoration: none;\n }\n\n svg {\n max-width: 100%;\n }\n\n .color-gray {\n color: #797979;\n }\n\n .color-red {\n color: red;\n }\n\n .color-richblue {\n color: #4e6577;\n }\n\n .color-richblue-shade {\n color: #0e1b42;\n }\n\n .color-digital-blue {\n color: #001096 !important;\n }\n\n .color-deep-blue {\n color: #001096;\n }\n\n .center {\n text-align: center;\n margin-left: auto;\n margin-right: auto;\n }\n\n .font-size-small {\n font-size: 0.75rem;\n }\n\n .font-size-large {\n font-size: 1.5rem;\n }\n\n .text-transform-uppercase {\n text-transform: uppercase;\n }\n\n [id*=-\"screen\"] {\n min-block-size: 100%;\n }\n\n [data-variant~=\"full-width\"] {\n inline-size: 100%;\n }\n\n .flow > * + * {\n margin-top: 1rem;\n }\n\n .button {\n --button-color: var(--theme-color);\n -webkit-appearance: none;\n appearance: none;\n border-radius: 2.5rem;\n border: 0;\n background-color: transparent;\n color: #fff;\n cursor: pointer;\n display: block;\n font-size: 18px;\n font-weight: 600;\n padding: 0.75rem 1.5rem;\n text-align: center;\n }\n\n .button:hover,\n .button:focus,\n .button:active {\n --button-color: var(--color-default);\n }\n\n .button:disabled {\n --button-color: var(--color-disabled);\n }\n\n .button[data-variant~=\"solid\"] {\n background-color: var(--button-color);\n border: 2px solid var(--button-color);\n }\n\n .button[data-variant~=\"outline\"] {\n color: var(--button-color);\n border: 2px solid var(--button-color);\n }\n\n .button[data-variant~=\"ghost\"] {\n padding: 0px;\n color: var(--button-color);\n background-color: transparent;\n }\n\n .icon-btn {\n appearance: none;\n background: none;\n border: none;\n color: hsl(0deg 0% 94%);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 4px 8px;\n }\n .justify-right {\n justify-content: end !important;\n }\n .nav {\n display: flex;\n justify-content: space-between;\n }\n\n .back-wrapper {\n display: flex;\n align-items: center;\n }\n\n .back-button {\n display: block !important;\n }\n .back-button-text {\n font-size: 11px;\n line-height: 11px;\n color: rgb(21, 31, 114);\n }\n .section {\n border: 1px solid #f4f4f4;\n border-radius: 0.5rem;\n margin-left: auto;\n margin-right: auto;\n max-width: 35ch;\n padding: 1rem;\n }\n\n .selfie-capture-review-image {\n overflow: hidden;\n aspect-ratio: 1/1;\n }\n\n #review-image {\n scale: 1.75;\n }\n\n @media (max-aspect-ratio: 1/1) {\n #review-image {\n transform: scaleX(-1) translateY(-10%);\n }\n }\n\n .tips,\n .powered-by {\n align-items: center;\n border-radius: 0.25rem;\n color: #4e6577;\n display: flex;\n justify-content: center;\n letter-spacing: 0.075em;\n }\n\n .powered-by {\n box-shadow: 0px 2.57415px 2.57415px rgba(0, 0, 0, 0.06);\n display: inline-flex;\n font-size: 0.5rem;\n }\n\n .tips {\n margin-left: auto;\n margin-right: auto;\n max-width: 17rem;\n }\n\n .tips > * + *,\n .powered-by > * + * {\n display: inline-block;\n margin-left: 0.5em;\n }\n\n .powered-by .company {\n color: #18406d;\n font-weight: 700;\n letter-spacing: 0.15rem;\n }\n\n .logo-mark {\n background-color: #004071;\n display: inline-block;\n padding: 0.25em 0.5em;\n }\n\n .logo-mark svg {\n height: auto;\n justify-self: center;\n width: 0.75em;\n }\n\n #selfie-capture-instruction-screen {\n box-sizing: border-box;\n height: 100%;\n padding: 1rem;\n display: flex;\n flex-direction: column;\n max-block-size: 100%;\n max-inline-size: 40ch;\n }\n\n #selfie-capture-instruction-screen header p {\n margin-block: 0 !important;\n }\n\n header h1 {\n font-size: 1.25rem;\n }\n\n .instructions {\n display: flex;\n align-items: center;\n text-align: initial;\n gap: 0.5rem;\n }\n\n .instructions svg {\n flex-shrink: 0;\n margin-inline-end: 0.25rem;\n }\n\n .instructions p {\n margin-block: 0;\n }\n\n h1 {\n color: ${this.themeColor};\n text-align: center;\n margin-top: 0;\n margin-bottom: 1rem;\n\n /* h1 */\n font-size: 1.5rem;\n font-style: normal;\n font-weight: 700;\n line-height: 36px; /* 150% */\n }\n\n .controls {\n width: 100%;\n margin-top: 1rem;\n }\n\n .content-root {\n height: 100%;\n display: flex;\n align-items: center;\n flex-direction: column;\n }\n\n .content-header, .content-body, .content-footer {\n width: 100%;\n }\n\n .content-body {\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: space-between;\n }\n\n .tip-header {\n color: ${this.themeColor};\n }\n\n .tip-body {\n text-align: justify;\n }\n </style>\n ${styles(this.themeColor)}\n <div id=\"selfie-capture-instruction-screen\" class=\"center\" dir=\"${this.direction}\">\n <div class=\"content-root\">\n <div class=\"content-header\">\n ${this.showNavigation ? `<smileid-navigation theme-color='${this.themeColor}' ${this.hideBack ? 'hide-back' : ''}></smileid-navigation>` : ''}\n </div>\n <div class=\"content-body\">\n <header>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"65\" height=\"91\" viewBox=\"0 0 65 91\" fill=\"none\">\n <g clip-path=\"url(#clip0_604_692)\">\n <path d=\"M36.6833 60.4888C26.9272 54.8682 13.1977 54.3026 5.53473 59.2162C-2.12824 64.1298 -0.851078 72.9318 8.05358 78.9413L17.8806 85.1274L51.5126 69.6797L36.7188 60.4534H36.6478L36.6833 60.4888Z\" fill=\"#3B3837\"/>\n <path d=\"M27.5624 90.5007L17.9127 85.0923C17.9127 85.0923 17.9127 74.6288 18.1256 70.4929C18.232 68.2305 23.2342 37.441 44.1655 34.6484C48.1389 34.1182 56.8662 40.5871 56.8662 40.5871\" fill=\"#91190F\"/>\n <path d=\"M27.5624 90.5007L17.9127 85.0923C17.9127 85.0923 17.9127 74.6288 18.1256 70.4929C18.232 68.2305 23.2342 37.441 44.1655 34.6484C48.1389 34.1182 56.8662 40.5871 56.8662 40.5871\" fill=\"#3B3837\"/>\n <path d=\"M64.0705 51.9698C63.8931 41.0114 56.2301 36.5927 46.7224 42.0366C37.0727 47.5511 29.055 60.9486 28.3454 72.2958L27.5649 90.4655L63.7512 69.5739L64.1769 51.8991H64.106L64.0705 51.9698Z\" fill=\"#7ECAF0\"/>\n <path d=\"M44.2729 28.3906L30.0112 36.521L30.4015 19.73L44.6631 11.5643L44.2729 28.3906Z\" fill=\"#F8CEEB\"/>\n <path d=\"M53.959 33.8711L39.6974 42.0368L40.0876 25.2104L54.3493 17.0447L53.959 33.8711Z\" fill=\"#7ECAF0\"/>\n <path d=\"M44.6631 11.5643L54.3483 17.0434L40.0866 25.2092L39.6964 42.0356L30.0112 36.521L30.4015 19.73L44.6631 11.5643Z\" fill=\"#3B3837\"/>\n <path d=\"M53.0767 51.0497L59.9591 46.8785L59.9237 36.9099L64.4647 34.3294L64.5002 49.4236L53.0767 56.2461V51.0497Z\" fill=\"#FF5805\"/>\n <path d=\"M54.0676 54.5139L63.5044 48.8933L63.469 36.026L60.9146 37.4754V47.4439L54.0676 51.5798V54.5139Z\" fill=\"#FF5805\"/>\n <path d=\"M30.4053 52.2515L34.9463 49.6356V60.8414L44.0638 55.1855V60.4172L30.4407 68.7244L30.4053 52.2515Z\" fill=\"#FF5805\"/>\n <path d=\"M31.4317 66.9921L43.0681 59.8869V56.9529L33.9506 62.6088V51.3323L31.3962 52.817L31.4317 66.9921Z\" fill=\"#FF5805\"/>\n <path d=\"M30.4053 19.7312L42.5383 13.0148V18.1759L34.9463 22.3471V32.4924L30.4407 35.073L30.4053 19.7312Z\" fill=\"#FF5805\"/>\n <path d=\"M31.3962 33.377L33.9506 31.9276V21.7823L41.5426 17.6111V14.6771L31.3962 20.2976V28.7815V33.377Z\" fill=\"#FF5805\"/>\n <path d=\"M59.9223 8.27746L53.5365 11.9538V6.79277L64.4279 0.500549L64.4633 16.5846L59.9578 19.1651L59.9223 8.27746Z\" fill=\"#FF5805\"/>\n <path d=\"M60.9142 17.4682L63.504 16.0189L63.4685 2.19722L54.4929 7.35826L54.5284 10.2569L60.9142 6.58057V17.4682Z\" fill=\"#FF5805\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_604_692\">\n <rect width=\"64\" height=\"90\" fill=\"white\" transform=\"translate(0.5 0.5)\"/>\n </clipPath>\n </defs>\n </svg>\n <h1 class='title-color font-bold'>${t('selfie.instructions.title')}</h1>\n </header>\n <div class=\"instructions-wrapper\">\n <div class=\"instructions\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"38\"\n height=\"38\"\n viewBox=\"0 0 38 38\"\n fill=\"none\"\n >\n <g clip-path=\"url(#clip0_604_670)\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M31.8569 19C31.8569 21.5428 31.1029 24.0285 29.6902 26.1428C28.2774 28.2571 26.2695 29.9049 23.9203 30.878C21.571 31.8511 18.986 32.1057 16.492 31.6096C13.9981 31.1136 11.7072 29.8891 9.90919 28.091C8.11115 26.293 6.88668 24.0022 6.3906 21.5082C5.89452 19.0143 6.14913 16.4292 7.12222 14.08C8.09531 11.7307 9.74318 9.72279 11.8574 8.31008C13.9717 6.89737 16.4574 6.14334 19.0002 6.14334C22.41 6.14334 25.6802 7.49788 28.0913 9.90897C30.5024 12.3201 31.8569 15.5902 31.8569 19Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M19.6064 4.5419H18.394L18.9912 0L19.6064 4.5419Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M26.7541 6.77667L25.7046 6.17048L28.4913 2.54239L26.7541 6.77667Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M31.8298 12.2957L31.2236 11.2462L35.4489 9.49097L31.8298 12.2957Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M33.4674 19.6062V18.3938L38.0003 18.9909L33.4674 19.6062Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M31.2236 26.7538L31.8298 25.7043L35.4579 28.491L31.2236 26.7538Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M25.7046 31.8295L26.7541 31.2233L28.5094 35.4486L25.7046 31.8295Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M18.394 33.4671H19.6064L19.0093 38L18.394 33.4671Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M11.2464 31.2233L12.2959 31.8295L9.50928 35.4576L11.2464 31.2233Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M6.17068 25.7043L6.77687 26.7538L2.55164 28.509L6.17068 25.7043Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M4.54215 18.3938V19.6062L0.000244141 19.009L4.54215 18.3938Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M6.77689 11.2462L6.1707 12.2957L2.5426 9.50903L6.77689 11.2462Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M12.296 6.17047L11.2464 6.77666L9.49121 2.55142L12.296 6.17047Z\"\n fill=\"${this.themeColor}\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_604_670\">\n <rect\n width=\"38\"\n height=\"38\"\n fill=\"white\"\n transform=\"translate(0.000244141)\"\n />\n </clipPath>\n </defs>\n </svg>\n <div class=\"instruction\">\n <p class=\"text-base title-color font-bold tip-header\">${t('selfie.instructions.tips.goodLight.header')}</p>\n <p class=\"tip-body\">\n ${t('selfie.instructions.tips.goodLight.body')}\n </p>\n </div>\n </div>\n <div class=\"instructions\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"38\"\n height=\"36\"\n viewBox=\"0 0 38 36\"\n fill=\"none\"\n >\n <g clip-path=\"url(#clip0_604_672)\">\n <path\n d=\"M36.7211 12.6391H1.22537C1.06275 13.0909 0.910962 13.5427 0.77002 14.0055H37.1764C37.0463 13.5427 36.8946 13.0909 36.7211 12.6391Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M37.3716 14.7438H0.574875C0.466458 15.1625 0.379725 15.5813 0.303833 16.011H37.6426C37.5667 15.5813 37.48 15.1625 37.3716 14.7438Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M37.7727 16.8485H0.173703C0.119494 17.2342 0.0869685 17.6198 0.0544434 18.0055H37.892C37.8594 17.6198 37.8269 17.2342 37.7727 16.8485Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M37.9462 19.4711C37.9462 19.2948 37.9462 19.1295 37.9353 18.9532H0.0110865C0.000244802 19.1295 0.000244141 19.2948 0.000244141 19.4711C0.000244141 19.6474 0.000244802 19.8347 0.0110865 20.011H37.9353C37.9462 19.8347 37.9462 19.6474 37.9462 19.4711Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M37.8811 21.0579H0.0653076C0.086991 21.3774 0.119515 21.697 0.162882 22.0055H37.7836C37.8269 21.697 37.8595 21.3774 37.8811 21.0579Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M37.5992 23.1625H0.347168C0.401376 23.449 0.466426 23.7245 0.531477 24H37.4149C37.48 23.7245 37.545 23.449 37.5992 23.1625Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M37.0788 25.2672H0.867554C0.954287 25.5096 1.03018 25.7631 1.11691 26.0055H36.8295C36.9162 25.7631 37.0029 25.5096 37.0788 25.2672Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M36.2874 27.3719H1.65906L1.95178 28H35.9947L36.2874 27.3719Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M35.2032 29.4766H2.75403C2.84799 29.6529 2.95641 29.8292 3.07928 30.0055H34.878L35.2032 29.4766Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M33.7396 31.5813H4.20679L4.54288 32H33.4035L33.7396 31.5813Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M31.7989 33.6859H6.14746L6.49439 33.9945H31.452L31.7989 33.6859Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M29.0993 35.7906H8.84705L9.18314 36H28.7632L29.0993 35.7906Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M34.2384 8.01102C33.8914 7.53719 33.5228 7.07438 33.1325 6.63361C29.8258 2.60055 24.6977 0 18.9407 0C12.891 0 7.53525 2.86501 4.25021 7.26171H4.28274C4.08759 7.51515 3.89244 7.75757 3.70813 8.01102H34.2384Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M34.531 8.44077H3.41533C3.06839 8.94765 2.74314 9.47658 2.43958 10.0165H35.5068C35.2124 9.47215 34.8866 8.94597 34.531 8.44077Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M35.7887 10.5344H2.15776C1.9084 11.0193 1.68072 11.5151 1.47473 12.011H36.4717C36.2657 11.5151 36.0381 11.0193 35.7887 10.5344Z\"\n fill=\"${this.themeColor}\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_604_672\">\n <rect\n width=\"37.9459\"\n height=\"36\"\n fill=\"white\"\n transform=\"translate(0.000244141)\"\n />\n </clipPath>\n </defs>\n </svg>\n <div class=\"instruction\">\n <p class=\"text-base title-color font-bold tip-header\">${t('selfie.instructions.tips.clearImage.header')}</p>\n <p class=\"tip-body\">\n ${t('selfie.instructions.tips.clearImage.body')}\n </p>\n </div>\n </div>\n <div class=\"instructions\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"38\"\n height=\"38\"\n viewBox=\"0 0 38 38\"\n fill=\"none\"\n >\n <path\n d=\"M18.9496 0C18.9496 0 13.9842 6.03205e-06 11.1469 1.09139C8.30957 2.18277 8.41092 4.46476 7.80292 6.15145C7.28787 7.56786 6.91455 9.02989 6.68824 10.517C6.68824 10.517 4.86424 11.3107 3.24291 12.2036C2.43378 12.6113 1.72475 13.1862 1.16487 13.8886C0.604986 14.5909 0.207618 15.404 0.000244141 16.2715C0.506911 21.4308 6.68824 23.6136 6.68824 23.6136C6.67321 21.7242 6.77473 19.8356 6.99225 17.9582C7.29625 16.47 7.90424 15.7754 10.4376 14.6841C12.9709 13.5927 18.9496 13.1958 18.9496 13.1958C18.9496 13.1958 24.9282 13.5927 27.4616 14.6841C29.9949 15.7754 30.7042 16.47 31.0082 17.9582C31.2258 19.8356 31.3273 21.7242 31.3122 23.6136C31.3122 23.6136 37.3922 21.4308 38.0002 16.2715C37.5126 14.5484 36.3463 13.0853 34.7576 12.2036L31.2109 10.517C30.9867 9.03874 30.6479 7.57936 30.1976 6.15145C29.4882 4.46476 28.4749 1.78591 26.8536 1.09139C25.2322 0.396873 18.9496 0 18.9496 0Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M10.7416 21.53C12.8058 21.6524 14.8473 22.0188 16.8216 22.6214C18.6235 23.1643 20.5642 23.0588 22.2936 22.3238C24.8269 21.2324 27.5629 21.4308 30.1976 21.6292C30.7849 21.6319 31.3675 21.7326 31.9202 21.9269C32.4269 22.1253 32.4269 22.423 32.4269 23.2167C32.14 24.7237 31.6635 26.19 31.0083 27.5822C30.7799 28.1169 30.4019 28.5776 29.9179 28.9111C29.4338 29.2446 28.8634 29.4375 28.2723 29.4674C27.2359 29.6525 26.1773 29.6859 25.1309 29.5666C24.279 29.5405 23.4506 29.2863 22.736 28.8315C22.0214 28.3766 21.4478 27.7387 21.0776 26.987C20.8887 26.3594 20.6161 25.7589 20.2669 25.201C19.8616 24.705 19.5576 24.5065 19.0509 24.6057C18.7188 24.5693 18.3842 24.6489 18.1061 24.8304C17.828 25.0119 17.6243 25.2837 17.5309 25.5979C16.9229 27.0862 16.4162 28.6736 14.6936 29.2689C13.939 29.5055 13.1548 29.6391 12.3629 29.6658C11.2345 29.6928 10.1081 29.5591 9.01892 29.2689C7.39759 28.7728 6.89092 27.3838 6.38425 25.8956C6.24296 25.2819 6.03928 24.6836 5.77625 24.1096C5.57359 23.5143 5.37092 23.1175 5.67492 22.5222C5.97892 21.9269 6.18159 22.0261 6.68825 21.9269C8.02604 21.6866 9.38168 21.5538 10.7416 21.53ZM12.0589 28.8721C14.4909 28.5744 14.8963 28.5744 15.6056 27.3838C16.0105 26.8072 16.3184 26.1708 16.5176 25.4987C16.9229 24.3081 16.7203 23.7128 15.6056 23.2167C13.2959 22.2331 10.6949 22.127 8.30959 22.9191C8.07105 23.0198 7.85723 23.1693 7.68248 23.3575C7.50772 23.5458 7.37604 23.7684 7.29626 24.0105C7.12045 24.8478 7.19957 25.7172 7.52382 26.5109C7.84807 27.3046 8.40315 27.9876 9.12025 28.4752C10.0603 28.8088 11.0617 28.9441 12.0589 28.8721ZM25.7389 28.9713C26.8173 28.9934 27.8881 28.7904 28.8802 28.376C30.7042 27.5823 30.7043 25.7963 30.7043 24.1096C30.7043 22.423 29.9949 22.9191 29.2856 22.7206C27.3226 22.2044 25.2509 22.2387 23.3069 22.8198C23.0246 22.8282 22.7476 22.8972 22.4956 23.0221C22.2436 23.1469 22.0228 23.3245 21.8487 23.5423C21.6746 23.7601 21.5516 24.0127 21.4884 24.2822C21.4252 24.5517 21.4233 24.8315 21.4829 25.1018C21.6856 27.3838 23.1043 28.5744 25.7389 28.9713Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M11.9576 24.4073C10.8429 24.4073 9.93091 25.1018 9.93091 25.7963V26.2924C9.9546 26.4062 10.0183 26.5082 10.1109 26.5807C10.2034 26.6532 10.319 26.6916 10.4376 26.6893C10.8429 26.6893 11.0456 26.4909 11.0456 26.2924V25.7963C11.0456 25.4987 11.4509 25.201 11.9576 25.201C12.4642 25.201 12.8696 25.4987 12.8696 25.7963V26.2924C12.8696 26.4909 13.1736 26.6893 13.4776 26.6893C13.5961 26.6916 13.7117 26.6532 13.8043 26.5807C13.8969 26.5082 13.9606 26.4062 13.9842 26.2924V25.7963C13.9842 25.1018 13.0722 24.4073 11.9576 24.4073Z\"\n fill=\"${this.themeColor}\"\n />\n <path\n d=\"M26.1442 24.4073C24.9282 24.4073 24.0162 25.1018 24.0162 25.7963V26.2924C24.0162 26.4909 24.3202 26.6893 24.6242 26.6893C24.9282 26.6893 25.2322 26.4909 25.2322 26.2924V25.7963C25.2322 25.4987 25.6376 25.201 26.1442 25.201C26.6509 25.201 27.0562 25.4987 27.0562 25.7963V26.2924C27.0799 26.4062 27.1436 26.5082 27.2362 26.5807C27.3287 26.6532 27.4444 26.6916 27.5629 26.6893C27.8669 26.6893 28.1709 26.4909 28.1709 26.2924V25.7963C28.1709 25.1018 27.2589 24.4073 26.1442 24.4073Z\"\n fill=\"${this.themeColor}\"\n />\n </svg>\n <div class=\"instruction\">\n <p class=\"text-base title-color font-bold tip-header\">${t('selfie.instructions.tips.removeObstructions.header')}</p>\n <p class=\"tip-body\">\n ${t('selfie.instructions.tips.removeObstructions.body')}\n </p>\n </div>\n </div>\n <div class=\"instructions\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"38\" height=\"38\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"${this.themeColor}\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"icon icon-tabler icons-tabler-outline icon-tabler-mood-happy\"><path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0\" /><path d=\"M9 9l.01 0\" /><path d=\"M15 9l.01 0\" /><path d=\"M8 13a4 4 0 1 0 8 0h-8\" /></svg>\n <div class=\"instruction\">\n <p class=\"text-base title-color font-bold tip-header\">${t('selfie.instructions.tips.wideSmile.header')}</p>\n <p class=\"tip-body\">\n ${t('selfie.instructions.tips.wideSmile.body')}\n </p>\n </div>\n </div>\n </div>\n <section class=\"controls\">\n <button id='allow' data-variant='solid full-width' class='button theme-background'>\n ${t('selfie.instructions.allowButton')}\n </button>\n </section>\n ${\n this.hideAttribution\n ? ''\n : `\n <div class=\"content-footer\">\n <powered-by-smile-id></powered-by-smile-id>\n </div>\n `\n }\n </div>\n </div>\n</div>\n `;\n}\n\nclass SelfieCaptureInstructions extends HTMLElement {\n constructor() {\n super();\n this.templateString = templateString.bind(this);\n this.render = () => this.templateString();\n\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n this.pages = [];\n const template = document.createElement('template');\n template.innerHTML = this.render();\n\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n\n this.allowButton = this.shadowRoot.querySelector('#allow');\n this.navigation = this.shadowRoot.querySelector('smileid-navigation');\n\n this.navigation?.addEventListener('navigation.back', () => {\n this.handleBackEvents();\n });\n\n if (this.allowButton) {\n this.allowButton.addEventListener('click', () => {\n this.dispatchEvent(\n new CustomEvent('selfie-capture-instructions.capture'),\n );\n });\n }\n\n this.navigation?.addEventListener(\n 'navigation.close',\n () => {\n this.handleCloseEvents();\n },\n false,\n );\n }\n\n get hideBack() {\n return this.hasAttribute('hide-back');\n }\n\n get themeColor() {\n return this.getAttribute('theme-color') || '#001096';\n }\n\n get hideAttribution() {\n return this.hasAttribute('hide-attribution');\n }\n\n handleBackEvents() {\n this.dispatchEvent(\n new CustomEvent('selfie-capture-instructions.cancelled'),\n );\n }\n\n get showNavigation() {\n return this.hasAttribute('show-navigation');\n }\n\n get direction() {\n return this.getAttribute('dir') || getDirection() || 'ltr';\n }\n\n handleCloseEvents() {\n this.dispatchEvent(new CustomEvent('selfie-capture-instructions.close'));\n }\n\n static get observedAttributes() {\n return ['show-navigation'];\n }\n}\n\nif (\n 'customElements' in window &&\n !window.customElements.get('selfie-capture-instructions')\n) {\n window.customElements.define(\n 'selfie-capture-instructions',\n SelfieCaptureInstructions,\n );\n}\n\nexport default SelfieCaptureInstructions;\n","import styles from '../../../../styles/src/styles';\nimport '../../../navigation/src';\nimport { t, getDirection } from '../../../../domain/localisation';\n\nfunction templateString() {\n return `\n <style>\n .retake-photo.button[data-variant~=\"ghost\"] {\n color: #FF5805;\n }\n\n #selfie-capture-review-screen {\n display: flex;\n flex-direction: column;\n padding: 1rem;\n }\n\n #selfie-capture-review-screen .selfie-review-container.landscape {\n height: auto;\n }\n\n #selfie-capture-review-screen header p {\n margin-block: 0 !important;\n }\n\n .selfie-review-container.portrait {\n width: 100%;\n position: relative;\n height: calc(200px * 1.4);\n }\n\n .selfie-review-container.portrait img {\n width: calc(213px + 0.9rem);\n height: 100%;\n position: absolute;\n top: 239px;\n left: 161px;\n padding-bottom: calc((214px * 1.4) / 3);\n padding-top: calc((191px * 1.4) / 3);\n object-fit: cover;\n \n transform: translateX(-50%) translateY(-50%);\n z-index: 1;\n block-size: 100%;\n }\n\n h1 {\n color: var(--web-digital-blue, #001096);\n text-align: center;\n /* h1 */\n font-size: 1.25rem;\n font-style: normal;\n font-weight: 700;\n line-height: 36px; /* 150% */\n margin-top: 0;\n }\n </style>\n ${styles(this.themeColor)}\n <div id='selfie-capture-review-screen' class='center' dir='${this.direction}'>\n ${this.showNavigation ? `<smileid-navigation hide-back></smileid-navigation>` : ''}\n <h1 class=\"header-title title-color font-bold\">\n ${t('selfie.review.question')}\n </h1>\n <div class='section | flow'>\n <div class='selfie-review-container ${this.isPortraitCaptureView ? 'portrait' : 'landscape'}'>\n ${\n this.imageSrc\n ? `<img\n alt='your ID card'\n id='document-capture-review-image'\n src='${this.imageSrc}'\n width='396'\n style='max-width: 90%;${this.shouldMirror ? ' transform: scaleX(-1);' : ''}'\n />`\n : ''\n }\n </div>\n <div class='flow action-buttons'>\n <button data-variant='solid full-width' class='button' type='button' id='select-id-image'>\n ${t('selfie.review.acceptButton')}\n </button>\n <button data-variant='ghost full-width' class='button retake-photo' type='button' id='re-capture-image'>\n ${t('selfie.review.retakeButton')}\n </button>\n </div>\n ${\n this.hideAttribution\n ? ''\n : `\n <powered-by-smile-id></powered-by-smile-id>\n `\n }\n </div>\n </div>\n `;\n}\n\nclass SelfieCaptureReview extends HTMLElement {\n constructor() {\n super();\n this.templateString = templateString.bind(this);\n this.render = () => this.templateString();\n\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n const template = document.createElement('template');\n template.innerHTML = this.render();\n this.shadowRoot.innerHTML = '';\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n this.setUpEventListeners();\n }\n\n static get observedAttributes() {\n return [\n 'hide-back-to-host',\n 'show-navigation',\n 'data-image',\n 'mirror-image',\n ];\n }\n\n get hideBack() {\n return this.hasAttribute('hide-back-to-host');\n }\n\n get showNavigation() {\n return this.hasAttribute('show-navigation');\n }\n\n get themeColor() {\n return this.getAttribute('theme-color') || '#001096';\n }\n\n get hideAttribution() {\n return this.hasAttribute('hide-attribution');\n }\n\n get imageSrc() {\n return this.getAttribute('data-image');\n }\n\n get shouldMirror() {\n return this.getAttribute('mirror-image') !== 'false';\n }\n\n get title() {\n return this.getAttribute('title') || t('selfie.review.title');\n }\n\n get direction() {\n return this.getAttribute('dir') || getDirection() || 'ltr';\n }\n\n handleBackEvents() {\n this.dispatchEvent(new CustomEvent('selfie-capture-review.cancelled'));\n }\n\n handleCloseEvents() {\n this.dispatchEvent(new CustomEvent('selfie-capture-review.close'));\n }\n\n attributeChangedCallback(name) {\n switch (name) {\n case 'data-image':\n case 'hide-back-to-host':\n case 'show-navigation':\n case 'mirror-image':\n this.shadowRoot.innerHTML = this.render();\n this.setUpEventListeners();\n break;\n default:\n break;\n }\n }\n\n setUpEventListeners() {\n this.selectImage = this.shadowRoot.querySelector('#select-id-image');\n this.reCaptureImage = this.shadowRoot.querySelector('#re-capture-image');\n this.navigation = this.shadowRoot.querySelector('smileid-navigation');\n\n this.navigation?.addEventListener('navigation.back', () => {\n this.handleBackEvents();\n });\n this.navigation?.addEventListener('navigation.close', () => {\n this.handleCloseEvents();\n });\n\n this.selectImage.addEventListener('click', () => {\n this.dispatchEvent(\n new CustomEvent('selfie-capture-review.accepted', {\n detail: {},\n }),\n );\n });\n this.reCaptureImage.addEventListener('click', () => {\n this.dispatchEvent(\n new CustomEvent('selfie-capture-review.rejected', {\n detail: {},\n }),\n );\n });\n }\n}\n\nif (\n 'customElements' in window &&\n !customElements.get('selfie-capture-review')\n) {\n window.customElements.define('selfie-capture-review', SelfieCaptureReview);\n}\n\nexport default SelfieCaptureReview;\n","/**\n * @license @tabler/icons-preact v3.34.1 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n outline: {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n \"stroke-width\": 2,\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n },\n filled: {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\",\n stroke: \"none\"\n }\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.mjs.map\n","/**\n * @license @tabler/icons-preact v3.34.1 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { h, toChildArray } from 'preact';\nimport defaultAttributes from './defaultAttributes.mjs';\n\nconst createPreactComponent = (type, iconName, iconNamePascal, iconNode) => {\n const Component = ({\n color = \"currentColor\",\n size = 24,\n stroke = 2,\n title,\n children,\n className = \"\",\n class: classes = \"\",\n style,\n ...rest\n }) => h(\n \"svg\",\n {\n ...defaultAttributes[type],\n width: String(size),\n height: String(size),\n class: [`tabler-icon`, `tabler-icon-${iconName}`, classes, className].join(\" \"),\n ...type === \"filled\" ? {\n fill: color\n } : {\n \"stroke-width\": stroke,\n stroke: color\n },\n style,\n ...rest\n },\n [\n title && h(\"title\", {}, title),\n ...iconNode.map(([tag, attrs]) => h(tag, attrs)),\n ...toChildArray(children)\n ]\n );\n Component.displayName = `${iconNamePascal}`;\n return Component;\n};\n\nexport { createPreactComponent as default };\n//# sourceMappingURL=createPreactComponent.mjs.map\n","/**\n * @license @tabler/icons-preact v3.34.1 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createPreactComponent from '../createPreactComponent.mjs';\n\nvar IconLoader2 = createPreactComponent(\"outline\", \"loader-2\", \"Loader2\", [[\"path\", { \"d\": \"M12 3a9 9 0 1 0 9 9\", \"key\": \"svg-0\" }]]);\n\nexport { IconLoader2 as default };\n//# sourceMappingURL=IconLoader2.mjs.map\n","import { useRef, useState, useEffect } from 'preact/hooks';\nimport SmartCamera from '../../../../../domain/camera/src/SmartCamera';\n\nexport const useCamera = (initialFacingMode: CameraFacingMode = 'user') => {\n const videoRef = useRef<HTMLVideoElement>(null);\n const streamRef = useRef<MediaStream | null>(null);\n const [facingMode, setFacingMode] = useState(initialFacingMode);\n const [agentSupported, setAgentSupported] = useState(false);\n const [cameraError, setCameraError] = useState<string | null>(null);\n const onCameraSwitchCallbackRef = useRef<(() => void) | null>(null);\n const isSwitchingCameraRef = useRef(false);\n const timeoutIdsRef = useRef<Set<NodeJS.Timeout>>(new Set());\n\n const registerCameraSwitchCallback = (callback: () => void) => {\n onCameraSwitchCallbackRef.current = callback;\n };\n\n useEffect(() => {\n const video = videoRef.current;\n if (!video) return undefined;\n\n const handleVideoReady = () => {\n if (isSwitchingCameraRef.current && onCameraSwitchCallbackRef.current) {\n const timeoutId = setTimeout(() => {\n onCameraSwitchCallbackRef.current?.();\n isSwitchingCameraRef.current = false;\n timeoutIdsRef.current.delete(timeoutId);\n }, 100);\n timeoutIdsRef.current.add(timeoutId);\n }\n };\n\n video.addEventListener('loadedmetadata', handleVideoReady);\n\n return () => {\n video.removeEventListener('loadedmetadata', handleVideoReady);\n timeoutIdsRef.current.forEach((timeoutId) => clearTimeout(timeoutId));\n timeoutIdsRef.current.clear();\n };\n }, [videoRef.current?.src]);\n\n useEffect(\n () => () => {\n timeoutIdsRef.current.forEach((timeoutId) => clearTimeout(timeoutId));\n timeoutIdsRef.current.clear();\n },\n [],\n );\n\n const startCamera = async (\n targetFacingMode?: CameraFacingMode,\n callback?: (cameraName?: string) => void,\n ) => {\n try {\n if (streamRef.current) {\n streamRef.current.getTracks().forEach((track) => track.stop());\n streamRef.current = null;\n }\n\n if (videoRef.current) {\n videoRef.current.srcObject = null;\n }\n\n const stream = await navigator.mediaDevices.getUserMedia({\n video: { facingMode: targetFacingMode || facingMode },\n });\n streamRef.current = stream;\n setCameraError(null);\n\n const track = stream.getVideoTracks()[0];\n const settings = track.getSettings();\n const actualFacingMode = settings.facingMode as\n | CameraFacingMode\n | undefined;\n\n const requestedFacingMode = targetFacingMode || facingMode;\n\n if (actualFacingMode && actualFacingMode !== requestedFacingMode) {\n setFacingMode(actualFacingMode);\n } else if (actualFacingMode && actualFacingMode !== facingMode) {\n setFacingMode(actualFacingMode);\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices();\n const videoDevice = devices.find(\n (device) =>\n device.kind === 'videoinput' &&\n stream.getVideoTracks()[0].getSettings().deviceId === device.deviceId,\n );\n\n callback?.(videoDevice?.label);\n\n if (videoRef.current) {\n videoRef.current.srcObject = stream;\n await videoRef.current.play();\n // Video ready callback will be handled by useEffect\n }\n } catch (error) {\n console.error('Failed to start camera:', error);\n setCameraError(SmartCamera.handleCameraError(error as Error));\n throw error;\n }\n };\n\n const retryCamera = async () => {\n await startCamera(facingMode);\n };\n\n const switchCamera = async () => {\n const newFacingMode = facingMode === 'user' ? 'environment' : 'user';\n isSwitchingCameraRef.current = true;\n\n const previousFacingMode = facingMode;\n try {\n setFacingMode(newFacingMode);\n if (streamRef.current) {\n streamRef.current.getTracks().forEach((track) => track.stop());\n streamRef.current = null;\n }\n\n await startCamera(newFacingMode);\n } catch {\n setFacingMode(previousFacingMode);\n isSwitchingCameraRef.current = false;\n\n try {\n await startCamera(previousFacingMode);\n } catch (restoreError) {\n console.error('Failed to restore previous camera:', restoreError);\n setCameraError(SmartCamera.handleCameraError(restoreError as Error));\n }\n }\n };\n\n const detectBrowserEngine = () => {\n const userAgent = navigator.userAgent.toLowerCase();\n\n const isGecko =\n userAgent.includes('firefox') ||\n (userAgent.includes('gecko') &&\n !userAgent.includes('chrome') &&\n !userAgent.includes('edge'));\n\n const hasFirefoxFeatures =\n 'mozInnerScreenX' in window ||\n 'mozInputSource' in window ||\n 'mozPaintCount' in window ||\n typeof (window as any).InstallTrigger !== 'undefined';\n\n const supportsMozCSS =\n CSS.supports &&\n (CSS.supports('-moz-appearance', 'none') ||\n CSS.supports('-moz-user-select', 'none'));\n\n return {\n isGecko: isGecko || hasFirefoxFeatures || supportsMozCSS,\n isChromium:\n userAgent.includes('chrome') ||\n userAgent.includes('chromium') ||\n userAgent.includes('edge'),\n isWebKit: userAgent.includes('webkit') && !userAgent.includes('chrome'),\n };\n };\n\n const checkAgentSupport = async () => {\n try {\n const isMobile =\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent,\n ) ||\n (navigator.maxTouchPoints && navigator.maxTouchPoints > 1);\n\n // mobile devices generally support both cameras\n // also, ios crashes if we try to check for cameras\n if (isMobile) {\n setAgentSupported(true);\n return;\n }\n\n const { isGecko } = detectBrowserEngine();\n\n let userCameraId: string | null = null;\n let environmentCameraId: string | null = null;\n\n // test if we can get a user-facing camera\n try {\n const userStream = await navigator.mediaDevices.getUserMedia({\n video: { facingMode: 'user' },\n });\n userCameraId =\n userStream.getVideoTracks()[0].getSettings().deviceId ?? null;\n userStream.getTracks().forEach((track) => track.stop());\n } catch {\n // no user-facing camera available\n }\n\n // test if we can get an environment-facing camera\n try {\n const envStream = await navigator.mediaDevices.getUserMedia({\n video: { facingMode: 'environment' },\n });\n environmentCameraId =\n envStream.getVideoTracks()[0].getSettings().deviceId ?? null;\n envStream.getTracks().forEach((track) => track.stop());\n } catch {\n // no environment-facing camera available\n }\n\n const hasBothCameras =\n userCameraId &&\n environmentCameraId &&\n userCameraId !== environmentCameraId;\n\n if (!hasBothCameras) {\n setAgentSupported(false);\n return;\n }\n\n setAgentSupported(!isGecko);\n } catch {\n setAgentSupported(false);\n }\n };\n\n const stopCamera = () => {\n if (streamRef.current) {\n streamRef.current.getTracks().forEach((track) => track.stop());\n streamRef.current = null;\n }\n\n if (videoRef.current) {\n videoRef.current.srcObject = null;\n videoRef.current.load();\n }\n };\n\n return {\n videoRef,\n streamRef,\n facingMode,\n agentSupported,\n cameraError,\n startCamera,\n retryCamera,\n switchCamera,\n checkAgentSupport,\n stopCamera,\n registerCameraSwitchCallback,\n };\n};\n","var i=Symbol.for(\"preact-signals\");function t(){if(!(s>1)){var i,t=!1;while(void 0!==h){var r=h;h=void 0;f++;while(void 0!==r){var o=r.o;r.o=void 0;r.f&=-3;if(!(8&r.f)&&c(r))try{r.c()}catch(r){if(!t){i=r;t=!0}}r=o}}f=0;s--;if(t)throw i}else s--}function r(i){if(s>0)return i();s++;try{return i()}finally{t()}}var o=void 0;function n(i){var t=o;o=void 0;try{return i()}finally{o=t}}var h=void 0,s=0,f=0,v=0;function e(i){if(void 0!==o){var t=i.n;if(void 0===t||t.t!==o){t={i:0,S:i,p:o.s,n:void 0,t:o,e:void 0,x:void 0,r:t};if(void 0!==o.s)o.s.n=t;o.s=t;i.n=t;if(32&o.f)i.S(t);return t}else if(-1===t.i){t.i=0;if(void 0!==t.n){t.n.p=t.p;if(void 0!==t.p)t.p.n=t.n;t.p=o.s;t.n=void 0;o.s.n=t;o.s=t}return t}}}function u(i,t){this.v=i;this.i=0;this.n=void 0;this.t=void 0;this.W=null==t?void 0:t.watched;this.Z=null==t?void 0:t.unwatched}u.prototype.brand=i;u.prototype.h=function(){return!0};u.prototype.S=function(i){var t=this,r=this.t;if(r!==i&&void 0===i.e){i.x=r;this.t=i;if(void 0!==r)r.e=i;else n(function(){var i;null==(i=t.W)||i.call(t)})}};u.prototype.U=function(i){var t=this;if(void 0!==this.t){var r=i.e,o=i.x;if(void 0!==r){r.x=o;i.e=void 0}if(void 0!==o){o.e=r;i.x=void 0}if(i===this.t){this.t=o;if(void 0===o)n(function(){var i;null==(i=t.Z)||i.call(t)})}}};u.prototype.subscribe=function(i){var t=this;return E(function(){var r=t.value,n=o;o=void 0;try{i(r)}finally{o=n}})};u.prototype.valueOf=function(){return this.value};u.prototype.toString=function(){return this.value+\"\"};u.prototype.toJSON=function(){return this.value};u.prototype.peek=function(){var i=o;o=void 0;try{return this.value}finally{o=i}};Object.defineProperty(u.prototype,\"value\",{get:function(){var i=e(this);if(void 0!==i)i.i=this.i;return this.v},set:function(i){if(i!==this.v){if(f>100)throw new Error(\"Cycle detected\");this.v=i;this.i++;v++;s++;try{for(var r=this.t;void 0!==r;r=r.x)r.t.N()}finally{t()}}}});function d(i,t){return new u(i,t)}function c(i){for(var t=i.s;void 0!==t;t=t.n)if(t.S.i!==t.i||!t.S.h()||t.S.i!==t.i)return!0;return!1}function a(i){for(var t=i.s;void 0!==t;t=t.n){var r=t.S.n;if(void 0!==r)t.r=r;t.S.n=t;t.i=-1;if(void 0===t.n){i.s=t;break}}}function l(i){var t=i.s,r=void 0;while(void 0!==t){var o=t.p;if(-1===t.i){t.S.U(t);if(void 0!==o)o.n=t.n;if(void 0!==t.n)t.n.p=o}else r=t;t.S.n=t.r;if(void 0!==t.r)t.r=void 0;t=o}i.s=r}function y(i,t){u.call(this,void 0);this.x=i;this.s=void 0;this.g=v-1;this.f=4;this.W=null==t?void 0:t.watched;this.Z=null==t?void 0:t.unwatched}y.prototype=new u;y.prototype.h=function(){this.f&=-3;if(1&this.f)return!1;if(32==(36&this.f))return!0;this.f&=-5;if(this.g===v)return!0;this.g=v;this.f|=1;if(this.i>0&&!c(this)){this.f&=-2;return!0}var i=o;try{a(this);o=this;var t=this.x();if(16&this.f||this.v!==t||0===this.i){this.v=t;this.f&=-17;this.i++}}catch(i){this.v=i;this.f|=16;this.i++}o=i;l(this);this.f&=-2;return!0};y.prototype.S=function(i){if(void 0===this.t){this.f|=36;for(var t=this.s;void 0!==t;t=t.n)t.S.S(t)}u.prototype.S.call(this,i)};y.prototype.U=function(i){if(void 0!==this.t){u.prototype.U.call(this,i);if(void 0===this.t){this.f&=-33;for(var t=this.s;void 0!==t;t=t.n)t.S.U(t)}}};y.prototype.N=function(){if(!(2&this.f)){this.f|=6;for(var i=this.t;void 0!==i;i=i.x)i.t.N()}};Object.defineProperty(y.prototype,\"value\",{get:function(){if(1&this.f)throw new Error(\"Cycle detected\");var i=e(this);this.h();if(void 0!==i)i.i=this.i;if(16&this.f)throw this.v;return this.v}});function w(i,t){return new y(i,t)}function _(i){var r=i.u;i.u=void 0;if(\"function\"==typeof r){s++;var n=o;o=void 0;try{r()}catch(t){i.f&=-2;i.f|=8;b(i);throw t}finally{o=n;t()}}}function b(i){for(var t=i.s;void 0!==t;t=t.n)t.S.U(t);i.x=void 0;i.s=void 0;_(i)}function g(i){if(o!==this)throw new Error(\"Out-of-order effect\");l(this);o=i;this.f&=-2;if(8&this.f)b(this);t()}function p(i){this.x=i;this.u=void 0;this.s=void 0;this.o=void 0;this.f=32}p.prototype.c=function(){var i=this.S();try{if(8&this.f)return;if(void 0===this.x)return;var t=this.x();if(\"function\"==typeof t)this.u=t}finally{i()}};p.prototype.S=function(){if(1&this.f)throw new Error(\"Cycle detected\");this.f|=1;this.f&=-9;_(this);a(this);s++;var i=o;o=this;return g.bind(this,i)};p.prototype.N=function(){if(!(2&this.f)){this.f|=2;this.o=h;h=this}};p.prototype.d=function(){this.f|=8;if(!(1&this.f))b(this)};p.prototype.dispose=function(){this.d()};function E(i){var t=new p(i);try{t.c()}catch(i){t.d();throw i}var r=t.d.bind(t);r[Symbol.dispose]=r;return r}export{u as Signal,r as batch,w as computed,E as effect,d as signal,n as untracked};//# sourceMappingURL=signals-core.module.js.map\n","import{Component as i,options as n,isValidElement as r,Fragment as t}from\"preact\";import{useMemo as f,useRef as o,useEffect as e}from\"preact/hooks\";import{effect as u,Signal as a,computed as c,signal as v,batch as s}from\"@preact/signals-core\";export{Signal,batch,computed,effect,signal,untracked}from\"@preact/signals-core\";var h,l,d,p=[],m=[];u(function(){h=this.N})();function _(i,r){n[i]=r.bind(null,n[i]||function(){})}function g(i){if(d)d();d=i&&i.S()}function b(i){var n=this,t=i.data,o=useSignal(t);o.value=t;var e=f(function(){var i=n,t=n.__v;while(t=t.__)if(t.__c){t.__c.__$f|=4;break}var f=c(function(){var i=o.value.value;return 0===i?0:!0===i?\"\":i||\"\"}),e=c(function(){return!Array.isArray(f.value)&&!r(f.value)}),a=u(function(){this.N=T;if(e.value){var n=f.value;if(i.__v&&i.__v.__e&&3===i.__v.__e.nodeType)i.__v.__e.data=n}}),v=n.__$u.d;n.__$u.d=function(){a();v.call(this)};return[e,f]},[]),a=e[0],v=e[1];return a.value?v.peek():v.value}b.displayName=\"_st\";Object.defineProperties(a.prototype,{constructor:{configurable:!0,value:void 0},type:{configurable:!0,value:b},props:{configurable:!0,get:function(){return{data:this}}},__b:{configurable:!0,value:1}});_(\"__b\",function(i,n){if(\"string\"==typeof n.type){var r,t=n.props;for(var f in t)if(\"children\"!==f){var o=t[f];if(o instanceof a){if(!r)n.__np=r={};r[f]=o;t[f]=o.peek()}}}i(n)});_(\"__r\",function(i,n){if(n.type!==t){g();var r,f=n.__c;if(f){f.__$f&=-2;if(void 0===(r=f.__$u))f.__$u=r=function(i){var n;u(function(){n=this});n.c=function(){f.__$f|=1;f.setState({})};return n}()}l=f;g(r)}i(n)});_(\"__e\",function(i,n,r,t){g();l=void 0;i(n,r,t)});_(\"diffed\",function(i,n){g();l=void 0;var r;if(\"string\"==typeof n.type&&(r=n.__e)){var t=n.__np,f=n.props;if(t){var o=r.U;if(o)for(var e in o){var u=o[e];if(void 0!==u&&!(e in t)){u.d();o[e]=void 0}}else{o={};r.U=o}for(var a in t){var c=o[a],v=t[a];if(void 0===c){c=y(r,a,v,f);o[a]=c}else c.o(v,f)}}}i(n)});function y(i,n,r,t){var f=n in i&&void 0===i.ownerSVGElement,o=v(r);return{o:function(i,n){o.value=i;t=n},d:u(function(){this.N=T;var r=o.value.value;if(t[n]!==r){t[n]=r;if(f)i[n]=r;else if(r)i.setAttribute(n,r);else i.removeAttribute(n)}})}}_(\"unmount\",function(i,n){if(\"string\"==typeof n.type){var r=n.__e;if(r){var t=r.U;if(t){r.U=void 0;for(var f in t){var o=t[f];if(o)o.d()}}}}else{var e=n.__c;if(e){var u=e.__$u;if(u){e.__$u=void 0;u.d()}}}i(n)});_(\"__h\",function(i,n,r,t){if(t<3||9===t)n.__$f|=2;i(n,r,t)});i.prototype.shouldComponentUpdate=function(i,n){var r=this.__$u,t=r&&void 0!==r.s;for(var f in n)return!0;if(this.__f||\"boolean\"==typeof this.u&&!0===this.u){var o=2&this.__$f;if(!(t||o||4&this.__$f))return!0;if(1&this.__$f)return!0}else{if(!(t||4&this.__$f))return!0;if(3&this.__$f)return!0}for(var e in i)if(\"__source\"!==e&&i[e]!==this.props[e])return!0;for(var u in this.props)if(!(u in i))return!0;return!1};function useSignal(i,n){return f(function(){return v(i,n)},[])}function useComputed(i,n){var r=o(i);r.current=i;l.__$f|=4;return f(function(){return c(function(){return r.current()},n)},[])}var k=\"undefined\"==typeof requestAnimationFrame?setTimeout:function(i){var n=function(){clearTimeout(r);cancelAnimationFrame(t);i()},r=setTimeout(n,35),t=requestAnimationFrame(n)},q=function(i){queueMicrotask(function(){queueMicrotask(i)})};function A(){s(function(){var i;while(i=p.shift())h.call(i)})}function w(){if(1===p.push(this))(n.requestAnimationFrame||k)(A)}function F(){s(function(){var i;while(i=m.shift())h.call(i)})}function T(){if(1===m.push(this))(n.requestAnimationFrame||q)(F)}function useSignalEffect(i){var n=o(i);n.current=i;e(function(){return u(function(){this.N=w;return n.current()})},[])}export{useComputed,useSignal,useSignalEffect};//# sourceMappingURL=signals.module.js.map\n","var t=\"undefined\"!=typeof self?self:{};function e(){throw Error(\"Invalid UTF8\")}function n(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}let r,i;const s=\"undefined\"!=typeof TextDecoder;let o;const a=\"undefined\"!=typeof TextEncoder;function c(t){if(a)t=(o||=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}var h,u;t:{for(var l=[\"CLOSURE_FLAGS\"],d=t,f=0;f<l.length;f++)if(null==(d=d[l[f]])){u=null;break t}u=d}var p,g=u&&u[610401301];h=null!=g&&g;const m=t.navigator;function y(t){return!!h&&(!!p&&p.brands.some((({brand:e})=>e&&-1!=e.indexOf(t))))}function _(e){var n;return(n=t.navigator)&&(n=n.userAgent)||(n=\"\"),-1!=n.indexOf(e)}function v(){return!!h&&(!!p&&p.brands.length>0)}function E(){return v()?y(\"Chromium\"):(_(\"Chrome\")||_(\"CriOS\"))&&!(!v()&&_(\"Edge\"))||_(\"Silk\")}function w(t){return w[\" \"](t),t}p=m&&m.userAgentData||null,w[\" \"]=function(){};var T=!v()&&(_(\"Trident\")||_(\"MSIE\"));!_(\"Android\")||E(),E(),_(\"Safari\")&&(E()||!v()&&_(\"Coast\")||!v()&&_(\"Opera\")||!v()&&_(\"Edge\")||(v()?y(\"Microsoft Edge\"):_(\"Edg/\"))||v()&&y(\"Opera\"));var A={},b=null;function k(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=b[e];if(null!=n)return n;if(!/^[\\s\\xa0]*$/.test(e))throw Error(\"Unknown base64 encoding at char: \"+e)}return e}S();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 S(){if(!b){b={};var t=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\".split(\"\"),e=[\"+/=\",\"+/\",\"-_=\",\"-_.\",\"-_\"];for(let n=0;n<5;n++){const r=t.concat(e[n].split(\"\"));A[n]=r;for(let t=0;t<r.length;t++){const e=r[t];void 0===b[e]&&(b[e]=t)}}}}var x=\"undefined\"!=typeof Uint8Array,L=!T&&\"function\"==typeof btoa;function R(t){if(!L){var e;void 0===e&&(e=0),S(),e=A[e];var n=Array(Math.floor(t.length/3)),r=e[64]||\"\";let c=0,h=0;for(;c<t.length-2;c+=3){var i=t[c],s=t[c+1],o=t[c+2],a=e[i>>2];i=e[(3&i)<<4|s>>4],s=e[(15&s)<<2|o>>6],o=e[63&o],n[h++]=a+i+s+o}switch(a=0,o=r,t.length-c){case 2:o=e[(15&(a=t[c+1]))<<2]||r;case 1:t=t[c],n[h]=e[t>>2]+e[(3&t)<<4|a>>4]+o+r}return n.join(\"\")}for(e=\"\",n=0,r=t.length-10240;n<r;)e+=String.fromCharCode.apply(null,t.subarray(n,n+=10240));return e+=String.fromCharCode.apply(null,n?t.subarray(n):t),btoa(e)}const F=/[-_.]/g,I={\"-\":\"+\",_:\"/\",\".\":\"=\"};function M(t){return I[t]||\"\"}function P(t){if(!L)return k(t);F.test(t)&&(t=t.replace(F,M)),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 C(t){return x&&null!=t&&t instanceof Uint8Array}var O={};function U(){return B||=new N(null,O)}function D(t){j(O);var e=t.g;return null==(e=null==e||C(e)?e:\"string\"==typeof e?P(e):null)?e:t.g=e}var N=class{h(){return new Uint8Array(D(this)||0)}constructor(t,e){if(j(e),this.g=t,null!=t&&0===t.length)throw Error(\"ByteString should be constructed with non-empty values\")}};let B,G;function j(t){if(t!==O)throw Error(\"illegal external caller\")}function V(t,e){t.__closure__error__context__984382||(t.__closure__error__context__984382={}),t.__closure__error__context__984382.severity=e}function X(t){return V(t=Error(t),\"warning\"),t}function H(e){if(null!=e){var n=G??={},r=n[e]||0;r>=5||(n[e]=r+1,V(e=Error(),\"incident\"),function(e){t.setTimeout((()=>{throw e}),0)}(e))}}var W=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol();function z(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 K=z(\"jas\",void 0,!0),Y=z(void 0,\"0di\"),$=z(void 0,\"1oa\"),q=z(void 0,Symbol()),J=z(void 0,\"0actk\"),Z=z(void 0,\"8utk\");const Q=W?K:\"Ea\",tt={Ea:{value:0,configurable:!0,writable:!0,enumerable:!1}},et=Object.defineProperties;function nt(t,e){W||Q in t||et(t,tt),t[Q]|=e}function rt(t,e){W||Q in t||et(t,tt),t[Q]=e}function it(t){return nt(t,34),t}function st(t,e){rt(e,-15615&(0|t))}function ot(t,e){rt(e,-15581&(34|t))}function at(){return\"function\"==typeof BigInt}function ct(t){return Array.prototype.slice.call(t)}var ht,ut={};function lt(t){return null!==t&&\"object\"==typeof t&&!Array.isArray(t)&&t.constructor===Object}function dt(t,e){if(null!=t)if(\"string\"==typeof t)t=t?new N(t,O):U();else if(t.constructor!==N)if(C(t))t=t.length?new N(new Uint8Array(t),O):U();else{if(!e)throw Error();t=void 0}return t}const ft=[];function pt(t){if(2&t)throw Error()}rt(ft,55),ht=Object.freeze(ft);class gt{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}}function mt(t){return q?t[q]:void 0}var yt=Object.freeze({});function _t(t){return t.Na=!0,t}var vt=_t((t=>\"number\"==typeof t)),Et=_t((t=>\"string\"==typeof t)),wt=_t((t=>\"boolean\"==typeof t)),Tt=\"function\"==typeof t.BigInt&&\"bigint\"==typeof t.BigInt(0);function At(t){var e=t;if(Et(e)){if(!/^\\s*(?:-?[1-9]\\d*|0)?\\s*$/.test(e))throw Error(String(e))}else if(vt(e)&&!Number.isSafeInteger(e))throw Error(String(e));return Tt?BigInt(t):t=wt(t)?t?\"1\":\"0\":Et(t)?t.trim()||\"0\":String(t)}var bt=_t((t=>Tt?t>=St&&t<=Lt:\"-\"===t[0]?Rt(t,kt):Rt(t,xt)));const kt=Number.MIN_SAFE_INTEGER.toString(),St=Tt?BigInt(Number.MIN_SAFE_INTEGER):void 0,xt=Number.MAX_SAFE_INTEGER.toString(),Lt=Tt?BigInt(Number.MAX_SAFE_INTEGER):void 0;function Rt(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 Ft=\"function\"==typeof Uint8Array.prototype.slice;let It,Mt=0,Pt=0;function Ct(t){const e=t>>>0;Mt=e,Pt=(t-e)/4294967296>>>0}function Ot(t){if(t<0){Ct(-t);const[e,n]=Xt(Mt,Pt);Mt=e>>>0,Pt=n>>>0}else Ct(t)}function Ut(t){const e=It||=new DataView(new ArrayBuffer(8));e.setFloat32(0,+t,!0),Pt=0,Mt=e.getUint32(0,!0)}function Dt(t,e){const n=4294967296*e+(t>>>0);return Number.isSafeInteger(n)?n:Bt(t,e)}function Nt(t,e){const n=2147483648&e;return n&&(e=~e>>>0,0==(t=1+~t>>>0)&&(e=e+1>>>0)),\"number\"==typeof(t=Dt(t,e))?n?-t:t:n?\"-\"+t:t}function Bt(t,e){if(t>>>=0,(e>>>=0)<=2097151)var n=\"\"+(4294967296*e+t);else at()?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+Gt(n)+Gt(t));return n}function Gt(t){return t=String(t),\"0000000\".slice(t.length)+t}function jt(){var t=Mt,e=Pt;if(2147483648&e)if(at())t=\"\"+(BigInt(0|e)<<BigInt(32)|BigInt(t>>>0));else{const[n,r]=Xt(t,e);t=\"-\"+Bt(n,r)}else t=Bt(t,e);return t}function Vt(t){if(t.length<16)Ot(Number(t));else if(at())t=BigInt(t),Mt=Number(t&BigInt(4294967295))>>>0,Pt=Number(t>>BigInt(32)&BigInt(4294967295));else{const e=+(\"-\"===t[0]);Pt=Mt=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));Pt*=1e6,Mt=1e6*Mt+e,Mt>=4294967296&&(Pt+=Math.trunc(Mt/4294967296),Pt>>>=0,Mt>>>=0)}if(e){const[t,e]=Xt(Mt,Pt);Mt=t,Pt=e}}}function Xt(t,e){return e=~e,t?t=1+~t:e+=1,[t,e]}const Ht=\"function\"==typeof BigInt?BigInt.asIntN:void 0,Wt=\"function\"==typeof BigInt?BigInt.asUintN:void 0,zt=Number.isSafeInteger,Kt=Number.isFinite,Yt=Math.trunc,$t=At(0);function qt(t){return null==t||\"number\"==typeof t?t:\"NaN\"===t||\"Infinity\"===t||\"-Infinity\"===t?Number(t):void 0}function Jt(t){return null==t||\"boolean\"==typeof t?t:\"number\"==typeof t?!!t:void 0}const Zt=/^-?([1-9][0-9]*|0)(\\.[0-9]+)?$/;function Qt(t){switch(typeof t){case\"bigint\":return!0;case\"number\":return Kt(t);case\"string\":return Zt.test(t);default:return!1}}function te(t){if(null==t)return t;if(\"string\"==typeof t&&t)t=+t;else if(\"number\"!=typeof t)return;return Kt(t)?0|t:void 0}function ee(t){if(null==t)return t;if(\"string\"==typeof t&&t)t=+t;else if(\"number\"!=typeof t)return;return Kt(t)?t>>>0:void 0}function ne(t){if(\"-\"===t[0])return!1;const e=t.length;return e<20||20===e&&Number(t.substring(0,6))<184467}function re(t){const e=t.length;return\"-\"===t[0]?e<20||20===e&&Number(t.substring(0,7))>-922337:e<19||19===e&&Number(t.substring(0,6))<922337}function ie(t){return re(t)?t:(Vt(t),jt())}function se(t){return t=Yt(t),zt(t)||(Ot(t),t=Nt(Mt,Pt)),t}function oe(t){var e=Yt(Number(t));return zt(e)?String(e):(-1!==(e=t.indexOf(\".\"))&&(t=t.substring(0,e)),ie(t))}function ae(t){var e=Yt(Number(t));return zt(e)?At(e):(-1!==(e=t.indexOf(\".\"))&&(t=t.substring(0,e)),at()?At(Ht(64,BigInt(t))):At(ie(t)))}function ce(t){if(zt(t))t=At(se(t));else{if(t=Yt(t),zt(t))t=String(t);else{const e=String(t);re(e)?t=e:(Ot(t),t=jt())}t=At(t)}return t}function he(t){return null==t?t:\"bigint\"==typeof t?(bt(t)?t=Number(t):(t=Ht(64,t),t=bt(t)?Number(t):String(t)),t):Qt(t)?\"number\"==typeof t?se(t):oe(t):void 0}function ue(t){if(null==t)return t;var e=typeof t;if(\"bigint\"===e)return String(Wt(64,t));if(Qt(t)){if(\"string\"===e)return e=Yt(Number(t)),zt(e)&&e>=0?t=String(e):(-1!==(e=t.indexOf(\".\"))&&(t=t.substring(0,e)),ne(t)||(Vt(t),t=Bt(Mt,Pt))),t;if(\"number\"===e)return(t=Yt(t))>=0&&zt(t)?t:function(t){if(t<0){Ot(t);var e=Bt(Mt,Pt);return t=Number(e),zt(t)?t:e}return ne(e=String(t))?e:(Ot(t),Dt(Mt,Pt))}(t)}}function le(t){if(\"string\"!=typeof t)throw Error();return t}function de(t){if(null!=t&&\"string\"!=typeof t)throw Error();return t}function fe(t){return null==t||\"string\"==typeof t?t:void 0}function pe(t,e,n,r){if(null!=t&&\"object\"==typeof t&&t.W===ut)return t;if(!Array.isArray(t))return n?2&r?((t=e[Y])||(it((t=new e).u),t=e[Y]=t),e=t):e=new e:e=void 0,e;let i=n=0|t[Q];return 0===i&&(i|=32&r),i|=2&r,i!==n&&rt(t,i),new e(t)}function ge(t,e,n){if(e)t:{if(!Qt(e=t))throw X(\"int64\");switch(typeof e){case\"string\":e=ae(e);break t;case\"bigint\":e=At(Ht(64,e));break t;default:e=ce(e)}}else t=typeof(e=t),e=null==e?e:\"bigint\"===t?At(Ht(64,e)):Qt(e)?\"string\"===t?ae(e):ce(e):void 0;return null==(t=e)?n?$t:void 0:t}function me(t){return t}const ye={};let _e=function(){try{return w(new class extends Map{constructor(){super()}}),!1}catch{return!0}}();class ve{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 Ee=_e?(Object.setPrototypeOf(ve.prototype,Map.prototype),Object.defineProperties(ve.prototype,{size:{value:0,configurable:!0,enumerable:!0,writable:!0}}),ve):class extends Map{constructor(){super()}};function we(t){return t}function Te(t){if(2&t.M)throw Error(\"Cannot mutate an immutable Map\")}var Ae=class extends Ee{constructor(t,e,n=we,r=we){super();let i=0|t[Q];i|=64,rt(t,i),this.M=i,this.I=e,this.S=n,this.X=this.I?be:r;for(let s=0;s<t.length;s++){const o=t[s],a=n(o[0],!1,!0);let c=o[1];e?void 0===c&&(c=null):c=r(o[1],!1,!0,void 0,void 0,i),super.set(a,c)}}La(){var t=Ce;if(0!==this.size)return Array.from(super.entries(),(e=>(e[0]=t(e[0]),e[1]=t(e[1]),e)))}da(t=ke){const e=[],n=super.entries();for(var r;!(r=n.next()).done;)(r=r.value)[0]=t(r[0]),r[1]=t(r[1]),e.push(r);return e}clear(){Te(this),super.clear()}delete(t){return Te(this),super.delete(this.S(t,!0,!1))}entries(){if(this.I){var t=super.keys();t=new gt(t,Se,this)}else t=super.entries();return t}values(){if(this.I){var t=super.keys();t=new gt(t,Ae.prototype.get,this)}else t=super.values();return t}forEach(t,e){this.I?super.forEach(((n,r,i)=>{t.call(e,i.get(r),r,i)})):super.forEach(t,e)}set(t,e){return Te(this),null==(t=this.S(t,!0,!1))?this:null==e?(super.delete(t),this):super.set(t,this.X(e,!0,!0,this.I,!1,this.M))}Ja(t){const e=this.S(t[0],!1,!0);t=t[1],t=this.I?void 0===t?null:t:this.X(t,!1,!0,void 0,!1,this.M),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.I;return n?((n=this.X(e,!1,!0,n,this.pa,this.M))!==e&&super.set(t,n),n):e}}[Symbol.iterator](){return this.entries()}};function be(t,e,n,r,i,s){return t=pe(t,r,n,s),i&&(t=je(t)),t}function ke(t){return t}function Se(t){return[t,this.get(t)]}let xe,Le,Re,Fe;function Ie(){return xe||=new Ae(it([]),void 0,void 0,void 0,ye)}function Me(t,e,n,r,i){if(null!=t){if(Array.isArray(t)){const s=0|t[Q];return 0===t.length&&1&s?void 0:i&&2&s?t:Pe(t,e,n,void 0!==r,i)}return e(t,r)}}function Pe(t,e,n,r,i){const s=r||n?0|t[Q]:0,o=r?!!(32&s):void 0;let a=0;const c=(r=ct(t)).length;for(let t=0;t<c;t++){var h=r[t];if(t===c-1&<(h)){var u=e,l=n,d=o,f=i;let t;for(let e in h){const n=Me(h[e],u,l,d,f);null!=n&&((t??={})[e]=n)}h=t}else h=Me(r[t],e,n,o,i);r[t]=h,null!=h&&(a=t+1)}return a<c&&(r.length=a),n&&((t=mt(t))&&(r[q]=ct(t)),n(s,r)),r}function Ce(t){return Me(t,Oe,void 0,void 0,!1)}function Oe(t){switch(typeof t){case\"number\":return Number.isFinite(t)?t:\"\"+t;case\"bigint\":return bt(t)?Number(t):\"\"+t;case\"boolean\":return t?1:0;case\"object\":if(C(t))return C(t)&&H(Z),R(t);if(t.W===ut)return Ue(t);if(t instanceof N){const e=t.g;return null==e?\"\":\"string\"==typeof e?e:t.g=R(e)}return t instanceof Ae?t.La():void 0}return t}function Ue(t){var e=t.u;t=Pe(e,Oe,void 0,void 0,!1);var n=0|e[Q];if((e=t.length)&&!(512&n)){var r=t[e-1],i=!1;lt(r)?(e--,i=!0):r=void 0;var s=e-(n=512&n?0:-1),o=(Le??me)(s,n,t,r);if(r&&(t[e]=void 0),s<o&&r){for(var a in s=!0,r){const c=+a;c<=o?(t[i=c+n]=r[a],e=Math.max(i+1,e),i=!1,delete r[a]):s=!1}s&&(r=void 0)}for(s=e-1;e>0;s=e-1)if(null==(a=t[s]))e--,i=!0;else{if(!((s-=n)>=o))break;(r??={})[s]=a,e--,i=!0}i&&(t.length=e),r&&t.push(r)}return t}function De(t,e,n){return t=Ne(t,e[0],e[1],n?1:2),e!==Re&&n&&nt(t,8192),t}function Ne(t,e,n,r){if(null==t){var i=96;n?(t=[n],i|=512):t=[],e&&(i=-16760833&i|(1023&e)<<14)}else{if(!Array.isArray(t))throw Error(\"narr\");if(8192&(i=0|t[Q])||!(64&i)||2&i||H(J),1024&i)throw Error(\"farr\");if(64&i)return t;if(1===r||2===r||(i|=64),n&&(i|=512,n!==t[0]))throw Error(\"mid\");t:{var s=(n=t).length;if(s){var o=s-1;if(lt(r=n[o])){if((o-=e=512&(i|=256)?0:-1)>=1024)throw Error(\"pvtlmt\");for(var a in r)(s=+a)<o&&(n[s+e]=r[a],delete r[a]);i=-16760833&i|(1023&o)<<14;break t}}if(e){if((a=Math.max(e,s-(512&i?0:-1)))>1024)throw Error(\"spvt\");i=-16760833&i|(1023&a)<<14}}}return rt(t,i),t}function Be(t,e,n=ot){if(null!=t){if(x&&t instanceof Uint8Array)return e?t:new Uint8Array(t);if(Array.isArray(t)){var r=0|t[Q];return 2&r?t:(e&&=0===r||!!(32&r)&&!(64&r||!(16&r)),e?(rt(t,34|r),4&r&&Object.freeze(t),t):Pe(t,Be,4&r?ot:n,!0,!0))}return t.W===ut?t=2&(r=0|(n=t.u)[Q])?t:new t.constructor(Ge(n,r,!0)):t instanceof Ae&&!(2&t.M)&&(n=it(t.da(Be)),t=new Ae(n,t.I,t.S,t.X)),t}}function Ge(t,e,n){const r=n||2&e?ot:st,i=!!(32&e);return t=function(t,e,n){const r=ct(t);var i=r.length;const s=256&e?r[i-1]:void 0;for(i+=s?-1:0,e=512&e?1:0;e<i;e++)r[e]=n(r[e]);if(s){e=r[e]={};for(const t in s)e[t]=n(s[t])}return(t=mt(t))&&(r[q]=ct(t)),r}(t,e,(t=>Be(t,i,r))),nt(t,32|(n?2:0)),t}function je(t){const e=t.u,n=0|e[Q];return 2&n?new t.constructor(Ge(e,n,!1)):t}function Ve(t,e){return Xe(t=t.u,0|t[Q],e)}function Xe(t,e,n){if(-1===n)return null;const r=n+(512&e?0:-1),i=t.length-1;return r>=i&&256&e?t[i][n]:r<=i?t[r]:void 0}function He(t,e,n){const r=t.u;let i=0|r[Q];return pt(i),We(r,i,e,n),t}function We(t,e,n,r){const i=512&e?0:-1,s=n+i;var o=t.length-1;return s>=o&&256&e?(t[o][n]=r,e):s<=o?(t[s]=r,e):(void 0!==r&&(n>=(o=e>>14&1023||536870912)?null!=r&&(t[o+i]={[n]:r},rt(t,e|=256)):t[s]=r),e)}function ze(t,e){let n=0|(t=t.u)[Q];const r=Xe(t,n,e),i=qt(r);return null!=i&&i!==r&&We(t,n,e,i),i}function Ke(t){let e=0|(t=t.u)[Q];const n=Xe(t,e,1),r=dt(n,!0);return null!=r&&r!==n&&We(t,e,1,r),r}function Ye(){return void 0===yt?2:4}function $e(t,e,n,r,i){const s=t.u,o=2&(t=0|s[Q])?1:r;i=!!i;let a=0|(r=qe(s,t,e))[Q];if(!(4&a)){4&a&&(r=ct(r),a=pn(a,t),t=We(s,t,e,r));let i=0,o=0;for(;i<r.length;i++){const t=n(r[i]);null!=t&&(r[o++]=t)}o<i&&(r.length=o),a=Je(a,t),n=-2049&(20|a),a=n&=-4097,rt(r,a),2&a&&Object.freeze(r)}return 1===o||4===o&&32&a?Ze(a)||(i=a,a|=2,a!==i&&rt(r,a),Object.freeze(r)):(2===o&&Ze(a)&&(r=ct(r),a=pn(a,t),a=gn(a,t,i),rt(r,a),t=We(s,t,e,r)),Ze(a)||(e=a,a=gn(a,t,i),a!==e&&rt(r,a))),r}function qe(t,e,n){return t=Xe(t,e,n),Array.isArray(t)?t:ht}function Je(t,e){return 0===t&&(t=pn(t,e)),1|t}function Ze(t){return!!(2&t)&&!!(4&t)||!!(1024&t)}function Qe(t){t=ct(t);for(let e=0;e<t.length;e++){const n=t[e]=ct(t[e]);Array.isArray(n[1])&&(n[1]=it(n[1]))}return t}function tn(t,e,n,r){let i=0|(t=t.u)[Q];pt(i),We(t,i,e,(\"0\"===r?0===Number(n):n===r)?void 0:n)}function en(t,e,n,r){pt(e);let i=qe(t,e,n);const s=i!==ht;if(64&e||!(8192&e)||!s){const o=s?0|i[Q]:0;let a=o;(!s||2&a||Ze(a)||4&a&&!(32&a))&&(i=ct(i),a=pn(a,e),e=We(t,e,n,i)),a=-13&Je(a,e),a=gn(r?-17&a:16|a,e,!0),a!==o&&rt(i,a)}return i}function nn(t,e){var n=Ts;return on(rn(t=t.u),t,0|t[Q],n)===e?e:-1}function rn(t){if(W)return t[$]??(t[$]=new Map);if($ in t)return t[$];const e=new Map;return Object.defineProperty(t,$,{value:e}),e}function sn(t,e,n,r){const i=rn(t),s=on(i,t,e,n);return s!==r&&(s&&(e=We(t,e,s)),i.set(n,r)),e}function on(t,e,n,r){let i=t.get(r);if(null!=i)return i;i=0;for(let t=0;t<r.length;t++){const s=r[t];null!=Xe(e,n,s)&&(0!==i&&(n=We(e,n,i)),i=s)}return t.set(r,i),i}function an(t,e,n){let r=0|t[Q];const i=Xe(t,r,n);let s;if(null!=i&&i.W===ut)return(e=je(i))!==i&&We(t,r,n,e),e.u;if(Array.isArray(i)){const t=0|i[Q];s=2&t?De(Ge(i,t,!1),e,!0):64&t?i:De(s,e,!0)}else s=De(void 0,e,!0);return s!==i&&We(t,r,n,s),s}function cn(t,e,n){let r=0|(t=t.u)[Q];const i=Xe(t,r,n);return(e=pe(i,e,!1,r))!==i&&null!=e&&We(t,r,n,e),e}function hn(t,e,n){if(null==(e=cn(t,e,n)))return e;let r=0|(t=t.u)[Q];if(!(2&r)){const i=je(e);i!==e&&We(t,r,n,e=i)}return e}function un(t,e,n,r,i,s,o){t=t.u;var a=!!(2&e);const c=a?1:i;s=!!s,o&&=!a;var h=0|(i=qe(t,e,r))[Q];if(!(a=!!(4&h))){var u=i,l=e;const t=!!(2&(h=Je(h,e)));t&&(l|=2);let r=!t,s=!0,o=0,a=0;for(;o<u.length;o++){const e=pe(u[o],n,!1,l);if(e instanceof n){if(!t){const t=!!(2&(0|e.u[Q]));r&&=!t,s&&=t}u[a++]=e}}a<o&&(u.length=a),h|=4,h=s?16|h:-17&h,rt(u,h=r?8|h:-9&h),t&&Object.freeze(u)}if(o&&!(8&h||!i.length&&(1===c||4===c&&32&h))){for(Ze(h)&&(i=ct(i),h=pn(h,e),e=We(t,e,r,i)),n=i,o=h,u=0;u<n.length;u++)(h=n[u])!==(l=je(h))&&(n[u]=l);o|=8,rt(n,o=n.length?-17&o:16|o),h=o}return 1===c||4===c&&32&h?Ze(h)||(e=h,(h|=!i.length||16&h&&(!a||32&h)?2:1024)!==e&&rt(i,h),Object.freeze(i)):(2===c&&Ze(h)&&(rt(i=ct(i),h=gn(h=pn(h,e),e,s)),e=We(t,e,r,i)),Ze(h)||(r=h,(h=gn(h,e,s))!==r&&rt(i,h))),i}function ln(t,e,n){const r=0|t.u[Q];return un(t,r,e,n,Ye(),!1,!(2&r))}function dn(t,e,n,r){return null==r&&(r=void 0),He(t,n,r)}function fn(t,e,n,r){null==r&&(r=void 0);t:{let i=0|(t=t.u)[Q];if(pt(i),null==r){const r=rn(t);if(on(r,t,i,n)!==e)break t;r.set(n,0)}else i=sn(t,i,n,e);We(t,i,e,r)}}function pn(t,e){return-1025&(t=32|(2&e?2|t:-3&t))}function gn(t,e,n){return 32&e&&n||(t&=-33),t}function mn(t,e,n){pt(0|t.u[Q]),$e(t,e,fe,2,!0).push(le(n))}function yn(t,e,n,r){const i=0|t.u[Q];pt(i),t=un(t,i,n,e,2,!0),r=null!=r?r:new n,t.push(r),t[Q]=2&(0|r.u[Q])?-9&t[Q]:-17&t[Q]}function _n(t,e){return te(Ve(t,e))}function vn(t,e){return fe(Ve(t,e))}function En(t,e){return ze(t,e)??0}function wn(t,e,n){if(null!=n&&\"boolean\"!=typeof n)throw t=typeof n,Error(`Expected boolean but got ${\"object\"!=t?t:n?Array.isArray(n)?\"array\":t:\"null\"}: ${n}`);He(t,e,n)}function Tn(t,e,n){if(null!=n){if(\"number\"!=typeof n)throw X(\"int32\");if(!Kt(n))throw X(\"int32\");n|=0}He(t,e,n)}function An(t,e,n){if(null!=n&&\"number\"!=typeof n)throw Error(`Value of float/double field must be a number, found ${typeof n}: ${n}`);He(t,e,n)}function bn(t,e,n){{const o=t.u;let a=0|o[Q];if(pt(a),null==n)We(o,a,e);else{var r=t=0|n[Q],i=Ze(t),s=i||Object.isFrozen(n);for(i||(t=0),s||(n=ct(n),r=0,t=gn(t=pn(t,a),a,!0),s=!1),t|=21,i=0;i<n.length;i++){const e=n[i],o=le(e);Object.is(e,o)||(s&&(n=ct(n),r=0,t=gn(t=pn(t,a),a,!0),s=!1),n[i]=o)}t!==r&&(s&&(n=ct(n),t=gn(t=pn(t,a),a,!0)),rt(n,t)),We(o,a,e,n)}}}function kn(t,e){return Error(`Invalid wire type: ${t} (at position ${e})`)}function Sn(){return Error(\"Failed to read varint, encoding is invalid.\")}function xn(t,e){return Error(`Tried to read past the end of the data ${e} > ${t}`)}function Ln(t){if(\"string\"==typeof t)return{buffer:P(t),O:!1};if(Array.isArray(t))return{buffer:new Uint8Array(t),O:!1};if(t.constructor===Uint8Array)return{buffer:t,O:!1};if(t.constructor===ArrayBuffer)return{buffer:new Uint8Array(t),O:!1};if(t.constructor===N)return{buffer:D(t)||new Uint8Array(0),O:!0};if(t instanceof Uint8Array)return{buffer:new Uint8Array(t.buffer,t.byteOffset,t.byteLength),O:!1};throw Error(\"Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, a ByteString or an Array of numbers\")}function Rn(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);for(s>32&&(i|=(127&n)>>4),s=3;s<32&&128&n;s+=7)n=o[a++],i|=(127&n)<<s;if(Dn(t,a),n<128)return e(r>>>0,i>>>0);throw Sn()}function Fn(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 Dn(t,n),!!(127&e)}throw Sn()}function In(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 Sn();return Dn(t,n),i}function Mn(t){return In(t)>>>0}function Pn(t){var e=t.h;const n=t.g,r=e[n],i=e[n+1],s=e[n+2];return e=e[n+3],Dn(t,t.g+4),(r<<0|i<<8|s<<16|e<<24)>>>0}function Cn(t){var e=Pn(t);t=2*(e>>31)+1;const n=e>>>23&255;return e&=8388607,255==n?e?NaN:t*(1/0):0==n?1401298464324817e-60*t*e:t*Math.pow(2,n-150)*(e+8388608)}function On(t){return In(t)}function Un(t,e,{aa:n=!1}={}){t.aa=n,e&&(e=Ln(e),t.h=e.buffer,t.m=e.O,t.j=0,t.l=t.h.length,t.g=t.j)}function Dn(t,e){if(t.g=e,e>t.l)throw xn(t.l,e)}function Nn(t,e){if(e<0)throw Error(`Tried to read a negative byte length: ${e}`);const n=t.g,r=n+e;if(r>t.l)throw xn(e,t.l-n);return t.g=r,n}function Bn(t,e){if(0==e)return U();var n=Nn(t,e);return t.aa&&t.m?n=t.h.subarray(n,n+e):(t=t.h,n=n===(e=n+e)?new Uint8Array(0):Ft?t.slice(n,e):new Uint8Array(t.subarray(n,e))),0==n.length?U():new N(n,O)}Ae.prototype.toJSON=void 0;var Gn=[];function jn(t){var e=t.g;if(e.g==e.l)return!1;t.l=t.g.g;var n=Mn(t.g);if(e=n>>>3,!((n&=7)>=0&&n<=5))throw kn(n,t.l);if(e<1)throw Error(`Invalid field number: ${e} (at position ${t.l})`);return t.m=e,t.h=n,!0}function Vn(t){switch(t.h){case 0:0!=t.h?Vn(t):Fn(t.g);break;case 1:Dn(t=t.g,t.g+8);break;case 2:if(2!=t.h)Vn(t);else{var e=Mn(t.g);Dn(t=t.g,t.g+e)}break;case 5:Dn(t=t.g,t.g+4);break;case 3:for(e=t.m;;){if(!jn(t))throw Error(\"Unmatched start-group tag: stream EOF\");if(4==t.h){if(t.m!=e)throw Error(\"Unmatched end-group tag\");break}Vn(t)}break;default:throw kn(t.h,t.l)}}function Xn(t,e,n){const r=t.g.l,i=Mn(t.g),s=t.g.g+i;let o=s-r;if(o<=0&&(t.g.l=s,n(e,t,void 0,void 0,void 0),o=s-t.g.g),o)throw Error(`Message parsing ended unexpectedly. Expected to read ${i} bytes, instead read ${i-o} bytes, either the data ended unexpectedly or the message misreported its own length`);return t.g.g=s,t.g.l=r,e}function Hn(t){var o=Mn(t.g),a=Nn(t=t.g,o);if(t=t.h,s){var c,h=t;(c=i)||(c=i=new TextDecoder(\"utf-8\",{fatal:!0})),o=a+o,h=0===a&&o===h.length?h:h.subarray(a,o);try{var u=c.decode(h)}catch(t){if(void 0===r){try{c.decode(new Uint8Array([128]))}catch(t){}try{c.decode(new Uint8Array([97])),r=!0}catch(t){r=!1}}throw!r&&(i=void 0),t}}else{o=(u=a)+o,a=[];let r,i=null;for(;u<o;){var l=t[u++];l<128?a.push(l):l<224?u>=o?e():(r=t[u++],l<194||128!=(192&r)?(u--,e()):a.push((31&l)<<6|63&r)):l<240?u>=o-1?e():(r=t[u++],128!=(192&r)||224===l&&r<160||237===l&&r>=160||128!=(192&(c=t[u++]))?(u--,e()):a.push((15&l)<<12|(63&r)<<6|63&c)):l<=244?u>=o-2?e():(r=t[u++],128!=(192&r)||r-144+(l<<28)>>30!=0||128!=(192&(c=t[u++]))||128!=(192&(h=t[u++]))?(u--,e()):(l=(7&l)<<18|(63&r)<<12|(63&c)<<6|63&h,l-=65536,a.push(55296+(l>>10&1023),56320+(1023&l)))):e(),a.length>=8192&&(i=n(i,a),a.length=0)}u=n(i,a)}return u}function Wn(t){const e=Mn(t.g);return Bn(t.g,e)}function zn(t,e,n){var r=Mn(t.g);for(r=t.g.g+r;t.g.g<r;)n.push(e(t.g))}var Kn=[];function Yn(t,e,n){e.g?e.m(t,e.g,e.h,n):e.m(t,e.h,n)}var $n=class{constructor(t,e){this.u=Ne(t,e)}toJSON(){try{var t=Ue(this)}finally{Le=void 0}return t}l(){var t=_o;return t.g?t.l(this,t.g,t.h):t.l(this,t.h,t.defaultValue)}clone(){const t=this.u;return new this.constructor(Ge(t,0|t[Q],!1))}O(){return!!(2&(0|this.u[Q]))}};function qn(t){return t?/^\\d+$/.test(t)?(Vt(t),new Jn(Mt,Pt)):null:Zn||=new Jn(0,0)}$n.prototype.W=ut,$n.prototype.toString=function(){return this.u.toString()};var Jn=class{constructor(t,e){this.h=t>>>0,this.g=e>>>0}};let Zn;function Qn(t){return t?/^-?\\d+$/.test(t)?(Vt(t),new tr(Mt,Pt)):null:er||=new tr(0,0)}var tr=class{constructor(t,e){this.h=t>>>0,this.g=e>>>0}};let er;function nr(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 rr(t,e){for(;e>127;)t.g.push(127&e|128),e>>>=7;t.g.push(e)}function ir(t,e){if(e>=0)rr(t,e);else{for(let n=0;n<9;n++)t.g.push(127&e|128),e>>=7;t.g.push(1)}}function sr(t,e){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 or(t,e){0!==e.length&&(t.l.push(e),t.h+=e.length)}function ar(t,e,n){rr(t.g,8*e+n)}function cr(t,e){return ar(t,e,2),e=t.g.end(),or(t,e),e.push(t.h),e}function hr(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 ur(t,e,n){ar(t,e,2),rr(t.g,n.length),or(t,t.g.end()),or(t,n)}function lr(t,e,n,r){null!=n&&(e=cr(t,e),r(n,t),hr(t,e))}function dr(){const t=class{constructor(){throw Error()}};return Object.setPrototypeOf(t,t.prototype),t}var fr=dr(),pr=dr(),gr=dr(),mr=dr(),yr=dr(),_r=dr(),vr=dr(),Er=dr(),wr=dr(),Tr=class{constructor(t,e,n){this.g=t,this.h=e,t=fr,this.l=!!t&&n===t||!1}};function Ar(t,e){return new Tr(t,e,fr)}function br(t,e,n,r,i){lr(t,n,Or(e,r),i)}const kr=Ar((function(t,e,n,r,i){return 2===t.h&&(Xn(t,an(e,r,n),i),!0)}),br),Sr=Ar((function(t,e,n,r,i){return 2===t.h&&(Xn(t,an(e,r,n),i),!0)}),br);var xr=Symbol(),Lr=Symbol(),Rr=Symbol(),Fr=Symbol();let Ir,Mr;function Pr(t,e,n,r){var i=r[t];if(i)return i;(i={}).Ma=r,i.T=function(t){switch(typeof t){case\"boolean\":return Re||=[0,void 0,!0];case\"number\":return t>0?void 0:0===t?Fe||=[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.ga=s,\"function\"==typeof(s=r[++o])&&(i.la=!0,Ir??=s,Mr??=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 Tr?t=s:(t=kr,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 Cr(t){return Array.isArray(t)?t[0]instanceof Tr?t:[Sr,t]:[t,void 0]}function Or(t,e){return t instanceof $n?t.u:Array.isArray(t)?De(t,e,!1):void 0}function Ur(t,e,n,r){const i=n.g;t[e]=r?(t,e,n)=>i(t,e,n,r):i}function Dr(t,e,n,r,i){const s=n.g;let o,a;t[e]=(t,e,n)=>s(t,e,n,a||=Pr(Lr,Ur,Dr,r).T,o||=Nr(r),i)}function Nr(t){let e=t[Rr];if(null!=e)return e;const n=Pr(Lr,Ur,Dr,t);return e=n.la?(t,e)=>Ir(t,e,n):(t,e)=>{const r=0|t[Q];for(;jn(e)&&4!=e.h;){var i=e.m,s=n[i];if(null==s){var o=n.ga;o&&(o=o[i])&&(null!=(o=Br(o))&&(s=n[i]=o))}null!=s&&s(e,t,i)||(i=(s=e).l,Vn(s),s.fa?s=void 0:(o=s.g.g-i,s.g.g=i,s=Bn(s.g,o)),i=t,s&&((o=i[q])?o.push(s):i[q]=[s]))}return 8192&r&&it(t),!0},t[Rr]=e}function Br(t){const e=(t=Cr(t))[0].g;if(t=t[1]){const n=Nr(t),r=Pr(Lr,Ur,Dr,t).T;return(t,i,s)=>e(t,i,s,r,n)}return e}function Gr(t,e,n){t[e]=n.h}function jr(t,e,n,r){let i,s;const o=n.h;t[e]=(t,e,n)=>o(t,e,n,s||=Pr(xr,Gr,jr,r).T,i||=Vr(r))}function Vr(t){let e=t[Fr];if(!e){const n=Pr(xr,Gr,jr,t);e=(t,e)=>Xr(t,e,n),t[Fr]=e}return e}function Xr(t,e,n){!function(t,e,n){const r=512&e?0:-1,i=t.length,s=i+((e=64&e?256&e:!!i&<(t[i-1]))?-1:0);for(let e=0;e<s;e++)n(e-r,t[e]);if(e){t=t[i-1];for(const e in t)!isNaN(e)&&n(+e,t[e])}}(t,0|t[Q]|(n.T[1]?512:0),((t,r)=>{if(null!=r){var i=function(t,e){var n=t[e];if(n)return n;if((n=t.ga)&&(n=n[e])){var r=(n=Cr(n))[0].h;if(n=n[1]){const e=Vr(n),i=Pr(xr,Gr,jr,n).T;n=t.la?Mr(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=mt(t))&&function(t,e){or(t,t.g.end());for(let n=0;n<e.length;n++)or(t,D(e[n])||new Uint8Array(0))}(e,t)}function Hr(t,e){if(Array.isArray(e)){var n=0|e[Q];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),rt(e,-6145&(5|n)),2&n&&Object.freeze(e),e}}function Wr(t,e,n){return new Tr(t,e,n)}function zr(t,e,n){return new Tr(t,e,n)}function Kr(t,e,n){We(t,0|t[Q],e,n)}var Yr=Ar((function(t,e,n,r,i){return 2===t.h&&(t=Xn(t,De([void 0,void 0],r,!0),i),pt(r=0|e[Q]),(i=Xe(e,r,n))instanceof Ae?0!=(2&i.M)?((i=i.da()).push(t),We(e,r,n,i)):i.Ja(t):Array.isArray(i)?(2&(0|i[Q])&&We(e,r,n,i=Qe(i)),i.push(t)):We(e,r,n,[t]),!0)}),(function(t,e,n,r,i){if(e instanceof Ae)e.forEach(((e,s)=>{lr(t,n,De([s,e],r,!1),i)}));else if(Array.isArray(e))for(let s=0;s<e.length;s++){const o=e[s];Array.isArray(o)&&lr(t,n,De(o,r,!1),i)}}));function $r(t,e,n){if(e=function(t){if(null==t)return t;const e=typeof t;if(\"bigint\"===e)return String(Ht(64,t));if(Qt(t)){if(\"string\"===e)return oe(t);if(\"number\"===e)return se(t)}}(e),null!=e){if(\"string\"==typeof e)Qn(e);if(null!=e)switch(ar(t,n,0),typeof e){case\"number\":t=t.g,Ot(e),nr(t,Mt,Pt);break;case\"bigint\":n=BigInt.asUintN(64,e),n=new tr(Number(n&BigInt(4294967295)),Number(n>>BigInt(32))),nr(t.g,n.h,n.g);break;default:n=Qn(e),nr(t.g,n.h,n.g)}}}function qr(t,e,n){null!=(e=te(e))&&null!=e&&(ar(t,n,0),ir(t.g,e))}function Jr(t,e,n){null!=(e=Jt(e))&&(ar(t,n,0),t.g.g.push(e?1:0))}function Zr(t,e,n){null!=(e=fe(e))&&ur(t,n,c(e))}function Qr(t,e,n,r,i){lr(t,n,Or(e,r),i)}function ti(t,e,n){null==e||\"string\"==typeof e||e instanceof N||(C(e)?C(e)&&H(Z):e=void 0),null!=e&&ur(t,n,Ln(e).buffer)}function ei(t,e,n){return(5===t.h||2===t.h)&&(e=en(e,0|e[Q],n,!1),2==t.h?zn(t,Cn,e):e.push(Cn(t.g)),!0)}var ni=Wr((function(t,e,n){if(1!==t.h)return!1;var r=t.g;t=Pn(r);const i=Pn(r);r=2*(i>>31)+1;const s=i>>>20&2047;return t=4294967296*(1048575&i)+t,Kr(e,n,2047==s?t?NaN:r*(1/0):0==s?5e-324*r*t:r*Math.pow(2,s-1075)*(t+4503599627370496)),!0}),(function(t,e,n){null!=(e=qt(e))&&(ar(t,n,1),t=t.g,(n=It||=new DataView(new ArrayBuffer(8))).setFloat64(0,+e,!0),Mt=n.getUint32(0,!0),Pt=n.getUint32(4,!0),sr(t,Mt),sr(t,Pt))}),dr()),ri=Wr((function(t,e,n){return 5===t.h&&(Kr(e,n,Cn(t.g)),!0)}),(function(t,e,n){null!=(e=qt(e))&&(ar(t,n,5),t=t.g,Ut(e),sr(t,Mt))}),vr),ii=zr(ei,(function(t,e,n){if(null!=(e=Hr(qt,e)))for(let o=0;o<e.length;o++){var r=t,i=n,s=e[o];null!=s&&(ar(r,i,5),r=r.g,Ut(s),sr(r,Mt))}}),vr),si=zr(ei,(function(t,e,n){if(null!=(e=Hr(qt,e))&&e.length){ar(t,n,2),rr(t.g,4*e.length);for(let r=0;r<e.length;r++)n=t.g,Ut(e[r]),sr(n,Mt)}}),vr),oi=Wr((function(t,e,n){return 0===t.h&&(Kr(e,n,Rn(t.g,Nt)),!0)}),$r,_r),ai=Wr((function(t,e,n){return 0===t.h&&(Kr(e,n,0===(t=Rn(t.g,Nt))?void 0:t),!0)}),$r,_r),ci=Wr((function(t,e,n){return 0===t.h&&(Kr(e,n,Rn(t.g,Dt)),!0)}),(function(t,e,n){if(null!=(e=ue(e))){if(\"string\"==typeof e)qn(e);if(null!=e)switch(ar(t,n,0),typeof e){case\"number\":t=t.g,Ot(e),nr(t,Mt,Pt);break;case\"bigint\":n=BigInt.asUintN(64,e),n=new Jn(Number(n&BigInt(4294967295)),Number(n>>BigInt(32))),nr(t.g,n.h,n.g);break;default:n=qn(e),nr(t.g,n.h,n.g)}}}),dr()),hi=Wr((function(t,e,n){return 0===t.h&&(Kr(e,n,In(t.g)),!0)}),qr,mr),ui=zr((function(t,e,n){return(0===t.h||2===t.h)&&(e=en(e,0|e[Q],n,!1),2==t.h?zn(t,In,e):e.push(In(t.g)),!0)}),(function(t,e,n){if(null!=(e=Hr(te,e))&&e.length){n=cr(t,n);for(let n=0;n<e.length;n++)ir(t.g,e[n]);hr(t,n)}}),mr),li=Wr((function(t,e,n){return 0===t.h&&(Kr(e,n,0===(t=In(t.g))?void 0:t),!0)}),qr,mr),di=Wr((function(t,e,n){return 0===t.h&&(Kr(e,n,Fn(t.g)),!0)}),Jr,pr),fi=Wr((function(t,e,n){return 0===t.h&&(Kr(e,n,!1===(t=Fn(t.g))?void 0:t),!0)}),Jr,pr),pi=zr((function(t,e,n){return 2===t.h&&(t=Hn(t),en(e,0|e[Q],n,!1).push(t),!0)}),(function(t,e,n){if(null!=(e=Hr(fe,e)))for(let o=0;o<e.length;o++){var r=t,i=n,s=e[o];null!=s&&ur(r,i,c(s))}}),gr),gi=Wr((function(t,e,n){return 2===t.h&&(Kr(e,n,\"\"===(t=Hn(t))?void 0:t),!0)}),Zr,gr),mi=Wr((function(t,e,n){return 2===t.h&&(Kr(e,n,Hn(t)),!0)}),Zr,gr),yi=function(t,e,n=fr){return new Tr(t,e,n)}((function(t,e,n,r,i){return 2===t.h&&(r=De(void 0,r,!0),en(e,0|e[Q],n,!0).push(r),Xn(t,r,i),!0)}),(function(t,e,n,r,i){if(Array.isArray(e))for(let s=0;s<e.length;s++)Qr(t,e[s],n,r,i)})),_i=Ar((function(t,e,n,r,i,s){return 2===t.h&&(sn(e,0|e[Q],s,n),Xn(t,e=an(e,r,n),i),!0)}),Qr),vi=Wr((function(t,e,n){return 2===t.h&&(Kr(e,n,Wn(t)),!0)}),ti,Er),Ei=zr((function(t,e,n){return(0===t.h||2===t.h)&&(e=en(e,0|e[Q],n,!1),2==t.h?zn(t,Mn,e):e.push(Mn(t.g)),!0)}),(function(t,e,n){if(null!=(e=Hr(ee,e)))for(let o=0;o<e.length;o++){var r=t,i=n,s=e[o];null!=s&&(ar(r,i,0),rr(r.g,s))}}),yr),wi=Wr((function(t,e,n){return 0===t.h&&(Kr(e,n,0===(t=Mn(t.g))?void 0:t),!0)}),(function(t,e,n){null!=(e=ee(e))&&null!=e&&(ar(t,n,0),rr(t.g,e))}),yr),Ti=Wr((function(t,e,n){return 0===t.h&&(Kr(e,n,In(t.g)),!0)}),(function(t,e,n){null!=(e=te(e))&&(e=parseInt(e,10),ar(t,n,0),ir(t.g,e))}),wr);class Ai{constructor(t,e){this.h=t,this.g=e,this.l=hn,this.m=dn,this.defaultValue=void 0}register(){w(this)}}function bi(t,e){return new Ai(t,e)}function ki(t,e){return(n,r)=>{if(Kn.length){const t=Kn.pop();t.o(r),Un(t.g,n,r),n=t}else n=new class{constructor(t,e){if(Gn.length){const n=Gn.pop();Un(n,t,e),t=n}else t=new class{constructor(t,e){this.h=null,this.m=!1,this.g=this.l=this.j=0,Un(this,t,e)}clear(){this.h=null,this.m=!1,this.g=this.l=this.j=0,this.aa=!1}}(t,e);this.g=t,this.l=this.g.g,this.h=this.m=-1,this.o(e)}o({fa:t=!1}={}){this.fa=t}}(n,r);try{const r=new t,s=r.u;Nr(e)(s,n);var i=r}finally{n.g.clear(),n.m=-1,n.h=-1,Kn.length<100&&Kn.push(n)}return i}}function Si(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}}}};Xr(this.u,e,Pr(xr,Gr,jr,t)),or(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 $n{constructor(t){super(t)}},Li=[0,gi,Wr((function(t,e,n){return 2===t.h&&(Kr(e,n,(t=Wn(t))===U()?void 0:t),!0)}),(function(t,e,n){if(null!=e){if(e instanceof $n){const r=e.Oa;return void(r&&(e=r(e),null!=e&&ur(t,n,Ln(e).buffer)))}if(Array.isArray(e))return}ti(t,e,n)}),Er)];let Ri,Fi=globalThis.trustedTypes;function Ii(t){void 0===Ri&&(Ri=function(){let t=null;if(!Fi)return t;try{const e=t=>t;t=Fi.createPolicy(\"goog#html\",{createHTML:e,createScript:e,createScriptURL:e})}catch(t){}return t}());var e=Ri;return new class{constructor(t){this.g=t}toString(){return this.g+\"\"}}(e?e.createScriptURL(t):t)}function Mi(t,...e){if(0===e.length)return Ii(t[0]);let n=t[0];for(let r=0;r<e.length;r++)n+=encodeURIComponent(e[r])+t[r+1];return Ii(n)}var Pi=[0,hi,Ti,di,-1,ui,Ti,-1],Ci=class extends $n{constructor(t){super(t)}},Oi=[0,di,mi,di,Ti,-1,zr((function(t,e,n){return(0===t.h||2===t.h)&&(e=en(e,0|e[Q],n,!1),2==t.h?zn(t,On,e):e.push(In(t.g)),!0)}),(function(t,e,n){if(null!=(e=Hr(te,e))&&e.length){n=cr(t,n);for(let n=0;n<e.length;n++)ir(t.g,e[n]);hr(t,n)}}),wr),mi,-1,[0,di,-1],Ti,di,-1],Ui=[0,mi,-2],Di=class extends $n{constructor(t){super(t)}},Ni=[0],Bi=[0,hi,di,1,di,-3],Gi=class extends $n{constructor(t){super(t,2)}},ji={};ji[336783863]=[0,mi,di,-1,hi,[0,[1,2,3,4,5,6,7,8,9],_i,Ni,_i,Oi,_i,Ui,_i,Bi,_i,Pi,_i,[0,mi,-2],_i,[0,mi,Ti],_i,[0,Ti,mi,-1],_i,[0,Ti,-1]],[0,mi],di,[0,[1,3],[2,4],_i,[0,ui],-1,_i,[0,pi],-1,yi,[0,mi,-1]],mi];var Vi=[0,ai,-1,fi,-3,ai,ui,gi,li,ai,-1,fi,li,fi,-2,gi];function Xi(t,e){tn(t,2,de(e),\"\")}function Hi(t,e){mn(t,3,e)}function Wi(t,e){mn(t,4,e)}var zi=class extends $n{constructor(t){super(t,500)}o(t){return dn(this,0,7,t)}},Ki=[-1,{}],Yi=[0,mi,1,Ki],$i=[0,mi,pi,Ki];function qi(t,e){yn(t,1,zi,e)}function Ji(t,e){mn(t,10,e)}function Zi(t,e){mn(t,15,e)}var Qi=class extends $n{constructor(t){super(t,500)}o(t){return dn(this,0,1001,t)}},ts=[-500,yi,[-500,gi,-1,pi,-3,[-2,ji,di],yi,Li,li,-1,Yi,$i,yi,[0,gi,fi],gi,Vi,li,pi,987,pi],4,yi,[-500,mi,-1,[-1,{}],998,mi],yi,[-500,mi,pi,-1,[-2,{},di],997,pi,-1],li,yi,[-500,mi,pi,Ki,998,pi],pi,li,Yi,$i,yi,[0,gi,-1,Ki],pi,-2,Vi,gi,-1,fi,[0,fi,wi],978,Ki,yi,Li];Qi.prototype.g=Si(ts);var es=ki(Qi,ts),ns=class extends $n{constructor(t){super(t)}},rs=class extends $n{constructor(t){super(t)}g(){return ln(this,ns,1)}},is=[0,yi,[0,hi,ri,mi,-1]],ss=ki(rs,is),os=class extends $n{constructor(t){super(t)}},as=class extends $n{constructor(t){super(t)}},cs=class extends $n{constructor(t){super(t)}h(){return hn(this,os,2)}g(){return ln(this,as,5)}},hs=ki(class extends $n{constructor(t){super(t)}},[0,pi,ui,si,[0,Ti,[0,hi,-3],[0,ri,-3],[0,hi,-1,[0,yi,[0,hi,-2]]],yi,[0,ri,-1,mi,ri]],mi,-1,oi,yi,[0,hi,ri],pi,oi]),us=class extends $n{constructor(t){super(t)}},ls=ki(class extends $n{constructor(t){super(t)}},[0,yi,[0,ri,-4]]),ds=class extends $n{constructor(t){super(t)}},fs=ki(class extends $n{constructor(t){super(t)}},[0,yi,[0,ri,-4]]),ps=class extends $n{constructor(t){super(t)}},gs=[0,hi,-1,si,Ti],ms=class extends $n{constructor(t){super(t)}};ms.prototype.g=Si([0,ri,-4,oi]);var ys=class extends $n{constructor(t){super(t)}},_s=ki(class extends $n{constructor(t){super(t)}},[0,yi,[0,1,hi,mi,is],oi]),vs=class extends $n{constructor(t){super(t)}},Es=class extends $n{constructor(t){super(t)}ma(){const t=Ke(this);return null==t?U():t}},ws=class extends $n{constructor(t){super(t)}},Ts=[1,2],As=ki(class extends $n{constructor(t){super(t)}},[0,yi,[0,Ts,_i,[0,si],_i,[0,vi],hi,mi],oi]),bs=class extends $n{constructor(t){super(t)}},ks=[0,mi,hi,ri,pi,-1],Ss=class extends $n{constructor(t){super(t)}},xs=[0,di,-1],Ls=class extends $n{constructor(t){super(t)}},Rs=[1,2,3,4,5],Fs=class extends $n{constructor(t){super(t)}g(){return null!=Ke(this)}h(){return null!=vn(this,2)}},Is=class extends $n{constructor(t){super(t)}g(){return Jt(Ve(this,2))??!1}},Ms=[0,vi,mi,[0,hi,oi,-1],[0,ci,oi]],Ps=[0,Ms,di,[0,Rs,_i,Bi,_i,Oi,_i,Pi,_i,Ni,_i,Ui],Ti],Cs=class extends $n{constructor(t){super(t)}},Os=[0,Ps,ri,-1,hi],Us=bi(502141897,Cs);ji[502141897]=Os;var Ds=ki(class extends $n{constructor(t){super(t)}},[0,[0,Ti,-1,ii,Ei],gs]),Ns=class extends $n{constructor(t){super(t)}},Bs=class extends $n{constructor(t){super(t)}},Gs=[0,Ps,ri,[0,Ps],di],js=[0,Ps,Os,Gs,ri,[0,[0,Ms]]],Vs=bi(508968150,Bs);ji[508968150]=js,ji[508968149]=Gs;var Xs=class extends $n{constructor(t){super(t)}},Hs=bi(513916220,Xs);ji[513916220]=[0,Ps,js,hi];var Ws=class extends $n{constructor(t){super(t)}h(){return hn(this,bs,2)}g(){He(this,2)}},zs=[0,Ps,ks];ji[478825465]=zs;var Ks=class extends $n{constructor(t){super(t)}},Ys=class extends $n{constructor(t){super(t)}},$s=class extends $n{constructor(t){super(t)}},qs=class extends $n{constructor(t){super(t)}},Js=class extends $n{constructor(t){super(t)}},Zs=[0,Ps,[0,Ps],zs,-1],Qs=[0,Ps,ri,hi],to=[0,Ps,ri],eo=[0,Ps,Qs,to,ri],no=bi(479097054,Js);ji[479097054]=[0,Ps,eo,Zs],ji[463370452]=Zs,ji[464864288]=Qs;var ro=bi(462713202,qs);ji[462713202]=eo,ji[474472470]=to;var io=class extends $n{constructor(t){super(t)}},so=class extends $n{constructor(t){super(t)}},oo=class extends $n{constructor(t){super(t)}},ao=class extends $n{constructor(t){super(t)}},co=[0,Ps,ri,-1,hi],ho=[0,Ps,ri,di];ao.prototype.g=Si([0,Ps,to,[0,Ps],Os,Gs,co,ho]);var uo=class extends $n{constructor(t){super(t)}},lo=bi(456383383,uo);ji[456383383]=[0,Ps,ks];var fo=class extends $n{constructor(t){super(t)}},po=bi(476348187,fo);ji[476348187]=[0,Ps,xs];var go=class extends $n{constructor(t){super(t)}},mo=class extends $n{constructor(t){super(t)}},yo=[0,Ti,-1],_o=bi(458105876,class extends $n{constructor(t){super(t)}g(){var t=this.u;const e=0|t[Q],n=2&e;return t=function(t,e,n){var r=mo;const i=2&e;let s=!1;if(null==n){if(i)return Ie();n=[]}else if(n.constructor===Ae){if(0==(2&n.M)||i)return n;n=n.da()}else Array.isArray(n)?s=!!(2&(0|n[Q])):n=[];if(i){if(!n.length)return Ie();s||(s=!0,it(n))}else s&&(s=!1,n=Qe(n));return s||(64&(0|n[Q])?n[Q]&=-33:32&e&&nt(n,32)),We(t,e,2,r=new Ae(n,r,ge,void 0)),r}(t,e,Xe(t,e,2)),!n&&mo&&(t.pa=!0),t}});ji[458105876]=[0,yo,Yr,[!0,oi,[0,mi,-1,pi]]];var vo=class extends $n{constructor(t){super(t)}},Eo=bi(458105758,vo);ji[458105758]=[0,Ps,mi,yo];var wo=class extends $n{constructor(t){super(t)}},To=bi(443442058,wo);ji[443442058]=[0,Ps,mi,hi,ri,pi,-1,di,ri],ji[514774813]=co;var Ao=class extends $n{constructor(t){super(t)}},bo=bi(516587230,Ao);function ko(t,e){return e=e?e.clone():new bs,void 0!==t.displayNamesLocale?He(e,1,de(t.displayNamesLocale)):void 0===t.displayNamesLocale&&He(e,1),void 0!==t.maxResults?Tn(e,2,t.maxResults):\"maxResults\"in t&&He(e,2),void 0!==t.scoreThreshold?An(e,3,t.scoreThreshold):\"scoreThreshold\"in t&&He(e,3),void 0!==t.categoryAllowlist?bn(e,4,t.categoryAllowlist):\"categoryAllowlist\"in t&&He(e,4),void 0!==t.categoryDenylist?bn(e,5,t.categoryDenylist):\"categoryDenylist\"in t&&He(e,5),e}function So(t,e=-1,n=\"\"){return{categories:t.map((t=>({index:_n(t,1)??0??-1,score:En(t,2)??0,categoryName:vn(t,3)??\"\"??\"\",displayName:vn(t,4)??\"\"??\"\"}))),headIndex:e,headName:n}}function xo(t){var e=$e(t,3,qt,Ye()),n=$e(t,2,te,Ye()),r=$e(t,1,fe,Ye()),i=$e(t,9,fe,Ye());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=hn(t,cs,4)?.h())&&(s.boundingBox={originX:_n(e,1)??0,originY:_n(e,2)??0,width:_n(e,3)??0,height:_n(e,4)??0,angle:0}),hn(t,cs,4)?.g().length)for(const e of hn(t,cs,4).g())s.keypoints.push({x:ze(e,1)??0,y:ze(e,2)??0,score:ze(e,4)??0,label:vn(e,3)??\"\"});return s}function Lo(t){const e=[];for(const n of ln(t,ds,1))e.push({x:En(n,1)??0,y:En(n,2)??0,z:En(n,3)??0,visibility:En(n,4)??0});return e}function Ro(t){const e=[];for(const n of ln(t,us,1))e.push({x:En(n,1)??0,y:En(n,2)??0,z:En(n,3)??0,visibility:En(n,4)??0});return e}function Fo(t){return Array.from(t,(t=>t>127?t-256:t))}function Io(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 Mo;ji[516587230]=[0,Ps,co,ho,ri],ji[518928384]=ho;const Po=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 Co(){if(void 0===Mo)try{await WebAssembly.instantiate(Po),Mo=!0}catch{Mo=!1}return Mo}async function Oo(t,e=Mi``){const n=await Co()?\"wasm_internal\":\"wasm_nosimd_internal\";return{wasmLoaderPath:`${e}/${t}_${n}.js`,wasmBinaryPath:`${e}/${t}_${n}.wasm`}}var Uo=class{};function Do(){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 No(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)}))}importScripts(t.toString())}function Bo(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 Go(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 jo(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]=Bo(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 Vo(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 Xo(t,e,n){t.i.simpleListeners=t.i.simpleListeners||{},t.i.simpleListeners[e]=n}function Ho(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)}}Uo.forVisionTasks=function(t){return Oo(\"vision\",t)},Uo.forTextTasks=function(t){return Oo(\"text\",t)},Uo.forGenAiExperimentalTasks=function(t){return Oo(\"genai_experimental\",t)},Uo.forGenAiTasks=function(t){return Oo(\"genai\",t)},Uo.forAudioTasks=function(t){return Oo(\"audio\",t)},Uo.isSimdSupported=function(){return Co()};async function Wo(t,e,n,r){return t=await(async(t,e,n,r,i)=>{if(e&&await No(e),!self.ModuleFactory)throw Error(\"ModuleFactory not set.\");if(n&&(await No(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 zo(t,e){const n=hn(t.baseOptions,Fs,1)||new Fs;\"string\"==typeof e?(He(n,2,de(e)),He(n,1)):e instanceof Uint8Array&&(He(n,1,dt(e,!1)),He(n,2)),dn(t.baseOptions,0,1,n)}function Ko(t){try{const e=t.G.length;if(1===e)throw Error(t.G[0].message);if(e>1)throw Error(\"Encountered multiple errors: \"+t.G.map((t=>t.message)).join(\", \"))}finally{t.G=[]}}function Yo(t,e){t.B=Math.max(t.B,e)}function $o(t,e){t.A=new zi,Xi(t.A,\"PassThroughCalculator\"),Hi(t.A,\"free_memory\"),Wi(t.A,\"free_memory_unused_out\"),Ji(e,\"free_memory\"),qi(e,t.A)}function qo(t,e){Hi(t.A,e),Wi(t.A,e+\"_unused_out\")}function Jo(t){t.g.addBoolToStream(!0,\"free_memory\",t.B)}var Zo=class{constructor(t){this.g=t,this.G=[],this.B=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(!(hn(this.baseOptions,Fs,1)?.g()||hn(this.baseOptions,Fs,1)?.h()||t.baseOptions?.modelAssetBuffer||t.baseOptions?.modelAssetPath))throw Error(\"Either baseOptions.modelAssetPath or baseOptions.modelAssetBuffer must be set\");if(function(t,e){let n=hn(t.baseOptions,Ls,3);if(!n){var r=n=new Ls,i=new Di;fn(r,4,Rs,i)}\"delegate\"in e&&(\"GPU\"===e.delegate?(e=n,r=new Ci,fn(e,2,Rs,r)):(e=n,r=new Di,fn(e,4,Rs,r))),dn(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),zo(this,\"/model.dat\"),this.m(),this.J()}));if(e.modelAssetBuffer instanceof Uint8Array)zo(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=>{zo(this,t),this.m(),this.J()}))}return this.m(),this.J(),Promise.resolve()}J(){}ca(){let t;if(this.g.ca((e=>{t=es(e)})),!t)throw Error(\"Failed to retrieve CalculatorGraphConfig\");return t}setGraph(t,e){this.g.attachErrorListener(((t,e)=>{this.G.push(Error(e))})),this.g.Ha(),this.g.setGraph(t,e),this.A=void 0,Ko(this)}finishProcessing(){this.g.finishProcessing(),Ko(this)}close(){this.A=void 0,this.g.closeGraph()}};function Qo(t,e){if(!t)throw Error(`Unable to obtain required WebGL resource: ${e}`);return t}Zo.prototype.close=Zo.prototype.close;class ta{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 ea(t,e,n){const r=t.g;if(n=Qo(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 na(t,e){const n=t.g,r=Qo(n.createVertexArray(),\"Failed to create vertex array\");n.bindVertexArray(r);const i=Qo(n.createBuffer(),\"Failed to create buffer\");n.bindBuffer(n.ARRAY_BUFFER,i),n.enableVertexAttribArray(t.P),n.vertexAttribPointer(t.P,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=Qo(n.createBuffer(),\"Failed to create buffer\");return n.bindBuffer(n.ARRAY_BUFFER,s),n.enableVertexAttribArray(t.J),n.vertexAttribPointer(t.J,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 ta(n,r,i,s)}function ra(t,e){if(t.g){if(e!==t.g)throw Error(\"Cannot change GL context once initialized\")}else t.g=e}function ia(t,e,n,r){return ra(t,e),t.h||(t.m(),t.C()),n?(t.s||(t.s=na(t,!0)),n=t.s):(t.v||(t.v=na(t,!1)),n=t.v),e.useProgram(t.h),n.bind(),t.l(),t=r(),n.g.bindVertexArray(null),t}function sa(t,e,n){return ra(t,e),t=Qo(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 oa(t,e,n){ra(t,e),t.A||(t.A=Qo(e.createFramebuffer(),\"Failed to create framebuffe.\")),e.bindFramebuffer(e.FRAMEBUFFER,t.A),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,n,0)}function aa(t){t.g?.bindFramebuffer(t.g.FRAMEBUFFER,null)}var ca=class{G(){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=Qo(t.createProgram(),\"Failed to create WebGL program\"),this.Z=ea(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.Y=ea(this,this.G(),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.P=t.getAttribLocation(this.h,\"aVertex\"),this.J=t.getAttribLocation(this.h,\"aTex\")}C(){}l(){}close(){if(this.h){const t=this.g;t.deleteProgram(this.h),t.deleteShader(this.Z),t.deleteShader(this.Y)}this.A&&this.g.deleteFramebuffer(this.A),this.v&&this.v.close(),this.s&&this.s.close()}};var ha=class extends ca{G(){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 \"}C(){const t=this.g;t.activeTexture(t.TEXTURE1),this.B=sa(this,t,t.LINEAR),t.activeTexture(t.TEXTURE2),this.j=sa(this,t,t.NEAREST)}m(){super.m();const t=this.g;this.L=Qo(t.getUniformLocation(this.h,\"backgroundTexture\"),\"Uniform location\"),this.U=Qo(t.getUniformLocation(this.h,\"colorMappingTexture\"),\"Uniform location\"),this.K=Qo(t.getUniformLocation(this.h,\"maskTexture\"),\"Uniform location\")}l(){super.l();const t=this.g;t.uniform1i(this.K,0),t.uniform1i(this.L,1),t.uniform1i(this.U,2)}close(){this.B&&this.g.deleteTexture(this.B),this.j&&this.g.deleteTexture(this.j),super.close()}},ua=class extends ca{G(){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 \"}C(){const t=this.g;t.activeTexture(t.TEXTURE1),this.j=sa(this,t),t.activeTexture(t.TEXTURE2),this.B=sa(this,t)}m(){super.m();const t=this.g;this.K=Qo(t.getUniformLocation(this.h,\"defaultTexture\"),\"Uniform location\"),this.L=Qo(t.getUniformLocation(this.h,\"overlayTexture\"),\"Uniform location\"),this.H=Qo(t.getUniformLocation(this.h,\"maskTexture\"),\"Uniform location\")}l(){super.l();const t=this.g;t.uniform1i(this.H,0),t.uniform1i(this.K,1),t.uniform1i(this.L,2)}close(){this.j&&this.g.deleteTexture(this.j),this.B&&this.g.deleteTexture(this.B),super.close()}};function la(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 da(t){var e=la(t,1);if(!e){if(e=la(t,0))e=new Float32Array(e).map((t=>t/255));else{e=new Float32Array(t.width*t.height);const r=pa(t);var n=ma(t);if(oa(n,r,fa(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 fa(t){let e=la(t,2);if(!e){const n=pa(t);e=ya(t);const r=da(t),i=ga(t);n.texImage2D(n.TEXTURE_2D,0,i,t.width,t.height,0,n.RED,n.FLOAT,r),_a(t)}return e}function pa(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=Qo(t.canvas.getContext(\"webgl2\"),\"You cannot use a canvas that is already bound to a different type of rendering context.\")),t.h}function ga(t){if(t=pa(t),!va)if(t.getExtension(\"EXT_color_buffer_float\")&&t.getExtension(\"OES_texture_float_linear\")&&t.getExtension(\"EXT_float_blend\"))va=t.R32F;else{if(!t.getExtension(\"EXT_color_buffer_half_float\"))throw Error(\"GPU does not fully support 4-channel float32 or float16 formats\");va=t.R16F}return va}function ma(t){return t.l||(t.l=new ca),t.l}function ya(t){const e=pa(t);e.viewport(0,0,t.width,t.height),e.activeTexture(e.TEXTURE0);let n=la(t,2);return n||(n=sa(ma(t),e,t.m?e.LINEAR:e.NEAREST),t.g.push(n),t.j=!0),e.bindTexture(e.TEXTURE_2D,n),n}function _a(t){t.h.bindTexture(t.h.TEXTURE_2D,null)}var va,Ea=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===--wa&&console.error(\"You seem to be creating MPMask instances without invoking .close(). This leaks resources.\"))}Da(){return!!la(this,0)}ja(){return!!la(this,1)}R(){return!!la(this,2)}ia(){return(e=la(t=this,0))||(e=da(t),e=new Uint8Array(e.map((t=>255*t))),t.g.push(e)),e;var t,e}ha(){return da(this)}N(){return fa(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=pa(this),e=ma(this);t.activeTexture(t.TEXTURE1),n=sa(e,t,this.m?t.LINEAR:t.NEAREST),t.bindTexture(t.TEXTURE_2D,n);const r=ga(this);t.texImage2D(t.TEXTURE_2D,0,r,this.width,this.height,0,t.RED,t.FLOAT,null),t.bindTexture(t.TEXTURE_2D,null),oa(e,t,n),ia(e,t,!1,(()=>{ya(this),t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),t.drawArrays(t.TRIANGLE_FAN,0,4),_a(this)})),aa(e),_a(this)}}t.push(n)}return new Ea(t,this.m,this.R(),this.canvas,this.l,this.width,this.height)}close(){this.j&&pa(this).deleteTexture(la(this,2)),wa=-1}};Ea.prototype.close=Ea.prototype.close,Ea.prototype.clone=Ea.prototype.clone,Ea.prototype.getAsWebGLTexture=Ea.prototype.N,Ea.prototype.getAsFloat32Array=Ea.prototype.ha,Ea.prototype.getAsUint8Array=Ea.prototype.ia,Ea.prototype.hasWebGLTexture=Ea.prototype.R,Ea.prototype.hasFloat32Array=Ea.prototype.ja,Ea.prototype.hasUint8Array=Ea.prototype.Da;var wa=250;const Ta={color:\"white\",lineWidth:4,radius:6};function Aa(t){return{...Ta,fillColor:(t=t||{}).color,...t}}function ba(t,e){return t instanceof Function?t(e):t}function ka(t,e,n){return Math.max(Math.min(e,n),Math.min(Math.max(e,n),t))}function Sa(t){if(!t.l)throw Error(\"CPU rendering requested but CanvasRenderingContext2D not provided.\");return t.l}function xa(t){if(!t.j)throw Error(\"GPU rendering requested but WebGL2RenderingContext not provided.\");return t.j}function La(t,e,n){if(e.R())n(e.N());else{const r=e.ja()?e.ha():e.ia();t.m=t.m??new ca;const i=xa(t);n((t=new Ea([r],e.m,!1,i.canvas,t.m,e.width,e.height)).N()),t.close()}}function Ra(t,e,n,r){const i=function(t){return t.g||(t.g=new ha),t.g}(t),s=xa(t),o=Array.isArray(n)?new ImageData(new Uint8ClampedArray(n),1,1):n;ia(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.B),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,n),t.H&&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.H,r))i.activeTexture(i.TEXTURE2),i.bindTexture(i.TEXTURE_2D,t.j);else{t.H=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 Fa(t,e,n,r){const i=xa(t),s=function(t){return t.h||(t.h=new ua),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;ia(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.B),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 Ia=class{constructor(t,e){\"undefined\"!=typeof CanvasRenderingContext2D&&t instanceof CanvasRenderingContext2D||t instanceof OffscreenCanvasRenderingContext2D?(this.l=t,this.j=e):this.j=t}wa(t,e){if(t){var n=Sa(this);e=Aa(e),n.save();var r=n.canvas,i=0;for(const s of t)n.fillStyle=ba(e.fillColor,{index:i,from:s}),n.strokeStyle=ba(e.color,{index:i,from:s}),n.lineWidth=ba(e.lineWidth,{index:i,from:s}),(t=new Path2D).arc(s.x*r.width,s.y*r.height,ba(e.radius,{index:i,from:s}),0,2*Math.PI),n.fill(t),n.stroke(t),++i;n.restore()}}va(t,e,n){if(t&&e){var r=Sa(this);n=Aa(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=ba(n.color,{index:s,from:e,to:a}),r.lineWidth=ba(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()}}sa(t,e){const n=Sa(this);e=Aa(e),n.save(),n.beginPath(),n.lineWidth=ba(e.lineWidth,{}),n.strokeStyle=ba(e.color,{}),n.fillStyle=ba(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()}ta(t,e,n=[0,0,0,255]){this.l?function(t,e,n,r){const i=xa(t);La(t,e,(e=>{Ra(t,e,n,r),(e=Sa(t)).drawImage(i.canvas,0,0,e.canvas.width,e.canvas.height)}))}(this,t,n,e):Ra(this,t.N(),n,e)}ua(t,e,n){this.l?function(t,e,n,r){const i=xa(t);La(t,e,(e=>{Fa(t,e,n,r),(e=Sa(t)).drawImage(i.canvas,0,0,e.canvas.width,e.canvas.height)}))}(this,t,e,n):Fa(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 Ma(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 Pa(t){var e=Ma(t,0);if(!e){e=Oa(t);const n=Ua(t),r=new Uint8Array(t.width*t.height*4);oa(n,e,Ca(t)),e.readPixels(0,0,t.width,t.height,e.RGBA,e.UNSIGNED_BYTE,r),aa(n),e=new ImageData(new Uint8ClampedArray(r.buffer),t.width,t.height),t.g.push(e)}return e}function Ca(t){let e=Ma(t,2);if(!e){const n=Oa(t);e=Da(t);const r=Ma(t,1)||Pa(t);n.texImage2D(n.TEXTURE_2D,0,n.RGBA,n.RGBA,n.UNSIGNED_BYTE,r),Na(t)}return e}function Oa(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=Qo(t.canvas.getContext(\"webgl2\"),\"You cannot use a canvas that is already bound to a different type of rendering context.\")),t.h}function Ua(t){return t.l||(t.l=new ca),t.l}function Da(t){const e=Oa(t);e.viewport(0,0,t.width,t.height),e.activeTexture(e.TEXTURE0);let n=Ma(t,2);return n||(n=sa(Ua(t),e),t.g.push(n),t.m=!0),e.bindTexture(e.TEXTURE_2D,n),n}function Na(t){t.h.bindTexture(t.h.TEXTURE_2D,null)}function Ba(t){const e=Oa(t);return ia(Ua(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()}))))}Ia.prototype.close=Ia.prototype.close,Ia.prototype.drawConfidenceMask=Ia.prototype.ua,Ia.prototype.drawCategoryMask=Ia.prototype.ta,Ia.prototype.drawBoundingBox=Ia.prototype.sa,Ia.prototype.drawConnectors=Ia.prototype.va,Ia.prototype.drawLandmarks=Ia.prototype.wa,Ia.lerp=function(t,e,n,r,i){return ka(r*(1-(t-e)/(n-e))+i*(1-(n-t)/(n-e)),r,i)},Ia.clamp=ka;var Ga=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===--ja&&console.error(\"You seem to be creating MPImage instances without invoking .close(). This leaks resources.\"))}Ca(){return!!Ma(this,0)}ka(){return!!Ma(this,1)}R(){return!!Ma(this,2)}Aa(){return Pa(this)}za(){var t=Ma(this,1);return t||(Ca(this),Da(this),t=Ba(this),Na(this),this.g.push(t),this.j=!0),t}N(){return Ca(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=Oa(this),e=Ua(this);t.activeTexture(t.TEXTURE1),n=sa(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),oa(e,t,n),ia(e,t,!1,(()=>{Da(this),t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),t.drawArrays(t.TRIANGLE_FAN,0,4),Na(this)})),aa(e),Na(this)}else{if(!(e instanceof ImageBitmap))throw Error(`Type is not supported: ${e}`);Ca(this),Da(this),n=Ba(this),Na(this)}t.push(n)}return new Ga(t,this.ka(),this.R(),this.canvas,this.l,this.width,this.height)}close(){this.j&&Ma(this,1).close(),this.m&&Oa(this).deleteTexture(Ma(this,2)),ja=-1}};Ga.prototype.close=Ga.prototype.close,Ga.prototype.clone=Ga.prototype.clone,Ga.prototype.getAsWebGLTexture=Ga.prototype.N,Ga.prototype.getAsImageBitmap=Ga.prototype.za,Ga.prototype.getAsImageData=Ga.prototype.Aa,Ga.prototype.hasWebGLTexture=Ga.prototype.R,Ga.prototype.hasImageBitmap=Ga.prototype.ka,Ga.prototype.hasImageData=Ga.prototype.Ca;var ja=250;function Va(...t){return t.map((([t,e])=>({start:t,end:e})))}const Xa=function(t){return class extends t{Ha(){this.i._registerModelResourcesGraphService()}}}((Ha=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:Do()?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?'),Go(this,r||\"input_audio\",(r=>{Go(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){Xo(this,\"__graph_config__\",(e=>{t(e)})),Go(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),Go(this,r,(t=>{this.i._addAudioToInputStream(this.g,e,n,t,i)}))}addGpuBufferToStream(t,e,n){Go(this,e,(e=>{const[r,i]=jo(this,t,e);this.i._addBoundTextureToStream(e,r,i,n)}))}addBoolToStream(t,e,n){Go(this,e,(e=>{this.i._addBoolToInputStream(t,e,n)}))}addDoubleToStream(t,e,n){Go(this,e,(e=>{this.i._addDoubleToInputStream(t,e,n)}))}addFloatToStream(t,e,n){Go(this,e,(e=>{this.i._addFloatToInputStream(t,e,n)}))}addIntToStream(t,e,n){Go(this,e,(e=>{this.i._addIntToInputStream(t,e,n)}))}addUintToStream(t,e,n){Go(this,e,(e=>{this.i._addUintToInputStream(t,e,n)}))}addStringToStream(t,e,n){Go(this,e,(e=>{Go(this,t,(t=>{this.i._addStringToInputStream(t,e,n)}))}))}addStringRecordToStream(t,e,n){Go(this,e,(e=>{Vo(this,Object.keys(t),(r=>{Vo(this,Object.values(t),(i=>{this.i._addFlatHashMapToInputStream(r,i,Object.keys(t).length,e,n)}))}))}))}addProtoToStream(t,e,n,r){Go(this,n,(n=>{Go(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){Go(this,t,(t=>{this.i._addEmptyPacketToInputStream(t,e)}))}addBoolVectorToStream(t,e,n){Go(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){Go(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){Go(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){Go(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){Go(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){Go(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)Go(this,e,(t=>{this.i._addStringVectorEntry(r,t)}));this.i._addStringVectorToInputStream(r,e,n)}))}addBoolToInputSidePacket(t,e){Go(this,e,(e=>{this.i._addBoolToInputSidePacket(t,e)}))}addDoubleToInputSidePacket(t,e){Go(this,e,(e=>{this.i._addDoubleToInputSidePacket(t,e)}))}addFloatToInputSidePacket(t,e){Go(this,e,(e=>{this.i._addFloatToInputSidePacket(t,e)}))}addIntToInputSidePacket(t,e){Go(this,e,(e=>{this.i._addIntToInputSidePacket(t,e)}))}addUintToInputSidePacket(t,e){Go(this,e,(e=>{this.i._addUintToInputSidePacket(t,e)}))}addStringToInputSidePacket(t,e){Go(this,e,(e=>{Go(this,t,(t=>{this.i._addStringToInputSidePacket(t,e)}))}))}addProtoToInputSidePacket(t,e,n){Go(this,n,(n=>{Go(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){Go(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){Go(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){Go(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){Go(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){Go(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){Go(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)Go(this,e,(t=>{this.i._addStringVectorEntry(n,t)}));this.i._addStringVectorToInputSidePacket(n,e)}))}attachBoolListener(t,e){Xo(this,t,e),Go(this,t,(t=>{this.i._attachBoolListener(t)}))}attachBoolVectorListener(t,e){Ho(this,t,e),Go(this,t,(t=>{this.i._attachBoolVectorListener(t)}))}attachIntListener(t,e){Xo(this,t,e),Go(this,t,(t=>{this.i._attachIntListener(t)}))}attachIntVectorListener(t,e){Ho(this,t,e),Go(this,t,(t=>{this.i._attachIntVectorListener(t)}))}attachUintListener(t,e){Xo(this,t,e),Go(this,t,(t=>{this.i._attachUintListener(t)}))}attachUintVectorListener(t,e){Ho(this,t,e),Go(this,t,(t=>{this.i._attachUintVectorListener(t)}))}attachDoubleListener(t,e){Xo(this,t,e),Go(this,t,(t=>{this.i._attachDoubleListener(t)}))}attachDoubleVectorListener(t,e){Ho(this,t,e),Go(this,t,(t=>{this.i._attachDoubleVectorListener(t)}))}attachFloatListener(t,e){Xo(this,t,e),Go(this,t,(t=>{this.i._attachFloatListener(t)}))}attachFloatVectorListener(t,e){Ho(this,t,e),Go(this,t,(t=>{this.i._attachFloatVectorListener(t)}))}attachStringListener(t,e){Xo(this,t,e),Go(this,t,(t=>{this.i._attachStringListener(t)}))}attachStringVectorListener(t,e){Ho(this,t,e),Go(this,t,(t=>{this.i._attachStringVectorListener(t)}))}attachProtoListener(t,e,n){Xo(this,t,e),Go(this,t,(t=>{this.i._attachProtoListener(t,n||!1)}))}attachProtoVectorListener(t,e,n){Ho(this,t,e),Go(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?'),Xo(this,t,((t,n)=>{t=new Float32Array(t.buffer,t.byteOffset,t.length/4),e(t,n)})),Go(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 Ha{get ea(){return this.i}oa(t,e,n){Go(this,e,(e=>{const[r,i]=jo(this,t,e);this.ea._addBoundTextureAsImageToStream(e,r,i,n)}))}V(t,e){Xo(this,t,e),Go(this,t,(t=>{this.ea._attachImageListener(t)}))}ba(t,e){Ho(this,t,e),Go(this,t,(t=>{this.ea._attachImageVectorListener(t)}))}}));var Ha,Wa=class extends Xa{};async function za(t,e,n){return async function(t,e,n,r){return Wo(t,e,n,r)}(t,n.canvas??(Do()?void 0:document.createElement(\"canvas\")),e,n)}function Ka(t,e,n,r){if(t.U){const s=new ms;if(n?.regionOfInterest){if(!t.na)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].\");An(s,1,(i.left+i.right)/2),An(s,2,(i.top+i.bottom)/2),An(s,4,i.right-i.left),An(s,3,i.bottom-i.top)}else An(s,1,.5),An(s,2,.5),An(s,4,1),An(s,3,1);if(n?.rotationDegrees){if(n?.rotationDegrees%90!=0)throw Error(\"Expected rotation to be a multiple of 90°.\");if(An(s,5,-Math.PI*n.rotationDegrees/180),n?.rotationDegrees%180!=0){const[t,r]=Bo(e);n=En(s,3)*r/t,i=En(s,4)*t/r,An(s,4,n),An(s,3,i)}}t.g.addProtoToStream(s.g(),\"mediapipe.NormalizedRect\",t.U,r)}t.g.oa(e,t.Z,r??performance.now()),t.finishProcessing()}function Ya(t,e,n){if(t.baseOptions?.g())throw Error(\"Task is not initialized with image mode. 'runningMode' must be set to 'IMAGE'.\");Ka(t,e,n,t.B+1)}function $a(t,e,n,r){if(!t.baseOptions?.g())throw Error(\"Task is not initialized with video mode. 'runningMode' must be set to 'VIDEO'.\");Ka(t,e,n,r)}function qa(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 Ea([i],n,!1,t.g.i.canvas,t.P,s,e),r?t.clone():t}var Ja=class extends Zo{constructor(t,e,n,r){super(t),this.g=t,this.Z=e,this.U=n,this.na=r,this.P=new ca}l(t,e=!0){if(\"runningMode\"in t&&wn(this.baseOptions,2,!!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()}};Ja.prototype.close=Ja.prototype.close;var Za=class extends Ja{constructor(t,e){super(new Wa(t,e),\"image_in\",\"norm_rect_in\",!1),this.j={detections:[]},dn(t=this.h=new Cs,0,1,e=new Is),An(this.h,2,.5),An(this.h,3,.3)}get baseOptions(){return hn(this.h,Is,1)}set baseOptions(t){dn(this.h,0,1,t)}o(t){return\"minDetectionConfidence\"in t&&An(this.h,2,t.minDetectionConfidence??.5),\"minSuppressionThreshold\"in t&&An(this.h,3,t.minSuppressionThreshold??.3),this.l(t)}D(t,e){return this.j={detections:[]},Ya(this,t,e),this.j}F(t,e,n){return this.j={detections:[]},$a(this,t,n,e),this.j}m(){var t=new Qi;Ji(t,\"image_in\"),Ji(t,\"norm_rect_in\"),Zi(t,\"detections\");const e=new Gi;Yn(e,Us,this.h);const n=new zi;Xi(n,\"mediapipe.tasks.vision.face_detector.FaceDetectorGraph\"),Hi(n,\"IMAGE:image_in\"),Hi(n,\"NORM_RECT:norm_rect_in\"),Wi(n,\"DETECTIONS:detections\"),n.o(e),qi(t,n),this.g.attachProtoVectorListener(\"detections\",((t,e)=>{for(const e of t)t=hs(e),this.j.detections.push(xo(t));Yo(this,e)})),this.g.attachEmptyPacketListener(\"detections\",(t=>{Yo(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Za.prototype.detectForVideo=Za.prototype.F,Za.prototype.detect=Za.prototype.D,Za.prototype.setOptions=Za.prototype.o,Za.createFromModelPath=async function(t,e){return za(Za,t,{baseOptions:{modelAssetPath:e}})},Za.createFromModelBuffer=function(t,e){return za(Za,t,{baseOptions:{modelAssetBuffer:e}})},Za.createFromOptions=function(t,e){return za(Za,t,e)};var Qa=Va([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]),tc=Va([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]),ec=Va([276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]),nc=Va([474,475],[475,476],[476,477],[477,474]),rc=Va([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]),ic=Va([46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]),sc=Va([469,470],[470,471],[471,472],[472,469]),oc=Va([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]),ac=[...Qa,...tc,...ec,...rc,...ic,...oc],cc=Va([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 hc(t){t.j={faceLandmarks:[],faceBlendshapes:[],facialTransformationMatrixes:[]}}var uc=class extends Ja{constructor(t,e){super(new Wa(t,e),\"image_in\",\"norm_rect\",!1),this.j={faceLandmarks:[],faceBlendshapes:[],facialTransformationMatrixes:[]},this.outputFacialTransformationMatrixes=this.outputFaceBlendshapes=!1,dn(t=this.h=new Bs,0,1,e=new Is),this.v=new Ns,dn(this.h,0,3,this.v),this.s=new Cs,dn(this.h,0,2,this.s),Tn(this.s,4,1),An(this.s,2,.5),An(this.v,2,.5),An(this.h,4,.5)}get baseOptions(){return hn(this.h,Is,1)}set baseOptions(t){dn(this.h,0,1,t)}o(t){return\"numFaces\"in t&&Tn(this.s,4,t.numFaces??1),\"minFaceDetectionConfidence\"in t&&An(this.s,2,t.minFaceDetectionConfidence??.5),\"minTrackingConfidence\"in t&&An(this.h,4,t.minTrackingConfidence??.5),\"minFacePresenceConfidence\"in t&&An(this.v,2,t.minFacePresenceConfidence??.5),\"outputFaceBlendshapes\"in t&&(this.outputFaceBlendshapes=!!t.outputFaceBlendshapes),\"outputFacialTransformationMatrixes\"in t&&(this.outputFacialTransformationMatrixes=!!t.outputFacialTransformationMatrixes),this.l(t)}D(t,e){return hc(this),Ya(this,t,e),this.j}F(t,e,n){return hc(this),$a(this,t,n,e),this.j}m(){var t=new Qi;Ji(t,\"image_in\"),Ji(t,\"norm_rect\"),Zi(t,\"face_landmarks\");const e=new Gi;Yn(e,Vs,this.h);const n=new zi;Xi(n,\"mediapipe.tasks.vision.face_landmarker.FaceLandmarkerGraph\"),Hi(n,\"IMAGE:image_in\"),Hi(n,\"NORM_RECT:norm_rect\"),Wi(n,\"NORM_LANDMARKS:face_landmarks\"),n.o(e),qi(t,n),this.g.attachProtoVectorListener(\"face_landmarks\",((t,e)=>{for(const e of t)t=fs(e),this.j.faceLandmarks.push(Lo(t));Yo(this,e)})),this.g.attachEmptyPacketListener(\"face_landmarks\",(t=>{Yo(this,t)})),this.outputFaceBlendshapes&&(Zi(t,\"blendshapes\"),Wi(n,\"BLENDSHAPES:blendshapes\"),this.g.attachProtoVectorListener(\"blendshapes\",((t,e)=>{if(this.outputFaceBlendshapes)for(const e of t)t=ss(e),this.j.faceBlendshapes.push(So(t.g()??[]));Yo(this,e)})),this.g.attachEmptyPacketListener(\"blendshapes\",(t=>{Yo(this,t)}))),this.outputFacialTransformationMatrixes&&(Zi(t,\"face_geometry\"),Wi(n,\"FACE_GEOMETRY:face_geometry\"),this.g.attachProtoVectorListener(\"face_geometry\",((t,e)=>{if(this.outputFacialTransformationMatrixes)for(const e of t)(t=hn(Ds(e),ps,2))&&this.j.facialTransformationMatrixes.push({rows:_n(t,1)??0??0,columns:_n(t,2)??0??0,data:$e(t,3,qt,Ye()).slice()??[]});Yo(this,e)})),this.g.attachEmptyPacketListener(\"face_geometry\",(t=>{Yo(this,t)}))),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};uc.prototype.detectForVideo=uc.prototype.F,uc.prototype.detect=uc.prototype.D,uc.prototype.setOptions=uc.prototype.o,uc.createFromModelPath=function(t,e){return za(uc,t,{baseOptions:{modelAssetPath:e}})},uc.createFromModelBuffer=function(t,e){return za(uc,t,{baseOptions:{modelAssetBuffer:e}})},uc.createFromOptions=function(t,e){return za(uc,t,e)},uc.FACE_LANDMARKS_LIPS=Qa,uc.FACE_LANDMARKS_LEFT_EYE=tc,uc.FACE_LANDMARKS_LEFT_EYEBROW=ec,uc.FACE_LANDMARKS_LEFT_IRIS=nc,uc.FACE_LANDMARKS_RIGHT_EYE=rc,uc.FACE_LANDMARKS_RIGHT_EYEBROW=ic,uc.FACE_LANDMARKS_RIGHT_IRIS=sc,uc.FACE_LANDMARKS_FACE_OVAL=oc,uc.FACE_LANDMARKS_CONTOURS=ac,uc.FACE_LANDMARKS_TESSELATION=cc;var lc=class extends Ja{constructor(t,e){super(new Wa(t,e),\"image_in\",\"norm_rect\",!0),dn(t=this.j=new Xs,0,1,e=new Is)}get baseOptions(){return hn(this.j,Is,1)}set baseOptions(t){dn(this.j,0,1,t)}o(t){return super.l(t)}Ka(t,e,n){const r=\"function\"!=typeof e?e:{};if(this.h=\"function\"==typeof e?e:n,Ya(this,t,r??{}),!this.h)return this.s}m(){var t=new Qi;Ji(t,\"image_in\"),Ji(t,\"norm_rect\"),Zi(t,\"stylized_image\");const e=new Gi;Yn(e,Hs,this.j);const n=new zi;Xi(n,\"mediapipe.tasks.vision.face_stylizer.FaceStylizerGraph\"),Hi(n,\"IMAGE:image_in\"),Hi(n,\"NORM_RECT:norm_rect\"),Wi(n,\"STYLIZED_IMAGE:stylized_image\"),n.o(e),qi(t,n),this.g.V(\"stylized_image\",((t,e)=>{var n=!this.h,r=t.data,i=t.width;const s=i*(t=t.height);if(r instanceof Uint8Array)if(r.length===3*s){const e=new Uint8ClampedArray(4*s);for(let t=0;t<s;++t)e[4*t]=r[3*t],e[4*t+1]=r[3*t+1],e[4*t+2]=r[3*t+2],e[4*t+3]=255;r=new ImageData(e,i,t)}else{if(r.length!==4*s)throw Error(\"Unsupported channel count: \"+r.length/s);r=new ImageData(new Uint8ClampedArray(r.buffer,r.byteOffset,r.length),i,t)}else if(!(r instanceof WebGLTexture))throw Error(`Unsupported format: ${r.constructor.name}`);i=new Ga([r],!1,!1,this.g.i.canvas,this.P,i,t),this.s=n=n?i.clone():i,this.h&&this.h(n),Yo(this,e)})),this.g.attachEmptyPacketListener(\"stylized_image\",(t=>{this.s=null,this.h&&this.h(null),Yo(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};lc.prototype.stylize=lc.prototype.Ka,lc.prototype.setOptions=lc.prototype.o,lc.createFromModelPath=function(t,e){return za(lc,t,{baseOptions:{modelAssetPath:e}})},lc.createFromModelBuffer=function(t,e){return za(lc,t,{baseOptions:{modelAssetBuffer:e}})},lc.createFromOptions=function(t,e){return za(lc,t,e)};var dc=Va([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 fc(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 gc(t,e=!0){const n=[];for(const i of t){var r=ss(i);t=[];for(const n of r.g())r=e&&null!=_n(n,1)?_n(n,1)??0:-1,t.push({score:En(n,2)??0,index:r,categoryName:vn(n,3)??\"\"??\"\",displayName:vn(n,4)??\"\"??\"\"});n.push(t)}return n}var mc=class extends Ja{constructor(t,e){super(new Wa(t,e),\"image_in\",\"norm_rect\",!1),this.gestures=[],this.landmarks=[],this.worldLandmarks=[],this.handedness=[],dn(t=this.j=new Js,0,1,e=new Is),this.s=new qs,dn(this.j,0,2,this.s),this.C=new $s,dn(this.s,0,3,this.C),this.v=new Ys,dn(this.s,0,2,this.v),this.h=new Ks,dn(this.j,0,3,this.h),An(this.v,2,.5),An(this.s,4,.5),An(this.C,2,.5)}get baseOptions(){return hn(this.j,Is,1)}set baseOptions(t){dn(this.j,0,1,t)}o(t){if(Tn(this.v,3,t.numHands??1),\"minHandDetectionConfidence\"in t&&An(this.v,2,t.minHandDetectionConfidence??.5),\"minTrackingConfidence\"in t&&An(this.s,4,t.minTrackingConfidence??.5),\"minHandPresenceConfidence\"in t&&An(this.C,2,t.minHandPresenceConfidence??.5),t.cannedGesturesClassifierOptions){var e=new Ws,n=e,r=ko(t.cannedGesturesClassifierOptions,hn(this.h,Ws,3)?.h());dn(n,0,2,r),dn(this.h,0,3,e)}else void 0===t.cannedGesturesClassifierOptions&&hn(this.h,Ws,3)?.g();return t.customGesturesClassifierOptions?(dn(n=e=new Ws,0,2,r=ko(t.customGesturesClassifierOptions,hn(this.h,Ws,4)?.h())),dn(this.h,0,4,e)):void 0===t.customGesturesClassifierOptions&&hn(this.h,Ws,4)?.g(),this.l(t)}Fa(t,e){return fc(this),Ya(this,t,e),pc(this)}Ga(t,e,n){return fc(this),$a(this,t,n,e),pc(this)}m(){var t=new Qi;Ji(t,\"image_in\"),Ji(t,\"norm_rect\"),Zi(t,\"hand_gestures\"),Zi(t,\"hand_landmarks\"),Zi(t,\"world_hand_landmarks\"),Zi(t,\"handedness\");const e=new Gi;Yn(e,no,this.j);const n=new zi;Xi(n,\"mediapipe.tasks.vision.gesture_recognizer.GestureRecognizerGraph\"),Hi(n,\"IMAGE:image_in\"),Hi(n,\"NORM_RECT:norm_rect\"),Wi(n,\"HAND_GESTURES:hand_gestures\"),Wi(n,\"LANDMARKS:hand_landmarks\"),Wi(n,\"WORLD_LANDMARKS:world_hand_landmarks\"),Wi(n,\"HANDEDNESS:handedness\"),n.o(e),qi(t,n),this.g.attachProtoVectorListener(\"hand_landmarks\",((t,e)=>{for(const e of t){t=fs(e);const n=[];for(const e of ln(t,ds,1))n.push({x:En(e,1)??0,y:En(e,2)??0,z:En(e,3)??0,visibility:En(e,4)??0});this.landmarks.push(n)}Yo(this,e)})),this.g.attachEmptyPacketListener(\"hand_landmarks\",(t=>{Yo(this,t)})),this.g.attachProtoVectorListener(\"world_hand_landmarks\",((t,e)=>{for(const e of t){t=ls(e);const n=[];for(const e of ln(t,us,1))n.push({x:En(e,1)??0,y:En(e,2)??0,z:En(e,3)??0,visibility:En(e,4)??0});this.worldLandmarks.push(n)}Yo(this,e)})),this.g.attachEmptyPacketListener(\"world_hand_landmarks\",(t=>{Yo(this,t)})),this.g.attachProtoVectorListener(\"hand_gestures\",((t,e)=>{this.gestures.push(...gc(t,!1)),Yo(this,e)})),this.g.attachEmptyPacketListener(\"hand_gestures\",(t=>{Yo(this,t)})),this.g.attachProtoVectorListener(\"handedness\",((t,e)=>{this.handedness.push(...gc(t)),Yo(this,e)})),this.g.attachEmptyPacketListener(\"handedness\",(t=>{Yo(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};function yc(t){return{landmarks:t.landmarks,worldLandmarks:t.worldLandmarks,handednesses:t.handedness,handedness:t.handedness}}mc.prototype.recognizeForVideo=mc.prototype.Ga,mc.prototype.recognize=mc.prototype.Fa,mc.prototype.setOptions=mc.prototype.o,mc.createFromModelPath=function(t,e){return za(mc,t,{baseOptions:{modelAssetPath:e}})},mc.createFromModelBuffer=function(t,e){return za(mc,t,{baseOptions:{modelAssetBuffer:e}})},mc.createFromOptions=function(t,e){return za(mc,t,e)},mc.HAND_CONNECTIONS=dc;var _c=class extends Ja{constructor(t,e){super(new Wa(t,e),\"image_in\",\"norm_rect\",!1),this.landmarks=[],this.worldLandmarks=[],this.handedness=[],dn(t=this.h=new qs,0,1,e=new Is),this.s=new $s,dn(this.h,0,3,this.s),this.j=new Ys,dn(this.h,0,2,this.j),Tn(this.j,3,1),An(this.j,2,.5),An(this.s,2,.5),An(this.h,4,.5)}get baseOptions(){return hn(this.h,Is,1)}set baseOptions(t){dn(this.h,0,1,t)}o(t){return\"numHands\"in t&&Tn(this.j,3,t.numHands??1),\"minHandDetectionConfidence\"in t&&An(this.j,2,t.minHandDetectionConfidence??.5),\"minTrackingConfidence\"in t&&An(this.h,4,t.minTrackingConfidence??.5),\"minHandPresenceConfidence\"in t&&An(this.s,2,t.minHandPresenceConfidence??.5),this.l(t)}D(t,e){return this.landmarks=[],this.worldLandmarks=[],this.handedness=[],Ya(this,t,e),yc(this)}F(t,e,n){return this.landmarks=[],this.worldLandmarks=[],this.handedness=[],$a(this,t,n,e),yc(this)}m(){var t=new Qi;Ji(t,\"image_in\"),Ji(t,\"norm_rect\"),Zi(t,\"hand_landmarks\"),Zi(t,\"world_hand_landmarks\"),Zi(t,\"handedness\");const e=new Gi;Yn(e,ro,this.h);const n=new zi;Xi(n,\"mediapipe.tasks.vision.hand_landmarker.HandLandmarkerGraph\"),Hi(n,\"IMAGE:image_in\"),Hi(n,\"NORM_RECT:norm_rect\"),Wi(n,\"LANDMARKS:hand_landmarks\"),Wi(n,\"WORLD_LANDMARKS:world_hand_landmarks\"),Wi(n,\"HANDEDNESS:handedness\"),n.o(e),qi(t,n),this.g.attachProtoVectorListener(\"hand_landmarks\",((t,e)=>{for(const e of t)t=fs(e),this.landmarks.push(Lo(t));Yo(this,e)})),this.g.attachEmptyPacketListener(\"hand_landmarks\",(t=>{Yo(this,t)})),this.g.attachProtoVectorListener(\"world_hand_landmarks\",((t,e)=>{for(const e of t)t=ls(e),this.worldLandmarks.push(Ro(t));Yo(this,e)})),this.g.attachEmptyPacketListener(\"world_hand_landmarks\",(t=>{Yo(this,t)})),this.g.attachProtoVectorListener(\"handedness\",((t,e)=>{var n=this.handedness,r=n.push;const i=[];for(const e of t){t=ss(e);const n=[];for(const e of t.g())n.push({score:En(e,2)??0,index:_n(e,1)??0??-1,categoryName:vn(e,3)??\"\"??\"\",displayName:vn(e,4)??\"\"??\"\"});i.push(n)}r.call(n,...i),Yo(this,e)})),this.g.attachEmptyPacketListener(\"handedness\",(t=>{Yo(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};_c.prototype.detectForVideo=_c.prototype.F,_c.prototype.detect=_c.prototype.D,_c.prototype.setOptions=_c.prototype.o,_c.createFromModelPath=function(t,e){return za(_c,t,{baseOptions:{modelAssetPath:e}})},_c.createFromModelBuffer=function(t,e){return za(_c,t,{baseOptions:{modelAssetBuffer:e}})},_c.createFromOptions=function(t,e){return za(_c,t,e)},_c.HAND_CONNECTIONS=dc;var vc=Va([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 Ec(t){t.h={faceLandmarks:[],faceBlendshapes:[],poseLandmarks:[],poseWorldLandmarks:[],poseSegmentationMasks:[],leftHandLandmarks:[],leftHandWorldLandmarks:[],rightHandLandmarks:[],rightHandWorldLandmarks:[]}}function wc(t){try{if(!t.C)return t.h;t.C(t.h)}finally{Jo(t)}}function Tc(t,e){t=fs(t),e.push(Lo(t))}var Ac=class extends Ja{constructor(t,e){super(new Wa(t,e),\"input_frames_image\",null,!1),this.h={faceLandmarks:[],faceBlendshapes:[],poseLandmarks:[],poseWorldLandmarks:[],poseSegmentationMasks:[],leftHandLandmarks:[],leftHandWorldLandmarks:[],rightHandLandmarks:[],rightHandWorldLandmarks:[]},this.outputPoseSegmentationMasks=this.outputFaceBlendshapes=!1,dn(t=this.j=new ao,0,1,e=new Is),this.K=new $s,dn(this.j,0,2,this.K),this.Y=new io,dn(this.j,0,3,this.Y),this.s=new Cs,dn(this.j,0,4,this.s),this.H=new Ns,dn(this.j,0,5,this.H),this.v=new so,dn(this.j,0,6,this.v),this.L=new oo,dn(this.j,0,7,this.L),An(this.s,2,.5),An(this.s,3,.3),An(this.H,2,.5),An(this.v,2,.5),An(this.v,3,.3),An(this.L,2,.5),An(this.K,2,.5)}get baseOptions(){return hn(this.j,Is,1)}set baseOptions(t){dn(this.j,0,1,t)}o(t){return\"minFaceDetectionConfidence\"in t&&An(this.s,2,t.minFaceDetectionConfidence??.5),\"minFaceSuppressionThreshold\"in t&&An(this.s,3,t.minFaceSuppressionThreshold??.3),\"minFacePresenceConfidence\"in t&&An(this.H,2,t.minFacePresenceConfidence??.5),\"outputFaceBlendshapes\"in t&&(this.outputFaceBlendshapes=!!t.outputFaceBlendshapes),\"minPoseDetectionConfidence\"in t&&An(this.v,2,t.minPoseDetectionConfidence??.5),\"minPoseSuppressionThreshold\"in t&&An(this.v,3,t.minPoseSuppressionThreshold??.3),\"minPosePresenceConfidence\"in t&&An(this.L,2,t.minPosePresenceConfidence??.5),\"outputPoseSegmentationMasks\"in t&&(this.outputPoseSegmentationMasks=!!t.outputPoseSegmentationMasks),\"minHandLandmarksConfidence\"in t&&An(this.K,2,t.minHandLandmarksConfidence??.5),this.l(t)}D(t,e,n){const r=\"function\"!=typeof e?e:{};return this.C=\"function\"==typeof e?e:n,Ec(this),Ya(this,t,r),wc(this)}F(t,e,n,r){const i=\"function\"!=typeof n?n:{};return this.C=\"function\"==typeof n?n:r,Ec(this),$a(this,t,i,e),wc(this)}m(){var t=new Qi;Ji(t,\"input_frames_image\"),Zi(t,\"pose_landmarks\"),Zi(t,\"pose_world_landmarks\"),Zi(t,\"face_landmarks\"),Zi(t,\"left_hand_landmarks\"),Zi(t,\"left_hand_world_landmarks\"),Zi(t,\"right_hand_landmarks\"),Zi(t,\"right_hand_world_landmarks\");const e=new Gi,n=new xi;tn(n,1,de(\"type.googleapis.com/mediapipe.tasks.vision.holistic_landmarker.proto.HolisticLandmarkerGraphOptions\"),\"\"),function(t,e){if(null!=e)if(Array.isArray(e))He(t,2,Pe(e,Oe,void 0,void 0,!1));else{if(!(\"string\"==typeof e||e instanceof N||C(e)))throw Error(\"invalid value in Any.value field: \"+e+\" expected a ByteString, a base64 encoded string, a Uint8Array or a jspb array\");tn(t,2,dt(e,!1),U())}}(n,this.j.g());const r=new zi;Xi(r,\"mediapipe.tasks.vision.holistic_landmarker.HolisticLandmarkerGraph\"),yn(r,8,xi,n),Hi(r,\"IMAGE:input_frames_image\"),Wi(r,\"POSE_LANDMARKS:pose_landmarks\"),Wi(r,\"POSE_WORLD_LANDMARKS:pose_world_landmarks\"),Wi(r,\"FACE_LANDMARKS:face_landmarks\"),Wi(r,\"LEFT_HAND_LANDMARKS:left_hand_landmarks\"),Wi(r,\"LEFT_HAND_WORLD_LANDMARKS:left_hand_world_landmarks\"),Wi(r,\"RIGHT_HAND_LANDMARKS:right_hand_landmarks\"),Wi(r,\"RIGHT_HAND_WORLD_LANDMARKS:right_hand_world_landmarks\"),r.o(e),qi(t,r),$o(this,t),this.g.attachProtoListener(\"pose_landmarks\",((t,e)=>{Tc(t,this.h.poseLandmarks),Yo(this,e)})),this.g.attachEmptyPacketListener(\"pose_landmarks\",(t=>{Yo(this,t)})),this.g.attachProtoListener(\"pose_world_landmarks\",((t,e)=>{var n=this.h.poseWorldLandmarks;t=ls(t),n.push(Ro(t)),Yo(this,e)})),this.g.attachEmptyPacketListener(\"pose_world_landmarks\",(t=>{Yo(this,t)})),this.outputPoseSegmentationMasks&&(Wi(r,\"POSE_SEGMENTATION_MASK:pose_segmentation_mask\"),qo(this,\"pose_segmentation_mask\"),this.g.V(\"pose_segmentation_mask\",((t,e)=>{this.h.poseSegmentationMasks=[qa(this,t,!0,!this.C)],Yo(this,e)})),this.g.attachEmptyPacketListener(\"pose_segmentation_mask\",(t=>{this.h.poseSegmentationMasks=[],Yo(this,t)}))),this.g.attachProtoListener(\"face_landmarks\",((t,e)=>{Tc(t,this.h.faceLandmarks),Yo(this,e)})),this.g.attachEmptyPacketListener(\"face_landmarks\",(t=>{Yo(this,t)})),this.outputFaceBlendshapes&&(Zi(t,\"extra_blendshapes\"),Wi(r,\"FACE_BLENDSHAPES:extra_blendshapes\"),this.g.attachProtoListener(\"extra_blendshapes\",((t,e)=>{var n=this.h.faceBlendshapes;this.outputFaceBlendshapes&&(t=ss(t),n.push(So(t.g()??[]))),Yo(this,e)})),this.g.attachEmptyPacketListener(\"extra_blendshapes\",(t=>{Yo(this,t)}))),this.g.attachProtoListener(\"left_hand_landmarks\",((t,e)=>{Tc(t,this.h.leftHandLandmarks),Yo(this,e)})),this.g.attachEmptyPacketListener(\"left_hand_landmarks\",(t=>{Yo(this,t)})),this.g.attachProtoListener(\"left_hand_world_landmarks\",((t,e)=>{var n=this.h.leftHandWorldLandmarks;t=ls(t),n.push(Ro(t)),Yo(this,e)})),this.g.attachEmptyPacketListener(\"left_hand_world_landmarks\",(t=>{Yo(this,t)})),this.g.attachProtoListener(\"right_hand_landmarks\",((t,e)=>{Tc(t,this.h.rightHandLandmarks),Yo(this,e)})),this.g.attachEmptyPacketListener(\"right_hand_landmarks\",(t=>{Yo(this,t)})),this.g.attachProtoListener(\"right_hand_world_landmarks\",((t,e)=>{var n=this.h.rightHandWorldLandmarks;t=ls(t),n.push(Ro(t)),Yo(this,e)})),this.g.attachEmptyPacketListener(\"right_hand_world_landmarks\",(t=>{Yo(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Ac.prototype.detectForVideo=Ac.prototype.F,Ac.prototype.detect=Ac.prototype.D,Ac.prototype.setOptions=Ac.prototype.o,Ac.createFromModelPath=function(t,e){return za(Ac,t,{baseOptions:{modelAssetPath:e}})},Ac.createFromModelBuffer=function(t,e){return za(Ac,t,{baseOptions:{modelAssetBuffer:e}})},Ac.createFromOptions=function(t,e){return za(Ac,t,e)},Ac.HAND_CONNECTIONS=dc,Ac.POSE_CONNECTIONS=vc,Ac.FACE_LANDMARKS_LIPS=Qa,Ac.FACE_LANDMARKS_LEFT_EYE=tc,Ac.FACE_LANDMARKS_LEFT_EYEBROW=ec,Ac.FACE_LANDMARKS_LEFT_IRIS=nc,Ac.FACE_LANDMARKS_RIGHT_EYE=rc,Ac.FACE_LANDMARKS_RIGHT_EYEBROW=ic,Ac.FACE_LANDMARKS_RIGHT_IRIS=sc,Ac.FACE_LANDMARKS_FACE_OVAL=oc,Ac.FACE_LANDMARKS_CONTOURS=ac,Ac.FACE_LANDMARKS_TESSELATION=cc;var bc=class extends Ja{constructor(t,e){super(new Wa(t,e),\"input_image\",\"norm_rect\",!0),this.j={classifications:[]},dn(t=this.h=new uo,0,1,e=new Is)}get baseOptions(){return hn(this.h,Is,1)}set baseOptions(t){dn(this.h,0,1,t)}o(t){return dn(this.h,0,2,ko(t,hn(this.h,bs,2))),this.l(t)}qa(t,e){return this.j={classifications:[]},Ya(this,t,e),this.j}ra(t,e,n){return this.j={classifications:[]},$a(this,t,n,e),this.j}m(){var t=new Qi;Ji(t,\"input_image\"),Ji(t,\"norm_rect\"),Zi(t,\"classifications\");const e=new Gi;Yn(e,lo,this.h);const n=new zi;Xi(n,\"mediapipe.tasks.vision.image_classifier.ImageClassifierGraph\"),Hi(n,\"IMAGE:input_image\"),Hi(n,\"NORM_RECT:norm_rect\"),Wi(n,\"CLASSIFICATIONS:classifications\"),n.o(e),qi(t,n),this.g.attachProtoListener(\"classifications\",((t,e)=>{this.j=function(t){const e={classifications:ln(t,ys,1).map((t=>So(hn(t,rs,4)?.g()??[],_n(t,2)??0,vn(t,3)??\"\")))};return null!=he(Ve(t,2))&&(e.timestampMs=he(Ve(t,2))??0),e}(_s(t)),Yo(this,e)})),this.g.attachEmptyPacketListener(\"classifications\",(t=>{Yo(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};bc.prototype.classifyForVideo=bc.prototype.ra,bc.prototype.classify=bc.prototype.qa,bc.prototype.setOptions=bc.prototype.o,bc.createFromModelPath=function(t,e){return za(bc,t,{baseOptions:{modelAssetPath:e}})},bc.createFromModelBuffer=function(t,e){return za(bc,t,{baseOptions:{modelAssetBuffer:e}})},bc.createFromOptions=function(t,e){return za(bc,t,e)};var kc=class extends Ja{constructor(t,e){super(new Wa(t,e),\"image_in\",\"norm_rect\",!0),this.h=new fo,this.embeddings={embeddings:[]},dn(t=this.h,0,1,e=new Is)}get baseOptions(){return hn(this.h,Is,1)}set baseOptions(t){dn(this.h,0,1,t)}o(t){var e=this.h,n=hn(this.h,Ss,2);return n=n?n.clone():new Ss,void 0!==t.l2Normalize?wn(n,1,t.l2Normalize):\"l2Normalize\"in t&&He(n,1),void 0!==t.quantize?wn(n,2,t.quantize):\"quantize\"in t&&He(n,2),dn(e,0,2,n),this.l(t)}xa(t,e){return Ya(this,t,e),this.embeddings}ya(t,e,n){return $a(this,t,n,e),this.embeddings}m(){var t=new Qi;Ji(t,\"image_in\"),Ji(t,\"norm_rect\"),Zi(t,\"embeddings_out\");const e=new Gi;Yn(e,po,this.h);const n=new zi;Xi(n,\"mediapipe.tasks.vision.image_embedder.ImageEmbedderGraph\"),Hi(n,\"IMAGE:image_in\"),Hi(n,\"NORM_RECT:norm_rect\"),Wi(n,\"EMBEDDINGS:embeddings_out\"),n.o(e),qi(t,n),this.g.attachProtoListener(\"embeddings_out\",((t,e)=>{t=As(t),this.embeddings=function(t){return{embeddings:ln(t,ws,1).map((t=>{const e={headIndex:_n(t,3)??0??-1,headName:vn(t,4)??\"\"??\"\"};if(void 0!==cn(t,vs,nn(t,1)))t=$e(t=hn(t,vs,nn(t,1)),1,qt,Ye()),e.floatEmbedding=t.slice();else{const n=new Uint8Array(0);e.quantizedEmbedding=hn(t,Es,nn(t,2))?.ma()?.h()??n}return e})),timestampMs:he(Ve(t,2))??0}}(t),Yo(this,e)})),this.g.attachEmptyPacketListener(\"embeddings_out\",(t=>{Yo(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};kc.cosineSimilarity=function(t,e){if(t.floatEmbedding&&e.floatEmbedding)t=Io(t.floatEmbedding,e.floatEmbedding);else{if(!t.quantizedEmbedding||!e.quantizedEmbedding)throw Error(\"Cannot compute cosine similarity between quantized and float embeddings.\");t=Io(Fo(t.quantizedEmbedding),Fo(e.quantizedEmbedding))}return t},kc.prototype.embedForVideo=kc.prototype.ya,kc.prototype.embed=kc.prototype.xa,kc.prototype.setOptions=kc.prototype.o,kc.createFromModelPath=function(t,e){return za(kc,t,{baseOptions:{modelAssetPath:e}})},kc.createFromModelBuffer=function(t,e){return za(kc,t,{baseOptions:{modelAssetBuffer:e}})},kc.createFromOptions=function(t,e){return za(kc,t,e)};var Sc=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 xc(t){t.categoryMask=void 0,t.confidenceMasks=void 0,t.qualityScores=void 0}function Lc(t){try{const e=new Sc(t.confidenceMasks,t.categoryMask,t.qualityScores);if(!t.j)return e;t.j(e)}finally{Jo(t)}}Sc.prototype.close=Sc.prototype.close;var Rc=class extends Ja{constructor(t,e){super(new Wa(t,e),\"image_in\",\"norm_rect\",!1),this.s=[],this.outputCategoryMask=!1,this.outputConfidenceMasks=!0,this.h=new vo,this.v=new go,dn(this.h,0,3,this.v),dn(t=this.h,0,1,e=new Is)}get baseOptions(){return hn(this.h,Is,1)}set baseOptions(t){dn(this.h,0,1,t)}o(t){return void 0!==t.displayNamesLocale?He(this.h,2,de(t.displayNamesLocale)):\"displayNamesLocale\"in t&&He(this.h,2),\"outputCategoryMask\"in t&&(this.outputCategoryMask=t.outputCategoryMask??!1),\"outputConfidenceMasks\"in t&&(this.outputConfidenceMasks=t.outputConfidenceMasks??!0),super.l(t)}J(){!function(t){const e=ln(t.ca(),zi,1).filter((t=>(vn(t,1)??\"\").includes(\"mediapipe.tasks.TensorsToSegmentationCalculator\")));if(t.s=[],e.length>1)throw Error(\"The graph has more than one mediapipe.tasks.TensorsToSegmentationCalculator.\");1===e.length&&(hn(e[0],Gi,7)?.l()?.g()??new Map).forEach(((e,n)=>{t.s[Number(n)]=vn(e,1)??\"\"}))}(this)}segment(t,e,n){const r=\"function\"!=typeof e?e:{};return this.j=\"function\"==typeof e?e:n,xc(this),Ya(this,t,r),Lc(this)}Ia(t,e,n,r){const i=\"function\"!=typeof n?n:{};return this.j=\"function\"==typeof n?n:r,xc(this),$a(this,t,i,e),Lc(this)}Ba(){return this.s}m(){var t=new Qi;Ji(t,\"image_in\"),Ji(t,\"norm_rect\");const e=new Gi;Yn(e,Eo,this.h);const n=new zi;Xi(n,\"mediapipe.tasks.vision.image_segmenter.ImageSegmenterGraph\"),Hi(n,\"IMAGE:image_in\"),Hi(n,\"NORM_RECT:norm_rect\"),n.o(e),qi(t,n),$o(this,t),this.outputConfidenceMasks&&(Zi(t,\"confidence_masks\"),Wi(n,\"CONFIDENCE_MASKS:confidence_masks\"),qo(this,\"confidence_masks\"),this.g.ba(\"confidence_masks\",((t,e)=>{this.confidenceMasks=t.map((t=>qa(this,t,!0,!this.j))),Yo(this,e)})),this.g.attachEmptyPacketListener(\"confidence_masks\",(t=>{this.confidenceMasks=[],Yo(this,t)}))),this.outputCategoryMask&&(Zi(t,\"category_mask\"),Wi(n,\"CATEGORY_MASK:category_mask\"),qo(this,\"category_mask\"),this.g.V(\"category_mask\",((t,e)=>{this.categoryMask=qa(this,t,!1,!this.j),Yo(this,e)})),this.g.attachEmptyPacketListener(\"category_mask\",(t=>{this.categoryMask=void 0,Yo(this,t)}))),Zi(t,\"quality_scores\"),Wi(n,\"QUALITY_SCORES:quality_scores\"),this.g.attachFloatVectorListener(\"quality_scores\",((t,e)=>{this.qualityScores=t,Yo(this,e)})),this.g.attachEmptyPacketListener(\"quality_scores\",(t=>{this.categoryMask=void 0,Yo(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Rc.prototype.getLabels=Rc.prototype.Ba,Rc.prototype.segmentForVideo=Rc.prototype.Ia,Rc.prototype.segment=Rc.prototype.segment,Rc.prototype.setOptions=Rc.prototype.o,Rc.createFromModelPath=function(t,e){return za(Rc,t,{baseOptions:{modelAssetPath:e}})},Rc.createFromModelBuffer=function(t,e){return za(Rc,t,{baseOptions:{modelAssetBuffer:e}})},Rc.createFromOptions=function(t,e){return za(Rc,t,e)};var Fc=class{constructor(t,e,n){this.confidenceMasks=t,this.categoryMask=e,this.qualityScores=n}close(){this.confidenceMasks?.forEach((t=>{t.close()})),this.categoryMask?.close()}};Fc.prototype.close=Fc.prototype.close;var Ic=class extends $n{constructor(t){super(t)}},Mc=[0,hi,-2],Pc=[0,ni,-3,di,ni,-1],Cc=[0,Pc],Oc=[0,Pc,hi,-1],Uc=class extends $n{constructor(t){super(t)}},Dc=[0,ni,-1,di],Nc=class extends $n{constructor(t){super(t)}},Bc=class extends $n{constructor(t){super(t)}},Gc=[1,2,3,4,5,6,7,8,9,10,14,15],jc=class extends $n{constructor(t){super(t)}};jc.prototype.g=Si([0,yi,[0,Gc,_i,Pc,_i,[0,Pc,Mc],_i,Cc,_i,[0,Cc,Mc],_i,Dc,_i,[0,ni,-3,di,Ti],_i,[0,ni,-3,di],_i,[0,mi,ni,-2,di,hi,di,-1,2,ni,Mc],_i,Oc,_i,[0,Oc,Mc],ni,Mc,mi,_i,[0,ni,-3,di,Mc,-1],_i,[0,yi,Dc]],mi,[0,mi,hi,-1,di]]);var Vc=class extends Ja{constructor(t,e){super(new Wa(t,e),\"image_in\",\"norm_rect_in\",!1),this.outputCategoryMask=!1,this.outputConfidenceMasks=!0,this.h=new vo,this.s=new go,dn(this.h,0,3,this.s),dn(t=this.h,0,1,e=new Is)}get baseOptions(){return hn(this.h,Is,1)}set baseOptions(t){dn(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:{};this.j=\"function\"==typeof n?n:r,this.qualityScores=this.categoryMask=this.confidenceMasks=void 0,n=this.B+1,r=new jc;const s=new Bc;var o=new Ic;if(Tn(o,1,255),dn(s,0,12,o),e.keypoint&&e.scribble)throw Error(\"Cannot provide both keypoint and scribble.\");if(e.keypoint){var a=new Uc;wn(a,3,!0),An(a,1,e.keypoint.x),An(a,2,e.keypoint.y),fn(s,5,Gc,a)}else{if(!e.scribble)throw Error(\"Must provide either a keypoint or a scribble.\");for(a of(o=new Nc,e.scribble))wn(e=new Uc,3,!0),An(e,1,a.x),An(e,2,a.y),yn(o,1,Uc,e);fn(s,15,Gc,o)}yn(r,1,Bc,s),this.g.addProtoToStream(r.g(),\"drishti.RenderData\",\"roi_in\",n),Ya(this,t,i);t:{try{const t=new Fc(this.confidenceMasks,this.categoryMask,this.qualityScores);if(!this.j){var c=t;break t}this.j(t)}finally{Jo(this)}c=void 0}return c}m(){var t=new Qi;Ji(t,\"image_in\"),Ji(t,\"roi_in\"),Ji(t,\"norm_rect_in\");const e=new Gi;Yn(e,Eo,this.h);const n=new zi;Xi(n,\"mediapipe.tasks.vision.interactive_segmenter.InteractiveSegmenterGraph\"),Hi(n,\"IMAGE:image_in\"),Hi(n,\"ROI:roi_in\"),Hi(n,\"NORM_RECT:norm_rect_in\"),n.o(e),qi(t,n),$o(this,t),this.outputConfidenceMasks&&(Zi(t,\"confidence_masks\"),Wi(n,\"CONFIDENCE_MASKS:confidence_masks\"),qo(this,\"confidence_masks\"),this.g.ba(\"confidence_masks\",((t,e)=>{this.confidenceMasks=t.map((t=>qa(this,t,!0,!this.j))),Yo(this,e)})),this.g.attachEmptyPacketListener(\"confidence_masks\",(t=>{this.confidenceMasks=[],Yo(this,t)}))),this.outputCategoryMask&&(Zi(t,\"category_mask\"),Wi(n,\"CATEGORY_MASK:category_mask\"),qo(this,\"category_mask\"),this.g.V(\"category_mask\",((t,e)=>{this.categoryMask=qa(this,t,!1,!this.j),Yo(this,e)})),this.g.attachEmptyPacketListener(\"category_mask\",(t=>{this.categoryMask=void 0,Yo(this,t)}))),Zi(t,\"quality_scores\"),Wi(n,\"QUALITY_SCORES:quality_scores\"),this.g.attachFloatVectorListener(\"quality_scores\",((t,e)=>{this.qualityScores=t,Yo(this,e)})),this.g.attachEmptyPacketListener(\"quality_scores\",(t=>{this.categoryMask=void 0,Yo(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Vc.prototype.segment=Vc.prototype.segment,Vc.prototype.setOptions=Vc.prototype.o,Vc.createFromModelPath=function(t,e){return za(Vc,t,{baseOptions:{modelAssetPath:e}})},Vc.createFromModelBuffer=function(t,e){return za(Vc,t,{baseOptions:{modelAssetBuffer:e}})},Vc.createFromOptions=function(t,e){return za(Vc,t,e)};var Xc=class extends Ja{constructor(t,e){super(new Wa(t,e),\"input_frame_gpu\",\"norm_rect\",!1),this.j={detections:[]},dn(t=this.h=new wo,0,1,e=new Is)}get baseOptions(){return hn(this.h,Is,1)}set baseOptions(t){dn(this.h,0,1,t)}o(t){return void 0!==t.displayNamesLocale?He(this.h,2,de(t.displayNamesLocale)):\"displayNamesLocale\"in t&&He(this.h,2),void 0!==t.maxResults?Tn(this.h,3,t.maxResults):\"maxResults\"in t&&He(this.h,3),void 0!==t.scoreThreshold?An(this.h,4,t.scoreThreshold):\"scoreThreshold\"in t&&He(this.h,4),void 0!==t.categoryAllowlist?bn(this.h,5,t.categoryAllowlist):\"categoryAllowlist\"in t&&He(this.h,5),void 0!==t.categoryDenylist?bn(this.h,6,t.categoryDenylist):\"categoryDenylist\"in t&&He(this.h,6),this.l(t)}D(t,e){return this.j={detections:[]},Ya(this,t,e),this.j}F(t,e,n){return this.j={detections:[]},$a(this,t,n,e),this.j}m(){var t=new Qi;Ji(t,\"input_frame_gpu\"),Ji(t,\"norm_rect\"),Zi(t,\"detections\");const e=new Gi;Yn(e,To,this.h);const n=new zi;Xi(n,\"mediapipe.tasks.vision.ObjectDetectorGraph\"),Hi(n,\"IMAGE:input_frame_gpu\"),Hi(n,\"NORM_RECT:norm_rect\"),Wi(n,\"DETECTIONS:detections\"),n.o(e),qi(t,n),this.g.attachProtoVectorListener(\"detections\",((t,e)=>{for(const e of t)t=hs(e),this.j.detections.push(xo(t));Yo(this,e)})),this.g.attachEmptyPacketListener(\"detections\",(t=>{Yo(this,t)})),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Xc.prototype.detectForVideo=Xc.prototype.F,Xc.prototype.detect=Xc.prototype.D,Xc.prototype.setOptions=Xc.prototype.o,Xc.createFromModelPath=async function(t,e){return za(Xc,t,{baseOptions:{modelAssetPath:e}})},Xc.createFromModelBuffer=function(t,e){return za(Xc,t,{baseOptions:{modelAssetBuffer:e}})},Xc.createFromOptions=function(t,e){return za(Xc,t,e)};var Hc=class{constructor(t,e,n){this.landmarks=t,this.worldLandmarks=e,this.segmentationMasks=n}close(){this.segmentationMasks?.forEach((t=>{t.close()}))}};function Wc(t){t.landmarks=[],t.worldLandmarks=[],t.segmentationMasks=void 0}function zc(t){try{const e=new Hc(t.landmarks,t.worldLandmarks,t.segmentationMasks);if(!t.s)return e;t.s(e)}finally{Jo(t)}}Hc.prototype.close=Hc.prototype.close;var Kc=class extends Ja{constructor(t,e){super(new Wa(t,e),\"image_in\",\"norm_rect\",!1),this.landmarks=[],this.worldLandmarks=[],this.outputSegmentationMasks=!1,dn(t=this.h=new Ao,0,1,e=new Is),this.v=new oo,dn(this.h,0,3,this.v),this.j=new so,dn(this.h,0,2,this.j),Tn(this.j,4,1),An(this.j,2,.5),An(this.v,2,.5),An(this.h,4,.5)}get baseOptions(){return hn(this.h,Is,1)}set baseOptions(t){dn(this.h,0,1,t)}o(t){return\"numPoses\"in t&&Tn(this.j,4,t.numPoses??1),\"minPoseDetectionConfidence\"in t&&An(this.j,2,t.minPoseDetectionConfidence??.5),\"minTrackingConfidence\"in t&&An(this.h,4,t.minTrackingConfidence??.5),\"minPosePresenceConfidence\"in t&&An(this.v,2,t.minPosePresenceConfidence??.5),\"outputSegmentationMasks\"in t&&(this.outputSegmentationMasks=t.outputSegmentationMasks??!1),this.l(t)}D(t,e,n){const r=\"function\"!=typeof e?e:{};return this.s=\"function\"==typeof e?e:n,Wc(this),Ya(this,t,r),zc(this)}F(t,e,n,r){const i=\"function\"!=typeof n?n:{};return this.s=\"function\"==typeof n?n:r,Wc(this),$a(this,t,i,e),zc(this)}m(){var t=new Qi;Ji(t,\"image_in\"),Ji(t,\"norm_rect\"),Zi(t,\"normalized_landmarks\"),Zi(t,\"world_landmarks\"),Zi(t,\"segmentation_masks\");const e=new Gi;Yn(e,bo,this.h);const n=new zi;Xi(n,\"mediapipe.tasks.vision.pose_landmarker.PoseLandmarkerGraph\"),Hi(n,\"IMAGE:image_in\"),Hi(n,\"NORM_RECT:norm_rect\"),Wi(n,\"NORM_LANDMARKS:normalized_landmarks\"),Wi(n,\"WORLD_LANDMARKS:world_landmarks\"),n.o(e),qi(t,n),$o(this,t),this.g.attachProtoVectorListener(\"normalized_landmarks\",((t,e)=>{this.landmarks=[];for(const e of t)t=fs(e),this.landmarks.push(Lo(t));Yo(this,e)})),this.g.attachEmptyPacketListener(\"normalized_landmarks\",(t=>{this.landmarks=[],Yo(this,t)})),this.g.attachProtoVectorListener(\"world_landmarks\",((t,e)=>{this.worldLandmarks=[];for(const e of t)t=ls(e),this.worldLandmarks.push(Ro(t));Yo(this,e)})),this.g.attachEmptyPacketListener(\"world_landmarks\",(t=>{this.worldLandmarks=[],Yo(this,t)})),this.outputSegmentationMasks&&(Wi(n,\"SEGMENTATION_MASK:segmentation_masks\"),qo(this,\"segmentation_masks\"),this.g.ba(\"segmentation_masks\",((t,e)=>{this.segmentationMasks=t.map((t=>qa(this,t,!0,!this.s))),Yo(this,e)})),this.g.attachEmptyPacketListener(\"segmentation_masks\",(t=>{this.segmentationMasks=[],Yo(this,t)}))),t=t.g(),this.setGraph(new Uint8Array(t),!0)}};Kc.prototype.detectForVideo=Kc.prototype.F,Kc.prototype.detect=Kc.prototype.D,Kc.prototype.setOptions=Kc.prototype.o,Kc.createFromModelPath=function(t,e){return za(Kc,t,{baseOptions:{modelAssetPath:e}})},Kc.createFromModelBuffer=function(t,e){return za(Kc,t,{baseOptions:{modelAssetBuffer:e}})},Kc.createFromOptions=function(t,e){return za(Kc,t,e)},Kc.POSE_CONNECTIONS=vc;export{Ia as DrawingUtils,Za as FaceDetector,uc as FaceLandmarker,lc as FaceStylizer,Uo as FilesetResolver,mc as GestureRecognizer,_c as HandLandmarker,Ac as HolisticLandmarker,bc as ImageClassifier,kc as ImageEmbedder,Rc as ImageSegmenter,Sc as ImageSegmenterResult,Vc as InteractiveSegmenter,Fc as InteractiveSegmenterResult,Ga as MPImage,Ea as MPMask,Xc as ObjectDetector,Kc as PoseLandmarker,Zo as TaskRunner,Ja as VisionTaskRunner};\n//# sourceMappingURL=vision_bundle_mjs.js.map\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","var debounce = require('./debounce'),\n isObject = require('./isObject');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nmodule.exports = throttle;\n","/**\n * Calculate the size of a face relative to the video frame\n */\nexport const calculateFaceSize = (landmarks: any): number => {\n if (!landmarks || landmarks.length === 0) return 0;\n\n const face = landmarks[0];\n\n if (!face || face.length === 0) return 0;\n\n // Get bounding box of face landmarks\n let minX = 1;\n let maxX = 0;\n let minY = 1;\n let maxY = 0;\n\n face.forEach((landmark: any) => {\n if (\n landmark &&\n typeof landmark.x === 'number' &&\n typeof landmark.y === 'number'\n ) {\n minX = Math.min(minX, landmark.x);\n maxX = Math.max(maxX, landmark.x);\n minY = Math.min(minY, landmark.y);\n maxY = Math.max(maxY, landmark.y);\n }\n });\n\n // Calculate face size as percentage of video area\n const faceWidth = maxX - minX;\n const faceHeight = maxY - minY;\n const faceSize = Math.max(faceWidth, faceHeight);\n\n return faceSize;\n};\n\n/**\n * Check if a face is positioned within the oval bounds\n */\nexport const isFaceInBounds = (\n landmarks: any,\n videoAspectRatio: number,\n): boolean => {\n if (!landmarks || landmarks.length === 0) return false;\n\n const face = landmarks[0];\n\n let minX = 1;\n let maxX = 0;\n let minY = 1;\n let maxY = 0;\n face.forEach((landmark: any) => {\n minX = Math.min(minX, landmark.x);\n maxX = Math.max(maxX, landmark.x);\n minY = Math.min(minY, landmark.y);\n maxY = Math.max(maxY, landmark.y);\n });\n\n const ovalCenterX = 0.5;\n const ovalCenterY = 0.6;\n\n const isLandscape = videoAspectRatio > 1;\n let ovalWidth;\n let ovalHeight;\n if (isLandscape) {\n ovalWidth = 0.4;\n ovalHeight = 0.3;\n } else {\n ovalWidth = 0.35;\n ovalHeight = 0.5;\n }\n\n const faceCenterX = (minX + maxX) / 2;\n const faceCenterY = (minY + maxY) / 2;\n\n const centerTolerance = 0.2;\n const centerOvalWidth = ovalWidth * (1 + centerTolerance);\n const centerOvalHeight = ovalHeight * (1 + centerTolerance);\n\n const checkPointInCenterOval = (x: number, y: number) => {\n const dx = (x - ovalCenterX) / centerOvalWidth;\n const dy = (y - ovalCenterY) / centerOvalHeight;\n return dx * dx + dy * dy <= 1;\n };\n const centerInBounds = checkPointInCenterOval(faceCenterX, faceCenterY);\n\n const toleranceX = 0.2;\n const toleranceY = 0.1;\n const adjustedOvalWidth = ovalWidth * (1 + toleranceX);\n const adjustedOvalHeight = ovalHeight * (1 + toleranceY);\n\n const checkPointInExpandedOval = (x: number, y: number) => {\n const dx = (x - ovalCenterX) / adjustedOvalWidth;\n const dy = (y - ovalCenterY) / adjustedOvalHeight;\n return dx * dx + dy * dy <= 1;\n };\n\n const topLeft = checkPointInExpandedOval(minX, minY);\n const topRight = checkPointInExpandedOval(maxX, minY);\n const bottomLeft = checkPointInExpandedOval(minX, maxY);\n const bottomRight = checkPointInExpandedOval(maxX, maxY);\n\n return centerInBounds && topLeft && topRight && bottomLeft && bottomRight;\n};\n\n/**\n * Calculate mouth opening using face landmarks\n */\nexport const calculateMouthOpening = (landmarks: any): number => {\n if (!landmarks || landmarks.length === 0) return 0;\n\n const face = landmarks[0];\n if (!face || face.length === 0) return 0;\n\n // MediaPipe face landmark indices for mouth\n const upperLipCenter = face[13]; // Upper lip center\n const lowerLipCenter = face[14]; // Lower lip center\n\n if (!upperLipCenter || !lowerLipCenter) return 0;\n\n const mouthHeight = Math.abs(lowerLipCenter.y - upperLipCenter.y);\n\n const faceTop = Math.min(...face.map((p: any) => p.y));\n const faceBottom = Math.max(...face.map((p: any) => p.y));\n const faceHeight = faceBottom - faceTop;\n\n return faceHeight > 0 ? mouthHeight / faceHeight : 0;\n};\n","/**\n * Create a cropped square canvas from video for face detection\n */\nimport { DrawingUtils, FaceLandmarker } from '@mediapipe/tasks-vision';\n\nexport const createCroppedVideoFrame = (\n videoElement: HTMLVideoElement,\n): HTMLCanvasElement | null => {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n if (!ctx) return null;\n\n const sourceWidth = videoElement.videoWidth;\n const sourceHeight = videoElement.videoHeight;\n\n const squareSize = Math.min(sourceWidth, sourceHeight);\n const cropX = (sourceWidth - squareSize) / 2;\n const cropY = (sourceHeight - squareSize) / 2;\n\n canvas.width = squareSize;\n canvas.height = squareSize;\n\n ctx.drawImage(\n videoElement,\n cropX,\n cropY,\n squareSize,\n squareSize,\n 0,\n 0,\n squareSize,\n squareSize,\n );\n\n return canvas;\n};\n\n/**\n * Draw face mesh overlay on canvas\n */\nexport const drawFaceMesh = (\n canvas: HTMLCanvasElement,\n landmarks: any[],\n capturesTaken: number,\n smileCheckpoint: number,\n): void => {\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n const canvasWidth = canvas.width;\n const canvasHeight = canvas.height;\n\n ctx.clearRect(0, 0, canvasWidth, canvasHeight);\n\n const drawingUtils = new DrawingUtils(ctx);\n\n landmarks.forEach((landmark) => {\n if (!landmark || landmark.length === 0) return;\n\n const outlineColor = 'rgba(162, 155, 254,0.4)';\n const lineWidth = 2;\n ctx.strokeStyle = 'rgba(255, 255, 255, 0.6)';\n ctx.lineWidth = lineWidth;\n ctx.lineCap = 'round';\n ctx.lineJoin = 'round';\n\n drawingUtils.drawLandmarks(landmark, {\n color: 'rgba(9, 132, 227,0.7)',\n lineWidth: 0.5,\n radius: 0.5,\n });\n drawingUtils.drawConnectors(\n landmark,\n FaceLandmarker.FACE_LANDMARKS_FACE_OVAL,\n {\n color: outlineColor,\n lineWidth,\n },\n );\n\n const isInSmileZone = capturesTaken > 0 && capturesTaken >= smileCheckpoint;\n if (isInSmileZone) {\n drawingUtils.drawConnectors(\n landmark,\n FaceLandmarker.FACE_LANDMARKS_LIPS,\n {\n color: outlineColor,\n lineWidth,\n },\n );\n }\n });\n};\n\n/**\n * Clear canvas completely\n */\nexport const clearCanvas = (canvas: HTMLCanvasElement): void => {\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n }\n};\n","import { JPEG_QUALITY } from '../../../../../domain/constants/src/Constants';\n\nexport const captureImageFromVideo = (\n videoElement: HTMLVideoElement,\n isReference: boolean = false,\n): string | null => {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n if (!ctx) return null;\n\n const isPortrait = videoElement.videoHeight > videoElement.videoWidth;\n\n if (isReference) {\n if (isPortrait) {\n canvas.width = 480;\n canvas.height = Math.max(\n 640,\n (canvas.width * videoElement.videoHeight) / videoElement.videoWidth,\n );\n } else {\n canvas.width = 640;\n canvas.height = Math.max(\n 480,\n (canvas.width * videoElement.videoHeight) / videoElement.videoWidth,\n );\n }\n } else if (isPortrait) {\n canvas.width = 240;\n canvas.height = Math.max(\n 320,\n (canvas.width * videoElement.videoHeight) / videoElement.videoWidth,\n );\n } else {\n canvas.width = 320;\n canvas.height = Math.max(\n 240,\n (canvas.width * videoElement.videoHeight) / videoElement.videoWidth,\n );\n }\n\n // capture more of the user's head and avoid clipping\n const zoomOutFactor = 1;\n const sourceWidth = videoElement.videoWidth * zoomOutFactor;\n const sourceHeight = videoElement.videoHeight * zoomOutFactor;\n\n // center the zoomed out area\n const offsetX = (sourceWidth - videoElement.videoWidth) / 2;\n const offsetY = (sourceHeight - videoElement.videoHeight) / 2;\n\n // vertical offset to shift up and capture full head\n const verticalOffset = 0;\n\n ctx.drawImage(\n videoElement,\n -offsetX,\n -offsetY - verticalOffset,\n sourceWidth,\n sourceHeight,\n 0,\n 0,\n canvas.width,\n canvas.height,\n );\n\n return canvas.toDataURL('image/jpeg', JPEG_QUALITY);\n};\n","/**\n * The type of image submitted in the job request\n * @readonly\n * @enum {number}\n */\nexport const ImageType = {\n /** ID_CARD_BACK_IMAGE_BASE64 Base64 encoded back of ID card image (.jpg or .png) */\n ID_CARD_BACK_IMAGE_BASE64: 7,\n /** ID_CARD_BACK_IMAGE_FILE Back of ID card image in .png or .jpg file format */\n ID_CARD_BACK_IMAGE_FILE: 5,\n /** ID_CARD_IMAGE_BASE64 Base64 encoded ID card image (.png or .jpg) */\n ID_CARD_IMAGE_BASE64: 3,\n /** ID_CARD_IMAGE_FILE ID card image in .png or .jpg file format */\n ID_CARD_IMAGE_FILE: 1,\n /** LIVENESS_IMAGE_BASE64 Base64 encoded liveness image (.jpg or .png) */\n LIVENESS_IMAGE_BASE64: 6,\n /** LIVENESS_IMAGE_FILE Liveness image in .png or .jpg file format */\n LIVENESS_IMAGE_FILE: 4,\n /** SELFIE_IMAGE_BASE64 Base64 encoded selfie image (.png or .jpg) */\n SELFIE_IMAGE_BASE64: 2,\n /** SELFIE_IMAGE_FILE Selfie image in .png or .jpg file format */\n SELFIE_IMAGE_FILE: 0,\n};\n","import { t } from '../../../../../domain/localisation';\n\nexport const MESSAGES = {\n 'no-face': () => t('selfie.smart.alert.noFace'),\n 'out-of-bounds': () => t('selfie.smart.alert.outOfBounds'),\n 'too-close': () => t('selfie.smart.alert.tooClose'),\n 'too-far': () => t('selfie.smart.alert.tooFar'),\n 'neutral-expression': () => t('selfie.smart.alert.neutralExpression'),\n 'smile-required': () => t('selfie.smart.alert.smileRequired'),\n 'open-mouth-smile': () => t('selfie.smart.alert.openMouthSmile'),\n initializing: () => t('selfie.smart.alert.initializing'),\n};\n\nexport type MessageKey = keyof typeof MESSAGES;\n","import { FaceLandmarker, FilesetResolver } from '@mediapipe/tasks-vision';\n\nconst EXCLUDED_GPUS = [\n 'adreno-830',\n 'adreno-8xx',\n 'adreno-9xx',\n 'adreno-840',\n 'adreno-810',\n];\n\nconst normalizeGpuText = (value: string): string =>\n value\n .toLowerCase()\n .replace(/\\(tm\\)|\\btm\\b/g, '')\n .replace(/[^a-z0-9]/g, '');\n\nconst matchesExcludedGpu = (value: string): boolean => {\n const normalizedValue = normalizeGpuText(value);\n\n return EXCLUDED_GPUS.some((gpuPattern) => {\n const normalizedPattern = normalizeGpuText(gpuPattern);\n\n if (normalizedPattern.endsWith('xx')) {\n const familyPrefix = normalizedPattern.slice(0, -2);\n return new RegExp(`${familyPrefix}\\\\d{2}`).test(normalizedValue);\n }\n\n return normalizedValue.includes(normalizedPattern);\n });\n};\n\n/**\n * @description Gets the GPU renderer string using WebGL debug info extension.\n * @returns {string | null} The GPU renderer string or null if unavailable.\n */\nconst getGpuRenderer = (): string | null => {\n try {\n const canvas = document.createElement('canvas');\n const gl =\n canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n if (!gl || !(gl instanceof WebGLRenderingContext)) return null;\n\n const ext = gl.getExtension('WEBGL_debug_renderer_info');\n if (!ext) return null;\n\n return gl.getParameter(ext.UNMASKED_RENDERER_WEBGL) as string | null;\n } catch {\n return null;\n }\n};\n\n/**\n * @description Checks if the GPU renderer matches any excluded GPU.\n * @param {string | null} [renderer] Optional GPU renderer string to use. If not provided, it will be fetched via WebGL.\n * @returns {boolean} True if the GPU is excluded.\n */\nconst isExcludedGpuFromWebGL = (renderer?: string | null): boolean => {\n const rendererString = (renderer ?? getGpuRenderer())?.toLowerCase() ?? '';\n if (!rendererString) return false;\n\n return matchesExcludedGpu(rendererString);\n};\n\ndeclare global {\n interface Window {\n __smileIdentityMediapipe?: {\n instance: FaceLandmarker | null;\n loading: Promise<FaceLandmarker> | null;\n loaded: boolean;\n supportsWasmReftypes?: boolean;\n };\n }\n}\n\n/**\n * @description Detects whether the current runtime supports the WebAssembly\n * reference-types proposal (the `externref` value type). MediaPipe Tasks\n * Vision ships a .wasm that uses `externref`; on older engines (e.g. Chrome\n * < 96, Safari < 15, Firefox < 79) `WebAssembly.instantiate` throws\n * `CompileError: invalid value type 'externref'`. We probe support once with\n * `WebAssembly.validate` against a tiny module whose only feature is an\n * `externref`-typed global so callers can short-circuit and fall back to the\n * legacy selfie capture flow instead of triggering an unhandled rejection.\n * @returns {boolean} True if the runtime accepts reftypes / externref.\n */\nconst supportsWasmReftypes = (): boolean => {\n if (typeof WebAssembly === 'undefined' || !WebAssembly.validate) {\n return false;\n }\n\n try {\n // Minimal module: magic + version + global section with one externref\n // global (value type 0x6f) initialized to ref.null extern (0xd0 0x6f 0x0b).\n const bytes = new Uint8Array([\n 0x00,\n 0x61,\n 0x73,\n 0x6d, // \\0asm magic\n 0x01,\n 0x00,\n 0x00,\n 0x00, // version 1\n 0x06,\n 0x06,\n 0x01, // global section, 6 bytes, 1 global\n 0x6f,\n 0x00, // externref, immutable\n 0xd0,\n 0x6f,\n 0x0b, // ref.null extern; end\n ]);\n return WebAssembly.validate(bytes);\n } catch {\n return false;\n }\n};\n\nexport class UnsupportedMediapipeEnvironmentError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'UnsupportedMediapipeEnvironmentError';\n }\n}\n\n/**\n * @description Thrown when `FaceLandmarker.createFromOptions` does not settle\n * within {@link MEDIAPIPE_INIT_TIMEOUT_MS}. The WASM and model assets download\n * over the network, but the subsequent WASM compile + GPU/CPU graph\n * initialization runs on-device and can stall indefinitely on some drivers.\n * Without a timeout the cached `loading` promise never resolves nor rejects,\n * which (a) keeps the loading UI spinning until the wrapper's hard deadline and\n * (b) poisons the singleton so retries/remounts await the same stuck promise.\n * Treated as a transient failure by callers so the bounded retry can re-run.\n */\nexport class MediapipeInitTimeoutError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'MediapipeInitTimeoutError';\n }\n}\n\n// Last-resort hang guard for `createFromOptions`. This call also downloads the\n// ~3MB model, so the budget must cover a slow/uncached fetch as well as the\n// on-device init — hence it is deliberately generous. It exists only so a truly\n// wedged init eventually rejects (letting the wrapper's bounded retry / hard\n// deadline take over) rather than hanging forever; it is NOT used to decide the\n// GPU→CPU fallback (that keys off real init errors — see getMediapipeInstance).\nconst MEDIAPIPE_INIT_TIMEOUT_MS = 45000;\n\n/**\n * @description Races a promise against a timeout. On timeout, rejects with a\n * {@link MediapipeInitTimeoutError}. The underlying promise is not (and cannot\n * be) aborted — we just stop awaiting it so callers can recover.\n * @param {Promise<T>} promise The work to bound.\n * @param {number} ms Timeout in milliseconds.\n * @param {string} message Message for the timeout error.\n * @returns {Promise<T>} Resolves/rejects with the promise, or rejects on timeout.\n */\nconst withTimeout = <T>(\n promise: Promise<T>,\n ms: number,\n message: string,\n): Promise<T> =>\n new Promise<T>((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n reject(new MediapipeInitTimeoutError(message));\n }, ms);\n\n promise.then(\n (value) => {\n clearTimeout(timeoutId);\n resolve(value);\n },\n (error) => {\n clearTimeout(timeoutId);\n reject(error);\n },\n );\n });\n\n/**\n * @description Reads system architecture hints from User-Agent Client Hints.\n * @returns {Promise<string | null>} Lower-cased hint string or null when hints are unavailable.\n */\nconst getSystemArchitectureHints = async (): Promise<string | null> => {\n if (typeof navigator === 'undefined' || !(navigator as any).userAgentData) {\n return null;\n }\n\n try {\n const hints = await (navigator as any).userAgentData.getHighEntropyValues([\n 'architecture',\n 'model',\n 'platform',\n 'platformVersion',\n 'fullVersionList',\n ]);\n\n return JSON.stringify(hints).toLowerCase();\n } catch (error) {\n console.warn('UA-CH architecture hints fetch failed.', error);\n return null;\n }\n};\n\n/**\n * @description Determines the MediaPipe delegate based on WebGL renderer info and UA-CH hints.\n * Uses WebGL renderer as primary detection, UA-CH hints as secondary.\n * @returns {Promise<'CPU' | 'GPU'>} CPU when excluded GPU is detected; otherwise GPU.\n */\nconst getDelegateFromGpuDetection = async (): Promise<'CPU' | 'GPU'> => {\n const renderer = getGpuRenderer();\n const hasWebGlRendererInfo = !!renderer;\n\n // Primary check: WebGL renderer info (most reliable for GPU detection)\n if (isExcludedGpuFromWebGL(renderer)) {\n console.info(`[SmileID] Excluded GPU via WebGL: ${renderer}. Using CPU.`);\n return 'CPU';\n }\n\n // Secondary check: UA-CH hints (may contain GPU info in some browsers)\n const hintString = await getSystemArchitectureHints();\n const hasUaHints = !!hintString;\n\n if (hintString) {\n const hasExcludedGpuInHints = matchesExcludedGpu(hintString);\n\n if (hasExcludedGpuInHints) {\n console.info(`[SmileID] Excluded GPU via UA-CH hints. Using CPU.`);\n return 'CPU';\n }\n }\n\n if (!hasWebGlRendererInfo && !hasUaHints) {\n console.info(\n '[SmileID] No WebGL renderer or UA-CH hints available. Using CPU.',\n );\n return 'CPU';\n }\n\n // Default to GPU when no exclusion is detected\n console.info(\n `[SmileID] No excluded GPU detected. WebGL renderer: ${renderer ?? 'unavailable'}. Using GPU.`,\n );\n return 'GPU';\n};\n\n// this was added because devices (mostly older) that do not support FP16 will fail to load the model.\nconst hasFP16Support = () => {\n const canvas = document.createElement('canvas');\n const gl =\n canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n if (!gl) return false;\n\n const hasHalfFloatExt = (gl as any).getExtension('OES_texture_half_float');\n const hasHalfFloatLinear = (gl as any).getExtension(\n 'OES_texture_half_float_linear',\n );\n const hasColorBufferHalfFloat = (gl as any).getExtension(\n 'EXT_color_buffer_half_float',\n );\n\n return !!(hasHalfFloatExt && hasColorBufferHalfFloat && hasHalfFloatLinear);\n};\n\n/**\n * @description Creates a FaceLandmarker with the given compute delegate.\n * Extracted so the init can be retried with a different delegate without\n * duplicating the options.\n * @param {Awaited<ReturnType<typeof FilesetResolver.forVisionTasks>>} vision Resolved WASM fileset.\n * @param {'CPU' | 'GPU'} delegate Compute delegate to use.\n * @returns {Promise<FaceLandmarker>} The created FaceLandmarker.\n */\nconst createLandmarker = (\n vision: Awaited<ReturnType<typeof FilesetResolver.forVisionTasks>>,\n delegate: 'CPU' | 'GPU',\n): Promise<FaceLandmarker> =>\n FaceLandmarker.createFromOptions(vision, {\n baseOptions: {\n modelAssetPath: `https://web-models.smileidentity.com/face_landmarker/face_landmarker.task`,\n delegate,\n },\n outputFaceBlendshapes: true,\n runningMode: 'VIDEO',\n numFaces: 2,\n });\n\nexport const getMediapipeInstance = async (): Promise<FaceLandmarker> => {\n if (!window.__smileIdentityMediapipe) {\n window.__smileIdentityMediapipe = {\n instance: null,\n loading: null,\n loaded: false,\n };\n }\n\n const mediapipeGlobal = window.__smileIdentityMediapipe;\n\n if (mediapipeGlobal.loaded && mediapipeGlobal.instance) {\n return mediapipeGlobal.instance;\n }\n\n if (mediapipeGlobal.loading) {\n return mediapipeGlobal.loading;\n }\n\n // Fail fast on engines that don't support WebAssembly reftypes/externref.\n // The MediaPipe Tasks Vision .wasm uses externref globals; instantiating it\n // on older browsers throws an unhandled `CompileError`. We detect once and\n // cache the result so callers fall back to the legacy capture flow.\n if (mediapipeGlobal.supportsWasmReftypes === undefined) {\n mediapipeGlobal.supportsWasmReftypes = supportsWasmReftypes();\n }\n if (!mediapipeGlobal.supportsWasmReftypes) {\n throw new UnsupportedMediapipeEnvironmentError(\n 'WebAssembly reference types (externref) are not supported in this browser; MediaPipe Tasks Vision cannot be loaded.',\n );\n }\n\n mediapipeGlobal.loading = (async () => {\n try {\n const vision = await FilesetResolver.forVisionTasks(\n 'https://web-models.smileidentity.com/mediapipe-tasks-vision-wasm',\n );\n\n const gpuDelegate = await getDelegateFromGpuDetection();\n const delegate =\n gpuDelegate === 'CPU' || !hasFP16Support() ? 'CPU' : 'GPU';\n\n // A GPU-delegate init can throw on some drivers (WebGL context/shader\n // failures) even though the model already downloaded; on a genuine GPU\n // *error* we retry once on CPU before giving up. We deliberately do NOT\n // fall back on a timeout: the timeout also covers the model download, so\n // a slow fetch could trip it while a healthy GPU init is still in\n // progress — abandoning it to start a redundant CPU init only makes\n // things worse. A timeout therefore propagates as a transient failure for\n // the wrapper's bounded retry / hard deadline to handle.\n //\n // Orphan handling: when `withTimeout` fires, the underlying\n // `createLandmarker` promise is still in flight (it cannot be aborted).\n // If it eventually resolves, the resulting `FaceLandmarker` would leak a\n // GPU/WebGL context, so we attach a best-effort `.close()` cleanup to the\n // original promise reference for both the GPU and CPU init paths.\n const closeOrphan = (orphan: FaceLandmarker) => {\n try {\n orphan.close();\n } catch {\n /* best effort */\n }\n };\n\n let faceLandmarker: FaceLandmarker;\n const initPromise = createLandmarker(vision, delegate);\n try {\n faceLandmarker = await withTimeout(\n initPromise,\n MEDIAPIPE_INIT_TIMEOUT_MS,\n `MediaPipe initialization timed out after ${MEDIAPIPE_INIT_TIMEOUT_MS}ms (delegate: ${delegate}).`,\n );\n } catch (error) {\n const isTimeout = error instanceof MediapipeInitTimeoutError;\n if (isTimeout) {\n // Stop awaiting the in-flight init, but if it eventually resolves,\n // close the orphaned instance to avoid leaking a GPU/WebGL context.\n initPromise.then(closeOrphan, () => {\n /* already failed; nothing to clean up */\n });\n }\n if (delegate === 'GPU' && !isTimeout) {\n console.warn(\n '[SmileID] GPU MediaPipe init failed; retrying with CPU delegate.',\n error,\n );\n const cpuInitPromise = createLandmarker(vision, 'CPU');\n try {\n faceLandmarker = await withTimeout(\n cpuInitPromise,\n MEDIAPIPE_INIT_TIMEOUT_MS,\n `MediaPipe CPU initialization timed out after ${MEDIAPIPE_INIT_TIMEOUT_MS}ms.`,\n );\n } catch (cpuError) {\n if (cpuError instanceof MediapipeInitTimeoutError) {\n cpuInitPromise.then(closeOrphan, () => {\n /* already failed; nothing to clean up */\n });\n }\n throw cpuError;\n }\n } else {\n throw error;\n }\n }\n\n mediapipeGlobal.instance = faceLandmarker;\n mediapipeGlobal.loaded = true;\n mediapipeGlobal.loading = null;\n\n return faceLandmarker;\n } catch (error) {\n // Always clear the poisoned promise so the wrapper's bounded retry — and\n // any later remount — can re-attempt instead of awaiting a dead promise.\n mediapipeGlobal.loading = null;\n throw error;\n }\n })();\n\n return mediapipeGlobal.loading;\n};\n\nexport const __testUtils = {\n matchesExcludedGpu,\n getDelegateFromGpuDetection,\n supportsWasmReftypes,\n withTimeout,\n MEDIAPIPE_INIT_TIMEOUT_MS,\n};\n","import { useRef } from 'preact/hooks';\nimport { useSignal, useComputed } from '@preact/signals';\nimport type { RefObject } from 'preact';\nimport { FaceLandmarker } from '@mediapipe/tasks-vision';\nimport throttle from 'lodash/throttle';\nimport {\n calculateFaceSize,\n isFaceInBounds,\n calculateMouthOpening,\n} from '../utils/faceDetection';\nimport {\n createCroppedVideoFrame,\n drawFaceMesh,\n clearCanvas,\n} from '../utils/canvas';\nimport { captureImageFromVideo } from '../utils/imageCapture';\nimport { ImageType } from '../constants';\nimport { MESSAGES, type MessageKey } from '../utils/alertMessages';\nimport { getMediapipeInstance } from '../utils/mediapipeManager';\nimport { t } from '../../../../../domain/localisation';\nimport packageJson from '../../../../../../package.json';\n\nconst COMPONENTS_VERSION = packageJson.version;\n\ninterface UseFaceCaptureProps {\n videoRef: RefObject<HTMLVideoElement>;\n canvasRef: RefObject<HTMLCanvasElement>;\n interval: number;\n duration: number;\n smileThreshold: number;\n mouthOpenThreshold: number;\n minFaceSize: number;\n maxFaceSize: number;\n smileCooldown: number;\n getFacingMode: () => CameraFacingMode;\n}\n\nexport const useFaceCapture = ({\n videoRef,\n canvasRef,\n interval,\n duration,\n smileThreshold,\n mouthOpenThreshold,\n minFaceSize,\n maxFaceSize,\n smileCooldown,\n getFacingMode,\n}: UseFaceCaptureProps) => {\n const faceLandmarkerRef = useRef<FaceLandmarker | null>(null);\n const animationFrameRef = useRef<number | null>(null);\n const captureTimerRef = useRef<NodeJS.Timeout | null>(null);\n const resumeCaptureRef = useRef<(() => void) | null>(null);\n const fallbackTimerRef = useRef<NodeJS.Timeout | null>(null);\n\n const faceDetected = useSignal(false);\n const faceInBounds = useSignal(false);\n const faceProximity = useSignal<'too-close' | 'too-far' | 'good'>('good');\n const videoAspectRatio = useSignal(16 / 9);\n const faceLandmarks = useSignal<any[]>([]);\n const currentSmileScore = useSignal(0);\n const currentFaceSize = useSignal(0);\n const currentMouthOpen = useSignal(0);\n const lastSmileTime = useSignal(0);\n const alertTitle = useSignal('');\n const isInitializing = useSignal(true);\n const captureButtonFallbackEnabled = useSignal(false);\n\n const isCapturing = useSignal(false);\n const isPaused = useSignal(false);\n const countdown = useSignal(0);\n const capturedImages = useSignal<string[]>([]);\n const referencePhoto = useSignal<string | null>(null);\n const totalCaptures = useSignal(1);\n const capturesTaken = useSignal(0);\n const hasFinishedCapture = useSignal(false);\n\n const smileCheckpoint = useComputed(() =>\n Math.floor(totalCaptures.value * 0.4),\n );\n const neutralZone = useComputed(() => Math.floor(totalCaptures.value * 0.2));\n\n const isReadyToCapture = useComputed(\n () =>\n faceDetected.value &&\n faceInBounds.value &&\n faceProximity.value === 'good',\n );\n\n const updateAlertImmediate = (messageKey: MessageKey | null) => {\n if (messageKey && MESSAGES[messageKey]) {\n alertTitle.value = MESSAGES[messageKey]?.();\n } else {\n alertTitle.value = '';\n }\n };\n\n const updateAlert = useRef(\n throttle((messageKey: MessageKey | null) => {\n updateAlertImmediate(messageKey);\n }, 600),\n ).current;\n\n const CAPTURE_FALLBACK_TIMEOUT_MS = 10000;\n\n const startFallbackTimer = () => {\n if (fallbackTimerRef.current) {\n clearTimeout(fallbackTimerRef.current);\n }\n fallbackTimerRef.current = setTimeout(() => {\n if (!isReadyToCapture.value) {\n captureButtonFallbackEnabled.value = true;\n }\n }, CAPTURE_FALLBACK_TIMEOUT_MS);\n };\n\n const initializeFaceLandmarker = async () => {\n try {\n const isAlreadyLoaded =\n window.__smileIdentityMediapipe?.loaded &&\n window.__smileIdentityMediapipe?.instance;\n\n if (!isAlreadyLoaded) {\n isInitializing.value = true;\n updateAlertImmediate('initializing');\n }\n\n faceLandmarkerRef.current = await getMediapipeInstance();\n isInitializing.value = false;\n startFallbackTimer();\n } catch (error) {\n console.error('Failed to initialize MediaPipe:', error);\n isInitializing.value = false;\n // MediaPipe failed — start the fallback timer so the button eventually\n // enables and the user isn't permanently stuck.\n startFallbackTimer();\n }\n startFallbackTimer();\n };\n\n const setupCanvas = () => {\n if (videoRef.current && canvasRef.current) {\n const { videoWidth, videoHeight } = videoRef.current;\n\n videoAspectRatio.value = videoWidth / videoHeight;\n\n canvasRef.current.width = videoWidth;\n canvasRef.current.height = videoHeight;\n\n const container = videoRef.current.parentElement;\n if (container) {\n canvasRef.current.style.left = '50%';\n canvasRef.current.style.top = '50%';\n }\n }\n };\n\n const updateCaptureAlerts = () => {\n const isInNeutralZone = capturesTaken.value < neutralZone.value;\n const isInSmileZone = capturesTaken.value >= smileCheckpoint.value;\n\n if (isInNeutralZone) {\n alertTitle.value = t('selfie.smart.status.capturing');\n } else if (isInSmileZone) {\n const timeSinceSmile = Date.now() - lastSmileTime.value;\n if (timeSinceSmile > smileCooldown) {\n if (\n currentSmileScore.value >= smileThreshold &&\n currentMouthOpen.value < mouthOpenThreshold\n ) {\n updateAlert('open-mouth-smile');\n } else {\n updateAlert('smile-required');\n }\n } else {\n alertTitle.value = t('selfie.smart.status.keepSmiling');\n }\n } else {\n updateAlert(null);\n }\n };\n\n const updateAlerts = () => {\n if (isInitializing.value) {\n updateAlertImmediate('initializing');\n } else if (!faceDetected.value) {\n updateAlert('no-face');\n } else if (faceProximity.value === 'too-close') {\n updateAlert('too-close');\n } else if (faceProximity.value === 'too-far') {\n updateAlert('too-far');\n } else if (!faceInBounds.value) {\n updateAlert('out-of-bounds');\n } else if (isCapturing.value) {\n updateCaptureAlerts();\n } else {\n alertTitle.value = t('selfie.smart.status.readyToCapture');\n }\n };\n\n const stopDetectionLoop = () => {\n if (animationFrameRef.current) {\n cancelAnimationFrame(animationFrameRef.current);\n animationFrameRef.current = null;\n }\n };\n\n const detectFace = async () => {\n if (!faceLandmarkerRef.current || !videoRef.current) {\n stopDetectionLoop();\n return;\n }\n\n // ensure video has valid dimensions before processing\n if (\n videoRef.current.videoWidth <= 0 ||\n videoRef.current.videoHeight <= 0 ||\n videoRef.current.readyState < 2\n ) {\n animationFrameRef.current = requestAnimationFrame(detectFace);\n return;\n }\n\n try {\n if (isInitializing.value) {\n isInitializing.value = false;\n }\n\n const croppedCanvas = createCroppedVideoFrame(videoRef.current);\n const detectionSource = croppedCanvas || videoRef.current;\n\n const results = faceLandmarkerRef.current.detectForVideo(\n detectionSource,\n performance.now(),\n );\n\n faceLandmarks.value = results.faceLandmarks || [];\n\n if (results.faceLandmarks && canvasRef.current && videoRef.current) {\n // we run detection on a cropped video frame\n // adjust landmark coordinates back to full video space\n if (croppedCanvas) {\n const sourceWidth = videoRef.current.videoWidth;\n const sourceHeight = videoRef.current.videoHeight;\n const squareSize = Math.min(sourceWidth, sourceHeight);\n const offsetX = (sourceWidth - squareSize) / (2 * sourceWidth);\n const offsetY = (sourceHeight - squareSize) / (2 * sourceHeight);\n const scaleFactor = squareSize / sourceWidth;\n const scaleFactorY = squareSize / sourceHeight;\n\n const adjustedLandmarks = results.faceLandmarks.map((face) =>\n face.map((landmark: any) => ({\n x: landmark.x * scaleFactor + offsetX,\n y: landmark.y * scaleFactorY + offsetY,\n z: landmark.z,\n })),\n );\n\n drawFaceMesh(\n canvasRef.current,\n adjustedLandmarks,\n capturesTaken.value,\n smileCheckpoint.value,\n );\n } else {\n drawFaceMesh(\n canvasRef.current,\n results.faceLandmarks,\n capturesTaken.value,\n smileCheckpoint.value,\n );\n }\n } else if (canvasRef.current) {\n clearCanvas(canvasRef.current);\n }\n\n // Check number of faces\n const numFaces = results.faceLandmarks ? results.faceLandmarks.length : 0;\n\n // Check if face is detected\n const hasFace =\n results.faceBlendshapes &&\n results.faceBlendshapes.length > 0 &&\n numFaces >= 1;\n faceDetected.value = hasFace;\n\n if (hasFace && results.faceLandmarks) {\n // Calculate face size and position\n const faceSize = calculateFaceSize(results.faceLandmarks);\n currentFaceSize.value = faceSize;\n\n // Check face proximity\n if (faceSize > maxFaceSize) {\n faceProximity.value = 'too-close';\n } else if (faceSize < minFaceSize) {\n faceProximity.value = 'too-far';\n } else {\n faceProximity.value = 'good';\n }\n\n // Check face position\n faceInBounds.value = isFaceInBounds(\n results.faceLandmarks,\n videoAspectRatio.value,\n );\n\n // Get smile and mouth open data\n const blendshapes = results.faceBlendshapes[0].categories;\n const smileLeft =\n blendshapes.find((b) => b.categoryName === 'mouthSmileLeft')?.score ||\n 0;\n const smileRight =\n blendshapes.find((b) => b.categoryName === 'mouthSmileRight')\n ?.score || 0;\n const mouthOpen = calculateMouthOpening(results.faceLandmarks);\n const smileScore = (smileLeft + smileRight) / 2;\n\n currentSmileScore.value = smileScore;\n currentMouthOpen.value = mouthOpen;\n\n if (smileScore >= smileThreshold && mouthOpen >= mouthOpenThreshold) {\n lastSmileTime.value = Date.now();\n\n if (isPaused.value && isCapturing.value && resumeCaptureRef.current) {\n // defer execution\n setTimeout(() => {\n const stillSmiling = Date.now() - lastSmileTime.value <= 100;\n if (\n stillSmiling &&\n isPaused.value &&\n isCapturing.value &&\n resumeCaptureRef.current\n ) {\n resumeCaptureRef.current();\n }\n }, 0);\n }\n }\n\n // Before the smile zone, resume automatically when face returns to a\n // valid position — no smile is needed yet.\n if (\n isPaused.value &&\n isCapturing.value &&\n capturesTaken.value < smileCheckpoint.value &&\n resumeCaptureRef.current\n ) {\n resumeCaptureRef.current();\n }\n } else {\n // No face detected - reset values\n currentSmileScore.value = 0;\n currentFaceSize.value = 0;\n currentMouthOpen.value = 0;\n faceInBounds.value = false;\n faceProximity.value = 'good';\n }\n\n updateAlerts();\n } catch {\n faceDetected.value = false;\n faceInBounds.value = false;\n faceProximity.value = 'good';\n currentMouthOpen.value = 0;\n\n if (isCapturing.value) {\n updateAlert('no-face');\n }\n }\n\n animationFrameRef.current = requestAnimationFrame(detectFace);\n };\n\n const startDetectionLoop = () => {\n if (animationFrameRef.current) {\n cancelAnimationFrame(animationFrameRef.current);\n }\n animationFrameRef.current = requestAnimationFrame(detectFace);\n };\n\n const captureImage = () => {\n if (!videoRef.current) return;\n\n const isReference = capturesTaken.value === totalCaptures.value - 1;\n const imageData = captureImageFromVideo(videoRef.current, isReference);\n\n if (!imageData) return;\n\n if (isReference) {\n referencePhoto.value = imageData;\n } else {\n capturedImages.value = [...capturedImages.value, imageData];\n }\n\n capturesTaken.value++;\n countdown.value = totalCaptures.value - capturesTaken.value;\n };\n\n const stopCapture = () => {\n if (captureTimerRef.current) {\n clearInterval(captureTimerRef.current);\n captureTimerRef.current = null;\n }\n\n isCapturing.value = false;\n isPaused.value = false;\n\n if (capturesTaken.value >= totalCaptures.value && referencePhoto.value) {\n const livenessImages = capturedImages.value.map((img) => ({\n image: img.split(',')[1],\n image_type_id: ImageType.LIVENESS_IMAGE_BASE64,\n }));\n\n const referenceImage = {\n image: referencePhoto.value.split(',')[1],\n image_type_id: ImageType.SELFIE_IMAGE_BASE64,\n };\n\n const eventDetail = {\n images: [...livenessImages, referenceImage],\n referenceImage: referencePhoto.value,\n previewImage: referencePhoto.value,\n facingMode: getFacingMode(),\n meta: { libraryVersion: COMPONENTS_VERSION },\n };\n\n window.dispatchEvent(\n new CustomEvent('selfie-capture.publish', { detail: eventDetail }),\n );\n\n hasFinishedCapture.value = true;\n }\n };\n\n const pauseCapture = () => {\n if (captureTimerRef.current) {\n clearInterval(captureTimerRef.current);\n captureTimerRef.current = null;\n }\n isPaused.value = true;\n\n if (\n faceDetected.value &&\n faceInBounds.value &&\n faceProximity.value === 'good'\n ) {\n updateAlert('smile-required');\n }\n };\n\n const startCaptureInterval = () => {\n if (captureTimerRef.current) {\n clearInterval(captureTimerRef.current);\n }\n\n captureTimerRef.current = setInterval(() => {\n if (capturesTaken.value >= totalCaptures.value) {\n stopCapture();\n return;\n }\n\n if (!faceDetected.value) {\n return;\n }\n\n if (!faceInBounds.value) {\n pauseCapture();\n return;\n }\n\n if (faceProximity.value !== 'good') {\n pauseCapture();\n return;\n }\n\n const isInSmileZone = capturesTaken.value >= smileCheckpoint.value;\n\n if (isInSmileZone) {\n const timeSinceSmile = Date.now() - lastSmileTime.value;\n if (timeSinceSmile > smileCooldown) {\n pauseCapture();\n return;\n }\n }\n\n captureImage();\n }, interval);\n };\n\n const resumeCapture = () => {\n if (\n faceDetected.value &&\n faceProximity.value === 'good' &&\n faceInBounds.value\n ) {\n const isInSmileZone = capturesTaken.value >= smileCheckpoint.value;\n if (isInSmileZone) {\n const timeSinceSmile = Date.now() - lastSmileTime.value;\n if (timeSinceSmile > smileCooldown) {\n return;\n }\n }\n\n isPaused.value = false;\n updateAlert(null);\n startCaptureInterval();\n }\n };\n\n resumeCaptureRef.current = resumeCapture;\n\n const startCapture = async () => {\n capturedImages.value = [];\n isCapturing.value = true;\n isPaused.value = false;\n totalCaptures.value = Math.ceil(duration / interval);\n capturesTaken.value = 0;\n countdown.value = totalCaptures.value;\n\n const smartCameraWeb = document.querySelector('smart-camera-web');\n smartCameraWeb?.dispatchEvent(\n new CustomEvent('metadata.selfie-capture-start'),\n );\n smartCameraWeb?.dispatchEvent(\n new CustomEvent('metadata.selfie-origin', {\n detail: {\n imageOrigin: { environment: 'back_camera', user: 'front_camera' }[\n getFacingMode()\n ],\n },\n }),\n );\n\n startCaptureInterval();\n };\n\n const handleCancel = () => {\n stopCapture();\n window.dispatchEvent(\n new CustomEvent('selfie-capture.cancelled', {\n detail: { meta: { libraryVersion: COMPONENTS_VERSION } },\n }),\n );\n\n // TODO: remove - for backwards compatibility\n window.dispatchEvent(\n new CustomEvent('selfie-capture-screens.cancelled', {\n detail: { meta: { libraryVersion: COMPONENTS_VERSION } },\n }),\n );\n };\n\n const handleClose = () => {\n stopCapture();\n\n window.dispatchEvent(\n new CustomEvent('selfie-capture.close', {\n detail: { meta: { libraryVersion: COMPONENTS_VERSION } },\n }),\n );\n\n // TODO: remove - backwards compatibility\n window.dispatchEvent(\n new CustomEvent('selfie-capture-screens.close', {\n detail: { meta: { libraryVersion: COMPONENTS_VERSION } },\n }),\n );\n };\n\n const cleanup = () => {\n if (captureTimerRef.current) {\n clearInterval(captureTimerRef.current);\n }\n if (fallbackTimerRef.current) {\n clearTimeout(fallbackTimerRef.current);\n }\n stopDetectionLoop();\n updateAlert.cancel();\n };\n\n const resetFaceDetectionState = () => {\n faceDetected.value = false;\n faceInBounds.value = false;\n faceProximity.value = 'good';\n faceLandmarks.value = [];\n currentSmileScore.value = 0;\n currentFaceSize.value = 0;\n currentMouthOpen.value = 0;\n lastSmileTime.value = 0;\n captureButtonFallbackEnabled.value = false;\n if (fallbackTimerRef.current) {\n clearTimeout(fallbackTimerRef.current);\n fallbackTimerRef.current = null;\n }\n\n if (canvasRef.current) {\n clearCanvas(canvasRef.current);\n }\n };\n\n return {\n faceDetected,\n faceInBounds,\n faceProximity,\n videoAspectRatio,\n faceLandmarks,\n currentSmileScore,\n currentFaceSize,\n currentMouthOpen,\n lastSmileTime,\n alertTitle,\n isInitializing,\n isReadyToCapture,\n captureButtonFallbackEnabled,\n\n isCapturing,\n isPaused,\n countdown,\n capturedImages,\n referencePhoto,\n totalCaptures,\n capturesTaken,\n hasFinishedCapture,\n smileCheckpoint,\n neutralZone,\n\n initializeFaceLandmarker,\n setupCanvas,\n startDetectionLoop,\n stopDetectionLoop,\n updateAlert,\n startCapture,\n stopCapture,\n pauseCapture,\n resumeCapture,\n handleCancel,\n handleClose,\n cleanup,\n resetFaceDetectionState,\n };\n};\n","import { useEffect, useRef } from 'preact/hooks';\n\ninterface OvalProgressProps {\n progress: number;\n duration?: number;\n themeColor?: string;\n}\n\nconst OvalProgress = ({\n progress,\n duration = 1000,\n themeColor = '#001096',\n}: OvalProgressProps) => {\n const pathRef = useRef<SVGPathElement>(null);\n const prevProgress = useRef(progress);\n\n useEffect(() => {\n const path = pathRef.current;\n if (!path) return;\n\n const pathLength = path.getTotalLength();\n path.style.opacity = progress > 0 ? '1' : '0';\n const fromOffset = pathLength * (1 - prevProgress.current);\n const toOffset = pathLength * (1 - progress);\n\n // If no change, skip\n if (fromOffset === toOffset) return;\n\n path.style.transition = 'none';\n path.style.strokeDasharray = `${pathLength} ${pathLength}`;\n path.style.strokeDashoffset = `${fromOffset}`;\n\n // Force style flush\n path.getBoundingClientRect();\n\n path.style.transition = `stroke-dashoffset ${duration}ms ease-out`;\n path.style.strokeDashoffset = `${toOffset}`;\n\n prevProgress.current = progress;\n }, [progress, duration]);\n\n return (\n <div\n style={{\n position: 'absolute',\n top: '0',\n left: '0',\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n }}\n >\n <svg\n viewBox=\"0 0 285 380\"\n preserveAspectRatio=\"xMidYMid meet\"\n style={{ width: '100%', height: '100%' }}\n >\n {/* id is referenced by parent */}\n <clipPath id=\"selfie-clip-path\" clipPathUnits=\"objectBoundingBox\">\n <path d=\"M0.085 0.382 C0.087 0.357 0.092 0.294 0.131 0.236 C0.200 0.133 0.340 0.063 0.501 0.063 C0.730 0.063 0.915 0.205 0.915 0.382 C0.915 0.424 0.899 0.513 0.891 0.549 C0.882 0.588 0.871 0.626 0.857 0.664 C0.792 0.825 0.639 0.937 0.501 0.937 C0.314 0.937 0.182 0.755 0.144 0.666 C0.126 0.624 0.110 0.557 0.107 0.547 C0.092 0.485 0.081 0.439 0.085 0.382 Z\" />\n </clipPath>\n <path\n d=\"M142.693 24C208.319 24 261 77.97 261 145.008C261 160.97 256.319 194.788 254.129 208.356C251.64 223.188 248.348 237.875 244.27 252.35C225.747 313.203 182.328 356 142.693 356C89.414 356 51.871 286.667 41.016 252.948C35.937 236.987 31.356 211.748 30.559 207.857C26.277 184.114 22.991 166.556 24.285 145.008C24.883 135.631 26.277 111.789 37.431 89.742C57.049 50.636 96.983 24 142.693 24Z\"\n stroke={themeColor}\n fill=\"none\"\n style={{ strokeWidth: '8' }}\n />\n <path\n ref={pathRef}\n d=\"M142.693 24C208.319 24 261 77.97 261 145.008C261 160.97 256.319 194.788 254.129 208.356C251.64 223.188 248.348 237.875 244.27 252.35C225.747 313.203 182.328 356 142.693 356C89.414 356 51.871 286.667 41.016 252.948C35.937 236.987 31.356 211.748 30.559 207.857C26.277 184.114 22.991 166.556 24.285 145.008C24.883 135.631 26.277 111.789 37.431 89.742C57.049 50.636 96.983 24 142.693 24Z\"\n stroke=\"#22c55e\"\n style={{ strokeWidth: '8' }}\n fill=\"none\"\n strokeLinecap=\"round\"\n />\n </svg>\n </div>\n );\n};\n\nexport default OvalProgress;\n","import type { FunctionComponent, Ref } from 'preact';\nimport OvalProgress from '../OvalProgress';\n\ninterface CameraPreviewProps {\n videoRef: Ref<HTMLVideoElement>;\n canvasRef: Ref<HTMLCanvasElement>;\n facingMode: 'user' | 'environment';\n progress: number;\n interval: number;\n themeColor: string;\n}\n\nexport const CameraPreview: FunctionComponent<CameraPreviewProps> = ({\n videoRef,\n canvasRef,\n facingMode,\n progress,\n interval,\n themeColor,\n}) => (\n <>\n <div className=\"camera-preview-container\">\n <div\n className=\"video-wrapper\"\n style={{\n clipPath: 'url(#selfie-clip-path)',\n }}\n >\n <div className=\"video-container\">\n <video\n ref={videoRef}\n autoPlay\n playsInline\n muted\n className={`camera-video ${facingMode === 'user' ? 'mirror' : ''}`}\n />\n <canvas\n ref={canvasRef}\n className={`camera-canvas ${facingMode === 'user' ? 'mirror' : ''}`}\n />\n </div>\n </div>\n <OvalProgress\n progress={progress}\n duration={interval}\n themeColor={themeColor}\n />\n </div>\n\n <style>{`\n .camera-preview-container {\n position: relative;\n width: 100%;\n max-width: 300px;\n margin: 0 auto;\n }\n\n .video-wrapper {\n width: 100%;\n max-width: 300px;\n margin: 0 auto;\n position: relative;\n aspect-ratio: 3 / 4;\n overflow: hidden;\n }\n\n .video-container {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n .camera-video,\n .camera-canvas {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n\n .camera-video.mirror,\n .camera-canvas.mirror {\n transform: translate(-50%, -50%) scaleX(-1);\n }\n\n .camera-canvas {\n pointer-events: none;\n }\n `}</style>\n </>\n);\n","import type { FunctionComponent } from 'preact';\n\ninterface AlertDisplayProps {\n alertTitle: string;\n}\n\nexport const AlertDisplay: FunctionComponent<AlertDisplayProps> = ({\n alertTitle,\n}) =>\n alertTitle ? (\n <>\n <div className=\"alert-message\">\n <div className=\"alert-title\">{alertTitle}</div>\n </div>\n\n <style>{`\n .alert-message {\n margin-top: 1.5rem;\n color: #000;\n color: #151F72;\n padding: 0.5rem 1.5rem;\n border-radius: 4px;\n text-align: start;\n width: 100%;\n }\n\n .alert-title {\n font-size: 16px;\n font-weight: bold;\n text-align: center;\n }\n `}</style>\n </>\n ) : null;\n","import type { FunctionComponent } from 'preact';\nimport { t } from '../../../../../domain/localisation';\n\ninterface CaptureControlsProps {\n isCapturing: boolean;\n hasFinishedCapture: boolean;\n isReadyToCapture: boolean;\n captureButtonFallbackEnabled: boolean;\n allowAgentMode: boolean;\n agentSupported: boolean;\n showAgentModeForTests: boolean;\n facingMode: 'user' | 'environment';\n themeColor?: string;\n onStartCapture: () => void;\n onSwitchCamera: () => void;\n}\n\nexport const CaptureControls: FunctionComponent<CaptureControlsProps> = ({\n isCapturing,\n hasFinishedCapture,\n isReadyToCapture,\n captureButtonFallbackEnabled,\n allowAgentMode,\n agentSupported,\n showAgentModeForTests,\n facingMode,\n themeColor = '#001096',\n onStartCapture,\n onSwitchCamera,\n}) => (\n <>\n <div className=\"controls\">\n <button\n id=\"start-image-capture\"\n class=\"btn-primary\"\n onClick={onStartCapture}\n disabled={\n isCapturing ||\n hasFinishedCapture ||\n (!isReadyToCapture && !captureButtonFallbackEnabled)\n }\n >\n {t('selfie.capture.button.startCapture')}\n </button>\n\n {allowAgentMode && (agentSupported || showAgentModeForTests) && (\n <button\n id=\"switch-camera\"\n onClick={onSwitchCamera}\n className=\"agent-mode-btn\"\n disabled={isCapturing || hasFinishedCapture}\n >\n {facingMode === 'user'\n ? t('selfie.capture.agentMode.off')\n : t('selfie.capture.agentMode.on')}\n </button>\n )}\n </div>\n\n <style>{`\n .controls {\n margin: 1.5rem 0;\n display: flex;\n flex-direction: column;\n gap: 1rem;\n justify-content: center;\n max-width: 356px;\n margin: 0 auto;\n }\n\n .agent-mode-btn {\n padding: 8px 16px;\n font-size: 14px;\n background: ${themeColor};\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n }\n\n .agent-mode-btn:disabled {\n background: #ccc;\n cursor: not-allowed;\n }\n `}</style>\n </>\n);\n","import { useRef, useEffect } from 'preact/hooks';\nimport register from 'preact-custom-element';\nimport type { FunctionComponent } from 'preact';\n\nimport { getBoolProp } from '../../../../utils/props';\nimport { translate } from '../../../../domain/localisation';\nimport { useFaceCapture, useCamera } from './hooks';\nimport { CameraPreview } from './components/CameraPreview';\nimport { AlertDisplay } from './components/AlertDisplay';\nimport { CaptureControls } from './components/CaptureControls';\n\nimport '../../../navigation/src';\nimport '../../../attribution/PoweredBySmileId';\n\ninterface Props {\n interval?: number;\n duration?: number;\n 'theme-color'?: string;\n 'show-navigation'?: string | boolean;\n 'allow-agent-mode'?: string | boolean;\n 'show-agent-mode-for-tests'?: string | boolean;\n 'hide-attribution'?: string | boolean;\n 'disable-image-tests'?: string | boolean;\n}\n\nconst SmartSelfieCapture: FunctionComponent<Props> = ({\n interval = 350,\n duration = 2800,\n 'theme-color': themeColor = '#001096',\n 'show-navigation': showNavigationProp = false,\n 'allow-agent-mode': allowAgentModeProp = false,\n 'show-agent-mode-for-tests': showAgentModeForTestsProp = false,\n 'hide-attribution': hideAttributionProp = false,\n}) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const navigationRef = useRef<HTMLElement | null>(null);\n\n const showNavigation = getBoolProp(showNavigationProp);\n const allowAgentMode = getBoolProp(allowAgentModeProp);\n const showAgentModeForTests = getBoolProp(showAgentModeForTestsProp);\n const hideAttribution = getBoolProp(hideAttributionProp);\n\n const smileCooldown = 300;\n const smileThreshold = 0.25;\n const mouthOpenThreshold = 0.05;\n const minFaceSize = 0.35;\n const maxFaceSize = 0.5;\n\n const initialFacingMode = allowAgentMode ? 'environment' : 'user';\n const camera = useCamera(initialFacingMode);\n\n const faceCapture = useFaceCapture({\n videoRef: camera.videoRef,\n canvasRef,\n interval,\n duration,\n smileThreshold,\n mouthOpenThreshold,\n minFaceSize,\n maxFaceSize,\n smileCooldown,\n getFacingMode: () => camera.facingMode,\n });\n\n const initializeCamera = async () => {\n try {\n await camera.startCamera(initialFacingMode, (cameraName) => {\n const smartCameraWeb = document.querySelector('smart-camera-web');\n smartCameraWeb?.dispatchEvent(\n new CustomEvent('metadata.camera-name', {\n detail: { cameraName },\n }),\n );\n });\n } catch {\n // startCamera already set cameraError; surface UI and skip downstream init\n return;\n }\n await camera.checkAgentSupport();\n await faceCapture.initializeFaceLandmarker();\n\n setTimeout(() => {\n faceCapture.setupCanvas();\n faceCapture.startDetectionLoop();\n }, 500);\n };\n\n useEffect(() => {\n camera.registerCameraSwitchCallback(() => {\n try {\n faceCapture.resetFaceDetectionState();\n faceCapture.setupCanvas();\n faceCapture.stopDetectionLoop();\n faceCapture.startDetectionLoop();\n } catch (error) {\n console.error('Error during camera switch callback:', error);\n }\n });\n\n initializeCamera();\n\n return () => {\n faceCapture.stopDetectionLoop();\n camera.stopCamera();\n faceCapture.cleanup();\n };\n }, []);\n\n useEffect(() => {\n const navigation = navigationRef.current;\n\n if (navigation && showNavigation) {\n const handleNavigationBack = () => {\n faceCapture.handleCancel();\n };\n\n const handleNavigationClose = () => {\n faceCapture.handleClose();\n };\n\n navigation.addEventListener('navigation.back', handleNavigationBack);\n navigation.addEventListener('navigation.close', handleNavigationClose);\n\n return () => {\n navigation.removeEventListener('navigation.back', handleNavigationBack);\n navigation.removeEventListener(\n 'navigation.close',\n handleNavigationClose,\n );\n };\n }\n return undefined;\n }, [showNavigation]);\n\n useEffect(() => {\n if (faceCapture.hasFinishedCapture.value) {\n const smartCameraWeb = document.querySelector('smart-camera-web');\n smartCameraWeb?.dispatchEvent(\n new CustomEvent('metadata.selfie-capture-end'),\n );\n }\n }, [faceCapture.hasFinishedCapture.value]);\n\n return (\n <div className=\"smartselfie-capture\">\n {showNavigation && (\n // @ts-expect-error --- preact-custom-element doesn't have proper types for refs\n <smileid-navigation ref={navigationRef} theme-color={themeColor} />\n )}\n\n {camera.cameraError ? (\n <div className=\"camera-error\" role=\"alert\">\n <p>{camera.cameraError}</p>\n <button\n type=\"button\"\n className=\"btn-primary\"\n onClick={() => {\n initializeCamera();\n }}\n >\n {translate('camera.error.retry')}\n </button>\n </div>\n ) : (\n <>\n <CameraPreview\n videoRef={camera.videoRef}\n canvasRef={canvasRef}\n facingMode={camera.facingMode}\n progress={\n faceCapture.capturesTaken.value > 0\n ? faceCapture.capturesTaken.value /\n faceCapture.totalCaptures.value\n : 0\n }\n interval={interval}\n themeColor={themeColor}\n />\n\n <AlertDisplay alertTitle={faceCapture.alertTitle.value} />\n\n {!faceCapture.isCapturing.value &&\n !faceCapture.hasFinishedCapture.value && (\n <CaptureControls\n isCapturing={faceCapture.isCapturing.value}\n hasFinishedCapture={faceCapture.hasFinishedCapture.value}\n isReadyToCapture={faceCapture.isReadyToCapture.value}\n captureButtonFallbackEnabled={\n faceCapture.captureButtonFallbackEnabled.value\n }\n allowAgentMode={allowAgentMode}\n agentSupported={camera.agentSupported}\n showAgentModeForTests={showAgentModeForTests}\n facingMode={camera.facingMode}\n themeColor={themeColor}\n onStartCapture={faceCapture.startCapture}\n onSwitchCamera={camera.switchCamera}\n />\n )}\n </>\n )}\n\n {/* @ts-expect-error -- preact-custom-element doesn't have proper types for refs */}\n {!hideAttribution && <powered-by-smile-id />}\n\n <style>{`\n * {\n box-sizing: border-box;\n }\n\n button {\n padding: 10px 20px;\n background: ${themeColor || '#001096'};\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 16px;\n }\n\n button:disabled {\n background: #ccc;\n cursor: not-allowed;\n }\n\n button.btn-primary {\n background-color: ${themeColor || '#001096'};\n border-radius: 2.5rem;\n color: white;\n border: none;\n height: 3.125rem;\n display: inline-block;\n padding: 0.75rem 1.5rem;\n text-align: center;\n font-size: 1.125rem;\n font-weight: 600;\n font-family: \"DM Sans\", sans-serif;\n cursor: pointer;\n }\n\n button.btn-primary:hover {\n background-color: #2d2b2a;\n }\n\n button.btn-primary:disabled {\n background-color: #666;\n cursor: not-allowed;\n }\n\n .smartselfie-capture {\n padding: 1rem;\n font-family: sans-serif;\n }\n\n .camera-error {\n margin-top: 1.5rem;\n padding: 1rem 1.5rem;\n color: #b00020;\n text-align: center;\n font-size: 1rem;\n font-weight: 500;\n }\n `}</style>\n </div>\n );\n};\n\nif (!customElements.get('smartselfie-capture')) {\n register(\n SmartSelfieCapture,\n 'smartselfie-capture',\n [\n 'interval',\n 'duration',\n 'theme-color',\n 'show-navigation',\n 'allow-agent-mode',\n 'show-agent-mode-for-tests',\n 'hide-attribution',\n 'disable-image-tests',\n ],\n { shadow: true },\n );\n}\n\nexport default SmartSelfieCapture;\n","import { useRef, useState, useEffect } from 'preact/hooks';\n\nexport const useCamera = (initialFacingMode: CameraFacingMode = 'user') => {\n const videoRef = useRef<HTMLVideoElement>(null);\n const streamRef = useRef<MediaStream | null>(null);\n const [facingMode, setFacingMode] = useState(initialFacingMode);\n const [agentSupported, setAgentSupported] = useState(false);\n const onCameraSwitchCallbackRef = useRef<(() => void) | null>(null);\n const isSwitchingCameraRef = useRef(false);\n const timeoutIdsRef = useRef<Set<NodeJS.Timeout>>(new Set());\n\n const registerCameraSwitchCallback = (callback: () => void) => {\n onCameraSwitchCallbackRef.current = callback;\n };\n\n useEffect(() => {\n const video = videoRef.current;\n if (!video) return undefined;\n\n const handleVideoReady = () => {\n if (isSwitchingCameraRef.current && onCameraSwitchCallbackRef.current) {\n const timeoutId = setTimeout(() => {\n onCameraSwitchCallbackRef.current?.();\n isSwitchingCameraRef.current = false;\n timeoutIdsRef.current.delete(timeoutId);\n }, 100);\n timeoutIdsRef.current.add(timeoutId);\n }\n };\n\n video.addEventListener('loadedmetadata', handleVideoReady);\n\n return () => {\n video.removeEventListener('loadedmetadata', handleVideoReady);\n timeoutIdsRef.current.forEach((timeoutId) => clearTimeout(timeoutId));\n timeoutIdsRef.current.clear();\n };\n }, [videoRef.current?.src]);\n\n useEffect(\n () => () => {\n timeoutIdsRef.current.forEach((timeoutId) => clearTimeout(timeoutId));\n timeoutIdsRef.current.clear();\n },\n [],\n );\n\n const startCamera = async (\n targetFacingMode?: CameraFacingMode,\n callback?: (cameraName?: string) => void,\n ) => {\n try {\n if (streamRef.current) {\n streamRef.current.getTracks().forEach((track) => track.stop());\n streamRef.current = null;\n }\n\n if (videoRef.current) {\n videoRef.current.srcObject = null;\n }\n\n const stream = await navigator.mediaDevices.getUserMedia({\n video: { facingMode: targetFacingMode || facingMode },\n });\n streamRef.current = stream;\n\n const track = stream.getVideoTracks()[0];\n const settings = track.getSettings();\n const actualFacingMode = settings.facingMode as\n | CameraFacingMode\n | undefined;\n\n const requestedFacingMode = targetFacingMode || facingMode;\n\n if (actualFacingMode && actualFacingMode !== requestedFacingMode) {\n setFacingMode(actualFacingMode);\n } else if (actualFacingMode && actualFacingMode !== facingMode) {\n setFacingMode(actualFacingMode);\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices();\n const videoDevice = devices.find(\n (device) =>\n device.kind === 'videoinput' &&\n stream.getVideoTracks()[0].getSettings().deviceId === device.deviceId,\n );\n\n callback?.(videoDevice?.label);\n\n if (videoRef.current) {\n videoRef.current.srcObject = stream;\n await videoRef.current.play();\n // Video ready callback will be handled by useEffect\n }\n } catch (error) {\n console.error('Failed to start camera:', error);\n }\n };\n\n const switchCamera = async () => {\n const newFacingMode = facingMode === 'user' ? 'environment' : 'user';\n isSwitchingCameraRef.current = true;\n\n const previousFacingMode = facingMode;\n try {\n setFacingMode(newFacingMode);\n if (streamRef.current) {\n streamRef.current.getTracks().forEach((track) => track.stop());\n streamRef.current = null;\n }\n\n await startCamera(newFacingMode);\n } catch {\n setFacingMode(previousFacingMode);\n isSwitchingCameraRef.current = false;\n\n try {\n await startCamera(previousFacingMode);\n } catch (restoreError) {\n console.error('Failed to restore previous camera:', restoreError);\n }\n }\n };\n\n const detectBrowserEngine = () => {\n const userAgent = navigator.userAgent.toLowerCase();\n\n const isGecko =\n userAgent.includes('firefox') ||\n (userAgent.includes('gecko') &&\n !userAgent.includes('chrome') &&\n !userAgent.includes('edge'));\n\n const hasFirefoxFeatures =\n 'mozInnerScreenX' in window ||\n 'mozInputSource' in window ||\n 'mozPaintCount' in window ||\n typeof (window as any).InstallTrigger !== 'undefined';\n\n const supportsMozCSS =\n CSS.supports &&\n (CSS.supports('-moz-appearance', 'none') ||\n CSS.supports('-moz-user-select', 'none'));\n\n return {\n isGecko: isGecko || hasFirefoxFeatures || supportsMozCSS,\n isChromium:\n userAgent.includes('chrome') ||\n userAgent.includes('chromium') ||\n userAgent.includes('edge'),\n isWebKit: userAgent.includes('webkit') && !userAgent.includes('chrome'),\n };\n };\n\n const checkAgentSupport = async () => {\n try {\n const isMobile =\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent,\n ) ||\n (navigator.maxTouchPoints && navigator.maxTouchPoints > 1);\n\n // mobile devices generally support both cameras\n // also, ios crashes if we try to check for cameras\n if (isMobile) {\n setAgentSupported(true);\n return;\n }\n\n const { isGecko } = detectBrowserEngine();\n\n let userCameraId: string | null = null;\n let environmentCameraId: string | null = null;\n\n // test if we can get a user-facing camera\n try {\n const userStream = await navigator.mediaDevices.getUserMedia({\n video: { facingMode: 'user' },\n });\n userCameraId =\n userStream.getVideoTracks()[0].getSettings().deviceId ?? null;\n userStream.getTracks().forEach((track) => track.stop());\n } catch {\n // no user-facing camera available\n }\n\n // test if we can get an environment-facing camera\n try {\n const envStream = await navigator.mediaDevices.getUserMedia({\n video: { facingMode: 'environment' },\n });\n environmentCameraId =\n envStream.getVideoTracks()[0].getSettings().deviceId ?? null;\n envStream.getTracks().forEach((track) => track.stop());\n } catch {\n // no environment-facing camera available\n }\n\n const hasBothCameras =\n userCameraId &&\n environmentCameraId &&\n userCameraId !== environmentCameraId;\n\n if (!hasBothCameras) {\n setAgentSupported(false);\n return;\n }\n\n setAgentSupported(!isGecko);\n } catch {\n setAgentSupported(false);\n }\n };\n\n const stopCamera = () => {\n if (streamRef.current) {\n streamRef.current.getTracks().forEach((track) => track.stop());\n streamRef.current = null;\n }\n\n if (videoRef.current) {\n videoRef.current.srcObject = null;\n videoRef.current.load();\n }\n };\n\n return {\n videoRef,\n streamRef,\n facingMode,\n agentSupported,\n startCamera,\n switchCamera,\n checkAgentSupport,\n stopCamera,\n registerCameraSwitchCallback,\n };\n};\n","/**\n * Calculate the size of a face relative to the video frame.\n *\n * @param landmarks MediaPipe face-landmark result\n * @param options.rotationStable When true, also factors in the inter-eye\n * distance (landmarks 33 and 263) and returns the largest of the three\n * measures. Use this for active-liveness mode where the bounding-box\n * height shrinks as the user pitches their head up and width shrinks as\n * they yaw, both of which would otherwise trigger a false \"too far\".\n */\nexport const calculateFaceSize = (\n landmarks: any,\n options: { rotationStable?: boolean } = {},\n): number => {\n if (!landmarks || landmarks.length === 0) return 0;\n\n const face = landmarks[0];\n\n if (!face || face.length === 0) return 0;\n\n // Get bounding box of face landmarks\n let minX = 1;\n let maxX = 0;\n let minY = 1;\n let maxY = 0;\n\n face.forEach((landmark: any) => {\n if (\n landmark &&\n typeof landmark.x === 'number' &&\n typeof landmark.y === 'number'\n ) {\n minX = Math.min(minX, landmark.x);\n maxX = Math.max(maxX, landmark.x);\n minY = Math.min(minY, landmark.y);\n maxY = Math.max(maxY, landmark.y);\n }\n });\n\n // Calculate face size as percentage of video area\n const faceWidth = maxX - minX;\n const faceHeight = maxY - minY;\n let faceSize = Math.max(faceWidth, faceHeight);\n\n if (options.rotationStable) {\n const leftEye = face[33];\n const rightEye = face[263];\n if (leftEye && rightEye) {\n const dx = rightEye.x - leftEye.x;\n const dy = rightEye.y - leftEye.y;\n const eyeSpan = Math.sqrt(dx * dx + dy * dy);\n // Eye-corner span is ≈ 0.45 of face width on a frontal face. Scale up\n // so the value is comparable to the bbox-derived size and use the max\n // of the three measures — that way pitch (shrinks height) and yaw\n // (shrinks width) don't push the user into a \"too far\" state.\n faceSize = Math.max(faceSize, eyeSpan / 0.45);\n }\n }\n\n return faceSize;\n};\n\n/**\n * Check if a face is positioned within the oval bounds\n */\n/**\n * Check if a face is positioned within the oval bounds.\n *\n * @param landmarks MediaPipe face landmarks\n * @param videoAspectRatio width / height of the source video\n * @param options.centerOnly When true, only the face centre needs to fall\n * inside the oval. Use this for active-liveness mode, where head rotation\n * legitimately widens the bounding box and would otherwise fail the\n * four-corner check.\n */\nexport const isFaceInBounds = (\n landmarks: any,\n videoAspectRatio: number,\n options: { centerOnly?: boolean } = {},\n): boolean => {\n if (!landmarks || landmarks.length === 0) return false;\n\n const face = landmarks[0];\n\n let minX = 1;\n let maxX = 0;\n let minY = 1;\n let maxY = 0;\n face.forEach((landmark: any) => {\n minX = Math.min(minX, landmark.x);\n maxX = Math.max(maxX, landmark.x);\n minY = Math.min(minY, landmark.y);\n maxY = Math.max(maxY, landmark.y);\n });\n\n const ovalCenterX = 0.5;\n const ovalCenterY = 0.6;\n\n const isLandscape = videoAspectRatio > 1;\n let ovalWidth;\n let ovalHeight;\n if (isLandscape) {\n ovalWidth = 0.4;\n ovalHeight = 0.3;\n } else {\n ovalWidth = 0.35;\n ovalHeight = 0.5;\n }\n\n const faceCenterX = (minX + maxX) / 2;\n const faceCenterY = (minY + maxY) / 2;\n\n // In strict (Active Liveness) mode the bounding-box centre drifts as the\n // user yaws/pitches their head, which can falsely fail this check. Prefer\n // the nose tip (landmark 1) — it's anatomically stable. Keep the\n // tolerance tight so that obvious off-centre framing (face partly off the\n // oval edge) is still flagged.\n const noseTip = options.centerOnly ? face[1] : null;\n const centerX = noseTip ? noseTip.x : faceCenterX;\n const centerY = noseTip ? noseTip.y : faceCenterY;\n\n const centerTolerance = options.centerOnly ? 0.15 : 0.2;\n const centerOvalWidth = ovalWidth * (1 + centerTolerance);\n const centerOvalHeight = ovalHeight * (1 + centerTolerance);\n\n const checkPointInCenterOval = (x: number, y: number) => {\n const dx = (x - ovalCenterX) / centerOvalWidth;\n const dy = (y - ovalCenterY) / centerOvalHeight;\n return dx * dx + dy * dy <= 1;\n };\n const centerInBounds = checkPointInCenterOval(centerX, centerY);\n\n if (options.centerOnly) {\n // Strict mode: nose-tip must be centred AND the face bounding box must\n // not clip the oval edges. The four-corner check uses a slightly looser\n // tolerance than the non-strict case because head rotation legitimately\n // widens the bounding box, but we still want to reject framings where\n // a chunk of the face is outside the oval (e.g. ear or chin clipped).\n const strictBoundsToleranceX = 0.25;\n const strictBoundsToleranceY = 0.15;\n const strictOvalWidth = ovalWidth * (1 + strictBoundsToleranceX);\n const strictOvalHeight = ovalHeight * (1 + strictBoundsToleranceY);\n const checkPointInStrictOval = (x: number, y: number) => {\n const dx = (x - ovalCenterX) / strictOvalWidth;\n const dy = (y - ovalCenterY) / strictOvalHeight;\n return dx * dx + dy * dy <= 1;\n };\n const tl = checkPointInStrictOval(minX, minY);\n const tr = checkPointInStrictOval(maxX, minY);\n const bl = checkPointInStrictOval(minX, maxY);\n const br = checkPointInStrictOval(maxX, maxY);\n\n // Frame-edge clipping guard: if any side of the bounding box is hard\n // against the camera frame edge, part of the face is almost certainly\n // cut off (e.g. chin or forehead outside the visible video). The oval\n // check alone misses this because the oval extends most of the frame\n // height, so a face that fills the frame also fills the oval.\n const FRAME_EDGE_MARGIN = 0.03;\n const notClipped =\n minX > FRAME_EDGE_MARGIN &&\n minY > FRAME_EDGE_MARGIN &&\n maxX < 1 - FRAME_EDGE_MARGIN &&\n maxY < 1 - FRAME_EDGE_MARGIN;\n\n return centerInBounds && tl && tr && bl && br && notClipped;\n }\n\n const toleranceX = 0.2;\n const toleranceY = 0.1;\n const adjustedOvalWidth = ovalWidth * (1 + toleranceX);\n const adjustedOvalHeight = ovalHeight * (1 + toleranceY);\n\n const checkPointInExpandedOval = (x: number, y: number) => {\n const dx = (x - ovalCenterX) / adjustedOvalWidth;\n const dy = (y - ovalCenterY) / adjustedOvalHeight;\n return dx * dx + dy * dy <= 1;\n };\n\n const topLeft = checkPointInExpandedOval(minX, minY);\n const topRight = checkPointInExpandedOval(maxX, minY);\n const bottomLeft = checkPointInExpandedOval(minX, maxY);\n const bottomRight = checkPointInExpandedOval(maxX, maxY);\n\n return centerInBounds && topLeft && topRight && bottomLeft && bottomRight;\n};\n\n/**\n * Detect whether the visible egg-shaped oval mask is clipping any part of\n * the face. Uses the actual rendered DOM rects of the <video> element and\n * its wrapper, so the result is always aligned with what the user sees,\n * regardless of the camera's intrinsic resolution or how the video is\n * cropped/positioned by CSS.\n *\n * The visible oval is approximated as a centred ellipse matching the SVG\n * ellipse drawn by OvalProgress (cx=155.5/311, cy=209/418, rx=153.5/311,\n * ry=207/418 — i.e. essentially fills the wrapper, inset by the 2px stroke).\n *\n * @returns true if any landmark falls outside the visible oval (i.e. the\n * oval boundary is clipping the face), false otherwise.\n */\n// Visible-oval geometry in wrapper-normalised coordinates. Kept in one place\n// so the boolean check and the directional check below can't drift apart.\n// Matches OvalProgress.tsx (rx≈0.494, ry≈0.495). A small inward inset gives\n// us a hair of tolerance for landmark jitter so a face flush against the\n// border doesn't flicker between clipping/not.\nconst OVAL_CX = 0.5;\nconst OVAL_CY = 0.5;\nconst OVAL_HALF_W = 0.49;\nconst OVAL_HALF_H = 0.49;\n\ninterface ProjectedOval {\n videoRect: DOMRect;\n wrapperRect: DOMRect;\n /** Top-left of the centre-cropped square within wrapper-pixel coords. */\n cropLeftInWrapper: number;\n cropTopInWrapper: number;\n /** Side length of the centre-cropped square in wrapper-pixel coords. */\n cropSize: number;\n}\n\nconst projectOval = (videoEl: HTMLVideoElement): ProjectedOval | null => {\n const wrapper = videoEl.parentElement?.parentElement;\n if (!wrapper) return null;\n const videoRect = videoEl.getBoundingClientRect();\n const wrapperRect = wrapper.getBoundingClientRect();\n if (\n videoRect.width <= 0 ||\n videoRect.height <= 0 ||\n wrapperRect.width <= 0 ||\n wrapperRect.height <= 0\n ) {\n return null;\n }\n // Detection runs on a centre-cropped SQUARE of the source video (see\n // createCroppedVideoFrame). Landmark coords are normalised to that\n // square's [0,1]² space, NOT the full video — so we need the crop's\n // rendered position and size to project them onto the wrapper.\n const cropSize = Math.min(videoRect.width, videoRect.height);\n const cropLeftInWrapper =\n videoRect.left - wrapperRect.left + (videoRect.width - cropSize) / 2;\n const cropTopInWrapper =\n videoRect.top - wrapperRect.top + (videoRect.height - cropSize) / 2;\n return {\n videoRect,\n wrapperRect,\n cropLeftInWrapper,\n cropTopInWrapper,\n cropSize,\n };\n};\n\nexport const computeFaceClippingOval = (\n face: any,\n videoEl: HTMLVideoElement | null,\n): boolean => {\n if (!face || face.length === 0 || !videoEl) return false;\n const proj = projectOval(videoEl);\n if (!proj) return false;\n\n for (let i = 0; i < face.length; i += 1) {\n const lm = face[i];\n const renderedX = proj.cropLeftInWrapper + lm.x * proj.cropSize;\n const renderedY = proj.cropTopInWrapper + lm.y * proj.cropSize;\n const nx = renderedX / proj.wrapperRect.width;\n const ny = renderedY / proj.wrapperRect.height;\n const dx = (nx - OVAL_CX) / OVAL_HALF_W;\n const dy = (ny - OVAL_CY) / OVAL_HALF_H;\n if (dx * dx + dy * dy > 1) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * Like {@link computeFaceClippingOval} but returns which side of the visible\n * oval is being clipped (or null when the face is fully inside).\n *\n * Side is derived from the FACE BOUNDING-BOX CENTRE relative to the oval\n * centre — using the worst single landmark flips between left/right ear on\n * symmetric clips (the user sees the prompt ping-pong every frame). The\n * bbox centre moves slowly and points consistently in one direction.\n *\n * Mirroring: the preview is CSS-mirrored (scaleX(-1)). A face whose source\n * centre has x<0.5 appears on screen-RIGHT, so we report 'right' to nudge\n * the device in the correct direction in the mirrored preview.\n */\nexport const computeFaceClippingSide = (\n face: any,\n videoEl: HTMLVideoElement | null,\n): 'top' | 'right' | 'bottom' | 'left' | null => {\n if (!face || face.length === 0 || !videoEl) return null;\n const proj = projectOval(videoEl);\n if (!proj) return null;\n\n // First pass: are we actually clipping? Same test as\n // computeFaceClippingOval — keep it inline to avoid two DOM reads.\n let clipping = false;\n let minNx = Infinity;\n let maxNx = -Infinity;\n let minNy = Infinity;\n let maxNy = -Infinity;\n for (let i = 0; i < face.length; i += 1) {\n const lm = face[i];\n const renderedX = proj.cropLeftInWrapper + lm.x * proj.cropSize;\n const renderedY = proj.cropTopInWrapper + lm.y * proj.cropSize;\n const nx = renderedX / proj.wrapperRect.width;\n const ny = renderedY / proj.wrapperRect.height;\n if (nx < minNx) minNx = nx;\n if (nx > maxNx) maxNx = nx;\n if (ny < minNy) minNy = ny;\n if (ny > maxNy) maxNy = ny;\n if (!clipping) {\n const dx = (nx - OVAL_CX) / OVAL_HALF_W;\n const dy = (ny - OVAL_CY) / OVAL_HALF_H;\n if (dx * dx + dy * dy > 1) clipping = true;\n }\n }\n if (!clipping) return null;\n\n // Direction from bbox centre to oval centre, ellipse-normalised so the\n // dominant axis comparison is fair (the oval isn't quite a circle).\n const centreNx = (minNx + maxNx) / 2;\n const centreNy = (minNy + maxNy) / 2;\n const dx = (centreNx - OVAL_CX) / OVAL_HALF_W;\n const dy = (centreNy - OVAL_CY) / OVAL_HALF_H;\n\n // Hysteresis-friendly axis pick: require horizontal lead over vertical\n // by a clear margin before reporting left/right. Prevents axis flicker\n // when |dx| ≈ |dy| (e.g. face nudged into a corner).\n const AXIS_MARGIN = 1.2;\n const horizontalDominant = Math.abs(dx) > Math.abs(dy) * AXIS_MARGIN;\n const verticalDominant = Math.abs(dy) > Math.abs(dx) * AXIS_MARGIN;\n\n if (horizontalDominant) {\n // Mirror: source-left (dx<0) appears on screen-right.\n return dx < 0 ? 'right' : 'left';\n }\n if (verticalDominant) {\n return dy < 0 ? 'top' : 'bottom';\n }\n // Mixed corner clip — pick by raw magnitude as a tiebreak.\n if (Math.abs(dx) >= Math.abs(dy)) {\n return dx < 0 ? 'right' : 'left';\n }\n return dy < 0 ? 'top' : 'bottom';\n};\n\n/**\n * Calculate mouth opening using face landmarks\n */\nexport const calculateMouthOpening = (landmarks: any): number => {\n if (!landmarks || landmarks.length === 0) return 0;\n\n const face = landmarks[0];\n if (!face || face.length === 0) return 0;\n\n // MediaPipe face landmark indices for mouth\n const upperLipCenter = face[13]; // Upper lip center\n const lowerLipCenter = face[14]; // Lower lip center\n\n if (!upperLipCenter || !lowerLipCenter) return 0;\n\n const mouthHeight = Math.abs(lowerLipCenter.y - upperLipCenter.y);\n\n const faceTop = Math.min(...face.map((p: any) => p.y));\n const faceBottom = Math.max(...face.map((p: any) => p.y));\n const faceHeight = faceBottom - faceTop;\n\n return faceHeight > 0 ? mouthHeight / faceHeight : 0;\n};\n\n/**\n * Discrete head-pose direction used by the active liveness state machine.\n */\nexport type HeadPoseDirection = 'left' | 'right' | 'up';\n\nexport interface HeadPoseAngles {\n /** Left/right rotation in degrees. Negative = subject's left, positive = subject's right. */\n yaw: number;\n /**\n * Vertical tilt as a signed ratio (×100 so it reads like degrees).\n * Positive = looking up, negative = looking down, ~0 = neutral.\n *\n * Derived from the nose tip's vertical position between the forehead and\n * chin landmarks, which is a stable 2D measure independent of z noise.\n */\n pitch: number;\n /** Side-to-side tilt in degrees. */\n roll: number;\n}\n\n/**\n * Estimate head pose (yaw/pitch/roll) from MediaPipe face landmarks.\n *\n * Uses a small set of stable landmarks rather than full PnP solving so it\n * stays cheap enough to run every detection frame on the main thread.\n *\n * Landmark indices (MediaPipe FaceLandmarker, 478-point model):\n * 1 - nose tip\n * 10 - forehead (top of face oval)\n * 33 - left eye outer corner\n * 152 - chin (bottom of face oval)\n * 263 - right eye outer corner\n * 207 - left cheek\n * 426 - right cheek\n */\nexport const calculateHeadPose = (landmarks: any): HeadPoseAngles | null => {\n if (!landmarks || landmarks.length === 0) return null;\n const face = landmarks[0];\n if (!face || face.length < 427) return null;\n\n const noseTip = face[1];\n const leftEye = face[33];\n const rightEye = face[263];\n const leftCheek = face[207];\n const rightCheek = face[426];\n const forehead = face[10];\n const chin = face[152];\n\n if (\n !noseTip ||\n !leftEye ||\n !rightEye ||\n !leftCheek ||\n !rightCheek ||\n !forehead ||\n !chin\n ) {\n return null;\n }\n\n const toDeg = (rad: number) => (rad * 180) / Math.PI;\n const clamp = (v: number, lo: number, hi: number) =>\n Math.max(lo, Math.min(hi, v));\n\n // Yaw: signed cheek-depth component projected onto the physical 3D\n // distance between the two cheek landmarks. asin is symmetric and has\n // no singularity, unlike atan2(dz, dx) which inflates and jitters when\n // the inter-cheek x-gap collapses on a left turn. The 3D cheek span is\n // approximately constant across head rotation (the cheeks don't move\n // relative to each other on the skull), so dz / cheekSpan3D is a clean\n // sin(yaw) signal. Positive = turning the head's right (subject's\n // right cheek goes back), negative = turning left.\n const dx = rightCheek.x - leftCheek.x;\n const dy = rightCheek.y - leftCheek.y;\n const dz = rightCheek.z - leftCheek.z;\n const cheekSpan3D = Math.sqrt(dx * dx + dy * dy + dz * dz);\n const yaw =\n cheekSpan3D > 0 ? toDeg(Math.asin(clamp(dz / cheekSpan3D, -1, 1))) : 0;\n\n // Pitch: where the nose sits vertically between the forehead (top) and chin\n // (bottom). Neutral ≈ 0.5; tilting up pushes the nose toward the forehead\n // (ratio < 0.5) so we negate to make \"up\" positive. Multiplied by 100 to\n // keep numbers in a similar order of magnitude as yaw/roll degrees.\n const faceHeight = chin.y - forehead.y;\n let pitch = 0;\n if (faceHeight > 0) {\n const ratio = (noseTip.y - forehead.y) / faceHeight;\n pitch = (0.5 - ratio) * 100;\n }\n\n // Roll: in-plane tilt between the two eye corners.\n const roll = toDeg(\n Math.atan2(rightEye.y - leftEye.y, rightEye.x - leftEye.x),\n );\n\n return { yaw, pitch, roll };\n};\n\n/**\n * Classify head-pose angles into a discrete required-pose direction.\n *\n * Strict-mode prompts the user for one of: turn left, turn right, tilt slightly\n * up. Yaw thresholds favour deliberate rotation (~25°); pitch threshold (~6)\n * corresponds to roughly the nose moving 6% of face-height toward the\n * forehead, which is a noticeable but comfortable upward tilt.\n *\n * The \"up\" classification only fires when yaw is small, so a sideways turn\n * doesn't accidentally satisfy the up prompt.\n */\nexport const classifyHeadPose = (\n pose: HeadPoseAngles | null,\n thresholds: { yawSide?: number; yawNeutral?: number; pitchUp?: number } = {},\n): HeadPoseDirection | null => {\n if (!pose) return null;\n\n // Yaw is now an asin-based signed sin(yaw) value (degrees), so it's\n // symmetric around 0 and bounded to ±90°. In theory one threshold would\n // work for both directions, but MediaPipe landmarks 207 / 426 aren't\n // true mirror counterparts — dz/cheekSpan grows faster for one rotation\n // direction than the other, so the same physical turn produces\n // unequal yaw magnitudes. Compensate with a slightly lower threshold\n // on the positive (screen-left) side so both prompts feel like the\n // same amount of head movement.\n const yawSide = thresholds.yawSide ?? 18;\n const yawSidePositive = thresholds.yawSide ?? 13;\n const yawNeutral = thresholds.yawNeutral ?? 12;\n // Pitch threshold corresponds to ~7% nose shift toward the forehead —\n // a deliberate tilt rather than the resting-posture drift produced at\n // smaller values.\n const pitchUp = thresholds.pitchUp ?? 7;\n\n if (pose.yaw <= -yawSide) return 'right';\n if (pose.yaw >= yawSidePositive) return 'left';\n if (Math.abs(pose.yaw) <= yawNeutral && pose.pitch >= pitchUp) return 'up';\n return null;\n};\n\n/*\n * With only 3 poses there are 6 possible permutations, so adjacent sessions\n * will repeat orders fairly often by chance — that's expected, not a bug.\n * Swap indices are drawn from `crypto.getRandomValues` so the sequence is\n * unpredictable to an attacker who has observed previous sessions.\n */\nconst randomInt = (maxExclusive: number): number => {\n if (maxExclusive <= 1) return 0;\n // Rejection-sample to avoid modulo bias: discard draws in the unused\n // tail of the uint32 range so the remaining values divide evenly by\n // `maxExclusive`.\n const limit = Math.floor(0x100000000 / maxExclusive) * maxExclusive;\n const buf = new Uint32Array(1);\n do {\n crypto.getRandomValues(buf);\n } while (buf[0] >= limit);\n return buf[0] % maxExclusive;\n};\n\n/**\n * Build the pose sequence for an active-liveness session.\n *\n * Randomised order across {left, right, up} to mirror the mobile SDKs and\n * make the active-liveness challenge harder to pre-record. Any leftover\n * frames in the capture window are taken silently while the user is neutral\n * before the first pose prompt — see `useFaceCapture` for that logic.\n */\nexport const buildRandomPoseSequence = (): HeadPoseDirection[] => {\n const poses: HeadPoseDirection[] = ['left', 'right', 'up'];\n // Fisher–Yates shuffle.\n for (let i = poses.length - 1; i > 0; i -= 1) {\n const j = randomInt(i + 1);\n [poses[i], poses[j]] = [poses[j], poses[i]];\n }\n return poses;\n};\n","/**\n * Lightweight image quality checks used by the Enhanced SmartSelfie active\n * liveness flow. Both routines work on small ROIs so they can run inside the\n * face detection loop without noticeable cost.\n */\n\nconst SAMPLE_STEP = 4; // Sample every 4th pixel — keeps work to ~6% of full ROI.\n\n/**\n * Module-scoped scratch canvases reused across frames. Allocating a fresh\n * `<canvas>` per call during the capture loop (~10 fps × 2 routines) creates\n * meaningful GC churn and re-enters the `willReadFrequently` software path on\n * every frame. We keep one canvas per routine and only resize when the\n * computed downsample target changes — assigning `width`/`height` also clears\n * the bitmap, so no manual clear is required.\n */\nlet luminanceCanvas: HTMLCanvasElement | null = null;\nlet luminanceCtx: CanvasRenderingContext2D | null = null;\nlet blurCanvas: HTMLCanvasElement | null = null;\nlet blurCtx: CanvasRenderingContext2D | null = null;\n\nconst getScratchContext = (\n which: 'luminance' | 'blur',\n dw: number,\n dh: number,\n): CanvasRenderingContext2D | null => {\n let canvas = which === 'luminance' ? luminanceCanvas : blurCanvas;\n let ctx = which === 'luminance' ? luminanceCtx : blurCtx;\n\n if (!canvas) {\n canvas = document.createElement('canvas');\n ctx = canvas.getContext('2d', { willReadFrequently: true });\n if (which === 'luminance') {\n luminanceCanvas = canvas;\n luminanceCtx = ctx;\n } else {\n blurCanvas = canvas;\n blurCtx = ctx;\n }\n }\n if (!ctx) return null;\n\n if (canvas.width !== dw) canvas.width = dw;\n if (canvas.height !== dh) canvas.height = dh;\n return ctx;\n};\n\n/**\n * Average BT.601 luma (0–255) over a region of the video frame.\n *\n * @param video live video element\n * @param region optional normalised ROI (defaults to centre 60%)\n */\nexport const calculateLuminance = (\n video: HTMLVideoElement,\n region?: { x: number; y: number; width: number; height: number },\n): number => {\n if (!video || video.videoWidth === 0 || video.videoHeight === 0) return 0;\n\n const w = video.videoWidth;\n const h = video.videoHeight;\n const r = region ?? { x: 0.2, y: 0.2, width: 0.6, height: 0.6 };\n\n const sx = Math.max(0, Math.floor(r.x * w));\n const sy = Math.max(0, Math.floor(r.y * h));\n const sw = Math.min(w - sx, Math.floor(r.width * w));\n const sh = Math.min(h - sy, Math.floor(r.height * h));\n if (sw <= 0 || sh <= 0) return 0;\n\n // Downsample heavily — 64x64 max — to keep this near-free.\n const targetSize = 64;\n const scale = Math.min(1, targetSize / Math.max(sw, sh));\n const dw = Math.max(1, Math.round(sw * scale));\n const dh = Math.max(1, Math.round(sh * scale));\n\n const ctx = getScratchContext('luminance', dw, dh);\n if (!ctx) return 0;\n\n ctx.drawImage(video, sx, sy, sw, sh, 0, 0, dw, dh);\n const { data } = ctx.getImageData(0, 0, dw, dh);\n\n let total = 0;\n let count = 0;\n for (let i = 0; i < data.length; i += 4 * SAMPLE_STEP) {\n // BT.601 luma — same approximation OpenCV uses for cvtColor RGB→GRAY.\n total += 0.299 * data[i] + 0.587 * data[i + 1] + 0.114 * data[i + 2];\n count += 1;\n }\n return count === 0 ? 0 : total / count;\n};\n\n/**\n * Estimate sharpness as the variance of a 3x3 Laplacian filter applied to the\n * grayscaled ROI. Higher = sharper. Empirically values < ~30 indicate\n * meaningful motion blur for a downsampled webcam frame.\n */\nexport const calculateBlurScore = (\n video: HTMLVideoElement,\n region?: { x: number; y: number; width: number; height: number },\n): number => {\n if (!video || video.videoWidth === 0 || video.videoHeight === 0) return 0;\n\n const w = video.videoWidth;\n const h = video.videoHeight;\n const r = region ?? { x: 0.25, y: 0.25, width: 0.5, height: 0.5 };\n\n const sx = Math.max(0, Math.floor(r.x * w));\n const sy = Math.max(0, Math.floor(r.y * h));\n const sw = Math.min(w - sx, Math.floor(r.width * w));\n const sh = Math.min(h - sy, Math.floor(r.height * h));\n if (sw <= 0 || sh <= 0) return 0;\n\n const targetSize = 96;\n const scale = Math.min(1, targetSize / Math.max(sw, sh));\n const dw = Math.max(3, Math.round(sw * scale));\n const dh = Math.max(3, Math.round(sh * scale));\n\n const ctx = getScratchContext('blur', dw, dh);\n if (!ctx) return 0;\n\n ctx.drawImage(video, sx, sy, sw, sh, 0, 0, dw, dh);\n const { data } = ctx.getImageData(0, 0, dw, dh);\n\n // Convert to grayscale once.\n const gray = new Float32Array(dw * dh);\n for (let i = 0; i < gray.length; i += 1) {\n const o = i * 4;\n gray[i] = 0.299 * data[o] + 0.587 * data[o + 1] + 0.114 * data[o + 2];\n }\n\n // Variance of 3x3 Laplacian (skip 1-px border).\n let sum = 0;\n let sumSq = 0;\n let n = 0;\n for (let y = 1; y < dh - 1; y += 1) {\n for (let x = 1; x < dw - 1; x += 1) {\n const i = y * dw + x;\n const lap =\n 4 * gray[i] - gray[i - 1] - gray[i + 1] - gray[i - dw] - gray[i + dw];\n sum += lap;\n sumSq += lap * lap;\n n += 1;\n }\n }\n if (n === 0) return 0;\n const mean = sum / n;\n return sumSq / n - mean * mean;\n};\n\nexport const DEFAULT_LUMINANCE_MIN = 85; // average luma below this = \"too dark\"\nexport const DEFAULT_BLUR_MIN = 80; // Laplacian variance below this = \"too blurry\"\n","/**\n * Create a cropped square canvas from video for face detection\n */\nimport { DrawingUtils, FaceLandmarker } from '@mediapipe/tasks-vision';\n\nexport const createCroppedVideoFrame = (\n videoElement: HTMLVideoElement,\n): HTMLCanvasElement | null => {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n if (!ctx) return null;\n\n const sourceWidth = videoElement.videoWidth;\n const sourceHeight = videoElement.videoHeight;\n\n const squareSize = Math.min(sourceWidth, sourceHeight);\n const cropX = (sourceWidth - squareSize) / 2;\n const cropY = (sourceHeight - squareSize) / 2;\n\n canvas.width = squareSize;\n canvas.height = squareSize;\n\n ctx.drawImage(\n videoElement,\n cropX,\n cropY,\n squareSize,\n squareSize,\n 0,\n 0,\n squareSize,\n squareSize,\n );\n\n return canvas;\n};\n\n/**\n * Draw face mesh overlay on canvas\n */\nexport const drawFaceMesh = (\n canvas: HTMLCanvasElement,\n landmarks: any[],\n capturesTaken: number,\n smileCheckpoint: number,\n useStrictMode = false,\n): void => {\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n const canvasWidth = canvas.width;\n const canvasHeight = canvas.height;\n\n ctx.clearRect(0, 0, canvasWidth, canvasHeight);\n\n // In strict (Active Liveness) mode we render a Lottie overlay instead of the\n // landmark/connector mesh, so leave the canvas cleared and bail.\n if (useStrictMode) return;\n\n const drawingUtils = new DrawingUtils(ctx);\n\n landmarks.forEach((landmark) => {\n if (!landmark || landmark.length === 0) return;\n\n const outlineColor = 'rgba(162, 155, 254,0.4)';\n const lineWidth = 2;\n ctx.strokeStyle = 'rgba(255, 255, 255, 0.6)';\n ctx.lineWidth = lineWidth;\n ctx.lineCap = 'round';\n ctx.lineJoin = 'round';\n\n drawingUtils.drawLandmarks(landmark, {\n color: 'rgba(9, 132, 227,0.7)',\n lineWidth: 0.5,\n radius: 0.5,\n });\n drawingUtils.drawConnectors(\n landmark,\n FaceLandmarker.FACE_LANDMARKS_FACE_OVAL,\n {\n color: outlineColor,\n lineWidth,\n },\n );\n\n const isInSmileZone = capturesTaken > 0 && capturesTaken >= smileCheckpoint;\n if (isInSmileZone) {\n drawingUtils.drawConnectors(\n landmark,\n FaceLandmarker.FACE_LANDMARKS_LIPS,\n {\n color: outlineColor,\n lineWidth,\n },\n );\n }\n });\n};\n\n/**\n * Clear canvas completely\n */\nexport const clearCanvas = (canvas: HTMLCanvasElement): void => {\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n }\n};\n","import { JPEG_QUALITY } from '../../../../../domain/constants/src/Constants';\n\nexport const captureImageFromVideo = (\n videoElement: HTMLVideoElement,\n isReference: boolean = false,\n): string | null => {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n if (!ctx) return null;\n\n const isPortrait = videoElement.videoHeight > videoElement.videoWidth;\n\n if (isReference) {\n if (isPortrait) {\n canvas.width = 480;\n canvas.height = Math.max(\n 640,\n (canvas.width * videoElement.videoHeight) / videoElement.videoWidth,\n );\n } else {\n canvas.width = 640;\n canvas.height = Math.max(\n 480,\n (canvas.width * videoElement.videoHeight) / videoElement.videoWidth,\n );\n }\n } else if (isPortrait) {\n canvas.width = 240;\n canvas.height = Math.max(\n 320,\n (canvas.width * videoElement.videoHeight) / videoElement.videoWidth,\n );\n } else {\n canvas.width = 320;\n canvas.height = Math.max(\n 240,\n (canvas.width * videoElement.videoHeight) / videoElement.videoWidth,\n );\n }\n\n // capture more of the user's head and avoid clipping\n const zoomOutFactor = 1;\n const sourceWidth = videoElement.videoWidth * zoomOutFactor;\n const sourceHeight = videoElement.videoHeight * zoomOutFactor;\n\n // center the zoomed out area\n const offsetX = (sourceWidth - videoElement.videoWidth) / 2;\n const offsetY = (sourceHeight - videoElement.videoHeight) / 2;\n\n // vertical offset to shift up and capture full head\n const verticalOffset = 0;\n\n ctx.drawImage(\n videoElement,\n -offsetX,\n -offsetY - verticalOffset,\n sourceWidth,\n sourceHeight,\n 0,\n 0,\n canvas.width,\n canvas.height,\n );\n\n return canvas.toDataURL('image/jpeg', JPEG_QUALITY);\n};\n","/**\n * The type of image submitted in the job request\n * @readonly\n * @enum {number}\n */\nexport const ImageType = {\n /** ID_CARD_BACK_IMAGE_BASE64 Base64 encoded back of ID card image (.jpg or .png) */\n ID_CARD_BACK_IMAGE_BASE64: 7,\n /** ID_CARD_BACK_IMAGE_FILE Back of ID card image in .png or .jpg file format */\n ID_CARD_BACK_IMAGE_FILE: 5,\n /** ID_CARD_IMAGE_BASE64 Base64 encoded ID card image (.png or .jpg) */\n ID_CARD_IMAGE_BASE64: 3,\n /** ID_CARD_IMAGE_FILE ID card image in .png or .jpg file format */\n ID_CARD_IMAGE_FILE: 1,\n /** LIVENESS_IMAGE_BASE64 Base64 encoded liveness image (.jpg or .png) */\n LIVENESS_IMAGE_BASE64: 6,\n /** LIVENESS_IMAGE_FILE Liveness image in .png or .jpg file format */\n LIVENESS_IMAGE_FILE: 4,\n /** SELFIE_IMAGE_BASE64 Base64 encoded selfie image (.png or .jpg) */\n SELFIE_IMAGE_BASE64: 2,\n /** SELFIE_IMAGE_FILE Selfie image in .png or .jpg file format */\n SELFIE_IMAGE_FILE: 0,\n};\n","import { t } from '../../../../../domain/localisation';\n\nexport const MESSAGES = {\n 'no-face': () => t('selfie.smart.alert.noFace'),\n 'out-of-bounds': () => t('selfie.smart.alert.outOfBounds'),\n 'too-close': () => t('selfie.smart.alert.tooClose'),\n 'too-far': () => t('selfie.smart.alert.tooFar'),\n 'neutral-expression': () => t('selfie.smart.alert.neutralExpression'),\n 'smile-required': () => t('selfie.smart.alert.smileRequired'),\n 'open-mouth-smile': () => t('selfie.smart.alert.openMouthSmile'),\n 'too-dark': () => t('selfie.smart.alert.tooDark'),\n 'too-blurry': () => t('selfie.smart.alert.tooBlurry'),\n 'face-not-centered': () => t('selfie.smart.alert.faceNotCentered'),\n 'turn-head-left': () => t('selfie.smart.alert.turnHeadLeft'),\n 'turn-head-right': () => t('selfie.smart.alert.turnHeadRight'),\n 'tilt-head-up': () => t('selfie.smart.alert.tiltHeadUp'),\n initializing: () => t('selfie.smart.alert.initializing'),\n};\n\nexport type MessageKey = keyof typeof MESSAGES;\n","import { FaceLandmarker, FilesetResolver } from '@mediapipe/tasks-vision';\n\nconst EXCLUDED_GPUS = [\n 'adreno-830',\n 'adreno-8xx',\n 'adreno-9xx',\n 'adreno-840',\n 'adreno-810',\n];\n\nconst normalizeGpuText = (value: string): string =>\n value\n .toLowerCase()\n .replace(/\\(tm\\)|\\btm\\b/g, '')\n .replace(/[^a-z0-9]/g, '');\n\nconst matchesExcludedGpu = (value: string): boolean => {\n const normalizedValue = normalizeGpuText(value);\n\n return EXCLUDED_GPUS.some((gpuPattern) => {\n const normalizedPattern = normalizeGpuText(gpuPattern);\n\n if (normalizedPattern.endsWith('xx')) {\n const familyPrefix = normalizedPattern.slice(0, -2);\n return new RegExp(`${familyPrefix}\\\\d{2}`).test(normalizedValue);\n }\n\n return normalizedValue.includes(normalizedPattern);\n });\n};\n\n/**\n * @description Gets the GPU renderer string using WebGL debug info extension.\n * @returns {string | null} The GPU renderer string or null if unavailable.\n */\nconst getGpuRenderer = (): string | null => {\n try {\n const canvas = document.createElement('canvas');\n const gl =\n canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n if (!gl || !(gl instanceof WebGLRenderingContext)) return null;\n\n const ext = gl.getExtension('WEBGL_debug_renderer_info');\n if (!ext) return null;\n\n return gl.getParameter(ext.UNMASKED_RENDERER_WEBGL) as string | null;\n } catch {\n return null;\n }\n};\n\n/**\n * @description Checks if the GPU renderer matches any excluded GPU.\n * @param {string | null} [renderer] Optional GPU renderer string to use. If not provided, it will be fetched via WebGL.\n * @returns {boolean} True if the GPU is excluded.\n */\nconst isExcludedGpuFromWebGL = (renderer?: string | null): boolean => {\n const rendererString = (renderer ?? getGpuRenderer())?.toLowerCase() ?? '';\n if (!rendererString) return false;\n\n return matchesExcludedGpu(rendererString);\n};\n\ndeclare global {\n interface Window {\n __smileIdentityMediapipe?: {\n instance: FaceLandmarker | null;\n loading: Promise<FaceLandmarker> | null;\n loaded: boolean;\n };\n }\n}\n\n/**\n * @description Reads system architecture hints from User-Agent Client Hints.\n * @returns {Promise<string | null>} Lower-cased hint string or null when hints are unavailable.\n */\nconst getSystemArchitectureHints = async (): Promise<string | null> => {\n if (typeof navigator === 'undefined' || !(navigator as any).userAgentData) {\n return null;\n }\n\n try {\n const hints = await (navigator as any).userAgentData.getHighEntropyValues([\n 'architecture',\n 'model',\n 'platform',\n 'platformVersion',\n 'fullVersionList',\n ]);\n\n return JSON.stringify(hints).toLowerCase();\n } catch (error) {\n console.warn('UA-CH architecture hints fetch failed.', error);\n return null;\n }\n};\n\n/**\n * @description Determines the MediaPipe delegate based on WebGL renderer info and UA-CH hints.\n * Uses WebGL renderer as primary detection, UA-CH hints as secondary.\n * @returns {Promise<'CPU' | 'GPU'>} CPU when excluded GPU is detected; otherwise GPU.\n */\nconst getDelegateFromGpuDetection = async (): Promise<'CPU' | 'GPU'> => {\n const renderer = getGpuRenderer();\n const hasWebGlRendererInfo = !!renderer;\n\n // Primary check: WebGL renderer info (most reliable for GPU detection)\n if (isExcludedGpuFromWebGL(renderer)) {\n console.info(`[SmileID] Excluded GPU via WebGL: ${renderer}. Using CPU.`);\n return 'CPU';\n }\n\n // Secondary check: UA-CH hints (may contain GPU info in some browsers)\n const hintString = await getSystemArchitectureHints();\n const hasUaHints = !!hintString;\n\n if (hintString) {\n const hasExcludedGpuInHints = matchesExcludedGpu(hintString);\n\n if (hasExcludedGpuInHints) {\n console.info(`[SmileID] Excluded GPU via UA-CH hints. Using CPU.`);\n return 'CPU';\n }\n }\n\n if (!hasWebGlRendererInfo && !hasUaHints) {\n console.info(\n '[SmileID] No WebGL renderer or UA-CH hints available. Using CPU.',\n );\n return 'CPU';\n }\n\n // Default to GPU when no exclusion is detected\n console.info(\n `[SmileID] No excluded GPU detected. WebGL renderer: ${renderer ?? 'unavailable'}. Using GPU.`,\n );\n return 'GPU';\n};\n\n// this was added because devices (mostly older) that do not support FP16 will fail to load the model.\nconst hasFP16Support = () => {\n const canvas = document.createElement('canvas');\n const gl =\n canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n if (!gl) return false;\n\n const hasHalfFloatExt = (gl as any).getExtension('OES_texture_half_float');\n const hasHalfFloatLinear = (gl as any).getExtension(\n 'OES_texture_half_float_linear',\n );\n const hasColorBufferHalfFloat = (gl as any).getExtension(\n 'EXT_color_buffer_half_float',\n );\n\n return !!(hasHalfFloatExt && hasColorBufferHalfFloat && hasHalfFloatLinear);\n};\n\nexport const getMediapipeInstance = async (): Promise<FaceLandmarker> => {\n if (!window.__smileIdentityMediapipe) {\n window.__smileIdentityMediapipe = {\n instance: null,\n loading: null,\n loaded: false,\n };\n }\n\n const mediapipeGlobal = window.__smileIdentityMediapipe;\n\n if (mediapipeGlobal.loaded && mediapipeGlobal.instance) {\n return mediapipeGlobal.instance;\n }\n\n if (mediapipeGlobal.loading) {\n return mediapipeGlobal.loading;\n }\n\n mediapipeGlobal.loading = (async () => {\n try {\n const vision = await FilesetResolver.forVisionTasks(\n 'https://web-models.smileidentity.com/mediapipe-tasks-vision-wasm',\n );\n\n const gpuDelegate = await getDelegateFromGpuDetection();\n const delegate =\n gpuDelegate === 'CPU' || !hasFP16Support() ? 'CPU' : 'GPU';\n\n const faceLandmarker = await FaceLandmarker.createFromOptions(vision, {\n baseOptions: {\n modelAssetPath: `https://web-models.smileidentity.com/face_landmarker/face_landmarker.task`,\n delegate,\n },\n outputFaceBlendshapes: true,\n runningMode: 'VIDEO',\n numFaces: 2,\n });\n\n mediapipeGlobal.instance = faceLandmarker;\n mediapipeGlobal.loaded = true;\n mediapipeGlobal.loading = null;\n\n return faceLandmarker;\n } catch (error) {\n mediapipeGlobal.loading = null;\n throw error;\n }\n })();\n\n return mediapipeGlobal.loading;\n};\n\nexport const __testUtils = {\n matchesExcludedGpu,\n getDelegateFromGpuDetection,\n};\n","import { useRef } from 'preact/hooks';\nimport { useSignal, useComputed } from '@preact/signals';\nimport type { RefObject } from 'preact';\nimport { FaceLandmarker } from '@mediapipe/tasks-vision';\nimport throttle from 'lodash/throttle';\nimport {\n calculateFaceSize,\n isFaceInBounds,\n computeFaceClippingOval,\n computeFaceClippingSide,\n calculateMouthOpening,\n calculateHeadPose,\n classifyHeadPose,\n buildRandomPoseSequence,\n type HeadPoseDirection,\n} from '../utils/faceDetection';\nimport {\n calculateLuminance,\n calculateBlurScore,\n DEFAULT_LUMINANCE_MIN,\n DEFAULT_BLUR_MIN,\n} from '../utils/imageQuality';\nimport {\n createCroppedVideoFrame,\n drawFaceMesh,\n clearCanvas,\n} from '../utils/canvas';\nimport { captureImageFromVideo } from '../utils/imageCapture';\nimport { ImageType } from '../constants';\nimport { MESSAGES, type MessageKey } from '../utils/alertMessages';\nimport { getMediapipeInstance } from '../utils/mediapipeManager';\nimport { t } from '../../../../../domain/localisation';\nimport packageJson from '../../../../../../package.json';\n\nconst COMPONENTS_VERSION = packageJson.version;\n\ninterface UseFaceCaptureProps {\n videoRef: RefObject<HTMLVideoElement>;\n canvasRef: RefObject<HTMLCanvasElement>;\n interval: number;\n duration: number;\n smileThreshold: number;\n mouthOpenThreshold: number;\n minFaceSize: number;\n maxFaceSize: number;\n smileCooldown: number;\n getFacingMode: () => CameraFacingMode;\n /**\n * Enhanced SmartSelfie / Active Liveness mode. When enabled, the smile-based\n * capture flow is replaced with a randomised head-pose sequence and stricter\n * frame-quality checks (lighting/blur/centering).\n */\n useStrictMode?: boolean;\n /**\n * Optional callback invoked when capture completes. When provided, the hook\n * will NOT broadcast the legacy `selfie-capture.publish` window event — the\n * caller takes full ownership of the payload (e.g. to show its own review\n * screen and re-emit the event only on user confirmation).\n */\n onCaptureComplete?: (detail: {\n images: { image: string; image_type_id: number }[];\n referenceImage: string;\n previewImage: string;\n facingMode: CameraFacingMode;\n forceFailureReason?: string;\n meta: { libraryVersion: string };\n }) => void;\n}\n\nexport const useFaceCapture = ({\n videoRef,\n canvasRef,\n interval,\n duration,\n smileThreshold,\n mouthOpenThreshold,\n minFaceSize,\n maxFaceSize,\n smileCooldown,\n getFacingMode,\n useStrictMode = false,\n onCaptureComplete,\n}: UseFaceCaptureProps) => {\n const faceLandmarkerRef = useRef<FaceLandmarker | null>(null);\n const animationFrameRef = useRef<number | null>(null);\n const captureTimerRef = useRef<NodeJS.Timeout | null>(null);\n const resumeCaptureRef = useRef<(() => void) | null>(null);\n const fallbackTimerRef = useRef<NodeJS.Timeout | null>(null);\n // Ring buffer of the last few raw pose classifications. The capture gate\n // and the displayed pose flip only when a direction wins ≥2 of the last\n // 3 ticks, which kills single-frame noise from atan2 jitter without\n // adding any perceptible lag.\n const poseHistoryRef = useRef<(HeadPoseDirection | null)[]>([]);\n // Timestamp of the most recent tick where the smoothed pose matched the\n // currently-required pose. Used as a short latch so a capture-interval\n // tick that fires moments after the user nails the pose still counts.\n const lastPoseMatchAtRef = useRef<number>(0);\n // How long after a confirmed pose match the capture tick will still\n // accept the pose as held. Sized to comfortably span one capture\n // interval (~330ms at the default rate) plus a little headroom.\n const POSE_MATCH_LATCH_MS = 500;\n\n const faceDetected = useSignal(false);\n const faceInBounds = useSignal(false);\n // True when any landmark falls outside the visible egg-shaped clip mask.\n // Computed from runtime DOM rects so it always matches what the user sees,\n // independent of the camera's intrinsic resolution. Only used as a gating\n // edge case when idle — during the active-liveness pose phase head turns\n // legitimately push landmarks past the oval edge.\n const faceClippingOval = useSignal(false);\n const faceProximity = useSignal<'too-close' | 'too-far' | 'good'>('good');\n const videoAspectRatio = useSignal(16 / 9);\n const faceLandmarks = useSignal<any[]>([]);\n const currentSmileScore = useSignal(0);\n const currentFaceSize = useSignal(0);\n const currentMouthOpen = useSignal(0);\n const lastSmileTime = useSignal(0);\n const alertTitle = useSignal('');\n const isInitializing = useSignal(true);\n const captureButtonFallbackEnabled = useSignal(false);\n\n const isCapturing = useSignal(false);\n const isPaused = useSignal(false);\n const countdown = useSignal(0);\n const capturedImages = useSignal<string[]>([]);\n const referencePhoto = useSignal<string | null>(null);\n const totalCaptures = useSignal(1);\n const capturesTaken = useSignal(0);\n const hasFinishedCapture = useSignal(false);\n\n // Active-liveness (Enhanced SmartSelfie) signals — only meaningful when\n // useStrictMode is true.\n const poseSequence = useSignal<HeadPoseDirection[]>([]);\n const currentPoseIndex = useSignal(0);\n const currentPose = useSignal<HeadPoseDirection | null>(null);\n const isTooDark = useSignal(false);\n const isTooBlurry = useSignal(false);\n // Direction the face is offset from the oval centre when out of bounds.\n // Used by the UI to colour the offending side of the oval and pick a\n // directional prompt (\"Move your device higher/lower/left/right\").\n const faceOffsetDirection = useSignal<\n 'top' | 'bottom' | 'left' | 'right' | null\n >(null);\n let qualityFrameCounter = 0;\n\n const smileCheckpoint = useComputed(() =>\n Math.floor(totalCaptures.value * 0.4),\n );\n const neutralZone = useComputed(() => Math.floor(totalCaptures.value * 0.2));\n\n const isReadyToCapture = useComputed(\n () =>\n faceDetected.value &&\n faceInBounds.value &&\n faceProximity.value === 'good',\n );\n\n const updateAlertImmediate = (messageKey: MessageKey | null) => {\n if (messageKey && MESSAGES[messageKey]) {\n alertTitle.value = MESSAGES[messageKey]?.();\n } else {\n alertTitle.value = '';\n }\n };\n\n const updateAlert = useRef(\n throttle((messageKey: MessageKey | null) => {\n updateAlertImmediate(messageKey);\n }, 600),\n ).current;\n\n const CAPTURE_FALLBACK_TIMEOUT_MS = 10000;\n\n const startFallbackTimer = () => {\n if (fallbackTimerRef.current) {\n clearTimeout(fallbackTimerRef.current);\n }\n fallbackTimerRef.current = setTimeout(() => {\n if (!isReadyToCapture.value) {\n captureButtonFallbackEnabled.value = true;\n }\n }, CAPTURE_FALLBACK_TIMEOUT_MS);\n };\n\n const initializeFaceLandmarker = async () => {\n try {\n const isAlreadyLoaded =\n window.__smileIdentityMediapipe?.loaded &&\n window.__smileIdentityMediapipe?.instance;\n\n if (!isAlreadyLoaded) {\n isInitializing.value = true;\n updateAlertImmediate('initializing');\n }\n\n faceLandmarkerRef.current = await getMediapipeInstance();\n isInitializing.value = false;\n startFallbackTimer();\n } catch (error) {\n console.error('Failed to initialize MediaPipe:', error);\n isInitializing.value = false;\n // MediaPipe failed — start the fallback timer so the button eventually\n // enables and the user isn't permanently stuck.\n startFallbackTimer();\n }\n };\n\n const setupCanvas = () => {\n if (videoRef.current && canvasRef.current) {\n const { videoWidth, videoHeight } = videoRef.current;\n\n videoAspectRatio.value = videoWidth / videoHeight;\n\n canvasRef.current.width = videoWidth;\n canvasRef.current.height = videoHeight;\n\n const container = videoRef.current.parentElement;\n if (container) {\n canvasRef.current.style.left = '50%';\n canvasRef.current.style.top = '50%';\n }\n }\n };\n\n const updateCaptureAlerts = () => {\n if (useStrictMode) {\n // Strict-mode capture alerts are driven by head-pose prompts. The active\n // pose label is derived from the randomised sequence; we don't fall back\n // to the smile-zone messaging at all.\n const pose = poseSequence.value[currentPoseIndex.value];\n if (!pose) {\n alertTitle.value = t('selfie.smart.status.capturing');\n return;\n }\n const poseToMessage: Record<typeof pose, MessageKey> = {\n left: 'turn-head-left',\n right: 'turn-head-right',\n up: 'tilt-head-up',\n };\n updateAlert(poseToMessage[pose]);\n return;\n }\n\n const isInNeutralZone = capturesTaken.value < neutralZone.value;\n const isInSmileZone = capturesTaken.value >= smileCheckpoint.value;\n\n if (isInNeutralZone) {\n alertTitle.value = t('selfie.smart.status.capturing');\n } else if (isInSmileZone) {\n const timeSinceSmile = Date.now() - lastSmileTime.value;\n if (timeSinceSmile > smileCooldown) {\n if (\n currentSmileScore.value >= smileThreshold &&\n currentMouthOpen.value < mouthOpenThreshold\n ) {\n updateAlert('open-mouth-smile');\n } else {\n updateAlert('smile-required');\n }\n } else {\n alertTitle.value = t('selfie.smart.status.keepSmiling');\n }\n } else {\n updateAlert(null);\n }\n };\n\n const updateAlerts = () => {\n if (isInitializing.value) {\n updateAlertImmediate('initializing');\n } else if (!faceDetected.value) {\n updateAlert('no-face');\n } else if (useStrictMode && isTooDark.value) {\n updateAlert('too-dark');\n } else if (useStrictMode && isTooBlurry.value) {\n updateAlert('too-blurry');\n } else if (faceProximity.value === 'too-close') {\n updateAlert('too-close');\n } else if (faceProximity.value === 'too-far') {\n updateAlert('too-far');\n } else if (!faceInBounds.value) {\n updateAlert(useStrictMode ? 'face-not-centered' : 'out-of-bounds');\n } else if (isCapturing.value) {\n updateCaptureAlerts();\n } else {\n alertTitle.value = t('selfie.smart.status.readyToCapture');\n }\n };\n\n const stopDetectionLoop = () => {\n if (animationFrameRef.current) {\n cancelAnimationFrame(animationFrameRef.current);\n animationFrameRef.current = null;\n }\n };\n\n const detectFace = async () => {\n if (!faceLandmarkerRef.current || !videoRef.current) {\n stopDetectionLoop();\n return;\n }\n\n // ensure video has valid dimensions before processing\n if (\n videoRef.current.videoWidth <= 0 ||\n videoRef.current.videoHeight <= 0 ||\n videoRef.current.readyState < 2\n ) {\n animationFrameRef.current = requestAnimationFrame(detectFace);\n return;\n }\n\n try {\n if (isInitializing.value) {\n isInitializing.value = false;\n }\n\n const croppedCanvas = createCroppedVideoFrame(videoRef.current);\n const detectionSource = croppedCanvas || videoRef.current;\n\n const results = faceLandmarkerRef.current.detectForVideo(\n detectionSource,\n performance.now(),\n );\n\n faceLandmarks.value = results.faceLandmarks || [];\n\n if (results.faceLandmarks && canvasRef.current && videoRef.current) {\n // we run detection on a cropped video frame\n // adjust landmark coordinates back to full video space\n if (croppedCanvas) {\n const sourceWidth = videoRef.current.videoWidth;\n const sourceHeight = videoRef.current.videoHeight;\n const squareSize = Math.min(sourceWidth, sourceHeight);\n const offsetX = (sourceWidth - squareSize) / (2 * sourceWidth);\n const offsetY = (sourceHeight - squareSize) / (2 * sourceHeight);\n const scaleFactor = squareSize / sourceWidth;\n const scaleFactorY = squareSize / sourceHeight;\n\n const adjustedLandmarks = results.faceLandmarks.map((face) =>\n face.map((landmark: any) => ({\n x: landmark.x * scaleFactor + offsetX,\n y: landmark.y * scaleFactorY + offsetY,\n z: landmark.z,\n })),\n );\n\n drawFaceMesh(\n canvasRef.current,\n adjustedLandmarks,\n capturesTaken.value,\n smileCheckpoint.value,\n useStrictMode,\n );\n } else {\n drawFaceMesh(\n canvasRef.current,\n results.faceLandmarks,\n capturesTaken.value,\n smileCheckpoint.value,\n useStrictMode,\n );\n }\n } else if (canvasRef.current) {\n clearCanvas(canvasRef.current);\n }\n\n // Check number of faces\n const numFaces = results.faceLandmarks ? results.faceLandmarks.length : 0;\n\n // Check if face is detected\n const hasFace =\n results.faceBlendshapes &&\n results.faceBlendshapes.length > 0 &&\n numFaces >= 1;\n faceDetected.value = hasFace;\n\n if (hasFace && results.faceLandmarks) {\n // Calculate face size and position\n const faceSize = calculateFaceSize(results.faceLandmarks, {\n rotationStable: useStrictMode,\n });\n currentFaceSize.value = faceSize;\n\n // Proximity check with hysteresis: once the face is in the \"good\"\n // band, the reading has to drift past the threshold before we flip\n // back to too-close/too-far. Keep the margin small so legitimate\n // edge cases are caught quickly.\n const proximityMargin = 0.02;\n const min = minFaceSize;\n const max = maxFaceSize;\n const current = faceProximity.value;\n if (current === 'good') {\n if (faceSize > max + proximityMargin) {\n faceProximity.value = 'too-close';\n } else if (faceSize < min - proximityMargin) {\n faceProximity.value = 'too-far';\n }\n } else if (current === 'too-close') {\n if (faceSize <= max) faceProximity.value = 'good';\n } else if (current === 'too-far') {\n if (faceSize >= min) faceProximity.value = 'good';\n }\n\n // Check face position. In strict mode the head will rotate, which\n // legitimately widens the bounding box, so only the face centre is\n // required to stay inside the oval.\n faceInBounds.value = isFaceInBounds(\n results.faceLandmarks,\n videoAspectRatio.value,\n { centerOnly: useStrictMode },\n );\n\n // Independent clipping check: project every landmark into the\n // visible wrapper using runtime element rects, then test against\n // the visible egg (approximated as a centred ellipse). If any\n // landmark falls outside, the oval boundary is clipping the face.\n // Used as an idle-only gating signal so head turns during capture\n // don't trip it.\n faceClippingOval.value = computeFaceClippingOval(\n results.faceLandmarks[0],\n videoRef.current,\n );\n\n // Directional nudge: only fire when the face is actually clipping\n // (touching/crossing) the visible oval edge. The clipping side is\n // derived from the single most-clipped landmark and its dominant\n // axis. A face fully inside the oval gets `null` here — no nudge.\n // (Mirror correction is handled inside computeFaceClippingSide.)\n faceOffsetDirection.value = computeFaceClippingSide(\n results.faceLandmarks[0],\n videoRef.current,\n );\n\n // Get smile and mouth open data\n const blendshapes = results.faceBlendshapes[0].categories;\n const smileLeft =\n blendshapes.find((b) => b.categoryName === 'mouthSmileLeft')?.score ||\n 0;\n const smileRight =\n blendshapes.find((b) => b.categoryName === 'mouthSmileRight')\n ?.score || 0;\n const mouthOpen = calculateMouthOpening(results.faceLandmarks);\n const smileScore = (smileLeft + smileRight) / 2;\n\n currentSmileScore.value = smileScore;\n currentMouthOpen.value = mouthOpen;\n\n if (useStrictMode) {\n // Pose detection requires landmarks, so it stays gated on face\n // detection. Lighting/blur are now sampled outside this block —\n // they need to keep running when the face is undetected (e.g.\n // because the scene is too dark / motion-blurred to find a face).\n const pose = calculateHeadPose(results.faceLandmarks);\n const rawPose = classifyHeadPose(pose);\n\n // 2-of-3 majority smoothing. atan2 noise (especially on left\n // turns where x_diff approaches zero) causes single-tick drops\n // below threshold; without smoothing those ticks dissolve a\n // held pose and the capture interval keeps missing the window.\n const history = poseHistoryRef.current;\n history.push(rawPose);\n if (history.length > 3) history.shift();\n let smoothed: HeadPoseDirection | null = rawPose;\n if (history.length === 3) {\n const counts = new Map<HeadPoseDirection | null, number>();\n for (let i = 0; i < history.length; i += 1) {\n counts.set(history[i], (counts.get(history[i]) ?? 0) + 1);\n }\n let winner: HeadPoseDirection | null = null;\n let winnerCount = 0;\n counts.forEach((c, k) => {\n if (c > winnerCount) {\n winner = k;\n winnerCount = c;\n }\n });\n if (winnerCount >= 2) smoothed = winner;\n }\n currentPose.value = smoothed;\n\n // Refresh the latch only when the smoothed pose matches the\n // requested one *and* all the other capture gates are currently\n // passing. Refreshing on pose alone lets the latch carry the\n // user through a failing proximity/bounds/lighting check — they\n // see the failure alert, but a moment later the capture tick\n // fires off the residual latch and the pose silently passes.\n // The latch should only represent \"this is a moment we could\n // have captured\", not \"the head was once turned correctly\".\n const requiredPose =\n poseSequence.value[currentPoseIndex.value] ?? null;\n const captureGatePasses =\n isCapturing.value &&\n !isPaused.value &&\n faceInBounds.value &&\n faceProximity.value === 'good' &&\n !isTooDark.value &&\n !isTooBlurry.value &&\n faceOffsetDirection.value === null &&\n !faceClippingOval.value;\n if (\n smoothed &&\n requiredPose &&\n smoothed === requiredPose &&\n captureGatePasses\n ) {\n lastPoseMatchAtRef.current = Date.now();\n } else if (!captureGatePasses) {\n // Any failing quality check immediately invalidates the latch\n // so a pass→fail→pass blip between capture ticks can't fire\n // off a residual \"recent match\" while the user is still being\n // told to move the device.\n lastPoseMatchAtRef.current = 0;\n }\n }\n\n if (smileScore >= smileThreshold && mouthOpen >= mouthOpenThreshold) {\n lastSmileTime.value = Date.now();\n\n if (isPaused.value && isCapturing.value && resumeCaptureRef.current) {\n // defer execution\n setTimeout(() => {\n const stillSmiling = Date.now() - lastSmileTime.value <= 100;\n if (\n stillSmiling &&\n isPaused.value &&\n isCapturing.value &&\n resumeCaptureRef.current\n ) {\n resumeCaptureRef.current();\n }\n }, 0);\n }\n }\n } else {\n // No face detected - reset face-derived values. Lighting/blur are\n // intentionally NOT reset here: those checks are useful precisely\n // when the face has gone undetected (dark room / motion blur) and\n // are sampled separately below from the raw video frame.\n currentSmileScore.value = 0;\n currentFaceSize.value = 0;\n currentMouthOpen.value = 0;\n faceInBounds.value = false;\n faceClippingOval.value = false;\n faceProximity.value = 'good';\n faceOffsetDirection.value = null;\n if (useStrictMode) {\n currentPose.value = null;\n }\n }\n\n // Lighting/blur sampling — runs every frame regardless of face\n // detection so the alert can fire even when the scene is too dark or\n // shaky for the landmarker to find a face. Throttled with a frame\n // counter so the canvas readback stays cheap.\n if (useStrictMode && videoRef.current) {\n qualityFrameCounter += 1;\n if (qualityFrameCounter % 6 === 0) {\n const luma = calculateLuminance(videoRef.current);\n isTooDark.value = luma > 0 && luma < DEFAULT_LUMINANCE_MIN;\n const blur = calculateBlurScore(videoRef.current);\n isTooBlurry.value = blur > 0 && blur < DEFAULT_BLUR_MIN;\n }\n }\n\n updateAlerts();\n } catch {\n faceDetected.value = false;\n faceInBounds.value = false;\n faceClippingOval.value = false;\n faceProximity.value = 'good';\n currentMouthOpen.value = 0;\n\n if (isCapturing.value) {\n updateAlert('no-face');\n }\n }\n\n animationFrameRef.current = requestAnimationFrame(detectFace);\n };\n\n const startDetectionLoop = () => {\n if (animationFrameRef.current) {\n cancelAnimationFrame(animationFrameRef.current);\n }\n animationFrameRef.current = requestAnimationFrame(detectFace);\n };\n\n // Notify hosted-web inactivity timeout that the user is making progress.\n // Fired on every successful capture so the 120s timer resets continuously\n // as long as frames are being collected.\n const dispatchProgress = () => {\n document\n .querySelector('smart-camera-web')\n ?.dispatchEvent(new CustomEvent('metadata.active-liveness-progress'));\n };\n\n const captureImage = () => {\n if (!videoRef.current) return;\n\n // In strict (Active Liveness) mode the reference selfie is captured up-front\n // in startCapture() while the user is still neutral. The per-pose captures\n // here only ever populate the liveness array.\n const isReference =\n !useStrictMode && capturesTaken.value === totalCaptures.value - 1;\n const imageData = captureImageFromVideo(videoRef.current, isReference);\n\n if (!imageData) return;\n\n if (isReference) {\n referencePhoto.value = imageData;\n } else {\n capturedImages.value = [...capturedImages.value, imageData];\n }\n\n capturesTaken.value++;\n countdown.value = totalCaptures.value - capturesTaken.value;\n };\n\n const stopCapture = () => {\n if (captureTimerRef.current) {\n clearInterval(captureTimerRef.current);\n captureTimerRef.current = null;\n }\n\n isCapturing.value = false;\n isPaused.value = false;\n\n if (capturesTaken.value >= totalCaptures.value && referencePhoto.value) {\n const livenessImages = capturedImages.value.map((img) => ({\n image: img.split(',')[1],\n image_type_id: ImageType.LIVENESS_IMAGE_BASE64,\n }));\n\n const referenceImage = {\n image: referencePhoto.value.split(',')[1],\n image_type_id: ImageType.SELFIE_IMAGE_BASE64,\n };\n\n const eventDetail = {\n images: [...livenessImages, referenceImage],\n referenceImage: referencePhoto.value,\n previewImage: referencePhoto.value,\n facingMode: getFacingMode(),\n meta: { libraryVersion: COMPONENTS_VERSION },\n };\n\n if (onCaptureComplete) {\n // Caller owns the payload — defer publish until they decide to emit.\n onCaptureComplete(eventDetail);\n } else {\n window.dispatchEvent(\n new CustomEvent('selfie-capture.publish', { detail: eventDetail }),\n );\n }\n\n hasFinishedCapture.value = true;\n }\n };\n\n const pauseCapture = () => {\n if (captureTimerRef.current) {\n clearInterval(captureTimerRef.current);\n captureTimerRef.current = null;\n }\n isPaused.value = true;\n\n if (\n faceDetected.value &&\n faceInBounds.value &&\n faceProximity.value === 'good'\n ) {\n updateAlert('smile-required');\n }\n };\n\n const startCaptureInterval = () => {\n if (captureTimerRef.current) {\n clearInterval(captureTimerRef.current);\n }\n\n captureTimerRef.current = setInterval(() => {\n if (capturesTaken.value >= totalCaptures.value) {\n stopCapture();\n return;\n }\n\n if (!faceDetected.value) {\n return;\n }\n\n if (!faceInBounds.value) {\n // Strict mode has no smile-based resume path — calling pauseCapture\n // here would clear the interval and leave the user stuck even after\n // they recentre. Just skip this tick instead so the next frame\n // re-evaluates once they're back in bounds.\n if (useStrictMode) return;\n pauseCapture();\n return;\n }\n\n if (faceProximity.value !== 'good') {\n if (useStrictMode) return;\n pauseCapture();\n return;\n }\n\n if (useStrictMode) {\n // Strict mode: gate captures on (a) sufficient lighting/sharpness and\n // (b) the user matching the currently-required head pose. The pose\n // sequence advances once enough frames per pose have been collected.\n if (isTooDark.value || isTooBlurry.value) {\n // Same reason as above — skip rather than pause so the loop keeps\n // ticking and resumes automatically once lighting/blur clears.\n return;\n }\n\n // The UI surfaces faceOffsetDirection as a \"Move device left/right\"\n // alert. The capture path has to honour the same gate, otherwise\n // the user sees the alert but the pose silently passes anyway.\n // Also gate on faceClippingOval — it flags any landmark past the\n // visible egg edge without depending on axis-dominance, so it\n // catches cases where the face is crossing the border but the\n // bbox centre hasn't moved enough to pin a direction yet.\n if (faceOffsetDirection.value !== null || faceClippingOval.value) {\n return;\n }\n\n // Distribute the capture window evenly across the pose sequence:\n // each pose gets `framesPerPose = floor(totalCaptures / poseCount)`\n // frames. Any leftover frames (e.g. 8 captures across 3 poses → 2\n // leftover) are taken silently up-front while the user is still\n // neutral, giving the backend forward-facing liveness samples\n // without burdening the user with an extra \"look straight\" prompt.\n const poseCount = poseSequence.value.length;\n const framesPerPose = Math.max(\n 1,\n Math.floor(totalCaptures.value / poseCount),\n );\n const silentNeutralFrames = Math.max(\n 0,\n totalCaptures.value - framesPerPose * poseCount,\n );\n\n if (capturesTaken.value < silentNeutralFrames) {\n // Pre-pose neutral phase: snap whatever the user is showing now\n // (they're already centred from the hold-still period). No pose\n // gate, no prompt change — these frames feed liveness silently.\n captureImage();\n dispatchProgress();\n return;\n }\n\n const requiredPose = poseSequence.value[currentPoseIndex.value];\n if (!requiredPose) {\n stopCapture();\n return;\n }\n // Accept either an instantaneous match or a very recent one. The\n // latch covers the case where the user held the pose between\n // capture ticks but the smoothed reading drifted by the time this\n // tick fired (e.g. they started relaxing back to neutral).\n const poseMatched =\n currentPose.value === requiredPose ||\n Date.now() - lastPoseMatchAtRef.current <= POSE_MATCH_LATCH_MS;\n if (!poseMatched) {\n // Don't pause — we want the prompt to stay visible while the user\n // adjusts. Just skip this tick.\n return;\n }\n\n captureImage();\n // Any successful capture counts as activity for the hosted-web\n // inactivity timeout — even if the user is still on pose 1 and\n // hasn't advanced the index yet.\n dispatchProgress();\n\n // Frames captured *within* the pose phase only (the leading neutral\n // frames don't belong to any pose). Advance once we've collected\n // enough for the current pose.\n const poseFramesTaken = capturesTaken.value - silentNeutralFrames;\n if (\n poseFramesTaken > 0 &&\n poseFramesTaken % framesPerPose === 0 &&\n currentPoseIndex.value < poseCount - 1\n ) {\n currentPoseIndex.value += 1;\n // Clear smoothing + latch so the previous pose can't satisfy\n // the next one — each pose must be re-confirmed from scratch.\n poseHistoryRef.current = [];\n lastPoseMatchAtRef.current = 0;\n }\n return;\n }\n\n const isInSmileZone = capturesTaken.value >= smileCheckpoint.value;\n\n if (isInSmileZone) {\n const timeSinceSmile = Date.now() - lastSmileTime.value;\n if (timeSinceSmile > smileCooldown) {\n pauseCapture();\n return;\n }\n }\n\n captureImage();\n }, interval);\n };\n\n const resumeCapture = () => {\n if (\n faceDetected.value &&\n faceProximity.value === 'good' &&\n faceInBounds.value\n ) {\n const isInSmileZone = capturesTaken.value >= smileCheckpoint.value;\n if (isInSmileZone) {\n const timeSinceSmile = Date.now() - lastSmileTime.value;\n if (timeSinceSmile > smileCooldown) {\n return;\n }\n }\n\n isPaused.value = false;\n updateAlert(null);\n startCaptureInterval();\n }\n };\n\n resumeCaptureRef.current = resumeCapture;\n\n const startCapture = async () => {\n capturedImages.value = [];\n isCapturing.value = true;\n isPaused.value = false;\n totalCaptures.value = Math.ceil(duration / interval);\n capturesTaken.value = 0;\n countdown.value = totalCaptures.value;\n\n if (useStrictMode) {\n poseSequence.value = buildRandomPoseSequence();\n currentPoseIndex.value = 0;\n poseHistoryRef.current = [];\n lastPoseMatchAtRef.current = 0;\n\n // Snap the neutral selfie up-front so the result preview shows the\n // user facing the camera, not whichever direction the last pose\n // prompted them to turn.\n if (videoRef.current) {\n const neutralReference = captureImageFromVideo(videoRef.current, true);\n if (neutralReference) {\n referencePhoto.value = neutralReference;\n }\n }\n }\n\n const smartCameraWeb = document.querySelector('smart-camera-web');\n smartCameraWeb?.dispatchEvent(\n new CustomEvent('metadata.selfie-capture-start'),\n );\n smartCameraWeb?.dispatchEvent(\n new CustomEvent('metadata.active-liveness-type', {\n detail: { type: useStrictMode ? 'head_pose' : 'smile_detection' },\n }),\n );\n smartCameraWeb?.dispatchEvent(\n new CustomEvent('metadata.selfie-origin', {\n detail: {\n imageOrigin: { environment: 'back_camera', user: 'front_camera' }[\n getFacingMode()\n ],\n },\n }),\n );\n\n startCaptureInterval();\n };\n\n const handleCancel = () => {\n stopCapture();\n window.dispatchEvent(\n new CustomEvent('selfie-capture.cancelled', {\n detail: { meta: { libraryVersion: COMPONENTS_VERSION } },\n }),\n );\n\n // TODO: remove - for backwards compatibility\n window.dispatchEvent(\n new CustomEvent('selfie-capture-screens.cancelled', {\n detail: { meta: { libraryVersion: COMPONENTS_VERSION } },\n }),\n );\n };\n\n /**\n * Force-finalise the capture session with a failure reason. Used by the\n * hosted-web active-liveness inactivity timer (and any other host-driven\n * fail-fast path) to submit whatever frames have been captured so far\n * tagged with a reason the backend can use to record the failure.\n *\n * The payload mirrors the normal completion shape so the existing publish\n * path doesn't need to special-case it; the only extra field is\n * `forceFailureReason`, which downstream submission handlers forward as\n * a structured `failure_reason` metadata entry (e.g.\n * `{ mobile_active_liveness_timed_out: true }`).\n */\n const forceFailCapture = (reason: string) => {\n // Stop the capture interval and detection loop; we're not going to take\n // any more frames after this point.\n if (captureTimerRef.current) {\n clearInterval(captureTimerRef.current);\n captureTimerRef.current = null;\n }\n isCapturing.value = false;\n isPaused.value = false;\n\n // Top up the liveness buffer to the full expected count by grabbing\n // whatever the camera currently shows. The backend rejects partial\n // submissions, so on timeout we'd rather submit `totalCaptures` \"random\"\n // frames tagged with `forceFailureReason` than discard the session.\n // The frames are captured back-to-back from the live <video> element,\n // which gives us slight motion between them in practice.\n if (videoRef.current) {\n const target = totalCaptures.value;\n while (capturedImages.value.length < target) {\n const frame = captureImageFromVideo(videoRef.current, false);\n if (!frame) break;\n capturedImages.value = [...capturedImages.value, frame];\n }\n // Reference selfie may not have been snapped yet (e.g. timeout fired\n // before startCapture's up-front grab). Fall back to a live frame so\n // the payload always carries a reference image.\n if (!referencePhoto.value) {\n const ref = captureImageFromVideo(videoRef.current, true);\n if (ref) referencePhoto.value = ref;\n }\n }\n\n const livenessImages = capturedImages.value.map((img) => ({\n image: img.split(',')[1],\n image_type_id: ImageType.LIVENESS_IMAGE_BASE64,\n }));\n\n const reference = referencePhoto.value;\n const referenceImage = reference\n ? {\n image: reference.split(',')[1],\n image_type_id: ImageType.SELFIE_IMAGE_BASE64,\n }\n : null;\n\n const eventDetail = {\n images: referenceImage\n ? [...livenessImages, referenceImage]\n : livenessImages,\n referenceImage: reference ?? '',\n previewImage: reference ?? '',\n facingMode: getFacingMode(),\n forceFailureReason: reason,\n meta: { libraryVersion: COMPONENTS_VERSION },\n };\n\n if (onCaptureComplete) {\n onCaptureComplete(eventDetail);\n } else {\n window.dispatchEvent(\n new CustomEvent('selfie-capture.publish', { detail: eventDetail }),\n );\n }\n\n hasFinishedCapture.value = true;\n };\n\n const handleClose = () => {\n stopCapture();\n\n window.dispatchEvent(\n new CustomEvent('selfie-capture.close', {\n detail: { meta: { libraryVersion: COMPONENTS_VERSION } },\n }),\n );\n\n // TODO: remove - backwards compatibility\n window.dispatchEvent(\n new CustomEvent('selfie-capture-screens.close', {\n detail: { meta: { libraryVersion: COMPONENTS_VERSION } },\n }),\n );\n };\n\n const cleanup = () => {\n if (captureTimerRef.current) {\n clearInterval(captureTimerRef.current);\n }\n if (fallbackTimerRef.current) {\n clearTimeout(fallbackTimerRef.current);\n }\n stopDetectionLoop();\n updateAlert.cancel();\n };\n\n const resetFaceDetectionState = () => {\n faceDetected.value = false;\n faceInBounds.value = false;\n faceClippingOval.value = false;\n faceProximity.value = 'good';\n faceLandmarks.value = [];\n currentSmileScore.value = 0;\n currentFaceSize.value = 0;\n currentMouthOpen.value = 0;\n lastSmileTime.value = 0;\n captureButtonFallbackEnabled.value = false;\n currentPose.value = null;\n isTooDark.value = false;\n isTooBlurry.value = false;\n qualityFrameCounter = 0;\n if (fallbackTimerRef.current) {\n clearTimeout(fallbackTimerRef.current);\n fallbackTimerRef.current = null;\n }\n\n if (canvasRef.current) {\n clearCanvas(canvasRef.current);\n }\n };\n\n return {\n faceDetected,\n faceInBounds,\n faceClippingOval,\n faceProximity,\n videoAspectRatio,\n faceLandmarks,\n currentSmileScore,\n currentFaceSize,\n currentMouthOpen,\n lastSmileTime,\n alertTitle,\n isInitializing,\n isReadyToCapture,\n captureButtonFallbackEnabled,\n\n isCapturing,\n isPaused,\n countdown,\n capturedImages,\n referencePhoto,\n totalCaptures,\n capturesTaken,\n hasFinishedCapture,\n smileCheckpoint,\n neutralZone,\n poseSequence,\n currentPoseIndex,\n currentPose,\n isTooDark,\n isTooBlurry,\n faceOffsetDirection,\n\n initializeFaceLandmarker,\n setupCanvas,\n startDetectionLoop,\n stopDetectionLoop,\n updateAlert,\n startCapture,\n stopCapture,\n pauseCapture,\n resumeCapture,\n handleCancel,\n forceFailCapture,\n handleClose,\n cleanup,\n resetFaceDetectionState,\n };\n};\n","import type { FunctionComponent } from 'preact';\n\ninterface OvalProgressProps {\n /**\n * Colour of the static oval border. Defaults to the neutral grey used in the\n * Enhanced SmartSelfie design; callers can pass an error tint (e.g. red)\n * when a quality check fails (too dark, too blurry, no face, etc.).\n */\n borderColor?: string;\n /**\n * When set to a side, render a coloured arc over that quarter of the oval\n * to highlight which side of the frame the user needs to fix. Use 'all' to\n * tint the whole border (e.g. too-close, too-far, too-dark).\n */\n errorSide?: 'top' | 'right' | 'bottom' | 'left' | 'all' | null;\n /** Colour of the error arc / full border. Defaults to red. */\n errorColor?: string;\n}\n\n// Pre-computed end-points for each side-arc on the 311×418 ellipse\n// (cx=155.5, cy=209, rx=153.5, ry=207). Each \"side\" is the 90° arc centred on\n// that compass point, i.e. top spans the upper quadrant between the\n// 45°/135° parametric angles. Drawing each side as its own <path> avoids the\n// rendering artefacts of the previous stroke-dash trick (round end-caps on a\n// thicker stroke produced visible bulges where the highlight met the base\n// border).\nconst SIDE_ARCS: Record<'top' | 'right' | 'bottom' | 'left', string> = {\n // 135° → 45°, sweeping clockwise across the top.\n top: 'M 46.95 62.63 A 153.5 207 0 0 1 264.05 62.63',\n // 45° → -45°, clockwise down the right side.\n right: 'M 264.05 62.63 A 153.5 207 0 0 1 264.05 355.37',\n // -45° → -135°, clockwise across the bottom.\n bottom: 'M 264.05 355.37 A 153.5 207 0 0 1 46.95 355.37',\n // -135° → 135°, clockwise up the left side.\n left: 'M 46.95 355.37 A 153.5 207 0 0 1 46.95 62.63',\n};\n\nconst OvalProgress: FunctionComponent<OvalProgressProps> = ({\n borderColor = '#C4C4C4',\n errorSide = null,\n errorColor = '#EF4343',\n}) => (\n <div\n style={{\n position: 'absolute',\n top: '0',\n left: '0',\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n }}\n >\n <svg\n viewBox=\"0 0 311 418\"\n preserveAspectRatio=\"xMidYMid meet\"\n style={{ width: '100%', height: '100%' }}\n >\n {/*\n Base ellipse border. Authored as a single closed path (rather than\n <ellipse>) so the shape definition lives next to the side-arc paths\n below and any future tweaks stay co-located.\n cx=155.5 cy=209 rx=153.5 ry=207 — i.e. a 311×418 ellipse inset by the\n 2px stroke so the border sits inside the wrapper bounds.\n */}\n <path\n d=\"M 155.5 2 A 153.5 207 0 0 1 309 209 A 153.5 207 0 0 1 155.5 416 A 153.5 207 0 0 1 2 209 A 153.5 207 0 0 1 155.5 2 Z\"\n stroke={errorSide === 'all' ? errorColor : borderColor}\n fill=\"none\"\n style={{ strokeWidth: '4', transition: 'stroke 200ms ease-out' }}\n />\n {errorSide && errorSide !== 'all' && (\n <path\n d={SIDE_ARCS[errorSide]}\n stroke={errorColor}\n fill=\"none\"\n strokeLinecap=\"butt\"\n style={{\n strokeWidth: '4',\n transition: 'stroke 200ms ease-out',\n }}\n />\n )}\n </svg>\n </div>\n);\n\nexport default OvalProgress;\n","import type { ComponentChildren, FunctionComponent, Ref } from 'preact';\nimport OvalProgress from '../OvalProgress';\n\ninterface CameraPreviewProps {\n videoRef: Ref<HTMLVideoElement>;\n canvasRef: Ref<HTMLCanvasElement>;\n facingMode: 'user' | 'environment';\n themeColor: string;\n /** Optional overlay rendered inside the video container (e.g. active-liveness face animation). */\n overlay?: ComponentChildren;\n /** Optional override for the oval border colour (used to signal error states). */\n borderColor?: string;\n /** Highlight the offending side of the oval when a quality check fails. */\n errorSide?: 'top' | 'right' | 'bottom' | 'left' | 'all' | null;\n}\n\nexport const CameraPreview: FunctionComponent<CameraPreviewProps> = ({\n videoRef,\n canvasRef,\n facingMode,\n overlay,\n borderColor,\n errorSide = null,\n}) => (\n <>\n <div className=\"camera-preview-container\">\n <div className=\"video-wrapper\">\n <div className=\"video-container\">\n <video\n ref={videoRef}\n autoPlay\n playsInline\n muted\n className={`camera-video ${facingMode === 'user' ? 'mirror' : ''}`}\n />\n <canvas\n ref={canvasRef}\n className={`camera-canvas ${facingMode === 'user' ? 'mirror' : ''}`}\n />\n {overlay}\n </div>\n </div>\n <OvalProgress borderColor={borderColor} errorSide={errorSide} />\n </div>\n\n <style>{`\n .camera-preview-container {\n position: relative;\n width: auto;\n height: clamp(220px, 42dvh, 418px);\n aspect-ratio: 311 / 418;\n max-width: 100%;\n margin: 0 auto;\n flex-shrink: 1;\n min-height: 0;\n }\n\n .video-wrapper {\n width: 100%;\n height: 100%;\n margin: 0 auto;\n position: relative;\n border: 2px solid #C4C4C4;\n border-radius: 50%;\n overflow: hidden;\n background: #F5F7FA;\n box-sizing: border-box;\n }\n\n .video-container {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n .camera-video,\n .camera-canvas {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n\n .camera-video.mirror,\n .camera-canvas.mirror {\n transform: translate(-50%, -50%) scaleX(-1);\n }\n\n .camera-canvas {\n pointer-events: none;\n }\n `}</style>\n </>\n);\n","import type { FunctionComponent } from 'preact';\n\ninterface AlertDisplayProps {\n alertTitle: string;\n themeColor?: string;\n}\n\nexport const AlertDisplay: FunctionComponent<AlertDisplayProps> = ({\n alertTitle,\n themeColor = '#151F72',\n}) =>\n alertTitle ? (\n <>\n <div className=\"alert-message\">\n <div className=\"alert-title\" style={{ color: themeColor }}>\n {alertTitle}\n </div>\n </div>\n\n <style>{`\n .alert-message {\n margin-top: clamp(12px, 2.5dvh, 24px);\n padding: 0 16px;\n text-align: center;\n width: 100%;\n }\n\n .alert-title {\n font-family: \"DM Sans\", system-ui, sans-serif;\n font-size: 14px;\n font-style: normal;\n font-weight: 700;\n line-height: 20px;\n text-align: center;\n }\n `}</style>\n </>\n ) : null;\n","import type { FunctionComponent } from 'preact';\nimport { t } from '../../../../../domain/localisation';\n\ninterface CaptureControlsProps {\n isCapturing: boolean;\n hasFinishedCapture: boolean;\n isReadyToCapture: boolean;\n captureButtonFallbackEnabled: boolean;\n allowAgentMode: boolean;\n agentSupported: boolean;\n showAgentModeForTests: boolean;\n facingMode: 'user' | 'environment';\n themeColor?: string;\n onStartCapture: () => void;\n onSwitchCamera: () => void;\n}\n\nexport const CaptureControls: FunctionComponent<CaptureControlsProps> = ({\n isCapturing,\n hasFinishedCapture,\n isReadyToCapture,\n captureButtonFallbackEnabled,\n allowAgentMode,\n agentSupported,\n showAgentModeForTests,\n facingMode,\n themeColor = '#001096',\n onStartCapture,\n onSwitchCamera,\n}) => (\n <>\n <div className=\"controls\">\n <button\n id=\"start-image-capture\"\n class=\"btn-primary\"\n onClick={onStartCapture}\n disabled={\n isCapturing ||\n hasFinishedCapture ||\n (!isReadyToCapture && !captureButtonFallbackEnabled)\n }\n >\n {t('selfie.capture.button.startCapture')}\n </button>\n\n {allowAgentMode && (agentSupported || showAgentModeForTests) && (\n <button\n id=\"switch-camera\"\n onClick={onSwitchCamera}\n className=\"agent-mode-btn\"\n disabled={isCapturing || hasFinishedCapture}\n >\n {facingMode === 'user'\n ? t('selfie.capture.agentMode.off')\n : t('selfie.capture.agentMode.on')}\n </button>\n )}\n </div>\n\n <style>{`\n .controls {\n margin-top: clamp(12px, 2.5dvh, 20px);\n display: flex;\n flex-direction: column;\n gap: 1rem;\n justify-content: center;\n width: 100%;\n }\n\n .controls .btn-primary {\n width: 100%;\n background: ${themeColor};\n }\n\n .controls .btn-primary:hover,\n .controls .btn-primary:focus,\n .controls .btn-primary:active {\n background: ${themeColor};\n }\n\n .agent-mode-btn {\n padding: 8px 16px;\n font-size: 14px;\n background: ${themeColor};\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n }\n\n .agent-mode-btn:disabled {\n background: #ccc;\n cursor: not-allowed;\n }\n `}</style>\n </>\n);\n","export default \"data:application/octet-stream;base64,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\"","export default \"data:application/octet-stream;base64,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\"","export default \"data:application/octet-stream;base64,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\"","import { useEffect, useRef, useState } from 'preact/hooks';\nimport type { FunctionComponent } from 'preact';\n// dotLottie-web renders .lottie packages onto a <canvas>. The animation\n// payloads are base64-inlined at build time (see vite.config.ts) so the\n// distributable bundle remains a single file and no sibling asset hosting\n// is required of consumers.\nimport { DotLottie } from '@lottiefiles/dotlottie-web';\nimport type { HeadPoseDirection } from '../utils/faceDetection';\nimport activeLivenessSrc from '../assets/active_liveness_animation.lottie';\nimport tooDarkSrc from '../assets/too_dark_animation.lottie';\nimport deviceOrientationSrc from '../assets/device_orientation.lottie';\n\ninterface ActiveLivenessOverlayProps {\n /** Currently required pose (drives which segment plays). */\n pose: HeadPoseDirection | null;\n /**\n * The user's currently classified head pose. When this matches the\n * required `pose`, the overlay tints green to confirm the turn was\n * successful. The animation itself keeps playing as normal.\n */\n currentPose?: HeadPoseDirection | null;\n /** When true, swap to the \"too dark\" animation to prompt better lighting. */\n isTooDark?: boolean;\n /**\n * When true, swap to the \"rotate device\" animation. Takes precedence over\n * `isTooDark` and `pose` because the user can't make progress on any other\n * check until they rotate the device back to portrait.\n */\n isLandscape?: boolean;\n}\n\n/**\n * Per-pose frame ranges split by match state. The bundled .lottie was\n * authored with two sibling layers for each direction — `arrow N` (gray)\n * and `arrow - green N` — staggered so the green takes over later in the\n * segment. We exploit that by scrubbing to the gray-only sub-range while\n * the user is still being prompted (`pending`) and jumping to the\n * green-only sub-range the moment the user's head pose matches the\n * required direction (`matched`). This keeps the head/circle base art in\n * its native colours and avoids tinting the whole canvas via CSS filters.\n *\n * Source ranges (layer ip/op from the lottie JSON):\n * left – gray 1-112 | green 42-106\n * right – gray 139-183 | green 180-241\n * up – gray 277-321 | green 318-380\n *\n * The user-facing selfie preview is mirrored, so the on-screen arrows\n * automatically appear flipped relative to the prompt label — no extra\n * direction mapping needed here.\n */\nconst POSE_FRAME_RANGES: Record<\n HeadPoseDirection,\n { pending: [number, number]; matched: [number, number] }\n> = {\n left: { pending: [1, 41], matched: [42, 106] },\n right: { pending: [139, 179], matched: [180, 241] },\n up: { pending: [277, 317], matched: [318, 380] },\n};\n\n/**\n * Translucent face overlay shown during Enhanced SmartSelfie capture.\n *\n * - Anchored to the centre of the camera oval.\n * - 75% opacity so the user's actual face remains visible underneath.\n * - Plays the segment matching the currently-required head pose; segments\n * loop until the pose changes.\n */\nexport const ActiveLivenessOverlay: FunctionComponent<\n ActiveLivenessOverlayProps\n> = ({ pose, currentPose = null, isTooDark = false, isLandscape = false }) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const animRef = useRef<DotLottie | null>(null);\n // Track which .lottie source is currently loaded so we only rebuild the\n // player when actually switching between the pose and too-dark variants.\n const loadedVariantRef = useRef<'pose' | 'too-dark' | 'orientation' | null>(\n null,\n );\n // Lottie pose arrows were authored at a snappy pace; played at native\n // speed they feel hectic and the segment cuts on pose change read as\n // hard jumps. A small slowdown calms both.\n const PLAYBACK_SPEED = 0.6;\n // Brief fade applied to the canvas around a segment swap so the playhead\n // jump (setSegment is instantaneous) reads as a crossfade rather than a\n // hard cut. Matched should keep the user's attention, so the fade is\n // short.\n const SEGMENT_FADE_MS = 180;\n const [fading, setFading] = useState(false);\n // Tracks the segment inputs we last applied so we can skip the fade on\n // the initial mount (the player is already showing the right segment)\n // and on no-op re-renders where neither pose nor matched changed.\n const lastAppliedRef = useRef<{\n pose: HeadPoseDirection | null;\n matched: boolean;\n } | null>(null);\n\n // Green tint applies only when the user's live head pose matches the\n // required prompt — reserved for an actual successful turn, not for the\n // canned guidance loop.\n const matched = !!pose && !!currentPose && pose === currentPose;\n\n useEffect(() => {\n if (!canvasRef.current) return undefined;\n\n const variant: 'pose' | 'too-dark' | 'orientation' = (() => {\n if (isLandscape) return 'orientation';\n if (isTooDark) return 'too-dark';\n return 'pose';\n })();\n if (loadedVariantRef.current === variant && animRef.current) {\n return undefined;\n }\n\n if (animRef.current) {\n animRef.current.destroy();\n animRef.current = null;\n }\n\n // Initial segment for the freshly-built player. `pose` uses the prompt\n // range (gray sub-range, since a fresh build can't yet be `matched`);\n // `too-dark` and `orientation` play their full timeline as a single\n // looping animation.\n const initialSegment = (() => {\n if (variant === 'pose' && pose) return POSE_FRAME_RANGES[pose].pending;\n return undefined;\n })();\n const src = (() => {\n if (variant === 'orientation') return deviceOrientationSrc;\n if (variant === 'too-dark') return tooDarkSrc;\n return activeLivenessSrc;\n })();\n const anim = new DotLottie({\n canvas: canvasRef.current,\n src,\n loop: true,\n autoplay: true,\n speed: PLAYBACK_SPEED,\n ...(initialSegment ? { segment: initialSegment } : {}),\n renderConfig: { autoResize: true },\n });\n animRef.current = anim;\n loadedVariantRef.current = variant;\n // Player just rebuilt with its initial segment — clear the applied\n // record so the segment-change effect treats the next dep evaluation\n // as the first one and doesn't trigger a redundant fade.\n lastAppliedRef.current = null;\n\n return () => {\n anim.destroy();\n animRef.current = null;\n loadedVariantRef.current = null;\n };\n }, [isTooDark, isLandscape]);\n\n useEffect(() => {\n const anim = animRef.current;\n if (!anim || isTooDark || isLandscape) return undefined;\n\n const prev = lastAppliedRef.current;\n const isFirst = prev === null;\n const unchanged =\n !isFirst && prev.pose === pose && prev.matched === matched;\n if (unchanged) return undefined;\n\n // First time we see this player: it was built with the right initial\n // segment already, so just record state and don't trigger a fade.\n if (isFirst) {\n lastAppliedRef.current = { pose, matched };\n return undefined;\n }\n\n // Real transition — fade out, swap segment at the bottom of the\n // fade, then fade back in. This hides the playhead jump that\n // setSegment causes.\n setFading(true);\n const t = window.setTimeout(() => {\n if (pose) {\n const ranges = POSE_FRAME_RANGES[pose];\n const [start, end] = matched ? ranges.matched : ranges.pending;\n anim.setSegment(start, end);\n anim.play();\n } else {\n anim.resetSegment();\n anim.play();\n }\n lastAppliedRef.current = { pose, matched };\n setFading(false);\n }, SEGMENT_FADE_MS);\n return () => window.clearTimeout(t);\n }, [pose, matched, isTooDark, isLandscape]);\n\n return (\n <>\n <canvas\n ref={canvasRef}\n className={`active-liveness-overlay${fading ? ' is-fading' : ''}`}\n aria-hidden=\"true\"\n />\n <style>{`\n .active-liveness-overlay {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 90%;\n aspect-ratio: 1;\n pointer-events: none;\n opacity: 0.75;\n z-index: 2;\n /* Canvas elements default to inline; force block so width/height\n driven by CSS apply cleanly. */\n display: block;\n transition: opacity ${SEGMENT_FADE_MS}ms ease;\n /* No colour filters: the lottie asset already paints arrows in\n their correct colours (gray during the pending sub-range,\n green during the matched sub-range). The face/circle base art\n keeps its native palette. */\n }\n .active-liveness-overlay.is-fading {\n opacity: 0;\n }\n `}</style>\n </>\n );\n};\n\nexport default ActiveLivenessOverlay;\n","// Hand-converted Preact components for the four instruction-card\n// illustrations. They replace the previous `.svg?raw` +\n// `dangerouslySetInnerHTML` setup so the themed brand-pill colour can be\n// passed in as a real prop instead of a runtime string replace, and the\n// card markup stays inside Preact's normal reconciliation pass.\n//\n// Each component preserves the original SVG layout (47×79 viewBox, drop\n// shadow, rounded border, badge pill at the bottom). Only the \"Good\"\n// variant actually uses `themeColor`; the other three are intentionally\n// muted (grey pill, red disc) because they're the \"bad\" examples. They\n// still accept the prop for a consistent call-site API.\nimport type { FunctionComponent } from 'preact';\n\ninterface IllustrationProps {\n themeColor: string;\n}\n\nconst CardFrame: FunctionComponent<{ filterId: string }> = ({\n filterId,\n children,\n}) => (\n <>\n <g filter={`url(#${filterId})`}>\n <g clip-path={`url(#clip-${filterId})`}>\n <path\n d=\"M7 75C4.79086 75 3 73.2091 3 71L3 6C3 3.79086 4.79086 2 7 2H40C42.2091 2 44 3.79086 44 6V71C44 73.2091 42.2091 75 40 75H7Z\"\n fill=\"white\"\n fill-opacity=\"0.01\"\n shape-rendering=\"crispEdges\"\n />\n {children}\n </g>\n <path\n d=\"M3.5 71L3.5 6C3.5 4.06701 5.067 2.5 7 2.5H40C41.933 2.5 43.5 4.06701 43.5 6V71C43.5 72.933 41.933 74.5 40 74.5H7C5.067 74.5 3.5 72.933 3.5 71Z\"\n stroke=\"#E2E8F0\"\n shape-rendering=\"crispEdges\"\n />\n </g>\n <defs>\n <filter\n id={filterId}\n x=\"0\"\n y=\"0\"\n width=\"47\"\n height=\"79\"\n filterUnits=\"userSpaceOnUse\"\n color-interpolation-filters=\"sRGB\"\n >\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset dy=\"1\" />\n <feGaussianBlur stdDeviation=\"1\" />\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"BackgroundImageFix\"\n result={`effect1_${filterId}`}\n />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset dy=\"1\" />\n <feGaussianBlur stdDeviation=\"1.5\" />\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0\"\n result=\"effect2\"\n />\n <feBlend\n mode=\"normal\"\n in2={`effect1_${filterId}`}\n result={`effect2_${filterId}`}\n />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2={`effect2_${filterId}`}\n result=\"shape\"\n />\n </filter>\n <clipPath id={`clip-${filterId}`}>\n <path\n d=\"M7 75C4.79086 75 3 73.2091 3 71L3 6C3 3.79086 4.79086 2 7 2H40C42.2091 2 44 3.79086 44 6V71C44 73.2091 42.2091 75 40 75H7Z\"\n fill=\"white\"\n />\n </clipPath>\n <clipPath id={`inner-${filterId}`}>\n <rect\n width=\"73\"\n height=\"41\"\n fill=\"white\"\n transform=\"matrix(0 -1 1 0 3 75)\"\n />\n </clipPath>\n </defs>\n </>\n);\n\nexport const GoodIllustration: FunctionComponent<IllustrationProps> = ({\n themeColor,\n}) => {\n const filterId = 'illus-good';\n return (\n <svg\n width=\"47\"\n height=\"79\"\n viewBox=\"0 0 47 79\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <CardFrame filterId={filterId}>\n <g clip-path={`url(#inner-${filterId})`}>\n <rect\n width=\"73\"\n height=\"41\"\n transform=\"matrix(0 -1 1 0 3 75)\"\n fill=\"white\"\n />\n <rect x=\"11\" y=\"63\" width=\"25\" height=\"6\" rx=\"3\" fill={themeColor} />\n </g>\n <path\n d=\"M13.1627 34.2082C11.7528 33.7797 9.7785 34.5992 10.0317 37.3067C10.2437 39.5746 11.2385 41.636 13.674 41.0316C14.8844 40.7312 14.5892 39.4034 14.4749 37.6975C14.3606 35.9916 14.5726 34.6366 13.1627 34.2082Z\"\n fill=\"#2D2A29\"\n />\n <path\n d=\"M13.1627 34.2082C11.7528 33.7797 9.7785 34.5992 10.0317 37.3067C10.2437 39.5746 11.2385 41.636 13.674 41.0316\"\n fill=\"white\"\n />\n <path\n d=\"M13.1627 34.2082C11.7528 33.7797 9.7785 34.5992 10.0317 37.3067C10.2437 39.5746 11.2385 41.636 13.674 41.0316\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M34.0715 34.1352C35.4783 33.6969 37.4583 34.5025 37.224 37.2118C37.0278 39.481 36.0474 41.5494 33.6078 40.962C32.3953 40.6701 32.6813 39.3402 32.7836 37.6335C32.886 35.9269 32.6646 34.5734 34.0715 34.1352Z\"\n fill=\"#2D2A29\"\n />\n <path\n d=\"M34.0715 34.1352C35.4783 33.6969 37.4583 34.5025 37.224 37.2118C37.0278 39.481 36.0474 41.5494 33.6078 40.962\"\n fill=\"white\"\n />\n <path\n d=\"M34.0715 34.1352C35.4783 33.6969 37.4583 34.5025 37.224 37.2118C37.0278 39.481 36.0474 41.5494 33.6078 40.962\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M23.4663 21.0379C11.0066 21.0268 12.8912 33.0461 13.0652 36.3497C13.2392 39.6534 14.8428 50.5533 23.2995 50.8312C32.2383 51.125 33.9327 39.9604 34.1366 36.2762C34.3404 32.592 35.8168 21.0489 23.4663 21.0379Z\"\n fill=\"white\"\n />\n <path\n d=\"M23.4663 21.0379C11.0066 21.0268 12.8912 33.0461 13.0652 36.3497C13.2392 39.6534 14.8428 50.5533 23.2995 50.8312C32.2383 51.125 33.9327 39.9604 34.1366 36.2762C34.3404 32.592 35.8168 21.0489 23.4663 21.0379Z\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n />\n <path\n d=\"M18.9219 34.4335C19.4824 34.4316 19.9396 35.0307 19.9422 35.7706C19.9448 36.5105 19.4918 37.1129 18.9313 37.1148C18.3707 37.1168 17.9135 36.5176 17.9109 35.7777C17.9083 35.0378 18.3614 34.4355 18.9219 34.4335Z\"\n fill=\"#1F1C1C\"\n />\n <path\n d=\"M28.4014 34.4002C28.9619 34.3982 29.4191 34.9974 29.4217 35.7373C29.4243 36.4772 28.9713 37.0796 28.4108 37.0815C27.8502 37.0835 27.393 36.4843 27.3904 35.7444C27.3878 35.0045 27.8409 34.4022 28.4014 34.4002Z\"\n fill=\"#1F1C1C\"\n />\n <path\n d=\"M17.1864 33.6408C17.7256 32.8805 19.2007 32.618 19.824 32.7241\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M30.0238 33.5958C29.4792 32.8393 28.0023 32.5871 27.3798 32.6976\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M24.2757 35.6876C24.2757 35.6876 24.3958 39.0457 24.208 39.5609C24.0202 40.0762 23.2895 40.2412 23.1541 40.2417\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M22.6777 44.9406C23.0693 45.0812 24.1131 45.0812 24.5348 44.9406\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M20.8545 43.285C20.8545 43.285 21.432 43.5445 23.511 43.5352C25.7796 43.5252 26.5584 43.292 26.5584 43.292C26.5584 43.292 25.3932 43.4648 23.511 43.4751C21.8646 43.4838 20.8545 43.285 20.8545 43.285Z\"\n fill=\"white\"\n />\n <path\n d=\"M20.8545 43.285C20.8545 43.285 21.432 43.5445 23.511 43.5352C25.7796 43.5252 26.5584 43.292 26.5584 43.292C26.5584 43.292 25.3932 43.4648 23.511 43.4751C21.8646 43.4838 20.8545 43.285 20.8545 43.285Z\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </CardFrame>\n </svg>\n );\n};\n\n// The \"bad\" cards intentionally ignore `themeColor` — the pill stays muted\n// grey and a red ring crosses out the example. The prop is kept on the\n// interface so the call site is uniform.\nexport const AccessoriesIllustration: FunctionComponent<\n IllustrationProps\n> = () => {\n const filterId = 'illus-accessories';\n return (\n <svg\n width=\"47\"\n height=\"79\"\n viewBox=\"0 0 47 79\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <CardFrame filterId={filterId}>\n <g clip-path={`url(#inner-${filterId})`}>\n <rect\n width=\"73\"\n height=\"41\"\n transform=\"matrix(0 -1 1 0 3 75)\"\n fill=\"white\"\n />\n </g>\n <rect x=\"11\" y=\"63\" width=\"25\" height=\"6\" rx=\"3\" fill=\"#848282\" />\n <mask\n id={`acc-mask-0`}\n style={{ maskType: 'luminance' }}\n maskUnits=\"userSpaceOnUse\"\n x=\"-4\"\n y=\"8\"\n width=\"56\"\n height=\"54\"\n >\n <path\n d=\"M51.0264 8.25V61.6221H-3.75V8.25H51.0264Z\"\n fill=\"white\"\n stroke=\"white\"\n stroke-width=\"0.5\"\n />\n </mask>\n <g mask={`url(#acc-mask-0)`}>\n <path\n d=\"M23.5338 13.3046C32.3117 13.3046 39.4387 22.9976 39.4387 34.9359C39.4387 46.8743 32.3117 56.5673 23.5338 56.5673C14.7559 56.5673 7.62891 46.8743 7.62891 34.9359C7.62891 22.9976 14.7559 13.3046 23.5338 13.3046Z\"\n stroke=\"#EF4343\"\n stroke-width=\"0.5\"\n />\n </g>\n <mask\n id={`acc-mask-1`}\n style={{ maskType: 'luminance' }}\n maskUnits=\"userSpaceOnUse\"\n x=\"3\"\n y=\"9\"\n width=\"41\"\n height=\"52\"\n >\n <path d=\"M44 8.99994H3V60.8159H44V8.99994Z\" fill=\"white\" />\n </mask>\n <g mask={`url(#acc-mask-1)`}>\n <path\n d=\"M12.8166 32.7658C11.4254 32.3431 9.47724 33.1516 9.72709 35.8233C9.93631 38.0612 10.9179 40.0953 13.3212 39.499C14.5155 39.2025 14.2242 37.8923 14.1115 36.2089C13.9987 34.5256 14.2078 33.1886 12.8166 32.7658Z\"\n fill=\"#2D2A29\"\n />\n <path\n d=\"M12.8166 32.7658C11.4254 32.3431 9.47724 33.1516 9.72709 35.8233C9.93631 38.0612 10.9179 40.0953 13.3212 39.499\"\n fill=\"white\"\n />\n <path\n d=\"M12.8166 32.7658C11.4254 32.3431 9.47724 33.1516 9.72709 35.8233C9.93631 38.0612 10.9179 40.0953 13.3212 39.499\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M33.4488 32.694C34.837 32.2616 36.7908 33.0565 36.5596 35.7299C36.366 37.9691 35.3986 40.0101 32.9912 39.4305C31.7949 39.1424 32.077 37.8302 32.178 36.1461C32.279 34.462 32.0606 33.1265 33.4488 32.694Z\"\n fill=\"#2D2A29\"\n />\n <path\n d=\"M33.4488 32.694C34.837 32.2616 36.7908 33.0565 36.5596 35.7299C36.366 37.9691 35.3986 40.0101 32.9912 39.4305\"\n fill=\"white\"\n />\n <path\n d=\"M33.4488 32.694C34.837 32.2616 36.7908 33.0565 36.5596 35.7299C36.366 37.9691 35.3986 40.0101 32.9912 39.4305\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M22.9836 19.7699C10.6889 19.759 12.5485 31.6191 12.7202 34.8791C12.892 38.139 14.4742 48.8946 22.819 49.1688C31.6395 49.4587 33.3115 38.4419 33.5126 34.8065C33.7137 31.1711 35.1706 19.7808 22.9836 19.7699Z\"\n fill=\"white\"\n />\n <path\n d=\"M22.9836 19.7699C10.6889 19.759 12.5485 31.6191 12.7202 34.8791C12.892 38.139 14.4742 48.8946 22.819 49.1688C31.6395 49.4587 33.3115 38.4419 33.5126 34.8065C33.7137 31.1711 35.1706 19.7808 22.9836 19.7699Z\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n />\n <path\n d=\"M18.5002 32.9882C19.0534 32.9863 19.5045 33.5775 19.5071 34.3076C19.5096 35.0377 19.0626 35.6321 18.5095 35.634C17.9564 35.6359 17.5052 35.0447 17.5027 34.3146C17.5001 33.5845 17.9471 32.9901 18.5002 32.9882Z\"\n fill=\"#1F1C1C\"\n />\n <path\n d=\"M27.8543 32.9556C28.4074 32.9537 28.8585 33.5449 28.8611 34.275C28.8636 35.0051 28.4166 35.5995 27.8635 35.6014C27.3104 35.6034 26.8592 35.0121 26.8567 34.282C26.8541 33.5519 27.3011 32.9575 27.8543 32.9556Z\"\n fill=\"#1F1C1C\"\n />\n <path\n d=\"M16.7869 32.2059C17.319 31.4557 18.7745 31.1967 19.3896 31.3014\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M29.4544 32.1618C28.917 31.4153 27.4597 31.1664 26.8454 31.2755\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M23.7821 34.2257C23.7821 34.2257 23.9006 37.5393 23.7153 38.0477C23.53 38.5561 22.809 38.719 22.6753 38.7195\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M22.2061 43.3561C22.5924 43.495 23.6224 43.495 24.0386 43.3561\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M20.4067 41.7226C20.4067 41.7226 20.9766 41.9787 23.0281 41.9695C25.2666 41.9597 26.0352 41.7296 26.0352 41.7296C26.0352 41.7296 24.8853 41.9001 23.0281 41.9102C21.4035 41.9188 20.4067 41.7226 20.4067 41.7226Z\"\n fill=\"white\"\n />\n <path\n d=\"M20.4067 41.7226C20.4067 41.7226 20.9766 41.9787 23.0281 41.9695C25.2666 41.9597 26.0352 41.7296 26.0352 41.7296C26.0352 41.7296 24.8853 41.9001 23.0281 41.9102C21.4035 41.9188 20.4067 41.7226 20.4067 41.7226Z\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.7529 37.8635C14.7529 37.8635 13.7216 37.769 12.1802 31.7942\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M31.9355 37.8037C31.9355 37.8037 33.1531 35.1909 34.0523 31.9394\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M30.1131 44.7719C32.8699 42.1709 32.6121 41.0965 33.3281 39.0691\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15.9583 44.3053C12.9669 41.7936 13.5822 41.0725 12.9102 39.1367\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M23.5395 35.7791C22.209 35.8127 20.8818 36.8009 19.8988 36.9489C18.9158 37.097 14.2002 36.9399 14.2002 36.9399C14.2002 36.9399 14.8418 38.8845 14.5395 43.456C14.947 44.1777 18.2676 49.5368 23.7893 49.3449C29.3426 49.1519 30.0401 45.5982 31.7525 43.445C31.4236 40.033 32.4235 36.7895 32.4235 36.7895C32.4235 36.7895 27.9696 37.0075 27.1879 36.8367C26.4063 36.6659 24.87 35.7456 23.5395 35.7791Z\"\n fill=\"#8C8686\"\n />\n <path\n d=\"M23.5395 35.7791C22.209 35.8127 20.8818 36.8009 19.8988 36.9489C18.9158 37.097 14.2002 36.9399 14.2002 36.9399C14.2002 36.9399 14.8418 38.8845 14.5395 43.456C14.947 44.1777 18.2676 49.5368 23.7893 49.3449C29.3426 49.1519 30.0401 45.5982 31.7525 43.445C31.4236 40.033 32.4235 36.7895 32.4235 36.7895C32.4235 36.7895 27.9696 37.0075 27.1879 36.8367C26.4063 36.6659 24.87 35.7456 23.5395 35.7791Z\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15.9506 41.186C15.9506 41.186 20.9811 40.4164 23.2088 40.4954C25.2934 40.5693 28.8217 40.8229 30.0955 41.1077\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M16.7091 43.0347C16.7091 43.0347 20.4734 44.1497 23.1346 44.1114C25.2202 44.0815 28.5125 43.4274 29.5233 42.961\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M16.8896 44.9433C16.8896 44.9433 20.1057 46.4363 23.2297 46.3964C25.3155 46.3699 28.3463 45.424 29.3571 44.9576\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M24.4977 33.6644C23.735 33.2493 22.1671 33.3089 21.8622 33.6667\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n />\n <path\n d=\"M20.3603 31.5591C19.1688 31.1374 15.5236 31.2855 13.8285 31.6531C13.3137 31.7646 12.2788 32.0196 12.2788 32.0196C12.2788 32.0196 12.1192 32.3118 12.3143 32.4721C12.5095 32.6324 12.9966 32.9201 13.0624 33.0813C13.1282 33.2426 13.2715 35.2465 13.3093 36.0224C13.347 36.7983 13.9747 38.7019 17.3064 38.808C22.1564 38.9624 21.9392 34.8696 21.9937 33.9244C22.0514 32.9215 21.1222 31.8285 20.3603 31.5591Z\"\n fill=\"#1F1C1C\"\n />\n <path\n d=\"M20.3603 31.5591C19.1688 31.1374 15.5236 31.2855 13.8285 31.6531C13.3137 31.7646 12.2788 32.0196 12.2788 32.0196C12.2788 32.0196 12.1192 32.3118 12.3143 32.4721C12.5095 32.6324 12.9966 32.9201 13.0624 33.0813C13.1282 33.2426 13.2715 35.2465 13.3093 36.0224C13.347 36.7983 13.9747 38.7019 17.3064 38.808C22.1564 38.9624 21.9392 34.8696 21.9937 33.9244C22.0514 32.9215 21.1222 31.8285 20.3603 31.5591Z\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n />\n <path\n d=\"M25.8574 31.5207C27.0429 31.0824 30.6898 31.1796 32.3898 31.5235C32.9062 31.6277 33.9445 31.8683 33.9445 31.8683C33.9445 31.8683 34.1082 32.1582 33.9153 32.3213C33.7224 32.4843 33.2394 32.7787 33.1759 32.9409C33.1123 33.103 32.997 35.1088 32.9701 35.8851C32.9431 36.6614 32.342 38.5736 29.0122 38.7262C24.1648 38.9484 24.3248 34.853 24.2572 33.9086C24.1855 32.9066 25.0993 31.8007 25.8574 31.5207Z\"\n fill=\"#1F1C1C\"\n />\n <path\n d=\"M25.8574 31.5207C27.0429 31.0824 30.6898 31.1796 32.3898 31.5235C32.9062 31.6277 33.9445 31.8683 33.9445 31.8683C33.9445 31.8683 34.1082 32.1582 33.9153 32.3213C33.7224 32.4843 33.2394 32.7787 33.1759 32.9409C33.1123 33.103 32.997 35.1088 32.9701 35.8851C32.9431 36.6614 32.342 38.5736 29.0122 38.7262C24.1648 38.9484 24.3248 34.853 24.2572 33.9086C24.1855 32.9066 25.0993 31.8007 25.8574 31.5207Z\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n />\n </g>\n </CardFrame>\n </svg>\n );\n};\n\nexport const MultipleFacesIllustration: FunctionComponent<\n IllustrationProps\n> = () => {\n const filterId = 'illus-multiple';\n return (\n <svg\n width=\"47\"\n height=\"79\"\n viewBox=\"0 0 47 79\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <CardFrame filterId={filterId}>\n <g clip-path={`url(#inner-${filterId})`}>\n <rect\n width=\"73\"\n height=\"41\"\n transform=\"matrix(0 -1 1 0 3 75)\"\n fill=\"white\"\n />\n <rect x=\"11\" y=\"63\" width=\"25\" height=\"6\" rx=\"3\" fill=\"#848282\" />\n <path\n d=\"M23.5338 13.3046C32.3117 13.3046 39.4387 22.9976 39.4387 34.9359C39.4387 46.8743 32.3117 56.5673 23.5338 56.5673C14.7559 56.5673 7.62891 46.8743 7.62891 34.9359C7.62891 22.9976 14.7559 13.3046 23.5338 13.3046Z\"\n stroke=\"#EF4343\"\n stroke-width=\"0.5\"\n />\n <path\n d=\"M26.1612 35.0191C25.5397 34.8303 24.6695 35.1915 24.7811 36.3849C24.8745 37.3846 25.313 38.2932 26.3866 38.0268C26.9201 37.8944 26.79 37.3091 26.7396 36.5572C26.6892 35.8052 26.7826 35.208 26.1612 35.0191Z\"\n fill=\"#2D2A29\"\n />\n <path\n d=\"M26.1612 35.0191C25.5397 34.8303 24.6695 35.1915 24.7811 36.3849C24.8745 37.3846 25.313 38.2932 26.3866 38.0268\"\n fill=\"white\"\n />\n <path\n d=\"M26.1612 35.0191C25.5397 34.8303 24.6695 35.1915 24.7811 36.3849C24.8745 37.3846 25.313 38.2932 26.3866 38.0268\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M35.3777 34.987C35.9979 34.7938 36.8706 35.1489 36.7673 36.3431C36.6809 37.3434 36.2487 38.2551 35.1734 37.9962C34.6389 37.8675 34.765 37.2813 34.8101 36.529C34.8552 35.7768 34.7576 35.1802 35.3777 34.987Z\"\n fill=\"#2D2A29\"\n />\n <path\n d=\"M35.3777 34.987C35.9979 34.7938 36.8706 35.1489 36.7673 36.3431C36.6809 37.3434 36.2487 38.2551 35.1734 37.9962\"\n fill=\"white\"\n />\n <path\n d=\"M35.3777 34.987C35.9979 34.7938 36.8706 35.1489 36.7673 36.3431C36.6809 37.3434 36.2487 38.2551 35.1734 37.9962\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M30.7029 29.2139C25.2108 29.209 26.0415 34.507 26.1182 35.9632C26.1949 37.4194 26.9017 42.2239 30.6294 42.3465C34.5695 42.476 35.3164 37.5547 35.4062 35.9308C35.4961 34.3068 36.1469 29.2187 30.7029 29.2139Z\"\n fill=\"white\"\n />\n <path\n d=\"M30.7029 29.2139C25.2108 29.209 26.0415 34.507 26.1182 35.9632C26.1949 37.4194 26.9017 42.2239 30.6294 42.3465C34.5695 42.476 35.3164 37.5547 35.4062 35.9308C35.4961 34.3068 36.1469 29.2187 30.7029 29.2139Z\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n />\n <path\n d=\"M28.7001 35.1184C28.9472 35.1176 29.1487 35.3817 29.1499 35.7078C29.151 36.034 28.9513 36.2995 28.7043 36.3003C28.4572 36.3012 28.2556 36.0371 28.2545 35.7109C28.2534 35.3848 28.4531 35.1193 28.7001 35.1184Z\"\n fill=\"#1F1C1C\"\n />\n <path\n d=\"M32.8784 35.1038C33.1254 35.103 33.327 35.3671 33.3281 35.6932C33.3292 36.0194 33.1296 36.2849 32.8825 36.2857C32.6354 36.2866 32.4339 36.0225 32.4327 35.6964C32.4316 35.3702 32.6313 35.1047 32.8784 35.1038Z\"\n fill=\"#1F1C1C\"\n />\n <path\n d=\"M27.9345 34.769C28.1722 34.4339 28.8224 34.3181 29.0972 34.3649\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M33.5932 34.7492C33.3532 34.4158 32.7022 34.3046 32.4278 34.3533\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M31.0595 35.6713C31.0595 35.6713 31.1124 37.1515 31.0297 37.3786C30.9469 37.6057 30.6248 37.6785 30.5651 37.6787\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M30.3555 39.7499C30.528 39.8119 30.9882 39.8119 31.1741 39.7499\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M29.5518 39.0201C29.5518 39.0201 29.8063 39.1345 30.7227 39.1304C31.7227 39.126 32.066 39.0233 32.066 39.0233C32.066 39.0233 31.5524 39.0994 30.7227 39.104C29.997 39.1078 29.5518 39.0201 29.5518 39.0201Z\"\n fill=\"white\"\n />\n <path\n d=\"M29.5518 39.0201C29.5518 39.0201 29.8063 39.1345 30.7227 39.1304C31.7227 39.126 32.066 39.0233 32.066 39.0233C32.066 39.0233 31.5524 39.0994 30.7227 39.104C29.997 39.1078 29.5518 39.0201 29.5518 39.0201Z\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M13.2099 37.2291C12.2247 36.9297 10.8452 37.5023 11.0222 39.3941C11.1703 40.9788 11.8654 42.4192 13.5672 41.9969C14.4129 41.787 14.2067 40.8592 14.1268 39.6672C14.0469 38.4752 14.195 37.5284 13.2099 37.2291Z\"\n fill=\"#2D2A29\"\n />\n <path\n d=\"M13.2099 37.2291C12.2247 36.9297 10.8452 37.5023 11.0222 39.3941C11.1703 40.9788 11.8654 42.4192 13.5672 41.9969\"\n fill=\"white\"\n />\n <path\n d=\"M13.2099 37.2291C12.2247 36.9297 10.8452 37.5023 11.0222 39.3941C11.1703 40.9788 11.8654 42.4192 13.5672 41.9969\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M27.8199 37.1781C28.803 36.8719 30.1865 37.4348 30.0227 39.3278C29.8857 40.9135 29.2006 42.3587 27.496 41.9483C26.6488 41.7443 26.8485 40.8151 26.9201 39.6225C26.9916 38.43 26.8369 37.4843 27.8199 37.1781Z\"\n fill=\"#2D2A29\"\n />\n <path\n d=\"M27.8199 37.1781C28.803 36.8719 30.1865 37.4348 30.0227 39.3278C29.8857 40.9135 29.2006 42.3587 27.496 41.9483\"\n fill=\"white\"\n />\n <path\n d=\"M27.8199 37.1781C28.803 36.8719 30.1865 37.4348 30.0227 39.3278C29.8857 40.9135 29.2006 42.3587 27.496 41.9483\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M20.4093 28.0265C11.7033 28.0187 13.0201 36.4171 13.1417 38.7255C13.2633 41.0339 14.3837 48.65 20.2927 48.8442C26.5387 49.0495 27.7226 41.2484 27.865 38.6741C28.0075 36.0998 29.0391 28.0342 20.4093 28.0265Z\"\n fill=\"white\"\n />\n <path\n d=\"M20.4093 28.0265C11.7033 28.0187 13.0201 36.4171 13.1417 38.7255C13.2633 41.0339 14.3837 48.65 20.2927 48.8442C26.5387 49.0495 27.7226 41.2484 27.865 38.6741C28.0075 36.0998 29.0391 28.0342 20.4093 28.0265Z\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n />\n <path\n d=\"M17.2341 37.3864C17.6258 37.3851 17.9452 37.8037 17.947 38.3207C17.9488 38.8377 17.6323 39.2586 17.2406 39.26C16.849 39.2613 16.5295 38.8427 16.5277 38.3257C16.5259 37.8087 16.8424 37.3878 17.2341 37.3864Z\"\n fill=\"#1F1C1C\"\n />\n <path\n d=\"M23.8576 37.3633C24.2493 37.3619 24.5688 37.7806 24.5706 38.2976C24.5724 38.8146 24.2558 39.2355 23.8642 39.2368C23.4725 39.2382 23.153 38.8196 23.1512 38.3026C23.1494 37.7855 23.466 37.3647 23.8576 37.3633Z\"\n fill=\"#1F1C1C\"\n />\n <path\n d=\"M16.0213 36.8325C16.3981 36.3013 17.4288 36.1178 17.8643 36.192\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M24.9915 36.8012C24.611 36.2726 23.5791 36.0964 23.1441 36.1736\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M20.975 38.2628C20.975 38.2628 21.0589 40.6092 20.9277 40.9692C20.7965 41.3292 20.2859 41.4446 20.1913 41.4449\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M19.8584 44.7282C20.132 44.8265 20.8614 44.8265 21.156 44.7282\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M18.5845 43.5715C18.5845 43.5715 18.988 43.7528 20.4407 43.7463C22.0258 43.7393 22.57 43.5764 22.57 43.5764C22.57 43.5764 21.7558 43.6972 20.4407 43.7043C19.2903 43.7104 18.5845 43.5715 18.5845 43.5715Z\"\n fill=\"white\"\n />\n <path\n d=\"M18.5845 43.5715C18.5845 43.5715 18.988 43.7528 20.4407 43.7463C22.0258 43.7393 22.57 43.5764 22.57 43.5764C22.57 43.5764 21.7558 43.6972 20.4407 43.7043C19.2903 43.7104 18.5845 43.5715 18.5845 43.5715Z\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </g>\n </CardFrame>\n </svg>\n );\n};\n\nexport const PoorLightingIllustration: FunctionComponent<\n IllustrationProps\n> = () => {\n const filterId = 'illus-poor';\n return (\n <svg\n width=\"47\"\n height=\"79\"\n viewBox=\"0 0 47 79\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <CardFrame filterId={filterId}>\n <g clip-path={`url(#inner-${filterId})`}>\n <rect\n width=\"73\"\n height=\"41\"\n transform=\"matrix(0 -1 1 0 3 75)\"\n fill=\"white\"\n />\n <path\n d=\"M13.1627 34.2082C11.7528 33.7797 9.7785 34.5992 10.0317 37.3067C10.2437 39.5746 11.2385 41.636 13.674 41.0316C14.8844 40.7312 14.5892 39.4034 14.4749 37.6975C14.3606 35.9916 14.5726 34.6366 13.1627 34.2082Z\"\n fill=\"#2D2A29\"\n />\n <path\n d=\"M13.1627 34.2082C11.7528 33.7797 9.7785 34.5992 10.0317 37.3067C10.2437 39.5746 11.2385 41.636 13.674 41.0316\"\n fill=\"white\"\n />\n <path\n d=\"M13.1627 34.2082C11.7528 33.7797 9.7785 34.5992 10.0317 37.3067C10.2437 39.5746 11.2385 41.636 13.674 41.0316\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M34.0715 34.1352C35.4783 33.6969 37.4583 34.5025 37.224 37.2118C37.0278 39.481 36.0474 41.5494 33.6078 40.962C32.3953 40.6701 32.6813 39.3402 32.7836 37.6335C32.886 35.9269 32.6646 34.5734 34.0715 34.1352Z\"\n fill=\"#2D2A29\"\n />\n <path\n d=\"M34.0715 34.1352C35.4783 33.6969 37.4583 34.5025 37.224 37.2118C37.0278 39.481 36.0474 41.5494 33.6078 40.962\"\n fill=\"white\"\n />\n <path\n d=\"M34.0715 34.1352C35.4783 33.6969 37.4583 34.5025 37.224 37.2118C37.0278 39.481 36.0474 41.5494 33.6078 40.962\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M23.4663 21.0379C11.0066 21.0268 12.8912 33.0461 13.0652 36.3497C13.2392 39.6534 14.8428 50.5533 23.2995 50.8312C32.2383 51.125 33.9327 39.9604 34.1366 36.2762C34.3404 32.592 35.8168 21.0489 23.4663 21.0379Z\"\n fill=\"white\"\n />\n <path\n d=\"M23.4663 21.0379C11.0066 21.0268 12.8912 33.0461 13.0652 36.3497C13.2392 39.6534 14.8428 50.5533 23.2995 50.8312C32.2383 51.125 33.9327 39.9604 34.1366 36.2762C34.3404 32.592 35.8168 21.0489 23.4663 21.0379Z\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n />\n <path\n d=\"M18.9219 34.4335C19.4824 34.4316 19.9396 35.0307 19.9422 35.7706C19.9448 36.5105 19.4918 37.1129 18.9313 37.1148C18.3707 37.1168 17.9135 36.5176 17.9109 35.7777C17.9083 35.0378 18.3614 34.4355 18.9219 34.4335Z\"\n fill=\"#1F1C1C\"\n />\n <path\n d=\"M28.4014 34.4002C28.9619 34.3982 29.4191 34.9974 29.4217 35.7373C29.4243 36.4772 28.9713 37.0796 28.4108 37.0815C27.8502 37.0835 27.393 36.4843 27.3904 35.7444C27.3878 35.0045 27.8409 34.4022 28.4014 34.4002Z\"\n fill=\"#1F1C1C\"\n />\n <path\n d=\"M17.1864 33.6408C17.7256 32.8805 19.2007 32.618 19.824 32.7241\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M30.0238 33.5958C29.4792 32.8393 28.0023 32.5871 27.3798 32.6976\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M24.2757 35.6876C24.2757 35.6876 24.3958 39.0457 24.208 39.5609C24.0202 40.0762 23.2895 40.2412 23.1541 40.2417\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M22.6777 44.9406C23.0693 45.0812 24.1131 45.0812 24.5348 44.9406\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M20.8545 43.285C20.8545 43.285 21.432 43.5445 23.511 43.5352C25.7796 43.5252 26.5584 43.292 26.5584 43.292C26.5584 43.292 25.3932 43.4648 23.511 43.4751C21.8646 43.4838 20.8545 43.285 20.8545 43.285Z\"\n fill=\"white\"\n />\n <path\n d=\"M20.8545 43.285C20.8545 43.285 21.432 43.5445 23.511 43.5352C25.7796 43.5252 26.5584 43.292 26.5584 43.292C26.5584 43.292 25.3932 43.4648 23.511 43.4751C21.8646 43.4838 20.8545 43.285 20.8545 43.285Z\"\n stroke=\"#1F1C1C\"\n stroke-width=\"0.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M23.9049 13C32.6828 13 39.8098 22.693 39.8098 34.6314C39.8098 46.5697 32.6828 56.2627 23.9049 56.2627C15.127 56.2627 8 46.5697 8 34.6314C8 22.693 15.127 13 23.9049 13Z\"\n fill=\"#0D0D0D\"\n fill-opacity=\"0.7\"\n stroke=\"#EF4343\"\n stroke-width=\"0.5\"\n />\n </g>\n <rect x=\"11\" y=\"63\" width=\"25\" height=\"6\" rx=\"3\" fill=\"#848282\" />\n </CardFrame>\n </svg>\n );\n};\n\n// ─── Inline glyphs used by ConsentView ────────────────────────────────────\n//\n// Kept here (rather than as separate `.svg` URL imports) because they need\n// to live inside Preact's reconciliation tree — the parent wrapper handles\n// state-driven styling (checked tick, rotated chevron) and we want a single\n// place to audit any branded artwork.\n\n/**\n * Official Smile ID brand mark — blue square with the orange accent.\n * Static; size matches the 40×40 logo lockup used in the consent header.\n */\nexport const SmileIdLogo: FunctionComponent = () => (\n <svg\n viewBox=\"48 0 8 8\"\n width=\"40\"\n height=\"40\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path d=\"M52.2123 3.88737H48V7.86846H52.2123V3.88737Z\" fill=\"#001096\" />\n <path\n d=\"M53.2359 0C53.2165 0 53.1975 0.00201727 53.1786 0.00252159C53.1591 0.00252159 53.1402 0 53.1207 0C52.0457 0 51.0869 0.708567 51.0869 2.27044V3.8888H55.2882V2.27044C55.2882 0.708567 54.3174 0 53.2359 0Z\"\n fill=\"#FF9B00\"\n />\n </svg>\n);\n\n/** Checkbox tick. Wrapper supplies the background/colour transitions. */\nexport const CheckIcon: FunctionComponent = () => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <polyline\n points=\"20 6 9 17 4 12\"\n stroke=\"#F9F0E7\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n);\n\n/** Downward chevron. Rotation is applied by the parent's `data-open`. */\nexport const ChevronDownIcon: FunctionComponent = () => (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <polyline\n points=\"6 9 12 15 18 9\"\n stroke=\"#F9F0E7\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n);\n","import type { FunctionComponent } from 'preact';\nimport { useEffect, useRef } from 'preact/hooks';\n\ninterface BackNavigationProps {\n onBack: () => void;\n themeColor?: string;\n}\n\n/**\n * Thin Preact wrapper around <smileid-navigation hide-close> that bridges\n * the element's custom `navigation.back` event to a Preact callback prop.\n * Kept in ESS so callers don't have to think about the underlying element.\n */\nexport const BackNavigation: FunctionComponent<BackNavigationProps> = ({\n onBack,\n themeColor,\n}) => {\n const ref = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return undefined;\n const handler = () => onBack();\n el.addEventListener('navigation.back', handler);\n return () => el.removeEventListener('navigation.back', handler);\n }, [onBack]);\n\n return (\n // @ts-expect-error custom element\n <smileid-navigation\n ref={ref}\n hide-close=\"\"\n theme-color={themeColor || undefined}\n class=\"ess-back-navigation\"\n style={{\n // Match the ESS design: solid dark circle with a white arrow,\n // overriding Navigation's default translucent grey pill.\n '--smileid-navigation-button-bg': '#1f1f1f',\n '--smileid-navigation-icon-color': '#FFFFFF',\n }}\n />\n );\n};\n\nexport default BackNavigation;\n","import type { FunctionComponent } from 'preact';\nimport { useEffect, useRef } from 'preact/hooks';\nimport { IconLoader2 } from '@tabler/icons-preact';\nimport { DotLottie } from '@lottiefiles/dotlottie-web';\nimport { t } from '../../../../../domain/localisation';\n// eslint-disable-next-line import/no-unresolved\nimport activeLivenessSrc from '../assets/active_liveness_animation.lottie';\n// Illustration cards are real Preact components — the brand-blue pill in\n// the \"Good\" example takes `themeColor` as a prop, which avoids the\n// previous `.svg?raw` + `dangerouslySetInnerHTML` recolour and keeps the\n// markup inside Preact's normal reconciliation.\nimport {\n GoodIllustration,\n AccessoriesIllustration,\n MultipleFacesIllustration,\n PoorLightingIllustration,\n} from '../assets/illustrations';\nimport { BackNavigation } from './BackNavigation';\n\ntype IllustrationKind =\n | 'good'\n | 'accessories'\n | 'multipleFaces'\n | 'poorLighting';\n\ninterface Guideline {\n status: 'good' | 'bad';\n label: string;\n illustration: IllustrationKind;\n}\n\nconst GUIDELINES: Guideline[] = [\n {\n status: 'good',\n label: 'selfie.ess.instructions.tile.good',\n illustration: 'good',\n },\n {\n status: 'bad',\n label: 'selfie.ess.instructions.tile.accessories',\n illustration: 'accessories',\n },\n {\n status: 'bad',\n label: 'selfie.ess.instructions.tile.multipleFaces',\n illustration: 'multipleFaces',\n },\n {\n status: 'bad',\n label: 'selfie.ess.instructions.tile.poorLighting',\n illustration: 'poorLighting',\n },\n];\n\nconst ILLUSTRATION_COMPONENTS: Record<\n IllustrationKind,\n FunctionComponent<{ themeColor: string }>\n> = {\n good: GoodIllustration,\n accessories: AccessoriesIllustration,\n multipleFaces: MultipleFacesIllustration,\n poorLighting: PoorLightingIllustration,\n};\n\ninterface CaptureGuidelinesProps {\n themeColor: string;\n hideAttribution: boolean;\n /**\n * When false, the Continue button shows a spinner and is disabled —\n * the camera + Mediapipe model are still loading in the background.\n */\n isReady?: boolean;\n onContinue: () => void;\n onBack?: () => void;\n}\n\nconst HeroAnimation: FunctionComponent = () => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const animRef = useRef<DotLottie | null>(null);\n\n useEffect(() => {\n if (!canvasRef.current) return undefined;\n const anim = new DotLottie({\n canvas: canvasRef.current,\n src: activeLivenessSrc,\n loop: true,\n autoplay: true,\n renderConfig: { autoResize: true },\n });\n animRef.current = anim;\n return () => {\n anim.destroy();\n animRef.current = null;\n };\n }, []);\n\n return (\n <canvas\n ref={canvasRef}\n aria-hidden=\"true\"\n style={{\n width: '120%',\n height: '120%',\n display: 'block',\n }}\n />\n );\n};\n\nexport const CaptureGuidelines: FunctionComponent<CaptureGuidelinesProps> = ({\n themeColor,\n hideAttribution,\n isReady = true,\n onContinue,\n onBack,\n}) => {\n // Defensive scroll reset: ensures the guidelines screen always starts\n // at the top, even if the parent page was scrolled by a previous view.\n useEffect(() => {\n try {\n window.scrollTo({ top: 0, left: 0, behavior: 'auto' });\n } catch {\n window.scrollTo(0, 0);\n }\n }, []);\n\n return (\n <div className=\"enhanced-instructions\">\n {onBack && <BackNavigation onBack={onBack} themeColor={themeColor} />}\n\n <h1 className=\"instructions-title\">\n {t('selfie.ess.instructions.titlePrefix')}{' '}\n <span style={{ color: themeColor }}>\n {t('selfie.ess.instructions.titleAccent')}\n </span>\n </h1>\n\n <div className=\"hero-oval\">\n <HeroAnimation />\n </div>\n\n <div className=\"guidelines-header\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={themeColor}\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"9 12 11 14 15 10\" />\n </svg>\n <span>{t('selfie.ess.instructions.guidelinesHeader')}</span>\n </div>\n\n <div className=\"guidelines-grid\">\n {GUIDELINES.map((g) => {\n const Illustration = ILLUSTRATION_COMPONENTS[g.illustration];\n return (\n <div className=\"guideline-tile\" key={g.label}>\n <div className=\"tile-illustration\">\n <div className=\"tile-svg\">\n <Illustration themeColor={themeColor} />\n </div>\n <span\n className={`tile-badge ${g.status === 'good' ? 'badge-good' : 'badge-bad'}`}\n aria-hidden=\"true\"\n >\n {g.status === 'good' ? '✓' : '✕'}\n </span>\n </div>\n {/* Label sits below the artwork in HTML so it can be themed and translated. */}\n <span className=\"tile-label\" style={{ color: themeColor }}>\n {t(g.label)}\n </span>\n </div>\n );\n })}\n </div>\n\n <div className=\"instructions-footer\">\n <button\n type=\"button\"\n className=\"continue-button\"\n style={{ background: themeColor, opacity: isReady ? 1 : 0.85 }}\n onClick={onContinue}\n disabled={!isReady}\n aria-busy={!isReady}\n >\n {isReady ? (\n t('selfie.ess.instructions.continue')\n ) : (\n <span className=\"continue-loading\">\n <IconLoader2 size={20} stroke={2.5} color=\"white\" />\n <span>{t('selfie.ess.instructions.settingUpCamera')}</span>\n </span>\n )}\n </button>\n </div>\n\n {!hideAttribution && (\n // @ts-expect-error preact-custom-element types\n <powered-by-smile-id />\n )}\n\n <style>{`\n :host { display: block; height: 100%; }\n .enhanced-instructions {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n overflow: hidden;\n padding: clamp(1.5rem, 3.5dvh, 2.25rem) clamp(0.75rem, 4vw, 1rem) 0;\n font-family: \"DM Sans\", system-ui, sans-serif;\n background: #F5F7FA;\n box-sizing: border-box;\n }\n .ess-back-navigation {\n position: absolute;\n top: 1.5rem;\n left: 1rem;\n }\n .instructions-title {\n font-family: \"DM Sans\", system-ui, sans-serif;\n font-size: clamp(18px, 3dvh, 24px);\n font-style: normal;\n font-weight: 800;\n line-height: 1.25;\n letter-spacing: -0.6px;\n margin: clamp(0.25rem, 0.8dvh, 0.5rem) 0 clamp(0.15rem, 0.5dvh, 0.25rem);\n align-self: stretch;\n text-align: left;\n color: #0F172B;\n flex-shrink: 0;\n }\n /* Back nav (absolute, top:1.5rem, 40px tall) ends at ~62px. The title\n starts after the container's top padding plus this margin, leaving\n roughly a 24px gap between the button's bottom edge and the title. */\n .ess-back-navigation + .instructions-title {\n margin-top: 4rem;\n }\n .hero-oval {\n width: clamp(135px, 22dvh, 195px);\n height: clamp(160px, 26dvh, 230px);\n max-width: 100%;\n margin: clamp(0.5rem, 1.5dvh, 1rem) 0 0;\n border: 2px solid #C4C4C4;\n border-radius: 50%;\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #F5F7FA;\n flex-shrink: 0;\n }\n .guidelines-header {\n display: flex;\n align-items: center;\n gap: 0.4rem;\n align-self: flex-start;\n color: #0F172B;\n font-family: \"DM Sans\", system-ui, sans-serif;\n font-size: clamp(10px, 1.4dvh, 11px);\n font-style: normal;\n font-weight: 700;\n line-height: 1.5;\n letter-spacing: 0.55px;\n text-transform: uppercase;\n margin: clamp(0.75rem, 2dvh, 1.25rem) 0 clamp(0.4rem, 1dvh, 0.75rem);\n flex-shrink: 0;\n }\n .guidelines-grid {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: clamp(12px, 4vw, 44px);\n width: 100%;\n flex-shrink: 0;\n }\n .guideline-tile {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n .tile-illustration {\n position: relative;\n width: 100%;\n aspect-ratio: 47 / 79;\n }\n .tile-svg {\n width: 100%;\n height: 100%;\n display: block;\n }\n .tile-svg svg {\n width: 100%;\n height: 100%;\n display: block;\n }\n .tile-label {\n margin-top: 0.5rem;\n text-align: center;\n font-family: \"DM Sans\", system-ui, sans-serif;\n font-size: 10px;\n font-style: normal;\n font-weight: 500;\n line-height: 10px;\n letter-spacing: 0.117px;\n }\n .tile-badge {\n position: absolute;\n top: -6px;\n right: -6px;\n width: 22px;\n height: 22px;\n border-radius: 50%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n color: white;\n font-weight: 700;\n }\n .badge-good { background: #1DB954; }\n .badge-bad { background: #E5484D; }\n .instructions-footer {\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: 0.75rem;\n margin-top: clamp(16px, 3dvh, 28px);\n flex-shrink: 0;\n }\n .enhanced-instructions > powered-by-smile-id {\n display: block;\n width: 100%;\n margin-top: 0;\n padding: clamp(0.4rem, 1dvh, 0.6rem) 0;\n background: #F5F7FA;\n flex-shrink: 0;\n }\n .continue-button {\n width: 100%;\n padding: clamp(0.65rem, 1.6dvh, 1rem) 2rem;\n color: white;\n border: none;\n border-radius: 2.5rem;\n font-size: clamp(0.95rem, 1.8dvh, 1.05rem);\n font-weight: 600;\n font-family: inherit;\n cursor: pointer;\n }\n .continue-button:disabled { cursor: progress; }\n .continue-loading {\n display: inline-flex;\n align-items: center;\n gap: 0.5rem;\n justify-content: center;\n }\n .continue-loading svg { animation: ess-instr-spin 1.1s linear infinite; }\n @keyframes ess-instr-spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n </div>\n );\n};\n\nexport default CaptureGuidelines;\n","import type { FunctionComponent } from 'preact';\nimport { t } from '../../../../../domain/localisation';\n\nexport type SubmissionViewMode = 'review' | 'submitting' | 'success' | 'error';\n\ninterface SubmissionViewProps {\n imageSrc: string;\n mirror: boolean;\n themeColor: string;\n hideAttribution: boolean;\n mode: SubmissionViewMode;\n /** Optional supporting copy under the title (e.g. failure reason). */\n message?: string;\n onConfirm?: () => void;\n onRetake?: () => void;\n onContinue?: () => void;\n onExit?: () => void;\n onBack?: () => void;\n}\n\nconst TickIcon: FunctionComponent = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"64\"\n height=\"64\"\n viewBox=\"0 0 64 64\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <rect width=\"64\" height=\"64\" rx=\"32\" fill=\"#2CC05C\" />\n <path\n d=\"M27.1566 42.6663C26.4724 42.6663 25.7882 42.4088 25.2481 41.8568L19.4503 35.9324C18.9481 35.4131 18.6664 34.7123 18.6664 33.9821C18.6664 33.252 18.9481 32.5512 19.4503 32.0319C20.4946 30.9647 22.2232 30.9647 23.2675 32.0319L27.1566 36.006L40.7327 22.1334C41.777 21.0662 43.5055 21.0662 44.5498 22.1334C45.5941 23.2005 45.5941 24.9668 44.5498 26.0339L29.0652 41.8568C28.525 42.4088 27.8408 42.6663 27.1566 42.6663Z\"\n fill=\"white\"\n />\n </svg>\n);\n\nconst CrossIcon: FunctionComponent = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"64\"\n height=\"64\"\n viewBox=\"0 0 64 64\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <rect width=\"64\" height=\"64\" rx=\"32\" fill=\"#EC221F\" />\n <path\n d=\"M36.1146 31.9953L45.0425 22.6828C46.1682 21.5086 46.1682 19.5651 45.0425 18.3909C44.4947 17.8261 43.7555 17.5094 42.9852 17.5094C42.215 17.5094 41.4758 17.8261 40.9279 18.3909L32 27.7035L23.0721 18.3909C22.5242 17.8261 21.785 17.5094 21.0148 17.5094C20.2445 17.5094 19.5053 17.8261 18.9575 18.3909C17.8318 19.5651 17.8318 21.5086 18.9575 22.6828L27.8854 31.9953L18.9575 41.3079C17.8318 42.4821 17.8318 44.4256 18.9575 45.5998C19.5397 46.2071 20.2773 46.4906 21.0148 46.4906C21.7523 46.4906 22.4898 46.2071 23.0721 45.5998L32 36.2872L40.9279 45.5998C41.5102 46.2071 42.2477 46.4906 42.9852 46.4906C43.7227 46.4906 44.4603 46.2071 45.0425 45.5998C46.1682 44.4256 46.1682 42.4821 45.0425 41.3079L36.1146 31.9953Z\"\n fill=\"white\"\n />\n </svg>\n);\n\nexport const SubmissionView: FunctionComponent<SubmissionViewProps> = ({\n imageSrc,\n mirror,\n themeColor,\n hideAttribution,\n mode,\n message,\n onConfirm,\n onRetake,\n onContinue,\n onExit,\n}) => {\n const isReview = mode === 'review';\n const isSubmitting = mode === 'submitting';\n const isSuccess = mode === 'success';\n const isError = mode === 'error';\n\n let title = '';\n let body = '';\n if (isReview) {\n title = t('selfie.ess.submission.review.title');\n body = t('selfie.ess.submission.review.body');\n } else if (isSubmitting) {\n title = t('selfie.ess.submission.submitting.title');\n } else if (isSuccess) {\n title = t('selfie.ess.submission.success.title');\n body = message || t('selfie.ess.submission.success.body');\n } else {\n title = t('selfie.ess.submission.error.title');\n body = message || '';\n }\n\n return (\n <div className=\"enhanced-submission\">\n <div className=\"submission-oval\">\n <img\n src={imageSrc}\n alt={t('selfie.ess.submission.imageAlt')}\n style={mirror ? { transform: 'scaleX(-1)' } : undefined}\n />\n {isSubmitting && (\n <div className=\"spinner\" aria-hidden=\"true\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"64\"\n height=\"64\"\n viewBox=\"0 0 64 64\"\n fill=\"none\"\n >\n <g clip-path=\"url(#ess-submit-loader-clip)\">\n <foreignObject\n x=\"-1031.25\"\n y=\"-1031.25\"\n width=\"2062.5\"\n height=\"2062.5\"\n transform=\"matrix(0.032 0 0 0.032 32 32)\"\n >\n <div\n {...{ xmlns: 'http://www.w3.org/1999/xhtml' }}\n style=\"background:conic-gradient(from 90deg,rgba(39,174,96,0) 0deg,rgba(58,225,128,0) 0.036deg,rgba(58,225,128,1) 360deg);height:100%;width:100%;opacity:1\"\n />\n </foreignObject>\n </g>\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M60.751 25.6018C62.2117 25.4134 63.5486 26.4447 63.737 27.9053C63.9122 29.2632 64 30.6309 64 31.9999C64 33.4727 62.8061 34.6666 61.3334 34.6666C59.8606 34.6666 58.6667 33.4727 58.6667 31.9999C58.6667 30.859 58.5935 29.7193 58.4475 28.5878C58.2591 27.1271 59.2904 25.7903 60.751 25.6018Z\"\n fill=\"#2CC05C\"\n />\n <defs>\n <clipPath id=\"ess-submit-loader-clip\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M32 64C49.6731 64 64 49.6731 64 32C64 14.3269 49.6731 0 32 0C14.3269 0 0 14.3269 0 32C0 49.6731 14.3269 64 32 64ZM32 58.6667C46.7276 58.6667 58.6667 46.7276 58.6667 32C58.6667 17.2724 46.7276 5.33333 32 5.33333C17.2724 5.33333 5.33333 17.2724 5.33333 32C5.33333 46.7276 17.2724 58.6667 32 58.6667Z\"\n />\n </clipPath>\n </defs>\n </svg>\n </div>\n )}\n {(isSuccess || isError) && (\n <div\n className={`badge ${isSuccess ? 'badge-success' : 'badge-error'}`}\n >\n {isSuccess ? <TickIcon /> : <CrossIcon />}\n </div>\n )}\n </div>\n\n <div className=\"submission-card\">\n <h2 style={{ color: themeColor }}>{title}</h2>\n {isSubmitting ? (\n <p>\n {t('selfie.ess.submission.submitting.body')\n .split('\\n')\n .map((line, i, arr) => (\n <>\n {line}\n {i < arr.length - 1 && <br />}\n </>\n ))}\n </p>\n ) : (\n body && <p>{body}</p>\n )}\n\n {isReview && (\n <div className=\"actions\">\n <button\n type=\"button\"\n className=\"retake\"\n onClick={onRetake}\n aria-label={t('selfie.ess.submission.review.retake')}\n >\n <span className=\"icon\">\n <svg\n width=\"26\"\n height=\"26\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"#90A1B9\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <polyline points=\"1 4 1 10 7 10\" />\n <path d=\"M3.51 15a9 9 0 1 0 2.13-9.36L1 10\" />\n </svg>\n </span>\n <span className=\"label\">\n {t('selfie.ess.submission.review.retake')}\n </span>\n </button>\n <button\n type=\"button\"\n className=\"confirm\"\n onClick={onConfirm}\n aria-label={t('selfie.ess.submission.review.confirm')}\n >\n <span className=\"icon\">\n <svg\n width=\"28\"\n height=\"28\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"#12B76A\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n </span>\n <span className=\"label confirm-label\">\n {t('selfie.ess.submission.review.confirm')}\n </span>\n </button>\n </div>\n )}\n\n {(isSuccess || isError) && (\n <button\n type=\"button\"\n className=\"primary\"\n style={{ background: themeColor }}\n onClick={onContinue}\n >\n {t('selfie.ess.submission.continue')}\n </button>\n )}\n\n {isError && onExit && (\n <button\n type=\"button\"\n className=\"secondary\"\n style={{ color: themeColor, borderColor: themeColor }}\n onClick={onExit}\n >\n {t('selfie.ess.submission.exit')}\n </button>\n )}\n </div>\n\n {!hideAttribution && (\n // @ts-expect-error preact-custom-element types\n <powered-by-smile-id />\n )}\n\n <style>{`\n :host { display: block; height: 100%; }\n .enhanced-submission {\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n overflow: hidden;\n padding: 1rem clamp(1rem, 4vw, 1.5rem) clamp(1rem, 3dvh, 1.5rem);\n background: #F8FAFC;\n font-family: \"DM Sans\", system-ui, sans-serif;\n box-sizing: border-box;\n }\n .enhanced-submission > powered-by-smile-id {\n display: block;\n width: 100%;\n margin-top: auto;\n padding: 0;\n background: #F8FAFC;\n flex-shrink: 0;\n }\n .submission-oval {\n position: relative;\n width: clamp(180px, 36dvh, 260px);\n max-width: 80%;\n aspect-ratio: 3 / 4;\n overflow: hidden;\n border-radius: 50%;\n margin: clamp(0.5rem, 1.5dvh, 1rem) auto;\n background: #ddd;\n flex-shrink: 0;\n }\n .submission-oval img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n .submission-oval .spinner {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n animation: ess-submit-spin 1.1s linear infinite;\n }\n @keyframes ess-submit-spin {\n to { transform: translate(-50%, -50%) rotate(360deg); }\n }\n .badge {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 64px;\n height: 64px;\n border-radius: 50%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 2px 6px rgba(0, 0, 0, 0.18);\n }\n .badge-success { background: #12B76A; }\n .badge-error { background: #E5484D; }\n\n .submission-card {\n width: 327px;\n max-width: 100%;\n min-height: 204px;\n margin-top: clamp(0.75rem, 2.5dvh, 1.25rem);\n padding: 16px 16px 20px;\n border-radius: 16px;\n border: 1px solid #F1F5F9;\n background: #FFF;\n box-shadow: 0 -12px 48px 0 rgba(0, 0, 0, 0.06);\n text-align: center;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n justify-content: center;\n gap: 8px;\n }\n .submission-card h2 {\n margin: 0;\n font-family: \"DM Sans\", system-ui, sans-serif;\n font-size: 20px;\n font-style: normal;\n font-weight: 800;\n line-height: 25.5px;\n letter-spacing: -0.425px;\n text-align: center;\n }\n .submission-card p {\n margin: 0;\n font-family: \"DM Sans\", system-ui, sans-serif;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: 1.4;\n text-align: center;\n color: #62748E;\n }\n .submission-card h2 + p {\n margin-top: -4px;\n }\n .actions {\n display: flex;\n gap: 40px;\n justify-content: center;\n margin-top: 4px;\n }\n .actions button {\n width: 80px;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 0.5rem;\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 0;\n font-family: inherit;\n }\n .actions .icon {\n display: flex;\n width: 80px;\n height: 80px;\n justify-content: center;\n align-items: center;\n flex-shrink: 0;\n border-radius: 24px;\n box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.10), 0 1px 2px -1px rgba(0, 0, 0, 0.10);\n transition: transform 120ms ease, background 120ms ease;\n }\n .actions button:active .icon { transform: scale(0.96); }\n .actions .retake .icon {\n background: #F8FAFC;\n border: 1px solid #E2E8F0;\n }\n .actions .confirm .icon {\n background: rgba(4, 176, 74, 0.10);\n border: 1px solid rgba(4, 176, 74, 0.30);\n }\n .actions .label {\n font-family: \"DM Sans\", system-ui, sans-serif;\n font-size: 10px;\n font-style: normal;\n font-weight: 700;\n line-height: 15px;\n text-transform: capitalize;\n text-align: center;\n color: #90A1B9;\n }\n .actions .confirm-label {\n color: #12B76A;\n }\n\n .primary,\n .secondary {\n margin: 8px 0 0;\n height: 48px;\n padding: 10px 16px;\n border-radius: 2.5rem;\n font-size: 1.05rem;\n font-weight: 600;\n font-family: inherit;\n cursor: pointer;\n box-sizing: border-box;\n width: 100%;\n }\n .primary {\n color: white;\n border: none;\n }\n .secondary {\n background: transparent;\n border: 1.5px solid;\n }\n `}</style>\n </div>\n );\n};\n\nexport default SubmissionView;\n","export default \"data:image/svg+xml,%3csvg%20width='28'%20height='28'%20viewBox='0%200%2028%2028'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M11.4194%2010.3225L10.5181%2011.076L9.82031%2011.583L10.7216%2010.8295L11.4194%2010.3225Z'%20fill='%232D2B2A'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M10.5181%2011.0759C10.267%2011.2857%2010.2227%2011.717%2010.3631%2012.1575C10.9696%2014.0608%2012.3778%2016.3257%2013.7094%2017.5344C13.9837%2017.7837%2014.2892%2017.8556%2014.5129%2017.6934L13.8151%2018.2004C13.5914%2018.3625%2013.2859%2018.2907%2013.0116%2018.0414C11.68%2016.8327%2010.2718%2014.5678%209.66527%2012.6645C9.52489%2012.2239%209.56924%2011.7927%209.82025%2011.5829L10.5181%2011.0759Z'%20fill='%232D2B2A'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M14.5127%2017.6931C14.5404%2017.6731%2014.5668%2017.6494%2014.5917%2017.6222L15.408%2016.732C15.4331%2016.7047%2015.4598%2016.6807%2015.4878%2016.6602L14.79%2017.1672C14.762%2017.1877%2014.7353%2017.2116%2014.7102%2017.239L13.8939%2018.1291C13.869%2018.1564%2013.8426%2018.18%2013.8149%2018.2001L14.5127%2017.6931Z'%20fill='%232D2B2A'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M15.4878%2016.6604C15.6931%2016.51%2015.9684%2016.5435%2016.223%2016.7578L18.6869%2018.836C19.0169%2019.1147%2019.2004%2019.6137%2019.1281%2020.0374L18.6364%2022.9129C18.6015%2023.117%2018.5171%2023.2708%2018.3935%2023.3618L17.6957%2023.8688C17.8193%2023.7778%2017.9037%2023.624%2017.9386%2023.4199L18.4303%2020.5444C18.5026%2020.1207%2018.3191%2019.6216%2017.9891%2019.343L15.5252%2017.2648C15.2706%2017.0505%2014.9953%2017.017%2014.79%2017.1674L15.4878%2016.6604Z'%20fill='%232D2B2A'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M18.3943%2023.3616C18.3307%2023.4086%2018.2566%2023.4388%2018.1735%2023.4508C18.1328%2023.4562%2018.0902%2023.4588%2018.0447%2023.458C12.7802%2023.3492%205.59157%2011.7986%206.8411%205.45554C6.85204%205.40145%206.8648%205.35028%206.87938%205.30282C6.92584%205.15547%207.0004%205.04379%207.09708%204.97263L6.39928%205.47961C6.3026%205.55077%206.22804%205.66245%206.18158%205.80981C6.167%205.85726%206.15423%205.90843%206.14329%205.96253C4.89377%2012.3056%2012.0824%2023.8562%2017.3469%2023.965C17.3924%2023.9657%2017.435%2023.9632%2017.4757%2023.9577C17.5588%2023.9458%2017.6329%2023.9155%2017.6965%2023.8686L18.3943%2023.3616Z'%20fill='%23F9F0E7'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M6.84053%205.456C6.85147%205.4019%206.86423%205.35074%206.87882%205.30328C6.96816%205.0199%207.16143%204.86846%207.41608%204.88341L9.78396%205.02251C10.1328%205.04315%2010.4756%205.3898%2010.6093%205.85628L11.606%209.33848C11.7233%209.74744%2011.651%2010.129%2011.4195%2010.3226L10.5181%2011.076C10.2671%2011.2858%2010.2228%2011.717%2010.3632%2012.1577C10.9697%2014.0609%2012.3779%2016.3258%2013.7095%2017.5345C14.0177%2017.8146%2014.3653%2017.8707%2014.592%2017.6226L15.4082%2016.7325C15.6179%2016.5045%2015.9339%2016.5145%2016.2232%2016.7581L18.6871%2018.8363C19.0171%2019.115%2019.2007%2019.614%2019.1284%2020.0377L18.6367%2022.9132C18.5838%2023.2224%2018.4173%2023.4161%2018.1729%2023.4512C18.1322%2023.4567%2018.0897%2023.4592%2018.0441%2023.4584C12.7796%2023.3497%205.59101%2011.7991%206.84053%205.456Z'%20fill='%232D2B2A'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='28'%20height='28'%20viewBox='0%200%2028%2028'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M17.5259%2012.481C15.9716%2011.7663%2013.9456%2011.7261%2011.82%2012.5305C7.95534%2013.9929%205.10325%2017.7391%205.02148%2021.2369L6.00759%2021.685C6.08937%2018.1872%208.94146%2014.441%2012.8062%2012.9785C14.9317%2012.1742%2016.9577%2012.2144%2018.512%2012.9291L17.5259%2012.481Z'%20fill='%235E646E'/%3e%3cpath%20d='M7.10258%2021.3367L19.9414%2016.368C20.3486%2016.2104%2020.7391%2016.0061%2021.1011%2015.7685C20.1269%2012.7384%2016.5834%2011.4886%2012.7121%2012.9869C8.8407%2014.4851%205.98575%2018.2111%205.90651%2021.6489C6.29418%2021.5964%206.69541%2021.4943%207.10581%2021.3355'%20fill='%232D2B2A'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M10.1918%2010.6578C9.35637%2010.2783%208.77166%209.53851%208.63569%208.52842C8.36375%206.50823%209.98974%204.17197%2012.2676%203.31002C13.4065%202.87904%2014.4927%202.89827%2015.3281%203.27776L16.8982%203.99116C16.0627%203.61167%2014.9765%203.59244%2013.8376%204.02342C11.5598%204.88537%209.93376%207.22163%2010.2057%209.24182C10.3417%2010.2519%2010.9264%2010.9917%2011.7618%2011.3712L10.1918%2010.6578Z'%20fill='%232D2B2A'/%3e%3cpath%20d='M13.5061%203.72185C15.9636%202.77078%2018.197%203.74443%2018.4949%205.89664C18.7927%208.04884%2017.0421%2010.5644%2014.5846%2011.5154C12.1271%2012.4665%209.89368%2011.4928%209.59587%209.34063C9.29805%207.18842%2011.0487%204.67292%2013.5061%203.72185Z'%20fill='%23F9F0E7'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='28'%20height='28'%20viewBox='0%200%2028%2028'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M23.4618%2017.2262C23.3143%2017.5288%2023.0317%2017.7644%2022.6519%2017.8591L9.40388%2021.1622C8.65906%2021.3479%207.82217%2020.9215%207.5346%2020.2098L4.72841%2013.2642C4.5875%2012.9155%204.60465%2012.5629%204.74641%2012.2722L4.11541%2013.5106C3.97365%2013.8013%203.95651%2014.1539%204.09741%2014.5026L6.9036%2021.4482C7.19117%2022.16%208.02806%2022.5864%208.77288%2022.4007L22.0209%2019.0976C22.4007%2019.0029%2022.6833%2018.7672%2022.8308%2018.4646L23.4618%2017.2262Z'%20fill='%232D2B2A'/%3e%3crect%20width='16.4333'%20height='10.2708'%20rx='2'%20transform='matrix(0.970296%20-0.241922%200.374607%200.927184%204.20703%2011.9756)'%20fill='%23F9F0E7'/%3e%3crect%20width='6.41953'%20height='0.855937'%20rx='0.427968'%20transform='matrix(0.970296%20-0.241922%200.374607%200.927184%2014.332%2012.5962)'%20fill='%2321232C'/%3e%3crect%20width='4.81464'%20height='0.855937'%20rx='0.427968'%20transform='matrix(0.970296%20-0.241922%200.374607%200.927184%2015.1343%2014.58)'%20fill='%2321232C'/%3e%3crect%20width='3.20976'%20height='0.855937'%20rx='0.427968'%20transform='matrix(0.970296%20-0.241922%200.374607%200.927184%2015.9355%2016.5642)'%20fill='%2321232C'/%3e%3cpath%20opacity='0.4'%20d='M8.78244%2012.9326C9.84186%2012.6685%2011.0321%2013.2748%2011.441%2014.287C11.85%2015.2991%2011.3227%2016.3337%2010.2633%2016.5978C9.20385%2016.862%208.01361%2016.2556%207.60467%2015.2435C7.19574%2014.2313%207.72302%2013.1968%208.78244%2012.9326Z'%20fill='%235E646E'/%3e%3cpath%20d='M8.7181%2019.2375L13.4634%2018.0543C13.6139%2018.0168%2013.7525%2017.9596%2013.8758%2017.8874C13.1496%2016.6203%2011.5582%2015.903%2010.1273%2016.2597C8.69646%2016.6165%207.92295%2017.9234%208.25984%2019.2877C8.4136%2019.2908%208.56761%2019.275%208.7193%2019.2372'%20fill='%232D2B2A'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='28'%20height='28'%20viewBox='0%200%2028%2028'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20clip-path='url(%23clip0_6_10552)'%3e%3cpath%20d='M13.1334%203.01682C14.246%202.88289%2015.487%203.60614%2015.9063%204.6341L21.8612%2019.2264C22.1385%2019.9095%2021.9864%2020.5524%2021.5265%2020.9509L21.3168%2021.3024C21.0632%2021.7478%2020.5898%2022.0525%2019.9777%2022.1261L12.9306%2022.9833C11.7436%2023.1273%2010.4282%2022.3605%209.97846%2021.2623L4.15205%206.98133C3.92548%206.4255%203.9593%205.87636%204.2163%205.44441L4.73029%204.58053L4.75396%204.59392C4.98391%204.22225%205.39646%203.95772%205.94427%203.89076L13.1334%203.01682Z'%20fill='%232D2B2A'/%3e%3cpath%20d='M6.4552%204.15515L13.3941%203.31135C14.3207%203.19751%2015.3554%203.80357%2015.7071%204.66076L21.564%2019.0154C21.9123%2019.8725%2021.4456%2020.6594%2020.5191%2020.7733L13.5801%2021.6171C12.6536%2021.7309%2011.6188%2021.1248%2011.2671%2020.2677L5.4103%205.90971C5.062%205.05252%205.52865%204.26565%206.4552%204.1518V4.15515Z'%20fill='%23F9F0E7'/%3e%3cpath%20d='M10.5198%204.19878C10.7971%204.1519%2011.1116%204.31598%2011.2266%204.57046C11.3415%204.82493%2011.2097%205.06937%2010.9324%205.11624C10.6551%205.16312%2010.3406%204.99905%2010.2256%204.74457C10.1107%204.49009%2010.2425%204.24566%2010.5198%204.19878Z'%20fill='%232D2B2A'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_6_10552'%3e%3crect%20width='18'%20height='20'%20fill='white'%20transform='translate(4%203)'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e\"","import type { FunctionComponent } from 'preact';\nimport { useState } from 'preact/hooks';\nimport { t } from '../../../../../domain/localisation';\nimport {\n SmileIdLogo,\n CheckIcon,\n ChevronDownIcon,\n} from '../assets/illustrations';\n\n// Icon URLs — Vite resolves these to URL strings via the `*.svg` ambient\n// module declaration in lib/types.d.ts.\n// eslint-disable-next-line import/no-unresolved\nimport phoneIcon from '../assets/phone.svg';\n// eslint-disable-next-line import/no-unresolved\nimport personIcon from '../assets/person.svg';\n// eslint-disable-next-line import/no-unresolved\nimport idCardIcon from '../assets/id-card.svg';\n// eslint-disable-next-line import/no-unresolved\nimport deviceIcon from '../assets/device.svg';\n\ninterface ConsentViewProps {\n themeColor: string;\n hideAttribution: boolean;\n partnerName?: string;\n partnerLogo?: string;\n policyUrl?: string;\n onGranted: () => void;\n onDenied: () => void;\n}\n\nconst ITEMS: { icon: string; key: string }[] = [\n { icon: phoneIcon, key: 'selfie.ess.consent.items.contact' },\n { icon: personIcon, key: 'selfie.ess.consent.items.personal' },\n { icon: idCardIcon, key: 'selfie.ess.consent.items.biometric' },\n { icon: deviceIcon, key: 'selfie.ess.consent.items.device' },\n];\n\n/**\n * Returns the input only if it is a syntactically valid absolute URL whose\n * protocol is `http:` or `https:`. Anything else (including `javascript:`,\n * `data:`, malformed strings, or non-strings) is rejected. This prevents a\n * malicious partner config from injecting an XSS vector through props that\n * are rendered as `href`/`src`.\n */\nconst safeHttpUrl = (value?: string): string | undefined => {\n if (typeof value !== 'string' || value.length === 0) return undefined;\n try {\n const parsed = new URL(value);\n if (parsed.protocol === 'https:' || parsed.protocol === 'http:') {\n return parsed.toString();\n }\n } catch {\n /* fall through */\n }\n return undefined;\n};\n\n/**\n * Strict-mode consent screen rendered as the first step of the Enhanced\n * SmartSelfie flow. Purpose-built for ESS and intentionally separate from the\n * legacy `<end-user-consent>` element used by KYC products — modifying that\n * element would change behaviour for every other product.\n */\nexport const ConsentView: FunctionComponent<ConsentViewProps> = ({\n themeColor,\n hideAttribution,\n partnerName,\n partnerLogo,\n policyUrl,\n onGranted,\n onDenied,\n}) => {\n const [accepted, setAccepted] = useState(false);\n const [learnMoreOpen, setLearnMoreOpen] = useState(false);\n const partner = partnerName;\n const safePolicyUrl = safeHttpUrl(policyUrl);\n const safePartnerLogo = safeHttpUrl(partnerLogo);\n\n return (\n <div className=\"ess-consent\">\n <div className=\"logos\">\n {safePartnerLogo && (\n <img className=\"partner-logo\" src={safePartnerLogo} alt={partner} />\n )}\n <div className=\"smile-logo\" aria-hidden=\"true\">\n <SmileIdLogo />\n </div>\n </div>\n\n <h1 className=\"title\">\n {partner} {t('selfie.ess.consent.titleSuffix')}{' '}\n <span style={{ whiteSpace: 'nowrap' }}>Smile ID.</span>\n </h1>\n\n <p className=\"body\">\n {t('selfie.ess.consent.bodyPrefix')}\n <strong>Smile ID</strong>\n {t('selfie.ess.consent.bodyMiddle')}\n <strong>{partner}</strong>\n {t('selfie.ess.consent.bodySuffix')}\n </p>\n\n <ul className=\"items\">\n {ITEMS.map((it) => (\n <li key={it.key}>\n <img src={it.icon} alt=\"\" aria-hidden=\"true\" />\n <span>{t(it.key)}</span>\n </li>\n ))}\n </ul>\n\n <label className=\"checkbox\">\n <input\n type=\"checkbox\"\n checked={accepted}\n onChange={(e) => setAccepted((e.target as HTMLInputElement).checked)}\n />\n <span className=\"box\" aria-hidden=\"true\">\n <CheckIcon />\n </span>\n <span className=\"copy\">{t('selfie.ess.consent.consentCheckbox')}</span>\n </label>\n\n <button\n type=\"button\"\n className=\"learn-more\"\n onClick={() => setLearnMoreOpen((v) => !v)}\n aria-expanded={learnMoreOpen}\n >\n <span className=\"chevron\" data-open={learnMoreOpen} aria-hidden=\"true\">\n <ChevronDownIcon />\n </span>\n <span>{t('selfie.ess.consent.learnMore')}</span>\n </button>\n\n {learnMoreOpen && (\n <p className=\"learn-more-copy\">\n {t('selfie.ess.consent.learnMoreBodyPrefix')}\n <strong>Smile ID</strong>\n {t('selfie.ess.consent.learnMoreBodyAnd')}\n <strong>{partner}</strong>\n {t('selfie.ess.consent.learnMoreBodySuffix')}\n <br />\n {t('selfie.ess.consent.learnMoreShare')}\n <br />\n {t('selfie.ess.consent.learnMoreRightsPrefix')}{' '}\n <a\n href=\"https://dsar.usesmileid.com\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ color: themeColor }}\n >\n {t('selfie.ess.consent.dsarLink')}\n </a>{' '}\n {t('selfie.ess.consent.learnMoreRightsMiddle')}{' '}\n <a\n href=\"https://usesmileid.com/legal/privacy-policy/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ color: themeColor }}\n >\n Smile ID\n </a>\n {safePolicyUrl ? (\n <>\n {' '}\n {t('selfie.ess.consent.partnerPrivacyTailLinked')}{' '}\n <a\n href={safePolicyUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ color: themeColor }}\n >\n {partner}\n </a>{' '}\n {t('selfie.ess.consent.partnerPrivacyTailEnd')}\n </>\n ) : (\n <>\n {' '}\n {t('selfie.ess.consent.partnerPrivacyTailLinked')}{' '}\n <strong>{partner}</strong>{' '}\n {t('selfie.ess.consent.partnerPrivacyTailEnd')}\n </>\n )}\n </p>\n )}\n\n <div className=\"actions\">\n <button\n type=\"button\"\n className=\"allow\"\n style={{ background: themeColor, borderColor: themeColor }}\n disabled={!accepted}\n onClick={onGranted}\n >\n {t('selfie.ess.consent.allow')}\n </button>\n <button\n type=\"button\"\n className=\"deny\"\n style={{ color: themeColor, borderColor: themeColor }}\n onClick={onDenied}\n >\n {t('selfie.ess.consent.deny')}\n </button>\n </div>\n\n {!hideAttribution && (\n // @ts-expect-error preact-custom-element types\n <powered-by-smile-id />\n )}\n\n <style>{`\n :host { display: block; height: 100%; }\n .ess-consent {\n display: flex;\n flex-direction: column;\n min-height: 100%;\n padding: clamp(0.75rem, 2.5dvh, 1.5rem) clamp(1rem, 4vw, 1.25rem) clamp(0.5rem, 1.5dvh, 0.5rem);\n font-family: \"DM Sans\", system-ui, sans-serif;\n background: #F5F7FA;\n color: #1A1A1A;\n box-sizing: border-box;\n }\n .ess-consent > powered-by-smile-id {\n display: block;\n width: 100%;\n padding-top: clamp(0.5rem, 1.5dvh, 1rem);\n background: #F5F7FA;\n flex-shrink: 0;\n }\n .logos {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-top: clamp(0.5rem, 1.5dvh, 1.25rem);\n margin-bottom: clamp(0.75rem, 2.25dvh, 1.75rem);\n flex-shrink: 0;\n }\n .partner-logo {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n object-fit: cover;\n background: #F9F0E7CC;\n border: 2px solid #F9F0E7CC;\n box-shadow: 0 2px 6px rgba(0,0,0,0.08);\n position: relative;\n z-index: 2;\n }\n .smile-logo {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n background: #F9F0E7CC;\n border: 2px solid #F9F0E7CC;\n box-shadow: 0 2px 6px rgba(0,0,0,0.08);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-left: -5px;\n z-index: 1;\n }\n .smile-logo svg { display: block; }\n .title {\n font-family: \"DM Sans\", system-ui, sans-serif;\n font-size: clamp(15px, 2.2dvh, 18px);\n font-weight: 600;\n line-height: 1.25;\n text-align: center;\n color: #21232C;\n margin: 0 0 clamp(0.5rem, 1.2dvh, 1rem);\n flex-shrink: 0;\n }\n .body {\n color: #5E646E;\n text-align: justify;\n font-family: \"DM Sans\", system-ui, sans-serif;\n font-size: clamp(11px, 1.5dvh, 12px);\n font-style: normal;\n font-weight: 400;\n line-height: 1.35;\n margin: 0 0 clamp(0.5rem, 1.2dvh, 1rem);\n flex-shrink: 0;\n }\n .body strong {\n color: #5E646E;\n font-family: \"DM Sans\", system-ui, sans-serif;\n font-size: 12px;\n font-style: normal;\n font-weight: 700;\n line-height: normal;\n }\n .items {\n list-style: none;\n padding: 0;\n margin: 0 0 clamp(0.5rem, 1.2dvh, 1rem);\n display: flex;\n flex-direction: column;\n gap: clamp(6px, 1.4dvh, 16px);\n flex-shrink: 0;\n }\n .items li {\n display: flex;\n align-items: center;\n gap: 0.85rem;\n color: #21232C;\n font-family: \"DM Sans\", system-ui, sans-serif;\n font-size: clamp(11px, 1.5dvh, 12px);\n font-style: normal;\n font-weight: 400;\n line-height: 1.35;\n }\n .items img {\n width: clamp(22px, 3.4dvh, 28px);\n height: clamp(22px, 3.4dvh, 28px);\n flex-shrink: 0;\n object-fit: contain;\n object-position: left center;\n }\n .checkbox {\n display: flex;\n align-items: flex-start;\n /* gap = items gap (0.85rem) + half the width difference between an\n items icon (28px) and the 20px checkbox so the trailing text\n column lines up with the text above. */\n gap: calc(0.85rem + 4px);\n margin-bottom: clamp(0.4rem, 1dvh, 0.75rem);\n cursor: pointer;\n flex-shrink: 0;\n }\n .checkbox input { position: absolute; opacity: 0; pointer-events: none; }\n .checkbox .box {\n width: 20px;\n height: 20px;\n /* Center the 20px box within the 28px icon lane used by .items img\n so the icon column visually aligns with those above. */\n margin-left: 4px;\n border-radius: 4px;\n background: transparent;\n border: 1.5px solid #2D2B2A;\n color: #F9F0E7;\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n transition: background 120ms ease, border-color 120ms ease;\n }\n .checkbox .box svg { display: block; opacity: 0; transition: opacity 120ms ease; }\n .checkbox input:checked + .box {\n background: #2D2B2A;\n border-color: #2D2B2A;\n }\n .checkbox input:checked + .box svg { opacity: 1; }\n .checkbox .copy {\n color: #5E646E;\n text-align: justify;\n font-family: \"DM Sans\", system-ui, sans-serif;\n font-size: clamp(11px, 1.5dvh, 12px);\n font-style: normal;\n font-weight: 400;\n line-height: 1.35;\n }\n .learn-more {\n display: inline-flex;\n align-items: center;\n /* Match the checkbox/items icon column so trailing text aligns. */\n gap: calc(0.85rem + 4px);\n background: transparent;\n border: none;\n padding: 0;\n color: #21232C;\n font-family: \"DM Sans\", system-ui, sans-serif;\n font-size: clamp(11px, 1.5dvh, 12px);\n font-style: normal;\n font-weight: 700;\n line-height: normal;\n cursor: pointer;\n margin-bottom: clamp(0.3rem, 0.8dvh, 0.5rem);\n flex-shrink: 0;\n }\n .learn-more .chevron {\n width: 20px;\n height: 20px;\n /* Center the 20px chevron within the 28px icon lane to align with\n the icons above. */\n margin-left: 4px;\n border-radius: 50%;\n background: #2D2B2A;\n color: #F9F0E7;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n transition: transform 150ms ease;\n flex-shrink: 0;\n }\n .learn-more .chevron[data-open=\"true\"] { transform: rotate(180deg); }\n .learn-more-copy {\n color: #5E646E;\n text-align: justify;\n font-family: \"DM Sans\", system-ui, sans-serif;\n font-size: clamp(11px, 1.5dvh, 12px);\n font-style: normal;\n font-weight: 400;\n line-height: 1.35;\n margin: 0 0 0.5rem;\n flex-shrink: 1;\n overflow: hidden;\n }\n .learn-more-copy strong {\n color: #5E646E;\n font-family: \"DM Sans\", system-ui, sans-serif;\n font-size: 12px;\n font-style: normal;\n font-weight: 700;\n line-height: normal;\n }\n .actions {\n display: flex;\n flex-direction: column;\n gap: clamp(0.4rem, 1dvh, 0.75rem);\n align-items: stretch;\n padding-top: clamp(0.5rem, 1.5dvh, 1.5rem);\n flex-shrink: 0;\n }\n .allow {\n width: 100%;\n height: clamp(40px, 6dvh, 48px);\n padding: 0 1rem;\n border-radius: 24px;\n border: 1px solid;\n color: white;\n font-size: clamp(0.95rem, 1.8dvh, 1.05rem);\n font-weight: 600;\n font-family: inherit;\n cursor: pointer;\n box-shadow: 0 1px 2px 0 rgba(16, 24, 40, 0.05);\n }\n .allow:disabled { opacity: 0.45; cursor: not-allowed; }\n .deny {\n width: 100%;\n height: clamp(40px, 6dvh, 48px);\n padding: 0 1rem;\n background: transparent;\n border: 1px solid;\n border-radius: 24px;\n font-size: clamp(0.95rem, 1.8dvh, 1.05rem);\n font-weight: 600;\n font-family: inherit;\n cursor: pointer;\n box-shadow: 0 1px 2px 0 rgba(16, 24, 40, 0.05);\n }\n `}</style>\n </div>\n );\n};\n\nexport default ConsentView;\n","import register from 'preact-custom-element';\nimport type { FunctionComponent } from 'preact';\n\nimport { getBoolProp } from '../../../../utils/props';\nimport { ConsentView } from './components/ConsentView';\n\nimport '../../../attribution/PoweredBySmileId';\n\ninterface Props {\n 'theme-color'?: string;\n 'hide-attribution'?: string | boolean;\n 'partner-name'?: string;\n 'partner-logo'?: string;\n 'policy-url'?: string;\n}\n\n/**\n * Standalone Enhanced SmartSelfie consent screen. Hosted as its own custom\n * element so partner integrations (and the embed product scripts) can mount\n * the new consent UX independently of `<enhanced-smartselfie-capture>`.\n *\n * Events:\n * - `enhanced-smart-selfie-consent.granted` \\u2014 user accepted.\n * - `enhanced-smart-selfie-consent.denied` \\u2014 user declined.\n */\nconst EnhancedSmartSelfieConsent: FunctionComponent<Props> = ({\n 'theme-color': themeColor = '#001096',\n 'hide-attribution': hideAttributionProp = false,\n 'partner-name': partnerName,\n 'partner-logo': partnerLogo,\n 'policy-url': policyUrl,\n}) => {\n const hideAttribution = getBoolProp(hideAttributionProp);\n\n return (\n <ConsentView\n themeColor={themeColor}\n hideAttribution={hideAttribution}\n partnerName={partnerName}\n partnerLogo={partnerLogo}\n policyUrl={policyUrl}\n onGranted={() => {\n window.dispatchEvent(\n new CustomEvent('enhanced-smart-selfie-consent.granted'),\n );\n }}\n onDenied={() => {\n window.dispatchEvent(\n new CustomEvent('enhanced-smart-selfie-consent.denied'),\n );\n }}\n />\n );\n};\n\nif (!customElements.get('enhanced-smart-selfie-consent')) {\n register(\n EnhancedSmartSelfieConsent,\n 'enhanced-smart-selfie-consent',\n [\n 'theme-color',\n 'hide-attribution',\n 'partner-name',\n 'partner-logo',\n 'policy-url',\n ],\n { shadow: true },\n );\n}\n\nexport default EnhancedSmartSelfieConsent;\n","import { useState, useEffect } from 'preact/hooks';\nimport register from 'preact-custom-element';\nimport type { FunctionComponent } from 'preact';\n\nimport { getBoolProp } from '../../../../utils/props';\nimport { t } from '../../../../domain/localisation';\nimport {\n SubmissionView,\n type SubmissionViewMode,\n} from './components/SubmissionView';\n\nimport '../../../attribution/PoweredBySmileId';\n\ninterface Props {\n 'theme-color'?: string;\n 'hide-attribution'?: string | boolean;\n /** Captured selfie data URI shown inside the oval. */\n 'image-src'?: string;\n /** When true, the image is mirrored (user-facing camera). */\n mirror?: string | boolean;\n /** Initial submission state. Can be overridden at runtime via attribute or event. */\n 'submission-state'?: SubmissionViewMode;\n /** Optional supporting copy under the title. */\n 'submission-message'?: string;\n /**\n * When set, the failure card uses a localised reason message instead of\n * the supplied submission-message. Currently the only recognised value is\n * `active_liveness_timed_out`.\n */\n 'failure-reason'?: string;\n}\n\n/**\n * Convert an internal forced-failure reason code into the message we render\n * under the \"Submission Failed\" title. Returns `undefined` for unknown\n * reasons so callers can fall back to whatever the host supplied.\n */\nconst failureReasonToMessage = (\n reason: string | undefined,\n): string | undefined => {\n switch (reason) {\n case 'active_liveness_timed_out':\n return t('selfie.ess.failure.sessionTimedOut');\n default:\n return undefined;\n }\n};\n\n/**\n * Standalone post-capture submission UI for Enhanced SmartSelfie flows\n * where the partner takes the captured selfie, uploads it, and wants to\n * show submitting / success / failure cards in our visual language.\n *\n * Used today by SmartSelfie Auth, where the host script knows the upload\n * outcome and drives this element accordingly. KYC / DV / EDV products\n * skip it entirely and route the user into their next form step.\n *\n * Drive it via either:\n * - attribute updates: `submission-state=\"submitting|success|error\"`,\n * `submission-message`, `failure-reason`\n * - or window events:\n * `enhanced-smart-selfie-submission.set-state`\n * detail: { state, message?, failureReason? }\n *\n * Emits:\n * - `enhanced-smart-selfie-submission.continue` (detail: { success })\n * when the user taps Continue on the success/error card.\n * - `enhanced-smart-selfie-submission.exit` when the user taps Exit on\n * the failure card.\n */\nconst EnhancedSmartSelfieSubmission: FunctionComponent<Props> = ({\n 'theme-color': themeColor = '#001096',\n 'hide-attribution': hideAttributionProp = false,\n 'image-src': imageSrc = '',\n mirror: mirrorProp = false,\n 'submission-state': submissionStateProp = 'submitting',\n 'submission-message': submissionMessage,\n 'failure-reason': failureReason,\n}) => {\n const hideAttribution = getBoolProp(hideAttributionProp);\n const mirror = getBoolProp(mirrorProp);\n\n const [state, setState] = useState<SubmissionViewMode>(submissionStateProp);\n const [message, setMessage] = useState<string | undefined>(submissionMessage);\n const [reason, setReason] = useState<string | undefined>(failureReason);\n\n // Sync attribute changes from the host through to local state so partners\n // can update the card by setAttribute alone (no event required).\n useEffect(() => {\n setState(submissionStateProp);\n }, [submissionStateProp]);\n useEffect(() => {\n setMessage(submissionMessage);\n }, [submissionMessage]);\n useEffect(() => {\n setReason(failureReason);\n }, [failureReason]);\n\n // Event-driven path: avoids partners having to reach into the shadow DOM\n // to flip attributes. Detail mirrors the attribute names.\n useEffect(() => {\n const handler = (e: Event) => {\n const ce = e as CustomEvent<{\n state?: SubmissionViewMode;\n message?: string;\n failureReason?: string;\n }>;\n if (ce.detail?.state) setState(ce.detail.state);\n if (ce.detail?.message !== undefined) setMessage(ce.detail.message);\n if (ce.detail?.failureReason !== undefined) {\n setReason(ce.detail.failureReason);\n }\n };\n window.addEventListener(\n 'enhanced-smart-selfie-submission.set-state',\n handler,\n );\n return () => {\n window.removeEventListener(\n 'enhanced-smart-selfie-submission.set-state',\n handler,\n );\n };\n }, []);\n\n const success = state === 'success';\n const isResolved = success || state === 'error';\n const resolvedMessage = !success\n ? (failureReasonToMessage(reason) ?? message)\n : message;\n\n return (\n <SubmissionView\n imageSrc={imageSrc}\n mirror={mirror}\n themeColor={themeColor}\n hideAttribution={hideAttribution}\n mode={state}\n message={resolvedMessage}\n onContinue={\n isResolved\n ? () => {\n window.dispatchEvent(\n new CustomEvent('enhanced-smart-selfie-submission.continue', {\n detail: { success },\n }),\n );\n }\n : undefined\n }\n onExit={\n state === 'error'\n ? () => {\n window.dispatchEvent(\n new CustomEvent('enhanced-smart-selfie-submission.exit'),\n );\n }\n : undefined\n }\n />\n );\n};\n\nif (!customElements.get('enhanced-smart-selfie-submission')) {\n register(\n EnhancedSmartSelfieSubmission,\n 'enhanced-smart-selfie-submission',\n [\n 'theme-color',\n 'hide-attribution',\n 'image-src',\n 'mirror',\n 'submission-state',\n 'submission-message',\n 'failure-reason',\n ],\n { shadow: true },\n );\n}\n\nexport default EnhancedSmartSelfieSubmission;\n","import { useRef, useEffect, useState } from 'preact/hooks';\nimport { signal } from '@preact/signals';\nimport register from 'preact-custom-element';\nimport type { FunctionComponent } from 'preact';\n\nimport { getBoolProp } from '../../../../utils/props';\nimport { t } from '../../../../domain/localisation';\nimport { useFaceCapture, useCamera } from './hooks';\nimport { getMediapipeInstance } from './utils/mediapipeManager';\nimport { CameraPreview } from './components/CameraPreview';\nimport { AlertDisplay } from './components/AlertDisplay';\nimport { CaptureControls } from './components/CaptureControls';\nimport { ActiveLivenessOverlay } from './components/ActiveLivenessOverlay';\nimport { CaptureGuidelines } from './components/CaptureGuidelines';\nimport { SubmissionView } from './components/SubmissionView';\nimport { BackNavigation } from './components/BackNavigation';\n\nimport '../../../navigation/src';\nimport '../../../attribution/PoweredBySmileId';\n// Side-effect imports: register the standalone consent and submission\n// custom elements so partners can mount them independently of ESS\n// (`<enhanced-smart-selfie-consent>` / `<enhanced-smart-selfie-submission>`).\nimport './EnhancedSmartSelfieConsent';\nimport './EnhancedSmartSelfieSubmission';\n\n// ESS owns the in-flow capture experience: a pre-capture guidelines screen\n// (the \"Capture Guidelines\" tiles + active-liveness hero animation), the\n// active-liveness capture itself, and the post-capture review screen. Consent\n// and post-confirm submission UI are deliberately not part of this element —\n// they're shipped as separate custom elements (`<enhanced-smart-selfie-\n// consent>`, `<enhanced-smart-selfie-submission>`) that callers mount\n// around ESS as their product flow requires.\ntype View = 'guidelines' | 'capture' | 'review';\n\ninterface Props {\n interval?: number;\n duration?: number;\n 'theme-color'?: string;\n 'show-navigation'?: string | boolean;\n 'allow-agent-mode'?: string | boolean;\n 'show-agent-mode-for-tests'?: string | boolean;\n 'hide-attribution'?: string | boolean;\n 'disable-image-tests'?: string | boolean;\n /** When true, skip the guidelines screen and go straight to capture. */\n 'hide-instructions'?: string | boolean;\n /**\n * Render the back button on the guidelines screen. Off by default because\n * guidelines is the first ESS view, so there is nothing within ESS to\n * navigate back to. Hosts that mount ESS after their own prior screen\n * (e.g. a consent step in a KYC / DocV flow) opt in by setting this so\n * the back button surfaces and `selfie-capture.cancelled` fires for the\n * host to handle navigation back to the previous view.\n */\n 'show-back-on-guidelines'?: string | boolean;\n}\n\nconst EnhancedSmartSelfieCapture: FunctionComponent<Props> = ({\n interval = 350,\n duration = 2800,\n 'theme-color': themeColor = '#001096',\n 'show-navigation': showNavigationProp = false,\n 'allow-agent-mode': allowAgentModeProp = false,\n 'show-agent-mode-for-tests': showAgentModeForTestsProp = false,\n 'hide-attribution': hideAttributionProp = false,\n 'hide-instructions': hideInstructionsProp = false,\n 'show-back-on-guidelines': showBackOnGuidelinesProp = false,\n}) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n\n const showNavigation = getBoolProp(showNavigationProp);\n const allowAgentMode = getBoolProp(allowAgentModeProp);\n const showAgentModeForTests = getBoolProp(showAgentModeForTestsProp);\n const hideAttribution = getBoolProp(hideAttributionProp);\n const hideInstructions = getBoolProp(hideInstructionsProp);\n const showBackOnGuidelines = getBoolProp(showBackOnGuidelinesProp);\n\n // This component is always strict-mode (Active Liveness).\n const useStrictMode = true;\n\n const smileCooldown = 300;\n const smileThreshold = 0.25;\n const mouthOpenThreshold = 0.05;\n // Slightly tighter range than the legacy SmartSelfie defaults so the\n // \"too far / too close\" edge cases actually trigger when the face fills\n // significantly less / more of the oval than expected. The band is wider\n // than 0.34–0.55 because hysteresis combined with the 0.34 floor caused\n // typical webcam framing to lock into a \"too far\" state, masking every\n // other check downstream of it.\n const minFaceSize = 0.35;\n const maxFaceSize = 0.62;\n\n // Agent mode is opt-in: the partner enables the toggle via `allow-agent-mode`,\n // but the user-facing camera is always the default. The toggle button lets\n // an operator switch to the rear (environment) camera mid-session.\n const initialFacingMode = 'user';\n const camera = useCamera(initialFacingMode);\n\n // Three-view flow: guidelines → capture → review. `hide-instructions`\n // skips the guidelines screen and jumps straight to capture. On confirm,\n // ESS emits `selfie-capture.publish` and hands off to the caller — the\n // screens router (`<selfie-capture-screens>`) or, in the SmartSelfie Auth\n // case, the host product script — which decides what to render next.\n const initialView: View = hideInstructions ? 'capture' : 'guidelines';\n const viewSignal = useRef(signal<View>(initialView)).current;\n const pendingPayload = useRef<any>(null);\n\n const faceCapture = useFaceCapture({\n videoRef: camera.videoRef,\n canvasRef,\n interval,\n duration,\n smileThreshold,\n mouthOpenThreshold,\n minFaceSize,\n maxFaceSize,\n smileCooldown,\n getFacingMode: () => camera.facingMode,\n useStrictMode,\n onCaptureComplete: (detail) => {\n // Stash the payload and show the review screen. The user can retake\n // or confirm; only on confirm do we emit `selfie-capture.publish`.\n //\n // Forced-failure completions (e.g. the 120s active-liveness\n // inactivity timeout from the hosted-web page) publish immediately\n // with `detail.forceFailureReason` set so the caller can route to\n // its own failure UI without going through review.\n pendingPayload.current = detail;\n if (detail.forceFailureReason) {\n // Tear down the camera + detection loop explicitly. We're skipping\n // review, so the view stays on 'capture' and the mount effect's\n // cleanup never runs on its own — without this, MediaPipe and the\n // camera stream would keep running silently while the host shows\n // its post-publish UI.\n faceCapture.stopDetectionLoop();\n camera.stopCamera();\n faceCapture.cleanup();\n // Dedicated forced-failure signal for the host. The intermediate\n // `<selfie-capture-screens>` / `<smart-camera-web>` chain only\n // forwards `images` in their re-dispatched `*.publish` events, so\n // `forceFailureReason` would otherwise be invisible at the host\n // layer. We fire this synchronously *before* `selfie-capture.publish`\n // so any host listener can flip its \"this is a forced failure\" flag\n // in time for the publish handler that follows.\n window.dispatchEvent(\n new CustomEvent('enhanced-smartselfie.force-fail-published', {\n detail: { reason: detail.forceFailureReason },\n }),\n );\n window.dispatchEvent(\n new CustomEvent('selfie-capture.publish', { detail }),\n );\n return;\n }\n viewSignal.value = 'review';\n },\n });\n\n useEffect(() => {\n if (viewSignal.value !== 'capture') return undefined;\n\n const initializeCamera = async () => {\n await camera.startCamera(initialFacingMode, (cameraName) => {\n const smartCameraWeb = document.querySelector('smart-camera-web');\n smartCameraWeb?.dispatchEvent(\n new CustomEvent('metadata.camera-name', {\n detail: { cameraName },\n }),\n );\n });\n await camera.checkAgentSupport();\n await faceCapture.initializeFaceLandmarker();\n\n setTimeout(() => {\n faceCapture.setupCanvas();\n faceCapture.startDetectionLoop();\n }, 500);\n };\n\n camera.registerCameraSwitchCallback(() => {\n try {\n faceCapture.resetFaceDetectionState();\n faceCapture.setupCanvas();\n faceCapture.stopDetectionLoop();\n faceCapture.startDetectionLoop();\n } catch (error) {\n console.error('Error during camera switch callback:', error);\n }\n });\n\n initializeCamera();\n\n return () => {\n faceCapture.stopDetectionLoop();\n camera.stopCamera();\n faceCapture.cleanup();\n };\n }, [viewSignal.value]);\n\n // Reset scroll-to-top whenever the active view changes. Without this the\n // host page (which now drives scrolling, since each ESS view uses natural\n // document flow) would land on whatever scroll offset the previous view\n // left behind \\u2014 e.g. switching from a long Consent page to Instructions\n // would render Instructions already scrolled to the bottom.\n useEffect(() => {\n try {\n window.scrollTo({ top: 0, left: 0, behavior: 'auto' });\n } catch {\n window.scrollTo(0, 0);\n }\n }, [viewSignal.value]);\n\n useEffect(() => {\n if (faceCapture.hasFinishedCapture.value) {\n const smartCameraWeb = document.querySelector('smart-camera-web');\n smartCameraWeb?.dispatchEvent(\n new CustomEvent('metadata.selfie-capture-end'),\n );\n }\n }, [faceCapture.hasFinishedCapture.value]);\n\n // Brief \"hold still\" period at the start of capture: the reference selfie\n // is taken in this window and the active-liveness animation/prompts only\n // appear after it elapses.\n const HOLD_STILL_MS = 1800;\n const [holdStillElapsed, setHoldStillElapsed] = useState(false);\n // Tracks whether the Mediapipe model itself has finished downloading. We\n // pre-warm it as soon as ESS mounts so by the time the user finishes\n // reading the guidelines the heavy network work is already done and\n // Continue can be enabled immediately.\n const [isMediapipeReady, setIsMediapipeReady] = useState(false);\n useEffect(() => {\n let cancelled = false;\n getMediapipeInstance()\n .then(() => {\n if (!cancelled) setIsMediapipeReady(true);\n })\n .catch(() => {\n // Swallow — the capture screen will retry and surface any error there.\n });\n return () => {\n cancelled = true;\n };\n }, []);\n useEffect(() => {\n if (!faceCapture.isCapturing.value) {\n setHoldStillElapsed(false);\n return undefined;\n }\n setHoldStillElapsed(false);\n const id = window.setTimeout(\n () => setHoldStillElapsed(true),\n HOLD_STILL_MS,\n );\n return () => window.clearTimeout(id);\n }, [faceCapture.isCapturing.value]);\n\n // Pre-capture fallback: enable Start Capture after 5s even if the user\n // hasn't centred their head yet. Quality checks (lighting / blur /\n // distance) only run during active capture, so we don't want partners to\n // get stuck on a permanently-disabled button.\n const PRE_CAPTURE_FALLBACK_MS = 5000;\n const [preCaptureFallbackElapsed, setPreCaptureFallbackElapsed] =\n useState(false);\n useEffect(() => {\n if (viewSignal.value !== 'capture') return undefined;\n if (faceCapture.isCapturing.value) return undefined;\n if (faceCapture.hasFinishedCapture.value) return undefined;\n setPreCaptureFallbackElapsed(false);\n const id = window.setTimeout(\n () => setPreCaptureFallbackElapsed(true),\n PRE_CAPTURE_FALLBACK_MS,\n );\n return () => window.clearTimeout(id);\n }, [\n viewSignal.value,\n faceCapture.isCapturing.value,\n faceCapture.hasFinishedCapture.value,\n ]);\n\n // Track device orientation. Active-liveness expects the user to hold the\n // device upright — landscape framing puts the face sideways inside the\n // oval, breaks the bounds/pose checks, and produces unusable selfies.\n // We detect both rotated screens (matchMedia) and rotated mobile devices\n // that report orientation through the Screen Orientation API.\n const [isLandscape, setIsLandscape] = useState(false);\n useEffect(() => {\n if (typeof window === 'undefined' || !window.matchMedia) return undefined;\n\n // Only enforce the orientation edge case on touch / mobile-class devices.\n // Desktop/laptop browsers can be resized into a \"landscape <\" wrapper\n // ratio without the camera or user actually being sideways, and there's\n // no rotate gesture available to recover from the prompt.\n const isMobileDevice =\n // matchMedia hover/pointer hints — most reliable cross-browser way to\n // tell apart a touch-only device from a mouse-driven one.\n window.matchMedia('(hover: none) and (pointer: coarse)').matches ||\n // Touch capability fallback for browsers that don't expose the hover\n // media query (older Android WebView, embedded browsers).\n (typeof navigator !== 'undefined' &&\n ((navigator as any).maxTouchPoints > 0 ||\n /Android|iPhone|iPad|iPod|Mobile|webOS|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent || '',\n )));\n if (!isMobileDevice) return undefined;\n\n const mql = window.matchMedia('(orientation: landscape)');\n const update = () => setIsLandscape(mql.matches);\n update();\n // Older Safari only supports addListener/removeListener.\n if (mql.addEventListener) mql.addEventListener('change', update);\n else mql.addListener(update);\n return () => {\n if (mql.removeEventListener) mql.removeEventListener('change', update);\n else mql.removeListener(update);\n };\n }, []);\n\n // If the device flips to landscape mid-capture, pause the capture interval\n // immediately so we don't accumulate liveness frames while the user's face\n // is sideways inside the oval. Resume once the device returns to portrait —\n // the capture sequence picks up from where it left off and continues\n // forward without forcing the user to restart.\n useEffect(() => {\n if (!faceCapture.isCapturing.value) return;\n if (isLandscape) {\n faceCapture.pauseCapture();\n } else if (faceCapture.isPaused.value) {\n faceCapture.resumeCapture();\n }\n }, [isLandscape, faceCapture.isCapturing.value]);\n\n // Host-driven forced-failure path (e.g. the hosted-web 120s active-liveness\n // inactivity timer). The host dispatches `enhanced-smartselfie.force-fail`\n // with a `{ reason }` detail; the hook packages whatever frames have been\n // captured so far and fires `onCaptureComplete` with `forceFailureReason`\n // set, which publishes immediately so the caller can surface its own\n // failure UI.\n useEffect(() => {\n const handler = (e: Event) => {\n const ce = e as CustomEvent<{ reason?: string }>;\n const reason = ce.detail?.reason ?? 'active_liveness_timed_out';\n // Only react while the user is actively in the capture flow; ignore\n // the event if we've already moved on to review/submitting/etc.\n if (viewSignal.value !== 'capture') return;\n faceCapture.forceFailCapture(reason);\n };\n window.addEventListener('enhanced-smartselfie.force-fail', handler);\n return () => {\n window.removeEventListener('enhanced-smartselfie.force-fail', handler);\n };\n }, []);\n\n const handleConfirm = () => {\n const payload = pendingPayload.current;\n if (payload) {\n // Publish and stay on the review screen. The caller — the screens\n // router for KYC/DV/EDV flows, or the SmartSelfie Auth host page —\n // decides what to render next (next form, submitting card, etc.).\n window.dispatchEvent(\n new CustomEvent('selfie-capture.publish', { detail: payload }),\n );\n }\n };\n\n const handleRetake = () => {\n pendingPayload.current = null;\n faceCapture.hasFinishedCapture.value = false;\n faceCapture.capturesTaken.value = 0;\n viewSignal.value = 'capture';\n };\n\n // Back-button navigation: review → retake; capture → guidelines (or\n // cancel when guidelines are hidden); guidelines → cancel. \"Cancel\"\n // surfaces `selfie-capture.cancelled` so the caller can decide what to do.\n const handleBack = () => {\n const current = viewSignal.value;\n if (current === 'review') {\n handleRetake();\n return;\n }\n if (current === 'capture') {\n // Stop the camera/detection loop before leaving the capture view so\n // we don't leak resources while sitting on the guidelines screen.\n faceCapture.stopDetectionLoop();\n camera.stopCamera();\n faceCapture.resetFaceDetectionState();\n // Wipe the in-flight capture session so re-entering capture starts\n // fresh (new pose sequence, prompt 1, empty image buffer).\n faceCapture.stopCapture();\n faceCapture.capturedImages.value = [];\n faceCapture.referencePhoto.value = '';\n faceCapture.poseSequence.value = [];\n faceCapture.currentPoseIndex.value = 0;\n faceCapture.hasFinishedCapture.value = false;\n faceCapture.capturesTaken.value = 0;\n if (!hideInstructions) {\n viewSignal.value = 'guidelines';\n return;\n }\n faceCapture.handleCancel();\n return;\n }\n // Guidelines or anything else: cancel.\n faceCapture.handleCancel();\n };\n\n if (viewSignal.value === 'guidelines') {\n return (\n <CaptureGuidelines\n themeColor={themeColor}\n hideAttribution={hideAttribution}\n isReady={isMediapipeReady}\n onContinue={() => {\n viewSignal.value = 'capture';\n }}\n onBack={showNavigation && showBackOnGuidelines ? handleBack : undefined}\n />\n );\n }\n\n if (viewSignal.value === 'review') {\n const detail = pendingPayload.current;\n const src = detail?.referenceImage || '';\n const mirror = detail?.facingMode === 'user';\n return (\n <SubmissionView\n imageSrc={src}\n mirror={mirror}\n themeColor={themeColor}\n hideAttribution={hideAttribution}\n mode=\"review\"\n onConfirm={handleConfirm}\n onRetake={handleRetake}\n onBack={showNavigation ? handleBack : undefined}\n />\n );\n }\n\n // Centralised quality-check evaluation: pick the dominant problem and\n // derive both the prompt copy and which side of the oval to colour red.\n // Pre-capture (idle) only nudges the user to centre their head — every\n // other quality check (lighting / blur / proximity) is deferred until\n // active capture begins. During capture, framing/centering is no longer\n // re-evaluated since the head is already locked in.\n const isIdle =\n !faceCapture.isCapturing.value && !faceCapture.hasFinishedCapture.value;\n const isHoldingStill = faceCapture.isCapturing.value && !holdStillElapsed;\n\n const isFaceCentered =\n faceCapture.faceDetected.value &&\n faceCapture.faceInBounds.value &&\n !faceCapture.faceClippingOval.value;\n\n // Default to the pre-capture instruction. We deliberately ignore the\n // hook's transient alertTitle here so the prompt never blanks out as\n // detection signals fluctuate — it stays put until capture begins.\n let alertTitle = isIdle\n ? t('selfie.ess.alert.centerFace')\n : faceCapture.alertTitle.value;\n let errorSide: 'top' | 'right' | 'bottom' | 'left' | 'all' | null = null;\n // Whether any active-capture quality check is currently failing. Used to\n // suppress the active-liveness pose animation so the user isn't shown a\n // \"turn your head\" cue while we still need them to fix lighting/blur/etc.\n let captureCheckFailing = false;\n\n if (isLandscape) {\n alertTitle = '';\n errorSide = 'all';\n captureCheckFailing = true;\n } else if (isIdle) {\n // Pre-capture: keep the static \"Centre your face within the oval frame\"\n // instruction. No directional / lighting / blur / distance prompts run\n // until the user taps Start Capture — quality checks are deferred to\n // the active-capture phase.\n } else if (isHoldingStill) {\n alertTitle = t('selfie.ess.alert.holdStill');\n } else if (faceCapture.isCapturing.value) {\n // Active capture: run quality checks. Centering is no longer evaluated\n // here — once capture has started, head turns are expected.\n if (faceCapture.isTooDark.value) {\n alertTitle = t('selfie.ess.alert.tooDark');\n errorSide = 'all';\n captureCheckFailing = true;\n } else if (faceCapture.isTooBlurry.value) {\n errorSide = 'all';\n captureCheckFailing = true;\n } else if (faceCapture.faceProximity.value === 'too-close') {\n alertTitle = t('selfie.ess.alert.tooClose');\n errorSide = 'all';\n captureCheckFailing = true;\n } else if (faceCapture.faceProximity.value === 'too-far') {\n alertTitle = t('selfie.ess.alert.tooFar');\n errorSide = 'all';\n captureCheckFailing = true;\n } else if (faceCapture.faceOffsetDirection.value) {\n // Directional nudges: face is detected but offset from the oval\n // centre by more than the hook's small threshold. Surfaced during\n // capture so the user re-frames before we evaluate pose prompts.\n const dir = faceCapture.faceOffsetDirection.value;\n if (dir === 'top') alertTitle = t('selfie.ess.alert.moveDeviceUp');\n else if (dir === 'bottom')\n alertTitle = t('selfie.ess.alert.moveDeviceDown');\n else if (dir === 'left')\n alertTitle = t('selfie.ess.alert.moveDeviceLeft');\n else if (dir === 'right')\n alertTitle = t('selfie.ess.alert.moveDeviceRight');\n errorSide = dir;\n captureCheckFailing = true;\n } else {\n // Active-liveness pose prompts: override the localised hook copy with\n // the design-spec wording.\n const pose =\n faceCapture.poseSequence.value[faceCapture.currentPoseIndex.value];\n if (pose === 'left') alertTitle = t('selfie.ess.alert.turnHeadLeft');\n else if (pose === 'right')\n alertTitle = t('selfie.ess.alert.turnHeadRight');\n else if (pose === 'up') alertTitle = t('selfie.ess.alert.tiltHeadUp');\n }\n }\n\n return (\n <div className=\"smartselfie-capture\">\n {showNavigation && (\n <BackNavigation onBack={handleBack} themeColor={themeColor} />\n )}\n\n <CameraPreview\n videoRef={camera.videoRef}\n canvasRef={canvasRef}\n facingMode={camera.facingMode}\n themeColor={themeColor}\n errorSide={errorSide}\n overlay={(() => {\n if (isLandscape) {\n return (\n <ActiveLivenessOverlay\n pose={null}\n currentPose={null}\n isTooDark={false}\n isLandscape\n />\n );\n }\n if (faceCapture.isTooDark.value) {\n // Show the too-dark animation as soon as the scene is too dark,\n // even before active capture starts, so the user gets visual\n // guidance matching the alert text.\n return (\n <ActiveLivenessOverlay pose={null} currentPose={null} isTooDark />\n );\n }\n if (\n faceCapture.isCapturing.value &&\n holdStillElapsed &&\n !captureCheckFailing\n ) {\n return (\n <ActiveLivenessOverlay\n pose={\n faceCapture.poseSequence.value[\n faceCapture.currentPoseIndex.value\n ] ?? null\n }\n currentPose={faceCapture.currentPose.value}\n isTooDark={faceCapture.isTooDark.value}\n />\n );\n }\n return null;\n })()}\n />\n\n {/* Alert text + controls + attribution sit naturally below the\n camera preview, matching the SmartSelfieCapture layout. */}\n <AlertDisplay alertTitle={alertTitle} themeColor={themeColor} />\n\n {!faceCapture.isCapturing.value &&\n !faceCapture.hasFinishedCapture.value && (\n <CaptureControls\n isCapturing={faceCapture.isCapturing.value}\n hasFinishedCapture={faceCapture.hasFinishedCapture.value}\n // Pre-capture readiness: face must be centered, OR the 5-second\n // fallback has elapsed. Quality checks no longer gate the Start\n // Capture button — they only run after capture begins.\n isReadyToCapture={\n (isFaceCentered || preCaptureFallbackElapsed) && !isLandscape\n }\n // ESS strict-mode: never bypass the readiness check. The legacy\n // fallback timer enables the button after 10s even when the\n // face isn't centered, but we want capture to only start once\n // the user is properly framed inside the oval.\n captureButtonFallbackEnabled={false}\n allowAgentMode={allowAgentMode}\n agentSupported={camera.agentSupported}\n showAgentModeForTests={showAgentModeForTests}\n facingMode={camera.facingMode}\n themeColor={themeColor}\n onStartCapture={faceCapture.startCapture}\n onSwitchCamera={camera.switchCamera}\n />\n )}\n\n {!hideAttribution && (\n // @ts-expect-error preact-custom-element types\n <powered-by-smile-id />\n )}\n\n <style>{`\n * { box-sizing: border-box; }\n :host { display: block; height: 100%; }\n .smartselfie-capture {\n position: relative;\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: 6.5rem 1rem 0.5rem;\n font-family: \"DM Sans\", system-ui, sans-serif;\n background: #F5F7FA;\n overflow: hidden;\n }\n .smartselfie-capture > .ess-back-navigation {\n position: absolute;\n top: 1.5rem;\n left: 1rem;\n z-index: 2;\n }\n .smartselfie-capture > powered-by-smile-id {\n display: block;\n width: 100%;\n margin-top: clamp(0.75rem, 2dvh, 1.25rem);\n padding-top: clamp(0.4rem, 1dvh, 0.6rem);\n background: #F5F7FA;\n flex-shrink: 0;\n }\n button {\n padding: 10px 20px;\n background: ${themeColor || '#001096'};\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 16px;\n }\n button:disabled { background: #ccc; cursor: not-allowed; }\n button.btn-primary {\n background-color: ${themeColor || '#001096'};\n border-radius: 2.5rem;\n color: white;\n border: none;\n height: 3.125rem;\n padding: 0.75rem 1.5rem;\n font-size: 1.125rem;\n font-weight: 600;\n font-family: inherit;\n cursor: pointer;\n }\n button.btn-primary:hover { background-color: #2d2b2a; }\n button.btn-primary:disabled { background-color: #666; cursor: not-allowed; }\n `}</style>\n </div>\n );\n};\n\nif (!customElements.get('enhanced-smartselfie-capture')) {\n register(\n EnhancedSmartSelfieCapture,\n 'enhanced-smartselfie-capture',\n [\n 'interval',\n 'duration',\n 'theme-color',\n 'show-navigation',\n 'allow-agent-mode',\n 'show-agent-mode-for-tests',\n 'hide-attribution',\n 'disable-image-tests',\n 'hide-instructions',\n 'show-back-on-guidelines',\n ],\n { shadow: true },\n );\n}\n\nexport default EnhancedSmartSelfieCapture;\n","import {\n IMAGE_TYPE,\n JPEG_QUALITY,\n} from '../../../../domain/constants/src/Constants';\nimport SmartCamera from '../../../../domain/camera/src/SmartCamera';\nimport styles from '../../../../styles/src/styles';\nimport packageJson from '../../../../../package.json';\nimport '../../../navigation/src';\nimport { t, tHtml, getDirection } from '../../../../domain/localisation';\n\nconst COMPONENTS_VERSION = packageJson.version;\n\nconst DEFAULT_NO_OF_LIVENESS_FRAMES = 8;\n\nfunction hasMoreThanNColors(data, n = 16) {\n const colors = new Set();\n for (let i = 0; i < Math.min(data.length, 10000); i += 4) {\n // eslint-disable-next-line no-bitwise\n colors.add((data[i] << 16) | (data[i + 1] << 8) | data[i + 2]);\n if (colors.size > n) {\n return true;\n }\n }\n return false;\n}\n\nfunction getLivenessFramesIndices(\n totalNoOfFrames,\n numberOfFramesRequired = DEFAULT_NO_OF_LIVENESS_FRAMES,\n) {\n const selectedFrames = [];\n\n if (totalNoOfFrames < numberOfFramesRequired) {\n throw new Error(\n tHtml('selfie.capture.error.minFrames', {\n count: numberOfFramesRequired,\n }),\n );\n }\n\n const frameDivisor = numberOfFramesRequired - 1;\n const frameInterval = Math.floor(totalNoOfFrames / frameDivisor);\n\n // NOTE: when we have satisfied our required 8 frames, but have good\n // candidates, we need to start replacing from the second frame\n let replacementFrameIndex = 1;\n\n for (let i = 0; i < totalNoOfFrames; i += frameInterval) {\n if (selectedFrames.length < 8) {\n selectedFrames.push(i);\n } else {\n // ACTION: replace frame, then sort selectedframes\n selectedFrames[replacementFrameIndex] = i;\n selectedFrames.sort((a, b) => a - b);\n\n // ACTION: update replacement frame index\n replacementFrameIndex += 1;\n }\n }\n\n // INFO: if we don't satisfy our requirement, we add the last index\n const lastFrameIndex = totalNoOfFrames - 1;\n\n if (selectedFrames.length < 8 && !selectedFrames.includes(lastFrameIndex)) {\n selectedFrames.push(lastFrameIndex);\n }\n\n return selectedFrames;\n}\n\nfunction templateString() {\n return `\n ${styles(this.themeColor)}\n <style>\n :host {\n --theme-color: ${this.themeColor || '#001096'};\n --color-active: #001096;\n --color-default: #2D2B2A;\n --color-disabled: #848282;\n }\n\n * {\n font-family: 'DM Sans', sans-serif;\n }\n\n [hidden] {\n display: none !important;\n }\n\n [disabled] {\n cursor: not-allowed !important;\n filter: grayscale(75%);\n }\n\n .visually-hidden {\n border: 0;\n clip: rect(1px 1px 1px 1px);\n clip: rect(1px, 1px, 1px, 1px);\n height: auto;\n margin: 0;\n overflow: hidden;\n padding: 0;\n position: absolute;\n white-space: nowrap;\n width: 1px;\n }\n\n img {\n height: auto;\n max-width: 100%;\n transform: scaleX(-1);\n }\n\n video {\n background-color: black;\n }\n\n a {\n color: currentColor;\n text-decoration: none;\n }\n\n svg {\n max-width: 100%;\n }\n\n .color-gray {\n color: #797979;\n }\n\n .color-red {\n color: red;\n }\n\n .color-richblue {\n color: #4E6577;\n }\n\n .color-richblue-shade {\n color: #0E1B42;\n }\n\n .color-digital-blue {\n color: #001096 !important;\n }\n\n .color-deep-blue {\n color: #001096;\n }\n\n .title-color {\n color: ${this.themeColor};\n }\n\n .theme-color {\n color: ${this.themeColor};\n }\n\n .center {\n text-align: center;\n margin-left: auto;\n margin-right: auto;\n }\n\n .font-size-small {\n font-size: .75rem;\n }\n\n .font-size-large {\n font-size: 1.5rem;\n }\n\n .text-transform-uppercase {\n text-transform: uppercase;\n }\n\n [id*=-\"screen\"] {\n min-block-size: 100%;\n }\n\n [data-variant~=\"full-width\"] {\n inline-size: 100%;\n }\n\n .flow > * + * {\n margin-top: 1rem;\n }\n\n .button {\n --button-color: ${this.themeColor};\n -webkit-appearance: none;\n appearance: none;\n border-radius: 2.5rem;\n border: 0;\n background-color: transparent;\n color: #fff;\n cursor: pointer;\n display: block;\n font-size: 18px;\n font-weight: 600;\n padding: .75rem 1.5rem;\n text-align: center;\n }\n\n .button:hover,\n .button:focus,\n .button:active {\n --button-color: var(--color-default);\n }\n\n .button:disabled {\n --button-color: var(--color-disabled);\n }\n\n .button[data-variant~='solid'] {\n background-color: var(--button-color);\n border: 2px solid var(--button-color);\n }\n\n .button[data-variant~='outline'] {\n color: var(--button-color);\n border: 2px solid var(--button-color);\n }\n\n .button[data-variant~='ghost'] {\n padding: 0px;\n color: var(--button-color);\n background-color: transparent;\n }\n\n .icon-btn {\n appearance: none;\n background: none;\n border: none;\n color: hsl(0deg 0% 94%);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 4px 8px;\n }\n .justify-right {\n justify-content: end !important;\n }\n .nav {\n display: flex;\n justify-content: space-between;\n }\n\n .back-wrapper {\n display: flex;\n align-items: center;\n }\n\n .back-button {\n display: block !important;\n }\n .back-button-text {\n font-size: 11px;\n line-height: 11px;\n color: rgb(21, 31, 114);\n }\n .section {\n border-radius: .5rem;\n margin-left: auto;\n margin-right: auto;\n max-width: 35ch;\n padding: 1rem;\n }\n\n .selfie-capture-review-image {\n overflow: hidden;\n aspect-ratio: 1/1;\n }\n\n #review-image {\n scale: 1.75;\n }\n\n @media (max-aspect-ratio: 1/1) {\n #review-image {\n transform: scaleX(-1) translateY(-10%);\n }\n }\n\n .tips,\n .powered-by {\n align-items: center;\n border-radius: .25rem;\n display: flex;\n justify-content: center;\n letter-spacing: .075em;\n }\n\n .powered-by {\n box-shadow: 0px 2.57415px 2.57415px rgba(0, 0, 0, 0.06);\n display: inline-flex;\n font-size: .5rem;\n }\n\n .tips {\n margin-left: auto;\n margin-right: auto;\n max-width: 17rem;\n font-size: 0.875rem;\n font-weight: 600;\n }\n\n .tips > * + *,\n .powered-by > * + * {\n display: inline-block;\n margin-left: .5em;\n }\n\n .powered-by .company {\n color: #18406D;\n font-weight: 700;\n letter-spacing: .15rem;\n }\n\n .logo-mark {\n background-color: #004071;\n display: inline-block;\n padding: .25em .5em;\n }\n\n .logo-mark svg {\n height: auto;\n justify-self: center;\n width: .75em;\n }\n\n .id-video-container.portrait {\n width: 100%;\n position: relative;\n height: calc(200px * 1.4);\n }\n\n .id-video-container.portrait video {\n width: calc(213px + 0.9rem);\n height: 100%;\n position: absolute;\n top: 239px;\n left: 161px;\n padding-bottom: calc((214px * 1.4) / 3);\n padding-top: calc((191px * 1.4) / 3);\n object-fit: cover;\n\n transform: translateX(-50%) translateY(-50%);\n z-index: 1;\n block-size: 100%;\n }\n\n .video-container,\n .id-video-container.landscape {\n position: relative;\n z-index: 1;\n width: 100%;\n overflow: hidden;\n }\n\n .video-container video,\n .id-video-container.landscape video {\n left: 50%;\n min-width: auto;\n position: absolute;\n top: 50%;\n transform: translateX(-50%) translateY(50%);\n }\n\n .video-container #smile-cta-box {\n color: #fff;\n width: 100%;\n position: absolute;\n top: 0;\n left: 0;\n padding: 2rem 0;\n opacity: 0;\n transition: opacity 0.5s ease-in-out;\n }\n\n .video-container #smile-cta {\n font-size: 1.2rem;\n font-weight: bold;\n margin-top: 0;\n margin-bottom: 0;\n }\n\n .video-container video {\n height: 150%;\n transform: scaleX(-1) translateX(50%) translateY(-50%);\n }\n\n .video-container video.agent-mode {\n min-height: 100%;\n transform: scaleX(1) translateX(-50%) translateY(-50%);\n }\n\n .video-container .video {\n background-color: black;\n position: absolute;\n left: 50%;\n height: calc(100% - 6px);\n clip-path: ellipse(101px 118px);\n }\n\n .id-video-container.landscape {\n min-height: calc((2 * 10rem) + 198px);\n height: auto;\n }\n\n .id-video-container.portrait .image-frame-portrait {\n border-width: 0.9rem;\n border-color: rgba(0, 0, 0, 0.7);\n border-style: solid;\n height: auto;\n position: absolute;\n top: 80px;\n left: 47px;\n z-index: 2;\n width: 200px;\n height: calc(200px * 1.4);\n }\n\n .id-video-container.landscape .image-frame {\n border-width: 10rem 1rem;\n border-color: rgba(0, 0, 0, 0.7);\n border-style: solid;\n height: auto;\n width: 90%;\n position: absolute;\n top: 0;\n left: 0;\n z-index: 2;\n }\n\n .id-video-container.landscape video {\n width: 100%;\n transform: translateX(-50%) translateY(-50%);\n z-index: 1;\n height: 100%;\n block-size: 100%;\n }\n\n .id-video-container.landscape img {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translateX(-50%) translateY(-50%);\n max-width: 90%;\n }\n\n .actions {\n background-color: rgba(0, 0, 0, .7);\n bottom: 0;\n display: flex;\n justify-content: space-between;\n padding: 1rem;\n position: absolute;\n width: 90%;\n z-index: 2;\n }\n\n #back-of-id-camera-screen .id-video-container.portrait .actions,\n #id-camera-screen .id-video-container.portrait .actions {\n top: 145%;\n width: calc(200px * 1.4);\n }\n\n #back-of-id-camera-screen .section.portrait, #id-camera-screen .section.portrait {\n min-height: calc((200px * 1.4) + 260px);\n }\n\n #selfie-capture-screen,\n #back-of-id-entry-screen {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n max-block-size: 100%;\n max-inline-size: 40ch;\n padding: 1rem;\n }\n\n #selfie-capture-screen header p {\n margin-block: 0 !important;\n }\n\n .document-tips {\n margin-block-start: 1.5rem;\n display: flex;\n align-items: center;\n text-align: initial;\n }\n\n .document-tips svg {\n flex-shrink: 0;\n margin-inline-end: 1rem;\n }\n\n .document-tips p {\n margin-block: 0;\n }\n\n .document-tips p:first-of-type {\n font-size; 1.875rem;\n font-weight: bold\n }\n\n [type='file'] {\n display: none;\n }\n\n .document-tips > * + * {\n margin-inline-start; 1em;\n }\n </style>\n <div id='selfie-capture-screen' class='flow center' dir='${this.direction}'>\n <smileid-navigation theme-color='${this.themeColor}' ${this.showNavigation ? 'show-navigation' : ''} ${this.hideBack ? 'hide-back' : ''}></smileid-navigation>\n\n <div class='tips'>${t('selfie.capture.tip.fitHead')}</div>\n\n <div className=\"error\">\n ${this.cameraError ? `<p class=\"color-red\">${this.cameraError}</p>` : ''}\n </div>\n <div class='section | flow' ${this.cameraError ? 'hidden' : ''}>\n <div class='video-container'>\n <div class='video'>\n </div>\n <svg id=\"image-outline\" width=\"215\" height=\"245\" viewBox=\"0 0 215 245\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style=\"position: relative;\">\n <path d=\"M210.981 122.838C210.981 188.699 164.248 241.268 107.55 241.268C50.853 241.268 4.12018 188.699 4.12018 122.838C4.12018 56.9763 50.853 4.40771 107.55 4.40771C164.248 4.40771 210.981 56.9763 210.981 122.838Z\" stroke=\"${this.themeColor}\" stroke-width=\"7.13965\"/>\n </svg>\n <div id=\"smile-cta-box\">\n <div>\n <svg width=\"120\" height=\"120\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"70 70 360 360\" fill=\"currentColor\">\n <path d=\"M354.02,247.69c4.12-12.26,6.39-24.53,6.39-35.75,0-54.63-50.19-99.08-111.88-99.08s-111.95,44.45-111.95,99.08c0,11.22,2.28,23.49,6.39,35.75-6.6,4.66-10.94,12.33-10.94,21.04,0,13.45,10.36,24.4,23.46,25.51.52,26.93,12.56,53.51,35.04,71.64v.73c.07.03.14.05.21.08,3.66,1.63,6.74,4.28,9.92,6.66.08.06.17.12.25.17,0-.08-.01-.16-.01-.25,15.23,9.12,32.95,13.89,51.85,12.96h0c15.54-.72,30.01-5.37,42.59-12.99,2.91-2.85,7.01-4.93,10.42-6.71.25-.16.51-.28.77-.43v-.76c20.36-16.83,33.62-42.32,34.85-71.11,13.15-1.05,23.57-12.03,23.57-25.53,0-8.7-4.35-16.38-10.94-21.04ZM155.53,283.54c-7.18-1.09-12.71-7.31-12.71-14.85s5.53-13.75,12.71-14.85v29.7ZM330.53,289.9c0,45.26-33.98,83.65-78.48,85.72-47.29,2.31-86.52-35.65-86.52-83.18v-40.7c15.63-4.03,38.45-15.61,65.91-46.31.08.59.13,1.21.11,1.87-.13,4.43-3.09,9.32-8.58,14.14-1.79,1.57-2.32,4.13-1.31,6.28,1.01,2.14,3.29,3.35,5.68,3,2.19-.35,48.6-8.13,71.88-38.36,3.84,13.25,12.48,33.59,31.31,48.79v48.75ZM339.42,234.31c-27.83-21.03-32.1-56.22-32.15-56.57-.26-2.37-2.08-4.28-4.43-4.67-2.33-.39-4.68.83-5.69,2.99-11.08,23.62-39.34,35.42-56.72,40.63,1.35-2.97,2.08-6,2.16-9.06.26-9.11-5.24-14.81-5.88-15.43-1.06-1.05-2.53-1.59-3.99-1.53-1.48.07-2.87.75-3.83,1.88-32.09,37.93-57.18,47.4-69.28,49.67-.68.13-1.29.39-1.84.74-.11,0-.18-.03-.29-.03-1.65,0-3.26.19-4.82.49-3.58-10.9-5.56-21.72-5.56-31.57,0-48.78,45.46-88.46,101.33-88.46s101.26,39.68,101.26,88.46c0,9.84-1.98,20.67-5.56,31.57-.85-.16-1.73-.19-2.61-.27v-4.6c0-1.67-.78-3.25-2.12-4.26ZM341.53,283.54v-29.7c7.18,1.09,12.72,7.3,12.72,14.85s-5.53,13.76-12.72,14.85Z\"/>\n <path d=\"M259.05,305.3c2.08-2.08,2.08-5.46,0-7.55-2.09-2.08-5.47-2.07-7.54,0-1.75,1.75-4.79,1.75-6.54,0-2.08-2.08-5.45-2.09-7.54,0-2.08,2.08-2.08,5.46,0,7.55,5.98,5.98,15.65,5.98,21.63,0h0Z\"/>\n <path id=\"mouth\"\n d=\"m 213.88314,319.4551 c -1.58,0.97 -0.35309,9.33393 1.50671,9.30586 6.05679,-0.0914 16.11631,0.17227 34.57066,0.13346 18.45435,-0.0388 28.15778,-0.0418 31.09964,-0.79956 1.80122,-0.46394 2.75061,-7.48365 1.16061,-8.45365 -1.6,-1.74874 -2.96432,-0.94348 -6.77747,-1.56441 -12.83012,0.04 -36.52534,0.50197 -41.29469,0.43262 -2.51525,-0.0713 -18.41588,-0.61 -20.01588,0.35 z m 57.29363,1.36599 c -9.24417,-2.23757 -8.08363,-2.42362 -20.78363,-2.42362 -12.7,0 -17.77931,2.69528 -26.84042,5.36549 12.57883,3.28731 33.57775,-4.29887 49.70067,2.24964 z\">\n <animate\n id=\"mouthAnim\"\n attributeName=\"d\"\n begin=\"indefinite\"\n dur=\"1s\"\n fill=\"freeze\"\n to=\"m 211.72,312.36 c -1.58,0.97 -2.56,2.86 -2.56,4.72 0,21.54 17.40021,38.7239 38.94021,38.7239 21.54,0 39.18979,-17.1739 39.18979,-39.0439 0,-1.86 -0.97,-3.59 -2.56,-4.56 -1.6,-0.97 -3.57,-1.03 -5.22,-0.18 -21.07,10.85 -41.53,10.85 -62.58,0 -1.65,-0.85 -3.62,-0.61 -5.22,0.35 z m 63.61,13.22 c -3.62,11.52 -14.4,19.9 -27.1,19.9 -12.7,0 -23.49,-8.38 -27.1,-19.9 18.03,6.94 36.2,6.94 54.2,0 z\" />\n </path>\n <circle fill=\"none\" stroke=\"currentColor\" stroke-width=\"10px\" cx=\"287.3\" cy=\"263.68\" r=\"14\"/>\n <circle fill=\"none\" stroke=\"currentColor\" stroke-width=\"10px\" cx=\"209.16\" cy=\"263.68\" r=\"14\"/>\n </svg>\n </div>\n <div>\n <p id='smile-cta'>${t('selfie.capture.cta.smile')}</p>\n </div>\n </div>\n </div>\n\n ${this.allowAgentMode ? `<button data-variant='outline small' id='switch-camera' class='button | center' type='button'>${this.inAgentMode ? t('selfie.capture.agentMode.on') : t('selfie.capture.agentMode.off')}</button>` : ''}\n\n <button data-variant='solid' id='start-image-capture' class='button | center' type='button'>\n ${t('selfie.capture.button.takeSelfie')}\n </button>\n\n ${this.hideAttribution ? '' : '<powered-by-smile-id></powered-by-smile-id>'}\n </div>\n </div>\n `;\n}\n\nasync function getPermissions(\n captureScreen,\n constraints = { facingMode: 'user' },\n) {\n try {\n const stream = await SmartCamera.getMedia({\n audio: false,\n video: constraints,\n });\n const devices = await navigator.mediaDevices.enumerateDevices();\n const videoDevice = devices.find(\n (device) =>\n device.kind === 'videoinput' &&\n stream.getVideoTracks()[0].getSettings().deviceId === device.deviceId,\n );\n const smartCameraWeb = document.querySelector('smart-camera-web');\n smartCameraWeb?.dispatchEvent(\n new CustomEvent('metadata.camera-name', {\n detail: { cameraName: videoDevice?.label },\n }),\n );\n captureScreen?.removeAttribute('data-camera-error');\n captureScreen?.setAttribute('data-camera-ready', true);\n } catch (error) {\n captureScreen?.removeAttribute('data-camera-ready');\n captureScreen?.setAttribute(\n 'data-camera-error',\n SmartCamera.handleCameraError(error),\n );\n }\n}\n\nclass SelfieCaptureScreen extends HTMLElement {\n constructor() {\n super();\n this.templateString = templateString.bind(this);\n this.render = () => this.templateString();\n\n this.attachShadow({ mode: 'open' });\n this.facingMode = 'user';\n if (this.allowAgentMode) {\n this.facingMode = 'environment';\n }\n }\n\n connectedCallback() {\n const template = document.createElement('template');\n template.innerHTML = this.render();\n this.shadowRoot.innerHTML = '';\n this.shadowRoot.appendChild(template.content.cloneNode(true));\n this.videoContainer = this.shadowRoot.querySelector(\n '.video-container > .video',\n );\n this.init();\n }\n\n init() {\n this._videoStreamDurationInMS = 7800;\n this._imageCaptureIntervalInMS = 200;\n\n this._data = {\n images: [],\n meta: {\n libraryVersion: COMPONENTS_VERSION,\n },\n };\n this._rawImages = [];\n\n this.setUpEventListeners();\n }\n\n reset() {\n this.disconnectedCallback();\n this.connectedCallback();\n }\n\n _startImageCapture() {\n this.startImageCapture.disabled = true;\n if (this.switchCamera) {\n this.switchCamera.disabled = true;\n }\n\n const smartCameraWeb = document.querySelector('smart-camera-web');\n smartCameraWeb?.dispatchEvent(\n new CustomEvent('metadata.selfie-capture-start'),\n );\n smartCameraWeb?.dispatchEvent(\n new CustomEvent('metadata.selfie-origin', {\n detail: {\n imageOrigin: {\n environment: 'back_camera',\n user: 'front_camera',\n }[this.inAgentMode ? 'environment' : 'user'],\n },\n }),\n );\n\n /**\n * this was culled from https://jakearchibald.com/2013/animated-line-drawing-svg/\n */\n // NOTE: initialise image outline\n const imageOutlineLength = this.imageOutline.getTotalLength();\n // Clear any previous transition\n this.imageOutline.style.transition = 'none';\n // Set up the starting positions\n this.imageOutline.style.strokeDasharray = `${imageOutlineLength} ${imageOutlineLength}`;\n this.imageOutline.style.strokeDashoffset = imageOutlineLength;\n // Trigger a layout so styles are calculated & the browser\n // picks up the starting position before animating\n this.imageOutline.getBoundingClientRect();\n // Define our transition\n this.imageOutline.style.transition = `stroke-dashoffset ${this._videoStreamDurationInMS / 1000}s ease-in-out`;\n // Go!\n this.imageOutline.style.strokeDashoffset = '0';\n\n setTimeout(() => {\n this.smileCTABox.style.opacity = 1;\n this.mouthAnim.beginElement();\n }, 1500);\n\n setTimeout(() => {\n this.smileCTABox.style.opacity = 0;\n }, 3500);\n\n setTimeout(() => {\n this.smileCTABox.style.opacity = 1;\n this.smileCTA.textContent = t('selfie.capture.cta.widerSmile');\n this.mouth.setAttribute(\n 'd',\n 'm 213.88314,319.4551 c -1.58,0.97 -0.35309,9.33393 1.50671,9.30586 6.05679,-0.0914 16.11631,0.17227 34.57066,0.13346 18.45435,-0.0388 28.15778,-0.0418 31.09964,-0.79956 1.80122,-0.46394 2.75061,-7.48365 1.16061,-8.45365 -1.6,-1.74874 -2.96432,-0.94348 -6.77747,-1.56441 -12.83012,0.04 -36.52534,0.50197 -41.29469,0.43262 -2.51525,-0.0713 -18.41588,-0.61 -20.01588,0.35 z m 57.29363,1.36599 c -9.24417,-2.23757 -8.08363,-2.42362 -20.78363,-2.42362 -12.7,0 -17.77931,2.69528 -26.84042,5.36549 12.57883,3.28731 33.57775,-4.29887 49.70067,2.24964 z',\n );\n this.mouthAnim.beginElement();\n }, 4000);\n\n this._imageCaptureInterval = setInterval(() => {\n this._capturePOLPhoto();\n }, this._imageCaptureIntervalInMS);\n\n this._videoStreamTimeout = setTimeout(() => {\n this._stopVideoStream();\n }, this._videoStreamDurationInMS);\n }\n\n async _switchCamera() {\n this.facingMode = this.facingMode === 'user' ? 'environment' : 'user';\n if (this.facingMode === 'user') {\n this.shadowRoot.querySelector('video').classList.remove('agent-mode');\n } else {\n this.shadowRoot.querySelector('video').classList.add('agent-mode');\n }\n this.startImageCapture.disabled = true;\n this.switchCamera.disabled = true;\n SmartCamera.stopMedia();\n await getPermissions(this, { facingMode: this.facingMode });\n this.handleStream(SmartCamera.stream);\n }\n\n _stopVideoStream() {\n try {\n clearTimeout(this._videoStreamTimeout);\n clearInterval(this._imageCaptureInterval);\n clearInterval(this._drawingInterval);\n\n this._capturePOLPhoto(); // NOTE: capture the last photo\n this._captureReferencePhoto();\n SmartCamera.stopMedia();\n\n const totalNoOfFrames = this._rawImages.length;\n this._data.referenceImage = this._referenceImage;\n this._data.previewImage = this._referenceImage;\n\n const livenessFramesIndices = getLivenessFramesIndices(totalNoOfFrames);\n\n this._data.images = this._data.images.concat(\n livenessFramesIndices.map((imageIndex) => ({\n image: this._rawImages[imageIndex].split(',')[1],\n image_type_id: IMAGE_TYPE.LIVENESS_IMAGE_BASE64,\n })),\n );\n\n this._publishImages();\n } catch (error) {\n console.error(error);\n // Todo: handle error\n }\n }\n\n _capturePOLPhoto() {\n const canvas = document.createElement('canvas');\n // Determine orientation of the video\n const isPortrait = this._video.videoHeight > this._video.videoWidth;\n\n // Set dimensions based on orientation, ensuring minimums\n if (isPortrait) {\n // Portrait orientation (taller than wide)\n canvas.width = 240;\n canvas.height = Math.max(\n 320,\n (canvas.width * this._video.videoHeight) / this._video.videoWidth,\n );\n } else {\n // Landscape orientation (wider than tall)\n canvas.height = 240;\n canvas.width = Math.max(\n 320,\n (canvas.height * this._video.videoWidth) / this._video.videoHeight,\n );\n }\n\n // NOTE: we do not want to test POL images\n this._drawImage(canvas, false);\n\n this._rawImages.push(canvas.toDataURL('image/jpeg', JPEG_QUALITY));\n }\n\n _captureReferencePhoto() {\n const canvas = document.createElement('canvas');\n // Determine orientation of the video\n const isPortrait = this._video.videoHeight > this._video.videoWidth;\n\n // Set dimensions based on orientation, ensuring minimums\n if (isPortrait) {\n // Portrait orientation (taller than wide)\n canvas.width = 480;\n canvas.height = Math.max(\n 640,\n (canvas.width * this._video.videoHeight) / this._video.videoWidth,\n );\n } else {\n // Landscape orientation (wider than tall)\n canvas.height = 480;\n canvas.width = Math.max(\n 640,\n (canvas.height * this._video.videoWidth) / this._video.videoHeight,\n );\n }\n\n // NOTE: we want to test the image quality of the reference photo\n this._drawImage(canvas, !this.disableImageTests);\n\n const image = canvas.toDataURL('image/jpeg', JPEG_QUALITY);\n\n this._referenceImage = image;\n\n this._data.images.push({\n image: image.split(',')[1],\n image_type_id: IMAGE_TYPE.SELFIE_IMAGE_BASE64,\n });\n }\n\n _publishImages() {\n const eventDetail = {\n ...this._data,\n facingMode: this.facingMode,\n };\n\n this.dispatchEvent(\n new CustomEvent('selfie-capture.publish', {\n detail: eventDetail,\n }),\n );\n }\n\n resetErrorMessage() {\n this.errorMessage.textContent = '';\n }\n\n _drawImage(canvas, enableImageTests = true, video = this._video) {\n // this.resetErrorMessage();\n const context = canvas.getContext('2d');\n\n context.drawImage(\n video,\n 0,\n 0,\n video.videoWidth,\n video.videoHeight,\n 0,\n 0,\n canvas.width,\n canvas.height,\n );\n\n if (enableImageTests) {\n const imageData = context.getImageData(0, 0, canvas.width, canvas.height);\n\n const hasEnoughColors = hasMoreThanNColors(imageData.data);\n\n if (hasEnoughColors) {\n return context;\n }\n throw new Error(t('selfie.capture.error.webcamCapture'));\n } else {\n return context;\n }\n }\n\n handleStream(stream) {\n try {\n const videoContainer = this.shadowRoot.querySelector('.video');\n if (!videoContainer) {\n return;\n }\n\n const videoExists = this.shadowRoot.querySelector('video');\n let video = null;\n if (videoExists) {\n video = this.shadowRoot.querySelector('video');\n } else {\n video = document.createElement('video');\n }\n\n video.autoplay = true;\n video.playsInline = true;\n video.muted = true;\n\n if ('srcObject' in video) {\n video.srcObject = stream;\n } else {\n video.src = window.URL.createObjectURL(stream);\n }\n\n video.onloadedmetadata = () => {\n video.play();\n };\n\n this._video = video;\n this._data.permissionGranted = true;\n\n if (!videoExists) {\n videoContainer.prepend(video);\n }\n } catch (error) {\n this.setAttribute(\n 'data-camera-error',\n SmartCamera.handleCameraError(error),\n );\n if (error.name !== 'AbortError') {\n console.error(error);\n }\n SmartCamera.stopMedia();\n }\n }\n\n setUpEventListeners() {\n this.navigation = this.shadowRoot.querySelector('smileid-navigation');\n\n this.startImageCapture = this.shadowRoot.querySelector(\n '#start-image-capture',\n );\n\n this.switchCamera = this.shadowRoot.querySelector('#switch-camera');\n this.imageOutline = this.shadowRoot.querySelector('#image-outline path');\n this.smileCTABox = this.shadowRoot.querySelector('#smile-cta-box');\n this.smileCTA = this.shadowRoot.querySelector('#smile-cta');\n this.mouth = this.shadowRoot.querySelector('#mouth');\n this.mouthAnim = this.shadowRoot.querySelector('#mouthAnim');\n\n this.startImageCapture.addEventListener('click', () => {\n this._startImageCapture();\n });\n\n this.switchCamera?.addEventListener('click', () => {\n this._switchCamera();\n });\n\n this.navigation?.addEventListener('navigation.back', () => {\n this.handleBackEvents();\n });\n\n this.navigation?.addEventListener('navigation.close', () => {\n this.closeWindow();\n });\n\n if (SmartCamera.stream) {\n this.handleStream(SmartCamera.stream);\n } else if (\n this.hasAttribute('data-camera-ready') ||\n !this.hasAttribute('data-camera-error')\n ) {\n getPermissions(this, { facingMode: this.facingMode });\n }\n\n this.setupAgentMode();\n }\n\n disconnectedCallback() {\n SmartCamera.stopMedia();\n clearTimeout(this._videoStreamTimeout);\n }\n\n get hideBack() {\n return this.hasAttribute('hide-back');\n }\n\n get showNavigation() {\n return this.hasAttribute('show-navigation');\n }\n\n get themeColor() {\n return this.getAttribute('theme-color') || '#001096';\n }\n\n get hideAttribution() {\n return this.hasAttribute('hide-attribution');\n }\n\n async setupAgentMode() {\n if (!this.allowAgentMode) {\n return;\n }\n\n const supportAgentMode = await SmartCamera.supportsAgentMode();\n\n if (supportAgentMode || this.hasAttribute('show-agent-mode-for-tests')) {\n this.switchCamera.hidden = false;\n if (this.facingMode === 'user') {\n this.shadowRoot.querySelector('video')?.classList?.remove('agent-mode');\n } else {\n this.shadowRoot.querySelector('video')?.classList?.add('agent-mode');\n }\n } else {\n this.switchCamera.hidden = true;\n }\n }\n\n get hasAgentSupport() {\n return this.hasAttribute('has-agent-support');\n }\n\n get title() {\n return this.getAttribute('title') || t('selfie.instructions.title');\n }\n\n get direction() {\n return this.getAttribute('dir') || getDirection() || 'ltr';\n }\n\n get hidden() {\n return this.getAttribute('hidden');\n }\n\n get cameraError() {\n return this.getAttribute('data-camera-error');\n }\n\n get disableImageTests() {\n return this.hasAttribute('disable-image-tests');\n }\n\n get allowAgentMode() {\n return this.getAttribute('allow-agent-mode') === 'true';\n }\n\n get inAgentMode() {\n return this.facingMode === 'environment';\n }\n\n static get observedAttributes() {\n return [\n 'allow-agent-mode',\n 'data-camera-error',\n 'data-camera-ready',\n 'disable-image-tests',\n 'hidden',\n 'hide-back-to-host',\n 'show-navigation',\n 'title',\n ];\n }\n\n attributeChangedCallback(name) {\n switch (name) {\n case 'data-camera-error':\n case 'hidden':\n case 'title':\n this.shadowRoot.innerHTML = this.render();\n this.init();\n break;\n case 'allow-agent-mode':\n // only re-render if the shadowRoot is empty or not initialized\n if (!this.shadowRoot.innerHTML.trim()) {\n this.shadowRoot.innerHTML = this.render();\n this.init();\n } else {\n // update the setupAgentMode\n this.setupAgentMode();\n }\n break;\n case 'show-navigation':\n // update the navigation element if it exists\n if (this.shadowRoot.innerHTML.trim()) {\n const navigation =\n this.shadowRoot.querySelector('smileid-navigation');\n if (navigation) {\n if (this.showNavigation) {\n navigation.setAttribute('show-navigation', '');\n } else {\n navigation.removeAttribute('show-navigation');\n }\n }\n } else {\n this.shadowRoot.innerHTML = this.render();\n this.init();\n }\n break;\n case 'data-camera-ready':\n // don't re-render, just handle the stream\n if (this.hasAttribute('data-camera-ready') && SmartCamera.stream) {\n this.handleStream(SmartCamera.stream);\n }\n break;\n default:\n break;\n }\n }\n\n handleBackEvents() {\n this.stopMedia();\n this.dispatchEvent(new CustomEvent('selfie-capture.cancelled'));\n }\n\n closeWindow() {\n this.stopMedia();\n this.dispatchEvent(new CustomEvent('selfie-capture.close'));\n }\n\n stopMedia() {\n this.removeAttribute('data-camera-ready');\n SmartCamera.stopMedia();\n }\n}\n\nif ('customElements' in window && !customElements.get('selfie-capture')) {\n window.customElements.define('selfie-capture', SelfieCaptureScreen);\n}\n\nexport default SelfieCaptureScreen;\n","import { useState, useEffect, useRef } from 'preact/hooks';\nimport { IconLoader2 } from '@tabler/icons-preact';\nimport register from 'preact-custom-element';\nimport type { FunctionComponent } from 'preact';\n\nimport { getBoolProp } from '../../../../utils/props';\nimport { translate, translateHtml } from '../../../../domain/localisation';\nimport SmartSelfieCapture from '../smartselfie-capture/SmartSelfieCapture';\nimport EnhancedSmartSelfieCapture from '../enhanced-smartselfie-capture/EnhancedSmartSelfieCapture';\n// Legacy web component fallback (used when Mediapipe isn't available)\nimport '../selfie-capture/SelfieCapture';\n// Mediapipe loader/manager used by SmartSelfieCapture\nimport {\n getMediapipeInstance,\n UnsupportedMediapipeEnvironmentError,\n} from '../smartselfie-capture/utils/mediapipeManager';\n\n// Minimal typing for the optional Sentry SDK that host pages may expose on\n// `window`. We only depend on `captureException`, so keep the surface tight.\n// Sentry tag values are expected to be strings, so the type enforces that.\ntype SentryTags = Record<string, string>;\ndeclare global {\n interface Window {\n Sentry?: {\n captureException: (\n error: unknown,\n context?: { tags?: SentryTags },\n ) => void;\n };\n }\n}\n\ninterface Props {\n timeout?: string | number;\n interval?: number;\n duration?: number;\n 'theme-color'?: string;\n 'show-navigation'?: string | boolean;\n 'allow-agent-mode'?: string | boolean;\n 'allow-legacy-selfie-fallback'?: string | boolean;\n 'show-agent-mode-for-tests'?: string | boolean;\n 'hide-attribution'?: string | boolean;\n 'disable-image-tests'?: string | boolean;\n 'use-strict-mode'?: string | boolean;\n 'show-back-on-guidelines'?: string | boolean;\n key?: string;\n 'start-countdown'?: string | boolean;\n hidden?: string | boolean;\n}\n\n// Default deadlines for the Mediapipe load attempt. These are used when the\n// host did NOT provide an explicit `timeout` prop; an explicit `timeout`\n// always wins regardless of the legacy-fallback flag.\n// - With legacy fallback allowed: 20s, so users on broken networks get a\n// usable capture quickly.\n// - Without legacy fallback: 90s, so we keep waiting before giving up to\n// the error UI.\nconst DEFAULT_MEDIAPIPE_WAIT_MS = 90 * 1000;\nconst DEFAULT_WAIT_MS = 20 * 1000;\n// Cap retries on transient init failures so we don't spin forever, while still\n// allowing recovery from short-lived issues (e.g. CDN hiccups while the\n// wrapper is preloading in a hidden state). Retries are spaced with\n// exponential backoff (base * 2^(attempt-1)) so we don't hammer the CDN.\nconst MAX_MEDIAPIPE_INIT_ATTEMPTS = 3;\nconst MEDIAPIPE_RETRY_BASE_DELAY_MS = 500;\n// Cap user-initiated retries from the failure screen. Each tap resets the\n// per-attempt counter (granting another `MAX_MEDIAPIPE_INIT_ATTEMPTS` round of\n// internal retries), so without this cap a frustrated or malicious user could\n// hammer Retry indefinitely and generate unbounded requests to the model CDN.\nconst MAX_USER_RETRIES = 3;\n\n// Wrapper component that decides whether to use the modern\n// SmartSelfieCapture (Mediapipe-based) or fallback to the legacy `selfie-capture`\n// web component after a timeout (default 90 seconds).\nconst SelfieCaptureWrapper: FunctionComponent<Props> = ({\n timeout,\n 'start-countdown': startCountdownProp = false,\n 'allow-legacy-selfie-fallback': allowLegacySelfieFallbackProp = false,\n 'use-strict-mode': useStrictModeProp = false,\n hidden: hiddenProp = false,\n ...props\n}) => {\n // Detect if tests are running under Cypress/Electron (affects loading behavior)\n const isParentCypress = (() => {\n try {\n return (\n !!(window.parent as any).Cypress ||\n (window.parent.navigator.userAgent.includes('Electron') &&\n (window.parent as any).__Cypress)\n );\n } catch {\n return false;\n }\n })();\n const isCypress =\n isParentCypress ||\n !!(window as any).Cypress ||\n (window.navigator.userAgent.includes('Electron') &&\n (window as any).__Cypress);\n\n // Test-only seam: the `isCypress` short-circuit below skips the whole\n // MediaPipe load path (so most specs run fast against the legacy fallback).\n // A spec that wants to exercise the real load/spinner/error/Retry path sets\n // `window.__SMILE_ID_TEST_FORCE_MEDIAPIPE_LOAD__ = true` to opt out of that\n // short-circuit. When the flag is unset, `skipMediapipeForTests === isCypress`,\n // so production and existing-test behaviour are unchanged.\n const forceMediapipeLoad = !!(window as any)\n .__SMILE_ID_TEST_FORCE_MEDIAPIPE_LOAD__;\n const skipMediapipeForTests = isCypress && !forceMediapipeLoad;\n\n const hidden = getBoolProp(hiddenProp);\n const startCountdown = getBoolProp(startCountdownProp);\n const useStrictMode = getBoolProp(useStrictModeProp);\n // Strict mode (Enhanced SmartSelfie) requires Mediapipe head-pose detection,\n // so the legacy fallback is force-disabled regardless of the partner setting.\n const allowLegacySelfieFallback =\n !useStrictMode && getBoolProp(allowLegacySelfieFallbackProp);\n\n // Resolve how long we'll wait for Mediapipe before the hard deadline fires.\n // Precedence:\n // 1. Explicit `timeout` prop (parsed defensively because web component\n // attributes arrive as strings).\n // 2. With legacy fallback allowed: DEFAULT_WAIT_MS (20s).\n // 3. Otherwise: DEFAULT_MEDIAPIPE_WAIT_MS (90s).\n const parsedTimeout = typeof timeout === 'string' ? Number(timeout) : timeout;\n const hasExplicitTimeout =\n typeof parsedTimeout === 'number' &&\n Number.isFinite(parsedTimeout) &&\n parsedTimeout > 0;\n const defaultLoadingTime = allowLegacySelfieFallback\n ? DEFAULT_WAIT_MS\n : DEFAULT_MEDIAPIPE_WAIT_MS;\n const loadingTime = hasExplicitTimeout\n ? (parsedTimeout as number)\n : defaultLoadingTime;\n\n // Component state:\n // - mediapipeReady: whether the mediapipe instance has successfully loaded\n // - loadingProgress: percentage used for the visible loading UI (cosmetic)\n // - loadDeadlineExceeded: hard cap signal — once true, we stop waiting for\n // Mediapipe and commit to the legacy fallback (or error UI). Kept\n // separate from `loadingProgress` so the decision is driven by a single\n // setTimeout firing once, not by a 200ms ticking interval that can race\n // with the Mediapipe promise resolution.\n // - initialSessionCompleted: set when the legacy component emits publish/cancel/close\n // - mediapipeLoading: true while attempting to load mediapipe\n // - usingSelfieCapture: whether we've mounted the legacy `selfie-capture` element\n // If MediaPipe already loaded earlier in this session (e.g. we're remounting\n // after returning from document capture), reuse the cached singleton instance\n // immediately instead of showing the loading spinner again. The model and\n // WASM are already in memory, so no network call is needed.\n const mediapipeAlreadyLoaded = !!(\n window.__smileIdentityMediapipe?.loaded &&\n window.__smileIdentityMediapipe?.instance\n );\n\n const [mediapipeReady, setMediapipeReady] = useState(mediapipeAlreadyLoaded);\n const [loadingProgress, setLoadingProgress] = useState(\n skipMediapipeForTests || mediapipeAlreadyLoaded ? 100 : 0,\n );\n const [loadDeadlineExceeded, setLoadDeadlineExceeded] = useState(\n skipMediapipeForTests,\n );\n const [initialSessionCompleted, setInitialSessionCompleted] = useState(false);\n const [mediapipeLoading, setMediapipeLoading] = useState(false);\n // Concurrency guard for the load effect. Kept in a ref — NOT in\n // `mediapipeLoading` state — so the effect's guard does not depend on a value\n // the effect itself sets. If it did (as it used to), calling\n // `setMediapipeLoading(true)` would re-run the effect, whose cleanup flips\n // `cancelled` true, and a slow `getMediapipeInstance()` would then resolve\n // into a cancelled closure — never calling `setMediapipeReady(true)`. That\n // left the UI stuck on the loading spinner even though MediaPipe loaded\n // successfully (intermittent: only when the load lost the race to the\n // re-render).\n const mediapipeLoadingRef = useRef(false);\n // Bumped to re-trigger the load effect for a bounded retry after a transient\n // failure (replaces re-using `mediapipeLoading` as the re-trigger signal).\n const [mediapipeRetryTick, setMediapipeRetryTick] = useState(0);\n // `unsupportedEnvironment` is a permanent, one-shot signal: we know\n // MediaPipe cannot run here, so stop trying.\n const [unsupportedEnvironment, setUnsupportedEnvironment] = useState(false);\n // Bounded retry counter for transient init failures. Stored in a ref so\n // incrementing it does not trigger a re-render — it's only read inside the\n // load effect.\n const mediapipeInitAttemptsRef = useRef(0);\n // Dedup flag so we only report a given init failure to Sentry once per\n // wrapper instance, even if we end up retrying. Ref for the same reason.\n const mediapipeInitReportedRef = useRef(false);\n // User-initiated Retry presses are also bounded — see `MAX_USER_RETRIES`.\n const userRetryCountRef = useRef(0);\n const [retriesExhausted, setRetriesExhausted] = useState(false);\n const [usingSelfieCapture, setUsingSelfieCapture] = useState(false);\n\n // Attempt to load Mediapipe (with a small bounded retry budget). If\n // Mediapipe is already ready, currently loading, the environment is\n // definitively unsupported, we've exhausted our retry budget, or we're\n // running under Cypress, skip the attempt. On transient failure we wait\n // (exponential backoff) before allowing the effect to re-run.\n useEffect(() => {\n if (\n mediapipeReady ||\n mediapipeLoadingRef.current ||\n unsupportedEnvironment ||\n mediapipeInitAttemptsRef.current >= MAX_MEDIAPIPE_INIT_ATTEMPTS ||\n skipMediapipeForTests\n )\n return undefined;\n\n let cancelled = false;\n let retryTimeoutId: ReturnType<typeof setTimeout> | null = null;\n\n // Mark loading via the ref (effect guard) and the state (UI). The state is\n // intentionally NOT in this effect's deps — see `mediapipeLoadingRef`.\n mediapipeLoadingRef.current = true;\n setMediapipeLoading(true);\n\n const loadMediapipe = async () => {\n const attemptNumber = mediapipeInitAttemptsRef.current + 1;\n mediapipeInitAttemptsRef.current = attemptNumber;\n try {\n await getMediapipeInstance();\n if (cancelled) return;\n mediapipeLoadingRef.current = false;\n setMediapipeReady(true);\n setMediapipeLoading(false);\n } catch (error) {\n if (cancelled) return;\n mediapipeLoadingRef.current = false;\n // Loading failed; we'll fall back to the legacy selfie-capture component\n // after the loadingProgress reaches 100% (or sooner for definitively\n // unsupported environments — see below).\n console.error('Failed to load Mediapipe:', error);\n const isUnsupportedEnvironment =\n error instanceof UnsupportedMediapipeEnvironmentError;\n // Report to Sentry (when the host page has exposed it on window) so we\n // can observe how often users land on the fallback path and which\n // environments are affected. Dedup so retries don't flood Sentry.\n if (!mediapipeInitReportedRef.current) {\n mediapipeInitReportedRef.current = true;\n window.Sentry?.captureException(error, {\n tags: {\n area: 'mediapipe_init',\n mediapipe_unsupported_environment: isUnsupportedEnvironment\n ? 'true'\n : 'false',\n },\n });\n }\n // When the environment definitively cannot run MediaPipe (e.g. no\n // WebAssembly reftypes support), there is no point retrying or keeping\n // the user staring at the loading spinner for the full countdown —\n // mark as unsupported and short-circuit to the fallback decision\n // immediately.\n if (isUnsupportedEnvironment) {\n setUnsupportedEnvironment(true);\n setLoadingProgress(100);\n setLoadDeadlineExceeded(true);\n setMediapipeLoading(false);\n return;\n }\n // Transient failure: wait with exponential backoff before allowing the\n // effect to re-run by flipping mediapipeLoading back to false. If\n // we've exhausted our retry budget, just release the loading flag so\n // the countdown / fallback UI can proceed.\n const hasRetriesLeft = attemptNumber < MAX_MEDIAPIPE_INIT_ATTEMPTS;\n if (!hasRetriesLeft) {\n setMediapipeLoading(false);\n return;\n }\n const backoffMs =\n MEDIAPIPE_RETRY_BASE_DELAY_MS * 2 ** (attemptNumber - 1);\n retryTimeoutId = setTimeout(() => {\n retryTimeoutId = null;\n if (cancelled) return;\n setMediapipeLoading(false);\n // Re-trigger the effect for the next attempt via a dedicated counter\n // rather than toggling `mediapipeLoading` (which is no longer a dep).\n setMediapipeRetryTick((tick) => tick + 1);\n }, backoffMs);\n }\n };\n\n loadMediapipe();\n\n return () => {\n cancelled = true;\n mediapipeLoadingRef.current = false;\n if (retryTimeoutId !== null) {\n clearTimeout(retryTimeoutId);\n }\n };\n // `mediapipeLoading` is deliberately excluded: it is set inside this effect,\n // so depending on it would re-run the effect and cancel the in-flight load.\n }, [mediapipeReady, unsupportedEnvironment, mediapipeRetryTick]);\n\n // Cosmetic loading progress: ticks 0→100 over `loadingTime` so the UI can\n // show \"slow connection\" copy past the SLOW_CONNECTION_THRESHOLD. This is\n // purely visual — it does NOT decide when we fall back. The decision is\n // driven by `loadDeadlineExceeded` below.\n useEffect(() => {\n if (hidden || !startCountdown || mediapipeReady) return undefined;\n\n const timer = setInterval(() => {\n setLoadingProgress((prev: number) => {\n if (prev >= 100) {\n clearInterval(timer);\n return 100;\n }\n return prev + 1;\n });\n }, loadingTime / 100);\n\n return () => {\n clearInterval(timer);\n };\n // `mediapipeRetryTick` restarts the cosmetic progress when the user taps\n // Retry (which resets `loadingProgress` to 0).\n }, [hidden, startCountdown, loadingTime, mediapipeReady, mediapipeRetryTick]);\n\n // Hard deadline: a single setTimeout that flips `loadDeadlineExceeded`\n // exactly once. This is the signal the render path uses to commit to the\n // fallback. Skipped when hidden, when Mediapipe is already ready, or under\n // Cypress (where the flag is pre-seeded to true).\n useEffect(() => {\n if (\n hidden ||\n mediapipeReady ||\n loadDeadlineExceeded ||\n skipMediapipeForTests\n )\n return undefined;\n\n const id = setTimeout(() => {\n setLoadDeadlineExceeded(true);\n }, loadingTime);\n\n return () => clearTimeout(id);\n }, [\n hidden,\n mediapipeReady,\n loadDeadlineExceeded,\n loadingTime,\n skipMediapipeForTests,\n ]);\n\n // Latch the legacy fallback decision in an effect rather than during\n // render. Effects only run after commit, so by the time this runs, any\n // Mediapipe-ready update scheduled in the same batch as the deadline tick\n // will already be visible — closing the race where `setLoadDeadlineExceeded`\n // and `setMediapipeReady` fire in adjacent microtasks.\n useEffect(() => {\n if (hidden || usingSelfieCapture || mediapipeReady) return;\n if (!loadDeadlineExceeded) return;\n const legacyFallbackAllowed =\n allowLegacySelfieFallback || skipMediapipeForTests;\n if (!legacyFallbackAllowed) return;\n setUsingSelfieCapture(true);\n }, [\n hidden,\n usingSelfieCapture,\n mediapipeReady,\n loadDeadlineExceeded,\n allowLegacySelfieFallback,\n skipMediapipeForTests,\n ]);\n\n useEffect(() => {\n if (hidden || mediapipeReady || !loadDeadlineExceeded) return undefined;\n\n const setupEventForwarding = () => {\n const selfieCapture = document.querySelector('selfie-capture');\n if (\n selfieCapture &&\n !selfieCapture.hasAttribute('data-backup-events-setup')\n ) {\n selfieCapture.setAttribute('data-backup-events-setup', 'true');\n\n const forwardEvent = (event: Event) => {\n const customEvent = event as CustomEvent;\n window.dispatchEvent(\n new CustomEvent(customEvent.type, {\n detail: customEvent.detail,\n bubbles: true,\n }),\n );\n };\n\n selfieCapture.addEventListener('selfie-capture.publish', forwardEvent);\n selfieCapture.addEventListener(\n 'selfie-capture.cancelled',\n forwardEvent,\n );\n selfieCapture.addEventListener('selfie-capture.close', forwardEvent);\n\n return () => {\n selfieCapture.removeEventListener(\n 'selfie-capture.publish',\n forwardEvent,\n );\n selfieCapture.removeEventListener(\n 'selfie-capture.cancelled',\n forwardEvent,\n );\n selfieCapture.removeEventListener(\n 'selfie-capture.close',\n forwardEvent,\n );\n };\n }\n return undefined;\n };\n\n const timeoutId = setTimeout(setupEventForwarding, 200);\n return () => {\n clearTimeout(timeoutId);\n };\n }, [hidden, mediapipeReady, loadDeadlineExceeded]);\n\n // Dispatch allow_legacy_selfie_fallback config for observability\n useEffect(() => {\n if (hidden) return;\n\n const smartCameraWeb = document.querySelector('smart-camera-web');\n smartCameraWeb?.dispatchEvent(\n new CustomEvent('metadata.allow-legacy-selfie-fallback', {\n detail: {\n allow_legacy_selfie_fallback: allowLegacySelfieFallback,\n },\n }),\n );\n }, [hidden, allowLegacySelfieFallback]);\n\n // Announce to any `smart-camera-web` element which liveness version is active.\n // The old capture uses 0.0.1, the new one 1.0.0.\n useEffect(() => {\n if (hidden || mediapipeLoading) return;\n\n const smartCameraWeb = document.querySelector('smart-camera-web');\n smartCameraWeb?.dispatchEvent(\n new CustomEvent('metadata.active-liveness-version', {\n detail: {\n version: usingSelfieCapture ? '0.0.1' : '1.0.0',\n },\n }),\n );\n }, [usingSelfieCapture, hidden, mediapipeLoading]);\n\n // Retry from the failure screen: clear the give-up state and re-arm the load\n // effect, deadline, and cosmetic progress so we make a fresh attempt. We reset\n // `unsupportedEnvironment` so a genuinely unsupported device fails fast again\n // (rather than spinning for the full deadline) instead of being permanently\n // latched off. User taps are capped by `MAX_USER_RETRIES` so a frustrated or\n // malicious user can't hammer Retry indefinitely and generate unbounded\n // requests to the model CDN.\n const handleRetry = () => {\n if (userRetryCountRef.current >= MAX_USER_RETRIES) {\n setRetriesExhausted(true);\n return;\n }\n userRetryCountRef.current += 1;\n mediapipeInitAttemptsRef.current = 0;\n mediapipeInitReportedRef.current = false;\n mediapipeLoadingRef.current = false;\n setUnsupportedEnvironment(false);\n setLoadDeadlineExceeded(false);\n setLoadingProgress(0);\n setMediapipeRetryTick((tick) => tick + 1);\n };\n\n if (hidden) {\n return null;\n }\n\n // Strict mode (Enhanced SmartSelfie) owns its own loading UX. Mount it\n // immediately — the guidelines screen doesn't need Mediapipe, and by the\n // time the user reaches the capture screen the background load started by\n // `useFaceCapture.initializeFaceLandmarker()` will normally have resolved.\n if (useStrictMode) {\n return (\n <>\n <style>{`:host { display: block; height: 100%; }`}</style>\n <EnhancedSmartSelfieCapture {...(props as any)} />\n </>\n );\n }\n\n // on retakes, prefer SmartSelfieCapture if Mediapipe is ready\n if (initialSessionCompleted && mediapipeReady && !usingSelfieCapture) {\n return <SmartSelfieCapture {...props} />;\n }\n\n // use SmartSelfieCapture if mediapipe loads\n if (!initialSessionCompleted && mediapipeReady && !usingSelfieCapture) {\n return <SmartSelfieCapture {...props} />;\n }\n\n // Legacy capture is mounted only once the latch effect has set\n // `usingSelfieCapture`. The effect re-checks `mediapipeReady` after commit,\n // so if Mediapipe became ready in the same batch as the deadline tick, the\n // latch is skipped and the SmartSelfie branch above wins. While we're\n // waiting for the effect to fire (a single microtask), keep showing the\n // spinner instead of flashing legacy.\n if (usingSelfieCapture) {\n const propsWithoutHidden = { ...props };\n delete (propsWithoutHidden as any).hidden;\n\n return (\n // @ts-expect-error --- preact-custom-element doesn't have proper types for refs\n <selfie-capture\n {...propsWithoutHidden}\n ref={(el: HTMLElement) => {\n if (el && !el.hasAttribute('data-events-setup')) {\n el.setAttribute('data-events-setup', 'true');\n\n const forwardEvent = (event: Event) => {\n const customEvent = event as CustomEvent;\n\n if (\n customEvent.type === 'selfie-capture.publish' ||\n customEvent.type === 'selfie-capture.cancelled' ||\n customEvent.type === 'selfie-capture.close'\n ) {\n setInitialSessionCompleted(true);\n }\n\n window.dispatchEvent(\n new CustomEvent(customEvent.type, {\n detail: customEvent.detail,\n bubbles: true,\n }),\n );\n };\n\n el.addEventListener('selfie-capture.publish', forwardEvent);\n el.addEventListener('selfie-capture.cancelled', forwardEvent);\n el.addEventListener('selfie-capture.close', forwardEvent);\n }\n }}\n />\n );\n }\n\n // Hard deadline elapsed and legacy fallback isn't allowed: show an actionable\n // error. The network is usually fine here (the hold-up is on-device setup), so\n // only blame the connection when the browser actually reports being offline —\n // otherwise frame it as a setup problem. Always offer a Retry control.\n if (\n loadDeadlineExceeded &&\n !(allowLegacySelfieFallback || skipMediapipeForTests)\n ) {\n const isOffline =\n typeof navigator !== 'undefined' && navigator.onLine === false;\n const errorKey = isOffline\n ? 'selfie.capture.loading.offlineError'\n : 'selfie.capture.loading.setupError';\n const themeColor = (props as Record<string, string>)['theme-color'];\n\n return (\n <div style={{ textAlign: 'center', marginTop: '20%', padding: '0 20px' }}>\n <p style={{ fontSize: '1.2rem', color: '#333' }}>\n {translate(errorKey)}\n </p>\n <button\n type=\"button\"\n onClick={handleRetry}\n disabled={retriesExhausted}\n style={{\n marginTop: '16px',\n padding: '0.75rem 1.5rem',\n borderRadius: '2.5rem',\n border: 'none',\n backgroundColor: themeColor || '#001096',\n color: '#fff',\n fontSize: '1rem',\n fontWeight: 600,\n cursor: retriesExhausted ? 'not-allowed' : 'pointer',\n opacity: retriesExhausted ? 0.6 : 1,\n }}\n >\n {translate('selfie.capture.loading.retry')}\n </button>\n </div>\n );\n }\n\n // Midpoint threshold (40s out of 90s ≈ 44%)\n const SLOW_CONNECTION_THRESHOLD = 44;\n\n return (\n <div style={{ textAlign: 'center', marginTop: '20%' }}>\n <div\n style={{\n marginBottom: '16px',\n display: 'flex',\n justifyContent: 'center',\n }}\n >\n <IconLoader2\n size={48}\n style={{ animation: 'spin 1s linear infinite' }}\n />\n </div>\n {loadingProgress >= SLOW_CONNECTION_THRESHOLD ? (\n <p>{translate('selfie.capture.loading.slowConnection')}</p>\n ) : (\n <p>\n {translateHtml('selfie.capture.loading.progress', {\n progress: loadingProgress,\n })}\n </p>\n )}\n <style>{`\n @keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n `}</style>\n </div>\n );\n};\n\nif (!customElements.get('selfie-capture-wrapper')) {\n register(\n SelfieCaptureWrapper,\n 'selfie-capture-wrapper',\n [\n 'timeout',\n 'interval',\n 'duration',\n 'theme-color',\n 'show-navigation',\n 'allow-agent-mode',\n 'allow-legacy-selfie-fallback',\n 'show-agent-mode-for-tests',\n 'hide-attribution',\n 'disable-image-tests',\n 'use-strict-mode',\n 'show-back-on-guidelines',\n 'key',\n 'start-countdown',\n 'hidden',\n ],\n { shadow: true },\n );\n}\n\nexport default SelfieCaptureWrapper;\n","import './selfie-capture-instructions';\nimport './selfie-capture-review';\nimport './selfie-capture-wrapper/index.ts';\nimport { getMediapipeInstance } from './smartselfie-capture/utils/mediapipeManager.ts';\nimport SmartCamera from '../../../domain/camera/src/SmartCamera';\nimport styles from '../../../styles/src/styles';\nimport packageJson from '../../../../package.json';\nimport { JPEG_QUALITY } from '../../../domain/constants/src/Constants';\n\nconst COMPONENTS_VERSION = packageJson.version;\n\nconst smartCameraWeb = document.querySelector('smart-camera-web');\n\n/**\n * Minimum-correct HTML attribute escape. `&` must be replaced first so the\n * subsequent `\"` -> `"` substitution isn't double-encoded. Used by every\n * getter that interpolates a partner-supplied value into the `innerHTML`\n * template in `connectedCallback` — without this, a value containing `\"`\n * (or `&`) would break out of the attribute and inject markup.\n */\nconst escAttr = (s) => String(s).replace(/&/g, '&').replace(/\"/g, '"');\n\nconst cropImageFromDataUri = (dataUri, cropPercentX = 0, cropPercentY = 0) =>\n new Promise((resolve, reject) => {\n if (!dataUri || typeof dataUri !== 'string') {\n reject(new Error('Invalid data URI provided'));\n return;\n }\n\n if (\n cropPercentX < 0 ||\n cropPercentX >= 99 ||\n cropPercentY < 0 ||\n cropPercentY >= 99\n ) {\n reject(new Error('Crop percentages must be between 0 and 99'));\n return;\n }\n\n const img = new Image();\n\n img.onload = () => {\n try {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n const originalWidth = img.width;\n const originalHeight = img.height;\n const cropAmountX = (originalWidth * cropPercentX) / 100;\n const cropAmountY = (originalHeight * cropPercentY) / 100;\n\n const newWidth = originalWidth - cropAmountX * 2;\n const newHeight = originalHeight - cropAmountY * 2;\n canvas.width = newWidth;\n canvas.height = newHeight;\n\n ctx.drawImage(\n img,\n cropAmountX,\n cropAmountY,\n newWidth,\n newHeight,\n 0,\n 0,\n newWidth,\n newHeight,\n );\n\n const croppedDataUri = canvas.toDataURL('image/jpeg', JPEG_QUALITY);\n resolve(croppedDataUri);\n } catch (error) {\n reject(new Error(`Failed to process image: ${error.message}`));\n }\n };\n\n img.onerror = () => {\n reject(new Error('Failed to load image from data URI'));\n };\n\n img.src = dataUri;\n });\n\nclass SelfieCaptureScreens extends HTMLElement {\n constructor() {\n super();\n this.activeScreen = null;\n this._remountKey = 0; // Counter for forcing wrapper remounts\n smartCameraWeb?.dispatchEvent(new CustomEvent('metadata.initialize'));\n }\n\n connectedCallback() {\n this.innerHTML = `\n ${styles(this.themeColor)}\n <div style=\"height: 100%;\">\n <selfie-capture-instructions theme-color=\"${escAttr(this.themeColor)}\" ${this.showNavigation} ${this.hideAttribution} ${this.hideBack} hidden></selfie-capture-instructions>\n <selfie-capture-wrapper theme-color=\"${escAttr(this.themeColor)}\" ${this.showNavigation} ${this.allowAgentMode} ${this.allowAgentModeTests} ${this.hideAttribution} ${this.disableImageTests} ${this.allowLegacySelfieFallback} ${this.useStrictMode} ${this.showBackOnGuidelines} key=\"${this._remountKey}\" start-countdown=\"false\" hidden></selfie-capture-wrapper>\n <selfie-capture-review theme-color=\"${escAttr(this.themeColor)}\" ${this.showNavigation} ${this.hideAttribution} hidden></selfie-capture-review>\n </div>\n `;\n\n this._data = {\n images: [],\n meta: {\n libraryVersion: COMPONENTS_VERSION,\n },\n };\n this.selfieInstruction = this.querySelector('selfie-capture-instructions');\n this.selfieCapture = this.querySelector('selfie-capture-wrapper');\n this.selfieReview = this.querySelector('selfie-capture-review');\n\n if (\n this.getAttribute('initial-screen') === 'selfie-capture' ||\n this.hideInstructions ||\n // In strict mode the modern `enhanced-smartselfie-capture` element\n // renders its own guidelines screen, so we skip the legacy\n // `selfie-capture-instructions` element entirely.\n this.isStrictMode\n ) {\n this.setActiveScreen(this.selfieCapture);\n } else {\n this.setActiveScreen(this.selfieInstruction);\n }\n\n this.setUpEventListeners();\n\n // Pre-warm MediaPipe as soon as the selfie flow starts so the heavy WASM +\n // model download (and on-device init) happens while the user reads the\n // instructions — not behind a blocking spinner on the capture screen. This\n // is fire-and-forget and idempotent: getMediapipeInstance() caches a single\n // in-flight promise / instance, so the wrapper (and any remount) reuses the\n // same load instead of starting a new one. Errors are handled by the\n // wrapper's own retry/fallback path, so swallow them here.\n //\n // Skipped under Cypress to match `SelfieCaptureWrapper`'s existing test\n // seam (`skipMediapipeForTests`). Specs rely on the wrapper short-circuiting\n // to the legacy `selfie-capture` fallback; pre-warming here would race with\n // that seam and (intermittently) flip the wrapper into the SmartSelfie path\n // by populating `window.__smileIdentityMediapipe` before the wrapper mounts.\n //\n // The parent check covers the embed Cypress context where this element runs\n // inside an iframe and window.Cypress is only set on the parent frame.\n const isCypress =\n !!window.Cypress ||\n (() => {\n try {\n return !!window.parent.Cypress;\n } catch {\n return false;\n }\n })() ||\n (window.navigator.userAgent.includes('Electron') && window.__Cypress);\n const forceMediapipeLoad = !!window.__SMILE_ID_TEST_FORCE_MEDIAPIPE_LOAD__;\n if (!isCypress || forceMediapipeLoad) {\n getMediapipeInstance().catch(() => {});\n }\n }\n\n getAgentMode() {\n return this.inAgentMode ? 'environment' : 'user';\n }\n\n disconnectedCallback() {\n SmartCamera.stopMedia();\n smartCameraWeb?.dispatchEvent(new CustomEvent('metadata.cleanup'));\n\n if (this._selfieWrapperListeners) {\n this._selfieWrapperListeners.forEach(({ event, handler }) => {\n window.removeEventListener(event, handler);\n });\n this._selfieWrapperListeners = null;\n }\n\n if (this.activeScreen) {\n this.activeScreen.removeAttribute('hidden');\n }\n this.activeScreen = null;\n this.innerHTML = '';\n }\n\n setUpEventListeners() {\n this.selfieInstruction.addEventListener(\n 'selfie-capture-instructions.capture',\n async () => {\n this.setActiveScreen(this.selfieCapture);\n },\n );\n this.selfieInstruction.addEventListener(\n 'selfie-capture-instructions.cancelled',\n () => {\n this.handleBackEvents();\n },\n );\n this.setupSelfieWrapperEventListeners();\n\n this.selfieReview.addEventListener(\n 'selfie-capture-review.rejected',\n async () => {\n smartCameraWeb?.dispatchEvent(\n new CustomEvent('metadata.selfie-capture-retry'),\n );\n this.selfieReview.removeAttribute('data-image');\n this.selfieReview.removeAttribute('mirror-image');\n this._data.images = [];\n\n await this.forceWrapperRemount();\n\n this.setActiveScreen(this.selfieCapture);\n },\n );\n\n this.selfieReview.addEventListener(\n 'selfie-capture-review.accepted',\n async () => {\n this._publishSelectedImages();\n },\n );\n\n [this.selfieInstruction, this.selfieCapture, this.selfieReview].forEach(\n (screen) => {\n screen.addEventListener(\n `${screen.nodeName.toLowerCase()}.close`,\n () => {\n this.handleCloseEvent();\n },\n );\n },\n );\n }\n\n // Force remount of selfie-capture-wrapper component for clean state\n async forceWrapperRemount() {\n SmartCamera.stopMedia();\n\n this._remountKey++;\n\n const container = this.querySelector('div');\n const oldWrapper = this.selfieCapture;\n\n if (oldWrapper && container) {\n // recreate wrapper element\n const newWrapper = document.createElement('selfie-capture-wrapper');\n\n // copy attributes from old wrapper, but skip key and start-countdown\n const attributesToCopy = Array.from(oldWrapper.attributes);\n\n attributesToCopy.forEach((attr) => {\n newWrapper.setAttribute(attr.name, attr.value);\n });\n oldWrapper.remove();\n await new Promise((resolve) => {\n setTimeout(resolve, 50);\n });\n\n newWrapper.setAttribute('key', this._remountKey.toString());\n newWrapper.setAttribute('start-countdown', 'false');\n newWrapper.setAttribute('hidden', '');\n\n const reviewElement = container.querySelector('selfie-capture-review');\n if (reviewElement) {\n container.insertBefore(newWrapper, reviewElement);\n } else {\n container.appendChild(newWrapper);\n }\n\n this.selfieCapture = newWrapper;\n\n this.setupSelfieWrapperEventListeners();\n }\n\n // give time for the new component to initialize\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve();\n }, 200);\n });\n }\n\n // Return to a clean selfie capture screen. Used when navigating back from the\n // document flow. Previously this was driven by toggling the `initial-screen`\n // attribute on this element, which re-fired a full `connectedCallback()`\n // rebuild every time (even when the value was unchanged). We now swap in a\n // fresh `selfie-capture-wrapper` synchronously and navigate explicitly, so we\n // land on a clean capture screen — not the stale review — without rebuilding\n // the whole screen tree or depending on timers.\n restartSelfieCapture() {\n SmartCamera.stopMedia();\n\n const container = this.querySelector('div');\n const oldWrapper = this.selfieCapture;\n\n if (oldWrapper && container) {\n this._remountKey++;\n\n const newWrapper = document.createElement('selfie-capture-wrapper');\n Array.from(oldWrapper.attributes).forEach((attr) => {\n newWrapper.setAttribute(attr.name, attr.value);\n });\n newWrapper.setAttribute('key', this._remountKey.toString());\n newWrapper.setAttribute('start-countdown', 'false');\n newWrapper.setAttribute('hidden', '');\n\n const reviewElement = container.querySelector('selfie-capture-review');\n oldWrapper.remove();\n if (reviewElement) {\n container.insertBefore(newWrapper, reviewElement);\n } else {\n container.appendChild(newWrapper);\n }\n\n this.selfieCapture = newWrapper;\n this.setupSelfieWrapperEventListeners();\n }\n\n this.setActiveScreen(this.selfieCapture);\n }\n\n // Override setActiveScreen to enable countdown when selfie-capture is active\n setActiveScreen(screen) {\n if (this.activeScreen === screen) {\n return;\n }\n\n this.activeScreen?.setAttribute('hidden', '');\n screen.removeAttribute('hidden');\n this.activeScreen = screen;\n\n // If activating selfie-capture-wrapper, enable the countdown\n if (screen === this.selfieCapture) {\n screen.setAttribute('start-countdown', 'true');\n } else if (this.selfieCapture) {\n // Disable countdown when not on capture screen\n this.selfieCapture.setAttribute('start-countdown', 'false');\n }\n }\n\n setupSelfieWrapperEventListeners() {\n // Remove existing event listeners if they exist\n if (this._selfieWrapperListeners) {\n this._selfieWrapperListeners.forEach(({ event, handler }) => {\n window.removeEventListener(event, handler);\n });\n }\n // Also remove the previously-attached element-level publish handler so we\n // don't accumulate duplicates across remounts (each call to\n // setupSelfieWrapperEventListeners would otherwise add another listener,\n // causing multiple transitions to review / multiple metadata events on\n // navigating back from document capture).\n if (this._selfieWrapperPublishHandler) {\n this.removeEventListener(\n 'selfie-capture.publish',\n this._selfieWrapperPublishHandler,\n );\n }\n\n // Create new event handlers\n const cancelledHandler = async () => {\n SmartCamera.stopMedia();\n\n // Force remount of selfie-capture-wrapper for clean state on next visit\n await this.forceWrapperRemount();\n\n if (this.hideInstructions || this.isStrictMode) {\n this.handleBackEvents();\n return;\n }\n\n this.setActiveScreen(this.selfieInstruction);\n };\n\n const closeHandler = async () => {\n SmartCamera.stopMedia();\n\n // Force remount of selfie-capture-wrapper for clean state on next visit\n await this.forceWrapperRemount();\n\n this.handleCloseEvent();\n };\n\n const publishHandler = async (event) => {\n smartCameraWeb?.dispatchEvent(\n new CustomEvent('metadata.selfie-capture-end'),\n );\n this._data.images = event.detail.images;\n SmartCamera.stopMedia();\n\n // In strict mode (Enhanced SmartSelfie), the ESS component already\n // shows its own review screen and only re-dispatches `publish` after\n // the user confirms. Skip the legacy `selfie-capture-review` step and\n // publish straight up to the host page.\n if (this.isStrictMode) {\n this._publishSelectedImages();\n return;\n }\n\n this.selfieReview.setAttribute(\n 'data-image',\n await cropImageFromDataUri(event.detail.referenceImage, 20, 20),\n );\n const shouldMirror = event.detail.facingMode === 'user';\n this.selfieReview.setAttribute(\n 'mirror-image',\n shouldMirror ? 'true' : 'false',\n );\n this.setActiveScreen(this.selfieReview);\n };\n\n // Store references to remove them later\n this._selfieWrapperListeners = [\n { event: 'selfie-capture.cancelled', handler: cancelledHandler },\n { event: 'selfie-capture.close', handler: closeHandler },\n { event: 'selfie-capture.publish', handler: publishHandler },\n ];\n\n // Add event listeners\n this._selfieWrapperListeners.forEach(({ event, handler }) => {\n window.addEventListener(event, handler);\n });\n\n // Also listen for the publish event on the parent SelfieCaptureScreens element\n // in case smartselfie-capture dispatches it there\n this._selfieWrapperPublishHandler = publishHandler;\n this.addEventListener('selfie-capture.publish', publishHandler);\n }\n\n _publishSelectedImages() {\n this.dispatchEvent(\n new CustomEvent('selfie-capture-screens.publish', { detail: this._data }),\n );\n }\n\n get hideInstructions() {\n return this.hasAttribute('hide-instructions');\n }\n\n get hideAttribution() {\n return this.hasAttribute('hide-attribution') ? 'hide-attribution=\"\"' : '';\n }\n\n get hideBackOfId() {\n return this.hasAttribute('hide-back-of-id');\n }\n\n get showNavigation() {\n return this.hasAttribute('show-navigation') ? 'show-navigation=\"\"' : '';\n }\n\n get inAgentMode() {\n return this.getAttribute('allow-agent-mode') === 'true';\n }\n\n get allowAgentMode() {\n return this.inAgentMode ? 'allow-agent-mode=\"true\"' : '';\n }\n\n get allowAgentModeTests() {\n return this.hasAttribute('show-agent-mode-for-tests')\n ? 'show-agent-mode-for-tests=\"\"'\n : '';\n }\n\n get hideBack() {\n return this.hasAttribute('hide-back-to-host') ||\n this.hasAttribute('hide-back')\n ? 'hide-back=\"\"'\n : '';\n }\n\n get disableImageTests() {\n return this.hasAttribute('disable-image-tests')\n ? 'disable-image-tests=\"\"'\n : '';\n }\n\n get allowLegacySelfieFallback() {\n return this.hasAttribute('allow-legacy-selfie-fallback')\n ? `allow-legacy-selfie-fallback=\"${escAttr(this.getAttribute('allow-legacy-selfie-fallback'))}\"`\n : '';\n }\n\n get useStrictMode() {\n return this.hasAttribute('use-strict-mode') &&\n this.getAttribute('use-strict-mode') !== 'false'\n ? 'use-strict-mode=\"true\"'\n : '';\n }\n\n get showBackOnGuidelines() {\n return this.hasAttribute('show-back-on-guidelines')\n ? 'show-back-on-guidelines=\"true\"'\n : '';\n }\n\n /** Boolean form of `use-strict-mode` for runtime checks. */\n get isStrictMode() {\n return (\n this.hasAttribute('use-strict-mode') &&\n this.getAttribute('use-strict-mode') !== 'false'\n );\n }\n\n get themeColor() {\n return this.getAttribute('theme-color') || '#001096';\n }\n\n handleBackEvents() {\n this.dispatchEvent(new CustomEvent('selfie-capture-screens.cancelled'));\n }\n\n handleCloseEvent() {\n this.dispatchEvent(new CustomEvent('selfie-capture-screens.close'));\n }\n\n static get observedAttributes() {\n return [\n 'title',\n 'hidden',\n 'show-navigation',\n 'hide-back-to-host',\n 'initial-screen',\n 'allow-agent-mode',\n 'allow-legacy-selfie-fallback',\n 'show-agent-mode-for-tests',\n 'disable-image-tests',\n 'use-strict-mode',\n 'show-back-on-guidelines',\n ];\n }\n\n attributeChangedCallback(name) {\n switch (name) {\n case 'title':\n case 'hidden':\n case 'initial-screen':\n case 'allow-agent-mode':\n case 'allow-legacy-selfie-fallback':\n case 'show-agent-mode-for-tests':\n case 'disable-image-tests':\n case 'use-strict-mode':\n case 'show-back-on-guidelines':\n this.connectedCallback();\n break;\n default:\n break;\n }\n }\n}\n\nif (\n 'customElements' in window &&\n !customElements.get('selfie-capture-screens')\n) {\n customElements.define('selfie-capture-screens', SelfieCaptureScreens);\n}\n\nexport default SelfieCaptureScreens;\n"],"names":["templateString","styles","t","SelfieCaptureInstructions","template","getDirection","SelfieCaptureReview","name","defaultAttributes","createPreactComponent","type","iconName","iconNamePascal","iconNode","Component","color","size","stroke","title","children","className","classes","style","rest","h","tag","attrs","toChildArray","IconLoader2","useCamera","initialFacingMode","videoRef","useRef","streamRef","facingMode","setFacingMode","useState","agentSupported","setAgentSupported","cameraError","setCameraError","onCameraSwitchCallbackRef","isSwitchingCameraRef","timeoutIdsRef","registerCameraSwitchCallback","callback","useEffect","video","handleVideoReady","timeoutId","startCamera","targetFacingMode","track","stream","actualFacingMode","videoDevice","device","error","SmartCamera","retryCamera","switchCamera","newFacingMode","previousFacingMode","restoreError","detectBrowserEngine","userAgent","isGecko","hasFirefoxFeatures","supportsMozCSS","userCameraId","environmentCameraId","userStream","envStream","i","s","r","f","o","c","n","v","e","u","E","d","a","l","y","w","_","b","g","p","m","useSignal","T","useComputed","q","F","A","k","S","x","L","R","I","M","P","C","O","U","B","N","D","j","G","V","X","H","W","z","K","Y","$","J","Z","Q","tt","et","nt","rt","it","st","ot","at","ct","ht","ut","lt","dt","ft","pt","gt","mt","yt","_t","vt","Et","wt","Tt","At","bt","St","Lt","Rt","kt","xt","Ft","It","Mt","Pt","Ct","Ot","Xt","Ut","Dt","Bt","Nt","Gt","jt","Vt","Ht","Wt","zt","Kt","Yt","$t","qt","Jt","Zt","Qt","te","ee","ne","re","ie","se","oe","ae","ce","he","ue","le","de","fe","pe","ge","me","ye","_e","ve","Ee","we","Te","Ae","be","Ce","ke","Se","je","xe","Le","Re","Fe","Ie","Me","Pe","Oe","Ue","De","Ne","Be","Ge","Ve","Xe","He","We","ze","Ke","Ye","$e","qe","pn","Je","Ze","gn","Qe","tn","en","nn","Ts","on","rn","sn","an","cn","hn","un","ln","dn","fn","mn","yn","_n","vn","En","wn","Tn","An","bn","kn","Sn","xn","Ln","Rn","Dn","Fn","In","Mn","Pn","Cn","On","Un","Nn","Bn","Gn","jn","Vn","Xn","Hn","Wn","zn","Kn","Yn","$n","_o","qn","Jn","Zn","Qn","tr","er","nr","rr","ir","sr","or","ar","cr","hr","ur","lr","dr","fr","pr","gr","mr","yr","_r","vr","Er","wr","Tr","Ar","br","Or","kr","Sr","xr","Lr","Rr","Fr","Ir","Mr","Pr","Cr","Ur","Dr","Nr","Br","Gr","jr","Vr","Xr","Hr","Wr","zr","Kr","Yr","$r","qr","Jr","Zr","Qr","ti","ei","ni","ri","ii","si","oi","ai","ci","hi","ui","li","di","fi","pi","gi","mi","yi","_i","vi","Ei","wi","Ti","Ai","bi","ki","Si","xi","Li","Ri","Fi","Ii","Mi","Pi","Ci","Oi","Ui","Di","Ni","Bi","Gi","ji","Vi","Xi","Hi","Wi","zi","Ki","Yi","$i","qi","Ji","Zi","Qi","ts","es","ns","rs","is","ss","os","as","cs","hs","us","ls","ds","fs","ps","gs","ms","ys","_s","vs","Es","ws","As","bs","ks","Ss","xs","Ls","Rs","Fs","Is","Ms","Ps","Cs","Os","Us","Ds","Ns","Bs","Gs","js","Vs","Xs","Hs","Ws","zs","Ks","Ys","$s","qs","Js","Zs","Qs","to","eo","no","ro","io","so","oo","ao","co","ho","uo","lo","fo","po","go","mo","yo","vo","Eo","wo","To","Ao","bo","ko","So","xo","Lo","Ro","Fo","Io","Mo","Po","Co","Oo","Uo","Do","No","Bo","Go","jo","Vo","Xo","Ho","Wo","zo","Ko","Yo","$o","qo","Jo","Zo","Qo","ta","ea","na","ra","ia","sa","oa","aa","ca","ha","ua","la","da","pa","ma","fa","ya","ga","_a","va","Ea","wa","Ta","Aa","ba","ka","Sa","xa","La","Ra","Fa","Ia","Ma","Pa","Oa","Ua","Ca","Da","Na","Ba","Ga","ja","Va","Xa","Ha","Wa","za","Ka","Ya","$a","qa","Ja","Za","Qa","tc","ec","nc","rc","ic","sc","oc","ac","cc","hc","uc","lc","dc","fc","pc","gc","mc","yc","_c","vc","Ec","wc","Tc","Ac","bc","kc","Sc","xc","Lc","Rc","Fc","Ic","Mc","Pc","Cc","Oc","Uc","Dc","Nc","Bc","Gc","jc","Vc","Xc","Hc","Wc","zc","Kc","root","require$$0","now","now_1","reWhitespace","trimmedEndIndex","string","index","_trimmedEndIndex","reTrimStart","baseTrim","_baseTrim","baseGetTag","isObjectLike","require$$1","symbolTag","isSymbol","value","isSymbol_1","isObject","require$$2","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","toNumber","other","isBinary","toNumber_1","FUNC_ERROR_TEXT","nativeMax","nativeMin","debounce","func","wait","options","lastArgs","lastThis","maxWait","result","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","args","thisArg","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","cancel","flush","debounced","isInvoking","debounce_1","throttle","throttle_1","calculateFaceSize","landmarks","face","minX","maxX","minY","maxY","landmark","faceWidth","faceHeight","isFaceInBounds","videoAspectRatio","ovalCenterX","ovalCenterY","isLandscape","ovalWidth","ovalHeight","faceCenterX","faceCenterY","centerTolerance","centerOvalWidth","centerOvalHeight","centerInBounds","dx","dy","toleranceX","toleranceY","adjustedOvalWidth","adjustedOvalHeight","checkPointInExpandedOval","topLeft","topRight","bottomLeft","bottomRight","calculateMouthOpening","upperLipCenter","lowerLipCenter","mouthHeight","faceTop","createCroppedVideoFrame","videoElement","canvas","ctx","sourceWidth","sourceHeight","squareSize","cropX","cropY","drawFaceMesh","capturesTaken","smileCheckpoint","canvasWidth","canvasHeight","drawingUtils","DrawingUtils","outlineColor","lineWidth","FaceLandmarker","clearCanvas","captureImageFromVideo","isReference","isPortrait","zoomOutFactor","offsetX","offsetY","JPEG_QUALITY","ImageType","MESSAGES","EXCLUDED_GPUS","normalizeGpuText","matchesExcludedGpu","normalizedValue","gpuPattern","normalizedPattern","familyPrefix","getGpuRenderer","gl","ext","isExcludedGpuFromWebGL","renderer","rendererString","supportsWasmReftypes","bytes","UnsupportedMediapipeEnvironmentError","message","MediapipeInitTimeoutError","MEDIAPIPE_INIT_TIMEOUT_MS","withTimeout","promise","resolve","reject","getSystemArchitectureHints","hints","getDelegateFromGpuDetection","hasWebGlRendererInfo","hintString","hasUaHints","hasFP16Support","hasHalfFloatExt","hasHalfFloatLinear","hasColorBufferHalfFloat","createLandmarker","vision","delegate","getMediapipeInstance","mediapipeGlobal","FilesetResolver","closeOrphan","orphan","faceLandmarker","initPromise","isTimeout","cpuInitPromise","cpuError","COMPONENTS_VERSION","packageJson","useFaceCapture","canvasRef","interval","duration","smileThreshold","mouthOpenThreshold","minFaceSize","maxFaceSize","smileCooldown","getFacingMode","faceLandmarkerRef","animationFrameRef","captureTimerRef","resumeCaptureRef","fallbackTimerRef","faceDetected","faceInBounds","faceProximity","faceLandmarks","currentSmileScore","currentFaceSize","currentMouthOpen","lastSmileTime","alertTitle","isInitializing","captureButtonFallbackEnabled","isCapturing","isPaused","countdown","capturedImages","referencePhoto","totalCaptures","hasFinishedCapture","neutralZone","isReadyToCapture","updateAlertImmediate","messageKey","updateAlert","CAPTURE_FALLBACK_TIMEOUT_MS","startFallbackTimer","initializeFaceLandmarker","setupCanvas","videoWidth","videoHeight","updateCaptureAlerts","isInNeutralZone","isInSmileZone","updateAlerts","stopDetectionLoop","detectFace","croppedCanvas","detectionSource","results","scaleFactor","scaleFactorY","adjustedLandmarks","numFaces","hasFace","faceSize","blendshapes","smileLeft","smileRight","mouthOpen","smileScore","startDetectionLoop","captureImage","imageData","stopCapture","livenessImages","img","referenceImage","eventDetail","pauseCapture","startCaptureInterval","resumeCapture","smartCameraWeb","OvalProgress","progress","themeColor","pathRef","prevProgress","path","pathLength","fromOffset","toOffset","jsx","jsxs","CameraPreview","Fragment","AlertDisplay","CaptureControls","allowAgentMode","showAgentModeForTests","onStartCapture","onSwitchCamera","SmartSelfieCapture","showNavigationProp","allowAgentModeProp","showAgentModeForTestsProp","hideAttributionProp","navigationRef","showNavigation","getBoolProp","hideAttribution","camera","faceCapture","initializeCamera","cameraName","navigation","handleNavigationBack","handleNavigationClose","register","leftEye","rightEye","eyeSpan","noseTip","centerX","centerY","strictOvalWidth","strictOvalHeight","checkPointInStrictOval","tl","bl","FRAME_EDGE_MARGIN","notClipped","OVAL_CX","OVAL_CY","OVAL_HALF_W","OVAL_HALF_H","projectOval","videoEl","wrapper","videoRect","wrapperRect","cropSize","cropLeftInWrapper","cropTopInWrapper","computeFaceClippingOval","proj","lm","renderedX","renderedY","nx","ny","computeFaceClippingSide","clipping","minNx","maxNx","minNy","maxNy","centreNx","centreNy","AXIS_MARGIN","horizontalDominant","verticalDominant","calculateHeadPose","leftCheek","rightCheek","forehead","chin","toDeg","rad","clamp","dz","cheekSpan3D","yaw","pitch","roll","classifyHeadPose","pose","thresholds","yawSide","yawSidePositive","yawNeutral","pitchUp","randomInt","maxExclusive","limit","buf","buildRandomPoseSequence","poses","SAMPLE_STEP","luminanceCanvas","luminanceCtx","blurCanvas","blurCtx","getScratchContext","which","dw","dh","calculateLuminance","region","sx","sy","sw","sh","scale","data","total","count","calculateBlurScore","gray","sum","sumSq","lap","mean","DEFAULT_LUMINANCE_MIN","DEFAULT_BLUR_MIN","useStrictMode","onCaptureComplete","poseHistoryRef","lastPoseMatchAtRef","POSE_MATCH_LATCH_MS","faceClippingOval","poseSequence","currentPoseIndex","currentPose","isTooDark","isTooBlurry","faceOffsetDirection","qualityFrameCounter","proximityMargin","min","max","current","rawPose","history","smoothed","counts","winner","winnerCount","requiredPose","captureGatePasses","luma","blur","dispatchProgress","poseCount","framesPerPose","silentNeutralFrames","poseFramesTaken","neutralReference","reason","target","frame","ref","reference","SIDE_ARCS","borderColor","errorSide","errorColor","overlay","activeLivenessSrc","tooDarkSrc","deviceOrientationSrc","POSE_FRAME_RANGES","ActiveLivenessOverlay","animRef","loadedVariantRef","PLAYBACK_SPEED","SEGMENT_FADE_MS","fading","setFading","lastAppliedRef","matched","variant","initialSegment","src","anim","DotLottie","prev","isFirst","ranges","start","end","CardFrame","filterId","GoodIllustration","AccessoriesIllustration","MultipleFacesIllustration","PoorLightingIllustration","SmileIdLogo","CheckIcon","ChevronDownIcon","BackNavigation","onBack","el","handler","GUIDELINES","ILLUSTRATION_COMPONENTS","HeroAnimation","CaptureGuidelines","isReady","onContinue","Illustration","TickIcon","CrossIcon","SubmissionView","imageSrc","mirror","mode","onConfirm","onRetake","onExit","isReview","isSubmitting","isSuccess","isError","body","line","arr","phoneIcon","personIcon","idCardIcon","deviceIcon","ITEMS","safeHttpUrl","parsed","ConsentView","partnerName","partnerLogo","policyUrl","onGranted","onDenied","accepted","setAccepted","learnMoreOpen","setLearnMoreOpen","partner","safePolicyUrl","safePartnerLogo","EnhancedSmartSelfieConsent","failureReasonToMessage","EnhancedSmartSelfieSubmission","mirrorProp","submissionStateProp","submissionMessage","failureReason","state","setState","setMessage","setReason","success","isResolved","resolvedMessage","EnhancedSmartSelfieCapture","hideInstructionsProp","showBackOnGuidelinesProp","hideInstructions","showBackOnGuidelines","viewSignal","signal","pendingPayload","detail","HOLD_STILL_MS","holdStillElapsed","setHoldStillElapsed","isMediapipeReady","setIsMediapipeReady","cancelled","id","PRE_CAPTURE_FALLBACK_MS","preCaptureFallbackElapsed","setPreCaptureFallbackElapsed","setIsLandscape","mql","update","handleConfirm","payload","handleRetake","handleBack","isIdle","isHoldingStill","isFaceCentered","captureCheckFailing","dir","DEFAULT_NO_OF_LIVENESS_FRAMES","hasMoreThanNColors","colors","getLivenessFramesIndices","totalNoOfFrames","numberOfFramesRequired","selectedFrames","tHtml","frameDivisor","frameInterval","replacementFrameIndex","lastFrameIndex","getPermissions","captureScreen","constraints","SelfieCaptureScreen","imageOutlineLength","livenessFramesIndices","imageIndex","IMAGE_TYPE","image","enableImageTests","context","videoContainer","videoExists","DEFAULT_MEDIAPIPE_WAIT_MS","DEFAULT_WAIT_MS","MAX_MEDIAPIPE_INIT_ATTEMPTS","MEDIAPIPE_RETRY_BASE_DELAY_MS","MAX_USER_RETRIES","SelfieCaptureWrapper","timeout","startCountdownProp","allowLegacySelfieFallbackProp","useStrictModeProp","hiddenProp","props","isCypress","forceMediapipeLoad","skipMediapipeForTests","hidden","startCountdown","allowLegacySelfieFallback","parsedTimeout","loadingTime","mediapipeAlreadyLoaded","mediapipeReady","setMediapipeReady","loadingProgress","setLoadingProgress","loadDeadlineExceeded","setLoadDeadlineExceeded","initialSessionCompleted","setInitialSessionCompleted","mediapipeLoading","setMediapipeLoading","mediapipeLoadingRef","mediapipeRetryTick","setMediapipeRetryTick","unsupportedEnvironment","setUnsupportedEnvironment","mediapipeInitAttemptsRef","mediapipeInitReportedRef","userRetryCountRef","retriesExhausted","setRetriesExhausted","usingSelfieCapture","setUsingSelfieCapture","retryTimeoutId","attemptNumber","isUnsupportedEnvironment","backoffMs","tick","timer","selfieCapture","forwardEvent","event","customEvent","handleRetry","propsWithoutHidden","errorKey","translate","translateHtml","escAttr","cropImageFromDataUri","dataUri","cropPercentX","cropPercentY","originalWidth","originalHeight","cropAmountX","cropAmountY","newWidth","newHeight","croppedDataUri","SelfieCaptureScreens","screen","container","oldWrapper","newWrapper","attr","reviewElement","cancelledHandler","closeHandler","publishHandler","shouldMirror"],"mappings":"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AG,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,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,KAAI,GAAG,GAAE,CAAC,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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EC,uBAAA,EAAoB;AAAA,sBAGtB,SAAA,EAAO,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aA4EpC,KAAK,UAAU;AAAA;AAAA;AAAA;AAAA,aAIf,KAAK,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAkCN,KAAK,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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","x_google_ignoreList":[2,3,4,6,7,8,9,10,11,12,13,14,15]}
|