@ollaid/native-sso 2.7.0 → 2.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/components/ui.tsx","../src/components/OTPInput.tsx","../__vite-browser-external","../../../node_modules/crypto-js/core.js","../../../node_modules/crypto-js/x64-core.js","../../../node_modules/crypto-js/lib-typedarrays.js","../../../node_modules/crypto-js/enc-utf16.js","../../../node_modules/crypto-js/enc-base64.js","../../../node_modules/crypto-js/enc-base64url.js","../../../node_modules/crypto-js/md5.js","../../../node_modules/crypto-js/sha1.js","../../../node_modules/crypto-js/sha256.js","../../../node_modules/crypto-js/sha224.js","../../../node_modules/crypto-js/sha512.js","../../../node_modules/crypto-js/sha384.js","../../../node_modules/crypto-js/sha3.js","../../../node_modules/crypto-js/ripemd160.js","../../../node_modules/crypto-js/hmac.js","../../../node_modules/crypto-js/pbkdf2.js","../../../node_modules/crypto-js/evpkdf.js","../../../node_modules/crypto-js/cipher-core.js","../../../node_modules/crypto-js/mode-cfb.js","../../../node_modules/crypto-js/mode-ctr.js","../../../node_modules/crypto-js/mode-ctr-gladman.js","../../../node_modules/crypto-js/mode-ofb.js","../../../node_modules/crypto-js/mode-ecb.js","../../../node_modules/crypto-js/pad-ansix923.js","../../../node_modules/crypto-js/pad-iso10126.js","../../../node_modules/crypto-js/pad-iso97971.js","../../../node_modules/crypto-js/pad-zeropadding.js","../../../node_modules/crypto-js/pad-nopadding.js","../../../node_modules/crypto-js/format-hex.js","../../../node_modules/crypto-js/aes.js","../../../node_modules/crypto-js/tripledes.js","../../../node_modules/crypto-js/rc4.js","../../../node_modules/crypto-js/rabbit.js","../../../node_modules/crypto-js/rabbit-legacy.js","../../../node_modules/crypto-js/blowfish.js","../../../node_modules/crypto-js/index.js","../src/services/debugLogger.ts","../src/services/api.ts","../src/services/nativeAuth.ts","../src/services/mobilePassword.ts","../src/hooks/useMobilePassword.ts","../src/components/PasswordRecoveryModal.tsx","../src/hooks/useTokenHealthCheck.ts","../src/hooks/useNativeAuth.ts","../src/components/LoginModal.tsx","../src/utils/countries.ts","../src/components/PhoneInput.tsx","../src/components/AppsLogoSlider.tsx","../src/services/mobileRegistration.ts","../src/hooks/useMobileRegistration.ts","../src/components/SignupModal.tsx","../src/services/profileChange.ts","../src/components/AvatarCropModal.tsx","../src/services/profileMedia.ts","../src/services/profile.ts","../src/components/OnboardingModal.tsx","../src/components/DebugPanel.tsx","../src/logo/ollaid.png","../src/components/NativeSSOPage.tsx","../src/provider.tsx","../src/hooks/useLogout.ts","../src/services/iamAccount.ts"],"sourcesContent":["/**\n * Embedded UI primitives for @ollaid/native-sso\n * Lightweight replacements for shadcn/ui components + inline SVG icons\n * No external dependencies required\n * \n * @version 2.7.0\n */\n\nimport React, { forwardRef, createContext, useContext, useEffect } from 'react';\n\n// ============================================\n// SVG Icons (inline, no lucide dependency)\n// ============================================\n\nconst iconProps = { width: '100%', height: '100%', viewBox: '0 0 24 24', fill: 'none', stroke: 'currentColor', strokeWidth: 2, strokeLinecap: 'round' as const, strokeLinejoin: 'round' as const };\n\nexport function IconShieldCheck(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\" />\n <path d=\"m9 12 2 2 4-4\" />\n </svg>\n );\n}\n\nexport function IconMail(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <rect width=\"20\" height=\"16\" x=\"2\" y=\"4\" rx=\"2\" />\n <path d=\"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7\" />\n </svg>\n );\n}\n\nexport function IconPhone(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\" />\n </svg>\n );\n}\n\nexport function IconLock(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\" ry=\"2\" />\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n </svg>\n );\n}\n\nexport function IconKeyRound(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <path d=\"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z\" />\n <circle cx=\"16.5\" cy=\"7.5\" r=\".5\" fill=\"currentColor\" />\n </svg>\n );\n}\n\nexport function IconArrowLeft(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <path d=\"m12 19-7-7 7-7\" />\n <path d=\"M19 12H5\" />\n </svg>\n );\n}\n\nexport function IconEye(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <path d=\"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n );\n}\n\nexport function IconEyeOff(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <path d=\"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\" />\n <path d=\"M14.084 14.158a3 3 0 0 1-4.242-4.242\" />\n <path d=\"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\" />\n <path d=\"m2 2 20 20\" />\n </svg>\n );\n}\n\nexport function IconCheckCircle2(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"m9 12 2 2 4-4\" />\n </svg>\n );\n}\n\nexport function IconLoader2(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props} style={{ animation: 'spin 1s linear infinite', ...(props.style || {}) }}>\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n );\n}\n\nexport function IconAlertTriangle(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\" />\n <path d=\"M12 9v4\" />\n <path d=\"M12 17h.01\" />\n </svg>\n );\n}\n\nexport function IconSmartphone(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <rect width=\"14\" height=\"20\" x=\"5\" y=\"2\" rx=\"2\" ry=\"2\" />\n <path d=\"M12 18h.01\" />\n </svg>\n );\n}\n\nexport function IconHome(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <path d=\"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8\" />\n <path d=\"M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\" />\n </svg>\n );\n}\n\nexport function IconCalendar(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <path d=\"M8 2v4\" /><path d=\"M16 2v4\" />\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"4\" rx=\"2\" />\n <path d=\"M3 10h18\" />\n </svg>\n );\n}\n\nexport function IconBell(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <path d=\"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9\" />\n <path d=\"M10.3 21a1.94 1.94 0 0 0 3.4 0\" />\n </svg>\n );\n}\n\nexport function IconMessageCircle(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <path d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22z\" />\n </svg>\n );\n}\n\nexport function IconUsers(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\" />\n <circle cx=\"9\" cy=\"7\" r=\"4\" />\n <path d=\"M22 21v-2a4 4 0 0 0-3-3.87\" />\n <path d=\"M16 3.13a4 4 0 0 1 0 7.75\" />\n </svg>\n );\n}\n\nexport function IconSettings(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <path d=\"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n );\n}\n\nexport function IconGlobe(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\" />\n <path d=\"M2 12h20\" />\n </svg>\n );\n}\n\n// ============================================\n// Dialog\n// ============================================\n\ninterface DialogContextValue {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}\n\nconst DialogContext = createContext<DialogContextValue>({ open: false, onOpenChange: () => {} });\n\nexport function Dialog({ open, onOpenChange, children }: { open: boolean; onOpenChange: (open: boolean) => void; children: React.ReactNode }) {\n useEffect(() => {\n if (open) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n return () => { document.body.style.overflow = ''; };\n }, [open]);\n\n if (!open) return null;\n\n return (\n <DialogContext.Provider value={{ open, onOpenChange }}>\n {children}\n </DialogContext.Provider>\n );\n}\n\nexport function DialogContent({ children, className = '', style, hideCloseButton = false }: { children: React.ReactNode; className?: string; style?: React.CSSProperties; hideCloseButton?: boolean }) {\n const { onOpenChange } = useContext(DialogContext);\n\n return (\n <div style={{ position: 'fixed', inset: 0, zIndex: 50, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <div \n style={{ \n position: 'fixed', inset: 0, \n backgroundColor: 'rgba(0,0,0,0.5)', \n backdropFilter: 'blur(4px)',\n animation: 'ollaid-overlay-in 0.25s ease-out',\n }}\n />\n <div \n className={className}\n style={{ \n position: 'relative', zIndex: 51, width: '100%', maxWidth: '28rem', \n margin: '1rem', padding: '1rem', borderRadius: '0.75rem',\n backgroundColor: 'white', boxShadow: '0 25px 50px -12px rgba(0,0,0,0.25)',\n maxHeight: '90vh',\n display: 'flex', flexDirection: 'column',\n animation: 'ollaid-modal-in 0.3s ease-out',\n ...style,\n }}\n >\n {!hideCloseButton && (\n <button\n onClick={() => onOpenChange(false)}\n style={{ position: 'absolute', right: '0.75rem', top: '0.75rem', background: 'none', border: 'none', cursor: 'pointer', fontSize: '1.25rem', color: '#9ca3af', lineHeight: 1, zIndex: 2 }}\n aria-label=\"Close\"\n >\n ✕\n </button>\n )}\n {children}\n </div>\n </div>\n );\n}\n\nexport function DialogBody({ children, className = '', style }: { children: React.ReactNode; className?: string; style?: React.CSSProperties }) {\n return (\n <div className={className} style={{ flex: 1, overflowY: 'auto', paddingBottom: '0.5rem', minHeight: 0, ...style }}>\n {children}\n </div>\n );\n}\n\nexport function DialogFooter({ children, className = '', style }: { children: React.ReactNode; className?: string; style?: React.CSSProperties }) {\n return (\n <div className={className} style={{ flexShrink: 0, paddingTop: '0.75rem', borderTop: '1px solid #e5e7eb', display: 'flex', flexDirection: 'column', gap: '0.5rem', ...style }}>\n {children}\n </div>\n );\n}\n\nexport function DialogHeader({ children, className = '', style }: { children: React.ReactNode; className?: string; style?: React.CSSProperties }) {\n return <div className={className} style={{ marginBottom: '0.5rem', flexShrink: 0, ...style }}>{children}</div>;\n}\n\nexport function DialogTitle({ children, className = '' }: { children: React.ReactNode; className?: string }) {\n return <h2 className={className} style={{ fontSize: '1.25rem', fontWeight: 600, color: '#111827' }}>{children}</h2>;\n}\n\nexport function DialogDescription({ children, className = '' }: { children: React.ReactNode; className?: string }) {\n return <p className={className} style={{ fontSize: '0.875rem', color: '#6b7280', marginTop: '0.25rem' }}>{children}</p>;\n}\n\n// ============================================\n// Button\n// ============================================\n\ninterface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: 'default' | 'outline' | 'ghost';\n size?: 'default' | 'sm' | 'lg';\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(({ \n variant = 'default', size = 'default', className = '', style, disabled, children, ...props \n}, ref) => {\n const baseStyle: React.CSSProperties = {\n display: 'inline-flex', alignItems: 'center', justifyContent: 'center',\n borderRadius: '0.5rem', fontWeight: 500, cursor: disabled ? 'not-allowed' : 'pointer',\n transition: 'all 0.15s', border: 'none', opacity: disabled ? 0.5 : 1,\n fontSize: size === 'sm' ? '0.875rem' : '0.9375rem',\n padding: size === 'sm' ? '0.375rem 0.75rem' : size === 'lg' ? '0.75rem 1.5rem' : '0.625rem 1rem',\n height: size === 'sm' ? '2rem' : size === 'lg' ? '3rem' : '2.5rem',\n ...(variant === 'default' ? { backgroundColor: '#002147', color: 'white' } : {}),\n ...(variant === 'outline' ? { backgroundColor: 'transparent', border: '1px solid #d1d5db', color: '#374151' } : {}),\n ...(variant === 'ghost' ? { backgroundColor: 'transparent', color: '#374151' } : {}),\n ...style,\n };\n\n return (\n <button ref={ref} className={className} style={baseStyle} disabled={disabled} {...props}>\n {children}\n </button>\n );\n});\nButton.displayName = 'Button';\n\n// ============================================\n// Input\n// ============================================\n\nexport const Input = forwardRef<HTMLInputElement, React.InputHTMLAttributes<HTMLInputElement> & { className?: string }>(\n ({ className = '', style, ...props }, ref) => {\n return (\n <input\n ref={ref}\n className={className}\n style={{\n width: '100%', padding: '0.5rem 0.75rem', borderRadius: '0.375rem',\n border: '1px solid #d1d5db', fontSize: '0.9375rem', outline: 'none',\n transition: 'border-color 0.15s', backgroundColor: '#f9fafb', color: '#111827',\n ...style,\n }}\n {...props}\n />\n );\n }\n);\nInput.displayName = 'Input';\n\n// ============================================\n// Label\n// ============================================\n\nexport const Label = forwardRef<HTMLLabelElement, React.LabelHTMLAttributes<HTMLLabelElement>>(\n ({ className = '', style, ...props }, ref) => {\n return (\n <label\n ref={ref}\n className={className}\n style={{ fontSize: '0.875rem', fontWeight: 500, color: '#374151', ...style }}\n {...props}\n />\n );\n }\n);\nLabel.displayName = 'Label';\n\n// ============================================\n// RadioGroup (simplified)\n// ============================================\n\ninterface RadioGroupProps {\n value: string;\n onValueChange: (value: string) => void;\n children: React.ReactNode;\n className?: string;\n}\n\nconst RadioGroupContext = createContext<{ value: string; onValueChange: (v: string) => void }>({ value: '', onValueChange: () => {} });\n\nexport function RadioGroup({ value, onValueChange, children, className = '' }: RadioGroupProps) {\n return (\n <RadioGroupContext.Provider value={{ value, onValueChange }}>\n <div className={className}>{children}</div>\n </RadioGroupContext.Provider>\n );\n}\n\nexport function RadioGroupItem({ value, id }: { value: string; id: string }) {\n const { value: groupValue, onValueChange } = useContext(RadioGroupContext);\n return (\n <input\n type=\"radio\"\n id={id}\n checked={groupValue === value}\n onChange={() => onValueChange(value)}\n style={{ width: '1rem', height: '1rem', accentColor: '#002147' }}\n />\n );\n}\n\n// Global keyframes for spinner\nif (typeof document !== 'undefined') {\n const styleId = 'ollaid-sso-keyframes';\n if (!document.getElementById(styleId)) {\n const style = document.createElement('style');\n style.id = styleId;\n style.textContent = `@keyframes spin { to { transform: rotate(360deg); } } @keyframes ollaid-overlay-in { from { opacity: 0; } to { opacity: 1; } } @keyframes ollaid-modal-in { from { opacity: 0; transform: translateY(20px) scale(0.97); } to { opacity: 1; transform: translateY(0) scale(1); } }`;\n document.head.appendChild(style);\n }\n}\n","/**\n * OTP Input component for @ollaid/native-sso\n */\n\nimport { useRef, useState, useEffect, KeyboardEvent, ClipboardEvent } from 'react';\n\ninterface OTPInputProps {\n length?: 6 | 8;\n value: string;\n onChange: (value: string) => void;\n onComplete?: (value: string) => void;\n disabled?: boolean;\n autoFocus?: boolean;\n}\n\nexport function OTPInput({\n length = 6, value, onChange, onComplete, disabled = false, autoFocus = true,\n}: OTPInputProps) {\n const inputRefs = useRef<(HTMLInputElement | null)[]>([]);\n const [activeIndex, setActiveIndex] = useState(0);\n\n useEffect(() => { inputRefs.current = inputRefs.current.slice(0, length); }, [length]);\n\n useEffect(() => {\n if (autoFocus && inputRefs.current[0]) inputRefs.current[0].focus();\n }, [autoFocus]);\n\n useEffect(() => {\n if (value.length === length && onComplete) onComplete(value);\n }, [value, length, onComplete]);\n\n const handleChange = (index: number, char: string) => {\n if (disabled) return;\n const digit = char.replace(/[^0-9]/g, '');\n if (!digit) return;\n const newValue = value.split('');\n newValue[index] = digit;\n onChange(newValue.join('').slice(0, length));\n if (index < length - 1) {\n inputRefs.current[index + 1]?.focus();\n setActiveIndex(index + 1);\n }\n };\n\n const handleKeyDown = (index: number, e: KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n if (e.key === 'Backspace') {\n e.preventDefault();\n const newValue = value.split('');\n if (value[index]) {\n newValue[index] = '';\n onChange(newValue.join(''));\n } else if (index > 0) {\n newValue[index - 1] = '';\n onChange(newValue.join(''));\n inputRefs.current[index - 1]?.focus();\n setActiveIndex(index - 1);\n }\n } else if (e.key === 'ArrowLeft' && index > 0) {\n inputRefs.current[index - 1]?.focus();\n setActiveIndex(index - 1);\n } else if (e.key === 'ArrowRight' && index < length - 1) {\n inputRefs.current[index + 1]?.focus();\n setActiveIndex(index + 1);\n }\n };\n\n const handlePaste = (e: ClipboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n e.preventDefault();\n const pasted = e.clipboardData.getData('text').replace(/[^0-9]/g, '');\n if (pasted) {\n const newValue = pasted.slice(0, length);\n onChange(newValue);\n const focusIndex = Math.min(newValue.length, length - 1);\n inputRefs.current[focusIndex]?.focus();\n setActiveIndex(focusIndex);\n }\n };\n\n return (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '0.5rem' }}>\n {Array.from({ length }).map((_, index) => (\n <input\n key={index}\n ref={(el) => (inputRefs.current[index] = el)}\n type=\"text\"\n inputMode=\"numeric\"\n maxLength={1}\n value={value[index] || ''}\n onChange={(e) => handleChange(index, e.target.value)}\n onKeyDown={(e) => handleKeyDown(index, e)}\n onPaste={handlePaste}\n onFocus={() => setActiveIndex(index)}\n disabled={disabled}\n aria-label={`Digit ${index + 1}`}\n style={{\n width: '2.5rem', height: '3rem', textAlign: 'center', fontSize: '1.25rem',\n fontWeight: 600, borderRadius: '0.375rem', border: '2px solid',\n borderColor: activeIndex === index && !disabled ? 'hsl(var(--primary, 222 47% 11%))' : value[index] ? 'hsl(var(--primary, 222 47% 11%) / 0.5)' : '#d1d5db',\n backgroundColor: value[index] ? 'hsl(var(--primary, 222 47% 11%) / 0.05)' : 'white',\n outline: 'none', transition: 'all 0.2s',\n opacity: disabled ? 0.5 : 1, cursor: disabled ? 'not-allowed' : 'text',\n }}\n />\n ))}\n </div>\n );\n}\n\nexport default OTPInput;\n","export default {}",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/*globals window, global, require*/\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\n\t var crypto;\n\n\t // Native crypto from window (Browser)\n\t if (typeof window !== 'undefined' && window.crypto) {\n\t crypto = window.crypto;\n\t }\n\n\t // Native crypto in web worker (Browser)\n\t if (typeof self !== 'undefined' && self.crypto) {\n\t crypto = self.crypto;\n\t }\n\n\t // Native crypto from worker\n\t if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n\t crypto = globalThis.crypto;\n\t }\n\n\t // Native (experimental IE 11) crypto from window (Browser)\n\t if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n\t crypto = window.msCrypto;\n\t }\n\n\t // Native crypto from global (NodeJS)\n\t if (!crypto && typeof global !== 'undefined' && global.crypto) {\n\t crypto = global.crypto;\n\t }\n\n\t // Native crypto import via require (NodeJS)\n\t if (!crypto && typeof require === 'function') {\n\t try {\n\t crypto = require('crypto');\n\t } catch (err) {}\n\t }\n\n\t /*\n\t * Cryptographically secure pseudorandom number generator\n\t *\n\t * As Math.random() is cryptographically not safe to use\n\t */\n\t var cryptoSecureRandomInt = function () {\n\t if (crypto) {\n\t // Use getRandomValues method (Browser)\n\t if (typeof crypto.getRandomValues === 'function') {\n\t try {\n\t return crypto.getRandomValues(new Uint32Array(1))[0];\n\t } catch (err) {}\n\t }\n\n\t // Use randomBytes method (NodeJS)\n\t if (typeof crypto.randomBytes === 'function') {\n\t try {\n\t return crypto.randomBytes(4).readInt32LE();\n\t } catch (err) {}\n\t }\n\t }\n\n\t throw new Error('Native crypto module could not be used to get secure random number.');\n\t };\n\n\t /*\n\t * Local polyfill of Object.create\n\n\t */\n\t var create = Object.create || (function () {\n\t function F() {}\n\n\t return function (obj) {\n\t var subtype;\n\n\t F.prototype = obj;\n\n\t subtype = new F();\n\n\t F.prototype = null;\n\n\t return subtype;\n\t };\n\t }());\n\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t var subtype = create(this);\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var j = 0; j < thatSigBytes; j += 4) {\n\t thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t for (var i = 0; i < nBytes; i += 4) {\n\t words.push(cryptoSecureRandomInt());\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t var processedWords;\n\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var X32WordArray = C_lib.WordArray;\n\n\t /**\n\t * x64 namespace.\n\t */\n\t var C_x64 = C.x64 = {};\n\n\t /**\n\t * A 64-bit word.\n\t */\n\t var X64Word = C_x64.Word = Base.extend({\n\t /**\n\t * Initializes a newly created 64-bit word.\n\t *\n\t * @param {number} high The high 32 bits.\n\t * @param {number} low The low 32 bits.\n\t *\n\t * @example\n\t *\n\t * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);\n\t */\n\t init: function (high, low) {\n\t this.high = high;\n\t this.low = low;\n\t }\n\n\t /**\n\t * Bitwise NOTs this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after negating.\n\t *\n\t * @example\n\t *\n\t * var negated = x64Word.not();\n\t */\n\t // not: function () {\n\t // var high = ~this.high;\n\t // var low = ~this.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise ANDs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to AND with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after ANDing.\n\t *\n\t * @example\n\t *\n\t * var anded = x64Word.and(anotherX64Word);\n\t */\n\t // and: function (word) {\n\t // var high = this.high & word.high;\n\t // var low = this.low & word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise ORs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to OR with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after ORing.\n\t *\n\t * @example\n\t *\n\t * var ored = x64Word.or(anotherX64Word);\n\t */\n\t // or: function (word) {\n\t // var high = this.high | word.high;\n\t // var low = this.low | word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise XORs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to XOR with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after XORing.\n\t *\n\t * @example\n\t *\n\t * var xored = x64Word.xor(anotherX64Word);\n\t */\n\t // xor: function (word) {\n\t // var high = this.high ^ word.high;\n\t // var low = this.low ^ word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Shifts this word n bits to the left.\n\t *\n\t * @param {number} n The number of bits to shift.\n\t *\n\t * @return {X64Word} A new x64-Word object after shifting.\n\t *\n\t * @example\n\t *\n\t * var shifted = x64Word.shiftL(25);\n\t */\n\t // shiftL: function (n) {\n\t // if (n < 32) {\n\t // var high = (this.high << n) | (this.low >>> (32 - n));\n\t // var low = this.low << n;\n\t // } else {\n\t // var high = this.low << (n - 32);\n\t // var low = 0;\n\t // }\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Shifts this word n bits to the right.\n\t *\n\t * @param {number} n The number of bits to shift.\n\t *\n\t * @return {X64Word} A new x64-Word object after shifting.\n\t *\n\t * @example\n\t *\n\t * var shifted = x64Word.shiftR(7);\n\t */\n\t // shiftR: function (n) {\n\t // if (n < 32) {\n\t // var low = (this.low >>> n) | (this.high << (32 - n));\n\t // var high = this.high >>> n;\n\t // } else {\n\t // var low = this.high >>> (n - 32);\n\t // var high = 0;\n\t // }\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Rotates this word n bits to the left.\n\t *\n\t * @param {number} n The number of bits to rotate.\n\t *\n\t * @return {X64Word} A new x64-Word object after rotating.\n\t *\n\t * @example\n\t *\n\t * var rotated = x64Word.rotL(25);\n\t */\n\t // rotL: function (n) {\n\t // return this.shiftL(n).or(this.shiftR(64 - n));\n\t // },\n\n\t /**\n\t * Rotates this word n bits to the right.\n\t *\n\t * @param {number} n The number of bits to rotate.\n\t *\n\t * @return {X64Word} A new x64-Word object after rotating.\n\t *\n\t * @example\n\t *\n\t * var rotated = x64Word.rotR(7);\n\t */\n\t // rotR: function (n) {\n\t // return this.shiftR(n).or(this.shiftL(64 - n));\n\t // },\n\n\t /**\n\t * Adds this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to add with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after adding.\n\t *\n\t * @example\n\t *\n\t * var added = x64Word.add(anotherX64Word);\n\t */\n\t // add: function (word) {\n\t // var low = (this.low + word.low) | 0;\n\t // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0;\n\t // var high = (this.high + word.high + carry) | 0;\n\n\t // return X64Word.create(high, low);\n\t // }\n\t });\n\n\t /**\n\t * An array of 64-bit words.\n\t *\n\t * @property {Array} words The array of CryptoJS.x64.Word objects.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var X64WordArray = C_x64.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create();\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create([\n\t * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n\t * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n\t * ]);\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create([\n\t * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n\t * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n\t * ], 10);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 8;\n\t }\n\t },\n\n\t /**\n\t * Converts this 64-bit word array to a 32-bit word array.\n\t *\n\t * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array.\n\t *\n\t * @example\n\t *\n\t * var x32WordArray = x64WordArray.toX32();\n\t */\n\t toX32: function () {\n\t // Shortcuts\n\t var x64Words = this.words;\n\t var x64WordsLength = x64Words.length;\n\n\t // Convert\n\t var x32Words = [];\n\t for (var i = 0; i < x64WordsLength; i++) {\n\t var x64Word = x64Words[i];\n\t x32Words.push(x64Word.high);\n\t x32Words.push(x64Word.low);\n\t }\n\n\t return X32WordArray.create(x32Words, this.sigBytes);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {X64WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = x64WordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\n\t // Clone \"words\" array\n\t var words = clone.words = this.words.slice(0);\n\n\t // Clone each X64Word object\n\t var wordsLength = words.length;\n\t for (var i = 0; i < wordsLength; i++) {\n\t words[i] = words[i].clone();\n\t }\n\n\t return clone;\n\t }\n\t });\n\t}());\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Check if typed arrays are supported\n\t if (typeof ArrayBuffer != 'function') {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\n\t // Reference original init\n\t var superInit = WordArray.init;\n\n\t // Augment WordArray.init to handle typed arrays\n\t var subInit = WordArray.init = function (typedArray) {\n\t // Convert buffers to uint8\n\t if (typedArray instanceof ArrayBuffer) {\n\t typedArray = new Uint8Array(typedArray);\n\t }\n\n\t // Convert other array views to uint8\n\t if (\n\t typedArray instanceof Int8Array ||\n\t (typeof Uint8ClampedArray !== \"undefined\" && typedArray instanceof Uint8ClampedArray) ||\n\t typedArray instanceof Int16Array ||\n\t typedArray instanceof Uint16Array ||\n\t typedArray instanceof Int32Array ||\n\t typedArray instanceof Uint32Array ||\n\t typedArray instanceof Float32Array ||\n\t typedArray instanceof Float64Array\n\t ) {\n\t typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\n\t }\n\n\t // Handle Uint8Array\n\t if (typedArray instanceof Uint8Array) {\n\t // Shortcut\n\t var typedArrayByteLength = typedArray.byteLength;\n\n\t // Extract bytes\n\t var words = [];\n\t for (var i = 0; i < typedArrayByteLength; i++) {\n\t words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8);\n\t }\n\n\t // Initialize this word array\n\t superInit.call(this, words, typedArrayByteLength);\n\t } else {\n\t // Else call normal init\n\t superInit.apply(this, arguments);\n\t }\n\t };\n\n\t subInit.prototype = WordArray;\n\t}());\n\n\n\treturn CryptoJS.lib.WordArray;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * UTF-16 BE encoding strategy.\n\t */\n\t var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {\n\t /**\n\t * Converts a word array to a UTF-16 BE string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-16 BE string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var utf16Chars = [];\n\t for (var i = 0; i < sigBytes; i += 2) {\n\t var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff;\n\t utf16Chars.push(String.fromCharCode(codePoint));\n\t }\n\n\t return utf16Chars.join('');\n\t },\n\n\t /**\n\t * Converts a UTF-16 BE string to a word array.\n\t *\n\t * @param {string} utf16Str The UTF-16 BE string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf16.parse(utf16String);\n\t */\n\t parse: function (utf16Str) {\n\t // Shortcut\n\t var utf16StrLength = utf16Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < utf16StrLength; i++) {\n\t words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16);\n\t }\n\n\t return WordArray.create(words, utf16StrLength * 2);\n\t }\n\t };\n\n\t /**\n\t * UTF-16 LE encoding strategy.\n\t */\n\t C_enc.Utf16LE = {\n\t /**\n\t * Converts a word array to a UTF-16 LE string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-16 LE string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var utf16Chars = [];\n\t for (var i = 0; i < sigBytes; i += 2) {\n\t var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff);\n\t utf16Chars.push(String.fromCharCode(codePoint));\n\t }\n\n\t return utf16Chars.join('');\n\t },\n\n\t /**\n\t * Converts a UTF-16 LE string to a word array.\n\t *\n\t * @param {string} utf16Str The UTF-16 LE string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);\n\t */\n\t parse: function (utf16Str) {\n\t // Shortcut\n\t var utf16StrLength = utf16Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < utf16StrLength; i++) {\n\t words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16));\n\t }\n\n\t return WordArray.create(words, utf16StrLength * 2);\n\t }\n\t };\n\n\t function swapEndian(word) {\n\t return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Utf16;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64 encoding strategy.\n\t */\n\t var Base64 = C_enc.Base64 = {\n\t /**\n\t * Converts a word array to a Base64 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Base64 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64 string to a word array.\n\t *\n\t * @param {string} base64Str The Base64 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n\t */\n\t parse: function (base64Str) {\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = this._map;\n\t var reverseMap = this._reverseMap;\n\n\t if (!reverseMap) {\n\t reverseMap = this._reverseMap = [];\n\t for (var j = 0; j < map.length; j++) {\n\t reverseMap[map.charCodeAt(j)] = j;\n\t }\n\t }\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex !== -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n\t };\n\n\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t var bitsCombined = bits1 | bits2;\n\t words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\t return WordArray.create(words, nBytes);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64url encoding strategy.\n\t */\n\t var Base64url = C_enc.Base64url = {\n\t /**\n\t * Converts a word array to a Base64url string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @param {boolean} urlSafe Whether to use url safe\n\t *\n\t * @return {string} The Base64url string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64url.stringify(wordArray);\n\t */\n\t stringify: function (wordArray, urlSafe) {\n\t if (urlSafe === undefined) {\n\t urlSafe = true\n\t }\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = urlSafe ? this._safe_map : this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64url string to a word array.\n\t *\n\t * @param {string} base64Str The Base64url string.\n\t *\n\t * @param {boolean} urlSafe Whether to use url safe\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64url.parse(base64String);\n\t */\n\t parse: function (base64Str, urlSafe) {\n\t if (urlSafe === undefined) {\n\t urlSafe = true\n\t }\n\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = urlSafe ? this._safe_map : this._map;\n\t var reverseMap = this._reverseMap;\n\n\t if (!reverseMap) {\n\t reverseMap = this._reverseMap = [];\n\t for (var j = 0; j < map.length; j++) {\n\t reverseMap[map.charCodeAt(j)] = j;\n\t }\n\t }\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex !== -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n\t _safe_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n\t };\n\n\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t var bitsCombined = bits1 | bits2;\n\t words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\t return WordArray.create(words, nBytes);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64url;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var T = [];\n\n\t // Compute constants\n\t (function () {\n\t for (var i = 0; i < 64; i++) {\n\t T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;\n\t }\n\t }());\n\n\t /**\n\t * MD5 hash algorithm.\n\t */\n\t var MD5 = C_algo.MD5 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var M_offset_0 = M[offset + 0];\n\t var M_offset_1 = M[offset + 1];\n\t var M_offset_2 = M[offset + 2];\n\t var M_offset_3 = M[offset + 3];\n\t var M_offset_4 = M[offset + 4];\n\t var M_offset_5 = M[offset + 5];\n\t var M_offset_6 = M[offset + 6];\n\t var M_offset_7 = M[offset + 7];\n\t var M_offset_8 = M[offset + 8];\n\t var M_offset_9 = M[offset + 9];\n\t var M_offset_10 = M[offset + 10];\n\t var M_offset_11 = M[offset + 11];\n\t var M_offset_12 = M[offset + 12];\n\t var M_offset_13 = M[offset + 13];\n\t var M_offset_14 = M[offset + 14];\n\t var M_offset_15 = M[offset + 15];\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\n\t // Computation\n\t a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n\t d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n\t c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n\t b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n\t a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n\t d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n\t c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n\t b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n\t a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n\t d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n\t c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n\t b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n\t a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n\t d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n\t c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n\t b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n\n\t a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n\t d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n\t c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n\t b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n\t a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n\t d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n\t c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n\t b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n\t a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n\t d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n\t c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n\t b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n\t a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n\t d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n\t c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n\t b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n\n\t a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n\t d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n\t c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n\t b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n\t a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n\t d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n\t c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n\t b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n\t a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n\t d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n\t c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n\t b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n\t a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n\t d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n\t c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n\t b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n\n\t a = II(a, b, c, d, M_offset_0, 6, T[48]);\n\t d = II(d, a, b, c, M_offset_7, 10, T[49]);\n\t c = II(c, d, a, b, M_offset_14, 15, T[50]);\n\t b = II(b, c, d, a, M_offset_5, 21, T[51]);\n\t a = II(a, b, c, d, M_offset_12, 6, T[52]);\n\t d = II(d, a, b, c, M_offset_3, 10, T[53]);\n\t c = II(c, d, a, b, M_offset_10, 15, T[54]);\n\t b = II(b, c, d, a, M_offset_1, 21, T[55]);\n\t a = II(a, b, c, d, M_offset_8, 6, T[56]);\n\t d = II(d, a, b, c, M_offset_15, 10, T[57]);\n\t c = II(c, d, a, b, M_offset_6, 15, T[58]);\n\t b = II(b, c, d, a, M_offset_13, 21, T[59]);\n\t a = II(a, b, c, d, M_offset_4, 6, T[60]);\n\t d = II(d, a, b, c, M_offset_11, 10, T[61]);\n\t c = II(c, d, a, b, M_offset_2, 15, T[62]);\n\t b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\n\t var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n\t var nBitsTotalL = nBitsTotal;\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (\n\t (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)\n\t );\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)\n\t );\n\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t function FF(a, b, c, d, x, s, t) {\n\t var n = a + ((b & c) | (~b & d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function GG(a, b, c, d, x, s, t) {\n\t var n = a + ((b & d) | (c & ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function HH(a, b, c, d, x, s, t) {\n\t var n = a + (b ^ c ^ d) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function II(a, b, c, d, x, s, t) {\n\t var n = a + (c ^ (b | ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.MD5('message');\n\t * var hash = CryptoJS.MD5(wordArray);\n\t */\n\t C.MD5 = Hasher._createHelper(MD5);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacMD5(message, key);\n\t */\n\t C.HmacMD5 = Hasher._createHmacHelper(MD5);\n\t}(Math));\n\n\n\treturn CryptoJS.MD5;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-1 hash algorithm.\n\t */\n\t var SHA1 = C_algo.SHA1 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476,\n\t 0xc3d2e1f0\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\n\t // Computation\n\t for (var i = 0; i < 80; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n\t W[i] = (n << 1) | (n >>> 31);\n\t }\n\n\t var t = ((a << 5) | (a >>> 27)) + e + W[i];\n\t if (i < 20) {\n\t t += ((b & c) | (~b & d)) + 0x5a827999;\n\t } else if (i < 40) {\n\t t += (b ^ c ^ d) + 0x6ed9eba1;\n\t } else if (i < 60) {\n\t t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;\n\t } else /* if (i < 80) */ {\n\t t += (b ^ c ^ d) - 0x359d3e2a;\n\t }\n\n\t e = d;\n\t d = c;\n\t c = (b << 30) | (b >>> 2);\n\t b = a;\n\t a = t;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA1('message');\n\t * var hash = CryptoJS.SHA1(wordArray);\n\t */\n\t C.SHA1 = Hasher._createHelper(SHA1);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA1(message, key);\n\t */\n\t C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n\t}());\n\n\n\treturn CryptoJS.SHA1;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Initialization and round constants tables\n\t var H = [];\n\t var K = [];\n\n\t // Compute constants\n\t (function () {\n\t function isPrime(n) {\n\t var sqrtN = Math.sqrt(n);\n\t for (var factor = 2; factor <= sqrtN; factor++) {\n\t if (!(n % factor)) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t function getFractionalBits(n) {\n\t return ((n - (n | 0)) * 0x100000000) | 0;\n\t }\n\n\t var n = 2;\n\t var nPrime = 0;\n\t while (nPrime < 64) {\n\t if (isPrime(n)) {\n\t if (nPrime < 8) {\n\t H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t }\n\t K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t nPrime++;\n\t }\n\n\t n++;\n\t }\n\t }());\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-256 hash algorithm.\n\t */\n\t var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init(H.slice(0));\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\t var f = H[5];\n\t var g = H[6];\n\t var h = H[7];\n\n\t // Computation\n\t for (var i = 0; i < 64; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var gamma0x = W[i - 15];\n\t var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^\n\t ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t (gamma0x >>> 3);\n\n\t var gamma1x = W[i - 2];\n\t var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t (gamma1x >>> 10);\n\n\t W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t }\n\n\t var ch = (e & f) ^ (~e & g);\n\t var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n\t var t1 = h + sigma1 + ch + K[i] + W[i];\n\t var t2 = sigma0 + maj;\n\n\t h = g;\n\t g = f;\n\t f = e;\n\t e = (d + t1) | 0;\n\t d = c;\n\t c = b;\n\t b = a;\n\t a = (t1 + t2) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t H[5] = (H[5] + f) | 0;\n\t H[6] = (H[6] + g) | 0;\n\t H[7] = (H[7] + h) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA256('message');\n\t * var hash = CryptoJS.SHA256(wordArray);\n\t */\n\t C.SHA256 = Hasher._createHelper(SHA256);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA256(message, key);\n\t */\n\t C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha256\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha256\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var SHA256 = C_algo.SHA256;\n\n\t /**\n\t * SHA-224 hash algorithm.\n\t */\n\t var SHA224 = C_algo.SHA224 = SHA256.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n\t 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4\n\t ]);\n\t },\n\n\t _doFinalize: function () {\n\t var hash = SHA256._doFinalize.call(this);\n\n\t hash.sigBytes -= 4;\n\n\t return hash;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA224('message');\n\t * var hash = CryptoJS.SHA224(wordArray);\n\t */\n\t C.SHA224 = SHA256._createHelper(SHA224);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA224(message, key);\n\t */\n\t C.HmacSHA224 = SHA256._createHmacHelper(SHA224);\n\t}());\n\n\n\treturn CryptoJS.SHA224;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Hasher = C_lib.Hasher;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var X64WordArray = C_x64.WordArray;\n\t var C_algo = C.algo;\n\n\t function X64Word_create() {\n\t return X64Word.create.apply(X64Word, arguments);\n\t }\n\n\t // Constants\n\t var K = [\n\t X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd),\n\t X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc),\n\t X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019),\n\t X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118),\n\t X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe),\n\t X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2),\n\t X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1),\n\t X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694),\n\t X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3),\n\t X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65),\n\t X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483),\n\t X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5),\n\t X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210),\n\t X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4),\n\t X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725),\n\t X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70),\n\t X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926),\n\t X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df),\n\t X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8),\n\t X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b),\n\t X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001),\n\t X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30),\n\t X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910),\n\t X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8),\n\t X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53),\n\t X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8),\n\t X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb),\n\t X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3),\n\t X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60),\n\t X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec),\n\t X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9),\n\t X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b),\n\t X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207),\n\t X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178),\n\t X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6),\n\t X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b),\n\t X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493),\n\t X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c),\n\t X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a),\n\t X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817)\n\t ];\n\n\t // Reusable objects\n\t var W = [];\n\t (function () {\n\t for (var i = 0; i < 80; i++) {\n\t W[i] = X64Word_create();\n\t }\n\t }());\n\n\t /**\n\t * SHA-512 hash algorithm.\n\t */\n\t var SHA512 = C_algo.SHA512 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new X64WordArray.init([\n\t new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b),\n\t new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1),\n\t new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f),\n\t new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179)\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var H0 = H[0];\n\t var H1 = H[1];\n\t var H2 = H[2];\n\t var H3 = H[3];\n\t var H4 = H[4];\n\t var H5 = H[5];\n\t var H6 = H[6];\n\t var H7 = H[7];\n\n\t var H0h = H0.high;\n\t var H0l = H0.low;\n\t var H1h = H1.high;\n\t var H1l = H1.low;\n\t var H2h = H2.high;\n\t var H2l = H2.low;\n\t var H3h = H3.high;\n\t var H3l = H3.low;\n\t var H4h = H4.high;\n\t var H4l = H4.low;\n\t var H5h = H5.high;\n\t var H5l = H5.low;\n\t var H6h = H6.high;\n\t var H6l = H6.low;\n\t var H7h = H7.high;\n\t var H7l = H7.low;\n\n\t // Working variables\n\t var ah = H0h;\n\t var al = H0l;\n\t var bh = H1h;\n\t var bl = H1l;\n\t var ch = H2h;\n\t var cl = H2l;\n\t var dh = H3h;\n\t var dl = H3l;\n\t var eh = H4h;\n\t var el = H4l;\n\t var fh = H5h;\n\t var fl = H5l;\n\t var gh = H6h;\n\t var gl = H6l;\n\t var hh = H7h;\n\t var hl = H7l;\n\n\t // Rounds\n\t for (var i = 0; i < 80; i++) {\n\t var Wil;\n\t var Wih;\n\n\t // Shortcut\n\t var Wi = W[i];\n\n\t // Extend message\n\t if (i < 16) {\n\t Wih = Wi.high = M[offset + i * 2] | 0;\n\t Wil = Wi.low = M[offset + i * 2 + 1] | 0;\n\t } else {\n\t // Gamma0\n\t var gamma0x = W[i - 15];\n\t var gamma0xh = gamma0x.high;\n\t var gamma0xl = gamma0x.low;\n\t var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7);\n\t var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25));\n\n\t // Gamma1\n\t var gamma1x = W[i - 2];\n\t var gamma1xh = gamma1x.high;\n\t var gamma1xl = gamma1x.low;\n\t var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6);\n\t var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26));\n\n\t // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n\t var Wi7 = W[i - 7];\n\t var Wi7h = Wi7.high;\n\t var Wi7l = Wi7.low;\n\n\t var Wi16 = W[i - 16];\n\t var Wi16h = Wi16.high;\n\t var Wi16l = Wi16.low;\n\n\t Wil = gamma0l + Wi7l;\n\t Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0);\n\t Wil = Wil + gamma1l;\n\t Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0);\n\t Wil = Wil + Wi16l;\n\t Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0);\n\n\t Wi.high = Wih;\n\t Wi.low = Wil;\n\t }\n\n\t var chh = (eh & fh) ^ (~eh & gh);\n\t var chl = (el & fl) ^ (~el & gl);\n\t var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);\n\t var majl = (al & bl) ^ (al & cl) ^ (bl & cl);\n\n\t var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));\n\t var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));\n\t var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9));\n\t var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9));\n\n\t // t1 = h + sigma1 + ch + K[i] + W[i]\n\t var Ki = K[i];\n\t var Kih = Ki.high;\n\t var Kil = Ki.low;\n\n\t var t1l = hl + sigma1l;\n\t var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);\n\t var t1l = t1l + chl;\n\t var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);\n\t var t1l = t1l + Kil;\n\t var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0);\n\t var t1l = t1l + Wil;\n\t var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0);\n\n\t // t2 = sigma0 + maj\n\t var t2l = sigma0l + majl;\n\t var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);\n\n\t // Update working variables\n\t hh = gh;\n\t hl = gl;\n\t gh = fh;\n\t gl = fl;\n\t fh = eh;\n\t fl = el;\n\t el = (dl + t1l) | 0;\n\t eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;\n\t dh = ch;\n\t dl = cl;\n\t ch = bh;\n\t cl = bl;\n\t bh = ah;\n\t bl = al;\n\t al = (t1l + t2l) | 0;\n\t ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H0l = H0.low = (H0l + al);\n\t H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0));\n\t H1l = H1.low = (H1l + bl);\n\t H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0));\n\t H2l = H2.low = (H2l + cl);\n\t H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0));\n\t H3l = H3.low = (H3l + dl);\n\t H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0));\n\t H4l = H4.low = (H4l + el);\n\t H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0));\n\t H5l = H5.low = (H5l + fl);\n\t H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0));\n\t H6l = H6.low = (H6l + gl);\n\t H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0));\n\t H7l = H7.low = (H7l + hl);\n\t H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0));\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Convert hash to 32-bit word array before returning\n\t var hash = this._hash.toX32();\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t },\n\n\t blockSize: 1024/32\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA512('message');\n\t * var hash = CryptoJS.SHA512(wordArray);\n\t */\n\t C.SHA512 = Hasher._createHelper(SHA512);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA512(message, key);\n\t */\n\t C.HmacSHA512 = Hasher._createHmacHelper(SHA512);\n\t}());\n\n\n\treturn CryptoJS.SHA512;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"), require(\"./sha512\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\", \"./sha512\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var X64WordArray = C_x64.WordArray;\n\t var C_algo = C.algo;\n\t var SHA512 = C_algo.SHA512;\n\n\t /**\n\t * SHA-384 hash algorithm.\n\t */\n\t var SHA384 = C_algo.SHA384 = SHA512.extend({\n\t _doReset: function () {\n\t this._hash = new X64WordArray.init([\n\t new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507),\n\t new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939),\n\t new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511),\n\t new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4)\n\t ]);\n\t },\n\n\t _doFinalize: function () {\n\t var hash = SHA512._doFinalize.call(this);\n\n\t hash.sigBytes -= 16;\n\n\t return hash;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA384('message');\n\t * var hash = CryptoJS.SHA384(wordArray);\n\t */\n\t C.SHA384 = SHA512._createHelper(SHA384);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA384(message, key);\n\t */\n\t C.HmacSHA384 = SHA512._createHmacHelper(SHA384);\n\t}());\n\n\n\treturn CryptoJS.SHA384;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var C_algo = C.algo;\n\n\t // Constants tables\n\t var RHO_OFFSETS = [];\n\t var PI_INDEXES = [];\n\t var ROUND_CONSTANTS = [];\n\n\t // Compute Constants\n\t (function () {\n\t // Compute rho offset constants\n\t var x = 1, y = 0;\n\t for (var t = 0; t < 24; t++) {\n\t RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64;\n\n\t var newX = y % 5;\n\t var newY = (2 * x + 3 * y) % 5;\n\t x = newX;\n\t y = newY;\n\t }\n\n\t // Compute pi index constants\n\t for (var x = 0; x < 5; x++) {\n\t for (var y = 0; y < 5; y++) {\n\t PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5;\n\t }\n\t }\n\n\t // Compute round constants\n\t var LFSR = 0x01;\n\t for (var i = 0; i < 24; i++) {\n\t var roundConstantMsw = 0;\n\t var roundConstantLsw = 0;\n\n\t for (var j = 0; j < 7; j++) {\n\t if (LFSR & 0x01) {\n\t var bitPosition = (1 << j) - 1;\n\t if (bitPosition < 32) {\n\t roundConstantLsw ^= 1 << bitPosition;\n\t } else /* if (bitPosition >= 32) */ {\n\t roundConstantMsw ^= 1 << (bitPosition - 32);\n\t }\n\t }\n\n\t // Compute next LFSR\n\t if (LFSR & 0x80) {\n\t // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1\n\t LFSR = (LFSR << 1) ^ 0x71;\n\t } else {\n\t LFSR <<= 1;\n\t }\n\t }\n\n\t ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);\n\t }\n\t }());\n\n\t // Reusable objects for temporary values\n\t var T = [];\n\t (function () {\n\t for (var i = 0; i < 25; i++) {\n\t T[i] = X64Word.create();\n\t }\n\t }());\n\n\t /**\n\t * SHA-3 hash algorithm.\n\t */\n\t var SHA3 = C_algo.SHA3 = Hasher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} outputLength\n\t * The desired number of bits in the output hash.\n\t * Only values permitted are: 224, 256, 384, 512.\n\t * Default: 512\n\t */\n\t cfg: Hasher.cfg.extend({\n\t outputLength: 512\n\t }),\n\n\t _doReset: function () {\n\t var state = this._state = []\n\t for (var i = 0; i < 25; i++) {\n\t state[i] = new X64Word.init();\n\t }\n\n\t this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcuts\n\t var state = this._state;\n\t var nBlockSizeLanes = this.blockSize / 2;\n\n\t // Absorb\n\t for (var i = 0; i < nBlockSizeLanes; i++) {\n\t // Shortcuts\n\t var M2i = M[offset + 2 * i];\n\t var M2i1 = M[offset + 2 * i + 1];\n\n\t // Swap endian\n\t M2i = (\n\t (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) |\n\t (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00)\n\t );\n\t M2i1 = (\n\t (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) |\n\t (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00)\n\t );\n\n\t // Absorb message into state\n\t var lane = state[i];\n\t lane.high ^= M2i1;\n\t lane.low ^= M2i;\n\t }\n\n\t // Rounds\n\t for (var round = 0; round < 24; round++) {\n\t // Theta\n\t for (var x = 0; x < 5; x++) {\n\t // Mix column lanes\n\t var tMsw = 0, tLsw = 0;\n\t for (var y = 0; y < 5; y++) {\n\t var lane = state[x + 5 * y];\n\t tMsw ^= lane.high;\n\t tLsw ^= lane.low;\n\t }\n\n\t // Temporary values\n\t var Tx = T[x];\n\t Tx.high = tMsw;\n\t Tx.low = tLsw;\n\t }\n\t for (var x = 0; x < 5; x++) {\n\t // Shortcuts\n\t var Tx4 = T[(x + 4) % 5];\n\t var Tx1 = T[(x + 1) % 5];\n\t var Tx1Msw = Tx1.high;\n\t var Tx1Lsw = Tx1.low;\n\n\t // Mix surrounding columns\n\t var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31));\n\t var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31));\n\t for (var y = 0; y < 5; y++) {\n\t var lane = state[x + 5 * y];\n\t lane.high ^= tMsw;\n\t lane.low ^= tLsw;\n\t }\n\t }\n\n\t // Rho Pi\n\t for (var laneIndex = 1; laneIndex < 25; laneIndex++) {\n\t var tMsw;\n\t var tLsw;\n\n\t // Shortcuts\n\t var lane = state[laneIndex];\n\t var laneMsw = lane.high;\n\t var laneLsw = lane.low;\n\t var rhoOffset = RHO_OFFSETS[laneIndex];\n\n\t // Rotate lanes\n\t if (rhoOffset < 32) {\n\t tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset));\n\t tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset));\n\t } else /* if (rhoOffset >= 32) */ {\n\t tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset));\n\t tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset));\n\t }\n\n\t // Transpose lanes\n\t var TPiLane = T[PI_INDEXES[laneIndex]];\n\t TPiLane.high = tMsw;\n\t TPiLane.low = tLsw;\n\t }\n\n\t // Rho pi at x = y = 0\n\t var T0 = T[0];\n\t var state0 = state[0];\n\t T0.high = state0.high;\n\t T0.low = state0.low;\n\n\t // Chi\n\t for (var x = 0; x < 5; x++) {\n\t for (var y = 0; y < 5; y++) {\n\t // Shortcuts\n\t var laneIndex = x + 5 * y;\n\t var lane = state[laneIndex];\n\t var TLane = T[laneIndex];\n\t var Tx1Lane = T[((x + 1) % 5) + 5 * y];\n\t var Tx2Lane = T[((x + 2) % 5) + 5 * y];\n\n\t // Mix rows\n\t lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high);\n\t lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low);\n\t }\n\t }\n\n\t // Iota\n\t var lane = state[0];\n\t var roundConstant = ROUND_CONSTANTS[round];\n\t lane.high ^= roundConstant.high;\n\t lane.low ^= roundConstant.low;\n\t }\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\t var blockSizeBits = this.blockSize * 32;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32);\n\t dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var state = this._state;\n\t var outputLengthBytes = this.cfg.outputLength / 8;\n\t var outputLengthLanes = outputLengthBytes / 8;\n\n\t // Squeeze\n\t var hashWords = [];\n\t for (var i = 0; i < outputLengthLanes; i++) {\n\t // Shortcuts\n\t var lane = state[i];\n\t var laneMsw = lane.high;\n\t var laneLsw = lane.low;\n\n\t // Swap endian\n\t laneMsw = (\n\t (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) |\n\t (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00)\n\t );\n\t laneLsw = (\n\t (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) |\n\t (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00)\n\t );\n\n\t // Squeeze state to retrieve hash\n\t hashWords.push(laneLsw);\n\t hashWords.push(laneMsw);\n\t }\n\n\t // Return final computed hash\n\t return new WordArray.init(hashWords, outputLengthBytes);\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\n\t var state = clone._state = this._state.slice(0);\n\t for (var i = 0; i < 25; i++) {\n\t state[i] = state[i].clone();\n\t }\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA3('message');\n\t * var hash = CryptoJS.SHA3(wordArray);\n\t */\n\t C.SHA3 = Hasher._createHelper(SHA3);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA3(message, key);\n\t */\n\t C.HmacSHA3 = Hasher._createHmacHelper(SHA3);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA3;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/** @preserve\n\t(c) 2012 by Cédric Mesnil. All rights reserved.\n\n\tRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n\t - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n\t - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t*/\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var _zl = WordArray.create([\n\t 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n\t 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n\t 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n\t 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n\t 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]);\n\t var _zr = WordArray.create([\n\t 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n\t 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n\t 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n\t 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n\t 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]);\n\t var _sl = WordArray.create([\n\t 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n\t 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n\t 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n\t 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n\t 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]);\n\t var _sr = WordArray.create([\n\t 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n\t 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n\t 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n\t 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n\t 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]);\n\n\t var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]);\n\t var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]);\n\n\t /**\n\t * RIPEMD160 hash algorithm.\n\t */\n\t var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t // Swap\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\t // Shortcut\n\t var H = this._hash.words;\n\t var hl = _hl.words;\n\t var hr = _hr.words;\n\t var zl = _zl.words;\n\t var zr = _zr.words;\n\t var sl = _sl.words;\n\t var sr = _sr.words;\n\n\t // Working variables\n\t var al, bl, cl, dl, el;\n\t var ar, br, cr, dr, er;\n\n\t ar = al = H[0];\n\t br = bl = H[1];\n\t cr = cl = H[2];\n\t dr = dl = H[3];\n\t er = el = H[4];\n\t // Computation\n\t var t;\n\t for (var i = 0; i < 80; i += 1) {\n\t t = (al + M[offset+zl[i]])|0;\n\t if (i<16){\n\t\t t += f1(bl,cl,dl) + hl[0];\n\t } else if (i<32) {\n\t\t t += f2(bl,cl,dl) + hl[1];\n\t } else if (i<48) {\n\t\t t += f3(bl,cl,dl) + hl[2];\n\t } else if (i<64) {\n\t\t t += f4(bl,cl,dl) + hl[3];\n\t } else {// if (i<80) {\n\t\t t += f5(bl,cl,dl) + hl[4];\n\t }\n\t t = t|0;\n\t t = rotl(t,sl[i]);\n\t t = (t+el)|0;\n\t al = el;\n\t el = dl;\n\t dl = rotl(cl, 10);\n\t cl = bl;\n\t bl = t;\n\n\t t = (ar + M[offset+zr[i]])|0;\n\t if (i<16){\n\t\t t += f5(br,cr,dr) + hr[0];\n\t } else if (i<32) {\n\t\t t += f4(br,cr,dr) + hr[1];\n\t } else if (i<48) {\n\t\t t += f3(br,cr,dr) + hr[2];\n\t } else if (i<64) {\n\t\t t += f2(br,cr,dr) + hr[3];\n\t } else {// if (i<80) {\n\t\t t += f1(br,cr,dr) + hr[4];\n\t }\n\t t = t|0;\n\t t = rotl(t,sr[i]) ;\n\t t = (t+er)|0;\n\t ar = er;\n\t er = dr;\n\t dr = rotl(cr, 10);\n\t cr = br;\n\t br = t;\n\t }\n\t // Intermediate hash value\n\t t = (H[1] + cl + dr)|0;\n\t H[1] = (H[2] + dl + er)|0;\n\t H[2] = (H[3] + el + ar)|0;\n\t H[3] = (H[4] + al + br)|0;\n\t H[4] = (H[0] + bl + cr)|0;\n\t H[0] = t;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)\n\t );\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 5; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t // Swap\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\n\t function f1(x, y, z) {\n\t return ((x) ^ (y) ^ (z));\n\n\t }\n\n\t function f2(x, y, z) {\n\t return (((x)&(y)) | ((~x)&(z)));\n\t }\n\n\t function f3(x, y, z) {\n\t return (((x) | (~(y))) ^ (z));\n\t }\n\n\t function f4(x, y, z) {\n\t return (((x) & (z)) | ((y)&(~(z))));\n\t }\n\n\t function f5(x, y, z) {\n\t return ((x) ^ ((y) |(~(z))));\n\n\t }\n\n\t function rotl(x,n) {\n\t return (x<<n) | (x>>>(32-n));\n\t }\n\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.RIPEMD160('message');\n\t * var hash = CryptoJS.RIPEMD160(wordArray);\n\t */\n\t C.RIPEMD160 = Hasher._createHelper(RIPEMD160);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacRIPEMD160(message, key);\n\t */\n\t C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160);\n\t}(Math));\n\n\n\treturn CryptoJS.RIPEMD160;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var C_algo = C.algo;\n\n\t /**\n\t * HMAC algorithm.\n\t */\n\t var HMAC = C_algo.HMAC = Base.extend({\n\t /**\n\t * Initializes a newly created HMAC.\n\t *\n\t * @param {Hasher} hasher The hash algorithm to use.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @example\n\t *\n\t * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n\t */\n\t init: function (hasher, key) {\n\t // Init hasher\n\t hasher = this._hasher = new hasher.init();\n\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof key == 'string') {\n\t key = Utf8.parse(key);\n\t }\n\n\t // Shortcuts\n\t var hasherBlockSize = hasher.blockSize;\n\t var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n\t // Allow arbitrary length keys\n\t if (key.sigBytes > hasherBlockSizeBytes) {\n\t key = hasher.finalize(key);\n\t }\n\n\t // Clamp excess bits\n\t key.clamp();\n\n\t // Clone key for inner and outer pads\n\t var oKey = this._oKey = key.clone();\n\t var iKey = this._iKey = key.clone();\n\n\t // Shortcuts\n\t var oKeyWords = oKey.words;\n\t var iKeyWords = iKey.words;\n\n\t // XOR keys with pad constants\n\t for (var i = 0; i < hasherBlockSize; i++) {\n\t oKeyWords[i] ^= 0x5c5c5c5c;\n\t iKeyWords[i] ^= 0x36363636;\n\t }\n\t oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this HMAC to its initial state.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.reset();\n\t */\n\t reset: function () {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Reset\n\t hasher.reset();\n\t hasher.update(this._iKey);\n\t },\n\n\t /**\n\t * Updates this HMAC with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {HMAC} This HMAC instance.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.update('message');\n\t * hmacHasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t this._hasher.update(messageUpdate);\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the HMAC computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @example\n\t *\n\t * var hmac = hmacHasher.finalize();\n\t * var hmac = hmacHasher.finalize('message');\n\t * var hmac = hmacHasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Compute HMAC\n\t var innerHash = hasher.finalize(messageUpdate);\n\t hasher.reset();\n\t var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\n\t return hmac;\n\t }\n\t });\n\t}());\n\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha256\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha256\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var SHA256 = C_algo.SHA256;\n\t var HMAC = C_algo.HMAC;\n\n\t /**\n\t * Password-Based Key Derivation Function 2 algorithm.\n\t */\n\t var PBKDF2 = C_algo.PBKDF2 = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hasher to use. Default: SHA256\n\t * @property {number} iterations The number of iterations to perform. Default: 250000\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: SHA256,\n\t iterations: 250000\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.PBKDF2.create();\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init HMAC\n\t var hmac = HMAC.create(cfg.hasher, password);\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\t var blockIndex = WordArray.create([0x00000001]);\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var blockIndexWords = blockIndex.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t var block = hmac.update(salt).finalize(blockIndex);\n\t hmac.reset();\n\n\t // Shortcuts\n\t var blockWords = block.words;\n\t var blockWordsLength = blockWords.length;\n\n\t // Iterations\n\t var intermediate = block;\n\t for (var i = 1; i < iterations; i++) {\n\t intermediate = hmac.finalize(intermediate);\n\t hmac.reset();\n\n\t // Shortcut\n\t var intermediateWords = intermediate.words;\n\n\t // XOR intermediate with block\n\t for (var j = 0; j < blockWordsLength; j++) {\n\t blockWords[j] ^= intermediateWords[j];\n\t }\n\t }\n\n\t derivedKey.concat(block);\n\t blockIndexWords[0]++;\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.PBKDF2(password, salt);\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.PBKDF2 = function (password, salt, cfg) {\n\t return PBKDF2.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.PBKDF2;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha1\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha1\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var MD5 = C_algo.MD5;\n\n\t /**\n\t * This key derivation function is meant to conform with EVP_BytesToKey.\n\t * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n\t */\n\t var EvpKDF = C_algo.EvpKDF = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: MD5,\n\t iterations: 1\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.EvpKDF.create();\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t var block;\n\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init hasher\n\t var hasher = cfg.hasher.create();\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t if (block) {\n\t hasher.update(block);\n\t }\n\t block = hasher.update(password).finalize(salt);\n\t hasher.reset();\n\n\t // Iterations\n\t for (var i = 1; i < iterations; i++) {\n\t block = hasher.finalize(block);\n\t hasher.reset();\n\t }\n\n\t derivedKey.concat(block);\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.EvpKDF(password, salt);\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.EvpKDF = function (password, salt, cfg) {\n\t return EvpKDF.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.EvpKDF;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./evpkdf\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./evpkdf\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher core components.\n\t */\n\tCryptoJS.lib.Cipher || (function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var Base64 = C_enc.Base64;\n\t var C_algo = C.algo;\n\t var EvpKDF = C_algo.EvpKDF;\n\n\t /**\n\t * Abstract base cipher template.\n\t *\n\t * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n\t * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n\t * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n\t * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n\t */\n\t var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {WordArray} iv The IV to use for this operation.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Creates this cipher in encryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createEncryptor: function (key, cfg) {\n\t return this.create(this._ENC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Creates this cipher in decryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createDecryptor: function (key, cfg) {\n\t return this.create(this._DEC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Initializes a newly created cipher.\n\t *\n\t * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n\t */\n\t init: function (xformMode, key, cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Store transform mode and key\n\t this._xformMode = xformMode;\n\t this._key = key;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this cipher to its initial state.\n\t *\n\t * @example\n\t *\n\t * cipher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-cipher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Adds data to be encrypted or decrypted.\n\t *\n\t * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.process('data');\n\t * var encrypted = cipher.process(wordArray);\n\t */\n\t process: function (dataUpdate) {\n\t // Append\n\t this._append(dataUpdate);\n\n\t // Process available blocks\n\t return this._process();\n\t },\n\n\t /**\n\t * Finalizes the encryption or decryption process.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after final processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.finalize();\n\t * var encrypted = cipher.finalize('data');\n\t * var encrypted = cipher.finalize(wordArray);\n\t */\n\t finalize: function (dataUpdate) {\n\t // Final data update\n\t if (dataUpdate) {\n\t this._append(dataUpdate);\n\t }\n\n\t // Perform concrete-cipher logic\n\t var finalProcessedData = this._doFinalize();\n\n\t return finalProcessedData;\n\t },\n\n\t keySize: 128/32,\n\n\t ivSize: 128/32,\n\n\t _ENC_XFORM_MODE: 1,\n\n\t _DEC_XFORM_MODE: 2,\n\n\t /**\n\t * Creates shortcut functions to a cipher's object interface.\n\t *\n\t * @param {Cipher} cipher The cipher to create a helper for.\n\t *\n\t * @return {Object} An object with encrypt and decrypt shortcut functions.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n\t */\n\t _createHelper: (function () {\n\t function selectCipherStrategy(key) {\n\t if (typeof key == 'string') {\n\t return PasswordBasedCipher;\n\t } else {\n\t return SerializableCipher;\n\t }\n\t }\n\n\t return function (cipher) {\n\t return {\n\t encrypt: function (message, key, cfg) {\n\t return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n\t },\n\n\t decrypt: function (ciphertext, key, cfg) {\n\t return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n\t }\n\t };\n\t };\n\t }())\n\t });\n\n\t /**\n\t * Abstract base stream cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n\t */\n\t var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n\t _doFinalize: function () {\n\t // Process partial blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 1\n\t });\n\n\t /**\n\t * Mode namespace.\n\t */\n\t var C_mode = C.mode = {};\n\n\t /**\n\t * Abstract base block cipher mode template.\n\t */\n\t var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n\t /**\n\t * Creates this mode for encryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n\t */\n\t createEncryptor: function (cipher, iv) {\n\t return this.Encryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Creates this mode for decryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n\t */\n\t createDecryptor: function (cipher, iv) {\n\t return this.Decryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Initializes a newly created mode.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n\t */\n\t init: function (cipher, iv) {\n\t this._cipher = cipher;\n\t this._iv = iv;\n\t }\n\t });\n\n\t /**\n\t * Cipher Block Chaining mode.\n\t */\n\t var CBC = C_mode.CBC = (function () {\n\t /**\n\t * Abstract base CBC mode.\n\t */\n\t var CBC = BlockCipherMode.extend();\n\n\t /**\n\t * CBC encryptor.\n\t */\n\t CBC.Encryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // XOR and encrypt\n\t xorBlock.call(this, words, offset, blockSize);\n\t cipher.encryptBlock(words, offset);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t /**\n\t * CBC decryptor.\n\t */\n\t CBC.Decryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t // Decrypt and XOR\n\t cipher.decryptBlock(words, offset);\n\t xorBlock.call(this, words, offset, blockSize);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function xorBlock(words, offset, blockSize) {\n\t var block;\n\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Choose mixing block\n\t if (iv) {\n\t block = iv;\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t block = this._prevBlock;\n\t }\n\n\t // XOR blocks\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= block[i];\n\t }\n\t }\n\n\t return CBC;\n\t }());\n\n\t /**\n\t * Padding namespace.\n\t */\n\t var C_pad = C.pad = {};\n\n\t /**\n\t * PKCS #5/7 padding strategy.\n\t */\n\t var Pkcs7 = C_pad.Pkcs7 = {\n\t /**\n\t * Pads data using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to pad.\n\t * @param {number} blockSize The multiple that the data should be padded to.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n\t */\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Create padding word\n\t var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;\n\n\t // Create padding\n\t var paddingWords = [];\n\t for (var i = 0; i < nPaddingBytes; i += 4) {\n\t paddingWords.push(paddingWord);\n\t }\n\t var padding = WordArray.create(paddingWords, nPaddingBytes);\n\n\t // Add padding\n\t data.concat(padding);\n\t },\n\n\t /**\n\t * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to unpad.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.unpad(wordArray);\n\t */\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t };\n\n\t /**\n\t * Abstract base block cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n\t */\n\t var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Mode} mode The block mode to use. Default: CBC\n\t * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n\t */\n\t cfg: Cipher.cfg.extend({\n\t mode: CBC,\n\t padding: Pkcs7\n\t }),\n\n\t reset: function () {\n\t var modeCreator;\n\n\t // Reset cipher\n\t Cipher.reset.call(this);\n\n\t // Shortcuts\n\t var cfg = this.cfg;\n\t var iv = cfg.iv;\n\t var mode = cfg.mode;\n\n\t // Reset block mode\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t modeCreator = mode.createEncryptor;\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t modeCreator = mode.createDecryptor;\n\t // Keep at least one block in the buffer for unpadding\n\t this._minBufferSize = 1;\n\t }\n\n\t if (this._mode && this._mode.__creator == modeCreator) {\n\t this._mode.init(this, iv && iv.words);\n\t } else {\n\t this._mode = modeCreator.call(mode, this, iv && iv.words);\n\t this._mode.__creator = modeCreator;\n\t }\n\t },\n\n\t _doProcessBlock: function (words, offset) {\n\t this._mode.processBlock(words, offset);\n\t },\n\n\t _doFinalize: function () {\n\t var finalProcessedBlocks;\n\n\t // Shortcut\n\t var padding = this.cfg.padding;\n\n\t // Finalize\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t // Pad data\n\t padding.pad(this._data, this.blockSize);\n\n\t // Process final blocks\n\t finalProcessedBlocks = this._process(!!'flush');\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t // Process final blocks\n\t finalProcessedBlocks = this._process(!!'flush');\n\n\t // Unpad data\n\t padding.unpad(finalProcessedBlocks);\n\t }\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 128/32\n\t });\n\n\t /**\n\t * A collection of cipher parameters.\n\t *\n\t * @property {WordArray} ciphertext The raw ciphertext.\n\t * @property {WordArray} key The key to this ciphertext.\n\t * @property {WordArray} iv The IV used in the ciphering operation.\n\t * @property {WordArray} salt The salt used with a key derivation function.\n\t * @property {Cipher} algorithm The cipher algorithm.\n\t * @property {Mode} mode The block mode used in the ciphering operation.\n\t * @property {Padding} padding The padding scheme used in the ciphering operation.\n\t * @property {number} blockSize The block size of the cipher.\n\t * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n\t */\n\t var CipherParams = C_lib.CipherParams = Base.extend({\n\t /**\n\t * Initializes a newly created cipher params object.\n\t *\n\t * @param {Object} cipherParams An object with any of the possible cipher parameters.\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.lib.CipherParams.create({\n\t * ciphertext: ciphertextWordArray,\n\t * key: keyWordArray,\n\t * iv: ivWordArray,\n\t * salt: saltWordArray,\n\t * algorithm: CryptoJS.algo.AES,\n\t * mode: CryptoJS.mode.CBC,\n\t * padding: CryptoJS.pad.PKCS7,\n\t * blockSize: 4,\n\t * formatter: CryptoJS.format.OpenSSL\n\t * });\n\t */\n\t init: function (cipherParams) {\n\t this.mixIn(cipherParams);\n\t },\n\n\t /**\n\t * Converts this cipher params object to a string.\n\t *\n\t * @param {Format} formatter (Optional) The formatting strategy to use.\n\t *\n\t * @return {string} The stringified cipher params.\n\t *\n\t * @throws Error If neither the formatter nor the default formatter is set.\n\t *\n\t * @example\n\t *\n\t * var string = cipherParams + '';\n\t * var string = cipherParams.toString();\n\t * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n\t */\n\t toString: function (formatter) {\n\t return (formatter || this.formatter).stringify(this);\n\t }\n\t });\n\n\t /**\n\t * Format namespace.\n\t */\n\t var C_format = C.format = {};\n\n\t /**\n\t * OpenSSL formatting strategy.\n\t */\n\t var OpenSSLFormatter = C_format.OpenSSL = {\n\t /**\n\t * Converts a cipher params object to an OpenSSL-compatible string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The OpenSSL-compatible string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t var wordArray;\n\n\t // Shortcuts\n\t var ciphertext = cipherParams.ciphertext;\n\t var salt = cipherParams.salt;\n\n\t // Format\n\t if (salt) {\n\t wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n\t } else {\n\t wordArray = ciphertext;\n\t }\n\n\t return wordArray.toString(Base64);\n\t },\n\n\t /**\n\t * Converts an OpenSSL-compatible string to a cipher params object.\n\t *\n\t * @param {string} openSSLStr The OpenSSL-compatible string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n\t */\n\t parse: function (openSSLStr) {\n\t var salt;\n\n\t // Parse base64\n\t var ciphertext = Base64.parse(openSSLStr);\n\n\t // Shortcut\n\t var ciphertextWords = ciphertext.words;\n\n\t // Test for salt\n\t if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n\t // Extract salt\n\t salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n\t // Remove salt from ciphertext\n\t ciphertextWords.splice(0, 4);\n\t ciphertext.sigBytes -= 16;\n\t }\n\n\t return CipherParams.create({ ciphertext: ciphertext, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n\t */\n\t var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n\t */\n\t cfg: Base.extend({\n\t format: OpenSSLFormatter\n\t }),\n\n\t /**\n\t * Encrypts a message.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Encrypt\n\t var encryptor = cipher.createEncryptor(key, cfg);\n\t var ciphertext = encryptor.finalize(message);\n\n\t // Shortcut\n\t var cipherCfg = encryptor.cfg;\n\n\t // Create and return serializable cipher params\n\t return CipherParams.create({\n\t ciphertext: ciphertext,\n\t key: key,\n\t iv: cipherCfg.iv,\n\t algorithm: cipher,\n\t mode: cipherCfg.mode,\n\t padding: cipherCfg.padding,\n\t blockSize: cipher.blockSize,\n\t formatter: cfg.format\n\t });\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Decrypt\n\t var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n\n\t return plaintext;\n\t },\n\n\t /**\n\t * Converts serialized ciphertext to CipherParams,\n\t * else assumed CipherParams already and returns ciphertext unchanged.\n\t *\n\t * @param {CipherParams|string} ciphertext The ciphertext.\n\t * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n\t *\n\t * @return {CipherParams} The unserialized ciphertext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n\t */\n\t _parse: function (ciphertext, format) {\n\t if (typeof ciphertext == 'string') {\n\t return format.parse(ciphertext, this);\n\t } else {\n\t return ciphertext;\n\t }\n\t }\n\t });\n\n\t /**\n\t * Key derivation function namespace.\n\t */\n\t var C_kdf = C.kdf = {};\n\n\t /**\n\t * OpenSSL key derivation function.\n\t */\n\t var OpenSSLKdf = C_kdf.OpenSSL = {\n\t /**\n\t * Derives a key and IV from a password.\n\t *\n\t * @param {string} password The password to derive from.\n\t * @param {number} keySize The size in words of the key to generate.\n\t * @param {number} ivSize The size in words of the IV to generate.\n\t * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n\t *\n\t * @return {CipherParams} A cipher params object with the key, IV, and salt.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n\t */\n\t execute: function (password, keySize, ivSize, salt, hasher) {\n\t // Generate random salt\n\t if (!salt) {\n\t salt = WordArray.random(64/8);\n\t }\n\n\t // Derive key and IV\n\t if (!hasher) {\n\t var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);\n\t } else {\n\t var key = EvpKDF.create({ keySize: keySize + ivSize, hasher: hasher }).compute(password, salt);\n\t }\n\n\n\t // Separate key and IV\n\t var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n\t key.sigBytes = keySize * 4;\n\n\t // Return params\n\t return CipherParams.create({ key: key, iv: iv, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A serializable cipher wrapper that derives the key from a password,\n\t * and returns ciphertext as a serializable cipher params object.\n\t */\n\t var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n\t */\n\t cfg: SerializableCipher.cfg.extend({\n\t kdf: OpenSSLKdf\n\t }),\n\n\t /**\n\t * Encrypts a message using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, cfg.salt, cfg.hasher);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Encrypt\n\t var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\n\t // Mix in derived params\n\t ciphertext.mixIn(derivedParams);\n\n\t return ciphertext;\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt, cfg.hasher);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Decrypt\n\t var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n\n\t return plaintext;\n\t }\n\t });\n\t}());\n\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher Feedback block mode.\n\t */\n\tCryptoJS.mode.CFB = (function () {\n\t var CFB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t CFB.Encryptor = CFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t CFB.Decryptor = CFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {\n\t var keystream;\n\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Generate keystream\n\t if (iv) {\n\t keystream = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t keystream = this._prevBlock;\n\t }\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\n\t return CFB;\n\t}());\n\n\n\treturn CryptoJS.mode.CFB;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Counter block mode.\n\t */\n\tCryptoJS.mode.CTR = (function () {\n\t var CTR = CryptoJS.lib.BlockCipherMode.extend();\n\n\t var Encryptor = CTR.Encryptor = CTR.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var counter = this._counter;\n\n\t // Generate keystream\n\t if (iv) {\n\t counter = this._counter = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\t var keystream = counter.slice(0);\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Increment counter\n\t counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t CTR.Decryptor = Encryptor;\n\n\t return CTR;\n\t}());\n\n\n\treturn CryptoJS.mode.CTR;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/** @preserve\n\t * Counter block mode compatible with Dr Brian Gladman fileenc.c\n\t * derived from CryptoJS.mode.CTR\n\t * Jan Hruby jhruby.web@gmail.com\n\t */\n\tCryptoJS.mode.CTRGladman = (function () {\n\t var CTRGladman = CryptoJS.lib.BlockCipherMode.extend();\n\n\t\tfunction incWord(word)\n\t\t{\n\t\t\tif (((word >> 24) & 0xff) === 0xff) { //overflow\n\t\t\tvar b1 = (word >> 16)&0xff;\n\t\t\tvar b2 = (word >> 8)&0xff;\n\t\t\tvar b3 = word & 0xff;\n\n\t\t\tif (b1 === 0xff) // overflow b1\n\t\t\t{\n\t\t\tb1 = 0;\n\t\t\tif (b2 === 0xff)\n\t\t\t{\n\t\t\t\tb2 = 0;\n\t\t\t\tif (b3 === 0xff)\n\t\t\t\t{\n\t\t\t\t\tb3 = 0;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t++b3;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t++b2;\n\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t++b1;\n\t\t\t}\n\n\t\t\tword = 0;\n\t\t\tword += (b1 << 16);\n\t\t\tword += (b2 << 8);\n\t\t\tword += b3;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\tword += (0x01 << 24);\n\t\t\t}\n\t\t\treturn word;\n\t\t}\n\n\t\tfunction incCounter(counter)\n\t\t{\n\t\t\tif ((counter[0] = incWord(counter[0])) === 0)\n\t\t\t{\n\t\t\t\t// encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8\n\t\t\t\tcounter[1] = incWord(counter[1]);\n\t\t\t}\n\t\t\treturn counter;\n\t\t}\n\n\t var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var counter = this._counter;\n\n\t // Generate keystream\n\t if (iv) {\n\t counter = this._counter = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\n\t\t\t\tincCounter(counter);\n\n\t\t\t\tvar keystream = counter.slice(0);\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t CTRGladman.Decryptor = Encryptor;\n\n\t return CTRGladman;\n\t}());\n\n\n\n\n\treturn CryptoJS.mode.CTRGladman;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Output Feedback block mode.\n\t */\n\tCryptoJS.mode.OFB = (function () {\n\t var OFB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t var Encryptor = OFB.Encryptor = OFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var keystream = this._keystream;\n\n\t // Generate keystream\n\t if (iv) {\n\t keystream = this._keystream = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t OFB.Decryptor = Encryptor;\n\n\t return OFB;\n\t}());\n\n\n\treturn CryptoJS.mode.OFB;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Electronic Codebook block mode.\n\t */\n\tCryptoJS.mode.ECB = (function () {\n\t var ECB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t ECB.Encryptor = ECB.extend({\n\t processBlock: function (words, offset) {\n\t this._cipher.encryptBlock(words, offset);\n\t }\n\t });\n\n\t ECB.Decryptor = ECB.extend({\n\t processBlock: function (words, offset) {\n\t this._cipher.decryptBlock(words, offset);\n\t }\n\t });\n\n\t return ECB;\n\t}());\n\n\n\treturn CryptoJS.mode.ECB;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ANSI X.923 padding strategy.\n\t */\n\tCryptoJS.pad.AnsiX923 = {\n\t pad: function (data, blockSize) {\n\t // Shortcuts\n\t var dataSigBytes = data.sigBytes;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes;\n\n\t // Compute last byte position\n\t var lastBytePos = dataSigBytes + nPaddingBytes - 1;\n\n\t // Pad\n\t data.clamp();\n\t data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8);\n\t data.sigBytes += nPaddingBytes;\n\t },\n\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Ansix923;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ISO 10126 padding strategy.\n\t */\n\tCryptoJS.pad.Iso10126 = {\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Pad\n\t data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).\n\t concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1));\n\t },\n\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Iso10126;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ISO/IEC 9797-1 Padding Method 2.\n\t */\n\tCryptoJS.pad.Iso97971 = {\n\t pad: function (data, blockSize) {\n\t // Add 0x80 byte\n\t data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1));\n\n\t // Zero pad the rest\n\t CryptoJS.pad.ZeroPadding.pad(data, blockSize);\n\t },\n\n\t unpad: function (data) {\n\t // Remove zero padding\n\t CryptoJS.pad.ZeroPadding.unpad(data);\n\n\t // Remove one more byte -- the 0x80 byte\n\t data.sigBytes--;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Iso97971;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Zero padding strategy.\n\t */\n\tCryptoJS.pad.ZeroPadding = {\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Pad\n\t data.clamp();\n\t data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes);\n\t },\n\n\t unpad: function (data) {\n\t // Shortcut\n\t var dataWords = data.words;\n\n\t // Unpad\n\t var i = data.sigBytes - 1;\n\t for (var i = data.sigBytes - 1; i >= 0; i--) {\n\t if (((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) {\n\t data.sigBytes = i + 1;\n\t break;\n\t }\n\t }\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.ZeroPadding;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * A noop padding strategy.\n\t */\n\tCryptoJS.pad.NoPadding = {\n\t pad: function () {\n\t },\n\n\t unpad: function () {\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.NoPadding;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var CipherParams = C_lib.CipherParams;\n\t var C_enc = C.enc;\n\t var Hex = C_enc.Hex;\n\t var C_format = C.format;\n\n\t var HexFormatter = C_format.Hex = {\n\t /**\n\t * Converts the ciphertext of a cipher params object to a hexadecimally encoded string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The hexadecimally encoded string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.format.Hex.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t return cipherParams.ciphertext.toString(Hex);\n\t },\n\n\t /**\n\t * Converts a hexadecimally encoded ciphertext string to a cipher params object.\n\t *\n\t * @param {string} input The hexadecimally encoded string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.Hex.parse(hexString);\n\t */\n\t parse: function (input) {\n\t var ciphertext = Hex.parse(input);\n\t return CipherParams.create({ ciphertext: ciphertext });\n\t }\n\t };\n\t}());\n\n\n\treturn CryptoJS.format.Hex;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Lookup tables\n\t var SBOX = [];\n\t var INV_SBOX = [];\n\t var SUB_MIX_0 = [];\n\t var SUB_MIX_1 = [];\n\t var SUB_MIX_2 = [];\n\t var SUB_MIX_3 = [];\n\t var INV_SUB_MIX_0 = [];\n\t var INV_SUB_MIX_1 = [];\n\t var INV_SUB_MIX_2 = [];\n\t var INV_SUB_MIX_3 = [];\n\n\t // Compute lookup tables\n\t (function () {\n\t // Compute double table\n\t var d = [];\n\t for (var i = 0; i < 256; i++) {\n\t if (i < 128) {\n\t d[i] = i << 1;\n\t } else {\n\t d[i] = (i << 1) ^ 0x11b;\n\t }\n\t }\n\n\t // Walk GF(2^8)\n\t var x = 0;\n\t var xi = 0;\n\t for (var i = 0; i < 256; i++) {\n\t // Compute sbox\n\t var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n\t sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n\t SBOX[x] = sx;\n\t INV_SBOX[sx] = x;\n\n\t // Compute multiplication\n\t var x2 = d[x];\n\t var x4 = d[x2];\n\t var x8 = d[x4];\n\n\t // Compute sub bytes, mix columns tables\n\t var t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n\t SUB_MIX_0[x] = (t << 24) | (t >>> 8);\n\t SUB_MIX_1[x] = (t << 16) | (t >>> 16);\n\t SUB_MIX_2[x] = (t << 8) | (t >>> 24);\n\t SUB_MIX_3[x] = t;\n\n\t // Compute inv sub bytes, inv mix columns tables\n\t var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n\t INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);\n\t INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);\n\t INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);\n\t INV_SUB_MIX_3[sx] = t;\n\n\t // Compute next counter\n\t if (!x) {\n\t x = xi = 1;\n\t } else {\n\t x = x2 ^ d[d[d[x8 ^ x2]]];\n\t xi ^= d[d[xi]];\n\t }\n\t }\n\t }());\n\n\t // Precomputed Rcon lookup\n\t var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n\t /**\n\t * AES block cipher algorithm.\n\t */\n\t var AES = C_algo.AES = BlockCipher.extend({\n\t _doReset: function () {\n\t var t;\n\n\t // Skip reset of nRounds has been set before and key did not change\n\t if (this._nRounds && this._keyPriorReset === this._key) {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var key = this._keyPriorReset = this._key;\n\t var keyWords = key.words;\n\t var keySize = key.sigBytes / 4;\n\n\t // Compute number of rounds\n\t var nRounds = this._nRounds = keySize + 6;\n\n\t // Compute number of key schedule rows\n\t var ksRows = (nRounds + 1) * 4;\n\n\t // Compute key schedule\n\t var keySchedule = this._keySchedule = [];\n\t for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n\t if (ksRow < keySize) {\n\t keySchedule[ksRow] = keyWords[ksRow];\n\t } else {\n\t t = keySchedule[ksRow - 1];\n\n\t if (!(ksRow % keySize)) {\n\t // Rot word\n\t t = (t << 8) | (t >>> 24);\n\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\n\t // Mix Rcon\n\t t ^= RCON[(ksRow / keySize) | 0] << 24;\n\t } else if (keySize > 6 && ksRow % keySize == 4) {\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\t }\n\n\t keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n\t }\n\t }\n\n\t // Compute inv key schedule\n\t var invKeySchedule = this._invKeySchedule = [];\n\t for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n\t var ksRow = ksRows - invKsRow;\n\n\t if (invKsRow % 4) {\n\t var t = keySchedule[ksRow];\n\t } else {\n\t var t = keySchedule[ksRow - 4];\n\t }\n\n\t if (invKsRow < 4 || ksRow <= 4) {\n\t invKeySchedule[invKsRow] = t;\n\t } else {\n\t invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^\n\t INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n\t }\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t // Swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\n\t this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\n\t // Inv swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\t },\n\n\t _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n\t // Shortcut\n\t var nRounds = this._nRounds;\n\n\t // Get input, add round key\n\t var s0 = M[offset] ^ keySchedule[0];\n\t var s1 = M[offset + 1] ^ keySchedule[1];\n\t var s2 = M[offset + 2] ^ keySchedule[2];\n\t var s3 = M[offset + 3] ^ keySchedule[3];\n\n\t // Key schedule row counter\n\t var ksRow = 4;\n\n\t // Rounds\n\t for (var round = 1; round < nRounds; round++) {\n\t // Shift rows, sub bytes, mix columns, add round key\n\t var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n\t var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n\t var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n\t var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\n\t // Update state\n\t s0 = t0;\n\t s1 = t1;\n\t s2 = t2;\n\t s3 = t3;\n\t }\n\n\t // Shift rows, sub bytes, add round key\n\t var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n\t var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n\t var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n\t var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\n\t // Set output\n\t M[offset] = t0;\n\t M[offset + 1] = t1;\n\t M[offset + 2] = t2;\n\t M[offset + 3] = t3;\n\t },\n\n\t keySize: 256/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.AES = BlockCipher._createHelper(AES);\n\t}());\n\n\n\treturn CryptoJS.AES;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Permuted Choice 1 constants\n\t var PC1 = [\n\t 57, 49, 41, 33, 25, 17, 9, 1,\n\t 58, 50, 42, 34, 26, 18, 10, 2,\n\t 59, 51, 43, 35, 27, 19, 11, 3,\n\t 60, 52, 44, 36, 63, 55, 47, 39,\n\t 31, 23, 15, 7, 62, 54, 46, 38,\n\t 30, 22, 14, 6, 61, 53, 45, 37,\n\t 29, 21, 13, 5, 28, 20, 12, 4\n\t ];\n\n\t // Permuted Choice 2 constants\n\t var PC2 = [\n\t 14, 17, 11, 24, 1, 5,\n\t 3, 28, 15, 6, 21, 10,\n\t 23, 19, 12, 4, 26, 8,\n\t 16, 7, 27, 20, 13, 2,\n\t 41, 52, 31, 37, 47, 55,\n\t 30, 40, 51, 45, 33, 48,\n\t 44, 49, 39, 56, 34, 53,\n\t 46, 42, 50, 36, 29, 32\n\t ];\n\n\t // Cumulative bit shift constants\n\t var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];\n\n\t // SBOXes and round permutation constants\n\t var SBOX_P = [\n\t {\n\t 0x0: 0x808200,\n\t 0x10000000: 0x8000,\n\t 0x20000000: 0x808002,\n\t 0x30000000: 0x2,\n\t 0x40000000: 0x200,\n\t 0x50000000: 0x808202,\n\t 0x60000000: 0x800202,\n\t 0x70000000: 0x800000,\n\t 0x80000000: 0x202,\n\t 0x90000000: 0x800200,\n\t 0xa0000000: 0x8200,\n\t 0xb0000000: 0x808000,\n\t 0xc0000000: 0x8002,\n\t 0xd0000000: 0x800002,\n\t 0xe0000000: 0x0,\n\t 0xf0000000: 0x8202,\n\t 0x8000000: 0x0,\n\t 0x18000000: 0x808202,\n\t 0x28000000: 0x8202,\n\t 0x38000000: 0x8000,\n\t 0x48000000: 0x808200,\n\t 0x58000000: 0x200,\n\t 0x68000000: 0x808002,\n\t 0x78000000: 0x2,\n\t 0x88000000: 0x800200,\n\t 0x98000000: 0x8200,\n\t 0xa8000000: 0x808000,\n\t 0xb8000000: 0x800202,\n\t 0xc8000000: 0x800002,\n\t 0xd8000000: 0x8002,\n\t 0xe8000000: 0x202,\n\t 0xf8000000: 0x800000,\n\t 0x1: 0x8000,\n\t 0x10000001: 0x2,\n\t 0x20000001: 0x808200,\n\t 0x30000001: 0x800000,\n\t 0x40000001: 0x808002,\n\t 0x50000001: 0x8200,\n\t 0x60000001: 0x200,\n\t 0x70000001: 0x800202,\n\t 0x80000001: 0x808202,\n\t 0x90000001: 0x808000,\n\t 0xa0000001: 0x800002,\n\t 0xb0000001: 0x8202,\n\t 0xc0000001: 0x202,\n\t 0xd0000001: 0x800200,\n\t 0xe0000001: 0x8002,\n\t 0xf0000001: 0x0,\n\t 0x8000001: 0x808202,\n\t 0x18000001: 0x808000,\n\t 0x28000001: 0x800000,\n\t 0x38000001: 0x200,\n\t 0x48000001: 0x8000,\n\t 0x58000001: 0x800002,\n\t 0x68000001: 0x2,\n\t 0x78000001: 0x8202,\n\t 0x88000001: 0x8002,\n\t 0x98000001: 0x800202,\n\t 0xa8000001: 0x202,\n\t 0xb8000001: 0x808200,\n\t 0xc8000001: 0x800200,\n\t 0xd8000001: 0x0,\n\t 0xe8000001: 0x8200,\n\t 0xf8000001: 0x808002\n\t },\n\t {\n\t 0x0: 0x40084010,\n\t 0x1000000: 0x4000,\n\t 0x2000000: 0x80000,\n\t 0x3000000: 0x40080010,\n\t 0x4000000: 0x40000010,\n\t 0x5000000: 0x40084000,\n\t 0x6000000: 0x40004000,\n\t 0x7000000: 0x10,\n\t 0x8000000: 0x84000,\n\t 0x9000000: 0x40004010,\n\t 0xa000000: 0x40000000,\n\t 0xb000000: 0x84010,\n\t 0xc000000: 0x80010,\n\t 0xd000000: 0x0,\n\t 0xe000000: 0x4010,\n\t 0xf000000: 0x40080000,\n\t 0x800000: 0x40004000,\n\t 0x1800000: 0x84010,\n\t 0x2800000: 0x10,\n\t 0x3800000: 0x40004010,\n\t 0x4800000: 0x40084010,\n\t 0x5800000: 0x40000000,\n\t 0x6800000: 0x80000,\n\t 0x7800000: 0x40080010,\n\t 0x8800000: 0x80010,\n\t 0x9800000: 0x0,\n\t 0xa800000: 0x4000,\n\t 0xb800000: 0x40080000,\n\t 0xc800000: 0x40000010,\n\t 0xd800000: 0x84000,\n\t 0xe800000: 0x40084000,\n\t 0xf800000: 0x4010,\n\t 0x10000000: 0x0,\n\t 0x11000000: 0x40080010,\n\t 0x12000000: 0x40004010,\n\t 0x13000000: 0x40084000,\n\t 0x14000000: 0x40080000,\n\t 0x15000000: 0x10,\n\t 0x16000000: 0x84010,\n\t 0x17000000: 0x4000,\n\t 0x18000000: 0x4010,\n\t 0x19000000: 0x80000,\n\t 0x1a000000: 0x80010,\n\t 0x1b000000: 0x40000010,\n\t 0x1c000000: 0x84000,\n\t 0x1d000000: 0x40004000,\n\t 0x1e000000: 0x40000000,\n\t 0x1f000000: 0x40084010,\n\t 0x10800000: 0x84010,\n\t 0x11800000: 0x80000,\n\t 0x12800000: 0x40080000,\n\t 0x13800000: 0x4000,\n\t 0x14800000: 0x40004000,\n\t 0x15800000: 0x40084010,\n\t 0x16800000: 0x10,\n\t 0x17800000: 0x40000000,\n\t 0x18800000: 0x40084000,\n\t 0x19800000: 0x40000010,\n\t 0x1a800000: 0x40004010,\n\t 0x1b800000: 0x80010,\n\t 0x1c800000: 0x0,\n\t 0x1d800000: 0x4010,\n\t 0x1e800000: 0x40080010,\n\t 0x1f800000: 0x84000\n\t },\n\t {\n\t 0x0: 0x104,\n\t 0x100000: 0x0,\n\t 0x200000: 0x4000100,\n\t 0x300000: 0x10104,\n\t 0x400000: 0x10004,\n\t 0x500000: 0x4000004,\n\t 0x600000: 0x4010104,\n\t 0x700000: 0x4010000,\n\t 0x800000: 0x4000000,\n\t 0x900000: 0x4010100,\n\t 0xa00000: 0x10100,\n\t 0xb00000: 0x4010004,\n\t 0xc00000: 0x4000104,\n\t 0xd00000: 0x10000,\n\t 0xe00000: 0x4,\n\t 0xf00000: 0x100,\n\t 0x80000: 0x4010100,\n\t 0x180000: 0x4010004,\n\t 0x280000: 0x0,\n\t 0x380000: 0x4000100,\n\t 0x480000: 0x4000004,\n\t 0x580000: 0x10000,\n\t 0x680000: 0x10004,\n\t 0x780000: 0x104,\n\t 0x880000: 0x4,\n\t 0x980000: 0x100,\n\t 0xa80000: 0x4010000,\n\t 0xb80000: 0x10104,\n\t 0xc80000: 0x10100,\n\t 0xd80000: 0x4000104,\n\t 0xe80000: 0x4010104,\n\t 0xf80000: 0x4000000,\n\t 0x1000000: 0x4010100,\n\t 0x1100000: 0x10004,\n\t 0x1200000: 0x10000,\n\t 0x1300000: 0x4000100,\n\t 0x1400000: 0x100,\n\t 0x1500000: 0x4010104,\n\t 0x1600000: 0x4000004,\n\t 0x1700000: 0x0,\n\t 0x1800000: 0x4000104,\n\t 0x1900000: 0x4000000,\n\t 0x1a00000: 0x4,\n\t 0x1b00000: 0x10100,\n\t 0x1c00000: 0x4010000,\n\t 0x1d00000: 0x104,\n\t 0x1e00000: 0x10104,\n\t 0x1f00000: 0x4010004,\n\t 0x1080000: 0x4000000,\n\t 0x1180000: 0x104,\n\t 0x1280000: 0x4010100,\n\t 0x1380000: 0x0,\n\t 0x1480000: 0x10004,\n\t 0x1580000: 0x4000100,\n\t 0x1680000: 0x100,\n\t 0x1780000: 0x4010004,\n\t 0x1880000: 0x10000,\n\t 0x1980000: 0x4010104,\n\t 0x1a80000: 0x10104,\n\t 0x1b80000: 0x4000004,\n\t 0x1c80000: 0x4000104,\n\t 0x1d80000: 0x4010000,\n\t 0x1e80000: 0x4,\n\t 0x1f80000: 0x10100\n\t },\n\t {\n\t 0x0: 0x80401000,\n\t 0x10000: 0x80001040,\n\t 0x20000: 0x401040,\n\t 0x30000: 0x80400000,\n\t 0x40000: 0x0,\n\t 0x50000: 0x401000,\n\t 0x60000: 0x80000040,\n\t 0x70000: 0x400040,\n\t 0x80000: 0x80000000,\n\t 0x90000: 0x400000,\n\t 0xa0000: 0x40,\n\t 0xb0000: 0x80001000,\n\t 0xc0000: 0x80400040,\n\t 0xd0000: 0x1040,\n\t 0xe0000: 0x1000,\n\t 0xf0000: 0x80401040,\n\t 0x8000: 0x80001040,\n\t 0x18000: 0x40,\n\t 0x28000: 0x80400040,\n\t 0x38000: 0x80001000,\n\t 0x48000: 0x401000,\n\t 0x58000: 0x80401040,\n\t 0x68000: 0x0,\n\t 0x78000: 0x80400000,\n\t 0x88000: 0x1000,\n\t 0x98000: 0x80401000,\n\t 0xa8000: 0x400000,\n\t 0xb8000: 0x1040,\n\t 0xc8000: 0x80000000,\n\t 0xd8000: 0x400040,\n\t 0xe8000: 0x401040,\n\t 0xf8000: 0x80000040,\n\t 0x100000: 0x400040,\n\t 0x110000: 0x401000,\n\t 0x120000: 0x80000040,\n\t 0x130000: 0x0,\n\t 0x140000: 0x1040,\n\t 0x150000: 0x80400040,\n\t 0x160000: 0x80401000,\n\t 0x170000: 0x80001040,\n\t 0x180000: 0x80401040,\n\t 0x190000: 0x80000000,\n\t 0x1a0000: 0x80400000,\n\t 0x1b0000: 0x401040,\n\t 0x1c0000: 0x80001000,\n\t 0x1d0000: 0x400000,\n\t 0x1e0000: 0x40,\n\t 0x1f0000: 0x1000,\n\t 0x108000: 0x80400000,\n\t 0x118000: 0x80401040,\n\t 0x128000: 0x0,\n\t 0x138000: 0x401000,\n\t 0x148000: 0x400040,\n\t 0x158000: 0x80000000,\n\t 0x168000: 0x80001040,\n\t 0x178000: 0x40,\n\t 0x188000: 0x80000040,\n\t 0x198000: 0x1000,\n\t 0x1a8000: 0x80001000,\n\t 0x1b8000: 0x80400040,\n\t 0x1c8000: 0x1040,\n\t 0x1d8000: 0x80401000,\n\t 0x1e8000: 0x400000,\n\t 0x1f8000: 0x401040\n\t },\n\t {\n\t 0x0: 0x80,\n\t 0x1000: 0x1040000,\n\t 0x2000: 0x40000,\n\t 0x3000: 0x20000000,\n\t 0x4000: 0x20040080,\n\t 0x5000: 0x1000080,\n\t 0x6000: 0x21000080,\n\t 0x7000: 0x40080,\n\t 0x8000: 0x1000000,\n\t 0x9000: 0x20040000,\n\t 0xa000: 0x20000080,\n\t 0xb000: 0x21040080,\n\t 0xc000: 0x21040000,\n\t 0xd000: 0x0,\n\t 0xe000: 0x1040080,\n\t 0xf000: 0x21000000,\n\t 0x800: 0x1040080,\n\t 0x1800: 0x21000080,\n\t 0x2800: 0x80,\n\t 0x3800: 0x1040000,\n\t 0x4800: 0x40000,\n\t 0x5800: 0x20040080,\n\t 0x6800: 0x21040000,\n\t 0x7800: 0x20000000,\n\t 0x8800: 0x20040000,\n\t 0x9800: 0x0,\n\t 0xa800: 0x21040080,\n\t 0xb800: 0x1000080,\n\t 0xc800: 0x20000080,\n\t 0xd800: 0x21000000,\n\t 0xe800: 0x1000000,\n\t 0xf800: 0x40080,\n\t 0x10000: 0x40000,\n\t 0x11000: 0x80,\n\t 0x12000: 0x20000000,\n\t 0x13000: 0x21000080,\n\t 0x14000: 0x1000080,\n\t 0x15000: 0x21040000,\n\t 0x16000: 0x20040080,\n\t 0x17000: 0x1000000,\n\t 0x18000: 0x21040080,\n\t 0x19000: 0x21000000,\n\t 0x1a000: 0x1040000,\n\t 0x1b000: 0x20040000,\n\t 0x1c000: 0x40080,\n\t 0x1d000: 0x20000080,\n\t 0x1e000: 0x0,\n\t 0x1f000: 0x1040080,\n\t 0x10800: 0x21000080,\n\t 0x11800: 0x1000000,\n\t 0x12800: 0x1040000,\n\t 0x13800: 0x20040080,\n\t 0x14800: 0x20000000,\n\t 0x15800: 0x1040080,\n\t 0x16800: 0x80,\n\t 0x17800: 0x21040000,\n\t 0x18800: 0x40080,\n\t 0x19800: 0x21040080,\n\t 0x1a800: 0x0,\n\t 0x1b800: 0x21000000,\n\t 0x1c800: 0x1000080,\n\t 0x1d800: 0x40000,\n\t 0x1e800: 0x20040000,\n\t 0x1f800: 0x20000080\n\t },\n\t {\n\t 0x0: 0x10000008,\n\t 0x100: 0x2000,\n\t 0x200: 0x10200000,\n\t 0x300: 0x10202008,\n\t 0x400: 0x10002000,\n\t 0x500: 0x200000,\n\t 0x600: 0x200008,\n\t 0x700: 0x10000000,\n\t 0x800: 0x0,\n\t 0x900: 0x10002008,\n\t 0xa00: 0x202000,\n\t 0xb00: 0x8,\n\t 0xc00: 0x10200008,\n\t 0xd00: 0x202008,\n\t 0xe00: 0x2008,\n\t 0xf00: 0x10202000,\n\t 0x80: 0x10200000,\n\t 0x180: 0x10202008,\n\t 0x280: 0x8,\n\t 0x380: 0x200000,\n\t 0x480: 0x202008,\n\t 0x580: 0x10000008,\n\t 0x680: 0x10002000,\n\t 0x780: 0x2008,\n\t 0x880: 0x200008,\n\t 0x980: 0x2000,\n\t 0xa80: 0x10002008,\n\t 0xb80: 0x10200008,\n\t 0xc80: 0x0,\n\t 0xd80: 0x10202000,\n\t 0xe80: 0x202000,\n\t 0xf80: 0x10000000,\n\t 0x1000: 0x10002000,\n\t 0x1100: 0x10200008,\n\t 0x1200: 0x10202008,\n\t 0x1300: 0x2008,\n\t 0x1400: 0x200000,\n\t 0x1500: 0x10000000,\n\t 0x1600: 0x10000008,\n\t 0x1700: 0x202000,\n\t 0x1800: 0x202008,\n\t 0x1900: 0x0,\n\t 0x1a00: 0x8,\n\t 0x1b00: 0x10200000,\n\t 0x1c00: 0x2000,\n\t 0x1d00: 0x10002008,\n\t 0x1e00: 0x10202000,\n\t 0x1f00: 0x200008,\n\t 0x1080: 0x8,\n\t 0x1180: 0x202000,\n\t 0x1280: 0x200000,\n\t 0x1380: 0x10000008,\n\t 0x1480: 0x10002000,\n\t 0x1580: 0x2008,\n\t 0x1680: 0x10202008,\n\t 0x1780: 0x10200000,\n\t 0x1880: 0x10202000,\n\t 0x1980: 0x10200008,\n\t 0x1a80: 0x2000,\n\t 0x1b80: 0x202008,\n\t 0x1c80: 0x200008,\n\t 0x1d80: 0x0,\n\t 0x1e80: 0x10000000,\n\t 0x1f80: 0x10002008\n\t },\n\t {\n\t 0x0: 0x100000,\n\t 0x10: 0x2000401,\n\t 0x20: 0x400,\n\t 0x30: 0x100401,\n\t 0x40: 0x2100401,\n\t 0x50: 0x0,\n\t 0x60: 0x1,\n\t 0x70: 0x2100001,\n\t 0x80: 0x2000400,\n\t 0x90: 0x100001,\n\t 0xa0: 0x2000001,\n\t 0xb0: 0x2100400,\n\t 0xc0: 0x2100000,\n\t 0xd0: 0x401,\n\t 0xe0: 0x100400,\n\t 0xf0: 0x2000000,\n\t 0x8: 0x2100001,\n\t 0x18: 0x0,\n\t 0x28: 0x2000401,\n\t 0x38: 0x2100400,\n\t 0x48: 0x100000,\n\t 0x58: 0x2000001,\n\t 0x68: 0x2000000,\n\t 0x78: 0x401,\n\t 0x88: 0x100401,\n\t 0x98: 0x2000400,\n\t 0xa8: 0x2100000,\n\t 0xb8: 0x100001,\n\t 0xc8: 0x400,\n\t 0xd8: 0x2100401,\n\t 0xe8: 0x1,\n\t 0xf8: 0x100400,\n\t 0x100: 0x2000000,\n\t 0x110: 0x100000,\n\t 0x120: 0x2000401,\n\t 0x130: 0x2100001,\n\t 0x140: 0x100001,\n\t 0x150: 0x2000400,\n\t 0x160: 0x2100400,\n\t 0x170: 0x100401,\n\t 0x180: 0x401,\n\t 0x190: 0x2100401,\n\t 0x1a0: 0x100400,\n\t 0x1b0: 0x1,\n\t 0x1c0: 0x0,\n\t 0x1d0: 0x2100000,\n\t 0x1e0: 0x2000001,\n\t 0x1f0: 0x400,\n\t 0x108: 0x100400,\n\t 0x118: 0x2000401,\n\t 0x128: 0x2100001,\n\t 0x138: 0x1,\n\t 0x148: 0x2000000,\n\t 0x158: 0x100000,\n\t 0x168: 0x401,\n\t 0x178: 0x2100400,\n\t 0x188: 0x2000001,\n\t 0x198: 0x2100000,\n\t 0x1a8: 0x0,\n\t 0x1b8: 0x2100401,\n\t 0x1c8: 0x100401,\n\t 0x1d8: 0x400,\n\t 0x1e8: 0x2000400,\n\t 0x1f8: 0x100001\n\t },\n\t {\n\t 0x0: 0x8000820,\n\t 0x1: 0x20000,\n\t 0x2: 0x8000000,\n\t 0x3: 0x20,\n\t 0x4: 0x20020,\n\t 0x5: 0x8020820,\n\t 0x6: 0x8020800,\n\t 0x7: 0x800,\n\t 0x8: 0x8020000,\n\t 0x9: 0x8000800,\n\t 0xa: 0x20800,\n\t 0xb: 0x8020020,\n\t 0xc: 0x820,\n\t 0xd: 0x0,\n\t 0xe: 0x8000020,\n\t 0xf: 0x20820,\n\t 0x80000000: 0x800,\n\t 0x80000001: 0x8020820,\n\t 0x80000002: 0x8000820,\n\t 0x80000003: 0x8000000,\n\t 0x80000004: 0x8020000,\n\t 0x80000005: 0x20800,\n\t 0x80000006: 0x20820,\n\t 0x80000007: 0x20,\n\t 0x80000008: 0x8000020,\n\t 0x80000009: 0x820,\n\t 0x8000000a: 0x20020,\n\t 0x8000000b: 0x8020800,\n\t 0x8000000c: 0x0,\n\t 0x8000000d: 0x8020020,\n\t 0x8000000e: 0x8000800,\n\t 0x8000000f: 0x20000,\n\t 0x10: 0x20820,\n\t 0x11: 0x8020800,\n\t 0x12: 0x20,\n\t 0x13: 0x800,\n\t 0x14: 0x8000800,\n\t 0x15: 0x8000020,\n\t 0x16: 0x8020020,\n\t 0x17: 0x20000,\n\t 0x18: 0x0,\n\t 0x19: 0x20020,\n\t 0x1a: 0x8020000,\n\t 0x1b: 0x8000820,\n\t 0x1c: 0x8020820,\n\t 0x1d: 0x20800,\n\t 0x1e: 0x820,\n\t 0x1f: 0x8000000,\n\t 0x80000010: 0x20000,\n\t 0x80000011: 0x800,\n\t 0x80000012: 0x8020020,\n\t 0x80000013: 0x20820,\n\t 0x80000014: 0x20,\n\t 0x80000015: 0x8020000,\n\t 0x80000016: 0x8000000,\n\t 0x80000017: 0x8000820,\n\t 0x80000018: 0x8020820,\n\t 0x80000019: 0x8000020,\n\t 0x8000001a: 0x8000800,\n\t 0x8000001b: 0x0,\n\t 0x8000001c: 0x20800,\n\t 0x8000001d: 0x820,\n\t 0x8000001e: 0x20020,\n\t 0x8000001f: 0x8020800\n\t }\n\t ];\n\n\t // Masks that select the SBOX input\n\t var SBOX_MASK = [\n\t 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000,\n\t 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f\n\t ];\n\n\t /**\n\t * DES block cipher algorithm.\n\t */\n\t var DES = C_algo.DES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\n\t // Select 56 bits according to PC1\n\t var keyBits = [];\n\t for (var i = 0; i < 56; i++) {\n\t var keyBitPos = PC1[i] - 1;\n\t keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1;\n\t }\n\n\t // Assemble 16 subkeys\n\t var subKeys = this._subKeys = [];\n\t for (var nSubKey = 0; nSubKey < 16; nSubKey++) {\n\t // Create subkey\n\t var subKey = subKeys[nSubKey] = [];\n\n\t // Shortcut\n\t var bitShift = BIT_SHIFTS[nSubKey];\n\n\t // Select 48 bits according to PC2\n\t for (var i = 0; i < 24; i++) {\n\t // Select from the left 28 key bits\n\t subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6);\n\n\t // Select from the right 28 key bits\n\t subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6);\n\t }\n\n\t // Since each subkey is applied to an expanded 32-bit input,\n\t // the subkey can be broken into 8 values scaled to 32-bits,\n\t // which allows the key to be used without expansion\n\t subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31);\n\t for (var i = 1; i < 7; i++) {\n\t subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3);\n\t }\n\t subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27);\n\t }\n\n\t // Compute inverse subkeys\n\t var invSubKeys = this._invSubKeys = [];\n\t for (var i = 0; i < 16; i++) {\n\t invSubKeys[i] = subKeys[15 - i];\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._subKeys);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._invSubKeys);\n\t },\n\n\t _doCryptBlock: function (M, offset, subKeys) {\n\t // Get input\n\t this._lBlock = M[offset];\n\t this._rBlock = M[offset + 1];\n\n\t // Initial permutation\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeLR.call(this, 1, 0x55555555);\n\n\t // Rounds\n\t for (var round = 0; round < 16; round++) {\n\t // Shortcuts\n\t var subKey = subKeys[round];\n\t var lBlock = this._lBlock;\n\t var rBlock = this._rBlock;\n\n\t // Feistel function\n\t var f = 0;\n\t for (var i = 0; i < 8; i++) {\n\t f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];\n\t }\n\t this._lBlock = rBlock;\n\t this._rBlock = lBlock ^ f;\n\t }\n\n\t // Undo swap from last round\n\t var t = this._lBlock;\n\t this._lBlock = this._rBlock;\n\t this._rBlock = t;\n\n\t // Final permutation\n\t exchangeLR.call(this, 1, 0x55555555);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\n\t // Set output\n\t M[offset] = this._lBlock;\n\t M[offset + 1] = this._rBlock;\n\t },\n\n\t keySize: 64/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t // Swap bits across the left and right words\n\t function exchangeLR(offset, mask) {\n\t var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask;\n\t this._rBlock ^= t;\n\t this._lBlock ^= t << offset;\n\t }\n\n\t function exchangeRL(offset, mask) {\n\t var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask;\n\t this._lBlock ^= t;\n\t this._rBlock ^= t << offset;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.DES = BlockCipher._createHelper(DES);\n\n\t /**\n\t * Triple-DES block cipher algorithm.\n\t */\n\t var TripleDES = C_algo.TripleDES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t // Make sure the key length is valid (64, 128 or >= 192 bit)\n\t if (keyWords.length !== 2 && keyWords.length !== 4 && keyWords.length < 6) {\n\t throw new Error('Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.');\n\t }\n\n\t // Extend the key according to the keying options defined in 3DES standard\n\t var key1 = keyWords.slice(0, 2);\n\t var key2 = keyWords.length < 4 ? keyWords.slice(0, 2) : keyWords.slice(2, 4);\n\t var key3 = keyWords.length < 6 ? keyWords.slice(0, 2) : keyWords.slice(4, 6);\n\n\t // Create DES instances\n\t this._des1 = DES.createEncryptor(WordArray.create(key1));\n\t this._des2 = DES.createEncryptor(WordArray.create(key2));\n\t this._des3 = DES.createEncryptor(WordArray.create(key3));\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._des1.encryptBlock(M, offset);\n\t this._des2.decryptBlock(M, offset);\n\t this._des3.encryptBlock(M, offset);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._des3.decryptBlock(M, offset);\n\t this._des2.encryptBlock(M, offset);\n\t this._des1.decryptBlock(M, offset);\n\t },\n\n\t keySize: 192/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.TripleDES = BlockCipher._createHelper(TripleDES);\n\t}());\n\n\n\treturn CryptoJS.TripleDES;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t /**\n\t * RC4 stream cipher algorithm.\n\t */\n\t var RC4 = C_algo.RC4 = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t var keySigBytes = key.sigBytes;\n\n\t // Init sbox\n\t var S = this._S = [];\n\t for (var i = 0; i < 256; i++) {\n\t S[i] = i;\n\t }\n\n\t // Key setup\n\t for (var i = 0, j = 0; i < 256; i++) {\n\t var keyByteIndex = i % keySigBytes;\n\t var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff;\n\n\t j = (j + S[i] + keyByte) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\t }\n\n\t // Counters\n\t this._i = this._j = 0;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t M[offset] ^= generateKeystreamWord.call(this);\n\t },\n\n\t keySize: 256/32,\n\n\t ivSize: 0\n\t });\n\n\t function generateKeystreamWord() {\n\t // Shortcuts\n\t var S = this._S;\n\t var i = this._i;\n\t var j = this._j;\n\n\t // Generate keystream word\n\t var keystreamWord = 0;\n\t for (var n = 0; n < 4; n++) {\n\t i = (i + 1) % 256;\n\t j = (j + S[i]) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\n\t keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8);\n\t }\n\n\t // Update counters\n\t this._i = i;\n\t this._j = j;\n\n\t return keystreamWord;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4 = StreamCipher._createHelper(RC4);\n\n\t /**\n\t * Modified RC4 stream cipher algorithm.\n\t */\n\t var RC4Drop = C_algo.RC4Drop = RC4.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} drop The number of keystream words to drop. Default 192\n\t */\n\t cfg: RC4.cfg.extend({\n\t drop: 192\n\t }),\n\n\t _doReset: function () {\n\t RC4._doReset.call(this);\n\n\t // Drop\n\t for (var i = this.cfg.drop; i > 0; i--) {\n\t generateKeystreamWord.call(this);\n\t }\n\t }\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4Drop = StreamCipher._createHelper(RC4Drop);\n\t}());\n\n\n\treturn CryptoJS.RC4;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t // Reusable objects\n\t var S = [];\n\t var C_ = [];\n\t var G = [];\n\n\t /**\n\t * Rabbit stream cipher algorithm\n\t */\n\t var Rabbit = C_algo.Rabbit = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var K = this._key.words;\n\t var iv = this.cfg.iv;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) |\n\t (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Generate initial state values\n\t var X = this._X = [\n\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);\n\t */\n\t C.Rabbit = StreamCipher._createHelper(Rabbit);\n\t}());\n\n\n\treturn CryptoJS.Rabbit;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t // Reusable objects\n\t var S = [];\n\t var C_ = [];\n\t var G = [];\n\n\t /**\n\t * Rabbit stream cipher algorithm.\n\t *\n\t * This is a legacy version that neglected to convert the key to little-endian.\n\t * This error doesn't affect the cipher's security,\n\t * but it does affect its compatibility with other implementations.\n\t */\n\t var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var K = this._key.words;\n\t var iv = this.cfg.iv;\n\n\t // Generate initial state values\n\t var X = this._X = [\n\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy);\n\t}());\n\n\n\treturn CryptoJS.RabbitLegacy;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t const N = 16;\n\n\t //Origin pbox and sbox, derived from PI\n\t const ORIG_P = [\n\t 0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344,\n\t 0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89,\n\t 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C,\n\t 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917,\n\t 0x9216D5D9, 0x8979FB1B\n\t ];\n\n\t const ORIG_S = [\n\t [ 0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7,\n\t 0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99,\n\t 0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16,\n\t 0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E,\n\t 0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE,\n\t 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013,\n\t 0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF,\n\t 0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E,\n\t 0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60,\n\t 0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440,\n\t 0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE,\n\t 0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A,\n\t 0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E,\n\t 0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677,\n\t 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193,\n\t 0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032,\n\t 0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88,\n\t 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239,\n\t 0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E,\n\t 0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0,\n\t 0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3,\n\t 0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98,\n\t 0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88,\n\t 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE,\n\t 0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6,\n\t 0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D,\n\t 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B,\n\t 0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7,\n\t 0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA,\n\t 0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463,\n\t 0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F,\n\t 0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09,\n\t 0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3,\n\t 0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB,\n\t 0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279,\n\t 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8,\n\t 0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB,\n\t 0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82,\n\t 0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB,\n\t 0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573,\n\t 0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0,\n\t 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B,\n\t 0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790,\n\t 0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8,\n\t 0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4,\n\t 0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0,\n\t 0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7,\n\t 0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C,\n\t 0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD,\n\t 0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1,\n\t 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299,\n\t 0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9,\n\t 0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477,\n\t 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF,\n\t 0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49,\n\t 0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF,\n\t 0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA,\n\t 0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5,\n\t 0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41,\n\t 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915,\n\t 0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400,\n\t 0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915,\n\t 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664,\n\t 0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A ],\n\t [ 0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623,\n\t 0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266,\n\t 0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1,\n\t 0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E,\n\t 0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6,\n\t 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1,\n\t 0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E,\n\t 0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1,\n\t 0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737,\n\t 0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8,\n\t 0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF,\n\t 0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD,\n\t 0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701,\n\t 0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7,\n\t 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41,\n\t 0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331,\n\t 0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF,\n\t 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF,\n\t 0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E,\n\t 0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87,\n\t 0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C,\n\t 0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2,\n\t 0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16,\n\t 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD,\n\t 0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B,\n\t 0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509,\n\t 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E,\n\t 0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3,\n\t 0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F,\n\t 0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A,\n\t 0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4,\n\t 0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960,\n\t 0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66,\n\t 0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28,\n\t 0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802,\n\t 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84,\n\t 0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510,\n\t 0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF,\n\t 0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14,\n\t 0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E,\n\t 0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50,\n\t 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7,\n\t 0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8,\n\t 0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281,\n\t 0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99,\n\t 0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696,\n\t 0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128,\n\t 0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73,\n\t 0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0,\n\t 0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0,\n\t 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105,\n\t 0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250,\n\t 0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3,\n\t 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285,\n\t 0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00,\n\t 0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061,\n\t 0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB,\n\t 0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E,\n\t 0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735,\n\t 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC,\n\t 0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9,\n\t 0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340,\n\t 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20,\n\t 0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7 ],\n\t [ 0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934,\n\t 0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068,\n\t 0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF,\n\t 0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840,\n\t 0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45,\n\t 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504,\n\t 0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A,\n\t 0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB,\n\t 0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE,\n\t 0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6,\n\t 0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42,\n\t 0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B,\n\t 0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2,\n\t 0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB,\n\t 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527,\n\t 0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B,\n\t 0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33,\n\t 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C,\n\t 0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3,\n\t 0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC,\n\t 0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17,\n\t 0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564,\n\t 0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B,\n\t 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115,\n\t 0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922,\n\t 0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728,\n\t 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0,\n\t 0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E,\n\t 0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37,\n\t 0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D,\n\t 0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804,\n\t 0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B,\n\t 0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3,\n\t 0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB,\n\t 0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D,\n\t 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C,\n\t 0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350,\n\t 0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9,\n\t 0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A,\n\t 0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE,\n\t 0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D,\n\t 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC,\n\t 0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F,\n\t 0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61,\n\t 0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2,\n\t 0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9,\n\t 0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2,\n\t 0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C,\n\t 0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E,\n\t 0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633,\n\t 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10,\n\t 0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169,\n\t 0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52,\n\t 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027,\n\t 0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5,\n\t 0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62,\n\t 0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634,\n\t 0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76,\n\t 0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24,\n\t 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC,\n\t 0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4,\n\t 0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C,\n\t 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837,\n\t 0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0 ],\n\t [ 0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B,\n\t 0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE,\n\t 0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B,\n\t 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4,\n\t 0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8,\n\t 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6,\n\t 0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304,\n\t 0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22,\n\t 0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4,\n\t 0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6,\n\t 0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9,\n\t 0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59,\n\t 0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593,\n\t 0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51,\n\t 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28,\n\t 0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C,\n\t 0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B,\n\t 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28,\n\t 0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C,\n\t 0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD,\n\t 0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A,\n\t 0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319,\n\t 0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB,\n\t 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F,\n\t 0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991,\n\t 0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32,\n\t 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680,\n\t 0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166,\n\t 0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE,\n\t 0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB,\n\t 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5,\n\t 0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47,\n\t 0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370,\n\t 0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D,\n\t 0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84,\n\t 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048,\n\t 0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8,\n\t 0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD,\n\t 0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9,\n\t 0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7,\n\t 0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38,\n\t 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F,\n\t 0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C,\n\t 0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525,\n\t 0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1,\n\t 0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442,\n\t 0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964,\n\t 0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E,\n\t 0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8,\n\t 0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D,\n\t 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F,\n\t 0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299,\n\t 0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02,\n\t 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC,\n\t 0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614,\n\t 0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A,\n\t 0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6,\n\t 0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B,\n\t 0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0,\n\t 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060,\n\t 0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E,\n\t 0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9,\n\t 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F,\n\t 0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6 ]\n\t ];\n\n\t var BLOWFISH_CTX = {\n\t pbox: [],\n\t sbox: []\n\t }\n\n\t function F(ctx, x){\n\t let a = (x >> 24) & 0xFF;\n\t let b = (x >> 16) & 0xFF;\n\t let c = (x >> 8) & 0xFF;\n\t let d = x & 0xFF;\n\n\t let y = ctx.sbox[0][a] + ctx.sbox[1][b];\n\t y = y ^ ctx.sbox[2][c];\n\t y = y + ctx.sbox[3][d];\n\n\t return y;\n\t }\n\n\t function BlowFish_Encrypt(ctx, left, right){\n\t let Xl = left;\n\t let Xr = right;\n\t let temp;\n\n\t for(let i = 0; i < N; ++i){\n\t Xl = Xl ^ ctx.pbox[i];\n\t Xr = F(ctx, Xl) ^ Xr;\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\t }\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\n\t Xr = Xr ^ ctx.pbox[N];\n\t Xl = Xl ^ ctx.pbox[N + 1];\n\n\t return {left: Xl, right: Xr};\n\t }\n\n\t function BlowFish_Decrypt(ctx, left, right){\n\t let Xl = left;\n\t let Xr = right;\n\t let temp;\n\n\t for(let i = N + 1; i > 1; --i){\n\t Xl = Xl ^ ctx.pbox[i];\n\t Xr = F(ctx, Xl) ^ Xr;\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\t }\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\n\t Xr = Xr ^ ctx.pbox[1];\n\t Xl = Xl ^ ctx.pbox[0];\n\n\t return {left: Xl, right: Xr};\n\t }\n\n\t /**\n\t * Initialization ctx's pbox and sbox.\n\t *\n\t * @param {Object} ctx The object has pbox and sbox.\n\t * @param {Array} key An array of 32-bit words.\n\t * @param {int} keysize The length of the key.\n\t *\n\t * @example\n\t *\n\t * BlowFishInit(BLOWFISH_CTX, key, 128/32);\n\t */\n\t function BlowFishInit(ctx, key, keysize)\n\t {\n\t for(let Row = 0; Row < 4; Row++)\n\t {\n\t ctx.sbox[Row] = [];\n\t for(let Col = 0; Col < 256; Col++)\n\t {\n\t ctx.sbox[Row][Col] = ORIG_S[Row][Col];\n\t }\n\t }\n\n\t let keyIndex = 0;\n\t for(let index = 0; index < N + 2; index++)\n\t {\n\t ctx.pbox[index] = ORIG_P[index] ^ key[keyIndex];\n\t keyIndex++;\n\t if(keyIndex >= keysize)\n\t {\n\t keyIndex = 0;\n\t }\n\t }\n\n\t let Data1 = 0;\n\t let Data2 = 0;\n\t let res = 0;\n\t for(let i = 0; i < N + 2; i += 2)\n\t {\n\t res = BlowFish_Encrypt(ctx, Data1, Data2);\n\t Data1 = res.left;\n\t Data2 = res.right;\n\t ctx.pbox[i] = Data1;\n\t ctx.pbox[i + 1] = Data2;\n\t }\n\n\t for(let i = 0; i < 4; i++)\n\t {\n\t for(let j = 0; j < 256; j += 2)\n\t {\n\t res = BlowFish_Encrypt(ctx, Data1, Data2);\n\t Data1 = res.left;\n\t Data2 = res.right;\n\t ctx.sbox[i][j] = Data1;\n\t ctx.sbox[i][j + 1] = Data2;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t /**\n\t * Blowfish block cipher algorithm.\n\t */\n\t var Blowfish = C_algo.Blowfish = BlockCipher.extend({\n\t _doReset: function () {\n\t // Skip reset of nRounds has been set before and key did not change\n\t if (this._keyPriorReset === this._key) {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var key = this._keyPriorReset = this._key;\n\t var keyWords = key.words;\n\t var keySize = key.sigBytes / 4;\n\n\t //Initialization pbox and sbox\n\t BlowFishInit(BLOWFISH_CTX, keyWords, keySize);\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t var res = BlowFish_Encrypt(BLOWFISH_CTX, M[offset], M[offset + 1]);\n\t M[offset] = res.left;\n\t M[offset + 1] = res.right;\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t var res = BlowFish_Decrypt(BLOWFISH_CTX, M[offset], M[offset + 1]);\n\t M[offset] = res.left;\n\t M[offset + 1] = res.right;\n\t },\n\n\t blockSize: 64/32,\n\n\t keySize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.Blowfish.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.Blowfish.decrypt(ciphertext, key, cfg);\n\t */\n\t C.Blowfish = BlockCipher._createHelper(Blowfish);\n\t}());\n\n\n\treturn CryptoJS.Blowfish;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"), require(\"./lib-typedarrays\"), require(\"./enc-utf16\"), require(\"./enc-base64\"), require(\"./enc-base64url\"), require(\"./md5\"), require(\"./sha1\"), require(\"./sha256\"), require(\"./sha224\"), require(\"./sha512\"), require(\"./sha384\"), require(\"./sha3\"), require(\"./ripemd160\"), require(\"./hmac\"), require(\"./pbkdf2\"), require(\"./evpkdf\"), require(\"./cipher-core\"), require(\"./mode-cfb\"), require(\"./mode-ctr\"), require(\"./mode-ctr-gladman\"), require(\"./mode-ofb\"), require(\"./mode-ecb\"), require(\"./pad-ansix923\"), require(\"./pad-iso10126\"), require(\"./pad-iso97971\"), require(\"./pad-zeropadding\"), require(\"./pad-nopadding\"), require(\"./format-hex\"), require(\"./aes\"), require(\"./tripledes\"), require(\"./rc4\"), require(\"./rabbit\"), require(\"./rabbit-legacy\"), require(\"./blowfish\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\", \"./lib-typedarrays\", \"./enc-utf16\", \"./enc-base64\", \"./enc-base64url\", \"./md5\", \"./sha1\", \"./sha256\", \"./sha224\", \"./sha512\", \"./sha384\", \"./sha3\", \"./ripemd160\", \"./hmac\", \"./pbkdf2\", \"./evpkdf\", \"./cipher-core\", \"./mode-cfb\", \"./mode-ctr\", \"./mode-ctr-gladman\", \"./mode-ofb\", \"./mode-ecb\", \"./pad-ansix923\", \"./pad-iso10126\", \"./pad-iso97971\", \"./pad-zeropadding\", \"./pad-nopadding\", \"./format-hex\", \"./aes\", \"./tripledes\", \"./rc4\", \"./rabbit\", \"./rabbit-legacy\", \"./blowfish\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\treturn CryptoJS;\n\n}));","/**\n * Debug Logger pour @ollaid/native-sso\n * Stocke l'historique des appels API en mémoire pour le DebugPanel\n * @version 2.7.0\n */\n\nexport interface ApiCallLog {\n id: string;\n timestamp: string;\n method: 'GET' | 'POST' | 'PUT' | 'DELETE';\n endpoint: string;\n requestBody: unknown;\n requestHeaders?: Record<string, string>;\n responseStatus: number | null;\n responseBody: unknown;\n duration: number;\n error?: string;\n}\n\nconst MAX_LOGS = 50;\nlet apiLogs: ApiCallLog[] = [];\nlet listeners: ((logs: ApiCallLog[]) => void)[] = [];\n\nconst REDACTED = '[redacted]';\n\nfunction isSensitiveKey(key: string): boolean {\n const normalized = key.toLowerCase();\n return (\n normalized.includes('token') ||\n normalized.includes('password') ||\n normalized.includes('secret') ||\n normalized.includes('authorization') ||\n normalized.includes('otp') ||\n normalized.includes('code') ||\n normalized.includes('cookie') ||\n normalized.includes('credential') ||\n normalized.includes('app_access') ||\n normalized.includes('sanctum')\n );\n}\n\nfunction sanitizeValue(value: unknown, keyHint = ''): unknown {\n if (value === null || value === undefined) return value;\n if (typeof value === 'string') {\n if (keyHint && isSensitiveKey(keyHint)) return REDACTED;\n if (/^Bearer\\s+/i.test(value)) return REDACTED;\n if (/^[0-9]+\\|[A-Za-z0-9]/.test(value)) return REDACTED;\n return value;\n }\n if (typeof value !== 'object') return value;\n if (Array.isArray(value)) return value.map(item => sanitizeValue(item));\n\n const input = value as Record<string, unknown>;\n const output: Record<string, unknown> = {};\n for (const [key, child] of Object.entries(input)) {\n output[key] = isSensitiveKey(key) ? REDACTED : sanitizeValue(child, key);\n }\n return output;\n}\n\nfunction notifyListeners() {\n listeners.forEach(fn => fn([...apiLogs]));\n}\n\nexport function logApiCall(\n method: ApiCallLog['method'],\n endpoint: string,\n requestBody: unknown,\n requestHeaders?: Record<string, string>\n): string {\n const id = `${Date.now()}-${Math.random().toString(36).substring(2, 7)}`;\n const log: ApiCallLog = {\n id,\n timestamp: new Date().toISOString(),\n method,\n endpoint,\n requestBody: sanitizeValue(requestBody),\n requestHeaders: requestHeaders ? (sanitizeValue(requestHeaders) as Record<string, string>) : undefined,\n responseStatus: null,\n responseBody: null,\n duration: 0,\n };\n\n apiLogs.unshift(log);\n if (apiLogs.length > MAX_LOGS) {\n apiLogs = apiLogs.slice(0, MAX_LOGS);\n }\n notifyListeners();\n return id;\n}\n\nexport function logApiResponse(\n logId: string,\n responseStatus: number,\n responseBody: unknown,\n startTime: number,\n error?: string\n): void {\n const log = apiLogs.find(l => l.id === logId);\n if (log) {\n log.responseStatus = responseStatus;\n log.responseBody = sanitizeValue(responseBody);\n log.duration = Date.now() - startTime;\n log.error = error;\n notifyListeners();\n }\n}\n\nexport function getApiLogs(): ApiCallLog[] {\n return [...apiLogs];\n}\n\nexport function clearApiLogs(): void {\n apiLogs = [];\n notifyListeners();\n}\n\nexport function subscribeToLogs(callback: (logs: ApiCallLog[]) => void): () => void {\n listeners.push(callback);\n return () => {\n listeners = listeners.filter(fn => fn !== callback);\n };\n}\n\nexport function exportLogsAsText(): string {\n if (apiLogs.length === 0) return 'Aucun appel API enregistré.';\n\n const lines: string[] = [\n '='.repeat(60),\n 'NATIVE SSO DEBUG LOGS',\n `Exporté le: ${new Date().toISOString()}`,\n '='.repeat(60),\n '',\n ];\n\n apiLogs.slice().reverse().forEach((log, index) => {\n const emoji = log.responseStatus === null ? '⏳' : (log.responseStatus >= 200 && log.responseStatus < 300 ? '✅' : '❌');\n lines.push(`[${index + 1}] ${emoji} ${log.method} ${log.endpoint}`);\n lines.push(` Status: ${log.responseStatus ?? 'En cours...'} | Durée: ${log.duration}ms`);\n if (log.requestBody) lines.push(` Request: ${JSON.stringify(log.requestBody)}`);\n if (log.responseBody) lines.push(` Response: ${JSON.stringify(log.responseBody)}`);\n if (log.error) lines.push(` ⚠️ Error: ${log.error}`);\n lines.push('');\n });\n\n return lines.join('\\n');\n}\n","/**\n * Client API pour @ollaid/native-sso\n * Gestion des requêtes HTTP avec timeout, device ID, token storage\n *\n * @version 2.7.0\n */\n\nimport * as CryptoJS from 'crypto-js';\nimport { logApiCall, logApiResponse } from './debugLogger';\n\n// ============================================\n// Types d'erreur\n// ============================================\n\nexport type ApiErrorType = 'network' | 'timeout' | 'server' | 'validation' | 'auth' | 'unknown';\n\nexport class ApiError extends Error {\n type: ApiErrorType;\n statusCode?: number;\n errorType?: string;\n response?: unknown;\n\n constructor(\n message: string,\n type: ApiErrorType,\n statusCode?: number,\n errorType?: string,\n response?: unknown\n ) {\n super(message);\n this.name = 'ApiError';\n this.type = type;\n this.statusCode = statusCode;\n this.errorType = errorType;\n this.response = response;\n }\n}\n\n// ============================================\n// Configuration\n// ============================================\n\nexport interface NativeAuthConfig {\n /** URL du Backend SaaS (pour config et exchange) */\n saasApiUrl: string;\n /** URL du Backend IAM (pour encrypt, init, validate, etc.) */\n iamApiUrl: string;\n /** Timeout en ms (défaut: 30000) */\n timeout?: number;\n /** Mode debug (logs console) */\n debug?: boolean;\n /** \n * Préfixe de configuration IAM côté backend (défaut: 'iam').\n * Permet le multi-tenant : chaque frontend envoie son préfixe\n * pour que le backend SaaS lise le bon bloc config/services.php.\n * Ex: 'iam', 'iam_vendor', 'iam_client', 'iam_admin'\n */\n configPrefix?: string;\n /**\n * Stockage session injectable.\n * Défaut: localStorage en navigateur, mémoire en fallback.\n * Utile pour Capacitor ou des wrappers secure-storage côté app consommatrice.\n */\n storage?: NativeStorageAdapter;\n}\n\nlet config: NativeAuthConfig = {\n saasApiUrl: '',\n iamApiUrl: '',\n timeout: 30000,\n debug: false,\n configPrefix: 'iam',\n};\n\nexport interface NativeStorageAdapter {\n getItem(key: string): string | null;\n setItem(key: string, value: string): void;\n removeItem(key: string): void;\n clear(): void;\n}\n\nconst memoryStorage = (): NativeStorageAdapter => {\n const state = new Map<string, string>();\n return {\n getItem: (key) => (state.has(key) ? state.get(key)! : null),\n setItem: (key, value) => {\n state.set(key, value);\n },\n removeItem: (key) => {\n state.delete(key);\n },\n clear: () => {\n state.clear();\n },\n };\n};\n\nconst STORAGE_ENCRYPTION_PREFIX = 'enc:v1:';\nconst STORAGE_ENCRYPTION_SECRET_PREFIX = 'ollaid-native-sso::storage::v1';\n\nconst RAW_STORAGE_KEYS = new Set<string>([\n 'sso_storage_seed',\n]);\n\nconst STORAGE_PREFIX = 'sso_';\n\nconst LEGACY_STORAGE_KEYS: Record<string, string> = {\n sso_auth_token: 'auth_token',\n sso_token: 'token',\n sso_user: 'user',\n sso_account_type: 'account_type',\n sso_alias_reference: 'alias_reference',\n sso_app_access_token_ref: 'app_access_token_ref',\n sso_refresh_token: 'refresh_token',\n sso_token_expires_at: 'token_expires_at',\n sso_refresh_expires_at: 'refresh_expires_at',\n sso_device_id: 'native_sso_device_id',\n sso_session_uuid: 'native_sso_session_uuid',\n sso_image_last_status: 'sso_image_last_status',\n sso_image_last_check: 'sso_image_last_check',\n sso_image_recheck_at: 'sso_image_recheck_at',\n};\n\nfunction resolveBaseStorage(): NativeStorageAdapter {\n if (typeof localStorage !== 'undefined') {\n return {\n getItem: (key) => localStorage.getItem(key),\n setItem: (key, value) => localStorage.setItem(key, value),\n removeItem: (key) => localStorage.removeItem(key),\n clear: () => localStorage.clear(),\n };\n }\n return memoryStorage();\n}\n\nlet rawStorageAdapter: NativeStorageAdapter = resolveBaseStorage();\nlet storageAdapter: NativeStorageAdapter = createEncryptedStorageAdapter(rawStorageAdapter);\n\nfunction isRawStorageKey(key: string): boolean {\n return RAW_STORAGE_KEYS.has(key);\n}\n\nfunction getLegacyStorageKey(key: string): string | null {\n return LEGACY_STORAGE_KEYS[key] || null;\n}\n\nfunction migrateLegacyValue(base: NativeStorageAdapter, key: string, legacyKey: string, rawValue: string): string {\n base.setItem(key, encryptStorageValue(rawValue));\n base.removeItem(legacyKey);\n return rawValue;\n}\n\nfunction getStorageEncryptionSecret(): string {\n const storage = rawStorageAdapter;\n let seed = storage.getItem('native_sso_storage_seed');\n\n if (!seed) {\n seed = `seed_${Date.now()}_${Math.random().toString(36).substring(2, 15)}_${Math.random().toString(36).substring(2, 15)}`;\n storage.setItem('native_sso_storage_seed', seed);\n }\n\n const origin = typeof window !== 'undefined' && window.location?.origin\n ? window.location.origin\n : 'unknown-origin';\n const prefix = config.configPrefix || 'iam';\n\n return `${STORAGE_ENCRYPTION_SECRET_PREFIX}::${origin}::${prefix}::${seed}`;\n}\n\nfunction encryptStorageValue(value: string): string {\n const secret = getStorageEncryptionSecret();\n const ciphertext = CryptoJS.AES.encrypt(value, secret).toString();\n return `${STORAGE_ENCRYPTION_PREFIX}${ciphertext}`;\n}\n\nfunction decryptStorageValue(value: string): string | null {\n if (!value.startsWith(STORAGE_ENCRYPTION_PREFIX)) {\n return value;\n }\n\n const secret = getStorageEncryptionSecret();\n const ciphertext = value.slice(STORAGE_ENCRYPTION_PREFIX.length);\n\n try {\n const bytes = CryptoJS.AES.decrypt(ciphertext, secret);\n const plaintext = bytes.toString(CryptoJS.enc.Utf8);\n return plaintext || null;\n } catch {\n return null;\n }\n}\n\nfunction createEncryptedStorageAdapter(base: NativeStorageAdapter): NativeStorageAdapter {\n return {\n getItem: (key) => {\n const rawValue = base.getItem(key);\n if (rawValue !== null) {\n if (isRawStorageKey(key)) {\n return rawValue;\n }\n\n const decrypted = decryptStorageValue(rawValue);\n if (decrypted !== null) {\n return decrypted;\n }\n\n if (rawValue.length > 0) {\n base.setItem(key, encryptStorageValue(rawValue));\n }\n\n return rawValue;\n }\n\n const legacyKey = getLegacyStorageKey(key);\n if (!legacyKey) {\n return null;\n }\n\n const legacyValue = base.getItem(legacyKey);\n if (legacyValue === null) {\n return null;\n }\n\n if (isRawStorageKey(key)) {\n base.setItem(key, legacyValue);\n base.removeItem(legacyKey);\n return legacyValue;\n }\n\n return migrateLegacyValue(base, key, legacyKey, legacyValue);\n },\n setItem: (key, value) => {\n if (isRawStorageKey(key)) {\n base.setItem(key, value);\n return;\n }\n\n base.setItem(key, encryptStorageValue(value));\n const legacyKey = getLegacyStorageKey(key);\n if (legacyKey) {\n base.removeItem(legacyKey);\n }\n },\n removeItem: (key) => {\n base.removeItem(key);\n const legacyKey = getLegacyStorageKey(key);\n if (legacyKey) {\n base.removeItem(legacyKey);\n }\n },\n clear: () => {\n base.clear();\n },\n };\n}\n\nexport function setNativeStorage(adapter?: NativeStorageAdapter): void {\n rawStorageAdapter = adapter ?? resolveBaseStorage();\n storageAdapter = createEncryptedStorageAdapter(rawStorageAdapter);\n}\n\nexport function getNativeStorage(): NativeStorageAdapter {\n return storageAdapter;\n}\n\nexport const setNativeAuthConfig = (newConfig: Partial<NativeAuthConfig>): void => {\n config = { ...config, ...newConfig };\n if (newConfig.storage) {\n setNativeStorage(newConfig.storage);\n } else if (!config.storage) {\n setNativeStorage();\n }\n \n if (config.debug) {\n console.log('🔐 @ollaid/native-sso Config:', {\n saasApiUrl: config.saasApiUrl,\n iamApiUrl: config.iamApiUrl,\n });\n }\n};\n\nexport const getNativeAuthConfig = (): NativeAuthConfig => ({ ...config });\n\nexport const isDebugMode = (): boolean => config.debug === true;\n\nexport const getSaasApiBaseUrl = (): string => {\n if (!config.saasApiUrl) {\n throw new ApiError('saasApiUrl non configurée', 'unknown');\n }\n return config.saasApiUrl;\n};\n\nexport const getIamApiBaseUrl = (): string => {\n if (!config.iamApiUrl) {\n throw new ApiError('iamApiUrl non configurée', 'unknown');\n }\n return config.iamApiUrl;\n};\n\n// ============================================\n// Device ID\n// ============================================\n\nconst DEVICE_ID_KEY = 'sso_device_id';\nconst SESSION_UUID_KEY = 'sso_session_uuid';\n\nfunction generateUuid(): string {\n // Prefer native UUID when available (modern browsers / webviews).\n // Fallback is not cryptographically strong, but good enough as a stable instance id.\n const globalCrypto = typeof globalThis !== 'undefined' ? globalThis.crypto : undefined;\n if (globalCrypto && typeof globalCrypto.randomUUID === 'function') {\n return globalCrypto.randomUUID();\n }\n return `uuid_${Date.now()}_${Math.random().toString(36).slice(2)}_${Math.random().toString(36).slice(2)}`;\n}\n\nexport const getDeviceId = (): string => {\n const storage = getNativeStorage();\n let deviceId = storage.getItem(DEVICE_ID_KEY);\n if (!deviceId) {\n deviceId = `nat_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;\n storage.setItem(DEVICE_ID_KEY, deviceId);\n }\n return deviceId;\n};\n\n/**\n * Stable session UUID (instance id) persisted in localStorage.\n *\n * This is NOT a security token. It is used to disambiguate sessions across devices/webviews\n * and to help backends implement multi-session behavior safely.\n */\nexport const getSessionUuid = (): string => {\n const storage = getNativeStorage();\n let uuid = storage.getItem(SESSION_UUID_KEY);\n if (!uuid) {\n uuid = generateUuid();\n storage.setItem(SESSION_UUID_KEY, uuid);\n }\n return uuid;\n};\n\n// ============================================\n// Device context (Capacitor)\n// ============================================\n\nexport interface NativeDeviceContext {\n deviceName?: string | null;\n deviceModel?: string | null;\n deviceManufacturer?: string | null;\n operatingSystem?: string | null;\n osVersion?: string | null;\n platform?: string | null;\n browser?: string | null;\n language?: string | null;\n webviewVersion?: string | null;\n isNative?: boolean | null;\n label?: string | null;\n}\n\nlet deviceContext: NativeDeviceContext | null = null;\nlet deviceContextPromise: Promise<NativeDeviceContext | null> | null = null;\n\nfunction inferBrowserFromUserAgent(userAgent?: string | null): string | null {\n if (!userAgent) return null;\n if (userAgent.includes('Firefox')) return 'Firefox';\n if (userAgent.includes('Edg')) return 'Edge';\n if (userAgent.includes('Chrome')) return 'Chrome';\n if (userAgent.includes('Safari')) return 'Safari';\n if (userAgent.includes('Opera') || userAgent.includes('OPR')) return 'Opera';\n return null;\n}\n\nfunction buildDeviceLabel(context: NativeDeviceContext): string {\n const parts = [\n context.deviceName,\n context.deviceManufacturer,\n context.deviceModel,\n context.operatingSystem && context.osVersion\n ? `${context.operatingSystem} ${context.osVersion}`\n : context.operatingSystem,\n ].filter(Boolean) as string[];\n\n if (parts.length > 0) {\n return parts.join(' ');\n }\n\n if (context.browser || context.platform) {\n return `${context.browser || 'Appareil'} - ${context.platform || 'mobile'}`;\n }\n\n return 'Appareil mobile';\n}\n\nasync function loadDeviceContext(): Promise<NativeDeviceContext | null> {\n if (typeof window === 'undefined') {\n return null;\n }\n\n try {\n const { Device } = await import('@capacitor/device');\n const info = await Device.getInfo();\n const languageResult = await Device.getLanguageCode().catch(() => null) as { value?: string } | null;\n const userAgent = typeof navigator !== 'undefined' ? navigator.userAgent : null;\n const context: NativeDeviceContext = {\n deviceName: info.name ?? null,\n deviceModel: info.model ?? null,\n deviceManufacturer: info.manufacturer ?? null,\n operatingSystem: info.operatingSystem ?? null,\n osVersion: info.osVersion ?? null,\n platform: info.platform ?? null,\n browser: inferBrowserFromUserAgent(userAgent),\n language: languageResult?.value ?? (typeof navigator !== 'undefined' ? navigator.language : null),\n webviewVersion: (info as { webViewVersion?: string }).webViewVersion ?? null,\n isNative: info.platform ? info.platform !== 'web' : null,\n label: '',\n };\n\n context.label = buildDeviceLabel(context);\n deviceContext = context;\n return context;\n } catch {\n return null;\n }\n}\n\nexport async function ensureDeviceContext(): Promise<NativeDeviceContext | null> {\n if (deviceContext) {\n return deviceContext;\n }\n\n if (!deviceContextPromise) {\n deviceContextPromise = loadDeviceContext().finally(() => {\n deviceContextPromise = null;\n });\n }\n\n return deviceContextPromise;\n}\n\n// ============================================\n// Token storage (clés unifiées avec Web SSO)\n// ============================================\n\nconst STORAGE = {\n AUTH_TOKEN: 'sso_auth_token',\n TOKEN: 'sso_token',\n USER: 'sso_user',\n ACCOUNT_TYPE: 'sso_account_type',\n ALIAS_REFERENCE: 'sso_alias_reference',\n APP_ACCESS_TOKEN_REF: 'sso_app_access_token_ref',\n REFRESH_TOKEN: 'sso_refresh_token',\n TOKEN_EXPIRES_AT: 'sso_token_expires_at',\n REFRESH_EXPIRES_AT: 'sso_refresh_expires_at',\n} as const;\n\nconst PROFILE_STORAGE = {\n IMAGE_LAST_STATUS: 'sso_image_last_status',\n IMAGE_LAST_CHECK: 'sso_image_last_check',\n IMAGE_RECHECK_AT: 'sso_image_recheck_at',\n} as const;\n\nexport interface SsoSessionSnapshot<TUser = unknown> {\n authToken: string | null;\n refreshToken: string | null;\n refreshExpiresAt: string | null;\n tokenExpiresAt: string | null;\n appAccessTokenRef: string | null;\n aliasReference: string | null;\n accountType: string | null;\n deviceId: string | null;\n sessionUuid: string | null;\n user: TUser | null;\n}\n\nexport const setAuthToken = (token: string): void => {\n const storage = getNativeStorage();\n storage.setItem(STORAGE.AUTH_TOKEN, token);\n};\n\nexport const getAuthToken = (): string | null => {\n const storage = getNativeStorage();\n return storage.getItem(STORAGE.AUTH_TOKEN) || storage.getItem(STORAGE.TOKEN);\n};\n\n/**\n * @deprecated Utilisez `logout()` à la place. `clearAuthToken()` ne fait que nettoyer\n * le localStorage sans révoquer les sessions côté SaaS et IAM, ce qui laisse des\n * sessions orphelines actives. `logout()` garantit la double revocation complète.\n */\nexport const clearAuthToken = (): void => {\n const storage = getNativeStorage();\n storage.removeItem(STORAGE.AUTH_TOKEN);\n storage.removeItem(STORAGE.TOKEN);\n storage.removeItem(STORAGE.USER);\n storage.removeItem(STORAGE.ACCOUNT_TYPE);\n storage.removeItem(STORAGE.ALIAS_REFERENCE);\n storage.removeItem(STORAGE.APP_ACCESS_TOKEN_REF);\n storage.removeItem(STORAGE.REFRESH_TOKEN);\n storage.removeItem(STORAGE.TOKEN_EXPIRES_AT);\n storage.removeItem(STORAGE.REFRESH_EXPIRES_AT);\n};\n\n/**\n * Déconnexion complète et sécurisée.\n * \n * Effectue la double revocation (SaaS + IAM) puis nettoie le localStorage.\n * **Toute déconnexion frontend DOIT passer par cette fonction** pour éviter\n * les sessions orphelines sur l'IAM.\n * \n * @example\n * ```tsx\n * import { logout } from '@ollaid/native-sso';\n * \n * const handleLogout = async () => {\n * await logout();\n * navigate('/auth/login');\n * };\n * ```\n */\nexport const logout = async (): Promise<{ success: boolean }> => {\n // Import dynamique pour éviter les dépendances circulaires\n const { nativeAuthService } = await import('./nativeAuth');\n const token = getAuthToken();\n return nativeAuthService.logout(token || undefined);\n};\n\nexport const setAuthUser = (user: unknown): void => {\n getNativeStorage().setItem(STORAGE.USER, JSON.stringify(user));\n};\n\nexport const getAuthUser = <T>(): T | null => {\n const user = getNativeStorage().getItem(STORAGE.USER);\n if (!user) return null;\n try {\n return JSON.parse(user);\n } catch {\n getNativeStorage().removeItem(STORAGE.USER);\n return null;\n }\n};\n\nexport const setAccountType = (type: string): void => {\n getNativeStorage().setItem(STORAGE.ACCOUNT_TYPE, type);\n};\n\nexport const getAccountType = (): string | null => {\n return getNativeStorage().getItem(STORAGE.ACCOUNT_TYPE);\n};\n\nexport function getSsoSessionSnapshot<TUser = unknown>(): SsoSessionSnapshot<TUser> {\n const storage = getNativeStorage();\n const userRaw = storage.getItem(STORAGE.USER);\n let user: TUser | null = null;\n\n if (userRaw) {\n try {\n user = JSON.parse(userRaw) as TUser;\n } catch {\n user = null;\n }\n }\n\n return {\n authToken: getAuthToken(),\n refreshToken: storage.getItem(STORAGE.REFRESH_TOKEN),\n refreshExpiresAt: storage.getItem(STORAGE.REFRESH_EXPIRES_AT),\n tokenExpiresAt: storage.getItem(STORAGE.TOKEN_EXPIRES_AT),\n appAccessTokenRef: storage.getItem(STORAGE.APP_ACCESS_TOKEN_REF),\n aliasReference: storage.getItem(STORAGE.ALIAS_REFERENCE),\n accountType: storage.getItem(STORAGE.ACCOUNT_TYPE),\n deviceId: storage.getItem(DEVICE_ID_KEY),\n sessionUuid: storage.getItem(SESSION_UUID_KEY),\n user,\n };\n}\n\nexport function hasSsoSession(): boolean {\n const snapshot = getSsoSessionSnapshot();\n return Boolean(snapshot.authToken && snapshot.user);\n}\n\nexport { STORAGE as STORAGE_KEYS };\nexport { PROFILE_STORAGE as PROFILE_PROMPT_KEYS };\n\nexport interface ProfilePromptState {\n lastStatus: boolean | null;\n lastCheckAt: number | null;\n recheckAt: number | null;\n}\n\nexport function getProfilePromptState(): ProfilePromptState {\n const storage = getNativeStorage();\n const lastStatusRaw = storage.getItem(PROFILE_STORAGE.IMAGE_LAST_STATUS);\n const lastCheckRaw = storage.getItem(PROFILE_STORAGE.IMAGE_LAST_CHECK);\n const recheckRaw = storage.getItem(PROFILE_STORAGE.IMAGE_RECHECK_AT);\n\n const parseTs = (value: string | null): number | null => {\n if (!value) return null;\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : null;\n };\n\n return {\n lastStatus: lastStatusRaw === null ? null : lastStatusRaw === 'true',\n lastCheckAt: parseTs(lastCheckRaw),\n recheckAt: parseTs(recheckRaw),\n };\n}\n\nexport function setProfilePromptState(status: boolean, recheckAt: number | null = null): void {\n const storage = getNativeStorage();\n storage.setItem(PROFILE_STORAGE.IMAGE_LAST_STATUS, status ? 'true' : 'false');\n storage.setItem(PROFILE_STORAGE.IMAGE_LAST_CHECK, String(Date.now()));\n\n if (recheckAt && Number.isFinite(recheckAt)) {\n storage.setItem(PROFILE_STORAGE.IMAGE_RECHECK_AT, String(recheckAt));\n } else {\n storage.removeItem(PROFILE_STORAGE.IMAGE_RECHECK_AT);\n }\n}\n\nexport function markProfilePromptComplete(): void {\n setProfilePromptState(true, null);\n}\n\nexport function snoozeProfilePrompt(hours = 8): void {\n setProfilePromptState(false, Date.now() + hours * 60 * 60 * 1000);\n}\n\n// ============================================\n// Fetch helper\n// ============================================\n\nexport async function fetchWithTimeout<T>(\n url: string,\n options: RequestInit,\n timeout: number\n): Promise<T> {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n const method = (options.method as 'GET' | 'POST' | 'PUT' | 'DELETE') || 'GET';\n let parsedBody: unknown = undefined;\n if (typeof options.body === 'string') {\n try {\n parsedBody = JSON.parse(options.body);\n } catch {\n parsedBody = options.body;\n }\n }\n const logId = isDebugMode() ? logApiCall(method, url, parsedBody) : null;\n const startTime = Date.now();\n\n try {\n const response = await fetch(url, {\n ...options,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n const contentType = response.headers.get('content-type');\n if (!contentType?.includes('application/json')) {\n await response.text();\n if (isDebugMode()) {\n console.error('❌ Réponse non-JSON:', response.status);\n if (logId) logApiResponse(logId, response.status, { raw: '[non-json response]' }, startTime, 'Non-JSON response');\n }\n throw new ApiError(`Erreur serveur (${response.status})`, 'server', response.status);\n }\n\n const data = await response.json();\n\n if (!response.ok) {\n if (logId) logApiResponse(logId, response.status, data, startTime, data.message);\n throw new ApiError(\n data.message || `Erreur ${response.status}`,\n response.status === 401 ? 'auth' : response.status >= 500 ? 'server' : 'validation',\n response.status,\n data.error_type,\n data\n );\n }\n\n if (logId) logApiResponse(logId, response.status, data, startTime);\n return data;\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof ApiError) throw error;\n\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n if (logId) logApiResponse(logId, 0, null, startTime, 'Timeout');\n throw new ApiError('Délai d\\'attente dépassé', 'timeout');\n }\n if (error instanceof TypeError) {\n if (logId) logApiResponse(logId, 0, null, startTime, 'Network error');\n throw new ApiError('Impossible de contacter le serveur', 'network');\n }\n }\n\n if (logId) logApiResponse(logId, 0, null, startTime, 'Unknown error');\n throw new ApiError('Erreur inattendue', 'unknown');\n }\n}\n\nexport function getHeaders(token?: string, includeConfigPrefix = false): HeadersInit {\n const headers: HeadersInit = {\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n };\n\n const deviceId = getDeviceId();\n if (deviceId) {\n headers['X-Device-Id'] = deviceId;\n }\n\n const sessionUuid = getSessionUuid();\n if (sessionUuid) {\n headers['X-Session-UUID'] = sessionUuid;\n }\n\n if (deviceContext?.label) {\n headers['X-Device-Label'] = deviceContext.label;\n }\n if (deviceContext?.browser) {\n headers['X-Device-Browser'] = deviceContext.browser;\n }\n if (deviceContext?.deviceName) {\n headers['X-Device-Name'] = deviceContext.deviceName;\n }\n if (deviceContext?.deviceModel) {\n headers['X-Device-Model'] = deviceContext.deviceModel;\n }\n if (deviceContext?.deviceManufacturer) {\n headers['X-Device-Manufacturer'] = deviceContext.deviceManufacturer;\n }\n if (deviceContext?.operatingSystem) {\n headers['X-Device-Operating-System'] = deviceContext.operatingSystem;\n }\n if (deviceContext?.osVersion) {\n headers['X-Device-Os-Version'] = deviceContext.osVersion;\n }\n if (deviceContext?.platform) {\n headers['X-Device-Platform'] = deviceContext.platform;\n }\n if (deviceContext?.language) {\n headers['X-Device-Language'] = deviceContext.language;\n }\n if (deviceContext?.webviewVersion) {\n headers['X-Device-WebView-Version'] = deviceContext.webviewVersion;\n }\n if (typeof deviceContext?.isNative === 'boolean') {\n headers['X-Device-Is-Native'] = deviceContext.isNative ? 'true' : 'false';\n }\n\n const appAccessTokenRef = getNativeStorage().getItem(STORAGE.APP_ACCESS_TOKEN_REF);\n if (appAccessTokenRef) {\n headers['X-App-Access-Token-Ref'] = appAccessTokenRef;\n }\n\n // Multi-tenant: envoyer le préfixe de config au backend SaaS\n if (includeConfigPrefix && config.configPrefix) {\n headers['X-IAM-Config-Prefix'] = config.configPrefix;\n }\n\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n\n return headers;\n}\n\nexport default {\n getConfig: getNativeAuthConfig,\n setConfig: setNativeAuthConfig,\n};\n","/**\n * Service d'authentification Native Mobile SSO v1.0\n * Architecture Frontend-First : Direct IAM après encryption\n * \n * @version 2.7.0\n */\n\nimport { \n ApiError, \n fetchWithTimeout,\n getHeaders,\n getDeviceId,\n getNativeStorage,\n ensureDeviceContext,\n setAuthToken,\n setAuthUser,\n clearAuthToken,\n getNativeAuthConfig,\n setNativeAuthConfig,\n isDebugMode,\n STORAGE_KEYS,\n} from './api';\n\nimport type {\n NativeAuthType,\n NativeEncryptRequest,\n NativeEncryptResponse,\n NativeInitResponse,\n NativeValidateResponse,\n NativeGrantAccessResponse,\n NativeResendOtpResponse,\n NativeExchangeResponse,\n NativeConfigResponse,\n NativeCredentials,\n NativeRefreshResponse,\n} from '../types/native';\n\n// ============================================\n// Credentials en mémoire (jamais persistés)\n// ============================================\n\nlet credentials: NativeCredentials | null = null;\nlet credentialsLoadedAt: number = 0;\nlet credentialsTtl: number = 300; // Default 5 minutes\n\nconst DEFAULT_TTL = 300;\nconst REFRESH_MARGIN = 30; // Refresh 30s before expiration\n\n// ============================================\n// Service Native Auth\n// ============================================\n\nexport const nativeAuthService = {\n hasCredentials(): boolean {\n return credentials !== null;\n },\n\n getCredentials(): NativeCredentials | null {\n return credentials ? { ...credentials } : null;\n },\n\n getCredentialsTtl(): number {\n return credentialsTtl;\n },\n\n getCredentialsAge(): number {\n if (!credentialsLoadedAt) return Infinity;\n return (Date.now() - credentialsLoadedAt) / 1000;\n },\n\n areCredentialsExpiringSoon(): boolean {\n if (!credentials || !credentialsLoadedAt) return true;\n const age = this.getCredentialsAge();\n return age >= (credentialsTtl - REFRESH_MARGIN);\n },\n\n async ensureFreshCredentials(): Promise<void> {\n if (!credentials || this.areCredentialsExpiringSoon()) {\n if (isDebugMode()) {\n console.log('🔄 [Native] Credentials expirés ou proches — auto-refresh');\n }\n await this.loadCredentials();\n }\n },\n\n async loadCredentials(): Promise<NativeCredentials> {\n const config = getNativeAuthConfig();\n if (!config.saasApiUrl) {\n throw new ApiError('saasApiUrl non configurée', 'unknown');\n }\n\n await ensureDeviceContext();\n\n if (isDebugMode()) {\n console.log('📤 [SaaS] GET /native/config');\n }\n\n const response = await fetchWithTimeout<NativeConfigResponse>(\n `${config.saasApiUrl}/native/config`,\n { method: 'GET', headers: getHeaders(undefined, true) },\n config.timeout || 30000\n );\n\n if (!response.success || !response.encrypted_credentials || !response.app_key) {\n throw new ApiError('Configuration invalide reçue du SaaS (app_key ou encrypted_credentials manquant)', 'server');\n }\n\n credentials = {\n appKey: response.app_key,\n encryptedCredentials: response.encrypted_credentials,\n };\n\n credentialsLoadedAt = Date.now();\n credentialsTtl = response.credentials_ttl || DEFAULT_TTL;\n\n // Propager le debug mode depuis le backend (si défini)\n if (typeof response.debug === 'boolean') {\n const currentConfig = getNativeAuthConfig();\n if (currentConfig.debug !== true) {\n setNativeAuthConfig({ debug: response.debug });\n }\n }\n\n if (isDebugMode()) {\n console.log('✅ [SaaS] Credentials chargés (ttl:', credentialsTtl, 's, debug:', response.debug ?? 'non défini', ')');\n }\n\n return credentials;\n },\n\n async encrypt(\n type: NativeAuthType,\n data: Partial<NativeEncryptRequest>\n ): Promise<NativeEncryptResponse> {\n // Auto-refresh credentials if expiring soon\n await this.ensureFreshCredentials();\n\n if (!credentials) {\n throw new ApiError('Credentials non chargés. Appelez loadCredentials() d\\'abord.', 'auth');\n }\n\n const config = getNativeAuthConfig();\n if (!config.iamApiUrl) {\n throw new ApiError('iamApiUrl non configurée', 'unknown');\n }\n\n await ensureDeviceContext();\n\n const payload: NativeEncryptRequest = {\n type,\n app_key: credentials.appKey,\n encrypted_credentials: credentials.encryptedCredentials,\n ...data,\n };\n\n if (isDebugMode()) {\n const safeData = {\n ...data,\n } as Partial<NativeEncryptRequest> & {\n password?: string;\n otp_code?: string;\n email?: string;\n phone?: string;\n ccphone?: string;\n };\n if (typeof safeData.password === 'string') safeData.password = '[redacted]';\n if (typeof safeData.otp_code === 'string') safeData.otp_code = '[redacted]';\n if (typeof safeData.email === 'string') safeData.email = safeData.email.includes('@')\n ? safeData.email.replace(/(^.).*(@.*$)/, '$1***$2')\n : '[redacted]';\n if (typeof safeData.ccphone === 'string') {\n safeData.ccphone = '[redacted]';\n }\n if (typeof safeData.phone === 'string') {\n safeData.phone = '[redacted]';\n }\n console.log('📤 [IAM] POST /iam/native/encrypt', { type, ...safeData });\n }\n\n const response = await fetchWithTimeout<NativeEncryptResponse>(\n `${config.iamApiUrl}/iam/native/encrypt`,\n {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify(payload),\n },\n config.timeout || 30000\n );\n\n if (isDebugMode()) {\n console.log('✅ [IAM] native_token reçu, expire dans', response.expires_in, 's');\n }\n\n return response;\n },\n\n async init(nativeToken: string): Promise<NativeInitResponse> {\n const config = getNativeAuthConfig();\n if (!config.iamApiUrl) {\n throw new ApiError('iamApiUrl non configurée', 'unknown');\n }\n\n await ensureDeviceContext();\n\n if (isDebugMode()) {\n console.log('📤 [IAM] POST /iam/native/init');\n }\n\n const response = await fetchWithTimeout<NativeInitResponse>(\n `${config.iamApiUrl}/iam/native/init`,\n {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify({ native_token: nativeToken }),\n },\n config.timeout || 30000\n );\n\n if (isDebugMode()) {\n console.log('✅ [IAM] Init:', { status: response.status, hasProcessToken: !!response.process_token });\n }\n\n return response;\n },\n\n async validate(\n processToken: string,\n creds: { password?: string; otp_code?: string }\n ): Promise<NativeValidateResponse> {\n const config = getNativeAuthConfig();\n if (!config.iamApiUrl) {\n throw new ApiError('iamApiUrl non configurée', 'unknown');\n }\n\n await ensureDeviceContext();\n\n if (isDebugMode()) {\n console.log('📤 [IAM] POST /iam/native/validate');\n }\n\n const response = await fetchWithTimeout<NativeValidateResponse>(\n `${config.iamApiUrl}/iam/native/validate`,\n {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify({\n process_token: processToken,\n ...creds,\n }),\n },\n config.timeout || 30000\n );\n\n if (isDebugMode()) {\n console.log('✅ [IAM] Validate:', { \n hasCallback: !!response.callback_token, \n requires2fa: response.requires_2fa \n });\n }\n\n return response;\n },\n\n async verifyTotp(\n processToken: string,\n totpCode: string\n ): Promise<NativeValidateResponse> {\n const config = getNativeAuthConfig();\n if (!config.iamApiUrl) {\n throw new ApiError('iamApiUrl non configurée', 'unknown');\n }\n\n await ensureDeviceContext();\n\n if (isDebugMode()) {\n console.log('📤 [IAM] POST /iam/native/verify-totp');\n }\n\n return fetchWithTimeout<NativeValidateResponse>(\n `${config.iamApiUrl}/iam/native/verify-totp`,\n {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify({\n process_token: processToken,\n totp_code: totpCode,\n }),\n },\n config.timeout || 30000\n );\n },\n\n async grantAccess(processToken: string): Promise<NativeGrantAccessResponse> {\n const config = getNativeAuthConfig();\n if (!config.iamApiUrl) {\n throw new ApiError('iamApiUrl non configurée', 'unknown');\n }\n\n await ensureDeviceContext();\n\n if (isDebugMode()) {\n console.log('📤 [IAM] POST /iam/native/grant-access');\n }\n\n return fetchWithTimeout<NativeGrantAccessResponse>(\n `${config.iamApiUrl}/iam/native/grant-access`,\n {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify({ process_token: processToken }),\n },\n config.timeout || 30000\n );\n },\n\n async resendOtp(processToken: string): Promise<NativeResendOtpResponse> {\n const config = getNativeAuthConfig();\n if (!config.iamApiUrl) {\n throw new ApiError('iamApiUrl non configurée', 'unknown');\n }\n\n await ensureDeviceContext();\n\n if (isDebugMode()) {\n console.log('📤 [IAM] POST /iam/native/resend-otp');\n }\n\n return fetchWithTimeout<NativeResendOtpResponse>(\n `${config.iamApiUrl}/iam/native/resend-otp`,\n {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify({ process_token: processToken }),\n },\n config.timeout || 30000\n );\n },\n\n async exchange(callbackToken: string): Promise<NativeExchangeResponse> {\n const config = getNativeAuthConfig();\n if (!config.saasApiUrl) {\n throw new ApiError('saasApiUrl non configurée', 'unknown');\n }\n\n await ensureDeviceContext();\n\n if (isDebugMode()) {\n console.log('📤 [SaaS] POST /native/exchange');\n }\n\n const response = await fetchWithTimeout<NativeExchangeResponse>(\n `${config.saasApiUrl}/native/exchange`,\n {\n method: 'POST',\n headers: getHeaders(undefined, true),\n body: JSON.stringify({ callback_token: callbackToken }),\n },\n config.timeout || 30000\n );\n\n if (response.success && response.token) {\n setAuthToken(response.token);\n if (response.user) {\n setAuthUser(response.user);\n }\n // Persist expiration if provided\n const storage = getNativeStorage();\n if (response.expires_at) {\n storage.setItem(STORAGE_KEYS.TOKEN_EXPIRES_AT, response.expires_at);\n }\n // Persist refresh token if the SaaS supports it\n if (response.refresh_token) {\n storage.setItem(STORAGE_KEYS.REFRESH_TOKEN, response.refresh_token);\n }\n if (response.refresh_expires_at) {\n storage.setItem(STORAGE_KEYS.REFRESH_EXPIRES_AT, response.refresh_expires_at);\n }\n // Persister app_access_token_ref pour la double revocation (logout/health check)\n if (response.app_access_token_ref) {\n storage.setItem(STORAGE_KEYS.APP_ACCESS_TOKEN_REF, response.app_access_token_ref);\n }\n // Persister alias_reference pour accès rapide\n const aliasRef = response.user?.alias_reference || response.alias_reference;\n if (aliasRef) {\n storage.setItem(STORAGE_KEYS.ALIAS_REFERENCE, aliasRef as string);\n }\n }\n\n if (isDebugMode()) {\n console.log('✅ [SaaS] Session établie:', { user: response.user?.name });\n }\n\n return response;\n },\n\n async checkToken(token: string): Promise<{ valid: boolean; user?: import('../types/native').UserInfos }> {\n const cfg = getNativeAuthConfig();\n if (!cfg.saasApiUrl) {\n throw new ApiError('saasApiUrl non configurée', 'unknown');\n }\n\n await ensureDeviceContext();\n\n if (isDebugMode()) {\n console.log('📤 [SaaS] POST /native/check-token');\n }\n\n try {\n const response = await fetchWithTimeout<{ status?: string; success?: boolean; user?: import('../types/native').UserInfos }>(\n `${cfg.saasApiUrl}/native/check-token`,\n {\n method: 'POST',\n headers: getHeaders(token, true),\n },\n 10000\n );\n\n // Format principal : { status: 'connected', user: {...} }\n if (response.status === 'connected' && response.user) {\n return { valid: true, user: response.user };\n }\n\n // Fallback legacy : { success: true, user: {...} }\n if (response.success !== false) {\n return { valid: true, user: response.user };\n }\n\n return { valid: false };\n } catch (err) {\n if (err instanceof ApiError && err.statusCode === 401) {\n return { valid: false };\n }\n throw err;\n }\n },\n\n async refresh(): Promise<NativeRefreshResponse> {\n const cfg = getNativeAuthConfig();\n if (!cfg.saasApiUrl) {\n throw new ApiError('saasApiUrl non configurée', 'unknown');\n }\n\n await ensureDeviceContext();\n\n const refreshToken = getNativeStorage().getItem(STORAGE_KEYS.REFRESH_TOKEN);\n\n if (!refreshToken) {\n return { success: false, error_type: 'missing_refresh', message: 'Refresh token manquant' };\n }\n\n if (isDebugMode()) {\n console.log('📤 [SaaS] POST /native/refresh');\n }\n\n let response: NativeRefreshResponse;\n try {\n response = await fetchWithTimeout<NativeRefreshResponse>(\n `${cfg.saasApiUrl}/native/refresh`,\n {\n method: 'POST',\n headers: getHeaders(undefined, true),\n body: JSON.stringify({ refresh_token: refreshToken }),\n },\n cfg.timeout || 30000\n );\n } catch (err) {\n // Normalize common cases for callers (do not force logout on network errors).\n if (err instanceof ApiError) {\n if (err.statusCode === 401) {\n return {\n success: false,\n error_type: err.errorType || 'invalid_refresh',\n message: err.message,\n };\n }\n // Endpoint not deployed yet on the SaaS (backward compatibility)\n if (err.statusCode === 404) {\n return {\n success: false,\n error_type: 'not_supported',\n message: 'Endpoint refresh non disponible sur ce SaaS',\n };\n }\n }\n throw err;\n }\n\n // Backends can return {success:false,...} with 200 (not recommended),\n // but we keep the contract tolerant and only update state on explicit success.\n // Refresh contract:\n // - Recommended: keep the SAME access token and only extend expires_at (token omitted in response).\n // - Supported: rotate token (token returned) if backend chooses to.\n if (response.success) {\n if (response.token) {\n setAuthToken(response.token);\n }\n\n const storage = getNativeStorage();\n if (response.expires_at) storage.setItem(STORAGE_KEYS.TOKEN_EXPIRES_AT, response.expires_at);\n if (response.refresh_token) storage.setItem(STORAGE_KEYS.REFRESH_TOKEN, response.refresh_token);\n if (response.refresh_expires_at) storage.setItem(STORAGE_KEYS.REFRESH_EXPIRES_AT, response.refresh_expires_at);\n if (response.app_access_token_ref) storage.setItem(STORAGE_KEYS.APP_ACCESS_TOKEN_REF, response.app_access_token_ref);\n if (response.alias_reference) storage.setItem(STORAGE_KEYS.ALIAS_REFERENCE, response.alias_reference);\n\n if (response.user) {\n // Best-effort store: user may be NativeUser or UserInfos\n setAuthUser(response.user);\n }\n }\n\n return response;\n },\n\n async logout(token?: string): Promise<{ success: boolean }> {\n const config = getNativeAuthConfig();\n await ensureDeviceContext();\n\n // Récupérer les identifiants avant nettoyage\n const storage = getNativeStorage();\n const appAccessTokenRef = storage.getItem(STORAGE_KEYS.APP_ACCESS_TOKEN_REF);\n\n // Double revocation : SaaS + IAM en parallèle (best-effort)\n const promises: Promise<unknown>[] = [];\n\n // ① Appel SaaS — révoque le Sanctum token\n if (config.saasApiUrl && token) {\n promises.push(\n fetchWithTimeout<{ success: boolean }>(\n `${config.saasApiUrl}/native/logout`,\n {\n method: 'POST',\n headers: getHeaders(token, true),\n },\n config.timeout || 30000\n ).catch((err) => {\n if (isDebugMode()) {\n console.warn('⚠️ [SaaS] Échec logout (non-bloquant):', err instanceof Error ? err.message : err);\n }\n })\n );\n }\n\n // ② Appel direct IAM — révoque l'AppAccessToken via sa référence stable\n if (config.iamApiUrl && appAccessTokenRef) {\n const payload: Record<string, string> = { app_access_token_ref: appAccessTokenRef };\n\n promises.push(\n fetchWithTimeout<{ success: boolean }>(\n `${config.iamApiUrl}/iam/disconnect`,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },\n body: JSON.stringify(payload),\n },\n 5000\n ).catch((err) => {\n if (isDebugMode()) {\n console.warn('⚠️ [IAM] Échec disconnect (non-bloquant):', err instanceof Error ? err.message : err);\n }\n })\n );\n }\n\n // Attendre les deux sans bloquer\n await Promise.allSettled(promises);\n\n if (isDebugMode()) {\n console.log('✅ [Logout] Double revocation terminée — nettoyage local');\n }\n\n // Nettoyage local garanti (même si les deux appels échouent)\n clearAuthToken();\n credentials = null;\n credentialsLoadedAt = 0;\n return { success: true };\n },\n\n clearCredentials(): void {\n credentials = null;\n credentialsLoadedAt = 0;\n },\n\n // ============================================\n // High-level methods\n // ============================================\n\n async loginEmail(\n email: string,\n accountType: 'user' | 'admin' = 'user'\n ): Promise<NativeInitResponse> {\n const { native_token } = await this.encrypt('login_email', {\n email,\n account_type: accountType,\n });\n return this.init(native_token);\n },\n\n async loginPhone(\n ccphone: string,\n phone: string,\n accountType: 'user' | 'admin' = 'user'\n ): Promise<NativeInitResponse> {\n const { native_token } = await this.encrypt('login_phone', {\n ccphone,\n phone,\n account_type: accountType,\n });\n return this.init(native_token);\n },\n\n async loginAccessOtp(otpCode: string): Promise<NativeInitResponse> {\n const { native_token } = await this.encrypt('login_access_otp', {\n otp_code: otpCode.replace(/[\\s-]/g, ''),\n });\n return this.init(native_token);\n },\n\n async register(data: {\n name: string;\n email?: string;\n ccphone: string;\n phone: string;\n town?: string;\n country?: string;\n registration_type?: 'email' | 'phone';\n }): Promise<NativeInitResponse> {\n const { native_token } = await this.encrypt('register', {\n ...data,\n registration_type: data.registration_type || 'email',\n });\n return this.init(native_token);\n },\n\n async registerPhoneOnly(data: {\n name: string;\n ccphone: string;\n phone: string;\n town?: string;\n country?: string;\n }): Promise<NativeInitResponse> {\n if (data.ccphone !== '+221') {\n throw new ApiError(\n \"L'inscription par téléphone est réservée aux numéros sénégalais (+221)\",\n 'validation',\n 422,\n 'invalid_country_code'\n );\n }\n\n const { native_token } = await this.encrypt('register', {\n ...data,\n email: '',\n registration_type: 'phone',\n });\n return this.init(native_token);\n },\n\n async recoverPassword(\n method: 'email' | 'phone',\n identifier: { email?: string; ccphone?: string; phone?: string }\n ): Promise<NativeInitResponse> {\n const { native_token } = await this.encrypt('recovery_password', {\n method,\n ...identifier,\n });\n return this.init(native_token);\n },\n};\n\nexport default nativeAuthService;\n","/**\n * Service de récupération de mot de passe v1.0\n * Architecture Frontend-First : Appels directs à l'IAM\n * \n * @version 2.7.0\n */\n\nimport { \n ApiError, \n fetchWithTimeout, \n getNativeAuthConfig, \n isDebugMode,\n} from './api';\nimport { nativeAuthService } from './nativeAuth';\n\nimport type {\n MobilePasswordInitResponse,\n MobilePasswordSelectMethodResponse,\n MobilePasswordResetResponse,\n MobilePasswordResendResponse,\n} from '../types/mobile';\n\n// ============================================\n// Credentials (shared with nativeAuth)\n// ============================================\n\nfunction getIAMHeaders(): HeadersInit {\n const creds = nativeAuthService.getCredentials();\n if (!creds) {\n throw new ApiError('Credentials non chargés. Appelez loadCredentials() d\\'abord.', 'auth');\n }\n\n return {\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n 'X-IAM-App-Key': creds.appKey,\n };\n}\n\n// ============================================\n// Service\n// ============================================\n\nexport const mobilePasswordService = {\n hasCredentials(): boolean {\n return nativeAuthService.hasCredentials();\n },\n\n async loadCredentials() {\n return nativeAuthService.loadCredentials();\n },\n\n async initRecovery(email: string): Promise<MobilePasswordInitResponse> {\n const config = getNativeAuthConfig();\n if (!config.iamApiUrl) {\n throw new ApiError('iamApiUrl non configurée', 'unknown');\n }\n\n if (!nativeAuthService.hasCredentials()) {\n await nativeAuthService.loadCredentials();\n }\n\n if (isDebugMode()) {\n const maskedEmail = email.includes('@') ? email.replace(/(^.).*(@.*$)/, '$1***$2') : '[redacted]';\n console.log('📤 [IAM] POST /iam/native/password/init', { email: maskedEmail });\n }\n\n const response = await fetchWithTimeout<MobilePasswordInitResponse>(\n `${config.iamApiUrl}/iam/native/password/init`,\n {\n method: 'POST',\n headers: getIAMHeaders(),\n body: JSON.stringify({ email }),\n },\n config.timeout || 30000\n );\n\n if (isDebugMode()) {\n console.log('✅ [IAM] Init recovery:', { \n status: response.status, \n hasOtp: !!response.otp_code,\n });\n }\n\n return response;\n },\n\n async selectMethod(\n processToken: string, \n receiveChoice: 'email' | 'phone'\n ): Promise<MobilePasswordSelectMethodResponse> {\n const config = getNativeAuthConfig();\n if (!config.iamApiUrl) {\n throw new ApiError('iamApiUrl non configurée', 'unknown');\n }\n\n if (isDebugMode()) {\n console.log('📤 [IAM] POST /iam/native/password/select-method', { receiveChoice });\n }\n\n return fetchWithTimeout<MobilePasswordSelectMethodResponse>(\n `${config.iamApiUrl}/iam/native/password/select-method`,\n {\n method: 'POST',\n headers: getIAMHeaders(),\n body: JSON.stringify({ \n process_token: processToken, \n receive_choice: receiveChoice,\n }),\n },\n config.timeout || 30000\n );\n },\n\n validateOtpLocally(inputCode: string, storedCode: string): boolean {\n return inputCode === storedCode;\n },\n\n async reset(\n processToken: string,\n password: string\n ): Promise<MobilePasswordResetResponse> {\n const config = getNativeAuthConfig();\n if (!config.iamApiUrl) {\n throw new ApiError('iamApiUrl non configurée', 'unknown');\n }\n\n if (isDebugMode()) {\n console.log('📤 [IAM] POST /iam/native/password/reset');\n }\n\n return fetchWithTimeout<MobilePasswordResetResponse>(\n `${config.iamApiUrl}/iam/native/password/reset`,\n {\n method: 'POST',\n headers: getIAMHeaders(),\n body: JSON.stringify({\n process_token: processToken,\n password,\n password_confirmation: password,\n }),\n },\n config.timeout || 30000\n );\n },\n\n async resendOtp(processToken: string): Promise<MobilePasswordResendResponse> {\n const config = getNativeAuthConfig();\n if (!config.iamApiUrl) {\n throw new ApiError('iamApiUrl non configurée', 'unknown');\n }\n\n if (isDebugMode()) {\n console.log('📤 [IAM] POST /iam/native/password/resend');\n }\n\n return fetchWithTimeout<MobilePasswordResendResponse>(\n `${config.iamApiUrl}/iam/native/password/resend`,\n {\n method: 'POST',\n headers: getIAMHeaders(),\n body: JSON.stringify({ process_token: processToken }),\n },\n config.timeout || 30000\n );\n },\n};\n\nexport { ApiError };\nexport default mobilePasswordService;\n","/**\n * Hook de récupération de mot de passe v1.0\n * Architecture Frontend-First avec appels directs à l'IAM\n * \n * @version 2.7.0\n */\n\nimport { useState, useCallback, useEffect, useRef } from 'react';\nimport { mobilePasswordService } from '../services/mobilePassword';\nimport { setNativeAuthConfig, ApiError } from '../services/api';\nimport type { MobilePasswordState } from '../types/mobile';\n\nexport interface UseMobilePasswordOptions {\n saasApiUrl: string;\n iamApiUrl: string;\n autoLoadCredentials?: boolean;\n \n}\n\ninterface MobilePasswordStateExtended extends MobilePasswordState {\n credentialsLoaded: boolean;\n errorType: string | null;\n}\n\nfunction getErrorMessage(err: unknown, context: string): { message: string; type: string } {\n if (err instanceof ApiError) {\n return { message: err.message, type: err.type };\n }\n if (err instanceof Error) {\n if (err.message.includes('fetch') || err.message.includes('network')) {\n return { message: 'Vérifiez votre connexion Internet', type: 'network' };\n }\n if (err.message.includes('timeout')) {\n return { message: 'Le serveur met trop de temps à répondre', type: 'timeout' };\n }\n return { message: err.message, type: 'unknown' };\n }\n return { message: `Erreur lors de ${context}`, type: 'unknown' };\n}\n\nexport function useMobilePassword(options: UseMobilePasswordOptions) {\n const { saasApiUrl, iamApiUrl, autoLoadCredentials = true } = options;\n\n const configuredRef = useRef(false);\n\n useEffect(() => {\n if (!configuredRef.current) {\n setNativeAuthConfig({ saasApiUrl, iamApiUrl });\n configuredRef.current = true;\n }\n }, [saasApiUrl, iamApiUrl]);\n\n const [state, setState] = useState<MobilePasswordStateExtended>({\n credentialsLoaded: false,\n processToken: null,\n status: 'idle',\n storedOtp: null,\n receiveMode: null,\n maskedEmail: null,\n maskedPhone: null,\n loading: false,\n error: null,\n errorType: null,\n });\n\n const loadCredentials = useCallback(async () => {\n setState(prev => ({ ...prev, loading: true, error: null, errorType: null }));\n try {\n await mobilePasswordService.loadCredentials();\n setState(prev => ({ ...prev, credentialsLoaded: true, loading: false }));\n return { success: true };\n } catch (err) {\n const { message, type } = getErrorMessage(err, 'le chargement');\n setState(prev => ({ ...prev, loading: false, error: message, errorType: type }));\n return { success: false, error_type: type };\n }\n }, []);\n\n useEffect(() => {\n if (autoLoadCredentials && !state.credentialsLoaded) {\n loadCredentials();\n }\n }, [autoLoadCredentials, state.credentialsLoaded, loadCredentials]);\n\n const initRecovery = useCallback(async (email: string) => {\n setState(prev => ({ ...prev, loading: true, error: null, errorType: null }));\n try {\n if (!mobilePasswordService.hasCredentials()) {\n await mobilePasswordService.loadCredentials();\n }\n const response = await mobilePasswordService.initRecovery(email);\n\n if (response.success && response.process_token) {\n if (response.status === 'choice_required') {\n setState(prev => ({\n ...prev,\n credentialsLoaded: true,\n processToken: response.process_token!,\n status: 'choice_required',\n maskedEmail: response.masked_email || null,\n maskedPhone: response.masked_phone || null,\n loading: false,\n }));\n return { success: true, status: 'choice_required' as const };\n } else {\n setState(prev => ({\n ...prev,\n credentialsLoaded: true,\n processToken: response.process_token!,\n status: 'pending_otp',\n storedOtp: response.otp_code || null,\n receiveMode: 'email',\n maskedEmail: response.masked_email || null,\n loading: false,\n }));\n return { success: true, status: 'pending_otp' as const };\n }\n }\n\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Aucun compte trouvé avec cet email',\n errorType: response.error_type || 'unknown',\n }));\n return { success: false, error_type: response.error_type };\n } catch (err) {\n const { message, type } = getErrorMessage(err, 'la recherche du compte');\n setState(prev => ({ ...prev, loading: false, error: message, errorType: type }));\n return { success: false, error_type: type };\n }\n }, []);\n\n const selectMethod = useCallback(async (choice: 'email' | 'phone') => {\n if (!state.processToken) {\n return { success: false, error: 'Session invalide' };\n }\n setState(prev => ({ ...prev, loading: true, error: null, errorType: null }));\n try {\n const response = await mobilePasswordService.selectMethod(state.processToken, choice);\n if (response.success) {\n setState(prev => ({\n ...prev,\n status: 'pending_otp',\n storedOtp: response.otp_code || null,\n receiveMode: response.receive_mode || choice,\n loading: false,\n }));\n return { success: true };\n }\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Impossible d\\'envoyer le code',\n errorType: response.error_type || 'unknown',\n }));\n return { success: false, error_type: response.error_type };\n } catch (err) {\n const { message, type } = getErrorMessage(err, 'l\\'envoi du code');\n setState(prev => ({ ...prev, loading: false, error: message, errorType: type }));\n return { success: false, error_type: type };\n }\n }, [state.processToken]);\n\n const verifyOtp = useCallback((inputCode: string): boolean => {\n if (!state.storedOtp) {\n setState(prev => ({ ...prev, error: 'Session invalide', errorType: 'invalid_session' }));\n return false;\n }\n const isValid = mobilePasswordService.validateOtpLocally(inputCode, state.storedOtp);\n if (isValid) {\n setState(prev => ({ ...prev, status: 'pending_password', error: null, errorType: null }));\n return true;\n }\n setState(prev => ({ ...prev, error: 'Code incorrect', errorType: 'invalid_otp' }));\n return false;\n }, [state.storedOtp]);\n\n const resetPassword = useCallback(async (password: string) => {\n if (!state.processToken) {\n return { success: false, error: 'Session invalide' };\n }\n setState(prev => ({ ...prev, loading: true, error: null, errorType: null }));\n try {\n const response = await mobilePasswordService.reset(state.processToken, password);\n if (response.success) {\n setState(prev => ({ ...prev, status: 'completed', loading: false }));\n return { success: true };\n }\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Erreur lors de la réinitialisation',\n errorType: response.error_type || 'unknown',\n }));\n return { success: false, error_type: response.error_type };\n } catch (err) {\n const { message, type } = getErrorMessage(err, 'la réinitialisation');\n setState(prev => ({ ...prev, loading: false, error: message, errorType: type }));\n return { success: false, error_type: type };\n }\n }, [state.processToken]);\n\n const resendOtp = useCallback(async () => {\n if (!state.processToken) {\n return { success: false, error: 'Session invalide' };\n }\n setState(prev => ({ ...prev, loading: true, error: null, errorType: null }));\n try {\n const response = await mobilePasswordService.resendOtp(state.processToken);\n if (response.success && response.otp_code) {\n setState(prev => ({ ...prev, storedOtp: response.otp_code!, loading: false }));\n return { success: true, cooldown: response.cooldown_remaining };\n }\n setState(prev => ({ ...prev, loading: false }));\n return { success: false, error_type: response.error_type };\n } catch (err) {\n const { message, type } = getErrorMessage(err, 'le renvoi');\n setState(prev => ({ ...prev, loading: false, error: message, errorType: type }));\n return { success: false, error_type: type };\n }\n }, [state.processToken]);\n\n const reset = useCallback(() => {\n setState({\n credentialsLoaded: state.credentialsLoaded,\n processToken: null,\n status: 'idle',\n storedOtp: null,\n receiveMode: null,\n maskedEmail: null,\n maskedPhone: null,\n loading: false,\n error: null,\n errorType: null,\n });\n }, [state.credentialsLoaded]);\n\n const clearError = useCallback(() => {\n setState(prev => ({ ...prev, error: null, errorType: null }));\n }, []);\n\n return {\n credentialsLoaded: state.credentialsLoaded,\n processToken: state.processToken,\n status: state.status,\n storedOtp: state.storedOtp,\n receiveMode: state.receiveMode,\n maskedEmail: state.maskedEmail,\n maskedPhone: state.maskedPhone,\n loading: state.loading,\n error: state.error,\n errorType: state.errorType,\n\n isCompleted: state.status === 'completed',\n isChoiceRequired: state.status === 'choice_required',\n isPendingOtp: state.status === 'pending_otp',\n isPendingPassword: state.status === 'pending_password',\n\n loadCredentials,\n initRecovery,\n selectMethod,\n verifyOtp,\n resetPassword,\n resendOtp,\n reset,\n clearError,\n };\n}\n\nexport default useMobilePassword;\n","/**\n * Password Recovery Modal for @ollaid/native-sso\n * Flow: email → method-choice → OTP → new password → success\n * Design aligned with web SSO\n * \n * @version 2.7.0\n */\n\nimport { useState, useEffect } from 'react';\nimport {\n Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogBody, DialogFooter,\n Button, Input, Label, RadioGroup, RadioGroupItem,\n IconLock, IconCheckCircle2, IconArrowLeft, IconKeyRound, IconLoader2,\n} from './ui';\nimport OTPInput from './OTPInput';\nimport { useMobilePassword } from '../hooks/useMobilePassword';\n\nexport interface PasswordRecoveryModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onSuccess: () => void;\n saasApiUrl: string;\n iamApiUrl: string;\n \n}\n\ntype RecoveryStep = 'email' | 'method-choice' | 'otp' | 'password' | 'success';\n\nconst C = {\n primary: '#002147',\n green: '#16a34a',\n greenBg: '#dcfce7',\n gray100: '#f3f4f6',\n gray200: '#e5e7eb',\n gray500: '#6b7280',\n gray700: '#374151',\n gray900: '#111827',\n red: '#dc2626',\n redBg: '#fef2f2',\n white: '#ffffff',\n} as const;\n\nconst iconCircle = (bg: string, size = '3rem'): React.CSSProperties => ({\n margin: '0 auto', width: size, height: size, backgroundColor: bg, borderRadius: '50%',\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n});\n\nconst backBtnStyle: React.CSSProperties = {\n position: 'absolute', left: '1rem', top: '1rem', background: 'none', border: 'none',\n cursor: 'pointer', padding: '0.5rem', borderRadius: '0.375rem', color: C.gray700, zIndex: 10,\n};\n\nexport function PasswordRecoveryModal({ open, onOpenChange, onSuccess, saasApiUrl, iamApiUrl }: PasswordRecoveryModalProps) {\n const {\n status, loading: pwLoading, error: pwError, receiveMode, maskedEmail, maskedPhone,\n initRecovery, selectMethod, verifyOtp, resetPassword, resendOtp, reset: resetHook, clearError,\n } = useMobilePassword({ saasApiUrl, iamApiUrl });\n\n const [step, setStep] = useState<RecoveryStep>('email');\n const [email, setEmail] = useState('');\n const [otp, setOtp] = useState('');\n const [password, setPassword] = useState('');\n const [confirmPassword, setConfirmPassword] = useState('');\n const [localError, setLocalError] = useState<string | null>(null);\n const [selectedMethod, setSelectedMethod] = useState<'email' | 'phone'>('email');\n const [resendCooldown, setResendCooldown] = useState(0);\n\n const error = localError || pwError;\n\n useEffect(() => {\n if (status === 'choice_required') setStep('method-choice');\n else if (status === 'pending_otp') { setStep('otp'); setResendCooldown(60); }\n else if (status === 'pending_password') setStep('password');\n else if (status === 'completed') setStep('success');\n }, [status]);\n\n useEffect(() => {\n if (resendCooldown > 0) {\n const timer = setTimeout(() => setResendCooldown(resendCooldown - 1), 1000);\n return () => clearTimeout(timer);\n }\n }, [resendCooldown]);\n\n const resetState = () => {\n setStep('email'); setEmail(''); setOtp(''); setPassword(''); setConfirmPassword('');\n setLocalError(null); setSelectedMethod('email'); setResendCooldown(0); resetHook();\n };\n\n const handleClose = () => { resetState(); onOpenChange(false); };\n const handleBackToLogin = () => { resetState(); onSuccess(); };\n\n const handleEmailSubmit = async () => {\n setLocalError(null); clearError();\n if (!email.trim()) { setLocalError(\"L'adresse email est requise\"); return; }\n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email.trim())) { setLocalError('Veuillez entrer une adresse email valide'); return; }\n await initRecovery(email.trim());\n };\n\n const handleMethodSubmit = async () => {\n setLocalError(null); clearError();\n await selectMethod(selectedMethod);\n };\n\n const handleOTPSubmit = () => {\n if (otp.length !== 6) { setLocalError('Veuillez entrer le code à 6 chiffres'); return; }\n setLocalError(null); clearError();\n const isValid = verifyOtp(otp);\n if (!isValid) setLocalError('Code incorrect');\n };\n\n const handleResendOTP = async () => {\n if (resendCooldown > 0) return;\n const result = await resendOtp();\n if (result.success) { setResendCooldown(result.cooldown || 60); setOtp(''); setLocalError(null); }\n };\n\n const handlePasswordSubmit = async () => {\n if (password.length < 8) { setLocalError('Le mot de passe doit contenir au moins 8 caractères'); return; }\n if (password !== confirmPassword) { setLocalError('Les mots de passe ne correspondent pas'); return; }\n setLocalError(null); clearError();\n await resetPassword(password);\n };\n\n const goBack = () => {\n setLocalError(null); clearError();\n if (step === 'method-choice') { setStep('email'); resetHook(); }\n else if (step === 'otp') { setStep(maskedPhone ? 'method-choice' : 'email'); resetHook(); }\n else if (step === 'password') setStep('otp');\n };\n\n // ===== SUCCESS =====\n if (step === 'success') {\n return (\n <Dialog open={open} onOpenChange={handleClose}>\n <DialogContent>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={{ ...iconCircle(C.greenBg), width: '5rem', height: '5rem' }}>\n <IconCheckCircle2 style={{ width: '3rem', height: '3rem', color: C.green }} />\n </div>\n <DialogTitle>Mot de passe modifié !</DialogTitle>\n <DialogDescription>Votre mot de passe a été changé avec succès.</DialogDescription>\n </DialogHeader>\n <DialogFooter style={{ borderTop: 'none' }}>\n <Button onClick={handleBackToLogin} style={{ width: '100%' }}>Retour à la connexion</Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n }\n\n return (\n <Dialog open={open} onOpenChange={handleClose}>\n <DialogContent>\n {step !== 'email' && (\n <button onClick={goBack} style={backBtnStyle} type=\"button\">\n <IconArrowLeft style={{ width: '1rem', height: '1rem' }} />\n </button>\n )}\n\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={iconCircle(C.primary + '1a')}>\n {step === 'otp' ? (\n <IconKeyRound style={{ width: '1.5rem', height: '1.5rem', color: C.primary }} />\n ) : (\n <IconLock style={{ width: '1.5rem', height: '1.5rem', color: C.primary }} />\n )}\n </div>\n <DialogTitle>\n {step === 'email' && 'Récupération de mot de passe'}\n {step === 'method-choice' && 'Recevoir le code de vérification'}\n {step === 'otp' && 'Vérification'}\n {step === 'password' && 'Nouveau mot de passe'}\n </DialogTitle>\n <DialogDescription>\n {step === 'email' && 'Veuillez entrer votre adresse email'}\n {step === 'method-choice' && 'Comment souhaitez-vous recevoir le code ?'}\n {step === 'otp' && (receiveMode === 'phone' ? `Code envoyé par SMS au ${maskedPhone}` : `Code envoyé par email à ${maskedEmail}`)}\n {step === 'password' && 'Définissez votre nouveau mot de passe'}\n </DialogDescription>\n </DialogHeader>\n\n <DialogBody>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n {error && <div style={{ padding: '0.75rem', borderRadius: '0.375rem', backgroundColor: C.redBg, color: C.red, fontSize: '0.875rem' }}>{error}</div>}\n\n {step === 'email' && (\n <div><Label htmlFor=\"recovery-email\">Adresse email</Label><Input id=\"recovery-email\" type=\"email\" placeholder=\"vous@exemple.com\" value={email} onChange={e => setEmail(e.target.value)} disabled={pwLoading} /></div>\n )}\n\n {step === 'method-choice' && (\n <RadioGroup value={selectedMethod} onValueChange={v => setSelectedMethod(v as 'email' | 'phone')}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.75rem' }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.75rem', padding: '1rem', borderRadius: '0.5rem', border: `2px solid ${selectedMethod === 'email' ? C.primary : C.gray200}`, cursor: 'pointer' }} onClick={() => setSelectedMethod('email')}>\n <RadioGroupItem value=\"email\" id=\"method-email\" />\n <div><div style={{ fontWeight: 500 }}>Par email</div><div style={{ fontSize: '0.75rem', color: C.gray500 }}>{maskedEmail}</div></div>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.75rem', padding: '1rem', borderRadius: '0.5rem', border: `2px solid ${selectedMethod === 'phone' ? C.primary : C.gray200}`, cursor: 'pointer' }} onClick={() => setSelectedMethod('phone')}>\n <RadioGroupItem value=\"phone\" id=\"method-phone\" />\n <div><div style={{ fontWeight: 500 }}>Par SMS</div><div style={{ fontSize: '0.75rem', color: C.gray500 }}>{maskedPhone}</div></div>\n </div>\n </div>\n </RadioGroup>\n )}\n\n {step === 'otp' && (\n <>\n <OTPInput value={otp} onChange={setOtp} disabled={pwLoading} />\n <div style={{ textAlign: 'center', fontSize: '0.875rem' }}>\n {resendCooldown > 0 ? <span style={{ color: C.gray500 }}>Renvoyer dans {resendCooldown}s</span> : (\n <button type=\"button\" style={{ color: C.primary, background: 'none', border: 'none', cursor: 'pointer', textDecoration: 'underline' }} onClick={handleResendOTP}>Code non reçu ? Renvoyer</button>\n )}\n </div>\n </>\n )}\n\n {step === 'password' && (\n <>\n <div><Label>Nouveau mot de passe</Label><Input type=\"password\" placeholder=\"Minimum 8 caractères\" value={password} onChange={e => setPassword(e.target.value)} disabled={pwLoading} /></div>\n <div><Label>Confirmer le mot de passe</Label><Input type=\"password\" placeholder=\"Retapez votre mot de passe\" value={confirmPassword} onChange={e => setConfirmPassword(e.target.value)} disabled={pwLoading} /></div>\n </>\n )}\n </div>\n </DialogBody>\n\n <DialogFooter>\n {step === 'email' && (\n <>\n <Button onClick={handleEmailSubmit} disabled={pwLoading} style={{ width: '100%' }}>\n {pwLoading ? (\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <IconLoader2 style={{ width: '1rem', height: '1rem' }} /> Vérification...\n </span>\n ) : 'Continuer'}\n </Button>\n <Button variant=\"ghost\" onClick={handleBackToLogin} style={{ width: '100%' }}>Retour à la connexion</Button>\n </>\n )}\n {step === 'method-choice' && (\n <Button onClick={handleMethodSubmit} disabled={pwLoading} style={{ width: '100%' }}>\n {pwLoading ? (\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <IconLoader2 style={{ width: '1rem', height: '1rem' }} /> Envoi...\n </span>\n ) : 'Envoyer le code'}\n </Button>\n )}\n {step === 'otp' && (\n <Button onClick={handleOTPSubmit} disabled={otp.length !== 6} style={{ width: '100%' }}>Vérifier</Button>\n )}\n {step === 'password' && (\n <Button onClick={handlePasswordSubmit} disabled={pwLoading || !password || !confirmPassword} style={{ width: '100%' }}>\n {pwLoading ? (\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <IconLoader2 style={{ width: '1rem', height: '1rem' }} /> Modification...\n </span>\n ) : 'Modifier le mot de passe'}\n </Button>\n )}\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\nexport default PasswordRecoveryModal;\n","/**\n * Hook de vérification périodique du token Sanctum (Auth Check)\n * \n * Le package consulte l'endpoint POST /api/native/check-token du SaaS\n * pour vérifier si l'utilisateur est toujours connecté.\n * \n * - Premier check 60s après login\n * - Checks suivants toutes les 2 min\n * - Si status === 'connected' → met à jour user_infos en localStorage\n * - Si 401 → révoque l'IAM (POST /iam/disconnect) + nettoie le frontend\n * - Ne déconnecte PAS si offline ou serveur inaccessible\n * \n * @version 2.7.0\n */\n\nimport { useEffect, useRef, useCallback } from 'react';\nimport { STORAGE_KEYS, getHeaders, getNativeStorage, ensureDeviceContext } from '../services/api';\nimport type { UserInfos } from '../types/native';\n\nconst FIRST_CHECK_DELAY = 60 * 1000; // 60 secondes\nconst INTERVAL_DELAY = 2 * 60 * 1000; // 2 minutes\n\nexport interface UseTokenHealthCheckOptions {\n /** Whether to enable health checks (true when authenticated) */\n enabled: boolean;\n /** SaaS API base URL */\n saasApiUrl: string;\n /** IAM API base URL (for revocation on 401) */\n iamApiUrl: string;\n /** Called when the backend explicitly invalidates the token (401) */\n onTokenInvalid: () => void;\n /**\n * Optional handler for 401. If provided, it can attempt a refresh and decide\n * whether the session was recovered.\n *\n * Return values:\n * - 'recovered': session is valid again (do NOT call onTokenInvalid)\n * - 'invalid': token is explicitly invalid (call onTokenInvalid)\n * - 'noop': fall back to default behavior\n */\n onUnauthorized?: () => Promise<'recovered' | 'invalid' | 'noop'>;\n /** Called when fresh user_infos are received */\n onUserUpdated?: (userInfos: UserInfos) => void;\n /** Debug mode */\n debug?: boolean;\n}\n\n/**\n * Appelle POST /api/native/check-token sur le SaaS.\n * \n * Le SaaS doit retourner :\n * - 200 { status: 'connected', user: { ...user_infos } } → token valide\n * - 401 { status: 'disconnected', message: '...' } → token invalide\n */\nasync function checkTokenValidity(\n saasApiUrl: string,\n token: string,\n debug: boolean\n): Promise<{ valid: boolean; user?: UserInfos }> {\n // 1. Check connectivity first\n if (typeof navigator !== 'undefined' && !navigator.onLine) {\n if (debug) console.log('🔄 [HealthCheck] Offline — skip');\n throw new Error('offline');\n }\n\n await ensureDeviceContext();\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 10000); // 10s timeout\n\n try {\n const response = await fetch(`${saasApiUrl}/native/check-token`, {\n method: 'POST',\n headers: getHeaders(token, true),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n // 401 = seul signal explicite de déconnexion (Sanctum ou backend)\n if (response.status === 401) {\n if (debug) console.log('🔄 [HealthCheck] Token invalide (401) — déconnexion');\n return { valid: false };\n }\n\n // Tout autre code non-OK = problème serveur, PAS un problème de token → session conservée\n if (!response.ok) {\n if (debug) console.log(`🔄 [HealthCheck] Erreur serveur ${response.status} — session conservée`);\n throw new Error(`server_error_${response.status}`);\n }\n\n const data = await response.json();\n\n // Format standard : { status: 'connected', user: {...} }\n if (data.status === 'connected' && data.user) {\n if (debug) console.log('🔄 [HealthCheck] Token valide ✅ — user_infos mis à jour');\n return { valid: true, user: data.user };\n }\n\n // HTTP 200 = Sanctum a confirmé l'authentification, token valide\n // On ne déconnecte JAMAIS sur un body ambigu : seul le 401 fait foi\n if (debug) console.log('🔄 [HealthCheck] Token valide ✅');\n return { valid: true, user: data.user };\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof Error && error.message === 'offline') {\n throw error;\n }\n\n // Network errors, timeouts, server unreachable → do NOT invalidate\n if (debug) {\n const msg = error instanceof Error ? error.message : 'unknown';\n console.log(`🔄 [HealthCheck] Erreur réseau/serveur (${msg}) — session conservée`);\n }\n throw error;\n }\n}\n\n/**\n * Révoque la session sur l'IAM (fire-and-forget).\n * Appelé quand le SaaS retourne 401 pour s'assurer que l'AppAccessToken\n * est aussi révoqué côté IAM.\n */\nfunction revokeOnIam(iamApiUrl: string, debug: boolean): void {\n try {\n const controller = new AbortController();\n setTimeout(() => controller.abort(), 5000); // 5s timeout\n\n // Récupérer app_access_token_ref pour lookup rapide côté IAM\n const appAccessTokenRef = getNativeStorage().getItem(STORAGE_KEYS.APP_ACCESS_TOKEN_REF);\n\n if (!appAccessTokenRef) return;\n\n const payload: Record<string, string> = { app_access_token_ref: appAccessTokenRef };\n\n if (debug) {\n console.log('🔄 [HealthCheck] Revocation IAM:', { hasRef: true });\n }\n\n fetch(`${iamApiUrl}/iam/disconnect`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n },\n body: JSON.stringify(payload),\n signal: controller.signal,\n }).catch(() => {\n if (debug) console.log('🔄 [HealthCheck] Échec revocation IAM (non-bloquant)');\n });\n } catch {\n // Fire-and-forget — never block\n }\n}\n\nexport function useTokenHealthCheck(options: UseTokenHealthCheckOptions): void {\n const { enabled, saasApiUrl, iamApiUrl, onTokenInvalid, onUnauthorized, onUserUpdated, debug = false } = options;\n\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const enabledRef = useRef(enabled);\n const callbacksRef = useRef({ onTokenInvalid, onUserUpdated });\n\n // Keep refs up to date\n enabledRef.current = enabled;\n callbacksRef.current = { onTokenInvalid, onUserUpdated };\n\n const performCheck = useCallback(async () => {\n if (!enabledRef.current) return;\n\n const storage = getNativeStorage();\n const token = storage.getItem(STORAGE_KEYS.AUTH_TOKEN) || storage.getItem(STORAGE_KEYS.TOKEN);\n\n if (!token) {\n if (debug) console.log('🔄 [HealthCheck] Pas de token — arrêt');\n return;\n }\n\n try {\n const result = await checkTokenValidity(saasApiUrl, token, debug);\n\n if (!result.valid) {\n // Token explicitly rejected by SaaS (401)\n // Optional recovery path: try refresh before invalidating locally.\n if (onUnauthorized) {\n try {\n const decision = await onUnauthorized();\n if (decision === 'recovered') {\n if (debug) console.log('🔄 [HealthCheck] Session récupérée via refresh ✅');\n return;\n }\n if (decision === 'noop') {\n // fall through\n } else if (decision === 'invalid') {\n // proceed to invalidation below\n }\n } catch {\n // ignore, proceed to invalidation below\n }\n }\n\n // 1. Revoke on IAM (fire-and-forget)\n if (iamApiUrl) {\n if (debug) console.log('🔄 [HealthCheck] Revocation IAM avec app_access_token_ref...');\n revokeOnIam(iamApiUrl, debug);\n }\n\n // 2. Clear frontend session\n callbacksRef.current.onTokenInvalid();\n return;\n }\n\n // Token valid — update user_infos if provided\n if (result.user && callbacksRef.current.onUserUpdated) {\n callbacksRef.current.onUserUpdated(result.user);\n }\n } catch {\n // Network/timeout/server error → silently keep session\n }\n }, [saasApiUrl, iamApiUrl, debug, onUnauthorized]);\n\n useEffect(() => {\n // Cleanup previous timers\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n\n if (!enabled || !saasApiUrl) return;\n\n if (debug) console.log('🔄 [HealthCheck] Activé — premier check dans 60s, puis toutes les 2 min');\n\n // First check after 60 seconds\n timerRef.current = setTimeout(() => {\n performCheck();\n\n // Then every 2 minutes\n intervalRef.current = setInterval(performCheck, INTERVAL_DELAY);\n }, FIRST_CHECK_DELAY);\n\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n if (intervalRef.current) clearInterval(intervalRef.current);\n };\n }, [enabled, saasApiUrl, performCheck, debug]);\n}\n\nexport default useTokenHealthCheck;\n","/**\n * Hook d'authentification Native SSO v1.0\n * Architecture Frontend-First avec appels directs à l'IAM\n * \n * @version 2.7.0\n */\n\nimport { useState, useCallback, useEffect, useRef } from 'react';\nimport { nativeAuthService } from '../services/nativeAuth';\nimport { getNativeStorage, setNativeAuthConfig, setNativeStorage, STORAGE_KEYS, isDebugMode, type NativeStorageAdapter } from '../services/api';\nimport { useTokenHealthCheck } from './useTokenHealthCheck';\nimport type {\n NativeAuthState,\n NativeAuthStatus,\n NativeExchangeResponse,\n AccountType,\n UserInfos,\n} from '../types/native';\n\n/** Helper: persist session to localStorage (unified keys) */\nfunction saveSession(exchangeResult: NativeExchangeResponse, accountType: AccountType | 'user' | 'client') {\n const storage = getNativeStorage();\n const sanctumToken = exchangeResult.auth_token || exchangeResult.token;\n storage.setItem(STORAGE_KEYS.AUTH_TOKEN, sanctumToken);\n if (exchangeResult.expires_at) {\n storage.setItem(STORAGE_KEYS.TOKEN_EXPIRES_AT, exchangeResult.expires_at);\n }\n if (exchangeResult.refresh_token) {\n storage.setItem(STORAGE_KEYS.REFRESH_TOKEN, exchangeResult.refresh_token);\n }\n if (exchangeResult.refresh_expires_at) {\n storage.setItem(STORAGE_KEYS.REFRESH_EXPIRES_AT, exchangeResult.refresh_expires_at);\n }\n \n // Build user object from user_infos if available, otherwise from user\n const baseUser = exchangeResult.user_infos \n ? { ...exchangeResult.user, ...exchangeResult.user_infos }\n : exchangeResult.user;\n \n // Enrich user with iam_reference and alias_reference\n const aliasRef = exchangeResult.user?.alias_reference || exchangeResult.alias_reference || '';\n const iamRef = exchangeResult.user?.reference || '';\n \n const userToStore = {\n ...baseUser,\n iam_reference: iamRef,\n alias_reference: aliasRef,\n };\n \n // Store alias_reference separately for quick access\n if (aliasRef) {\n storage.setItem(STORAGE_KEYS.ALIAS_REFERENCE, aliasRef);\n }\n \n // Store app_access_token_ref for fast IAM revocation\n if (exchangeResult.app_access_token_ref) {\n storage.setItem(STORAGE_KEYS.APP_ACCESS_TOKEN_REF, exchangeResult.app_access_token_ref);\n }\n \n // account_type is stored SEPARATELY, never inside the user object\n // Use the accountType string directly (already resolved by the caller)\n const acctType = typeof accountType === 'string' ? accountType : 'user';\n storage.setItem(STORAGE_KEYS.USER, JSON.stringify(userToStore));\n storage.setItem(STORAGE_KEYS.ACCOUNT_TYPE, acctType);\n \n return { token: sanctumToken, user: userToStore };\n}\n\n/** Helper: clear session from localStorage */\nfunction clearSession() {\n const storage = getNativeStorage();\n storage.removeItem(STORAGE_KEYS.AUTH_TOKEN);\n storage.removeItem(STORAGE_KEYS.TOKEN);\n storage.removeItem(STORAGE_KEYS.USER);\n storage.removeItem(STORAGE_KEYS.ACCOUNT_TYPE);\n storage.removeItem(STORAGE_KEYS.ALIAS_REFERENCE);\n storage.removeItem(STORAGE_KEYS.APP_ACCESS_TOKEN_REF);\n storage.removeItem(STORAGE_KEYS.REFRESH_TOKEN);\n storage.removeItem(STORAGE_KEYS.TOKEN_EXPIRES_AT);\n storage.removeItem(STORAGE_KEYS.REFRESH_EXPIRES_AT);\n}\n\nfunction getErrorMessage(err: unknown, context: string): { message: string; type: string } {\n if (err instanceof Error) {\n if (err.message.includes('fetch') || err.message.includes('network')) {\n return { message: 'Vérifiez votre connexion Internet', type: 'network' };\n }\n if (err.message.includes('timeout')) {\n return { message: 'Le serveur met trop de temps à répondre', type: 'timeout' };\n }\n return { message: err.message, type: 'unknown' };\n }\n return { message: `Erreur lors de ${context}`, type: 'unknown' };\n}\n\nexport interface UseNativeAuthOptions {\n /** URL du Backend SaaS */\n saasApiUrl: string;\n /** URL du Backend IAM */\n iamApiUrl: string;\n /** Charger les credentials automatiquement au montage */\n autoLoadCredentials?: boolean;\n /** Type de compte par défaut à persister (défaut: 'user') */\n defaultAccountType?: 'user' | 'client';\n /** \n * Préfixe de configuration IAM côté backend (défaut: 'iam').\n * Permet le multi-tenant dynamique : 'iam', 'iam_vendor', 'iam_client', etc.\n */\n configPrefix?: string;\n /** Stockage injecté pour les apps natives / Capacitor */\n storage?: NativeStorageAdapter;\n}\n\nexport function useNativeAuth(options: UseNativeAuthOptions) {\n const { saasApiUrl, iamApiUrl, autoLoadCredentials = true, defaultAccountType = 'user', configPrefix = 'iam', storage } = options;\n\n if (storage) {\n setNativeStorage(storage);\n }\n \n const configuredRef = useRef(false);\n \n // Debug réactif : mis à jour après loadCredentials\n const [isDebug, setIsDebug] = useState(isDebugMode());\n \n useEffect(() => {\n if (!configuredRef.current) {\n setNativeAuthConfig({ saasApiUrl, iamApiUrl, configPrefix, storage });\n configuredRef.current = true;\n }\n }, [saasApiUrl, iamApiUrl, configPrefix, storage]);\n\n const [state, setState] = useState<NativeAuthState & { otpMethod?: string | null; otpSentTo?: string | null }>({\n credentialsLoaded: false,\n processToken: null,\n status: null,\n user: null,\n application: null,\n prompt: null,\n alternativeMethod: null,\n conflict: null,\n loading: false,\n error: null,\n errorType: null,\n otpMethod: null,\n otpSentTo: null,\n });\n\n const [accountType, setAccountType] = useState<AccountType>('email');\n\n // --- Token Health Check ---\n const handleTokenInvalid = useCallback(() => {\n if (isDebug) console.log('🔐 [HealthCheck] Token invalide — déconnexion locale');\n clearSession();\n setState({\n credentialsLoaded: false,\n processToken: null,\n status: null,\n user: null,\n application: null,\n prompt: null,\n alternativeMethod: null,\n conflict: null,\n loading: false,\n error: null,\n errorType: null,\n otpMethod: null,\n otpSentTo: null,\n });\n }, [isDebug]);\n\n const handleUserUpdated = useCallback((userInfos: UserInfos) => {\n // Merge fresh user_infos into stored user\n const storedRaw = getNativeStorage().getItem(STORAGE_KEYS.USER);\n if (storedRaw) {\n try {\n const stored = JSON.parse(storedRaw);\n const merged = { ...stored, ...userInfos };\n getNativeStorage().setItem(STORAGE_KEYS.USER, JSON.stringify(merged));\n setState(prev => ({ ...prev, user: merged }));\n } catch { /* ignore */ }\n }\n }, []);\n\n const refreshingRef = useRef(false);\n const tryRefreshSession = useCallback(async (): Promise<'recovered' | 'invalid' | 'noop'> => {\n // Avoid parallel refreshes\n if (refreshingRef.current) return 'noop';\n refreshingRef.current = true;\n try {\n const refreshToken = getNativeStorage().getItem(STORAGE_KEYS.REFRESH_TOKEN);\n if (!refreshToken) {\n if (isDebug) console.log('🔐 [Refresh] Pas de refresh_token — impossible de recuperer');\n return 'noop';\n }\n\n // Offline: never logout and don't attempt refresh\n if (typeof navigator !== 'undefined' && !navigator.onLine) {\n if (isDebug) console.log('🔐 [Refresh] Offline — skip');\n return 'noop';\n }\n\n const res = await nativeAuthService.refresh();\n if (res.success) {\n // Update in-memory state from localStorage\n const storedUser = getNativeStorage().getItem(STORAGE_KEYS.USER);\n if (storedUser) {\n try {\n const user = JSON.parse(storedUser);\n setState(prev => ({ ...prev, user, status: 'completed' }));\n } catch {\n // ignore\n }\n }\n return 'recovered';\n }\n\n // If backend explicitly rejects refresh, treat as invalid session\n if (res.success === false && res.error_type === 'invalid_refresh') {\n if (isDebug) console.log('🔐 [Refresh] invalid_refresh — deconnexion autorisee');\n return 'invalid';\n }\n\n return 'noop';\n } catch (err) {\n // Network/timeout/5xx => keep session\n if (isDebug) console.log('🔐 [Refresh] Echec refresh (non-bloquant)');\n return 'noop';\n } finally {\n refreshingRef.current = false;\n }\n }, [isDebug]);\n\n useTokenHealthCheck({\n enabled: state.status === 'completed' && state.user !== null,\n saasApiUrl,\n iamApiUrl,\n onTokenInvalid: handleTokenInvalid,\n onUnauthorized: tryRefreshSession,\n onUserUpdated: handleUserUpdated,\n debug: isDebug,\n });\n\n // Proactive refresh based on expires_at (best-effort)\n useEffect(() => {\n if (state.status !== 'completed' || !state.user) return;\n\n const expiresAt = getNativeStorage().getItem(STORAGE_KEYS.TOKEN_EXPIRES_AT);\n if (!expiresAt) return;\n\n const ts = Date.parse(expiresAt);\n if (Number.isNaN(ts)) return;\n\n // Refresh 5 minutes before expiry (server time skew tolerant)\n const marginMs = 5 * 60 * 1000;\n const delay = Math.max(ts - Date.now() - marginMs, 30 * 1000); // at least 30s\n\n const t = setTimeout(() => {\n tryRefreshSession();\n }, delay);\n\n return () => clearTimeout(t);\n }, [state.status, state.user, tryRefreshSession]);\n\n // Check existing session\n useEffect(() => {\n const storage = getNativeStorage();\n const storedToken = storage.getItem(STORAGE_KEYS.AUTH_TOKEN) || storage.getItem(STORAGE_KEYS.TOKEN);\n const storedUser = storage.getItem(STORAGE_KEYS.USER);\n \n if (storedToken && storedUser) {\n try {\n const user = JSON.parse(storedUser);\n setState(prev => ({ ...prev, user, status: 'completed' }));\n } catch {\n clearSession();\n }\n }\n }, []);\n\n // Background auto-refresh of credentials before TTL expiration\n useEffect(() => {\n // Only refresh while user is NOT authenticated and credentials are loaded\n if (state.status === 'completed' || !state.credentialsLoaded) return;\n\n const ttl = nativeAuthService.getCredentialsTtl();\n const refreshInterval = Math.max((ttl - 30) * 1000, 30000); // At least 30s\n\n if (isDebug) {\n console.log(`🔄 [Native] Auto-refresh credentials every ${refreshInterval / 1000}s (TTL: ${ttl}s)`);\n }\n\n const timer = setInterval(async () => {\n try {\n await nativeAuthService.loadCredentials();\n // Re-check debug après refresh (le backend peut changer la valeur)\n setIsDebug(isDebugMode());\n if (isDebugMode()) console.log('✅ [Native] Credentials auto-refreshed');\n } catch (err) {\n if (isDebugMode()) console.warn('⚠️ [Native] Auto-refresh failed:', err);\n }\n }, refreshInterval);\n\n return () => clearInterval(timer);\n }, [state.status, state.credentialsLoaded, isDebug]);\n\n const loadCredentials = useCallback(async () => {\n setState(prev => ({ ...prev, loading: true, error: null }));\n try {\n await nativeAuthService.loadCredentials();\n // Mettre à jour le debug réactif après chargement des credentials\n setIsDebug(isDebugMode());\n setState(prev => ({ ...prev, credentialsLoaded: true, loading: false }));\n return { success: true };\n } catch (err) {\n const { message, type } = getErrorMessage(err, 'le chargement');\n setState(prev => ({ ...prev, loading: false, error: message, errorType: type }));\n return { success: false, error_type: type };\n }\n }, []);\n\n // Auto-load credentials\n useEffect(() => {\n if (autoLoadCredentials && !state.credentialsLoaded && !state.user) {\n loadCredentials();\n }\n }, [autoLoadCredentials, state.credentialsLoaded, state.user, loadCredentials]);\n\n const loginWithEmail = useCallback(async (\n email: string,\n acctType: 'user' | 'admin' = 'user'\n ) => {\n setState(prev => ({ ...prev, loading: true, error: null, errorType: null }));\n try {\n if (!nativeAuthService.hasCredentials()) {\n await nativeAuthService.loadCredentials();\n }\n const response = await nativeAuthService.loginEmail(email, acctType);\n\n // Garde: ancien backend peut retourner needs_access directement depuis init\n if (response.success && (response.status === 'needs_access' || response.needs_access)) {\n setState(prev => ({\n ...prev,\n processToken: response.process_token || null,\n status: 'needs_access' as NativeAuthStatus,\n application: response.application || null,\n prompt: response.prompt || null,\n user: response.user ? {\n reference: `USR-${response.user.id}`,\n name: response.user.name,\n email: response.user.email,\n } : null,\n loading: false,\n }));\n return { success: true, status: 'needs_access' };\n }\n\n if (response.success && response.process_token) {\n setState(prev => ({\n ...prev,\n processToken: response.process_token!,\n status: response.status as NativeAuthStatus,\n application: response.application || null,\n prompt: response.prompt || null,\n user: response.user ? {\n reference: `USR-${response.user.id}`,\n name: response.user.name,\n email: response.user.email,\n } : null,\n loading: false,\n }));\n return { success: true, status: response.status };\n }\n\n if (response.error_type === 'alias_disabled' && response.alternative_method) {\n setState(prev => ({\n ...prev,\n alternativeMethod: {\n type: response.alternative_method!,\n value: response.alternative_method === 'email' \n ? response.alternative_email! \n : response.alternative_phone!,\n },\n loading: false,\n error: 'Cette méthode de connexion est désactivée',\n errorType: 'alias_disabled',\n }));\n return { success: false, error_type: 'alias_disabled' };\n }\n\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Erreur d\\'authentification',\n errorType: response.error_type || 'unknown',\n }));\n return { success: false, error_type: response.error_type };\n } catch (err) {\n const { message, type } = getErrorMessage(err, 'l\\'authentification');\n setState(prev => ({ ...prev, loading: false, error: message, errorType: type }));\n return { success: false, error_type: type };\n }\n }, []);\n\n const loginWithPhone = useCallback(async (\n ccphone: string,\n phone: string,\n acctType: 'user' | 'admin' = 'user'\n ) => {\n setState(prev => ({ ...prev, loading: true, error: null, errorType: null }));\n try {\n if (!nativeAuthService.hasCredentials()) {\n await nativeAuthService.loadCredentials();\n }\n const response = await nativeAuthService.loginPhone(ccphone, phone, acctType);\n\n // Garde: ancien backend peut retourner needs_access directement depuis init\n if (response.success && (response.status === 'needs_access' || response.needs_access)) {\n setState(prev => ({\n ...prev,\n processToken: response.process_token || null,\n status: 'needs_access' as NativeAuthStatus,\n application: response.application || null,\n user: response.user ? {\n reference: `USR-${response.user.id}`,\n name: response.user.name,\n email: response.user.email,\n } : null,\n loading: false,\n }));\n return { success: true, status: 'needs_access' };\n }\n\n if (response.success && response.process_token) {\n setState(prev => ({\n ...prev,\n processToken: response.process_token!,\n status: response.status as NativeAuthStatus,\n application: response.application || null,\n loading: false,\n }));\n return { success: true, status: response.status };\n }\n\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Erreur d\\'authentification',\n errorType: response.error_type || 'unknown',\n }));\n return { success: false, error_type: response.error_type };\n } catch (err) {\n const { message, type } = getErrorMessage(err, 'l\\'authentification');\n setState(prev => ({ ...prev, loading: false, error: message, errorType: type }));\n return { success: false, error_type: type };\n }\n }, []);\n\n const loginWithAccessOtp = useCallback(async (otpCode: string) => {\n setState(prev => ({ ...prev, loading: true, error: null }));\n try {\n if (!nativeAuthService.hasCredentials()) {\n await nativeAuthService.loadCredentials();\n }\n const response = await nativeAuthService.loginAccessOtp(otpCode);\n\n // v4.5: Handle needs_access (user needs to confirm access)\n // Tolère success:true ou success:false avec needs_access\n if ((response.needs_access || response.status === 'needs_access') && response.process_token) {\n setState(prev => ({\n ...prev,\n processToken: response.process_token!,\n status: 'needs_access' as NativeAuthStatus,\n application: response.application || null,\n user: response.user ? {\n reference: `USR-${response.user.id}`,\n name: response.user.name,\n email: response.user.email,\n } : null,\n loading: false,\n }));\n return { success: true, status: 'needs_access' };\n }\n\n // v4.5: Handle direct callback_token (user already has access)\n if (response.success && response.callback_token) {\n setState(prev => ({ ...prev, loading: false }));\n return { success: true, status: 'completed', callback_token: response.callback_token };\n }\n\n // Legacy: Handle process_token response\n if (response.success && response.process_token) {\n setState(prev => ({\n ...prev,\n processToken: response.process_token!,\n status: response.status as NativeAuthStatus,\n loading: false,\n }));\n return { success: true, status: response.status };\n }\n\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Code invalide',\n errorType: response.error_type || 'invalid_otp',\n }));\n return { success: false, error_type: response.error_type };\n } catch (err) {\n const { message, type } = getErrorMessage(err, 'l\\'authentification');\n setState(prev => ({ ...prev, loading: false, error: message, errorType: type }));\n return { success: false, error_type: type };\n }\n }, []);\n\n const register = useCallback(async (\n data: {\n name: string;\n email?: string;\n ccphone: string;\n phone: string;\n town?: string;\n country?: string;\n }\n ) => {\n setState(prev => ({ ...prev, loading: true, error: null, errorType: null }));\n try {\n if (!nativeAuthService.hasCredentials()) {\n await nativeAuthService.loadCredentials();\n }\n const registrationType = accountType === 'phone-only' ? 'phone' : 'email';\n \n const response = await nativeAuthService.register({\n ...data,\n email: registrationType === 'phone' ? '' : data.email,\n registration_type: registrationType,\n });\n\n if (response.success && response.process_token) {\n setState(prev => ({\n ...prev,\n processToken: response.process_token!,\n status: response.status as NativeAuthStatus,\n otpMethod: response.otp_method || null,\n otpSentTo: response.otp_sent_to || null,\n conflict: response.conflict ? {\n type: response.conflict.type,\n maskedIdentifier: response.conflict.masked_identifier,\n options: {\n canLogin: response.conflict.options.can_login,\n canRecoverByEmail: response.conflict.options.can_recover_by_email,\n canRecoverBySms: response.conflict.options.can_recover_by_sms,\n maskedEmail: response.conflict.options.masked_email,\n maskedPhone: response.conflict.options.masked_phone,\n },\n } : null,\n loading: false,\n }));\n return { success: true, status: response.status };\n }\n\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Erreur lors de l\\'inscription',\n errorType: response.error_type || 'unknown',\n }));\n return { success: false, error_type: response.error_type };\n } catch (err) {\n const { message, type } = getErrorMessage(err, 'l\\'inscription');\n setState(prev => ({ ...prev, loading: false, error: message, errorType: type }));\n return { success: false, error_type: type };\n }\n }, [accountType]);\n\n const submitPassword = useCallback(async (password: string) => {\n if (!state.processToken) {\n return { success: false, error: 'Session invalide' };\n }\n setState(prev => ({ ...prev, loading: true, error: null }));\n try {\n const response = await nativeAuthService.validate(state.processToken, { password });\n\n if (response.success && response.callback_token) {\n const exchangeResult = await nativeAuthService.exchange(response.callback_token);\n if (exchangeResult.success) {\n const { user: savedUser } = saveSession(exchangeResult, defaultAccountType);\n setState(prev => ({\n ...prev,\n status: 'completed',\n user: savedUser,\n processToken: null,\n loading: false,\n }));\n return { success: true, user: savedUser, callback_token: response.callback_token };\n }\n setState(prev => ({\n ...prev,\n loading: false,\n error: exchangeResult.message || 'Erreur lors de l\\'échange',\n errorType: 'exchange_failed',\n }));\n return { success: false, error_type: 'exchange_failed' };\n }\n\n if (response.requires_2fa) {\n setState(prev => ({ ...prev, status: 'pending_2fa', loading: false }));\n return { success: true, requires_2fa: true };\n }\n\n // needs_access after password validation — stocker le nouveau process_token\n if (response.success && (response.status === 'needs_access' || response.needs_access)) {\n setState(prev => ({\n ...prev,\n status: 'needs_access' as NativeAuthStatus,\n processToken: response.process_token || prev.processToken,\n application: response.application || prev.application,\n user: response.user ? {\n reference: `USR-${response.user.id}`,\n name: response.user.name,\n email: response.user.email,\n } : prev.user,\n prompt: response.prompt || prev.prompt,\n loading: false,\n }));\n return { success: true, status: 'needs_access' };\n }\n\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Mot de passe incorrect',\n errorType: response.error_type || 'invalid_password',\n }));\n return { success: false, error_type: response.error_type };\n } catch (err) {\n const { message, type } = getErrorMessage(err, 'la validation');\n setState(prev => ({ ...prev, loading: false, error: message, errorType: type }));\n return { success: false, error_type: type };\n }\n }, [state.processToken, defaultAccountType]);\n\n const submitOtp = useCallback(async (otpCode: string) => {\n if (!state.processToken) {\n return { success: false, error: 'Session invalide' };\n }\n setState(prev => ({ ...prev, loading: true, error: null }));\n try {\n const response = await nativeAuthService.validate(state.processToken, { otp_code: otpCode });\n\n if (response.success && response.callback_token) {\n const exchangeResult = await nativeAuthService.exchange(response.callback_token);\n if (exchangeResult.success) {\n const { user: savedUser } = saveSession(exchangeResult, defaultAccountType);\n setState(prev => ({\n ...prev,\n status: 'completed',\n user: savedUser,\n processToken: null,\n loading: false,\n }));\n return { success: true, user: savedUser, callback_token: response.callback_token };\n }\n setState(prev => ({\n ...prev,\n loading: false,\n error: exchangeResult.message || 'Erreur lors de l\\'échange',\n errorType: 'exchange_failed',\n }));\n return { success: false, error_type: 'exchange_failed' };\n }\n\n if (response.success && response.status === 'pending_registration') {\n setState(prev => ({ ...prev, status: 'pending_registration', loading: false }));\n return { success: true, status: 'pending_registration' };\n }\n\n // needs_access after OTP validation — stocker le nouveau process_token\n if (response.success && (response.status === 'needs_access' || response.needs_access)) {\n setState(prev => ({\n ...prev,\n status: 'needs_access' as NativeAuthStatus,\n processToken: response.process_token || prev.processToken,\n application: response.application || prev.application,\n user: response.user ? {\n reference: `USR-${response.user.id}`,\n name: response.user.name,\n email: response.user.email,\n } : prev.user,\n prompt: response.prompt || prev.prompt,\n loading: false,\n }));\n return { success: true, status: 'needs_access' };\n }\n\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Code incorrect',\n errorType: response.error_type || 'invalid_otp',\n }));\n return { success: false, error_type: response.error_type };\n } catch (err) {\n const { message, type } = getErrorMessage(err, 'la vérification');\n setState(prev => ({ ...prev, loading: false, error: message, errorType: type }));\n return { success: false, error_type: type };\n }\n }, [state.processToken, defaultAccountType]);\n\n const submitTotp = useCallback(async (totpCode: string) => {\n if (!state.processToken) {\n return { success: false, error: 'Session invalide' };\n }\n setState(prev => ({ ...prev, loading: true, error: null }));\n try {\n const response = await nativeAuthService.verifyTotp(state.processToken, totpCode);\n\n if (response.success && response.callback_token) {\n const exchangeResult = await nativeAuthService.exchange(response.callback_token);\n if (exchangeResult.success) {\n const { user: savedUser } = saveSession(exchangeResult, defaultAccountType);\n setState(prev => ({\n ...prev,\n status: 'completed',\n user: savedUser,\n processToken: null,\n loading: false,\n }));\n return { success: true, user: savedUser };\n }\n }\n\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Code 2FA incorrect',\n errorType: response.error_type || 'invalid_totp',\n }));\n return { success: false, error_type: response.error_type };\n } catch (err) {\n const { message, type } = getErrorMessage(err, 'la vérification 2FA');\n setState(prev => ({ ...prev, loading: false, error: message, errorType: type }));\n return { success: false, error_type: type };\n }\n }, [state.processToken, defaultAccountType]);\n\n const grantAccess = useCallback(async () => {\n if (!state.processToken) {\n return { success: false, error: 'Session invalide' };\n }\n setState(prev => ({ ...prev, loading: true, error: null }));\n try {\n const response = await nativeAuthService.grantAccess(state.processToken);\n\n if (response.success && response.callback_token) {\n const exchangeResult = await nativeAuthService.exchange(response.callback_token);\n if (exchangeResult.success) {\n const { user: savedUser } = saveSession(exchangeResult, defaultAccountType);\n setState(prev => ({\n ...prev,\n status: 'completed',\n user: savedUser,\n processToken: null,\n loading: false,\n }));\n return { success: true, user: savedUser, callback_token: response.callback_token };\n }\n }\n\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Erreur lors de l\\'accès',\n errorType: response.error_type || 'unknown',\n }));\n return { success: false };\n } catch (err) {\n const { message, type } = getErrorMessage(err, 'l\\'accès');\n setState(prev => ({ ...prev, loading: false, error: message, errorType: type }));\n return { success: false, error_type: type };\n }\n }, [state.processToken, defaultAccountType]);\n\n const resendOtp = useCallback(async () => {\n if (!state.processToken) {\n return { success: false, error: 'Session invalide' };\n }\n setState(prev => ({ ...prev, loading: true, error: null }));\n try {\n const response = await nativeAuthService.resendOtp(state.processToken);\n setState(prev => ({ ...prev, loading: false }));\n return { \n success: response.success, \n cooldown: response.cooldown_remaining,\n message: response.message,\n otp_code_dev: response.otp_code_dev,\n };\n } catch (err) {\n const { message, type } = getErrorMessage(err, 'le renvoi');\n setState(prev => ({ ...prev, loading: false, error: message, errorType: type }));\n return { success: false };\n }\n }, [state.processToken]);\n\n const setSession = useCallback((data: NativeExchangeResponse) => {\n const { user: savedUser } = saveSession(data, defaultAccountType);\n setState(prev => ({\n ...prev,\n user: savedUser,\n status: 'completed',\n processToken: null,\n }));\n }, [defaultAccountType]);\n\n const logout = useCallback(async () => {\n const storage = getNativeStorage();\n const token = storage.getItem(STORAGE_KEYS.AUTH_TOKEN) || storage.getItem(STORAGE_KEYS.TOKEN);\n try {\n if (token) {\n await nativeAuthService.logout(token);\n }\n } catch { /* ignore */ }\n\n clearSession();\n \n setState({\n credentialsLoaded: false,\n processToken: null,\n status: null,\n user: null,\n application: null,\n prompt: null,\n alternativeMethod: null,\n conflict: null,\n loading: false,\n error: null,\n errorType: null,\n otpMethod: null,\n otpSentTo: null,\n });\n }, []);\n\n const reset = useCallback(() => {\n setState(prev => ({\n ...prev,\n processToken: null,\n status: null,\n application: null,\n prompt: null,\n alternativeMethod: null,\n conflict: null,\n error: null,\n errorType: null,\n }));\n }, []);\n\n const clearError = useCallback(() => {\n setState(prev => ({ ...prev, error: null, errorType: null }));\n }, []);\n\n return {\n // State\n credentialsLoaded: state.credentialsLoaded,\n processToken: state.processToken,\n status: state.status,\n user: state.user,\n application: state.application,\n prompt: state.prompt,\n alternativeMethod: state.alternativeMethod,\n conflict: state.conflict,\n loading: state.loading,\n error: state.error,\n errorType: state.errorType,\n isAuthenticated: state.status === 'completed' && state.user !== null,\n \n /** Debug réactif — mis à jour après loadCredentials */\n isDebug,\n \n accountType,\n isPhoneOnly: accountType === 'phone-only',\n otpMethod: state.otpMethod,\n otpSentTo: state.otpSentTo,\n\n // Methods\n loadCredentials,\n loginWithEmail,\n loginWithPhone,\n loginWithAccessOtp,\n submitPassword,\n submitOtp,\n submitTotp,\n grantAccess,\n resendOtp,\n setSession,\n logout,\n reset,\n clearError,\n register,\n setAccountType,\n };\n}\n\nexport default useNativeAuth;\n","/**\n * Login Modal for @ollaid/native-sso\n * Complete login flow aligned with Native SSO design\n * \n * @version 2.7.0\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport {\n Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogBody, DialogFooter,\n Button, Input, Label,\n IconShieldCheck, IconMail, IconPhone, IconLock, IconKeyRound,\n IconArrowLeft, IconEye, IconEyeOff, IconCheckCircle2, IconLoader2,\n} from './ui';\nimport OTPInput from './OTPInput';\nimport PasswordRecoveryModal from './PasswordRecoveryModal';\nimport { useNativeAuth } from '../hooks/useNativeAuth';\nimport { getAuthToken } from '../services/api';\nimport type { UserInfos } from '../types/native';\n\ntype LoginStep = 'choice' | 'email-check' | 'email-password' | 'email-otp' | 'email-create-password' | 'phone-input' | 'phone-otp' | 'access-otp';\n\nexport interface LoginModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onSwitchToSignup: () => void;\n onLoginSuccess?: (token: string, user: UserInfos) => void;\n saasApiUrl: string;\n iamApiUrl: string;\n loading?: boolean;\n showSwitchToSignup?: boolean;\n /** Type de compte par défaut à persister dans localStorage */\n defaultAccountType?: 'user' | 'client';\n /** Pre-fill phone number and go directly to phone-input step */\n initialPhone?: string;\n}\n\ntype LoginResult = {\n success: boolean;\n user?: Partial<UserInfos> & Pick<UserInfos, 'name'>;\n};\n\n// Design tokens\nconst C = {\n primary: '#002147',\n accent: '#e8430a',\n green: '#16a34a',\n greenBg: '#dcfce7',\n amber: '#f59e0b',\n amberBg: '#fef3c7',\n gray100: '#f3f4f6',\n gray200: '#e5e7eb',\n gray500: '#6b7280',\n gray700: '#374151',\n gray900: '#111827',\n red: '#dc2626',\n redBg: '#fef2f2',\n white: '#ffffff',\n} as const;\n\n// Reusable style helpers\nconst iconCircle = (bg: string): React.CSSProperties => ({\n margin: '0 auto', width: '3rem', height: '3rem', backgroundColor: bg, borderRadius: '50%',\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n});\n\nconst backBtnStyle: React.CSSProperties = {\n position: 'absolute', left: '1rem', top: '1rem', background: 'none', border: 'none',\n cursor: 'pointer', padding: '0.5rem', borderRadius: '0.375rem', color: C.gray700, zIndex: 10,\n};\n\nconst linkStyle: React.CSSProperties = {\n color: C.primary, cursor: 'pointer', background: 'none', border: 'none',\n fontWeight: 500, textDecoration: 'underline', fontSize: '0.875rem',\n};\n\nconst errorBoxStyle: React.CSSProperties = {\n padding: '0.75rem', borderRadius: '0.375rem', backgroundColor: C.redBg,\n color: C.red, fontSize: '0.875rem',\n};\n\nconst methodBtnStyle: React.CSSProperties = {\n width: '100%', height: '3.5rem', justifyContent: 'flex-start', gap: '0.75rem',\n textAlign: 'left' as const, backgroundColor: C.gray100, borderColor: C.gray200,\n};\n\nconst methodIconStyle = (bg: string): React.CSSProperties => ({\n width: '2.5rem', height: '2.5rem', backgroundColor: bg, borderRadius: '0.5rem',\n display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0,\n});\n\nexport function LoginModal({\n open, onOpenChange, onSwitchToSignup, onLoginSuccess, saasApiUrl, iamApiUrl, loading, showSwitchToSignup = true, defaultAccountType, initialPhone,\n}: LoginModalProps) {\n const {\n status, user, application, alternativeMethod, loading: authLoading, error: authError,\n loginWithEmail, loginWithPhone, submitPassword, submitOtp, grantAccess, loginWithAccessOtp,\n resendOtp, reset: resetAuth, clearError,\n } = useNativeAuth({ saasApiUrl, iamApiUrl, defaultAccountType });\n\n const [step, setStep] = useState<LoginStep>('choice');\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [showPassword, setShowPassword] = useState(false);\n const [userName, setUserName] = useState<string | null>(null);\n const [phone, setPhone] = useState('');\n const [phoneOtpCode, setPhoneOtpCode] = useState('');\n const [emailOtpCode, setEmailOtpCode] = useState('');\n const [accessOtpCode, setAccessOtpCode] = useState('');\n const [localError, setLocalError] = useState<string | null>(null);\n const [resendCooldown, setResendCooldown] = useState(0);\n const [loginSuccess, setLoginSuccess] = useState(false);\n const [loginData, setLoginData] = useState<{ token: string; user: UserInfos } | null>(null);\n const [showPasswordRecovery, setShowPasswordRecovery] = useState(false);\n\n const CCPHONE = '+221';\n const isSubmitting = authLoading || loading;\n const error = localError || authError;\n\n useEffect(() => {\n if (resendCooldown > 0) {\n const timer = setTimeout(() => setResendCooldown(p => p - 1), 1000);\n return () => clearTimeout(timer);\n }\n }, [resendCooldown]);\n\n useEffect(() => {\n if (status === 'pending_password') setStep('email-password');\n else if (status === 'pending_otp') {\n if (step === 'email-check' || step === 'email-password') setStep('email-otp');\n else if (step === 'phone-input') setStep('phone-otp');\n setResendCooldown(60);\n }\n }, [status, step]);\n\n useEffect(() => {\n if (loginSuccess && loginData) {\n const timer = setTimeout(() => {\n onLoginSuccess?.(loginData.token, loginData.user);\n }, 1000);\n return () => clearTimeout(timer);\n }\n }, [loginSuccess, loginData, onLoginSuccess]);\n\n const resetState = useCallback(() => {\n setStep('choice'); setEmail(''); setPassword('');\n setShowPassword(false); setUserName(null); setPhone(''); setPhoneOtpCode(''); setEmailOtpCode('');\n setAccessOtpCode(''); setLocalError(null); setLoginSuccess(false); setLoginData(null);\n setResendCooldown(0); resetAuth();\n }, [resetAuth]);\n\n useEffect(() => { if (!open) resetState(); }, [open, resetState]);\n\n // Pre-fill phone from conflict resolution\n useEffect(() => {\n if (open && initialPhone) {\n setStep('phone-input');\n setPhone(initialPhone);\n }\n }, [open, initialPhone]);\n\n /**\n * Finalise la connexion après que useNativeAuth ait déjà fait l'exchange.\n * Ne PAS re-appeler nativeAuthService.exchange() ici — le hook l'a déjà fait.\n */\n const finalizeLogin = (result: LoginResult) => {\n if (result.success && result.user) {\n const token = getAuthToken() || '';\n setLoginData({ token, user: result.user as UserInfos });\n setLoginSuccess(true);\n }\n };\n\n const handleEmailCheck = async () => {\n setLocalError(null); clearError();\n if (!email.trim()) { setLocalError(\"L'adresse email est requise\"); return; }\n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)) { setLocalError('Adresse email invalide'); return; }\n const result = await loginWithEmail(email.trim());\n if (result.success && user?.name) setUserName(user.name);\n };\n\n const handleEmailPasswordSubmit = async (e: React.FormEvent) => {\n e.preventDefault(); setLocalError(null); clearError();\n if (!password) { setLocalError('Le mot de passe est requis'); return; }\n if (password.length < 8) { setLocalError('Le mot de passe doit contenir au moins 8 caractères'); return; }\n const result = await submitPassword(password);\n finalizeLogin(result);\n };\n\n const handleEmailOtpVerify = async () => {\n setLocalError(null); clearError();\n if (emailOtpCode.length !== 6) { setLocalError('Le code doit contenir 6 chiffres'); return; }\n const result = await submitOtp(emailOtpCode);\n finalizeLogin(result);\n };\n\n const handlePhoneInit = async () => {\n setLocalError(null); clearError();\n const cleanPhone = phone.replace(/\\s/g, '');\n if (cleanPhone.length !== 9) { setLocalError('Le numéro doit contenir exactement 9 chiffres'); return; }\n await loginWithPhone(CCPHONE, cleanPhone);\n };\n\n const handlePhoneVerify = async () => {\n setLocalError(null); clearError();\n if (phoneOtpCode.length !== 6) { setLocalError('Veuillez entrer le code à 6 chiffres'); return; }\n const result = await submitOtp(phoneOtpCode);\n finalizeLogin(result);\n };\n\n const handleAccessOtpSubmit = async () => {\n setLocalError(null); clearError();\n if (accessOtpCode.length !== 8) { setLocalError('Veuillez entrer le code à 8 chiffres'); return; }\n const result = await loginWithAccessOtp(accessOtpCode);\n finalizeLogin(result);\n };\n\n const handleGrantAccess = async () => {\n setLocalError(null); clearError();\n const result = await grantAccess();\n finalizeLogin(result);\n };\n\n const handleResendOTP = async () => {\n if (resendCooldown > 0) return;\n const result = await resendOtp();\n if (result.success) setResendCooldown(result.cooldown || 60);\n };\n\n const goBack = () => {\n setLocalError(null); clearError();\n switch (step) {\n case 'email-check': case 'phone-input': case 'access-otp': setStep('choice'); resetAuth(); break;\n case 'email-password': case 'email-otp': setStep('email-check'); resetAuth(); break;\n case 'phone-otp': setStep('phone-input'); resetAuth(); break;\n default: setStep('choice'); resetAuth();\n }\n };\n\n // Render helpers\n const renderError = () => error ? <div style={errorBoxStyle}>{error}</div> : null;\n\n const renderBackBtn = () => (\n <button onClick={goBack} style={backBtnStyle} type=\"button\">\n <IconArrowLeft style={{ width: '1rem', height: '1rem' }} />\n </button>\n );\n\n const renderResendLink = () => (\n <div style={{ textAlign: 'center', fontSize: '0.875rem' }}>\n {resendCooldown > 0 ? (\n <span style={{ color: C.gray500 }}>Renvoyer dans {resendCooldown}s</span>\n ) : (\n <button type=\"button\" style={linkStyle} onClick={handleResendOTP}>\n Code non reçu ? Renvoyer\n </button>\n )}\n </div>\n );\n\n const renderLoaderBtn = (text: string, loadingText: string, onClick: () => void, disabled: boolean, extraStyle?: React.CSSProperties) => (\n <Button onClick={onClick} disabled={isSubmitting || disabled} style={{ width: '100%', ...extraStyle }}>\n {isSubmitting ? (\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <IconLoader2 style={{ width: '1rem', height: '1rem' }} />\n {loadingText}\n </span>\n ) : text}\n </Button>\n );\n\n return (\n <>\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent>\n\n {/* ===================== SUCCESS ===================== */}\n {loginSuccess && loginData ? (\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={{ ...iconCircle(C.greenBg), width: '5rem', height: '5rem' }}>\n <IconCheckCircle2 style={{ width: '3rem', height: '3rem', color: C.green }} />\n </div>\n <DialogTitle>Connexion réussie</DialogTitle>\n <DialogDescription>\n <span style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '0.5rem', marginTop: '0.5rem' }}>\n <IconLoader2 style={{ width: '1rem', height: '1rem', color: C.gray500 }} />\n Redirection en cours...\n </span>\n </DialogDescription>\n </DialogHeader>\n\n /* ===================== NEEDS ACCESS ===================== */\n ) : status === 'needs_access' && user && application ? (\n <>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={{ ...iconCircle(C.primary + '1a'), width: '4rem', height: '4rem' }}>\n {application.logo ? (\n <img src={application.logo} alt={application.name} style={{ width: '2.5rem', height: '2.5rem', borderRadius: '0.5rem' }} />\n ) : (\n <IconShieldCheck style={{ width: '2rem', height: '2rem', color: C.primary }} />\n )}\n </div>\n <DialogTitle>Bienvenue sur {application.name} !</DialogTitle>\n <DialogDescription>\n Bonjour <strong style={{ color: C.gray900 }}>{user.name}</strong>, vous n'avez pas encore de compte sur <strong style={{ color: C.primary }}>{application.name}</strong>.\n </DialogDescription>\n </DialogHeader>\n <DialogBody>\n <div style={{ padding: '1rem', backgroundColor: C.gray100, borderRadius: '0.5rem', fontSize: '0.875rem', color: C.gray500 }}>\n Votre compte <strong style={{ color: C.primary }}>iam.ollaid.com</strong> existe déjà. Cliquez sur Confirmer pour créer votre accès à <strong style={{ color: C.gray900 }}>{application.name}</strong>.\n </div>\n {renderError()}\n </DialogBody>\n <DialogFooter>\n <Button onClick={handleGrantAccess} disabled={isSubmitting} style={{ width: '100%' }}>\n {isSubmitting ? (\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <IconLoader2 style={{ width: '1rem', height: '1rem' }} />\n Création en cours...\n </span>\n ) : 'Confirmer la création de mon compte'}\n </Button>\n <Button variant=\"outline\" onClick={() => { resetAuth(); setStep('choice'); }} disabled={isSubmitting} style={{ width: '100%' }}>\n Annuler\n </Button>\n </DialogFooter>\n </>\n\n /* ===================== ALIAS DISABLED ===================== */\n ) : alternativeMethod ? (\n <>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={{ ...iconCircle(C.amberBg), width: '4rem', height: '4rem' }}>\n {alternativeMethod.type === 'email' ? (\n <IconMail style={{ width: '2rem', height: '2rem', color: C.amber }} />\n ) : (\n <IconPhone style={{ width: '2rem', height: '2rem', color: C.amber }} />\n )}\n </div>\n <DialogTitle>Moyen de connexion désactivé</DialogTitle>\n <DialogDescription>\n Vos identifiants sont corrects, mais vous avez désactivé ce moyen de connexion depuis votre compte IAM.\n </DialogDescription>\n </DialogHeader>\n <DialogBody>\n {alternativeMethod.value && (\n <div style={{ padding: '1rem', backgroundColor: C.gray100, borderRadius: '0.5rem' }}>\n <p style={{ fontSize: '0.875rem', color: C.gray500, marginBottom: '0.75rem' }}>Vous pouvez vous connecter avec :</p>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem', fontSize: '0.875rem', fontWeight: 500, color: C.gray900 }}>\n {alternativeMethod.type === 'phone' ? (\n <IconPhone style={{ width: '1rem', height: '1rem', color: C.primary }} />\n ) : (\n <IconMail style={{ width: '1rem', height: '1rem', color: C.primary }} />\n )}\n <span>{alternativeMethod.value}</span>\n </div>\n </div>\n )}\n </DialogBody>\n <DialogFooter>\n <Button onClick={() => {\n if (alternativeMethod.type === 'phone') setStep('phone-input');\n else setStep('email-check');\n resetAuth();\n }} style={{ width: '100%' }}>\n {alternativeMethod.type === 'phone' ? 'Se connecter par téléphone' : 'Se connecter par email'}\n </Button>\n <Button variant=\"outline\" onClick={() => window.open('https://iam.ollaid.com', '_blank')} style={{ width: '100%' }}>\n Réactiver depuis iam.ollaid.com\n </Button>\n <Button variant=\"ghost\" onClick={() => onOpenChange(false)} style={{ width: '100%' }}>\n Annuler\n </Button>\n </DialogFooter>\n </>\n\n /* ===================== MAIN STEPS ===================== */\n ) : (\n <>\n {step !== 'choice' && renderBackBtn()}\n\n {/* ===== CHOICE ===== */}\n {step === 'choice' && (\n <>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={iconCircle(C.gray100)}>\n <IconShieldCheck style={{ width: '1.5rem', height: '1.5rem', color: C.primary }} />\n </div>\n <DialogTitle>Connexion</DialogTitle>\n <DialogDescription>Choisissez votre méthode de connexion</DialogDescription>\n </DialogHeader>\n <DialogBody>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.75rem' }}>\n {renderError()}\n <Button variant=\"outline\" onClick={() => setStep('email-check')} style={methodBtnStyle}>\n <div style={methodIconStyle(C.accent)}>\n <IconMail style={{ width: '1.25rem', height: '1.25rem', color: C.white }} />\n </div>\n <div>\n <div style={{ fontWeight: 500, color: C.gray900 }}>Adresse email</div>\n <div style={{ fontSize: '0.75rem', color: C.gray500 }}>Connexion avec email</div>\n </div>\n </Button>\n <Button variant=\"outline\" onClick={() => setStep('phone-input')} style={methodBtnStyle}>\n <div style={methodIconStyle(C.accent)}>\n <IconPhone style={{ width: '1.25rem', height: '1.25rem', color: C.white }} />\n </div>\n <div>\n <div style={{ fontWeight: 500, color: C.gray900 }}>\n Numéro de téléphone <span style={{ color: C.gray500 }}>(Sénégal)</span>\n </div>\n <div style={{ fontSize: '0.75rem', color: C.gray500 }}>Connexion avec code SMS</div>\n </div>\n </Button>\n <Button variant=\"outline\" onClick={() => setStep('access-otp')} style={methodBtnStyle}>\n <div style={methodIconStyle(C.primary)}>\n <IconKeyRound style={{ width: '1.25rem', height: '1.25rem', color: C.white }} />\n </div>\n <div>\n <div style={{ fontWeight: 500, color: C.gray900 }}>Accès OTP</div>\n <div style={{ fontSize: '0.75rem', color: C.gray500 }}>Disponible sur le backoffice IAM</div>\n </div>\n </Button>\n <div style={{ textAlign: 'center', fontSize: '0.875rem', paddingTop: '0.5rem' }}>\n <span style={{ color: C.gray500 }}>Mot de passe oublié ? </span>\n <button type=\"button\" style={linkStyle} onClick={() => setShowPasswordRecovery(true)}>Récupérer</button>\n </div>\n <div style={{ position: 'relative', padding: '0.5rem 0' }}>\n <div style={{ position: 'absolute', inset: 0, display: 'flex', alignItems: 'center' }}>\n <span style={{ width: '100%', borderTop: `1px solid ${C.gray200}` }} />\n </div>\n </div>\n {showSwitchToSignup && (\n <div style={{ textAlign: 'center', fontSize: '0.875rem' }}>\n <span style={{ color: C.gray500 }}>Pas encore de compte ? </span>\n <button type=\"button\" style={linkStyle} onClick={onSwitchToSignup}>Inscrivez-vous</button>\n </div>\n )}\n </div>\n </DialogBody>\n </>\n )}\n\n {/* ===== EMAIL CHECK ===== */}\n {step === 'email-check' && (\n <>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={iconCircle(C.accent)}>\n <IconMail style={{ width: '1.5rem', height: '1.5rem', color: C.white }} />\n </div>\n <DialogTitle>Connexion par email</DialogTitle>\n <DialogDescription>Entrez votre adresse email</DialogDescription>\n </DialogHeader>\n <DialogBody>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n {renderError()}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.25rem' }}>\n <Label htmlFor=\"email\">Adresse email</Label>\n <Input id=\"email\" type=\"email\" placeholder=\"vous@exemple.com\" value={email}\n onChange={e => setEmail(e.target.value)} disabled={isSubmitting}\n onKeyDown={e => { if (e.key === 'Enter') { e.preventDefault(); handleEmailCheck(); } }}\n />\n </div>\n <div style={{ textAlign: 'right' }}>\n <button type=\"button\" style={{ ...linkStyle, fontSize: '0.75rem' }} onClick={() => setShowPasswordRecovery(true)}>\n Mot de passe oublié ?\n </button>\n </div>\n </div>\n </DialogBody>\n <DialogFooter>\n {renderLoaderBtn('Continuer', 'Vérification...', handleEmailCheck, !email.trim())}\n {showSwitchToSignup && (\n <div style={{ textAlign: 'center', fontSize: '0.875rem' }}>\n <span style={{ color: C.gray500 }}>Pas encore de compte ? </span>\n <button type=\"button\" style={linkStyle} onClick={onSwitchToSignup}>Inscrivez-vous</button>\n </div>\n )}\n </DialogFooter>\n </>\n )}\n\n {/* ===== EMAIL PASSWORD ===== */}\n {step === 'email-password' && (\n <>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={iconCircle(C.accent)}>\n <IconLock style={{ width: '1.5rem', height: '1.5rem', color: C.white }} />\n </div>\n {userName && <DialogTitle>Bonjour {userName} 👋</DialogTitle>}\n <DialogDescription>{email}</DialogDescription>\n </DialogHeader>\n <form onSubmit={handleEmailPasswordSubmit} style={{ display: 'flex', flexDirection: 'column', flex: 1, minHeight: 0 }}>\n <DialogBody>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n {renderError()}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.25rem' }}>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <Label htmlFor=\"password\">Mot de passe</Label>\n <button type=\"button\" style={{ ...linkStyle, fontSize: '0.75rem' }} onClick={() => setShowPasswordRecovery(true)}>\n Mot de passe oublié ?\n </button>\n </div>\n <div style={{ position: 'relative' }}>\n <Input id=\"password\" type={showPassword ? 'text' : 'password'} placeholder=\"••••••••\" value={password}\n onChange={e => setPassword(e.target.value)} disabled={isSubmitting}\n style={{ paddingRight: '2.5rem' }}\n />\n <button type=\"button\" onClick={() => setShowPassword(!showPassword)}\n style={{ position: 'absolute', right: 0, top: 0, height: '100%', padding: '0 0.75rem', background: 'none', border: 'none', cursor: 'pointer' }}>\n {showPassword ? (\n <IconEyeOff style={{ width: '1rem', height: '1rem', color: C.gray500 }} />\n ) : (\n <IconEye style={{ width: '1rem', height: '1rem', color: C.gray500 }} />\n )}\n </button>\n </div>\n </div>\n </div>\n </DialogBody>\n <DialogFooter>\n <Button type=\"submit\" disabled={isSubmitting || !password} style={{ width: '100%' }}>\n {isSubmitting ? (\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <IconLoader2 style={{ width: '1rem', height: '1rem' }} />\n Connexion...\n </span>\n ) : 'Se connecter'}\n </Button>\n </DialogFooter>\n </form>\n </>\n )}\n\n {/* ===== EMAIL OTP ===== */}\n {step === 'email-otp' && (\n <>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={iconCircle(C.accent)}>\n <IconKeyRound style={{ width: '1.5rem', height: '1.5rem', color: C.white }} />\n </div>\n <DialogTitle>Vérification</DialogTitle>\n <DialogDescription>\n Un code de vérification a été envoyé à<br />\n <strong style={{ color: C.gray900 }}>{email}</strong>\n </DialogDescription>\n </DialogHeader>\n <DialogBody>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n {renderError()}\n <OTPInput value={emailOtpCode} onChange={setEmailOtpCode} disabled={isSubmitting} />\n {renderResendLink()}\n </div>\n </DialogBody>\n <DialogFooter>\n {renderLoaderBtn('Vérifier', 'Vérification...', handleEmailOtpVerify, emailOtpCode.length !== 6)}\n </DialogFooter>\n </>\n )}\n\n {/* ===== PHONE INPUT ===== */}\n {step === 'phone-input' && (\n <>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={iconCircle(C.accent)}>\n <IconPhone style={{ width: '1.5rem', height: '1.5rem', color: C.white }} />\n </div>\n <DialogTitle>Connexion par téléphone</DialogTitle>\n <DialogDescription>Entrez votre numéro pour recevoir un code SMS</DialogDescription>\n </DialogHeader>\n <DialogBody>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n {renderError()}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.25rem' }}>\n <Label>Indicatif</Label>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem', padding: '0.75rem', backgroundColor: C.gray100, borderRadius: '0.375rem' }}>\n <span style={{ fontSize: '1.125rem' }}>🇸🇳</span>\n <span style={{ fontWeight: 500, color: C.gray900 }}>Sénégal (+221)</span>\n </div>\n </div>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.25rem' }}>\n <Label htmlFor=\"login-phone\">Numéro de téléphone</Label>\n <Input id=\"login-phone\" type=\"tel\" placeholder=\"77 123 45 67\" value={phone}\n onChange={e => { const val = e.target.value.replace(/\\D/g, '').slice(0, 9); setPhone(val); }}\n disabled={isSubmitting} maxLength={9}\n onKeyDown={e => { if (e.key === 'Enter') { e.preventDefault(); handlePhoneInit(); } }}\n />\n <p style={{ fontSize: '0.75rem', color: C.gray500 }}>9 chiffres requis ({phone.replace(/\\D/g, '').length}/9)</p>\n </div>\n </div>\n </DialogBody>\n <DialogFooter>\n {renderLoaderBtn('Recevoir le code SMS', 'Envoi en cours...', handlePhoneInit, phone.replace(/\\D/g, '').length !== 9)}\n {showSwitchToSignup && (\n <div style={{ textAlign: 'center', fontSize: '0.875rem' }}>\n <span style={{ color: C.gray500 }}>Pas encore de compte ? </span>\n <button type=\"button\" style={linkStyle} onClick={onSwitchToSignup}>Inscrivez-vous</button>\n </div>\n )}\n </DialogFooter>\n </>\n )}\n\n {/* ===== PHONE OTP ===== */}\n {step === 'phone-otp' && (\n <>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={iconCircle(C.accent)}>\n <IconPhone style={{ width: '1.5rem', height: '1.5rem', color: C.white }} />\n </div>\n <DialogTitle>Vérification</DialogTitle>\n <DialogDescription>\n Un code a été envoyé au{' '}\n <strong style={{ color: C.gray900 }}>+221 {phone.slice(0, 2)}***{phone.slice(-2)}</strong>\n </DialogDescription>\n </DialogHeader>\n <DialogBody>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n {renderError()}\n <OTPInput value={phoneOtpCode} onChange={setPhoneOtpCode} disabled={isSubmitting} />\n {renderResendLink()}\n </div>\n </DialogBody>\n <DialogFooter>\n {renderLoaderBtn('Se connecter', 'Vérification...', handlePhoneVerify, phoneOtpCode.length !== 6)}\n </DialogFooter>\n </>\n )}\n\n {/* ===== ACCESS OTP ===== */}\n {step === 'access-otp' && (\n <>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={iconCircle(C.primary)}>\n <IconKeyRound style={{ width: '1.5rem', height: '1.5rem', color: C.white }} />\n </div>\n <DialogTitle>Code d'accès</DialogTitle>\n <DialogDescription>Entrez le code d'accès à 8 chiffres</DialogDescription>\n </DialogHeader>\n <DialogBody>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n {renderError()}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.25rem' }}>\n <Label>Code d'accès (8 chiffres)</Label>\n <Input type=\"text\" inputMode=\"numeric\" placeholder=\"0000-0000\" value={accessOtpCode}\n onChange={e => setAccessOtpCode(e.target.value.replace(/\\D/g, '').slice(0, 8))}\n disabled={isSubmitting}\n style={{ textAlign: 'center', fontSize: '1.5rem', letterSpacing: '0.15em', fontFamily: 'monospace' }}\n maxLength={8}\n />\n </div>\n </div>\n </DialogBody>\n <DialogFooter>\n {renderLoaderBtn('Se connecter', 'Vérification...', handleAccessOtpSubmit, accessOtpCode.length !== 8)}\n </DialogFooter>\n </>\n )}\n </>\n )}\n </DialogContent>\n </Dialog>\n\n <PasswordRecoveryModal\n open={showPasswordRecovery}\n onOpenChange={setShowPasswordRecovery}\n onSuccess={() => setShowPasswordRecovery(false)}\n saasApiUrl={saasApiUrl}\n iamApiUrl={iamApiUrl}\n \n />\n </>\n );\n}\n\nexport default LoginModal;\n","/**\n * Complete world countries list for @ollaid/native-sso\n * Default: Sénégal (+221, SN)\n */\n\nexport interface Country {\n code: string; // ISO 2-letter (e.g. \"SN\")\n name: string; // Display name\n dialCode: string; // Phone prefix (e.g. \"+221\")\n flag: string; // Emoji flag\n digits: number; // Expected phone number length (without prefix)\n}\n\n// West Africa prioritized at top, then rest of Africa, Europe, Americas, Asia, Oceania\nexport const COUNTRIES: Country[] = [\n // ── Afrique de l'Ouest (prioritaires) ──\n { code: \"SN\", name: \"Sénégal\", dialCode: \"+221\", flag: \"🇸🇳\", digits: 9 },\n { code: \"CI\", name: \"Côte d'Ivoire\", dialCode: \"+225\", flag: \"🇨🇮\", digits: 10 },\n { code: \"ML\", name: \"Mali\", dialCode: \"+223\", flag: \"🇲🇱\", digits: 8 },\n { code: \"BF\", name: \"Burkina Faso\", dialCode: \"+226\", flag: \"🇧🇫\", digits: 8 },\n { code: \"GN\", name: \"Guinée\", dialCode: \"+224\", flag: \"🇬🇳\", digits: 9 },\n { code: \"TG\", name: \"Togo\", dialCode: \"+228\", flag: \"🇹🇬\", digits: 8 },\n { code: \"BJ\", name: \"Bénin\", dialCode: \"+229\", flag: \"🇧🇯\", digits: 8 },\n { code: \"NE\", name: \"Niger\", dialCode: \"+227\", flag: \"🇳🇪\", digits: 8 },\n { code: \"MR\", name: \"Mauritanie\", dialCode: \"+222\", flag: \"🇲🇷\", digits: 8 },\n { code: \"GW\", name: \"Guinée-Bissau\", dialCode: \"+245\", flag: \"🇬🇼\", digits: 7 },\n { code: \"GM\", name: \"Gambie\", dialCode: \"+220\", flag: \"🇬🇲\", digits: 7 },\n { code: \"CV\", name: \"Cap-Vert\", dialCode: \"+238\", flag: \"🇨🇻\", digits: 7 },\n { code: \"SL\", name: \"Sierra Leone\", dialCode: \"+232\", flag: \"🇸🇱\", digits: 8 },\n { code: \"LR\", name: \"Liberia\", dialCode: \"+231\", flag: \"🇱🇷\", digits: 7 },\n { code: \"GH\", name: \"Ghana\", dialCode: \"+233\", flag: \"🇬🇭\", digits: 9 },\n { code: \"NG\", name: \"Nigeria\", dialCode: \"+234\", flag: \"🇳🇬\", digits: 10 },\n\n // ── Afrique Centrale ──\n { code: \"CM\", name: \"Cameroun\", dialCode: \"+237\", flag: \"🇨🇲\", digits: 9 },\n { code: \"GA\", name: \"Gabon\", dialCode: \"+241\", flag: \"🇬🇦\", digits: 7 },\n { code: \"CG\", name: \"Congo\", dialCode: \"+242\", flag: \"🇨🇬\", digits: 9 },\n { code: \"CD\", name: \"RD Congo\", dialCode: \"+243\", flag: \"🇨🇩\", digits: 9 },\n { code: \"TD\", name: \"Tchad\", dialCode: \"+235\", flag: \"🇹🇩\", digits: 8 },\n { code: \"CF\", name: \"Centrafrique\", dialCode: \"+236\", flag: \"🇨🇫\", digits: 8 },\n { code: \"GQ\", name: \"Guinée équatoriale\", dialCode: \"+240\", flag: \"🇬🇶\", digits: 9 },\n { code: \"ST\", name: \"São Tomé-et-Príncipe\", dialCode: \"+239\", flag: \"🇸🇹\", digits: 7 },\n { code: \"BI\", name: \"Burundi\", dialCode: \"+257\", flag: \"🇧🇮\", digits: 8 },\n { code: \"RW\", name: \"Rwanda\", dialCode: \"+250\", flag: \"🇷🇼\", digits: 9 },\n\n // ── Afrique de l'Est ──\n { code: \"KE\", name: \"Kenya\", dialCode: \"+254\", flag: \"🇰🇪\", digits: 9 },\n { code: \"TZ\", name: \"Tanzanie\", dialCode: \"+255\", flag: \"🇹🇿\", digits: 9 },\n { code: \"UG\", name: \"Ouganda\", dialCode: \"+256\", flag: \"🇺🇬\", digits: 9 },\n { code: \"ET\", name: \"Éthiopie\", dialCode: \"+251\", flag: \"🇪🇹\", digits: 9 },\n { code: \"SO\", name: \"Somalie\", dialCode: \"+252\", flag: \"🇸🇴\", digits: 8 },\n { code: \"DJ\", name: \"Djibouti\", dialCode: \"+253\", flag: \"🇩🇯\", digits: 8 },\n { code: \"ER\", name: \"Érythrée\", dialCode: \"+291\", flag: \"🇪🇷\", digits: 7 },\n { code: \"SS\", name: \"Soudan du Sud\", dialCode: \"+211\", flag: \"🇸🇸\", digits: 9 },\n { code: \"MG\", name: \"Madagascar\", dialCode: \"+261\", flag: \"🇲🇬\", digits: 9 },\n { code: \"MU\", name: \"Maurice\", dialCode: \"+230\", flag: \"🇲🇺\", digits: 8 },\n { code: \"SC\", name: \"Seychelles\", dialCode: \"+248\", flag: \"🇸🇨\", digits: 7 },\n { code: \"KM\", name: \"Comores\", dialCode: \"+269\", flag: \"🇰🇲\", digits: 7 },\n\n // ── Afrique Australe ──\n { code: \"ZA\", name: \"Afrique du Sud\", dialCode: \"+27\", flag: \"🇿🇦\", digits: 9 },\n { code: \"MZ\", name: \"Mozambique\", dialCode: \"+258\", flag: \"🇲🇿\", digits: 9 },\n { code: \"ZW\", name: \"Zimbabwe\", dialCode: \"+263\", flag: \"🇿🇼\", digits: 9 },\n { code: \"ZM\", name: \"Zambie\", dialCode: \"+260\", flag: \"🇿🇲\", digits: 9 },\n { code: \"MW\", name: \"Malawi\", dialCode: \"+265\", flag: \"🇲🇼\", digits: 9 },\n { code: \"BW\", name: \"Botswana\", dialCode: \"+267\", flag: \"🇧🇼\", digits: 8 },\n { code: \"NA\", name: \"Namibie\", dialCode: \"+264\", flag: \"🇳🇦\", digits: 9 },\n { code: \"AO\", name: \"Angola\", dialCode: \"+244\", flag: \"🇦🇴\", digits: 9 },\n { code: \"SZ\", name: \"Eswatini\", dialCode: \"+268\", flag: \"🇸🇿\", digits: 8 },\n { code: \"LS\", name: \"Lesotho\", dialCode: \"+266\", flag: \"🇱🇸\", digits: 8 },\n\n // ── Afrique du Nord ──\n { code: \"MA\", name: \"Maroc\", dialCode: \"+212\", flag: \"🇲🇦\", digits: 9 },\n { code: \"DZ\", name: \"Algérie\", dialCode: \"+213\", flag: \"🇩🇿\", digits: 9 },\n { code: \"TN\", name: \"Tunisie\", dialCode: \"+216\", flag: \"🇹🇳\", digits: 8 },\n { code: \"LY\", name: \"Libye\", dialCode: \"+218\", flag: \"🇱🇾\", digits: 9 },\n { code: \"EG\", name: \"Égypte\", dialCode: \"+20\", flag: \"🇪🇬\", digits: 10 },\n { code: \"SD\", name: \"Soudan\", dialCode: \"+249\", flag: \"🇸🇩\", digits: 9 },\n\n // ── Europe ──\n { code: \"FR\", name: \"France\", dialCode: \"+33\", flag: \"🇫🇷\", digits: 9 },\n { code: \"BE\", name: \"Belgique\", dialCode: \"+32\", flag: \"🇧🇪\", digits: 9 },\n { code: \"CH\", name: \"Suisse\", dialCode: \"+41\", flag: \"🇨🇭\", digits: 9 },\n { code: \"DE\", name: \"Allemagne\", dialCode: \"+49\", flag: \"🇩🇪\", digits: 10 },\n { code: \"GB\", name: \"Royaume-Uni\", dialCode: \"+44\", flag: \"🇬🇧\", digits: 10 },\n { code: \"ES\", name: \"Espagne\", dialCode: \"+34\", flag: \"🇪🇸\", digits: 9 },\n { code: \"IT\", name: \"Italie\", dialCode: \"+39\", flag: \"🇮🇹\", digits: 10 },\n { code: \"PT\", name: \"Portugal\", dialCode: \"+351\", flag: \"🇵🇹\", digits: 9 },\n { code: \"NL\", name: \"Pays-Bas\", dialCode: \"+31\", flag: \"🇳🇱\", digits: 9 },\n { code: \"SE\", name: \"Suède\", dialCode: \"+46\", flag: \"🇸🇪\", digits: 9 },\n { code: \"NO\", name: \"Norvège\", dialCode: \"+47\", flag: \"🇳🇴\", digits: 8 },\n { code: \"DK\", name: \"Danemark\", dialCode: \"+45\", flag: \"🇩🇰\", digits: 8 },\n { code: \"FI\", name: \"Finlande\", dialCode: \"+358\", flag: \"🇫🇮\", digits: 10 },\n { code: \"PL\", name: \"Pologne\", dialCode: \"+48\", flag: \"🇵🇱\", digits: 9 },\n { code: \"AT\", name: \"Autriche\", dialCode: \"+43\", flag: \"🇦🇹\", digits: 10 },\n { code: \"IE\", name: \"Irlande\", dialCode: \"+353\", flag: \"🇮🇪\", digits: 9 },\n { code: \"GR\", name: \"Grèce\", dialCode: \"+30\", flag: \"🇬🇷\", digits: 10 },\n { code: \"CZ\", name: \"Tchéquie\", dialCode: \"+420\", flag: \"🇨🇿\", digits: 9 },\n { code: \"RO\", name: \"Roumanie\", dialCode: \"+40\", flag: \"🇷🇴\", digits: 9 },\n { code: \"HU\", name: \"Hongrie\", dialCode: \"+36\", flag: \"🇭🇺\", digits: 9 },\n { code: \"BG\", name: \"Bulgarie\", dialCode: \"+359\", flag: \"🇧🇬\", digits: 9 },\n { code: \"HR\", name: \"Croatie\", dialCode: \"+385\", flag: \"🇭🇷\", digits: 9 },\n { code: \"SK\", name: \"Slovaquie\", dialCode: \"+421\", flag: \"🇸🇰\", digits: 9 },\n { code: \"SI\", name: \"Slovénie\", dialCode: \"+386\", flag: \"🇸🇮\", digits: 8 },\n { code: \"RS\", name: \"Serbie\", dialCode: \"+381\", flag: \"🇷🇸\", digits: 9 },\n { code: \"UA\", name: \"Ukraine\", dialCode: \"+380\", flag: \"🇺🇦\", digits: 9 },\n { code: \"RU\", name: \"Russie\", dialCode: \"+7\", flag: \"🇷🇺\", digits: 10 },\n { code: \"TR\", name: \"Turquie\", dialCode: \"+90\", flag: \"🇹🇷\", digits: 10 },\n { code: \"LU\", name: \"Luxembourg\", dialCode: \"+352\", flag: \"🇱🇺\", digits: 9 },\n { code: \"MC\", name: \"Monaco\", dialCode: \"+377\", flag: \"🇲🇨\", digits: 8 },\n { code: \"IS\", name: \"Islande\", dialCode: \"+354\", flag: \"🇮🇸\", digits: 7 },\n { code: \"AL\", name: \"Albanie\", dialCode: \"+355\", flag: \"🇦🇱\", digits: 9 },\n { code: \"ME\", name: \"Monténégro\", dialCode: \"+382\", flag: \"🇲🇪\", digits: 8 },\n { code: \"MK\", name: \"Macédoine du Nord\", dialCode: \"+389\", flag: \"🇲🇰\", digits: 8 },\n { code: \"BA\", name: \"Bosnie-Herzégovine\", dialCode: \"+387\", flag: \"🇧🇦\", digits: 8 },\n { code: \"LT\", name: \"Lituanie\", dialCode: \"+370\", flag: \"🇱🇹\", digits: 8 },\n { code: \"LV\", name: \"Lettonie\", dialCode: \"+371\", flag: \"🇱🇻\", digits: 8 },\n { code: \"EE\", name: \"Estonie\", dialCode: \"+372\", flag: \"🇪🇪\", digits: 8 },\n { code: \"MT\", name: \"Malte\", dialCode: \"+356\", flag: \"🇲🇹\", digits: 8 },\n { code: \"CY\", name: \"Chypre\", dialCode: \"+357\", flag: \"🇨🇾\", digits: 8 },\n { code: \"MD\", name: \"Moldavie\", dialCode: \"+373\", flag: \"🇲🇩\", digits: 8 },\n { code: \"GE\", name: \"Géorgie\", dialCode: \"+995\", flag: \"🇬🇪\", digits: 9 },\n { code: \"AM\", name: \"Arménie\", dialCode: \"+374\", flag: \"🇦🇲\", digits: 8 },\n { code: \"AZ\", name: \"Azerbaïdjan\", dialCode: \"+994\", flag: \"🇦🇿\", digits: 9 },\n { code: \"BY\", name: \"Biélorussie\", dialCode: \"+375\", flag: \"🇧🇾\", digits: 9 },\n\n // ── Amérique du Nord ──\n { code: \"US\", name: \"États-Unis\", dialCode: \"+1\", flag: \"🇺🇸\", digits: 10 },\n { code: \"CA\", name: \"Canada\", dialCode: \"+1\", flag: \"🇨🇦\", digits: 10 },\n { code: \"MX\", name: \"Mexique\", dialCode: \"+52\", flag: \"🇲🇽\", digits: 10 },\n\n // ── Amérique Centrale & Caraïbes ──\n { code: \"HT\", name: \"Haïti\", dialCode: \"+509\", flag: \"🇭🇹\", digits: 8 },\n { code: \"DO\", name: \"République dominicaine\", dialCode: \"+1809\", flag: \"🇩🇴\", digits: 10 },\n { code: \"CU\", name: \"Cuba\", dialCode: \"+53\", flag: \"🇨🇺\", digits: 8 },\n { code: \"JM\", name: \"Jamaïque\", dialCode: \"+1876\", flag: \"🇯🇲\", digits: 7 },\n { code: \"GT\", name: \"Guatemala\", dialCode: \"+502\", flag: \"🇬🇹\", digits: 8 },\n { code: \"HN\", name: \"Honduras\", dialCode: \"+504\", flag: \"🇭🇳\", digits: 8 },\n { code: \"SV\", name: \"El Salvador\", dialCode: \"+503\", flag: \"🇸🇻\", digits: 8 },\n { code: \"NI\", name: \"Nicaragua\", dialCode: \"+505\", flag: \"🇳🇮\", digits: 8 },\n { code: \"CR\", name: \"Costa Rica\", dialCode: \"+506\", flag: \"🇨🇷\", digits: 8 },\n { code: \"PA\", name: \"Panama\", dialCode: \"+507\", flag: \"🇵🇦\", digits: 8 },\n { code: \"TT\", name: \"Trinité-et-Tobago\", dialCode: \"+1868\", flag: \"🇹🇹\", digits: 7 },\n\n // ── Amérique du Sud ──\n { code: \"BR\", name: \"Brésil\", dialCode: \"+55\", flag: \"🇧🇷\", digits: 11 },\n { code: \"AR\", name: \"Argentine\", dialCode: \"+54\", flag: \"🇦🇷\", digits: 10 },\n { code: \"CO\", name: \"Colombie\", dialCode: \"+57\", flag: \"🇨🇴\", digits: 10 },\n { code: \"CL\", name: \"Chili\", dialCode: \"+56\", flag: \"🇨🇱\", digits: 9 },\n { code: \"PE\", name: \"Pérou\", dialCode: \"+51\", flag: \"🇵🇪\", digits: 9 },\n { code: \"VE\", name: \"Venezuela\", dialCode: \"+58\", flag: \"🇻🇪\", digits: 10 },\n { code: \"EC\", name: \"Équateur\", dialCode: \"+593\", flag: \"🇪🇨\", digits: 9 },\n { code: \"BO\", name: \"Bolivie\", dialCode: \"+591\", flag: \"🇧🇴\", digits: 8 },\n { code: \"PY\", name: \"Paraguay\", dialCode: \"+595\", flag: \"🇵🇾\", digits: 9 },\n { code: \"UY\", name: \"Uruguay\", dialCode: \"+598\", flag: \"🇺🇾\", digits: 8 },\n { code: \"GY\", name: \"Guyana\", dialCode: \"+592\", flag: \"🇬🇾\", digits: 7 },\n { code: \"SR\", name: \"Suriname\", dialCode: \"+597\", flag: \"🇸🇷\", digits: 7 },\n\n // ── Moyen-Orient ──\n { code: \"AE\", name: \"Émirats arabes unis\", dialCode: \"+971\", flag: \"🇦🇪\", digits: 9 },\n { code: \"SA\", name: \"Arabie saoudite\", dialCode: \"+966\", flag: \"🇸🇦\", digits: 9 },\n { code: \"QA\", name: \"Qatar\", dialCode: \"+974\", flag: \"🇶🇦\", digits: 8 },\n { code: \"KW\", name: \"Koweït\", dialCode: \"+965\", flag: \"🇰🇼\", digits: 8 },\n { code: \"BH\", name: \"Bahreïn\", dialCode: \"+973\", flag: \"🇧🇭\", digits: 8 },\n { code: \"OM\", name: \"Oman\", dialCode: \"+968\", flag: \"🇴🇲\", digits: 8 },\n { code: \"JO\", name: \"Jordanie\", dialCode: \"+962\", flag: \"🇯🇴\", digits: 9 },\n { code: \"LB\", name: \"Liban\", dialCode: \"+961\", flag: \"🇱🇧\", digits: 8 },\n { code: \"IQ\", name: \"Irak\", dialCode: \"+964\", flag: \"🇮🇶\", digits: 10 },\n { code: \"IR\", name: \"Iran\", dialCode: \"+98\", flag: \"🇮🇷\", digits: 10 },\n { code: \"IL\", name: \"Israël\", dialCode: \"+972\", flag: \"🇮🇱\", digits: 9 },\n { code: \"PS\", name: \"Palestine\", dialCode: \"+970\", flag: \"🇵🇸\", digits: 9 },\n { code: \"YE\", name: \"Yémen\", dialCode: \"+967\", flag: \"🇾🇪\", digits: 9 },\n { code: \"SY\", name: \"Syrie\", dialCode: \"+963\", flag: \"🇸🇾\", digits: 9 },\n\n // ── Asie ──\n { code: \"CN\", name: \"Chine\", dialCode: \"+86\", flag: \"🇨🇳\", digits: 11 },\n { code: \"JP\", name: \"Japon\", dialCode: \"+81\", flag: \"🇯🇵\", digits: 10 },\n { code: \"KR\", name: \"Corée du Sud\", dialCode: \"+82\", flag: \"🇰🇷\", digits: 10 },\n { code: \"IN\", name: \"Inde\", dialCode: \"+91\", flag: \"🇮🇳\", digits: 10 },\n { code: \"PK\", name: \"Pakistan\", dialCode: \"+92\", flag: \"🇵🇰\", digits: 10 },\n { code: \"BD\", name: \"Bangladesh\", dialCode: \"+880\", flag: \"🇧🇩\", digits: 10 },\n { code: \"ID\", name: \"Indonésie\", dialCode: \"+62\", flag: \"🇮🇩\", digits: 10 },\n { code: \"MY\", name: \"Malaisie\", dialCode: \"+60\", flag: \"🇲🇾\", digits: 10 },\n { code: \"PH\", name: \"Philippines\", dialCode: \"+63\", flag: \"🇵🇭\", digits: 10 },\n { code: \"TH\", name: \"Thaïlande\", dialCode: \"+66\", flag: \"🇹🇭\", digits: 9 },\n { code: \"VN\", name: \"Vietnam\", dialCode: \"+84\", flag: \"🇻🇳\", digits: 9 },\n { code: \"SG\", name: \"Singapour\", dialCode: \"+65\", flag: \"🇸🇬\", digits: 8 },\n { code: \"HK\", name: \"Hong Kong\", dialCode: \"+852\", flag: \"🇭🇰\", digits: 8 },\n { code: \"TW\", name: \"Taïwan\", dialCode: \"+886\", flag: \"🇹🇼\", digits: 9 },\n { code: \"MM\", name: \"Myanmar\", dialCode: \"+95\", flag: \"🇲🇲\", digits: 9 },\n { code: \"KH\", name: \"Cambodge\", dialCode: \"+855\", flag: \"🇰🇭\", digits: 9 },\n { code: \"LA\", name: \"Laos\", dialCode: \"+856\", flag: \"🇱🇦\", digits: 10 },\n { code: \"NP\", name: \"Népal\", dialCode: \"+977\", flag: \"🇳🇵\", digits: 10 },\n { code: \"LK\", name: \"Sri Lanka\", dialCode: \"+94\", flag: \"🇱🇰\", digits: 9 },\n { code: \"AF\", name: \"Afghanistan\", dialCode: \"+93\", flag: \"🇦🇫\", digits: 9 },\n { code: \"UZ\", name: \"Ouzbékistan\", dialCode: \"+998\", flag: \"🇺🇿\", digits: 9 },\n { code: \"KZ\", name: \"Kazakhstan\", dialCode: \"+7\", flag: \"🇰🇿\", digits: 10 },\n { code: \"MN\", name: \"Mongolie\", dialCode: \"+976\", flag: \"🇲🇳\", digits: 8 },\n\n // ── Océanie ──\n { code: \"AU\", name: \"Australie\", dialCode: \"+61\", flag: \"🇦🇺\", digits: 9 },\n { code: \"NZ\", name: \"Nouvelle-Zélande\", dialCode: \"+64\", flag: \"🇳🇿\", digits: 9 },\n { code: \"FJ\", name: \"Fidji\", dialCode: \"+679\", flag: \"🇫🇯\", digits: 7 },\n { code: \"PG\", name: \"Papouasie-Nouvelle-Guinée\", dialCode: \"+675\", flag: \"🇵🇬\", digits: 8 },\n];\n\n// ── Defaults ──\nexport const DEFAULT_COUNTRY_CODE = \"SN\";\nexport const DEFAULT_DIAL_CODE = \"+221\";\n\n// ── Sorted by ISO code (alphabetical) ──\nexport const COUNTRIES_SORTED_BY_CODE: Country[] = [...COUNTRIES].sort((a, b) => a.code.localeCompare(b.code));\n\n// ── Helpers ──\nexport const getCountryByCode = (code: string): Country | undefined =>\n COUNTRIES.find(c => c.code.toLowerCase() === code.toLowerCase());\n\nexport const getCountryByDialCode = (dialCode: string): Country | undefined =>\n COUNTRIES.find(c => c.dialCode === dialCode);\n\nexport const getDefaultCountry = (): Country =>\n COUNTRIES.find(c => c.code === DEFAULT_COUNTRY_CODE)!;\n\nexport const searchCountries = (query: string): Country[] => {\n const q = query.toLowerCase().trim();\n if (!q) return COUNTRIES;\n return COUNTRIES.filter(c =>\n c.name.toLowerCase().includes(q) ||\n c.dialCode.includes(q) ||\n c.code.toLowerCase().includes(q)\n );\n};\n","/**\n * Phone Input component for @ollaid/native-sso\n * Custom select overlay: dropdown shows ISO code, selected display shows only flag + dialCode\n */\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { COUNTRIES_SORTED_BY_CODE, getCountryByDialCode, DEFAULT_DIAL_CODE } from '../utils/countries';\n\ninterface PhoneInputProps {\n value: string;\n onChange: (value: string) => void;\n ccphone?: string;\n onCcphoneChange?: (value: string) => void;\n disabled?: boolean;\n readOnly?: boolean;\n error?: string;\n placeholder?: string;\n lockCcphone?: boolean;\n}\n\nexport function PhoneInput({\n value, onChange, ccphone = DEFAULT_DIAL_CODE, onCcphoneChange, disabled = false, readOnly = false, error, placeholder = '77 123 45 67', lockCcphone = false,\n}: PhoneInputProps) {\n const normalizedCcphone = ccphone || DEFAULT_DIAL_CODE;\n const selectedCountry = getCountryByDialCode(normalizedCcphone) || COUNTRIES_SORTED_BY_CODE[0];\n const [dropdownOpen, setDropdownOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n // Close dropdown on outside click\n useEffect(() => {\n if (!dropdownOpen) return;\n const handler = (e: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) setDropdownOpen(false);\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [dropdownOpen]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled || readOnly) return;\n const cleaned = e.target.value.replace(/\\D/g, '');\n onChange(cleaned.slice(0, selectedCountry.digits));\n };\n\n const handlePaste = (e: React.ClipboardEvent<HTMLInputElement>) => {\n if (disabled || readOnly) return;\n e.preventDefault();\n const pasted = e.clipboardData.getData('text').replace(/\\s+/g, '').replace(/\\D/g, '');\n onChange(pasted.slice(0, selectedCountry.digits));\n };\n\n const handleSelect = (dialCode: string) => {\n if (disabled || readOnly) return;\n if (onCcphoneChange) onCcphoneChange(dialCode);\n setDropdownOpen(false);\n };\n\n return (\n <div>\n <div style={{\n display: 'flex', alignItems: 'center', border: `2px solid ${error ? '#ef4444' : '#d1d5db'}`,\n borderRadius: '0.5rem', overflow: 'visible', opacity: (disabled || readOnly) ? 0.75 : 1,\n backgroundColor: (disabled || readOnly) ? '#f9fafb' : 'white', position: 'relative',\n }}>\n {onCcphoneChange && !lockCcphone ? (\n <div ref={dropdownRef} style={{ position: 'relative' }}>\n {/* Display button: only flag + dialCode */}\n <button\n type=\"button\"\n onClick={() => !(disabled || readOnly) && setDropdownOpen(!dropdownOpen)}\n disabled={disabled || readOnly}\n style={{\n display: 'flex', alignItems: 'center', gap: '0.35rem', padding: '0.45rem 0.6rem',\n backgroundColor: '#f9fafb', borderRight: '1px solid #e5e7eb', border: 'none',\n cursor: (disabled || readOnly) ? 'not-allowed' : 'pointer', fontWeight: 500, color: '#374151',\n fontSize: '0.85rem', whiteSpace: 'nowrap',\n }}\n >\n <span style={{ fontSize: '1rem' }}>{selectedCountry.flag}</span>\n <span>{selectedCountry.dialCode}</span>\n <span style={{ fontSize: '0.625rem', marginLeft: '0.125rem' }}>▼</span>\n </button>\n\n {/* Dropdown list: shows CODE FLAG DIALCODE */}\n {dropdownOpen && (\n <div style={{\n position: 'absolute', top: '100%', left: 0, zIndex: 50,\n backgroundColor: 'white', border: '1px solid #d1d5db', borderRadius: '0.375rem',\n boxShadow: '0 4px 12px rgba(0,0,0,0.15)', maxHeight: '15rem', overflowY: 'auto',\n minWidth: '12rem', marginTop: '0.25rem',\n }}>\n {COUNTRIES_SORTED_BY_CODE.map((c) => (\n <button\n key={`${c.code}-${c.dialCode}`}\n type=\"button\"\n onClick={() => handleSelect(c.dialCode)}\n style={{\n display: 'flex', alignItems: 'center', gap: '0.5rem', width: '100%',\n padding: '0.45rem 0.75rem', border: 'none', cursor: 'pointer', fontSize: '0.85rem',\n backgroundColor: c.dialCode === normalizedCcphone ? '#f3f4f6' : 'transparent',\n textAlign: 'left',\n }}\n onMouseEnter={(e) => (e.currentTarget.style.backgroundColor = '#f3f4f6')}\n onMouseLeave={(e) => (e.currentTarget.style.backgroundColor = c.dialCode === normalizedCcphone ? '#f3f4f6' : 'transparent')}\n >\n <span style={{ fontWeight: 600, color: '#374151', minWidth: '1.75rem' }}>{c.code}</span>\n <span>{c.flag}</span>\n <span style={{ color: '#6b7280' }}>{c.dialCode}</span>\n </button>\n ))}\n </div>\n )}\n </div>\n ) : (\n /* Locked view: only flag + dialCode */\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.35rem', padding: '0.45rem 0.6rem', backgroundColor: '#f9fafb', borderRight: '1px solid #e5e7eb' }}>\n <span style={{ fontSize: '1rem' }}>{selectedCountry.flag}</span>\n <span style={{ fontWeight: 500, color: '#374151' }}>{selectedCountry.dialCode}</span>\n </div>\n )}\n <input\n type=\"tel\"\n inputMode=\"numeric\"\n value={value}\n onChange={handleChange}\n onPaste={handlePaste}\n disabled={disabled}\n readOnly={readOnly}\n placeholder={placeholder}\n style={{ flex: 1, padding: '0.45rem 0.6rem', fontSize: '0.95rem', border: 'none', outline: 'none', backgroundColor: 'transparent' }}\n />\n </div>\n {error && <p style={{ fontSize: '0.875rem', color: '#ef4444', marginTop: '0.25rem' }}>{error}</p>}\n <p style={{ fontSize: '0.75rem', color: '#6b7280', marginTop: '0.25rem' }}>\n {selectedCountry.digits} chiffres requis ({value.length}/{selectedCountry.digits})\n </p>\n </div>\n );\n}\n\nexport default PhoneInput;\n","/**\n * Apps Logo Slider for @ollaid/native-sso\n * Matches Web SSO badge style: horizontal marquee, small icons, no app names\n */\n\nimport { useEffect, useState } from 'react';\nimport { getNativeAuthConfig } from '../services/api';\n\ninterface AppsLogoSliderProps {\n speed?: 'slow' | 'normal' | 'fast';\n className?: string;\n iamApiUrl?: string;\n}\n\ninterface AppInfo { id: number; name: string; logo: string | null; }\n\nexport function AppsLogoSlider({ className = '', iamApiUrl: iamApiUrlProp }: AppsLogoSliderProps) {\n const [applications, setApplications] = useState<AppInfo[]>([]);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n const resolvedIamApiUrl = iamApiUrlProp || getNativeAuthConfig().iamApiUrl;\n if (!resolvedIamApiUrl) return;\n const fetchApps = async () => {\n try {\n const iamBaseUrl = resolvedIamApiUrl.replace('/api', '');\n const response = await fetch(`${iamBaseUrl}/api/public/applications`, { headers: { 'Accept': 'application/json' } });\n if (response.ok) {\n const data = await response.json();\n if (data.success && Array.isArray(data.data)) setApplications(data.data);\n }\n } catch { /* ignore */ } finally { setIsLoading(false); }\n };\n fetchApps();\n }, [iamApiUrlProp]);\n\n const getLogoUrl = (logo: string | null): string | null => {\n if (!logo) return null;\n if (logo.startsWith('http')) return logo;\n const resolvedUrl = iamApiUrlProp || getNativeAuthConfig().iamApiUrl;\n return `${resolvedUrl.replace('/api', '')}/storage/applications/${logo}`;\n };\n\n if (isLoading) {\n return (\n <div className={className} style={{ width: '100%', height: '100%', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <div style={{ display: 'flex', gap: '0.75rem', padding: '0 0.75rem' }}>\n {[1, 2, 3, 4, 5].map((i) => (\n <div key={i} style={{ width: '2rem', height: '2rem', borderRadius: '0.5rem', backgroundColor: '#e5e7eb', flexShrink: 0 }} />\n ))}\n </div>\n </div>\n );\n }\n\n if (applications.length === 0) return null;\n\n // Triple for smooth infinite loop (same as web SSO)\n const displayApps = [...applications, ...applications, ...applications];\n\n return (\n <div\n className={className}\n style={{ position: 'relative', width: '100%', height: '100%', overflow: 'hidden' }}\n >\n {/* Left gradient mask */}\n <div style={{\n position: 'absolute', left: 0, top: 0, bottom: 0, width: '1.5rem',\n background: 'linear-gradient(to right, #ffffff, transparent)',\n zIndex: 10, pointerEvents: 'none',\n }} />\n\n {/* Marquee content */}\n <div style={{\n display: 'flex',\n animation: 'ollaid-marquee 20s linear infinite',\n height: '100%',\n alignItems: 'center',\n }}>\n {displayApps.map((app, index) => {\n const logoUrl = getLogoUrl(app.logo);\n return (\n <div\n key={`${app.id}-${index}`}\n style={{ flexShrink: 0, padding: '0 0.75rem', display: 'flex', alignItems: 'center', height: '100%' }}\n >\n {logoUrl ? (\n <img\n src={logoUrl}\n alt={app.name}\n style={{ width: '2rem', height: '2rem', objectFit: 'contain' }}\n onError={(e) => {\n const target = e.currentTarget;\n target.style.display = 'none';\n if (target.nextElementSibling) {\n (target.nextElementSibling as HTMLElement).style.display = 'flex';\n }\n }}\n />\n ) : null}\n <div\n style={{\n width: '2rem',\n height: '2rem',\n borderRadius: '0.5rem',\n backgroundColor: '#f3f4f6',\n alignItems: 'center',\n justifyContent: 'center',\n display: logoUrl ? 'none' : 'flex',\n }}\n >\n <span style={{ fontSize: '0.75rem', fontWeight: 700, color: '#6b7280' }}>\n {app.name?.charAt(0)?.toUpperCase() || 'A'}\n </span>\n </div>\n </div>\n );\n })}\n </div>\n\n {/* Right gradient mask */}\n <div style={{\n position: 'absolute', right: 0, top: 0, bottom: 0, width: '1.5rem',\n background: 'linear-gradient(to left, #ffffff, transparent)',\n zIndex: 10, pointerEvents: 'none',\n }} />\n </div>\n );\n}\n\nexport default AppsLogoSlider;\n","/**\n * Service d'inscription Mobile SSO v1.0\n * Architecture Frontend-First : Appels directs à l'IAM via nativeAuth\n * \n * @version 2.7.0\n */\n\nimport { nativeAuthService } from './nativeAuth';\nimport { \n ApiError, \n fetchWithTimeout, \n getHeaders,\n getNativeAuthConfig, \n isDebugMode,\n ensureDeviceContext,\n} from './api';\n\nimport type {\n MobileRegistrationFormData,\n MobileVerifyOtpResponse,\n MobileRegistrationCompleteResponse,\n MobileResendOtpResponse,\n} from '../types/mobile';\nimport type { NativeInitResponse } from '../types/native';\n\nexport const mobileRegistrationService = {\n /**\n * Init registration via nativeAuth.register() (Frontend-First)\n */\n async init(\n data: Omit<MobileRegistrationFormData, 'password' | 'password_confirmation'>\n ): Promise<NativeInitResponse> {\n if (!nativeAuthService.hasCredentials()) {\n await nativeAuthService.loadCredentials();\n }\n\n return nativeAuthService.register({\n name: data.name,\n email: data.email,\n ccphone: data.ccphone,\n phone: data.phone,\n town: data.town,\n country: data.country,\n registration_type: data.registration_type,\n });\n },\n\n /**\n * Verify OTP via nativeAuth.validate()\n */\n async verifyOtp(\n processToken: string,\n otpCode: string\n ): Promise<MobileVerifyOtpResponse> {\n const config = getNativeAuthConfig();\n await ensureDeviceContext();\n\n if (isDebugMode()) {\n console.log('📤 [IAM] POST /iam/native/validate (registration OTP)');\n }\n\n return fetchWithTimeout<MobileVerifyOtpResponse>(\n `${config.iamApiUrl}/iam/native/validate`,\n {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify({\n process_token: processToken,\n otp_code: otpCode,\n }),\n },\n config.timeout || 30000\n );\n },\n\n /**\n * Complete registration with password\n */\n async complete(\n processToken: string,\n password: string\n ): Promise<MobileRegistrationCompleteResponse> {\n const config = getNativeAuthConfig();\n await ensureDeviceContext();\n\n if (isDebugMode()) {\n console.log('📤 [IAM] POST /iam/native/validate (registration complete)');\n }\n\n return fetchWithTimeout<MobileRegistrationCompleteResponse>(\n `${config.iamApiUrl}/iam/native/validate`,\n {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify({\n process_token: processToken,\n password,\n password_confirmation: password,\n }),\n },\n config.timeout || 30000\n );\n },\n\n /**\n * Complete phone-only registration (no password)\n */\n async completePhoneOnly(\n processToken: string\n ): Promise<MobileRegistrationCompleteResponse> {\n const config = getNativeAuthConfig();\n await ensureDeviceContext();\n\n if (isDebugMode()) {\n console.log('📤 [IAM] POST /iam/native/validate (phone-only complete)');\n }\n\n return fetchWithTimeout<MobileRegistrationCompleteResponse>(\n `${config.iamApiUrl}/iam/native/validate`,\n {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify({\n process_token: processToken,\n }),\n },\n config.timeout || 30000\n );\n },\n\n /**\n * Resend OTP\n */\n async resendOtp(processToken: string): Promise<MobileResendOtpResponse> {\n return nativeAuthService.resendOtp(processToken) as unknown as MobileResendOtpResponse;\n },\n};\n\nexport default mobileRegistrationService;\n","/**\n * Hook d'inscription Mobile SSO v1.0\n * Gère le flow: init → verify-otp → complete\n * \n * @version 2.7.0\n */\n\nimport { useState, useCallback, useEffect, useRef } from 'react';\nimport { mobileRegistrationService } from '../services/mobileRegistration';\nimport { nativeAuthService } from '../services/nativeAuth';\nimport { setNativeAuthConfig, ApiError } from '../services/api';\nimport type { \n MobileRegistrationFormData,\n AccountType,\n} from '../types/mobile';\n\ninterface RegistrationConflict {\n type: 'email' | 'phone';\n masked_identifier: string;\n options: {\n can_login: boolean;\n can_recover_by_email: boolean;\n can_recover_by_sms: boolean;\n masked_email?: string;\n masked_phone?: string;\n };\n}\n\ninterface ApiConflictResponse {\n conflict?: RegistrationConflict;\n message?: string;\n error_type?: string;\n}\n\ninterface RegistrationState {\n processToken: string | null;\n status: 'idle' | 'pending_otp' | 'pending_password' | 'pending_registration' | 'completed';\n loading: boolean;\n error: string | null;\n conflict: RegistrationConflict | null;\n}\n\nfunction getErrorMessage(err: unknown, context: string): string {\n if (err instanceof Error) {\n if (err.message.includes('fetch') || err.message.includes('network')) {\n return 'Vérifiez votre connexion Internet';\n }\n if (err.message.includes('timeout')) {\n return 'Le serveur met trop de temps à répondre';\n }\n return err.message;\n }\n return `Erreur lors de ${context}`;\n}\n\nexport interface UseMobileRegistrationOptions {\n saasApiUrl: string;\n iamApiUrl: string;\n \n}\n\nexport function useMobileRegistration(options?: UseMobileRegistrationOptions) {\n const configuredRef = useRef(false);\n\n useEffect(() => {\n if (options && !configuredRef.current) {\n setNativeAuthConfig({ \n saasApiUrl: options.saasApiUrl, \n iamApiUrl: options.iamApiUrl,\n });\n configuredRef.current = true;\n }\n }, [options]);\n\n const [state, setState] = useState<RegistrationState>({\n processToken: null,\n status: 'idle',\n loading: false,\n error: null,\n conflict: null,\n });\n\n const [formData, setFormData] = useState<Partial<MobileRegistrationFormData>>({});\n const [accountType, setAccountType] = useState<AccountType>('email');\n\n const updateFormData = useCallback((data: Partial<MobileRegistrationFormData>) => {\n setFormData(prev => ({ ...prev, ...data }));\n }, []);\n\n const initRegistration = useCallback(async (\n data: Omit<MobileRegistrationFormData, 'password' | 'password_confirmation'>\n ) => {\n setState(prev => ({ ...prev, loading: true, error: null, conflict: null }));\n \n const enrichedData = {\n ...data,\n email: accountType === 'phone-only' ? '' : data.email,\n registration_type: accountType === 'phone-only' ? 'phone' as const : 'email' as const,\n };\n \n setFormData(enrichedData);\n\n try {\n if (!nativeAuthService.hasCredentials()) {\n await nativeAuthService.loadCredentials();\n }\n\n const response = await mobileRegistrationService.init(enrichedData);\n\n if (response.success && response.process_token) {\n setState(prev => ({\n ...prev,\n processToken: response.process_token!,\n status: 'pending_otp',\n loading: false,\n conflict: null,\n }));\n return { \n success: true, \n otp_code_dev: response.otp_code_dev,\n otp_method: response.otp_method,\n otp_sent_to: response.otp_sent_to,\n };\n }\n\n if (response.conflict) {\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Ce compte existe déjà',\n conflict: response.conflict!,\n }));\n return { success: false, error_type: response.error_type };\n }\n\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Erreur lors de l\\'inscription',\n conflict: null,\n }));\n return { success: false, error_type: response.error_type };\n } catch (err) {\n // Extract conflict data from 409 responses\n if (err instanceof ApiError && err.statusCode === 409 && err.response) {\n const resp = err.response as ApiConflictResponse;\n if (resp.conflict) {\n setState(prev => ({\n ...prev,\n loading: false,\n error: resp.message || 'Ce compte existe déjà',\n conflict: resp.conflict ?? null,\n }));\n return { success: false, error_type: resp.error_type };\n }\n }\n\n const message = getErrorMessage(err, 'l\\'inscription');\n setState(prev => ({ ...prev, loading: false, error: message, conflict: null }));\n return { success: false };\n }\n }, [accountType]);\n\n const verifyOtp = useCallback(async (otpCode: string) => {\n if (!state.processToken) {\n return { success: false, error: 'Session invalide' };\n }\n setState(prev => ({ ...prev, loading: true, error: null }));\n try {\n const response = await mobileRegistrationService.verifyOtp(state.processToken, otpCode);\n\n if (response.success) {\n if (response.status === 'completed' && response.callback_token) {\n setState(prev => ({ ...prev, status: 'completed', loading: false }));\n return { success: true, completed: true, callback_token: response.callback_token };\n }\n\n setState(prev => ({ ...prev, status: 'pending_password', loading: false }));\n return { success: true, completed: false };\n }\n\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Code incorrect',\n }));\n return { success: false, error_type: response.error_type };\n } catch (err) {\n const message = getErrorMessage(err, 'la vérification');\n setState(prev => ({ ...prev, loading: false, error: message }));\n return { success: false };\n }\n }, [state.processToken]);\n\n const completeRegistration = useCallback(async (password: string) => {\n if (!state.processToken) {\n return { success: false, error: 'Session invalide' };\n }\n setState(prev => ({ ...prev, loading: true, error: null }));\n try {\n const response = await mobileRegistrationService.complete(state.processToken, password);\n\n if (response.success && response.callback_token) {\n setState(prev => ({ ...prev, status: 'completed', loading: false }));\n return { success: true, callback_token: response.callback_token };\n }\n\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Erreur lors de la finalisation',\n }));\n return { success: false, error_type: response.error_type };\n } catch (err) {\n const message = getErrorMessage(err, 'la finalisation');\n setState(prev => ({ ...prev, loading: false, error: message }));\n return { success: false };\n }\n }, [state.processToken]);\n\n const completePhoneOnlyRegistration = useCallback(async () => {\n if (!state.processToken) {\n return { success: false, error: 'Session invalide' };\n }\n setState(prev => ({ ...prev, loading: true, error: null }));\n try {\n const response = await mobileRegistrationService.completePhoneOnly(state.processToken);\n\n if (response.success && response.callback_token) {\n setState(prev => ({ ...prev, status: 'completed', loading: false }));\n return { success: true, callback_token: response.callback_token };\n }\n\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Erreur lors de la finalisation',\n }));\n return { success: false, error_type: response.error_type };\n } catch (err) {\n const message = getErrorMessage(err, 'la finalisation');\n setState(prev => ({ ...prev, loading: false, error: message }));\n return { success: false };\n }\n }, [state.processToken]);\n\n const resendOtp = useCallback(async () => {\n if (!state.processToken) {\n return { success: false, error: 'Session invalide' };\n }\n setState(prev => ({ ...prev, loading: true, error: null }));\n try {\n const response = await mobileRegistrationService.resendOtp(state.processToken);\n setState(prev => ({ ...prev, loading: false }));\n return { \n success: response.success, \n cooldown: response.cooldown_remaining,\n otp_code_dev: response.otp_code_dev,\n };\n } catch (err) {\n const message = getErrorMessage(err, 'le renvoi');\n setState(prev => ({ ...prev, loading: false, error: message }));\n return { success: false };\n }\n }, [state.processToken]);\n\n const reset = useCallback(() => {\n setState({\n processToken: null,\n status: 'idle',\n loading: false,\n error: null,\n conflict: null,\n });\n setFormData({});\n setAccountType('email');\n }, []);\n\n const clearError = useCallback(() => {\n setState(prev => ({ ...prev, error: null, conflict: null }));\n }, []);\n\n return {\n processToken: state.processToken,\n status: state.status,\n formData,\n loading: state.loading,\n error: state.error,\n conflict: state.conflict,\n isCompleted: state.status === 'completed',\n hasConflict: state.conflict !== null,\n \n accountType,\n setAccountType,\n isPhoneOnly: accountType === 'phone-only',\n\n updateFormData,\n initRegistration,\n verifyOtp,\n completeRegistration,\n completePhoneOnlyRegistration,\n resendOtp,\n reset,\n clearError,\n };\n}\n\nexport default useMobileRegistration;\n","/**\n * Signup Modal for @ollaid/native-sso — Design aligned with web SSO\n * Full signup flow: intro → account-type → info → OTP → password → confirm → success\n * \n * @version 2.7.0\n */\n\nimport { useState, useEffect } from 'react';\nimport {\n Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogBody, DialogFooter,\n Button, Input, Label,\n IconShieldCheck, IconCheckCircle2, IconMail, IconSmartphone, IconArrowLeft,\n IconKeyRound, IconLock, IconLoader2,\n IconHome, IconCalendar, IconBell, IconMessageCircle, IconUsers, IconSettings,\n} from './ui';\nimport PhoneInput from './PhoneInput';\nimport OTPInput from './OTPInput';\nimport AppsLogoSlider from './AppsLogoSlider';\nimport PasswordRecoveryModal from './PasswordRecoveryModal';\nimport { useMobileRegistration } from '../hooks/useMobileRegistration';\nimport { nativeAuthService } from '../services/nativeAuth';\nimport { COUNTRIES_SORTED_BY_CODE, getCountryByCode, DEFAULT_COUNTRY_CODE } from '../utils/countries';\nimport type { UserInfos } from '../types/native';\nimport type { MobileRegistrationFormData } from '../types/mobile';\n\ntype SignupStep = 'intro' | 'account-type' | 'info' | 'otp' | 'password' | 'confirm';\n\nexport interface SignupModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onSwitchToLogin: () => void;\n onSignupSuccess: (token: string, user: UserInfos) => void;\n saasApiUrl: string;\n iamApiUrl: string;\n /** Type de compte par défaut à persister dans localStorage */\n defaultAccountType?: 'user' | 'client';\n /** Called when conflict resolution wants to switch to login with a pre-filled phone */\n onSwitchToLoginWithPhone?: (phone: string) => void;\n}\n\nconst C = {\n primary: '#002147',\n accent: '#e8430a',\n green: '#16a34a',\n greenBg: '#dcfce7',\n gray100: '#f3f4f6',\n gray200: '#e5e7eb',\n gray500: '#6b7280',\n gray700: '#374151',\n gray900: '#111827',\n red: '#dc2626',\n redBg: '#fef2f2',\n amber: '#f59e0b',\n amberBg: '#fef3c7',\n white: '#ffffff',\n} as const;\n\nconst iconCircle = (bg: string, size = '3rem'): React.CSSProperties => ({\n margin: '0 auto', width: size, height: size, backgroundColor: bg, borderRadius: '50%',\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n});\n\nconst backBtnStyle: React.CSSProperties = {\n position: 'absolute', left: '1rem', top: '1rem', background: 'none', border: 'none',\n cursor: 'pointer', padding: '0.5rem', borderRadius: '0.375rem', color: C.gray700, zIndex: 10,\n};\n\nconst linkStyle: React.CSSProperties = {\n color: C.primary, cursor: 'pointer', background: 'none', border: 'none',\n fontWeight: 500, textDecoration: 'underline', fontSize: '0.875rem',\n};\n\nconst TOTAL_STEPS = 6;\n\nfunction StepIndicator({ current }: { current: number }) {\n return (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '0.5rem', marginTop: '0.75rem' }}>\n {Array.from({ length: TOTAL_STEPS }, (_, i) => (\n <div key={i} style={{\n width: i + 1 === current ? '1.5rem' : '0.5rem',\n height: '0.5rem',\n borderRadius: '9999px',\n backgroundColor: i + 1 <= current ? C.accent : C.gray200,\n transition: 'all 0.2s',\n }} />\n ))}\n <span style={{ fontSize: '0.75rem', color: C.gray500, marginLeft: '0.5rem' }}>Étape {current}/{TOTAL_STEPS}</span>\n </div>\n );\n}\n\n// Orbit success animation\nfunction SuccessOrbit() {\n const orbitIcons = [IconHome, IconCalendar, IconBell, IconMessageCircle, IconUsers, IconSettings];\n return (\n <div style={{ position: 'relative', width: '10rem', height: '10rem', margin: '0 auto' }}>\n {/* Center shield */}\n <div style={{\n position: 'absolute', top: '50%', left: '50%', transform: 'translate(-50%, -50%)',\n width: '4rem', height: '4rem', backgroundColor: C.greenBg, borderRadius: '50%',\n display: 'flex', alignItems: 'center', justifyContent: 'center', zIndex: 2,\n }}>\n <IconShieldCheck style={{ width: '2rem', height: '2rem', color: C.green }} />\n </div>\n {/* Orbiting icons */}\n {orbitIcons.map((Icon, i) => {\n const angle = (i * 360) / orbitIcons.length;\n return (\n <div key={i} style={{\n position: 'absolute', top: '50%', left: '50%', width: '2rem', height: '2rem',\n transform: `rotate(${angle}deg) translate(4rem) rotate(-${angle}deg)`,\n transformOrigin: '0 0',\n animation: `spin ${8 + i}s linear infinite`,\n }}>\n <div style={{\n width: '2rem', height: '2rem', backgroundColor: C.gray100, borderRadius: '50%',\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n }}>\n <Icon style={{ width: '1rem', height: '1rem', color: C.gray500 }} />\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\nexport function SignupModal({ open, onOpenChange, onSwitchToLogin, onSignupSuccess, saasApiUrl, iamApiUrl, defaultAccountType, onSwitchToLoginWithPhone }: SignupModalProps) {\n const {\n status, formData, loading: regLoading, error: regError, conflict, accountType, setAccountType, isPhoneOnly,\n updateFormData, initRegistration, verifyOtp, completeRegistration, resendOtp, reset: resetReg, clearError,\n } = useMobileRegistration({ saasApiUrl, iamApiUrl });\n\n const [showPasswordRecovery, setShowPasswordRecovery] = useState(false);\n\n const [step, setStep] = useState<SignupStep>('intro');\n const [otpCode, setOtpCode] = useState('');\n const [password, setPassword] = useState('');\n const [passwordConfirm, setPasswordConfirm] = useState('');\n const [localError, setLocalError] = useState<string | null>(null);\n const [resendCooldown, setResendCooldown] = useState(0);\n const [signupSuccess, setSignupSuccess] = useState(false);\n const [signupData, setSignupData] = useState<{ token: string; user: UserInfos } | null>(null);\n\n const error = localError || regError;\n\n useEffect(() => { if (!open) { setStep('intro'); setOtpCode(''); setPassword(''); setPasswordConfirm(''); setLocalError(null); setSignupSuccess(false); setSignupData(null); setResendCooldown(0); resetReg(); } }, [open, resetReg]);\n useEffect(() => { if (status === 'pending_otp') { setStep('otp'); setResendCooldown(60); } else if (status === 'pending_password') setStep('password'); }, [status]);\n useEffect(() => { if (resendCooldown > 0) { const t = setTimeout(() => setResendCooldown(r => r - 1), 1000); return () => clearTimeout(t); } }, [resendCooldown]);\n useEffect(() => { if (signupSuccess && signupData) { const t = setTimeout(() => onSignupSuccess(signupData.token, signupData.user), 2000); return () => clearTimeout(t); } }, [signupSuccess, signupData, onSignupSuccess]);\n\n const exchangeCallbackToken = async (callbackToken: string) => {\n try {\n const response = await nativeAuthService.exchange(callbackToken);\n if (response.success && response.token) {\n setSignupData({ token: response.token, user: response.user as UserInfos });\n setSignupSuccess(true);\n } else setLocalError(\"Erreur lors de la finalisation de l'inscription\");\n } catch { setLocalError('Erreur de connexion au serveur'); }\n };\n\n const handleInfoSubmit = async (e: React.FormEvent) => {\n e.preventDefault(); setLocalError(null); clearError();\n if (!formData.name?.trim()) { setLocalError('Le nom est requis'); return; }\n if (!isPhoneOnly && !formData.email?.trim()) { setLocalError(\"L'adresse email est requise\"); return; }\n if (!formData.phone?.trim() || (formData.phone?.length || 0) < 6) { setLocalError('Numéro de téléphone invalide'); return; }\n if (formData.ccphone === '+221' && formData.phone?.length !== 9) { setLocalError('Le numéro sénégalais doit contenir exactement 9 chiffres'); return; }\n if (isPhoneOnly && formData.ccphone !== '+221') { setLocalError(\"L'inscription par téléphone est réservée aux numéros sénégalais (+221)\"); return; }\n if (!formData.town?.trim()) { setLocalError('La ville est requise'); return; }\n if (!formData.country?.trim()) { setLocalError('Le pays est requis'); return; }\n const registrationData: Omit<MobileRegistrationFormData, 'password' | 'password_confirmation'> = {\n name: formData.name || '',\n email: formData.email || '',\n ccphone: formData.ccphone || '+221',\n phone: formData.phone || '',\n town: formData.town,\n country: formData.country,\n };\n await initRegistration(registrationData);\n };\n\n const handleOTPSubmit = async () => {\n if (otpCode.length !== 6) { setLocalError('Veuillez entrer le code à 6 chiffres'); return; }\n setLocalError(null); clearError();\n const result = await verifyOtp(otpCode);\n if (result.success && result.completed && result.callback_token) await exchangeCallbackToken(result.callback_token);\n };\n\n const handlePasswordSubmit = (e: React.FormEvent) => {\n e.preventDefault(); setLocalError(null);\n if (!password || password.length < 8) { setLocalError('Le mot de passe doit contenir au moins 8 caractères'); return; }\n if (password !== passwordConfirm) { setLocalError('Les mots de passe ne correspondent pas'); return; }\n setStep('confirm');\n };\n\n const handleConfirm = async () => {\n setLocalError(null); clearError();\n const result = await completeRegistration(password);\n if (result.success && result.callback_token) await exchangeCallbackToken(result.callback_token);\n };\n\n const handleResendOTP = async () => { if (resendCooldown > 0) return; const r = await resendOtp(); if (r.success) setResendCooldown(r.cooldown || 60); };\n\n const goToStep = (s: SignupStep) => { setLocalError(null); clearError(); setStep(s); };\n\n const handleAccountTypeSelect = (type: 'email' | 'phone-only') => {\n setAccountType(type);\n if (type === 'phone-only') updateFormData({ ccphone: '+221', country: 'SN', email: '' });\n else if (!formData.country) updateFormData({ country: DEFAULT_COUNTRY_CODE });\n goToStep('info');\n };\n\n const stepNumber = { intro: 1, 'account-type': 2, info: 3, otp: 4, password: 5, confirm: 6 }[step];\n\n const renderError = () => error ? <div style={{ padding: '0.75rem', borderRadius: '0.375rem', backgroundColor: C.redBg, color: C.red, fontSize: '0.875rem' }}>{error}</div> : null;\n\n return (\n <>\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent>\n\n {/* ===================== SUCCESS ===================== */}\n {signupSuccess && signupData ? (\n <DialogHeader style={{ textAlign: 'center' }}>\n <SuccessOrbit />\n <DialogTitle>Félicitations !</DialogTitle>\n <DialogDescription>\n Votre compte a été créé avec succès. Bienvenue {formData.name} !\n </DialogDescription>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '0.5rem', fontSize: '0.875rem', color: C.gray500, marginTop: '1rem' }}>\n <IconLoader2 style={{ width: '1rem', height: '1rem' }} />\n Connexion automatique en cours...\n </div>\n </DialogHeader>\n ) : (\n <>\n {/* ===== INTRO ===== */}\n {step === 'intro' && (\n <>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={iconCircle(C.accent + '1a', '4rem')}>\n <IconShieldCheck style={{ width: '2rem', height: '2rem', color: C.accent }} />\n </div>\n <DialogTitle>Ouvrez un compte Ollaid</DialogTitle>\n <DialogDescription>Un compte unique qui vous donne accès à toutes les applications</DialogDescription>\n </DialogHeader>\n <DialogBody>\n <AppsLogoSlider iamApiUrl={iamApiUrl} />\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.75rem', fontSize: '0.875rem', color: C.gray500, margin: '0.75rem 0' }}>\n {['Un seul compte pour toutes les applications', 'Plus besoin de multiples mots de passe', 'Connexion simplifiée et sécurisée'].map(text => (\n <div key={text} style={{ display: 'flex', alignItems: 'center', gap: '0.75rem' }}>\n <IconCheckCircle2 style={{ width: '1.25rem', height: '1.25rem', color: C.green, flexShrink: 0 }} />\n {text}\n </div>\n ))}\n </div>\n <StepIndicator current={1} />\n </DialogBody>\n <DialogFooter>\n <Button onClick={() => goToStep('account-type')} style={{ width: '100%' }}>Suivant →</Button>\n <div style={{ textAlign: 'center', fontSize: '0.875rem' }}>\n <span style={{ color: C.gray500 }}>Déjà un compte ? </span>\n <button type=\"button\" style={linkStyle} onClick={onSwitchToLogin}>Connectez-vous</button>\n </div>\n </DialogFooter>\n </>\n )}\n\n {/* ===== ACCOUNT TYPE ===== */}\n {step === 'account-type' && (\n <>\n <button onClick={() => goToStep('intro')} style={backBtnStyle} type=\"button\">\n <IconArrowLeft style={{ width: '1rem', height: '1rem' }} />\n </button>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={iconCircle(C.gray100)}>\n <IconShieldCheck style={{ width: '1.5rem', height: '1.5rem', color: C.primary }} />\n </div>\n <DialogTitle>Choisissez votre type de compte</DialogTitle>\n </DialogHeader>\n <DialogBody>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.75rem' }}>\n <button type=\"button\" onClick={() => handleAccountTypeSelect('email')}\n style={{ width: '100%', padding: '1rem', border: `2px solid ${C.gray200}`, borderRadius: '0.5rem', textAlign: 'left', cursor: 'pointer', background: C.white, display: 'flex', alignItems: 'center', gap: '0.75rem' }}>\n <div style={{ width: '2.5rem', height: '2.5rem', backgroundColor: C.accent, borderRadius: '0.5rem', display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}>\n <IconMail style={{ width: '1.25rem', height: '1.25rem', color: C.white }} />\n </div>\n <div>\n <div style={{ fontWeight: 600, color: C.gray900 }}>Email + Téléphone</div>\n <div style={{ fontSize: '0.875rem', color: C.gray500 }}>Compte complet</div>\n </div>\n </button>\n <button type=\"button\" onClick={() => handleAccountTypeSelect('phone-only')}\n style={{ width: '100%', padding: '1rem', border: `2px solid ${C.gray200}`, borderRadius: '0.5rem', textAlign: 'left', cursor: 'pointer', background: C.white, display: 'flex', alignItems: 'center', gap: '0.75rem' }}>\n <div style={{ width: '2.5rem', height: '2.5rem', backgroundColor: C.accent, borderRadius: '0.5rem', display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}>\n <IconSmartphone style={{ width: '1.25rem', height: '1.25rem', color: C.white }} />\n </div>\n <div>\n <div style={{ fontWeight: 600, color: C.gray900 }}>Téléphone uniquement</div>\n <div style={{ fontSize: '0.875rem', color: C.gray500 }}>🇸🇳 Sénégal uniquement</div>\n </div>\n </button>\n </div>\n <StepIndicator current={2} />\n </DialogBody>\n </>\n )}\n\n {/* ===== INFO (with conflict resolution) ===== */}\n {step === 'info' && (\n <>\n <button onClick={() => goToStep('account-type')} style={backBtnStyle} type=\"button\">\n <IconArrowLeft style={{ width: '1rem', height: '1rem' }} />\n </button>\n\n {/* ---- CONFLICT VIEW ---- */}\n {conflict ? (\n <>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={iconCircle(C.amberBg)}>\n <IconShieldCheck style={{ width: '1.5rem', height: '1.5rem', color: C.amber }} />\n </div>\n <DialogTitle>\n {conflict.type === 'phone' ? 'Numéro déjà utilisé' : 'Email déjà utilisé'}\n </DialogTitle>\n <DialogDescription>\n {conflict.type === 'phone'\n ? `Le numéro ${formData.ccphone || ''} ${formData.phone || ''} est déjà associé à un compte.`\n : `L'adresse ${formData.email || ''} est déjà associée à un compte.`}\n {' '}S'il s'agit du vôtre, connectez-vous.\n </DialogDescription>\n </DialogHeader>\n <DialogFooter style={{ borderTop: 'none' }}>\n {conflict.type === 'phone' && formData.ccphone === '+221' && conflict.options?.can_login && (\n <Button\n onClick={() => {\n const fullPhone = formData.phone || '';\n if (onSwitchToLoginWithPhone) onSwitchToLoginWithPhone(fullPhone);\n else onSwitchToLogin();\n }}\n style={{ width: '100%' }}\n >\n <IconSmartphone style={{ width: '1rem', height: '1rem' }} />\n Se connecter par téléphone\n </Button>\n )}\n {(conflict.type === 'email' || (conflict.type === 'phone' && formData.ccphone !== '+221')) && conflict.options?.can_login && (\n <Button onClick={onSwitchToLogin} style={{ width: '100%' }}>\n Se connecter\n </Button>\n )}\n {!isPhoneOnly && (conflict.options?.can_recover_by_email || conflict.options?.can_recover_by_sms) && (\n <Button variant=\"outline\" onClick={() => setShowPasswordRecovery(true)} style={{ width: '100%' }}>\n Récupérer mon compte\n </Button>\n )}\n <Button variant=\"outline\" onClick={() => clearError()} style={{ width: '100%' }}>\n {conflict.type === 'phone' ? 'Changer le numéro' : \"Changer l'email\"}\n </Button>\n {conflict.options?.masked_email && (\n <div style={{ padding: '0.75rem', backgroundColor: C.gray100, borderRadius: '0.375rem', fontSize: '0.8125rem', color: C.gray500, textAlign: 'center' }}>\n Email lié : <strong style={{ color: C.gray900 }}>{conflict.options.masked_email}</strong>\n </div>\n )}\n {conflict.options?.masked_phone && (\n <div style={{ padding: '0.75rem', backgroundColor: C.gray100, borderRadius: '0.375rem', fontSize: '0.8125rem', color: C.gray500, textAlign: 'center' }}>\n Téléphone lié : <strong style={{ color: C.gray900 }}>{conflict.options.masked_phone}</strong>\n </div>\n )}\n </DialogFooter>\n </>\n ) : (\n /* ---- NORMAL INFO FORM ---- */\n <>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={iconCircle(C.primary + '1a')}>\n <IconShieldCheck style={{ width: '1.5rem', height: '1.5rem', color: C.primary }} />\n </div>\n <DialogTitle>Créer votre compte</DialogTitle>\n </DialogHeader>\n <form onSubmit={handleInfoSubmit} style={{ display: 'flex', flexDirection: 'column', flex: 1, minHeight: 0 }}>\n <DialogBody>\n {isPhoneOnly && (\n <div style={{ padding: '0.75rem', borderRadius: '0.375rem', backgroundColor: C.accent + '1a', color: C.accent, fontSize: '0.8125rem', marginBottom: '0.5rem', textAlign: 'center' }}>\n 📱 Inscription par téléphone — 🇸🇳 Sénégal uniquement\n </div>\n )}\n {!isPhoneOnly && (\n <div style={{ padding: '0.75rem', borderRadius: '0.375rem', backgroundColor: C.amberBg, color: '#92400e', fontSize: '0.8125rem', marginBottom: '0.5rem', textAlign: 'center' }}>\n ⚠️ Un code OTP sera envoyé par email pour vérification\n </div>\n )}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.75rem' }}>\n {renderError()}\n <div><Label>Nom complet <span style={{ color: C.red }}>*</span></Label><Input placeholder=\"Jean Dupont\" value={formData.name || ''} onChange={e => updateFormData({ name: e.target.value })} disabled={regLoading} /></div>\n {!isPhoneOnly && <div><Label>Adresse email <span style={{ color: C.red }}>*</span></Label><Input type=\"email\" placeholder=\"vous@exemple.com\" value={formData.email || ''} onChange={e => updateFormData({ email: e.target.value })} disabled={regLoading} /></div>}\n <div><Label>Numéro de téléphone <span style={{ color: C.red }}>*</span></Label><PhoneInput value={formData.phone || ''} onChange={p => updateFormData({ phone: p })} ccphone={formData.ccphone || '+221'} onCcphoneChange={c => updateFormData({ ccphone: c })} disabled={regLoading} lockCcphone={isPhoneOnly} /></div>\n <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '0.75rem' }}>\n <div><Label>Ville <span style={{ color: C.red }}>*</span></Label><Input placeholder=\"Dakar\" value={formData.town || ''} onChange={e => updateFormData({ town: e.target.value })} disabled={regLoading} /></div>\n <div>\n <Label>Pays <span style={{ color: C.red }}>*</span></Label>\n <select\n value={formData.country || DEFAULT_COUNTRY_CODE}\n onChange={e => {\n const country = getCountryByCode(e.target.value);\n updateFormData({ country: e.target.value, ccphone: country?.dialCode || '+221' });\n }}\n disabled={regLoading || isPhoneOnly}\n style={{ width: '100%', padding: '0.5rem', borderRadius: '0.375rem', border: '1px solid #d1d5db', backgroundColor: (regLoading || isPhoneOnly) ? '#f3f4f6' : 'white', fontSize: '0.875rem' }}\n >\n {COUNTRIES_SORTED_BY_CODE.map(c => (\n <option key={c.code} value={c.code}>{c.code} {c.flag} {c.name}</option>\n ))}\n </select>\n </div>\n </div>\n <StepIndicator current={3} />\n </div>\n </DialogBody>\n <DialogFooter>\n <Button type=\"submit\" disabled={regLoading} style={{ width: '100%' }}>\n {regLoading ? (\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <IconLoader2 style={{ width: '1rem', height: '1rem' }} /> Vérification...\n </span>\n ) : 'Continuer'}\n </Button>\n </DialogFooter>\n </form>\n </>\n )}\n </>\n )}\n\n {/* ===== OTP ===== */}\n {step === 'otp' && (\n <>\n <button onClick={() => goToStep('info')} style={backBtnStyle} type=\"button\">\n <IconArrowLeft style={{ width: '1rem', height: '1rem' }} />\n </button>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={iconCircle(C.accent)}>\n <IconKeyRound style={{ width: '1.5rem', height: '1.5rem', color: C.white }} />\n </div>\n <DialogTitle>Vérification</DialogTitle>\n <DialogDescription>Entrez le code envoyé {isPhoneOnly ? `au ${formData.ccphone} ${formData.phone}` : `à ${formData.email}`}</DialogDescription>\n </DialogHeader>\n <DialogBody>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n {renderError()}\n <OTPInput value={otpCode} onChange={setOtpCode} disabled={regLoading} />\n <div style={{ textAlign: 'center', fontSize: '0.875rem' }}>\n {resendCooldown > 0 ? <span style={{ color: C.gray500 }}>Renvoyer dans {resendCooldown}s</span> : <button type=\"button\" onClick={handleResendOTP} style={linkStyle}>Code non reçu ? Renvoyer</button>}\n </div>\n <StepIndicator current={4} />\n </div>\n </DialogBody>\n <DialogFooter>\n <Button onClick={handleOTPSubmit} disabled={regLoading || otpCode.length !== 6} style={{ width: '100%' }}>\n {regLoading ? (\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <IconLoader2 style={{ width: '1rem', height: '1rem' }} /> Vérification...\n </span>\n ) : 'Vérifier'}\n </Button>\n </DialogFooter>\n </>\n )}\n\n {/* ===== PASSWORD ===== */}\n {step === 'password' && (\n <>\n <button onClick={() => goToStep('otp')} style={backBtnStyle} type=\"button\">\n <IconArrowLeft style={{ width: '1rem', height: '1rem' }} />\n </button>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={iconCircle(C.accent)}>\n <IconLock style={{ width: '1.5rem', height: '1.5rem', color: C.white }} />\n </div>\n <DialogTitle>Créer un mot de passe</DialogTitle>\n </DialogHeader>\n <form onSubmit={handlePasswordSubmit} style={{ display: 'flex', flexDirection: 'column', flex: 1, minHeight: 0 }}>\n <DialogBody>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.75rem' }}>\n {renderError()}\n <div><Label>Mot de passe</Label><Input type=\"password\" placeholder=\"Minimum 8 caractères\" value={password} onChange={e => setPassword(e.target.value)} disabled={regLoading} /></div>\n <div><Label>Confirmer le mot de passe</Label><Input type=\"password\" placeholder=\"••••••••\" value={passwordConfirm} onChange={e => setPasswordConfirm(e.target.value)} disabled={regLoading} /></div>\n <StepIndicator current={5} />\n </div>\n </DialogBody>\n <DialogFooter>\n <Button type=\"submit\" disabled={regLoading} style={{ width: '100%' }}>Continuer</Button>\n </DialogFooter>\n </form>\n </>\n )}\n\n {/* ===== CONFIRM ===== */}\n {step === 'confirm' && (\n <>\n <button onClick={() => goToStep('password')} style={backBtnStyle} type=\"button\">\n <IconArrowLeft style={{ width: '1rem', height: '1rem' }} />\n </button>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={iconCircle(C.primary + '1a')}>\n <IconShieldCheck style={{ width: '1.5rem', height: '1.5rem', color: C.primary }} />\n </div>\n <DialogTitle>Confirmer votre inscription</DialogTitle>\n </DialogHeader>\n <DialogBody>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.75rem' }}>\n {renderError()}\n <div style={{ backgroundColor: C.gray100, borderRadius: '0.5rem', padding: '1rem' }}>\n {[['Nom', formData.name], ...(!isPhoneOnly ? [['Email', formData.email]] : []), ['Téléphone', `${formData.ccphone} ${formData.phone}`], ['Ville', formData.town], ['Pays', formData.country]].map(([label, value]) => (\n <div key={label as string} style={{ display: 'flex', justifyContent: 'space-between', padding: '0.375rem 0' }}>\n <span style={{ fontSize: '0.875rem', color: C.gray500 }}>{label}</span>\n <span style={{ fontSize: '0.875rem', fontWeight: 500 }}>{value as string}</span>\n </div>\n ))}\n </div>\n <StepIndicator current={6} />\n </div>\n </DialogBody>\n <DialogFooter>\n <Button onClick={handleConfirm} disabled={regLoading} style={{ width: '100%' }}>\n {regLoading ? (\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <IconLoader2 style={{ width: '1rem', height: '1rem' }} /> Création du compte...\n </span>\n ) : 'Créer mon compte'}\n </Button>\n </DialogFooter>\n </>\n )}\n </>\n )}\n </DialogContent>\n </Dialog>\n\n <PasswordRecoveryModal\n open={showPasswordRecovery}\n onOpenChange={setShowPasswordRecovery}\n onSuccess={() => setShowPasswordRecovery(false)}\n saasApiUrl={saasApiUrl}\n iamApiUrl={iamApiUrl}\n />\n </>\n );\n}\n\nexport default SignupModal;\n","/**\n * Profile change service for @ollaid/native-sso\n * Uses authenticated IAM endpoints for email / phone change with OTP confirmation.\n *\n * @version 2.7.0\n */\n\nimport { fetchWithTimeout, getAuthToken, getHeaders, getIamApiBaseUrl, ensureDeviceContext } from './api';\n\nexport type ProfileChangeKind = 'email' | 'phone';\nexport type ProfileChangeMethod = 'email' | 'phone';\n\nexport interface ProfileChangeRequestResponse {\n success: boolean;\n message?: string;\n request_id?: number;\n method?: ProfileChangeMethod;\n otp_dev?: string | null;\n}\n\nexport interface ProfileChangeVerifyResponse {\n success: boolean;\n message?: string;\n step?: 'pending_new_otp' | 'completed' | string;\n user?: unknown;\n}\n\nfunction getBaseUrl() {\n return getIamApiBaseUrl();\n}\n\nasync function getAuthHeaders(includeConfigPrefix = false) {\n const token = getAuthToken();\n await ensureDeviceContext();\n return getHeaders(token || undefined, includeConfigPrefix);\n}\n\nexport const profileChangeService = {\n async requestEmailChange(newEmail: string, method: ProfileChangeMethod = 'phone'): Promise<ProfileChangeRequestResponse> {\n const headers = await getAuthHeaders(true);\n return fetchWithTimeout<ProfileChangeRequestResponse>(\n `${getBaseUrl()}/backoffice/profile/email/request`,\n {\n method: 'POST',\n headers,\n body: JSON.stringify({ new_email: newEmail, method }),\n },\n 30000\n );\n },\n\n async requestPhoneChange(ccphone: string, phone: string, method: ProfileChangeMethod = 'email'): Promise<ProfileChangeRequestResponse> {\n const headers = await getAuthHeaders(true);\n return fetchWithTimeout<ProfileChangeRequestResponse>(\n `${getBaseUrl()}/backoffice/profile/phone/request`,\n {\n method: 'POST',\n headers,\n body: JSON.stringify({ ccphone, phone, method }),\n },\n 30000\n );\n },\n\n async verifyOldOTP(requestId: number, otpCode: string): Promise<ProfileChangeVerifyResponse> {\n const headers = await getAuthHeaders(true);\n return fetchWithTimeout<ProfileChangeVerifyResponse>(\n `${getBaseUrl()}/backoffice/profile/change/verify-old`,\n {\n method: 'POST',\n headers,\n body: JSON.stringify({ request_id: requestId, otp_code: otpCode }),\n },\n 30000\n );\n },\n\n async verifyNewOTP(requestId: number, otpCode: string): Promise<ProfileChangeVerifyResponse> {\n const headers = await getAuthHeaders(true);\n return fetchWithTimeout<ProfileChangeVerifyResponse>(\n `${getBaseUrl()}/backoffice/profile/change/verify-new`,\n {\n method: 'POST',\n headers,\n body: JSON.stringify({ request_id: requestId, otp_code: otpCode }),\n },\n 30000\n );\n },\n\n async resendOTP(requestId: number): Promise<ProfileChangeRequestResponse> {\n const headers = await getAuthHeaders(true);\n return fetchWithTimeout<ProfileChangeRequestResponse>(\n `${getBaseUrl()}/backoffice/profile/change/resend-otp`,\n {\n method: 'POST',\n headers,\n body: JSON.stringify({ request_id: requestId }),\n },\n 30000\n );\n },\n\n async switchMethod(requestId: number, method: ProfileChangeMethod): Promise<ProfileChangeRequestResponse> {\n const headers = await getAuthHeaders(true);\n return fetchWithTimeout<ProfileChangeRequestResponse>(\n `${getBaseUrl()}/backoffice/profile/change/switch-method`,\n {\n method: 'POST',\n headers,\n body: JSON.stringify({ request_id: requestId, method }),\n },\n 30000\n );\n },\n};\n\nexport default profileChangeService;\n","/**\n * AvatarCropModal — recadrage carré simple et déterministe\n *\n * Version réécrite from scratch pour éviter les états qui bloquent le bouton Valider.\n *\n * @version 2.7.0\n */\n\nimport { useCallback, useEffect, useMemo, useRef, useState, type PointerEvent as ReactPointerEvent } from 'react';\nimport { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogBody, DialogFooter, Button } from './ui';\n\nexport interface AvatarCropModalProps {\n open: boolean;\n imageSrc: string | null;\n onOpenChange: (open: boolean) => void;\n onCancel: () => void;\n onConfirm: (blob: Blob) => Promise<void> | void;\n}\n\ntype Point = { x: number; y: number };\ntype Size = { width: number; height: number };\ntype CropRect = { x: number; y: number; size: number };\ntype DragMode = 'move' | 'resize-nw' | 'resize-ne' | 'resize-sw' | 'resize-se' | null;\n\nconst MIN_SIZE = 88;\nconst HANDLE = 16;\nconst OUTPUT = 512;\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.max(min, Math.min(max, value));\n}\n\nfunction getContainRect(container: Size, natural: Size) {\n if (!container.width || !container.height || !natural.width || !natural.height) {\n return { x: 0, y: 0, width: 0, height: 0, scale: 1 };\n }\n\n const scale = Math.min(container.width / natural.width, container.height / natural.height);\n const width = natural.width * scale;\n const height = natural.height * scale;\n\n return {\n x: (container.width - width) / 2,\n y: (container.height - height) / 2,\n width,\n height,\n scale,\n };\n}\n\nexport function AvatarCropModal({ open, imageSrc, onOpenChange, onCancel, onConfirm }: AvatarCropModalProps) {\n const wrapRef = useRef<HTMLDivElement | null>(null);\n const imgRef = useRef<HTMLImageElement | null>(null);\n const dragRef = useRef<{\n mode: DragMode;\n pointerId: number;\n start: Point;\n startCrop: CropRect;\n } | null>(null);\n\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState('');\n const [natural, setNatural] = useState<Size>({ width: 0, height: 0 });\n const [container, setContainer] = useState<Size>({ width: 0, height: 0 });\n const [crop, setCrop] = useState<CropRect | null>(null);\n const [dragMode, setDragMode] = useState<DragMode>(null);\n\n const frame = useMemo(() => getContainRect(container, natural), [container, natural]);\n\n useEffect(() => {\n if (!open) return;\n setLoading(false);\n setError('');\n setNatural({ width: 0, height: 0 });\n setCrop(null);\n setDragMode(null);\n dragRef.current = null;\n }, [open, imageSrc]);\n\n useEffect(() => {\n if (!open) return;\n\n const measure = () => {\n const el = wrapRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n setContainer({ width: rect.width, height: rect.width });\n };\n\n measure();\n window.addEventListener('resize', measure);\n return () => window.removeEventListener('resize', measure);\n }, [open]);\n\n useEffect(() => {\n if (!open || !frame.width || !frame.height) return;\n setCrop((current) => {\n if (current) {\n const maxSize = Math.min(frame.width, frame.height);\n const size = clamp(current.size, MIN_SIZE, maxSize);\n const x = clamp(current.x, frame.x, frame.x + frame.width - size);\n const y = clamp(current.y, frame.y, frame.y + frame.height - size);\n return { x, y, size };\n }\n\n const maxSize = Math.min(frame.width, frame.height);\n const size = clamp(Math.round(maxSize * 0.7), MIN_SIZE, maxSize);\n return {\n x: frame.x + Math.round((frame.width - size) / 2),\n y: frame.y + Math.round((frame.height - size) / 2),\n size,\n };\n });\n }, [open, frame]);\n\n const startDrag = (mode: DragMode, event: ReactPointerEvent<HTMLDivElement>) => {\n if (!crop || !mode) return;\n event.preventDefault();\n event.stopPropagation();\n dragRef.current = {\n mode,\n pointerId: event.pointerId,\n start: { x: event.clientX, y: event.clientY },\n startCrop: crop,\n };\n setDragMode(mode);\n try {\n event.currentTarget.setPointerCapture(event.pointerId);\n } catch {\n // not supported in all webviews\n }\n };\n\n const moveCrop = useCallback((clientX: number, clientY: number) => {\n const state = dragRef.current;\n if (!state || !crop || !frame.width || !frame.height) return;\n\n const dx = clientX - state.start.x;\n const dy = clientY - state.start.y;\n const maxSize = Math.min(frame.width, frame.height);\n\n if (state.mode === 'move') {\n setCrop({\n ...state.startCrop,\n x: clamp(state.startCrop.x + dx, frame.x, frame.x + frame.width - state.startCrop.size),\n y: clamp(state.startCrop.y + dy, frame.y, frame.y + frame.height - state.startCrop.size),\n });\n return;\n }\n\n let next = { ...state.startCrop };\n const anchorLeft = state.startCrop.x;\n const anchorTop = state.startCrop.y;\n const anchorRight = state.startCrop.x + state.startCrop.size;\n const anchorBottom = state.startCrop.y + state.startCrop.size;\n\n if (state.mode === 'resize-se') {\n const size = clamp(Math.max(state.startCrop.size + dx, state.startCrop.size + dy), MIN_SIZE, maxSize);\n next = { x: anchorLeft, y: anchorTop, size };\n } else if (state.mode === 'resize-sw') {\n const size = clamp(Math.max(state.startCrop.size - dx, state.startCrop.size + dy), MIN_SIZE, maxSize);\n next = { x: anchorRight - size, y: anchorTop, size };\n } else if (state.mode === 'resize-ne') {\n const size = clamp(Math.max(state.startCrop.size + dx, state.startCrop.size - dy), MIN_SIZE, maxSize);\n next = { x: anchorLeft, y: anchorBottom - size, size };\n } else if (state.mode === 'resize-nw') {\n const size = clamp(Math.max(state.startCrop.size - dx, state.startCrop.size - dy), MIN_SIZE, maxSize);\n next = { x: anchorRight - size, y: anchorBottom - size, size };\n }\n\n next.x = clamp(next.x, frame.x, frame.x + frame.width - next.size);\n next.y = clamp(next.y, frame.y, frame.y + frame.height - next.size);\n setCrop(next);\n }, [crop, frame.height, frame.width, frame.x, frame.y]);\n\n useEffect(() => {\n if (!dragMode) return;\n\n const onMove = (event: PointerEvent) => {\n if (!dragRef.current || event.pointerId !== dragRef.current.pointerId) return;\n moveCrop(event.clientX, event.clientY);\n };\n\n const onUp = (event: PointerEvent) => {\n if (!dragRef.current || event.pointerId !== dragRef.current.pointerId) return;\n dragRef.current = null;\n setDragMode(null);\n window.removeEventListener('pointermove', onMove);\n window.removeEventListener('pointerup', onUp);\n window.removeEventListener('pointercancel', onUp);\n };\n\n window.addEventListener('pointermove', onMove);\n window.addEventListener('pointerup', onUp);\n window.addEventListener('pointercancel', onUp);\n return () => {\n window.removeEventListener('pointermove', onMove);\n window.removeEventListener('pointerup', onUp);\n window.removeEventListener('pointercancel', onUp);\n };\n }, [dragMode, moveCrop]);\n\n const handleConfirm = async () => {\n if (!imageSrc || !imgRef.current || !crop || !natural.width || !natural.height) {\n setError('L’image n’est pas encore prête.');\n return;\n }\n\n const canvas = document.createElement('canvas');\n canvas.width = OUTPUT;\n canvas.height = OUTPUT;\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n setError('Impossible de préparer le recadrage.');\n return;\n }\n\n const sx = (crop.x - frame.x) / frame.scale;\n const sy = (crop.y - frame.y) / frame.scale;\n const sSize = crop.size / frame.scale;\n\n setLoading(true);\n setError('');\n\n try {\n ctx.drawImage(imgRef.current, sx, sy, sSize, sSize, 0, 0, OUTPUT, OUTPUT);\n const blob = await new Promise<Blob | null>((resolve) => canvas.toBlob(resolve, 'image/jpeg', 0.92));\n if (!blob) {\n throw new Error('Impossible de générer l’image recadrée.');\n }\n\n await onConfirm(blob);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Erreur lors de la validation.');\n } finally {\n setLoading(false);\n }\n };\n\n const overlayStyle: React.CSSProperties = {\n position: 'absolute',\n inset: 0,\n cursor: dragMode ? 'grabbing' : 'grab',\n touchAction: 'none',\n };\n\n const cropStyle: React.CSSProperties = crop\n ? {\n position: 'absolute',\n left: `${crop.x}px`,\n top: `${crop.y}px`,\n width: `${crop.size}px`,\n height: `${crop.size}px`,\n border: '2px solid #ffffff',\n borderRadius: '0.5rem',\n boxShadow: '0 0 0 9999px rgba(0, 0, 0, 0.40)',\n boxSizing: 'border-box',\n touchAction: 'none',\n }\n : { display: 'none' };\n\n const handleOuter: React.CSSProperties = {\n position: 'absolute',\n width: `${HANDLE * 2}px`,\n height: `${HANDLE * 2}px`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 2,\n touchAction: 'none',\n userSelect: 'none',\n };\n\n const handleInner: React.CSSProperties = {\n width: `${HANDLE}px`,\n height: `${HANDLE}px`,\n borderRadius: '999px',\n border: '2px solid #002147',\n background: '#fff',\n boxShadow: '0 1px 2px rgba(0,0,0,0.18)',\n };\n\n return (\n <Dialog open={open} onOpenChange={(next) => { if (!next) onCancel(); onOpenChange(next); }}>\n <DialogContent style={{ maxWidth: '28rem', padding: '0.8rem', maxHeight: '90vh' }}>\n <DialogHeader>\n <DialogTitle>Recadrer la photo</DialogTitle>\n <DialogDescription>Déplacez le carré, puis validez pour enregistrer l’avatar.</DialogDescription>\n </DialogHeader>\n\n <DialogBody style={{ maxHeight: '64vh', overflowY: 'auto', paddingBottom: '0.25rem' }}>\n <div\n ref={wrapRef}\n style={{\n position: 'relative',\n width: '100%',\n aspectRatio: '1 / 1',\n overflow: 'hidden',\n borderRadius: '0.8rem',\n border: '1px solid #e5e7eb',\n background: '#0f172a',\n }}\n >\n {imageSrc && (\n <img\n ref={imgRef}\n src={imageSrc}\n alt=\"Aperçu\"\n onLoad={(e) => {\n setNatural({ width: e.currentTarget.naturalWidth, height: e.currentTarget.naturalHeight });\n }}\n style={{\n position: 'absolute',\n inset: 0,\n width: '100%',\n height: '100%',\n objectFit: 'contain',\n userSelect: 'none',\n pointerEvents: 'none',\n }}\n />\n )}\n\n {crop && (\n <div style={overlayStyle}>\n <div style={cropStyle} onPointerDown={(e) => startDrag('move', e)}>\n <div style={{ ...handleOuter, left: `-${HANDLE * 0.5}px`, top: `-${HANDLE * 0.5}px`, cursor: 'nwse-resize' }} onPointerDown={(e) => startDrag('resize-nw', e)}>\n <div style={handleInner} />\n </div>\n <div style={{ ...handleOuter, right: `-${HANDLE * 0.5}px`, top: `-${HANDLE * 0.5}px`, cursor: 'nesw-resize' }} onPointerDown={(e) => startDrag('resize-ne', e)}>\n <div style={handleInner} />\n </div>\n <div style={{ ...handleOuter, left: `-${HANDLE * 0.5}px`, bottom: `-${HANDLE * 0.5}px`, cursor: 'nesw-resize' }} onPointerDown={(e) => startDrag('resize-sw', e)}>\n <div style={handleInner} />\n </div>\n <div style={{ ...handleOuter, right: `-${HANDLE * 0.5}px`, bottom: `-${HANDLE * 0.5}px`, cursor: 'nwse-resize' }} onPointerDown={(e) => startDrag('resize-se', e)}>\n <div style={handleInner} />\n </div>\n </div>\n </div>\n )}\n </div>\n\n <div style={{ marginTop: '0.9rem', display: 'grid', gap: '0.6rem' }}>\n <div style={{ fontSize: '0.8rem', color: '#6b7280', lineHeight: 1.4 }}>\n Faites glisser le carré pour cadrer l’image. Les coins redimensionnent le carré.\n </div>\n {error && (\n <div style={{ padding: '0.65rem 0.75rem', borderRadius: '0.5rem', border: '1px solid #fecaca', background: '#fef2f2', color: '#b91c1c', fontSize: '0.85rem', lineHeight: 1.4 }}>\n {error}\n </div>\n )}\n </div>\n </DialogBody>\n\n <DialogFooter style={{ flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center' }}>\n <Button variant=\"outline\" onClick={onCancel} disabled={loading} style={{ minWidth: '6.5rem', height: '2.35rem' }}>\n Annuler\n </Button>\n <Button onClick={handleConfirm} disabled={!imageSrc || loading || !crop} style={{ minWidth: '7rem', height: '2.35rem' }}>\n {loading ? 'Chargement...' : 'Valider'}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\nexport default AvatarCropModal;\n","/**\n * Profile media service for @ollaid/native-sso\n * Uploads the cropped avatar to the IAM authenticated profile endpoint.\n *\n * @version 2.7.0\n */\n\nimport { fetchWithTimeout, getAuthToken, getHeaders, getIamApiBaseUrl, ensureDeviceContext } from './api';\nimport type { UserInfos } from '../types/native';\n\nexport interface ProfileImageUploadResponse {\n message?: string;\n user?: UserInfos;\n user_infos?: UserInfos;\n}\n\nexport const profileMediaService = {\n async uploadProfileImage(image: Blob, filename = 'avatar.jpg'): Promise<ProfileImageUploadResponse> {\n const baseUrl = getIamApiBaseUrl();\n const token = getAuthToken();\n if (!token) {\n throw new Error('Token manquant');\n }\n\n await ensureDeviceContext();\n\n const formData = new FormData();\n formData.append('image', image, filename);\n\n const headers = getHeaders(token, true);\n delete (headers as Record<string, string>)['Content-Type'];\n\n return fetchWithTimeout<ProfileImageUploadResponse>(\n `${baseUrl}/backoffice/profile/image`,\n {\n method: 'POST',\n headers,\n body: formData,\n },\n 30000\n );\n },\n};\n\nexport default profileMediaService;\n","/**\n * Profile service for @ollaid/native-sso\n * Updates the authenticated profile fields via IAM.\n *\n * @version 2.7.0\n */\n\nimport { fetchWithTimeout, getAuthToken, getHeaders, getIamApiBaseUrl, ensureDeviceContext } from './api';\nimport type { UserInfos } from '../types/native';\n\nexport interface ProfileUpdateRequest {\n name?: string;\n ccphone?: string;\n phone?: string;\n email?: string;\n address?: string;\n town?: string;\n country?: string;\n}\n\nexport interface ProfileUpdateResponse {\n message?: string;\n user?: UserInfos;\n user_infos?: UserInfos;\n}\n\nexport interface ProfileFetchResponse {\n message?: string;\n user?: UserInfos;\n user_infos?: UserInfos;\n}\n\nexport const profileService = {\n async getProfile(): Promise<ProfileFetchResponse> {\n const baseUrl = getIamApiBaseUrl();\n const token = getAuthToken();\n if (!token) {\n throw new Error('Token manquant');\n }\n\n await ensureDeviceContext();\n\n return fetchWithTimeout<ProfileFetchResponse>(\n `${baseUrl}/backoffice/profile`,\n {\n method: 'GET',\n headers: getHeaders(token, true),\n },\n 20000\n );\n },\n\n async updateProfile(data: ProfileUpdateRequest): Promise<ProfileUpdateResponse> {\n const baseUrl = getIamApiBaseUrl();\n const token = getAuthToken();\n if (!token) {\n throw new Error('Token manquant');\n }\n\n await ensureDeviceContext();\n\n return fetchWithTimeout<ProfileUpdateResponse>(\n `${baseUrl}/backoffice/profile`,\n {\n method: 'PUT',\n headers: getHeaders(token, true),\n body: JSON.stringify(data),\n },\n 30000\n );\n },\n};\n\nexport default profileService;\n","/**\n * OnboardingModal — Modal de profil unifiée\n * Mode `missing` : champs absents uniquement\n * Mode `edit` : édition complète du profil depuis le SaaS\n *\n * @version 2.7.0\n */\n\nimport { useState, useCallback, useEffect, useRef } from 'react';\nimport { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogBody, DialogFooter, Button, Label } from './ui';\nimport OTPInput from './OTPInput';\nimport { PhoneInput } from './PhoneInput';\nimport { profileChangeService } from '../services/profileChange';\nimport AvatarCropModal from './AvatarCropModal';\nimport { profileMediaService } from '../services/profileMedia';\nimport { profileService } from '../services/profile';\nimport type { NativeUser, UserInfos } from '../types/native';\nimport { COUNTRIES_SORTED_BY_CODE, DEFAULT_COUNTRY_CODE } from '../utils/countries';\n\nconst C = {\n primary: '#002147',\n accent: '#e8430a',\n gray100: '#f3f4f6',\n gray200: '#e5e7eb',\n gray500: '#6b7280',\n gray700: '#374151',\n white: '#ffffff',\n} as const;\n\nexport interface OnboardingModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onDismiss: () => void;\n user: NativeUser;\n variant?: 'missing' | 'edit';\n profileHydrating?: boolean;\n onComplete: (data: {\n name?: string;\n image_url?: string;\n ccphone?: string;\n phone?: string;\n email?: string;\n address?: string;\n town?: string;\n country?: string;\n user_infos?: UserInfos;\n }) => void;\n onSkip: () => void;\n}\n\ntype ContactKind = 'email' | 'phone';\ntype ContactPhase = 'request' | 'verify-old' | 'verify-new';\n\ninterface ContactFlowState {\n kind: ContactKind;\n phase: ContactPhase;\n requestId: number | null;\n method: 'email' | 'phone';\n newEmail: string;\n newCcphone: string;\n newPhone: string;\n oldOtp: string;\n newOtp: string;\n loading: boolean;\n error: string;\n resendAvailableAt: number | null;\n}\n\ntype SubmitState = 'idle' | 'submitting' | 'success' | 'error';\ntype ConfirmAction = 'back' | 'resend' | 'cancel-load' | null;\n\nexport function OnboardingModal({ open, onOpenChange, onDismiss, user, variant = 'missing', profileHydrating = false, onComplete, onSkip }: OnboardingModalProps) {\n const isEditMode = variant === 'edit';\n const hasCurrentPhone = Boolean(user.phone);\n const hasCurrentEmail = Boolean(user.email);\n const directPhoneEdit = !isEditMode || !hasCurrentPhone;\n const directEmailEdit = !isEditMode || !hasCurrentEmail;\n const needsName = !isEditMode ? !user.name?.trim() : true;\n\n const [name, setName] = useState(user.name || '');\n const [photoPreview, setPhotoPreview] = useState<string>('');\n const [avatarPickerOpen, setAvatarPickerOpen] = useState(false);\n const [pendingAvatarSrc, setPendingAvatarSrc] = useState<string | null>(null);\n const [avatarUploading, setAvatarUploading] = useState(false);\n const avatarFileInputRef = useRef<HTMLInputElement | null>(null);\n const [ccphone, setCcphone] = useState(user.ccphone || '+221');\n const [phone, setPhone] = useState(user.phone || '');\n const [email, setEmail] = useState(user.email || '');\n const [address, setAddress] = useState(user.address || '');\n const [town, setTown] = useState(user.town || '');\n const [country, setCountry] = useState(user.country || DEFAULT_COUNTRY_CODE);\n const [submitting, setSubmitting] = useState(false);\n const [fileError, setFileError] = useState('');\n const [contactFlow, setContactFlow] = useState<ContactFlowState | null>(null);\n const [submitState, setSubmitState] = useState<SubmitState>('idle');\n const [submitMessage, setSubmitMessage] = useState('');\n const [submitError, setSubmitError] = useState('');\n const [confirmAction, setConfirmAction] = useState<ConfirmAction>(null);\n const [nowTick, setNowTick] = useState(Date.now());\n const userHydrationKey = [\n user.reference || '',\n user.name || '',\n user.email || '',\n user.ccphone || '',\n user.phone || '',\n user.address || '',\n user.town || '',\n user.country || '',\n user.image_url || '',\n user.auth_2fa ? '1' : '0',\n ].join('|');\n const currentDialCode = (user.ccphone || ccphone || '+221').trim();\n const baseSmsAllowed = currentDialCode === '+221';\n const contactSmsAllowed = contactFlow\n ? (contactFlow.kind === 'phone'\n ? contactFlow.newCcphone.trim() === '+221'\n : baseSmsAllowed)\n : baseSmsAllowed;\n const lockModalClose = profileHydrating || submitting || submitState === 'success' || avatarUploading || Boolean(contactFlow?.loading);\n\n useEffect(() => {\n if (!open) return;\n setName(user.name || '');\n setPhotoPreview(isEditMode ? (user.image_url || '') : '');\n setPendingAvatarSrc(null);\n setAvatarPickerOpen(false);\n setAvatarUploading(false);\n setCcphone(user.ccphone || '+221');\n setPhone(user.phone || '');\n setEmail(user.email || '');\n setAddress(user.address || '');\n setTown(user.town || '');\n setCountry(user.country || DEFAULT_COUNTRY_CODE);\n setSubmitting(false);\n setFileError('');\n setContactFlow(null);\n setSubmitState('idle');\n setSubmitMessage('');\n setSubmitError('');\n setConfirmAction(null);\n }, [open, isEditMode, userHydrationKey, user.name, user.image_url, user.ccphone, user.phone, user.email, user.address, user.town, user.country]);\n\n useEffect(() => {\n if (!contactFlow?.resendAvailableAt) return;\n\n const timer = window.setInterval(() => {\n setNowTick(Date.now());\n }, 1000);\n\n return () => window.clearInterval(timer);\n }, [contactFlow?.resendAvailableAt]);\n\n const markSuccess = useCallback((message: string) => {\n setSubmitting(false);\n setSubmitState('success');\n setSubmitMessage(message);\n setSubmitError('');\n }, []);\n\n const handleFileChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (!file) return;\n\n if (file.size > 2 * 1024 * 1024) {\n setFileError('Le fichier dépasse 2 Mo. Veuillez choisir une image plus légère.');\n e.target.value = '';\n return;\n }\n\n setFileError('');\n const reader = new FileReader();\n reader.onload = () => setPhotoPreview(reader.result as string);\n reader.readAsDataURL(file);\n }, []);\n\n const canSubmit = !avatarUploading && (\n name.trim().length > 0 &&\n (directPhoneEdit ? phone.length >= 7 : true) &&\n (directEmailEdit ? email.trim().length > 0 : true) &&\n town.trim().length > 0\n );\n\n const handleSubmit = useCallback(async () => {\n if (!canSubmit) return;\n setSubmitting(true);\n setSubmitState('submitting');\n setSubmitError('');\n\n const data = {\n name: name.trim(),\n ccphone: directPhoneEdit ? ccphone : user.ccphone || undefined,\n phone: directPhoneEdit ? phone : user.phone || undefined,\n email: directEmailEdit ? email.trim() : user.email || undefined,\n ...(address.trim() ? { address: address.trim() } : {}),\n ...(town.trim() ? { town: town.trim() } : {}),\n ...(country ? { country } : {}),\n };\n\n try {\n const response = await profileService.updateProfile(data);\n const payload = (response.user_infos || response.user || {}) as Partial<UserInfos>;\n const updatedUser: NativeUser = {\n ...user,\n name: payload.name || data.name || user.name,\n email: payload.email ?? data.email ?? user.email,\n ccphone: payload.ccphone || data.ccphone || user.ccphone,\n phone: payload.phone || data.phone || user.phone,\n address: payload.address || data.address || user.address,\n town: payload.town || data.town || user.town,\n country: payload.country || data.country || user.country,\n image_url: payload.image_url || user.image_url,\n auth_2fa: payload.auth_2fa ?? user.auth_2fa,\n alias_reference: payload.alias_reference || user.alias_reference,\n iam_reference: payload.iam_reference || user.iam_reference,\n };\n\n onComplete({\n name: updatedUser.name,\n image_url: updatedUser.image_url,\n ccphone: updatedUser.ccphone,\n phone: updatedUser.phone,\n email: updatedUser.email || undefined,\n address: updatedUser.address,\n town: updatedUser.town,\n country: updatedUser.country,\n user_infos: {\n reference: updatedUser.reference,\n name: updatedUser.name,\n email: updatedUser.email || null,\n ccphone: updatedUser.ccphone,\n phone: updatedUser.phone,\n address: updatedUser.address,\n town: updatedUser.town,\n country: updatedUser.country,\n image_url: updatedUser.image_url,\n auth_2fa: updatedUser.auth_2fa,\n alias_reference: updatedUser.alias_reference,\n iam_reference: updatedUser.iam_reference,\n },\n });\n markSuccess(response.message || 'Mise à jour réussie');\n } catch (error) {\n setSubmitting(false);\n setSubmitState('error');\n setSubmitError(error instanceof Error ? error.message : 'Erreur lors de l’enregistrement');\n }\n }, [canSubmit, user, name, directPhoneEdit, directEmailEdit, ccphone, phone, email, address, town, country, onComplete, markSuccess]);\n\n const openAvatarPicker = useCallback(() => {\n avatarFileInputRef.current?.click();\n }, []);\n\n const handleAvatarSelected = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n const file = event.target.files?.[0];\n if (!file) return;\n const reader = new FileReader();\n reader.onload = () => {\n setPendingAvatarSrc(reader.result as string);\n setAvatarPickerOpen(true);\n };\n reader.readAsDataURL(file);\n event.target.value = '';\n }, []);\n\n const handleAvatarConfirm = useCallback(async (blob: Blob) => {\n setAvatarUploading(true);\n try {\n const filename = `avatar-${Date.now()}.jpg`;\n const response = await profileMediaService.uploadProfileImage(blob, filename);\n const payload = (response.user_infos || response.user || {}) as Partial<NativeUser & { image?: string }>;\n const nextImage = payload.image_url || payload.image;\n if (nextImage) {\n setPhotoPreview(nextImage);\n } else {\n setPhotoPreview(URL.createObjectURL(blob));\n }\n if (Object.keys(payload).length > 0) {\n onComplete({\n name: payload.name,\n image_url: nextImage || undefined,\n ccphone: payload.ccphone || undefined,\n phone: payload.phone || undefined,\n email: payload.email || undefined,\n address: payload.address || undefined,\n town: payload.town || undefined,\n country: payload.country || undefined,\n user_infos: {\n reference: payload.reference || user.reference,\n name: payload.name || user.name,\n email: payload.email ?? user.email ?? null,\n ccphone: payload.ccphone || user.ccphone,\n phone: payload.phone || user.phone,\n address: payload.address || user.address,\n town: payload.town || user.town,\n country: payload.country || user.country,\n image_url: nextImage || user.image_url,\n auth_2fa: payload.auth_2fa ?? user.auth_2fa,\n alias_reference: payload.alias_reference || user.alias_reference,\n iam_reference: payload.iam_reference || user.iam_reference,\n },\n });\n }\n markSuccess('Mise à jour réussie');\n setPendingAvatarSrc(null);\n setAvatarPickerOpen(false);\n } finally {\n setAvatarUploading(false);\n }\n }, [onComplete, markSuccess, user.reference, user.name, user.email, user.ccphone, user.phone, user.address, user.town, user.country, user.image_url, user.auth_2fa, user.alias_reference, user.iam_reference]);\n\n const openContactFlow = useCallback((kind: ContactKind) => {\n setContactFlow({\n kind,\n phase: 'request',\n requestId: null,\n method: kind === 'email'\n ? 'email'\n : (currentDialCode === '+221' ? 'phone' : 'email'),\n newEmail: '',\n newCcphone: kind === 'phone' ? (user.ccphone || '+221') : '+221',\n newPhone: '',\n oldOtp: '',\n newOtp: '',\n loading: false,\n error: '',\n resendAvailableAt: null,\n });\n }, [currentDialCode, user.ccphone]);\n\n const closeContactFlow = useCallback(() => {\n setContactFlow(null);\n }, []);\n\n const updateFlow = useCallback((patch: Partial<ContactFlowState>) => {\n setContactFlow((prev) => prev ? { ...prev, ...patch } : prev);\n }, []);\n\n const currentPhoneDialDisplay = user.ccphone || ccphone || '+221';\n const currentPhoneNumberDisplay = user.phone || phone || '';\n const currentEmailLabel = user.email || email || '';\n const currentPhoneDialCode = (currentPhoneDialDisplay || '+221').trim() || '+221';\n const currentPhoneDigits = (user.phone || phone || '').replace(/\\D/g, '');\n const formatPhoneDisplay = useCallback((dial: string, digits: string) => {\n const cleanDial = (dial || '+221').trim() || '+221';\n const cleanDigits = (digits || '').replace(/\\D/g, '');\n return cleanDigits ? `${cleanDial} ${cleanDigits}` : cleanDial;\n }, []);\n const currentEmailNormalized = currentEmailLabel.trim().toLowerCase();\n const requestEmailNormalized = contactFlow?.kind === 'email' ? contactFlow.newEmail.trim().toLowerCase() : '';\n const requestPhoneDialCode = contactFlow?.kind === 'phone' ? (contactFlow.newCcphone.trim() || '+221') : '';\n const requestPhoneDigits = contactFlow?.kind === 'phone' ? contactFlow.newPhone.replace(/\\D/g, '') : '';\n const emailIsCurrent = Boolean(contactFlow?.kind === 'email' && requestEmailNormalized && requestEmailNormalized === currentEmailNormalized);\n const phoneIsCurrent = Boolean(\n contactFlow?.kind === 'phone'\n && requestPhoneDigits\n && requestPhoneDialCode === currentPhoneDialCode\n && requestPhoneDigits === currentPhoneDigits\n );\n const requestDuplicateMessage = emailIsCurrent\n ? 'Vous ne pouvez pas écrire votre actuelle adresse email. Veuillez en choisir une autre.'\n : phoneIsCurrent\n ? 'Vous ne pouvez pas écrire votre actuel numéro de téléphone. Veuillez en choisir un autre.'\n : '';\n\n const requestChange = useCallback(async () => {\n if (!contactFlow || contactFlow.loading) return;\n const sameEmail = contactFlow.kind === 'email'\n && contactFlow.newEmail.trim().toLowerCase() === currentEmailNormalized;\n const samePhone = contactFlow.kind === 'phone'\n && contactFlow.newCcphone.trim() === currentPhoneDialCode\n && contactFlow.newPhone.replace(/\\D/g, '') === currentPhoneDigits;\n if (sameEmail || samePhone) {\n updateFlow({\n loading: false,\n error: sameEmail\n ? 'Vous ne pouvez pas écrire votre actuelle adresse email. Veuillez en choisir une autre.'\n : 'Vous ne pouvez pas écrire votre actuel numéro de téléphone. Veuillez en choisir un autre.',\n });\n return;\n }\n updateFlow({ loading: true, error: '' });\n\n try {\n const method = contactSmsAllowed ? contactFlow.method : 'email';\n const response = contactFlow.kind === 'email'\n ? await profileChangeService.requestEmailChange(contactFlow.newEmail.trim(), method)\n : await profileChangeService.requestPhoneChange(contactFlow.newCcphone, contactFlow.newPhone.trim(), method);\n\n if (!response.success || !response.request_id) {\n throw new Error(response.message || 'Impossible de démarrer le changement');\n }\n\n updateFlow({ requestId: response.request_id, phase: 'verify-old', loading: false, error: '', resendAvailableAt: Date.now() + 120000 });\n } catch (error) {\n updateFlow({ loading: false, error: error instanceof Error ? error.message : 'Erreur inconnue' });\n }\n }, [contactFlow, updateFlow, contactSmsAllowed, currentEmailNormalized, currentPhoneDialCode, currentPhoneDigits]);\n\n const verifyOld = useCallback(async () => {\n if (!contactFlow?.requestId || contactFlow.loading) return;\n updateFlow({ loading: true, error: '' });\n\n try {\n const response = await profileChangeService.verifyOldOTP(contactFlow.requestId, contactFlow.oldOtp);\n if (!response.success) throw new Error(response.message || 'Code OTP incorrect');\n updateFlow({ phase: 'verify-new', loading: false, error: '', resendAvailableAt: Date.now() + 120000 });\n } catch (error) {\n updateFlow({ loading: false, error: error instanceof Error ? error.message : 'Code OTP incorrect' });\n }\n }, [contactFlow, updateFlow]);\n\n const verifyNew = useCallback(async () => {\n if (!contactFlow?.requestId || contactFlow.loading) return;\n updateFlow({ loading: true, error: '' });\n\n try {\n const response = await profileChangeService.verifyNewOTP(contactFlow.requestId, contactFlow.newOtp);\n if (!response.success) throw new Error(response.message || 'Code OTP incorrect');\n\n const updatedUser: NativeUser = {\n ...user,\n ...(contactFlow.kind === 'email'\n ? { email: contactFlow.newEmail.trim() }\n : { ccphone: contactFlow.newCcphone, phone: contactFlow.newPhone.trim() }),\n };\n\n if (response.user && typeof response.user === 'object') {\n Object.assign(updatedUser, response.user as Partial<NativeUser>);\n }\n\n setContactFlow(null);\n onComplete({\n name: updatedUser.name,\n image_url: updatedUser.image_url,\n ccphone: updatedUser.ccphone,\n phone: updatedUser.phone,\n email: updatedUser.email || undefined,\n user_infos: {\n reference: updatedUser.reference,\n name: updatedUser.name,\n email: updatedUser.email || null,\n ccphone: updatedUser.ccphone,\n phone: updatedUser.phone,\n address: updatedUser.address,\n town: updatedUser.town,\n country: updatedUser.country,\n image_url: updatedUser.image_url,\n auth_2fa: updatedUser.auth_2fa,\n alias_reference: updatedUser.alias_reference,\n iam_reference: updatedUser.iam_reference,\n },\n });\n markSuccess(contactFlow.kind === 'email' ? 'Email mis à jour avec succès.' : 'Téléphone mis à jour avec succès.');\n } catch (error) {\n updateFlow({ loading: false, error: error instanceof Error ? error.message : 'Code OTP incorrect' });\n }\n }, [contactFlow, onComplete, updateFlow, user, markSuccess]);\n\n const resendFlowOtp = useCallback(async () => {\n if (!contactFlow?.requestId || contactFlow.loading) return;\n updateFlow({ loading: true, error: '' });\n\n try {\n const response = await profileChangeService.resendOTP(contactFlow.requestId);\n if (!response.success) throw new Error(response.message || 'Impossible de renvoyer le code');\n updateFlow({ loading: false, error: '', resendAvailableAt: Date.now() + 120000 });\n } catch (error) {\n updateFlow({ loading: false, error: error instanceof Error ? error.message : 'Erreur inconnue' });\n }\n }, [contactFlow, updateFlow]);\n\n const switchFlowMethod = useCallback(async (method: 'email' | 'phone') => {\n if (!contactFlow) return;\n\n if (contactFlow.phase === 'request' || !contactFlow.requestId) {\n updateFlow({ method, error: '' });\n return;\n }\n\n if (contactFlow.loading) return;\n updateFlow({ loading: true, error: '', method });\n\n try {\n const response = await profileChangeService.switchMethod(contactFlow.requestId, method);\n if (!response.success) throw new Error(response.message || 'Impossible de changer la méthode');\n updateFlow({ loading: false, error: '' });\n } catch (error) {\n updateFlow({ loading: false, error: error instanceof Error ? error.message : 'Erreur inconnue' });\n }\n }, [contactFlow, updateFlow]);\n\n useEffect(() => {\n if (!contactFlow || contactFlow.kind !== 'phone') return;\n if (contactFlow.newCcphone.trim() !== '+221' && contactFlow.method !== 'email') {\n updateFlow({ method: 'email' });\n }\n }, [contactFlow, updateFlow]);\n\n const confirmBackToRequest = useCallback(() => {\n if (!contactFlow) return;\n updateFlow({\n phase: 'request',\n requestId: null,\n oldOtp: '',\n newOtp: '',\n error: '',\n loading: false,\n resendAvailableAt: null,\n });\n setConfirmAction(null);\n }, [contactFlow, updateFlow]);\n\n const confirmResendOtp = useCallback(async () => {\n if (!contactFlow) return;\n setConfirmAction(null);\n await resendFlowOtp();\n }, [contactFlow, resendFlowOtp]);\n\n const handleDialogOpenChange = useCallback((nextOpen: boolean) => {\n if (nextOpen) {\n onOpenChange(true);\n return;\n }\n\n if (lockModalClose) return;\n onOpenChange(false);\n }, [lockModalClose, onOpenChange]);\n const contactTargetLabel = contactFlow\n ? (contactFlow.kind === 'email'\n ? (contactFlow.newEmail.trim() || currentEmailLabel || 'votre adresse email')\n : formatPhoneDisplay(contactFlow.newCcphone, contactFlow.newPhone))\n : '';\n const currentReceiveLabel = (contactFlow ? (contactSmsAllowed ? contactFlow.method : 'email') : 'email') === 'phone'\n ? `SMS au ${contactFlow?.kind === 'phone' ? contactTargetLabel : formatPhoneDisplay(currentPhoneDialDisplay, currentPhoneNumberDisplay)}`\n : `email à ${contactFlow?.kind === 'email' ? contactTargetLabel : (currentEmailLabel || 'votre adresse email')}`;\n const resendCountdown = contactFlow?.resendAvailableAt\n ? Math.max(0, Math.ceil((contactFlow.resendAvailableAt - nowTick) / 1000))\n : 0;\n const canResendOtp = Boolean(contactFlow?.requestId) && !contactFlow?.loading && resendCountdown === 0;\n\n const ShieldIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke={C.accent} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\" />\n <path d=\"m9 12 2 2 4-4\" />\n </svg>\n );\n\n const renderSuccess = () => (\n <>\n <DialogHeader>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem', marginBottom: '0.25rem' }}>\n <ShieldIcon />\n <DialogTitle>Profil enregistré</DialogTitle>\n </div>\n <DialogDescription>\n {submitMessage || 'Vos informations ont été mises à jour.'}\n </DialogDescription>\n </DialogHeader>\n\n <DialogBody style={{ maxHeight: '52vh', overflowY: 'auto', paddingBottom: '0.25rem' }}>\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', gap: '0.75rem', padding: '1.5rem 1rem', textAlign: 'center' }}>\n <svg width=\"42\" height=\"42\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#16a34a\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"m9 12 2 2 4-4\" />\n </svg>\n <div style={{ fontSize: '1rem', fontWeight: 700, color: C.gray700 }}>\n Mise à jour réussie\n </div>\n <div style={{ fontSize: '0.875rem', color: C.gray500 }}>\n Vous pouvez fermer cette fenêtre maintenant.\n </div>\n </div>\n </DialogBody>\n <DialogFooter style={{ flexDirection: 'row', alignItems: 'center' }}>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={onDismiss}\n style={{ width: '100%', height: '2.6rem' }}\n >\n Fermer\n </Button>\n </DialogFooter>\n </>\n );\n\n const renderHydration = () => (\n <>\n <DialogHeader>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem', marginBottom: '0.25rem' }}>\n <ShieldIcon />\n <DialogTitle>{isEditMode ? 'Modifier votre profil' : 'Complétez votre profil'}</DialogTitle>\n </div>\n <DialogDescription>\n Récupération de vos infos depuis iam.ollaid.com en cours. Le SSO synchronise vos données avant l’affichage du formulaire.\n </DialogDescription>\n </DialogHeader>\n\n <DialogBody style={{ maxHeight: '52vh', overflowY: 'auto', paddingBottom: '0.25rem' }}>\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', gap: '0.9rem', padding: '2rem 1rem', textAlign: 'center' }}>\n <svg width=\"42\" height=\"42\" viewBox=\"0 0 24 24\" fill=\"none\" stroke={C.primary} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ animation: 'spin 1s linear infinite' }}>\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n <div style={{ fontSize: '1rem', fontWeight: 700, color: C.gray700 }}>\n Récupération de vos informations\n </div>\n <div style={{ fontSize: '0.875rem', color: C.gray500, lineHeight: 1.5 }}>\n Le modal sera rempli automatiquement dès que les données IAM seront prêtes.\n </div>\n </div>\n </DialogBody>\n\n <DialogFooter style={{ flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center' }}>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => setConfirmAction('cancel-load')}\n style={{ minWidth: '6.5rem', height: '2.35rem' }}\n >\n Fermer\n </Button>\n </DialogFooter>\n </>\n );\n\n const renderBase = () => (\n <>\n <DialogHeader>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem', marginBottom: '0.25rem' }}>\n <ShieldIcon />\n <DialogTitle>{isEditMode ? 'Modifier votre profil' : 'Complétez votre profil'}</DialogTitle>\n </div>\n <DialogDescription>\n {isEditMode\n ? 'Mettez à jour vos informations sans quitter le SaaS.'\n : 'Ajoutez les informations manquantes pour finaliser votre compte.'}\n </DialogDescription>\n </DialogHeader>\n\n <DialogBody style={{ maxHeight: '52vh', overflowY: 'auto', paddingBottom: '0.25rem' }}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.85rem', marginTop: '0.25rem', paddingRight: '0.25rem' }}>\n {submitError && (\n <div style={{ padding: '0.75rem', borderRadius: '0.5rem', backgroundColor: '#fef2f2', border: '1px solid #fecaca', color: '#b91c1c', fontSize: '0.875rem' }}>\n {submitError}\n </div>\n )}\n\n {submitState === 'submitting' && (\n <div style={{ padding: '0.75rem', borderRadius: '0.5rem', backgroundColor: '#eff6ff', border: '1px solid #bfdbfe', color: '#1d4ed8', fontSize: '0.875rem', display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ animation: 'spin 1s linear infinite' }}>\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n Enregistrement en cours...\n </div>\n )}\n\n <div style={{ display: 'grid', gridTemplateColumns: '4.25rem 1fr', gap: '0.75rem', alignItems: 'center' }}>\n <div style={{ position: 'relative' }}>\n <button\n type=\"button\"\n onClick={openAvatarPicker}\n disabled={avatarUploading}\n style={{\n width: '4.25rem',\n height: '4.25rem',\n borderRadius: '50%',\n border: `1px solid ${C.gray200}`,\n backgroundColor: C.gray100,\n overflow: 'hidden',\n position: 'relative',\n padding: 0,\n cursor: avatarUploading ? 'not-allowed' : 'pointer',\n }}\n >\n {photoPreview || user.image_url ? (\n <img src={photoPreview || user.image_url} alt=\"Photo de profil\" style={{ width: '100%', height: '100%', objectFit: 'cover' }} />\n ) : (\n <div style={{ width: '100%', height: '100%', display: 'flex', alignItems: 'center', justifyContent: 'center', color: C.gray500 }}>\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"8\" r=\"4\" />\n <path d=\"M5.5 21a8.38 8.38 0 0 1 13 0\" />\n </svg>\n </div>\n )}\n <div style={{\n position: 'absolute', inset: 0, display: 'flex', alignItems: 'center', justifyContent: 'center',\n background: avatarUploading ? 'rgba(255,255,255,0.55)' : 'rgba(0,0,0,0.08)',\n }}>\n {avatarUploading ? (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke={C.primary} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ animation: 'spin 1s linear infinite' }}>\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n ) : (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke={C.white} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M15 8h.01\" />\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" />\n <path d=\"m21 15-5-5L5 21\" />\n </svg>\n )}\n </div>\n </button>\n <input ref={avatarFileInputRef} type=\"file\" accept=\"image/*\" onChange={handleAvatarSelected} style={{ display: 'none' }} />\n </div>\n\n <div>\n <Label style={{ display: 'block', marginBottom: '0.35rem', color: C.gray700, fontWeight: 500, fontSize: '0.875rem' }}>\n Nom complet\n </Label>\n <input\n type=\"text\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"Jean Dupont\"\n style={{\n width: '100%',\n height: '2.25rem',\n padding: '0 0.75rem',\n border: `1px solid ${C.gray200}`,\n borderRadius: '0.375rem',\n fontSize: '0.875rem',\n color: C.gray700,\n backgroundColor: C.white,\n outline: 'none',\n }}\n />\n </div>\n </div>\n\n {isEditMode && hasCurrentPhone && !contactFlow && (\n <div>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: '0.35rem' }}>\n <Label style={{ color: C.gray700, fontWeight: 500, fontSize: '0.875rem' }}>\n Numéro de téléphone\n </Label>\n <button type=\"button\" onClick={() => openContactFlow('phone')} style={{ border: 'none', background: 'transparent', padding: 0, color: C.accent, fontWeight: 700, fontSize: '0.8rem', cursor: 'pointer' }}>\n Changer\n </button>\n </div>\n <div style={{ display: 'grid', gridTemplateColumns: '6rem 1fr', gap: '0.5rem' }}>\n <input\n type=\"text\"\n value={currentPhoneDialDisplay}\n readOnly\n style={{\n width: '100%',\n height: '2.25rem',\n padding: '0 0.65rem',\n border: `1px solid ${C.gray200}`,\n borderRadius: '0.375rem',\n fontSize: '0.875rem',\n color: C.gray700,\n backgroundColor: '#f9fafb',\n outline: 'none',\n }}\n />\n <input\n type=\"text\"\n value={currentPhoneNumberDisplay}\n readOnly\n style={{\n width: '100%',\n height: '2.25rem',\n padding: '0 0.75rem',\n border: `1px solid ${C.gray200}`,\n borderRadius: '0.375rem',\n fontSize: '0.875rem',\n color: C.gray700,\n backgroundColor: '#f9fafb',\n outline: 'none',\n }}\n />\n </div>\n </div>\n )}\n\n {isEditMode && hasCurrentEmail && !contactFlow && (\n <div>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: '0.35rem' }}>\n <Label style={{ color: C.gray700, fontWeight: 500, fontSize: '0.875rem' }}>\n Adresse email\n </Label>\n <button type=\"button\" onClick={() => openContactFlow('email')} style={{ border: 'none', background: 'transparent', padding: 0, color: C.accent, fontWeight: 700, fontSize: '0.8rem', cursor: 'pointer' }}>\n Changer\n </button>\n </div>\n <input\n type=\"email\"\n value={currentEmailLabel}\n readOnly\n style={{\n width: '100%',\n height: '2.25rem',\n padding: '0 0.75rem',\n border: `1px solid ${C.gray200}`,\n borderRadius: '0.375rem',\n fontSize: '0.875rem',\n color: C.gray700,\n backgroundColor: '#f9fafb',\n outline: 'none',\n }}\n />\n </div>\n )}\n\n {(!isEditMode || !hasCurrentPhone) && (\n <div>\n <Label style={{ display: 'block', marginBottom: '0.35rem', color: C.gray700, fontWeight: 500, fontSize: '0.875rem' }}>\n Numéro de téléphone\n </Label>\n <PhoneInput value={phone} onChange={setPhone} ccphone={ccphone} onCcphoneChange={setCcphone} />\n </div>\n )}\n\n {(!isEditMode || !hasCurrentEmail) && (\n <div>\n <Label style={{ display: 'block', marginBottom: '0.35rem', color: C.gray700, fontWeight: 500, fontSize: '0.875rem' }}>\n Adresse email\n </Label>\n <input\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder=\"email@exemple.com\"\n style={{\n width: '100%',\n height: '2.25rem',\n padding: '0 0.75rem',\n border: `1px solid ${C.gray200}`,\n borderRadius: '0.375rem',\n fontSize: '0.875rem',\n color: C.gray700,\n backgroundColor: C.white,\n outline: 'none',\n }}\n />\n </div>\n )}\n\n <div style={{ display: 'grid', gap: '0.85rem' }}>\n <div>\n <Label style={{ display: 'block', marginBottom: '0.35rem', color: C.gray700, fontWeight: 500, fontSize: '0.875rem' }}>\n Adresse\n </Label>\n <input\n type=\"text\"\n value={address}\n onChange={(e) => setAddress(e.target.value)}\n placeholder=\"Rue, quartier, numéro\"\n style={{\n width: '100%',\n height: '2.25rem',\n padding: '0 0.75rem',\n border: `1px solid ${C.gray200}`,\n borderRadius: '0.375rem',\n fontSize: '0.875rem',\n color: C.gray700,\n backgroundColor: C.white,\n outline: 'none',\n }}\n />\n </div>\n\n <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '0.75rem' }}>\n <div>\n <Label style={{ display: 'block', marginBottom: '0.35rem', color: C.gray700, fontWeight: 500, fontSize: '0.875rem' }}>\n Ville <span style={{ color: '#dc2626' }}>*</span>\n </Label>\n <input\n type=\"text\"\n value={town}\n onChange={(e) => setTown(e.target.value)}\n required\n placeholder=\"Dakar\"\n style={{\n width: '100%',\n height: '2.25rem',\n padding: '0 0.75rem',\n border: `1px solid ${C.gray200}`,\n borderRadius: '0.375rem',\n fontSize: '0.875rem',\n color: C.gray700,\n backgroundColor: C.white,\n outline: 'none',\n }}\n />\n </div>\n <div>\n <Label style={{ display: 'block', marginBottom: '0.35rem', color: C.gray700, fontWeight: 500, fontSize: '0.875rem' }}>\n Pays\n </Label>\n <select\n value={country}\n onChange={(e) => setCountry(e.target.value)}\n style={{\n width: '100%',\n height: '2.25rem',\n padding: '0 0.6rem',\n border: `1px solid ${C.gray200}`,\n borderRadius: '0.375rem',\n fontSize: '0.875rem',\n color: C.gray700,\n backgroundColor: C.white,\n outline: 'none',\n }}\n >\n {COUNTRIES_SORTED_BY_CODE.map((c) => (\n <option key={c.code} value={c.code}>{c.flag} {c.name}</option>\n ))}\n </select>\n </div>\n </div>\n </div>\n\n </div>\n </DialogBody>\n\n <DialogFooter style={{ flexDirection: 'row', justifyContent: submitState === 'success' ? 'center' : 'space-between', alignItems: 'center' }}>\n {submitState === 'success' ? (\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={onDismiss}\n style={{ width: '100%', height: '2.6rem' }}\n >\n Fermer\n </Button>\n ) : (\n <>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n disabled={submitting}\n style={{ minWidth: '6.5rem', height: '2.35rem' }}\n >\n Fermer\n </Button>\n <Button\n type=\"button\"\n onClick={isEditMode ? handleSubmit : onSkip}\n disabled={isEditMode ? (!canSubmit || submitting) : submitting}\n style={{ minWidth: '7.25rem', height: '2.35rem', opacity: (isEditMode ? (canSubmit && !submitting) : !submitting) ? 1 : 0.5 }}\n >\n {submitting ? (\n <span style={{ display: 'inline-flex', alignItems: 'center', gap: '0.45rem' }}>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ animation: 'spin 1s linear infinite' }}>\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n Enregistrement...\n </span>\n ) : (isEditMode ? 'Enregistrer' : 'Plus tard')}\n </Button>\n </>\n )}\n </DialogFooter>\n <AvatarCropModal\n open={avatarPickerOpen}\n imageSrc={pendingAvatarSrc}\n onOpenChange={setAvatarPickerOpen}\n onCancel={() => {\n setAvatarPickerOpen(false);\n setPendingAvatarSrc(null);\n }}\n onConfirm={handleAvatarConfirm}\n />\n </>\n );\n\n const renderContactFlow = () => {\n if (!contactFlow) return null;\n const isEmail = contactFlow.kind === 'email';\n const targetLabel = isEmail\n ? (contactFlow.newEmail || 'la nouvelle adresse')\n : `${contactFlow.newCcphone} ${contactFlow.newPhone}`.trim();\n const sentToLabel = currentReceiveLabel;\n\n return (\n <>\n <DialogHeader>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem', marginBottom: '0.25rem' }}>\n <ShieldIcon />\n <DialogTitle>{isEmail ? 'Changer l’email' : 'Changer le téléphone'}</DialogTitle>\n </div>\n <DialogDescription>\n {contactFlow.phase === 'request'\n ? `Veuillez renseigner le nouveau ${isEmail ? 'email' : 'numéro de téléphone'} pour lancer la vérification.`\n : contactFlow.phase === 'verify-old'\n ? `Le code OTP a été envoyé sur : ${sentToLabel}.`\n : `Le second code OTP a été envoyé sur : ${sentToLabel}.`\n }\n </DialogDescription>\n </DialogHeader>\n\n <DialogBody style={{ maxHeight: '52vh', overflowY: 'auto', paddingBottom: '0.25rem' }}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem', marginTop: '0.75rem' }}>\n {contactFlow.error && (\n <div style={{ padding: '0.75rem', borderRadius: '0.5rem', backgroundColor: '#fef2f2', color: '#b91c1c', fontSize: '0.875rem' }}>\n {contactFlow.error}\n </div>\n )}\n\n {contactFlow.phase === 'request' && (\n <>\n {isEmail ? (\n <div>\n <div style={{ marginBottom: '0.5rem', padding: '0.7rem 0.75rem', borderRadius: '0.5rem', backgroundColor: '#f9fafb', border: '1px solid #e5e7eb', fontSize: '0.85rem', color: C.gray700, lineHeight: 1.45 }}>\n <div><strong>Email actuel :</strong> {currentEmailLabel || 'non renseigné'}</div>\n <div style={{ marginTop: '0.2rem', color: C.gray500 }}>\n Veuillez renseigner le nouveau email pour lancer la vérification.\n </div>\n </div>\n <Label style={{ display: 'block', marginBottom: '0.5rem', color: C.gray700, fontWeight: 500 }}>\n Nouvel email\n </Label>\n <input\n type=\"email\"\n value={contactFlow.newEmail}\n onChange={(e) => updateFlow({ newEmail: e.target.value })}\n placeholder=\"nouvel@email.com\"\n style={{\n width: '100%',\n height: '2.5rem',\n padding: '0 0.75rem',\n border: `1px solid ${C.gray200}`,\n borderRadius: '0.375rem',\n fontSize: '0.875rem',\n color: C.gray700,\n backgroundColor: C.white,\n outline: 'none',\n }}\n />\n {emailIsCurrent && (\n <span style={{ display: 'block', marginTop: '0.35rem', color: '#b91c1c', fontSize: '0.8rem', lineHeight: 1.35 }}>\n {requestDuplicateMessage}\n </span>\n )}\n </div>\n ) : (\n <div>\n <div style={{ marginBottom: '0.5rem', padding: '0.7rem 0.75rem', borderRadius: '0.5rem', backgroundColor: '#f9fafb', border: '1px solid #e5e7eb', fontSize: '0.85rem', color: C.gray700, lineHeight: 1.45 }}>\n <div><strong>Numéro actuel :</strong> {formatPhoneDisplay(currentPhoneDialDisplay, currentPhoneNumberDisplay) || 'non renseigné'}</div>\n <div style={{ marginTop: '0.2rem', color: C.gray500 }}>\n Veuillez renseigner le nouveau numéro de téléphone pour lancer la vérification.\n </div>\n </div>\n <Label style={{ display: 'block', marginBottom: '0.5rem', color: C.gray700, fontWeight: 500 }}>\n Nouveau téléphone\n </Label>\n <PhoneInput\n value={contactFlow.newPhone}\n onChange={(value) => updateFlow({ newPhone: value })}\n ccphone={contactFlow.newCcphone}\n onCcphoneChange={(value) => updateFlow({ newCcphone: value, method: value.trim() === '+221' ? contactFlow.method : 'email' })}\n />\n {phoneIsCurrent && (\n <span style={{ display: 'block', marginTop: '0.35rem', color: '#b91c1c', fontSize: '0.8rem', lineHeight: 1.35 }}>\n {requestDuplicateMessage}\n </span>\n )}\n </div>\n )}\n\n {contactSmsAllowed ? (\n <div style={{ display: 'flex', gap: '0.5rem', flexWrap: 'wrap' }}>\n <Button\n type=\"button\"\n variant={contactFlow.method === 'email' ? 'default' : 'outline'}\n onClick={() => switchFlowMethod('email')}\n style={{ flex: 1 }}\n >\n Code par email\n </Button>\n <Button\n type=\"button\"\n variant={contactFlow.method === 'phone' ? 'default' : 'outline'}\n onClick={() => switchFlowMethod('phone')}\n style={{ flex: 1 }}\n >\n Code par téléphone\n </Button>\n </div>\n ) : (\n <div style={{ padding: '0.75rem', borderRadius: '0.5rem', backgroundColor: '#f9fafb', border: '1px solid #e5e7eb', color: C.gray700, fontSize: '0.875rem', lineHeight: 1.45 }}>\n Le SMS est disponible uniquement pour les numéros sénégalais (+221). Le code sera envoyé par email.\n </div>\n )}\n <span style={{ color: C.gray500, fontSize: '0.8rem', lineHeight: 1.35 }}>\n Vous allez recevoir le code par {currentReceiveLabel}.\n </span>\n </>\n )}\n\n {contactFlow.phase === 'verify-old' && (\n <>\n <div style={{ padding: '0.75rem', borderRadius: '0.5rem', backgroundColor: '#f9fafb', border: '1px solid #e5e7eb', fontSize: '0.875rem', color: C.gray700 }}>\n <div><strong>{isEmail ? 'Email actuel' : 'Numéro de téléphone actuel'} :</strong> {isEmail ? currentEmailLabel : formatPhoneDisplay(currentPhoneDialDisplay, currentPhoneNumberDisplay)}</div>\n <div style={{ marginTop: '0.25rem' }}><strong>Nouveau :</strong> {targetLabel}</div>\n <div style={{ marginTop: '0.25rem' }}><strong>Envoi :</strong> {sentToLabel}</div>\n </div>\n\n <div>\n <Label style={{ display: 'block', marginBottom: '0.5rem', color: C.gray700, fontWeight: 500 }}>\n Code reçu sur l'ancien contact\n </Label>\n <OTPInput\n value={contactFlow.oldOtp}\n onChange={(value) => updateFlow({ oldOtp: value })}\n disabled={contactFlow.loading}\n />\n </div>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: '0.75rem', flexWrap: 'wrap' }}>\n <div style={{ fontSize: '0.82rem', color: C.gray500 }}>\n {canResendOtp\n ? 'Vous pouvez renvoyer un nouveau code.'\n : `Renvoyer un code dans ${resendCountdown}s`}\n </div>\n {canResendOtp && (\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => setConfirmAction('resend')}\n disabled={contactFlow.loading}\n style={{ height: '2.35rem' }}\n >\n Renvoyer le code\n </Button>\n )}\n </div>\n </>\n )}\n\n {contactFlow.phase === 'verify-new' && (\n <>\n <div style={{ padding: '0.75rem', borderRadius: '0.5rem', backgroundColor: '#f9fafb', border: '1px solid #e5e7eb', fontSize: '0.875rem', color: C.gray700 }}>\n <div><strong>{isEmail ? 'Email actuel' : 'Numéro de téléphone actuel'} :</strong> {isEmail ? currentEmailLabel : formatPhoneDisplay(currentPhoneDialDisplay, currentPhoneNumberDisplay)}</div>\n <div style={{ marginTop: '0.25rem' }}><strong>Nouveau :</strong> {targetLabel}</div>\n <div style={{ marginTop: '0.25rem' }}><strong>Envoi :</strong> {sentToLabel}</div>\n </div>\n\n <div>\n <Label style={{ display: 'block', marginBottom: '0.5rem', color: C.gray700, fontWeight: 500 }}>\n Code reçu sur le nouveau contact\n </Label>\n <OTPInput\n value={contactFlow.newOtp}\n onChange={(value) => updateFlow({ newOtp: value })}\n disabled={contactFlow.loading}\n />\n </div>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: '0.75rem', flexWrap: 'wrap' }}>\n <div style={{ fontSize: '0.82rem', color: C.gray500 }}>\n {canResendOtp\n ? 'Vous pouvez renvoyer un nouveau code.'\n : `Renvoyer un code dans ${resendCountdown}s`}\n </div>\n {canResendOtp && (\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => setConfirmAction('resend')}\n disabled={contactFlow.loading}\n style={{ height: '2.35rem' }}\n >\n Renvoyer le code\n </Button>\n )}\n </div>\n </>\n )}\n </div>\n </DialogBody>\n <DialogFooter style={{ flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center' }}>\n {contactFlow.phase === 'request' ? (\n <>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={closeContactFlow}\n disabled={contactFlow.loading}\n style={{ minWidth: '6.5rem', height: '2.35rem' }}\n >\n Fermer\n </Button>\n <Button\n type=\"button\"\n onClick={requestChange}\n disabled={\n contactFlow.loading ||\n (isEmail ? !contactFlow.newEmail.trim() : !contactFlow.newPhone.trim()) ||\n emailIsCurrent ||\n phoneIsCurrent\n }\n style={{ minWidth: '7.25rem', height: '2.35rem', opacity: contactFlow.loading ? 0.5 : 1 }}\n >\n {contactFlow.loading ? (\n <span style={{ display: 'inline-flex', alignItems: 'center', gap: '0.45rem' }}>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ animation: 'spin 1s linear infinite' }}>\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n Envoi...\n </span>\n ) : 'Envoyer'}\n </Button>\n </>\n ) : (\n <>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => setConfirmAction('back')}\n disabled={contactFlow.loading}\n style={{ minWidth: '6.5rem', height: '2.35rem' }}\n >\n Retour\n </Button>\n <Button\n type=\"button\"\n onClick={contactFlow.phase === 'verify-old' ? verifyOld : verifyNew}\n disabled={\n contactFlow.loading ||\n (contactFlow.phase === 'verify-old' && contactFlow.oldOtp.length !== 6) ||\n (contactFlow.phase === 'verify-new' && contactFlow.newOtp.length !== 6)\n }\n style={{ minWidth: '7.25rem', height: '2.35rem', opacity: contactFlow.loading ? 0.5 : 1 }}\n >\n {contactFlow.loading ? (\n <span style={{ display: 'inline-flex', alignItems: 'center', gap: '0.45rem' }}>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ animation: 'spin 1s linear infinite' }}>\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n Vérification...\n </span>\n ) : (contactFlow.phase === 'verify-old' ? 'Vérifier' : 'Confirmer')}\n </Button>\n </>\n )}\n </DialogFooter>\n </>\n );\n };\n\n const renderConfirmDialog = () => {\n if (!confirmAction) return null;\n\n const config = confirmAction === 'back'\n ? {\n title: 'Retourner à l’étape précédente ?',\n description: 'La vérification en cours sera interrompue. Vous pourrez reprendre le changement depuis le début.',\n confirmLabel: 'Retourner',\n }\n : confirmAction === 'resend'\n ? {\n title: 'Renvoyer un nouveau code OTP ?',\n description: `Un nouveau code sera envoyé vers ${currentReceiveLabel}.`,\n confirmLabel: 'Renvoyer',\n }\n : {\n title: 'Annuler la récupération ?',\n description: 'Les informations IAM ne seront pas récupérées maintenant. Vous pourrez relancer l’ouverture plus tard.',\n confirmLabel: 'Annuler',\n };\n\n const confirm = async () => {\n if (confirmAction === 'back') {\n confirmBackToRequest();\n } else if (confirmAction === 'resend') {\n await confirmResendOtp();\n } else {\n setConfirmAction(null);\n onDismiss();\n }\n };\n\n return (\n <Dialog open={Boolean(confirmAction)} onOpenChange={(open) => { if (!open) setConfirmAction(null); }}>\n <DialogContent hideCloseButton={false} style={{ maxWidth: '22rem', padding: '0.9rem 1rem', borderRadius: '0.7rem' }}>\n <DialogHeader>\n <div style={{ fontSize: '1rem', fontWeight: 600, color: '#111827' }}>{config.title}</div>\n <DialogDescription>{config.description}</DialogDescription>\n </DialogHeader>\n <DialogFooter style={{ flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center' }}>\n <Button type=\"button\" variant=\"outline\" onClick={() => setConfirmAction(null)} style={{ minWidth: '6rem', height: '2.25rem' }}>\n Annuler\n </Button>\n <Button type=\"button\" onClick={confirm} style={{ minWidth: '6.5rem', height: '2.25rem' }}>\n {confirmAction === 'resend' && contactFlow?.loading ? 'Envoi...' : config.confirmLabel}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n };\n\n return (\n <Dialog open={open} onOpenChange={handleDialogOpenChange}>\n <DialogContent\n hideCloseButton={lockModalClose}\n style={{ maxWidth: '26rem', padding: '0.75rem 0.8rem', borderRadius: '0.65rem', maxHeight: '88vh' }}\n >\n {profileHydrating && submitState === 'idle' && !contactFlow ? renderHydration() : contactFlow ? renderContactFlow() : submitState === 'success' ? renderSuccess() : renderBase()}\n </DialogContent>\n {renderConfirmDialog()}\n </Dialog>\n );\n}\n\nexport default OnboardingModal;\n","/**\n * DebugPanel — Panneau de debug flottant pour @ollaid/native-sso\n * Affiche l'historique des appels API en temps réel (style terminal)\n * N'apparaît que quand debug=true\n * @version 2.7.0\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport { subscribeToLogs, clearApiLogs, exportLogsAsText, type ApiCallLog } from '../services/debugLogger';\n\nexport type DebugOnboardingPreset = 'current' | 'photo' | 'phone' | 'email' | 'all';\n\ninterface DebugPanelProps {\n saasApiUrl: string;\n iamApiUrl: string;\n onOpenLogin?: () => void;\n onOpenSignup?: () => void;\n onOpenOnboarding?: (preset: DebugOnboardingPreset) => void;\n onResetProfilePrompt?: () => void;\n}\n\nexport function DebugPanel({ saasApiUrl, iamApiUrl, onOpenLogin, onOpenSignup, onOpenOnboarding, onResetProfilePrompt }: DebugPanelProps) {\n const [logs, setLogs] = useState<ApiCallLog[]>([]);\n const [expanded, setExpanded] = useState(true);\n const [selectedLog, setSelectedLog] = useState<string | null>(null);\n\n useEffect(() => {\n return subscribeToLogs(setLogs);\n }, []);\n\n const handleCopy = useCallback(() => {\n const text = exportLogsAsText();\n navigator.clipboard?.writeText(text).catch(() => {});\n }, []);\n\n const handleClear = useCallback(() => {\n clearApiLogs();\n setSelectedLog(null);\n }, []);\n\n const statusColor = (status: number | null) => {\n if (status === null) return '#f59e0b';\n if (status >= 200 && status < 300) return '#22c55e';\n return '#ef4444';\n };\n\n const statusEmoji = (status: number | null) => {\n if (status === null) return '⏳';\n if (status >= 200 && status < 300) return '✅';\n return '❌';\n };\n\n const selected = selectedLog ? logs.find(l => l.id === selectedLog) : null;\n\n return (\n <div style={{\n position: 'fixed',\n bottom: 0,\n left: 0,\n right: 0,\n zIndex: 99999,\n fontFamily: 'monospace',\n fontSize: '12px',\n }}>\n {/* Header bar */}\n <div\n onClick={() => setExpanded(!expanded)}\n style={{\n background: '#1a1a2e',\n color: '#e2e8f0',\n padding: '6px 12px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n cursor: 'pointer',\n borderTop: '2px solid #6366f1',\n }}\n >\n <span>🔐 Debug SSO — {logs.length} appel{logs.length > 1 ? 's' : ''}</span>\n <div style={{ display: 'flex', gap: '8px', alignItems: 'center' }}>\n {expanded && (\n <>\n <button onClick={(e) => { e.stopPropagation(); handleCopy(); }}\n style={{ background: '#334155', color: '#e2e8f0', border: 'none', borderRadius: '4px', padding: '2px 8px', cursor: 'pointer', fontSize: '11px' }}>\n 📋 Copier\n </button>\n <button onClick={(e) => { e.stopPropagation(); handleClear(); }}\n style={{ background: '#334155', color: '#e2e8f0', border: 'none', borderRadius: '4px', padding: '2px 8px', cursor: 'pointer', fontSize: '11px' }}>\n 🗑️ Effacer\n </button>\n </>\n )}\n <span>{expanded ? '▼' : '▲'}</span>\n </div>\n </div>\n\n {/* Body */}\n {expanded && (\n <div style={{\n background: '#0f0f23',\n color: '#e2e8f0',\n maxHeight: '300px',\n overflowY: 'auto',\n }}>\n {/* Config bar */}\n <div style={{ padding: '4px 12px', background: '#1e1e3f', fontSize: '10px', color: '#94a3b8', display: 'flex', gap: '16px', alignItems: 'center', flexWrap: 'wrap' }}>\n <span>SaaS: <span style={{ color: '#6366f1' }}>{saasApiUrl}</span></span>\n <span>IAM: <span style={{ color: '#6366f1' }}>{iamApiUrl}</span></span>\n <div style={{ marginLeft: 'auto', display: 'flex', gap: '6px', flexWrap: 'wrap' }}>\n <button\n onClick={(e) => { e.stopPropagation(); onOpenLogin?.(); }}\n disabled={!onOpenLogin}\n style={{ background: '#334155', color: '#e2e8f0', border: 'none', borderRadius: '4px', padding: '2px 8px', cursor: onOpenLogin ? 'pointer' : 'not-allowed', fontSize: '11px', opacity: onOpenLogin ? 1 : 0.5 }}\n >\n Connexion\n </button>\n <button\n onClick={(e) => { e.stopPropagation(); onOpenSignup?.(); }}\n disabled={!onOpenSignup}\n style={{ background: '#334155', color: '#e2e8f0', border: 'none', borderRadius: '4px', padding: '2px 8px', cursor: onOpenSignup ? 'pointer' : 'not-allowed', fontSize: '11px', opacity: onOpenSignup ? 1 : 0.5 }}\n >\n Inscription\n </button>\n <button\n onClick={(e) => { e.stopPropagation(); onOpenOnboarding?.('current'); }}\n disabled={!onOpenOnboarding}\n style={{ background: '#334155', color: '#e2e8f0', border: 'none', borderRadius: '4px', padding: '2px 8px', cursor: onOpenOnboarding ? 'pointer' : 'not-allowed', fontSize: '11px', opacity: onOpenOnboarding ? 1 : 0.5 }}\n >\n Infos profile\n </button>\n <button\n onClick={(e) => { e.stopPropagation(); onResetProfilePrompt?.(); }}\n disabled={!onResetProfilePrompt}\n style={{ background: '#334155', color: '#e2e8f0', border: 'none', borderRadius: '4px', padding: '2px 8px', cursor: onResetProfilePrompt ? 'pointer' : 'not-allowed', fontSize: '11px', opacity: onResetProfilePrompt ? 1 : 0.5 }}\n >\n Reset profil\n </button>\n </div>\n </div>\n\n {logs.length === 0 ? (\n <div style={{ padding: '20px', textAlign: 'center', color: '#64748b' }}>\n Aucun appel API. Tentez une connexion pour voir les logs.\n </div>\n ) : (\n <div>\n {logs.map(log => (\n <div key={log.id}>\n <div\n onClick={() => setSelectedLog(selectedLog === log.id ? null : log.id)}\n style={{\n padding: '4px 12px',\n borderBottom: '1px solid #1e293b',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n background: selectedLog === log.id ? '#1e293b' : 'transparent',\n }}\n >\n <span>{statusEmoji(log.responseStatus)}</span>\n <span style={{\n background: log.method === 'GET' ? '#22c55e' : '#3b82f6',\n color: '#fff',\n padding: '0 4px',\n borderRadius: '2px',\n fontSize: '10px',\n fontWeight: 'bold',\n }}>{log.method}</span>\n <span style={{ flex: 1, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {log.endpoint}\n </span>\n <span style={{ color: statusColor(log.responseStatus), minWidth: '30px' }}>\n {log.responseStatus ?? '...'}\n </span>\n <span style={{ color: '#64748b', minWidth: '50px', textAlign: 'right' }}>\n {log.duration ? `${log.duration}ms` : '...'}\n </span>\n </div>\n\n {/* Detail view */}\n {selectedLog === log.id && selected && (\n <div style={{ padding: '8px 12px 8px 32px', background: '#111827', borderBottom: '1px solid #1e293b' }}>\n <div style={{ color: '#94a3b8', marginBottom: '4px' }}>\n ⏰ {new Date(log.timestamp).toLocaleTimeString()}\n </div>\n {log.requestBody ? (\n <div style={{ marginBottom: '4px' }}>\n <div style={{ color: '#6366f1', fontSize: '10px' }}>REQUEST:</div>\n <pre style={{ color: '#cbd5e1', whiteSpace: 'pre-wrap', wordBreak: 'break-all', margin: 0, maxHeight: '80px', overflow: 'auto' }}>\n {JSON.stringify(log.requestBody, null, 2)}\n </pre>\n </div>\n ) : null}\n {log.responseBody ? (\n <div>\n <div style={{ color: '#6366f1', fontSize: '10px' }}>RESPONSE:</div>\n <pre style={{ color: '#cbd5e1', whiteSpace: 'pre-wrap', wordBreak: 'break-all', margin: 0, maxHeight: '120px', overflow: 'auto' }}>\n {JSON.stringify(log.responseBody, null, 2)}\n </pre>\n </div>\n ) : null}\n {log.error && (\n <div style={{ color: '#ef4444', marginTop: '4px' }}>⚠️ {log.error}</div>\n )}\n </div>\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport default DebugPanel;\n","export default \"data:image/png;base64,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\"","/**\n * NativeSSOPage — Page autonome complète pour @ollaid/native-sso\n * Design aligné sur le parcours Native SSO (fond primary, card blanche, ShieldCheck branding)\n * \n * @version 2.7.0\n */\n\nimport { useState, useCallback, useEffect, useRef } from 'react';\nimport { LoginModal } from './LoginModal';\nimport { SignupModal } from './SignupModal';\nimport { OnboardingModal } from './OnboardingModal';\nimport AppsLogoSlider from './AppsLogoSlider';\nimport { DebugPanel, type DebugOnboardingPreset } from './DebugPanel';\nimport ollaidLogo from '../logo/ollaid.png';\nimport { Button } from './ui';\nimport {\n getNativeStorage,\n setNativeStorage,\n STORAGE_KEYS,\n logout,\n getProfilePromptState,\n markProfilePromptComplete,\n setProfilePromptState,\n snoozeProfilePrompt,\n} from '../services/api';\nimport { nativeAuthService } from '../services/nativeAuth';\nimport { profileService } from '../services/profile';\nimport { useNativeAuth } from '../hooks/useNativeAuth';\nimport type { UserInfos, NativeUser } from '../types/native';\nimport type { NativeStorageAdapter } from '../services/api';\n\nexport interface NativeSSOPageProps {\n saasApiUrl: string;\n iamApiUrl: string;\n onLoginSuccess?: (token: string, user: UserInfos) => void;\n onLogout?: () => void;\n onOnboardingComplete?: (data: {\n name?: string;\n image_url?: string;\n ccphone?: string;\n phone?: string;\n email?: string;\n address?: string;\n town?: string;\n country?: string;\n user_infos?: UserInfos;\n }) => void;\n accountType?: 'user' | 'client';\n configPrefix?: string;\n title?: string;\n description?: string;\n logoUrl?: string;\n hideFooter?: boolean;\n redirectAfterLogin?: string;\n redirectAfterLogout?: string;\n storage?: NativeStorageAdapter;\n}\n\ntype ModalState = 'none' | 'login' | 'signup';\n\nconst PROFILE_PROMPT_DELAY_MS = 5 * 60 * 1000;\nconst PROFILE_PROMPT_SNOOZE_MS = 8 * 60 * 60 * 1000;\nconst PROFILE_SYNC_INTERVAL_MS = 30 * 60 * 1000;\nconst PROFILE_FETCH_RETRY_DELAY_MS = 1200;\nconst PROFILE_FETCH_MAX_ATTEMPTS = 3;\n\nconst COLORS = {\n primary: '#002147',\n primaryForeground: '#ffffff',\n accent: '#e8430a',\n card: '#ffffff',\n cardForeground: '#1a2332',\n muted: '#6b7280',\n border: '#e5e7eb',\n shadow: '0 10px 25px -5px rgba(0,0,0,0.2)',\n} as const;\n\nconst LIGHT_VARS: Record<string, string> = {\n \"--background\": \"40 20% 96%\",\n \"--foreground\": \"220 15% 15%\",\n \"--card\": \"0 0% 100%\",\n \"--card-foreground\": \"220 15% 15%\",\n \"--popover\": \"0 0% 100%\",\n \"--popover-foreground\": \"220 15% 15%\",\n \"--primary\": \"209 100% 13%\",\n \"--primary-foreground\": \"0 0% 100%\",\n \"--secondary\": \"40 15% 92%\",\n \"--secondary-foreground\": \"220 15% 25%\",\n \"--muted\": \"40 10% 90%\",\n \"--muted-foreground\": \"220 10% 50%\",\n \"--accent\": \"16 99% 52%\",\n \"--accent-foreground\": \"0 0% 100%\",\n \"--destructive\": \"0 84.2% 60.2%\",\n \"--destructive-foreground\": \"210 40% 98%\",\n \"--border\": \"40 15% 88%\",\n \"--input\": \"40 15% 88%\",\n \"--ring\": \"209 100% 13%\",\n};\n\nfunction safeRedirect(target?: string): boolean {\n if (!target) return false;\n\n if (target.startsWith('/')) {\n window.location.href = target;\n return true;\n }\n\n try {\n const url = new URL(target, window.location.origin);\n if (url.origin === window.location.origin) {\n window.location.href = url.toString();\n return true;\n }\n } catch {\n // ignore invalid URL\n }\n\n return false;\n}\n\n// Shield check SVG inline\nconst ShieldCheckIcon = ({ size = 24, color = COLORS.accent }: { size?: number; color?: string }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke={color} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\" />\n <path d=\"m9 12 2 2 4-4\" />\n </svg>\n);\n\nfunction needsOnboarding(user: NativeUser | UserInfos): boolean {\n return !user.image_url || !user.phone || !user.email;\n}\n\nfunction isProfileComplete(user: NativeUser | UserInfos): boolean {\n return Boolean(user.image_url && user.phone && user.email);\n}\n\n// Gradient border animation keyframes (injected once)\nconst GRADIENT_STYLE_ID = 'ollaid-sso-gradient-anim';\nfunction injectGradientAnimation() {\n if (document.getElementById(GRADIENT_STYLE_ID)) return;\n const style = document.createElement('style');\n style.id = GRADIENT_STYLE_ID;\n style.textContent = `\n @keyframes ollaid-border-gradient {\n 0% { background-position: 0% 50%; }\n 50% { background-position: 100% 50%; }\n 100% { background-position: 0% 50%; }\n }\n @keyframes ollaid-marquee {\n 0% { transform: translateX(0); }\n 100% { transform: translateX(-50%); }\n }\n `;\n document.head.appendChild(style);\n}\n\n/** Top branding: ShieldCheck + iam.ollaid.com + subtitle */\nconst TopBranding = ({ subtitle }: { subtitle: string }) => (\n <div style={{ textAlign: 'center', marginBottom: '1.5rem' }}>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '0.5rem', marginBottom: '0.5rem' }}>\n <ShieldCheckIcon size={28} color={COLORS.accent} />\n <span style={{ fontSize: '1.25rem', fontWeight: 700, color: COLORS.primaryForeground }}>\n iam.<span style={{ color: COLORS.accent }}>ollaid</span>.com\n </span>\n </div>\n <p style={{ fontSize: '1rem', fontWeight: 600, color: 'rgba(255,255,255,0.85)' }}>\n {subtitle}\n </p>\n </div>\n);\n\n/** Footer: Ollaid logo + copyright */\nconst Footer = ({ hideFooter }: { hideFooter: boolean }) => (\n <div style={{ marginTop: '1.5rem', textAlign: 'center' }}>\n <img src={ollaidLogo} alt=\"Ollaid\" style={{ height: '28px', margin: '0 auto 0.5rem' }} />\n {!hideFooter && (\n <p style={{ fontSize: '0.75rem', color: 'rgba(255,255,255,0.5)' }}>\n © 2026 iam.ollaid.com propulsé par <span style={{ fontWeight: 500 }}>ollaid</span>\n </p>\n )}\n </div>\n);\n\nexport function NativeSSOPage({\n saasApiUrl,\n iamApiUrl,\n onLoginSuccess,\n onLogout,\n onOnboardingComplete,\n accountType = 'user',\n configPrefix = 'iam',\n title = 'Un compte pour toutes vos applications',\n description = 'Connectez-vous avec votre compte Ollaid pour accéder à toutes les applications partenaires.',\n logoUrl,\n hideFooter = false,\n redirectAfterLogin,\n redirectAfterLogout,\n storage,\n}: NativeSSOPageProps) {\n if (storage) {\n setNativeStorage(storage);\n }\n\n const [modal, setModal] = useState<ModalState>('none');\n const [loginInitialPhone, setLoginInitialPhone] = useState<string | undefined>();\n const [showOnboarding, setShowOnboarding] = useState(false);\n const [pendingSession, setPendingSession] = useState<{ token: string; user: NativeUser; sourceUser: NativeUser } | null>(null);\n const [debugOnboardingState, setDebugOnboardingState] = useState<{\n token: string;\n user: NativeUser;\n sourceUser: NativeUser;\n preset: DebugOnboardingPreset;\n variant: 'edit';\n } | null>(null);\n const [session, setSession] = useState<{ token: string; user: NativeUser } | null>(() => {\n try {\n const storage = getNativeStorage();\n const token = storage.getItem(STORAGE_KEYS.AUTH_TOKEN) || storage.getItem(STORAGE_KEYS.TOKEN);\n const userStr = storage.getItem(STORAGE_KEYS.USER);\n if (token && userStr) return { token, user: JSON.parse(userStr) };\n } catch {\n return null;\n }\n return null;\n });\n\n const { isDebug: resolvedDebug } = useNativeAuth({ saasApiUrl, iamApiUrl, configPrefix, autoLoadCredentials: true, storage });\n const onboardingPromptTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const onboardingRecheckTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const profileSyncTimerRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const profileHydrationRunningRef = useRef(false);\n const profileHydrationRequestedRef = useRef<string | null>(null);\n const sessionRef = useRef(session);\n const [profileHydrating, setProfileHydrating] = useState(false);\n\n useEffect(() => {\n sessionRef.current = session;\n }, [session]);\n\n const clearOnboardingTimers = useCallback(() => {\n if (onboardingPromptTimerRef.current) {\n clearTimeout(onboardingPromptTimerRef.current);\n onboardingPromptTimerRef.current = null;\n }\n if (onboardingRecheckTimerRef.current) {\n clearTimeout(onboardingRecheckTimerRef.current);\n onboardingRecheckTimerRef.current = null;\n }\n }, []);\n\n const persistSessionUser = useCallback((token: string, user: NativeUser) => {\n const storage = getNativeStorage();\n setSession({ token, user });\n storage.setItem(STORAGE_KEYS.USER, JSON.stringify(user));\n storage.setItem(STORAGE_KEYS.AUTH_TOKEN, token);\n }, []);\n\n const extractUserInfos = useCallback((payload: unknown): Partial<NativeUser> | null => {\n if (!payload || typeof payload !== 'object') return null;\n const data = payload as Record<string, unknown>;\n const candidate = (data.user_infos && typeof data.user_infos === 'object')\n ? data.user_infos as Record<string, unknown>\n : data.user && typeof data.user === 'object'\n ? data.user as Record<string, unknown>\n : data;\n\n return {\n reference: typeof candidate.reference === 'string' ? candidate.reference : undefined,\n name: typeof candidate.name === 'string' ? candidate.name : undefined,\n email: typeof candidate.email === 'string' ? candidate.email : undefined,\n ccphone: typeof candidate.ccphone === 'string' ? candidate.ccphone : undefined,\n phone: typeof candidate.phone === 'string' ? candidate.phone : undefined,\n address: typeof candidate.address === 'string' ? candidate.address : undefined,\n town: typeof candidate.town === 'string' ? candidate.town : undefined,\n country: typeof candidate.country === 'string' ? candidate.country : undefined,\n image_url: typeof candidate.image_url === 'string' ? candidate.image_url : undefined,\n auth_2fa: typeof candidate.auth_2fa === 'boolean' ? candidate.auth_2fa : undefined,\n alias_reference: typeof candidate.alias_reference === 'string' ? candidate.alias_reference : undefined,\n iam_reference: typeof candidate.iam_reference === 'string' ? candidate.iam_reference : undefined,\n };\n }, []);\n\n const refreshSessionProfile = useCallback(async (force = false): Promise<NativeUser | null> => {\n const activeSession = sessionRef.current;\n if (!activeSession?.token) return null;\n if (profileHydrationRunningRef.current && !force) return activeSession.user;\n if (profileHydrationRequestedRef.current === activeSession.token && !force) return activeSession.user;\n\n profileHydrationRunningRef.current = true;\n profileHydrationRequestedRef.current = activeSession.token;\n setProfileHydrating(true);\n try {\n let lastError: unknown = null;\n for (let attempt = 1; attempt <= PROFILE_FETCH_MAX_ATTEMPTS; attempt += 1) {\n try {\n const response = await profileService.getProfile();\n const mergedInfos = extractUserInfos(response) || {};\n const mergedUser = { ...activeSession.user, ...mergedInfos } as NativeUser;\n persistSessionUser(activeSession.token, mergedUser);\n return mergedUser;\n } catch (error) {\n lastError = error;\n if (attempt < PROFILE_FETCH_MAX_ATTEMPTS) {\n await new Promise((resolve) => setTimeout(resolve, PROFILE_FETCH_RETRY_DELAY_MS * attempt));\n }\n }\n }\n\n const isDev = Boolean((import.meta as unknown as { env?: { DEV?: boolean } }).env?.DEV);\n if (isDev) {\n console.warn('Profile hydration failed after retries', lastError);\n }\n return activeSession.user;\n } finally {\n profileHydrationRunningRef.current = false;\n setProfileHydrating(false);\n }\n }, [persistSessionUser, extractUserInfos]);\n\n const makeDebugOnboardingUser = useCallback((baseUser: NativeUser, preset: DebugOnboardingPreset): NativeUser => {\n const normalized: NativeUser = { ...baseUser };\n\n if (preset === 'current') return normalized;\n if (preset === 'photo') return { ...normalized, image_url: '' };\n if (preset === 'phone') return { ...normalized, phone: '', ccphone: '' };\n if (preset === 'email') return { ...normalized, email: '' };\n return { ...normalized, image_url: '', phone: '', ccphone: '', email: '' };\n }, []);\n\n const syncProfilePrompt = useCallback((currentSession: { token: string; user: NativeUser } | null) => {\n clearOnboardingTimers();\n\n if (!currentSession) {\n setPendingSession(null);\n setShowOnboarding(false);\n return;\n }\n\n const promptState = getProfilePromptState();\n const now = Date.now();\n const onboardingVisible = showOnboarding || Boolean(pendingSession || debugOnboardingState);\n\n if (promptState.lastStatus === true || isProfileComplete(currentSession.user)) {\n markProfilePromptComplete();\n if (!onboardingVisible) {\n setPendingSession(null);\n setShowOnboarding(false);\n }\n return;\n }\n\n setPendingSession({ ...currentSession, sourceUser: currentSession.user });\n\n const scheduleOpen = () => {\n onboardingPromptTimerRef.current = setTimeout(() => {\n const latestPromptState = getProfilePromptState();\n if (latestPromptState.lastStatus === true) return;\n if (!currentSession) return;\n if (!isProfileComplete(currentSession.user)) {\n setShowOnboarding(true);\n }\n }, PROFILE_PROMPT_DELAY_MS);\n };\n\n if (promptState.recheckAt && promptState.recheckAt > now) {\n onboardingRecheckTimerRef.current = setTimeout(() => {\n const latestPromptState = getProfilePromptState();\n if (latestPromptState.lastStatus === true) return;\n if (!currentSession) return;\n if (!isProfileComplete(currentSession.user)) {\n scheduleOpen();\n }\n }, promptState.recheckAt - now);\n return;\n }\n\n scheduleOpen();\n }, [clearOnboardingTimers, showOnboarding, pendingSession, debugOnboardingState]);\n\n // Force light mode + inject gradient animation\n useEffect(() => {\n injectGradientAnimation();\n const root = document.documentElement;\n const originalValues: Record<string, string> = {};\n Object.keys(LIGHT_VARS).forEach((key) => { originalValues[key] = root.style.getPropertyValue(key); });\n Object.entries(LIGHT_VARS).forEach(([key, value]) => { root.style.setProperty(key, value); });\n root.classList.add('light');\n root.classList.remove('dark');\n root.style.colorScheme = 'light';\n const meta = document.createElement('meta');\n meta.name = 'color-scheme';\n meta.content = 'light';\n document.head.appendChild(meta);\n return () => {\n Object.entries(originalValues).forEach(([key, value]) => {\n if (value) root.style.setProperty(key, value);\n else root.style.removeProperty(key);\n });\n root.classList.remove('light');\n root.style.colorScheme = '';\n meta.remove();\n };\n }, []);\n\n const openLogin = useCallback(() => setModal('login'), []);\n const openSignup = useCallback(() => setModal('signup'), []);\n const closeModal = useCallback(() => { setModal('none'); setLoginInitialPhone(undefined); }, []);\n const switchToSignup = useCallback(() => { setModal('none'); setLoginInitialPhone(undefined); setTimeout(() => setModal('signup'), 150); }, []);\n const switchToLogin = useCallback(() => { setModal('none'); setLoginInitialPhone(undefined); setTimeout(() => setModal('login'), 150); }, []);\n const switchToLoginWithPhone = useCallback((phone: string) => {\n setModal('none');\n setLoginInitialPhone(phone);\n setTimeout(() => setModal('login'), 150);\n }, []);\n\n const handleLoginSuccess = useCallback((token: string, user: UserInfos) => {\n const userObj: NativeUser = {\n reference: '',\n name: user.name,\n email: user.email || undefined,\n phone: user.phone,\n ccphone: user.ccphone,\n image_url: user.image_url,\n account_type: accountType,\n };\n setModal('none');\n persistSessionUser(token, userObj);\n syncProfilePrompt({ token, user: userObj });\n void refreshSessionProfile(true);\n\n if (!needsOnboarding(userObj)) {\n markProfilePromptComplete();\n onLoginSuccess?.(token, user);\n safeRedirect(redirectAfterLogin);\n }\n }, [onLoginSuccess, redirectAfterLogin, persistSessionUser, syncProfilePrompt, refreshSessionProfile, accountType]);\n\n const handleOnboardingComplete = useCallback((data: {\n name?: string;\n image_url?: string;\n ccphone?: string;\n phone?: string;\n email?: string;\n address?: string;\n town?: string;\n country?: string;\n user_infos?: UserInfos;\n }) => {\n const activeSession = debugOnboardingState || pendingSession;\n if (!activeSession) return;\n const updatedUser = { ...activeSession.sourceUser, ...(data.user_infos || data) } as NativeUser;\n persistSessionUser(activeSession.token, updatedUser);\n onOnboardingComplete?.({\n name: updatedUser.name,\n image_url: updatedUser.image_url,\n ccphone: updatedUser.ccphone || undefined,\n phone: updatedUser.phone || undefined,\n email: updatedUser.email || undefined,\n address: updatedUser.address || undefined,\n town: updatedUser.town || undefined,\n country: updatedUser.country || undefined,\n user_infos: {\n reference: updatedUser.reference,\n name: updatedUser.name,\n email: updatedUser.email || null,\n ccphone: updatedUser.ccphone,\n phone: updatedUser.phone,\n address: updatedUser.address,\n town: updatedUser.town,\n country: updatedUser.country,\n image_url: updatedUser.image_url,\n auth_2fa: updatedUser.auth_2fa,\n alias_reference: updatedUser.alias_reference,\n iam_reference: updatedUser.iam_reference,\n },\n });\n if (!debugOnboardingState) {\n markProfilePromptComplete();\n }\n void refreshSessionProfile(true);\n }, [pendingSession, debugOnboardingState, onOnboardingComplete, persistSessionUser, refreshSessionProfile]);\n\n const handleOnboardingSkip = useCallback(() => {\n const activeSession = debugOnboardingState || pendingSession;\n if (!activeSession) return;\n setShowOnboarding(false);\n setPendingSession(null);\n setDebugOnboardingState(null);\n if (!debugOnboardingState) {\n persistSessionUser(activeSession.token, activeSession.user);\n snoozeProfilePrompt(PROFILE_PROMPT_SNOOZE_MS / (60 * 60 * 1000));\n onLoginSuccess?.(activeSession.token, activeSession.user as unknown as UserInfos);\n safeRedirect(redirectAfterLogin);\n return;\n }\n }, [pendingSession, debugOnboardingState, onLoginSuccess, redirectAfterLogin, persistSessionUser]);\n\n const handleOnboardingDismiss = useCallback(() => {\n setShowOnboarding(false);\n setPendingSession(null);\n setDebugOnboardingState(null);\n }, []);\n\n const handleLogout = useCallback(async () => {\n await logout();\n setSession(null);\n setPendingSession(null);\n setDebugOnboardingState(null);\n clearOnboardingTimers();\n onLogout?.();\n safeRedirect(redirectAfterLogout);\n }, [onLogout, redirectAfterLogout, clearOnboardingTimers]);\n\n const openDebugLogin = useCallback(() => {\n clearOnboardingTimers();\n setShowOnboarding(false);\n setPendingSession(null);\n setDebugOnboardingState(null);\n setModal('login');\n }, [clearOnboardingTimers]);\n\n const openDebugSignup = useCallback(() => {\n clearOnboardingTimers();\n setShowOnboarding(false);\n setPendingSession(null);\n setDebugOnboardingState(null);\n setModal('signup');\n }, [clearOnboardingTimers]);\n\n const openDebugOnboarding = useCallback((preset: DebugOnboardingPreset = 'current') => {\n if (!session) return;\n clearOnboardingTimers();\n setModal('none');\n const simulatedUser = makeDebugOnboardingUser(session.user, preset);\n setDebugOnboardingState({\n token: session.token,\n user: simulatedUser,\n sourceUser: session.user,\n preset,\n variant: 'edit',\n });\n setPendingSession(null);\n setShowOnboarding(true);\n }, [session, clearOnboardingTimers, makeDebugOnboardingUser]);\n\n const resetDebugProfilePrompt = useCallback(() => {\n setProfilePromptState(false, Date.now() + PROFILE_PROMPT_SNOOZE_MS);\n if (session) {\n clearOnboardingTimers();\n setDebugOnboardingState(null);\n setPendingSession({ ...session, sourceUser: session.user });\n setShowOnboarding(true);\n }\n }, [session, clearOnboardingTimers]);\n\n useEffect(() => {\n syncProfilePrompt(session);\n return () => {\n clearOnboardingTimers();\n };\n }, [session, syncProfilePrompt, clearOnboardingTimers]);\n\n useEffect(() => {\n if (!session?.token) return;\n if (!showOnboarding && !debugOnboardingState) return;\n void refreshSessionProfile();\n }, [session?.token, showOnboarding, debugOnboardingState, refreshSessionProfile]);\n\n useEffect(() => {\n if (!session?.token) return;\n\n const syncUserInfos = async () => {\n try {\n const response = await nativeAuthService.checkToken(session.token);\n if (!response.valid || !response.user) {\n await refreshSessionProfile(true);\n return;\n }\n\n const storedRaw = getNativeStorage().getItem(STORAGE_KEYS.USER);\n\n let storedUser: Record<string, unknown> = session.user as unknown as Record<string, unknown>;\n if (storedRaw) {\n try {\n storedUser = JSON.parse(storedRaw);\n } catch {\n // keep current session user\n }\n }\n\n const mergedUser = { ...storedUser, ...response.user } as NativeUser;\n persistSessionUser(session.token, mergedUser);\n\n if (isProfileComplete(mergedUser)) {\n markProfilePromptComplete();\n setShowOnboarding(false);\n setPendingSession(null);\n }\n } catch {\n await refreshSessionProfile(true);\n }\n };\n\n if (profileSyncTimerRef.current) {\n clearInterval(profileSyncTimerRef.current);\n profileSyncTimerRef.current = null;\n }\n\n profileSyncTimerRef.current = setInterval(syncUserInfos, PROFILE_SYNC_INTERVAL_MS);\n return () => {\n if (profileSyncTimerRef.current) {\n clearInterval(profileSyncTimerRef.current);\n profileSyncTimerRef.current = null;\n }\n };\n }, [session?.token, session?.user, persistSessionUser, refreshSessionProfile]);\n\n // Styles\n const containerStyle: React.CSSProperties = {\n minHeight: '100vh',\n backgroundColor: COLORS.primary,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '1.5rem 1rem',\n };\n\n const cardStyle: React.CSSProperties = {\n width: '100%',\n maxWidth: '28rem',\n backgroundColor: COLORS.card,\n border: `1px solid ${COLORS.border}`,\n borderRadius: '0.75rem',\n boxShadow: COLORS.shadow,\n overflow: 'hidden',\n };\n\n // Badge-style slider wrapper (shield circle + animated gradient pill)\n const SliderBadge = () => (\n <div style={{ width: '100%', maxWidth: '28rem', marginBottom: '1.5rem' }}>\n {logoUrl ? (\n <img src={logoUrl} alt=\"Logo\" style={{ height: '3rem', margin: '0 auto' }} />\n ) : (\n <div style={{ display: 'flex', alignItems: 'center', gap: '1rem' }}>\n {/* Shield circle */}\n <div style={{\n width: '3rem',\n height: '3rem',\n borderRadius: '50%',\n backgroundColor: '#ffffff',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n boxShadow: '0 2px 8px rgba(0,0,0,0.15)',\n border: `1px solid ${COLORS.border}`,\n }}>\n <ShieldCheckIcon size={22} color={COLORS.accent} />\n </div>\n {/* Animated gradient pill with slider */}\n <div style={{\n flex: 1,\n minWidth: 0,\n position: 'relative',\n borderRadius: '9999px',\n padding: '2px',\n background: `linear-gradient(90deg, ${COLORS.primary}, ${COLORS.accent}, ${COLORS.primary})`,\n backgroundSize: '200% 100%',\n animation: 'ollaid-border-gradient 3s ease infinite',\n }}>\n <div style={{\n backgroundColor: '#ffffff',\n borderRadius: '9999px',\n height: '3rem',\n overflow: 'hidden',\n }}>\n <AppsLogoSlider iamApiUrl={iamApiUrl} speed=\"normal\" />\n </div>\n </div>\n </div>\n )}\n </div>\n );\n\n // Auto-redirect if already authenticated and redirectAfterLogin is set\n if (session) {\n if (redirectAfterLogin) {\n // Redirect immediately — don't show authenticated view\n safeRedirect(redirectAfterLogin);\n return (\n <div style={containerStyle}>\n <TopBranding subtitle={title} />\n <p style={{ color: 'rgba(255,255,255,0.7)', fontSize: '0.875rem' }}>Redirection en cours...</p>\n </div>\n );\n }\n\n return (\n <div style={containerStyle}>\n <TopBranding subtitle={title} />\n <SliderBadge />\n\n <div style={cardStyle}>\n <div style={{ padding: '2rem 1.5rem 1.5rem' }}>\n <h2 style={{ fontSize: '1.25rem', fontWeight: 600, textAlign: 'center', color: COLORS.cardForeground }}>\n Bienvenue, {session.user.name}\n </h2>\n <p style={{ fontSize: '0.875rem', color: COLORS.muted, textAlign: 'center', marginTop: '0.25rem' }}>\n Vous êtes connecté à votre compte Ollaid SSO\n </p>\n <div style={{ marginTop: '1.5rem' }}>\n <Button variant=\"outline\" onClick={handleLogout} style={{ width: '100%' }}>\n Déconnexion\n </Button>\n </div>\n </div>\n </div>\n\n <Footer hideFooter={hideFooter} />\n\n {(pendingSession || debugOnboardingState) && (\n <OnboardingModal\n open={showOnboarding}\n onOpenChange={(open) => { if (!open) handleOnboardingSkip(); }}\n onDismiss={handleOnboardingDismiss}\n user={(debugOnboardingState || pendingSession)!.user}\n variant={debugOnboardingState ? 'edit' : 'missing'}\n profileHydrating={profileHydrating}\n onComplete={handleOnboardingComplete}\n onSkip={handleOnboardingSkip}\n />\n )}\n\n {resolvedDebug && (\n <DebugPanel\n saasApiUrl={saasApiUrl}\n iamApiUrl={iamApiUrl}\n onOpenLogin={openDebugLogin}\n onOpenSignup={openDebugSignup}\n onOpenOnboarding={openDebugOnboarding}\n onResetProfilePrompt={resetDebugProfilePrompt}\n />\n )}\n </div>\n );\n }\n\n // Unauthenticated view\n return (\n <div style={containerStyle}>\n <TopBranding subtitle={title} />\n <SliderBadge />\n\n {/* Main card */}\n <div style={cardStyle}>\n <div style={{ padding: '2rem 1.5rem 1.5rem' }}>\n <p style={{ fontSize: '0.875rem', color: COLORS.muted, textAlign: 'center', marginBottom: '1.5rem' }}>\n {description}\n </p>\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.75rem' }}>\n <Button onClick={openLogin} style={{ width: '100%', height: '2.75rem' }}>\n Connexion\n </Button>\n <Button\n variant=\"outline\"\n onClick={openSignup}\n style={{ width: '100%', height: '2.75rem', borderColor: COLORS.cardForeground, color: COLORS.cardForeground }}\n >\n Inscription\n </Button>\n </div>\n </div>\n </div>\n\n <Footer hideFooter={hideFooter} />\n\n <LoginModal\n open={modal === 'login'}\n onOpenChange={open => { if (!open) closeModal(); }}\n onSwitchToSignup={switchToSignup}\n onLoginSuccess={handleLoginSuccess}\n saasApiUrl={saasApiUrl}\n iamApiUrl={iamApiUrl}\n defaultAccountType={accountType}\n initialPhone={loginInitialPhone}\n />\n\n <SignupModal\n open={modal === 'signup'}\n onOpenChange={open => { if (!open) closeModal(); }}\n onSwitchToLogin={switchToLogin}\n onSwitchToLoginWithPhone={switchToLoginWithPhone}\n onSignupSuccess={handleLoginSuccess}\n saasApiUrl={saasApiUrl}\n iamApiUrl={iamApiUrl}\n defaultAccountType={accountType}\n />\n\n {(pendingSession || debugOnboardingState) && (\n <OnboardingModal\n open={showOnboarding}\n onOpenChange={(open) => { if (!open) handleOnboardingSkip(); }}\n onDismiss={handleOnboardingDismiss}\n user={(debugOnboardingState || pendingSession)!.user}\n variant={debugOnboardingState ? 'edit' : 'missing'}\n profileHydrating={profileHydrating}\n onComplete={handleOnboardingComplete}\n onSkip={handleOnboardingSkip}\n />\n )}\n\n {resolvedDebug && (\n <DebugPanel\n saasApiUrl={saasApiUrl}\n iamApiUrl={iamApiUrl}\n onOpenLogin={openDebugLogin}\n onOpenSignup={openDebugSignup}\n onOpenOnboarding={openDebugOnboarding}\n onResetProfilePrompt={resetDebugProfilePrompt}\n />\n )}\n </div>\n );\n}\n\nexport default NativeSSOPage;\n","/* eslint-disable react-refresh/only-export-components */\n/**\n * NativeSSOProvider — React Context pour @ollaid/native-sso\n * Centralise la configuration pour les hooks et composants individuels\n * \n * @version 2.7.0\n */\n\nimport { createContext, useContext, useEffect, useRef, type ReactNode } from 'react';\nimport { setNativeAuthConfig, setNativeStorage, type NativeAuthConfig, type NativeStorageAdapter } from './services/api';\n\nexport interface NativeSSOConfig {\n /** URL du Backend SaaS (ex: https://mon-saas.com/api) */\n saasApiUrl: string;\n /** URL du Backend IAM (ex: https://identityam.ollaid.com/api) */\n iamApiUrl: string;\n /** Timeout en ms (défaut: 30000) */\n timeout?: number;\n /** Mode debug (logs console) */\n debug?: boolean;\n /** Stockage injectable pour les apps natives / Capacitor */\n storage?: NativeStorageAdapter;\n}\n\nconst NativeSSOContext = createContext<NativeSSOConfig | null>(null);\n\nexport interface NativeSSOProviderProps {\n config: NativeSSOConfig;\n children: ReactNode;\n}\n\n/**\n * Provider React pour centraliser la config SSO.\n * \n * Usage :\n * ```tsx\n * <NativeSSOProvider config={{ saasApiUrl: '...', iamApiUrl: '...' }}>\n * <App />\n * </NativeSSOProvider>\n * ```\n */\nexport function NativeSSOProvider({ config, children }: NativeSSOProviderProps) {\n const configuredRef = useRef(false);\n\n if (config.storage) {\n setNativeStorage(config.storage);\n }\n\n useEffect(() => {\n if (!configuredRef.current) {\n setNativeAuthConfig(config);\n configuredRef.current = true;\n }\n }, [config]);\n\n return (\n <NativeSSOContext.Provider value={config}>\n {children}\n </NativeSSOContext.Provider>\n );\n}\n\n/**\n * Hook pour accéder à la config SSO depuis le Provider.\n * Optionnel : les hooks acceptent aussi la config en paramètre.\n */\nexport function useNativeSSOConfig(): NativeSSOConfig {\n const ctx = useContext(NativeSSOContext);\n if (!ctx) {\n throw new Error('useNativeSSOConfig doit être utilisé dans un <NativeSSOProvider>');\n }\n return ctx;\n}\n\nexport default NativeSSOProvider;\n","/**\n * Hook React pour la déconnexion sécurisée.\n * \n * Wrape `logout()` avec gestion d'état (loading, error)\n * et callbacks (onSuccess, onError) pour une intégration UX simple.\n * \n * @example\n * ```tsx\n * import { useLogout } from '@ollaid/native-sso';\n * \n * const LogoutButton = () => {\n * const { logout, loading, error } = useLogout({\n * onSuccess: () => navigate('/auth/login'),\n * onError: (err) => toast.error(err.message),\n * });\n * \n * return (\n * <button onClick={logout} disabled={loading}>\n * {loading ? 'Déconnexion...' : 'Se déconnecter'}\n * </button>\n * );\n * };\n * ```\n * \n * @version 2.7.0\n */\n\nimport { useState, useCallback } from 'react';\nimport { logout } from '../services/api';\n\nexport interface UseLogoutOptions {\n /** Callback appelé après une déconnexion réussie (redirection, toast, etc.) */\n onSuccess?: () => void;\n /** Callback appelé en cas d'erreur (notification, log, etc.) */\n onError?: (error: Error) => void;\n}\n\nexport interface UseLogoutReturn {\n /** Déclenche la déconnexion complète (double revocation SaaS + IAM) */\n logout: () => Promise<void>;\n /** `true` pendant l'appel de déconnexion */\n loading: boolean;\n /** Message d'erreur si la déconnexion a échoué, `null` sinon */\n error: string | null;\n}\n\nexport const useLogout = (options?: UseLogoutOptions): UseLogoutReturn => {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const handleLogout = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n await logout();\n options?.onSuccess?.();\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Erreur de déconnexion';\n setError(message);\n options?.onError?.(err instanceof Error ? err : new Error(message));\n } finally {\n setLoading(false);\n }\n }, [options]);\n\n return { logout: handleLogout, loading, error };\n};\n","/**\n * Service IAM Account — APIs server-to-server\n * link-phone, link-email, refresh-user-info, update-avatar, reset-avatar\n * \n * ⚠️ ATTENTION — SERVER-TO-SERVER UNIQUEMENT\n * Ces APIs utilisent la `secret_key` de votre application IAM.\n * Elles doivent être appelées EXCLUSIVEMENT depuis un backend (Node.js, PHP, etc.).\n * Ne JAMAIS appeler ces méthodes depuis du code frontend/navigateur car la\n * secret_key serait exposée dans les DevTools réseau.\n * \n * @version 2.7.0\n */\n\nimport { fetchWithTimeout, getHeaders, getNativeAuthConfig } from './api';\nimport { nativeAuthService } from './nativeAuth';\n\nimport type {\n LinkPhoneRequest,\n LinkPhoneResponse,\n LinkEmailRequest,\n LinkEmailResponse,\n RefreshUserInfoSingleRequest,\n RefreshUserInfoSingleResponse,\n RefreshUserInfoBulkRequest,\n RefreshUserInfoBulkResponse,\n UpdateAvatarRequest,\n UpdateAvatarResponse,\n ResetAvatarRequest,\n ResetAvatarResponse,\n} from '../types/native';\n\n// ============================================\n// Helper — auto-fill credentials if available\n// ============================================\n\nfunction getCredentialsOrThrow(params: { app_key?: string; secret_key?: string }) {\n const app_key = params.app_key;\n const secret_key = params.secret_key;\n\n if (!app_key || !secret_key) {\n throw new Error('app_key et secret_key sont requis en paramètre. Ces APIs sont server-to-server et ne peuvent pas utiliser les encrypted_credentials.');\n }\n\n return { app_key, secret_key };\n}\n\n// ============================================\n// Service\n// ============================================\n\nexport const iamAccountService = {\n\n /**\n * Lier un numéro de téléphone à un compte utilisateur existant\n * POST {iamApiUrl}/iam/link-phone\n */\n async linkPhone(params: Partial<Pick<LinkPhoneRequest, 'app_key' | 'secret_key'>> & Omit<LinkPhoneRequest, 'app_key' | 'secret_key'>): Promise<LinkPhoneResponse> {\n const config = getNativeAuthConfig();\n const { app_key, secret_key } = getCredentialsOrThrow(params);\n\n return fetchWithTimeout<LinkPhoneResponse>(\n `${config.iamApiUrl}/iam/link-phone`,\n {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify({\n app_key,\n secret_key,\n iam_reference: params.iam_reference,\n ccphone: params.ccphone,\n phone: params.phone,\n }),\n },\n config.timeout || 30000\n );\n },\n\n /**\n * Lier une adresse email à un compte utilisateur existant\n * POST {iamApiUrl}/iam/link-email\n */\n async linkEmail(params: Partial<Pick<LinkEmailRequest, 'app_key' | 'secret_key'>> & Omit<LinkEmailRequest, 'app_key' | 'secret_key'>): Promise<LinkEmailResponse> {\n const config = getNativeAuthConfig();\n const { app_key, secret_key } = getCredentialsOrThrow(params);\n\n return fetchWithTimeout<LinkEmailResponse>(\n `${config.iamApiUrl}/iam/link-email`,\n {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify({\n app_key,\n secret_key,\n iam_reference: params.iam_reference,\n email: params.email,\n }),\n },\n config.timeout || 30000\n );\n },\n\n /**\n * Récupérer les user_infos d'un utilisateur (mode single)\n * POST {iamApiUrl}/iam/refresh-user-info\n */\n async refreshUserInfo(params: Partial<Pick<RefreshUserInfoSingleRequest, 'secret_key'>> & Omit<RefreshUserInfoSingleRequest, 'secret_key'>): Promise<RefreshUserInfoSingleResponse> {\n const config = getNativeAuthConfig();\n \n const secret_key = params.secret_key;\n\n if (!secret_key) {\n throw new Error('secret_key est requis. Chargez les credentials ou passez-la en paramètre.');\n }\n\n return fetchWithTimeout<RefreshUserInfoSingleResponse>(\n `${config.iamApiUrl}/iam/refresh-user-info`,\n {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify({\n secret_key,\n alias_reference: params.alias_reference,\n }),\n },\n config.timeout || 30000\n );\n },\n\n /**\n * Récupérer les user_infos en bulk (max 100 alias_references)\n * POST {iamApiUrl}/iam/refresh-user-info\n */\n async refreshUserInfoBulk(params: Partial<Pick<RefreshUserInfoBulkRequest, 'secret_key'>> & Omit<RefreshUserInfoBulkRequest, 'secret_key'>): Promise<RefreshUserInfoBulkResponse> {\n const config = getNativeAuthConfig();\n \n const secret_key = params.secret_key;\n\n if (!secret_key) {\n throw new Error('secret_key est requis. Chargez les credentials ou passez-la en paramètre.');\n }\n\n if (params.alias_references.length > 100) {\n throw new Error('Maximum 100 alias_references par requête bulk.');\n }\n\n return fetchWithTimeout<RefreshUserInfoBulkResponse>(\n `${config.iamApiUrl}/iam/refresh-user-info`,\n {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify({\n secret_key,\n alias_references: params.alias_references,\n }),\n },\n config.timeout || 30000\n );\n },\n\n /**\n * Mettre à jour l'avatar d'un utilisateur pour une application spécifique\n * POST {iamApiUrl}/iam/update-avatar\n */\n async updateAvatar(params: Partial<Pick<UpdateAvatarRequest, 'app_key' | 'secret_key'>> & Omit<UpdateAvatarRequest, 'app_key' | 'secret_key'>): Promise<UpdateAvatarResponse> {\n const config = getNativeAuthConfig();\n const { app_key, secret_key } = getCredentialsOrThrow(params);\n\n return fetchWithTimeout<UpdateAvatarResponse>(\n `${config.iamApiUrl}/iam/update-avatar`,\n {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify({\n app_key,\n secret_key,\n alias_reference: params.alias_reference,\n avatar_url: params.avatar_url,\n }),\n },\n config.timeout || 30000\n );\n },\n\n /**\n * Réinitialiser l'avatar d'un utilisateur (remettre à null pour utiliser l'image globale)\n * POST {iamApiUrl}/iam/reset-avatar\n */\n async resetAvatar(params: Partial<Pick<ResetAvatarRequest, 'app_key' | 'secret_key'>> & Omit<ResetAvatarRequest, 'app_key' | 'secret_key'>): Promise<ResetAvatarResponse> {\n const config = getNativeAuthConfig();\n const { app_key, secret_key } = getCredentialsOrThrow(params);\n\n return fetchWithTimeout<ResetAvatarResponse>(\n `${config.iamApiUrl}/iam/reset-avatar`,\n {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify({\n app_key,\n secret_key,\n alias_reference: params.alias_reference,\n }),\n },\n config.timeout || 30000\n );\n },\n};\n"],"names":["jsxs","jsx","createContext","useEffect","useContext","forwardRef","useRef","useState","module","this","Math","undefined","global","require","C","require$$0","n","H","require$$1","require$$2","hmac","CBC","require$$3","require$$4","SUB_MIX_0","SUB_MIX_1","SUB_MIX_2","SUB_MIX_3","SBOX","require$$5","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","require$$22","require$$23","require$$24","require$$25","require$$26","require$$27","require$$28","require$$29","require$$30","require$$31","require$$32","require$$33","require$$34","CryptoJS.AES","CryptoJS.enc","nativeAuthService","config","STORAGE_KEYS","getErrorMessage","useCallback","iconCircle","backBtnStyle","Fragment","storage","logout","linkStyle","_a","_b","_c","_d","_e","_f","useMemo","maxSize","size","open"],"mappings":"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C7E,eAAe,WAAY,UAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,SAAU;AAAA,UAC7E,eAAe,YAAY,SAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,SAAU;AAAA,UAC7E,eAAe,WAAY,UAAU;AAAA,UAAG,eAAe,WAAY,UAAU;AAAA,UAC7E,eAAe,WAAY,UAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,SAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,WAAY,UAAU;AAAA,UAAG,eAAe,WAAY,SAAU;AAAA,UAC7E,eAAe,WAAY,UAAU;AAAA,UAAG,eAAe,WAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,SAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,SAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,WAAY,SAAU;AAAA,UAC7E,eAAe,WAAY,UAAU;AAAA,UAAG,eAAe,WAAY,UAAU;AAAA,UAC7E,eAAe,WAAY,UAAU;AAAA,UAAG,eAAe,WAAY,UAAU;AAAA,UAC7E,eAAe,WAAY,UAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAA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AAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,UAAU;AAAA,UAClD;AAAA,YAAI;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,UAAU;AAAA,UAClD;AAAA,YAAI;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,UAAU;AAAA,UAClD;AAAA,YAAI;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAA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","x_google_ignoreList":[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38]}
1
+ {"version":3,"file":"index.cjs","sources":["../src/components/ui.tsx","../src/components/OTPInput.tsx","../__vite-browser-external","../../../node_modules/crypto-js/core.js","../../../node_modules/crypto-js/x64-core.js","../../../node_modules/crypto-js/lib-typedarrays.js","../../../node_modules/crypto-js/enc-utf16.js","../../../node_modules/crypto-js/enc-base64.js","../../../node_modules/crypto-js/enc-base64url.js","../../../node_modules/crypto-js/md5.js","../../../node_modules/crypto-js/sha1.js","../../../node_modules/crypto-js/sha256.js","../../../node_modules/crypto-js/sha224.js","../../../node_modules/crypto-js/sha512.js","../../../node_modules/crypto-js/sha384.js","../../../node_modules/crypto-js/sha3.js","../../../node_modules/crypto-js/ripemd160.js","../../../node_modules/crypto-js/hmac.js","../../../node_modules/crypto-js/pbkdf2.js","../../../node_modules/crypto-js/evpkdf.js","../../../node_modules/crypto-js/cipher-core.js","../../../node_modules/crypto-js/mode-cfb.js","../../../node_modules/crypto-js/mode-ctr.js","../../../node_modules/crypto-js/mode-ctr-gladman.js","../../../node_modules/crypto-js/mode-ofb.js","../../../node_modules/crypto-js/mode-ecb.js","../../../node_modules/crypto-js/pad-ansix923.js","../../../node_modules/crypto-js/pad-iso10126.js","../../../node_modules/crypto-js/pad-iso97971.js","../../../node_modules/crypto-js/pad-zeropadding.js","../../../node_modules/crypto-js/pad-nopadding.js","../../../node_modules/crypto-js/format-hex.js","../../../node_modules/crypto-js/aes.js","../../../node_modules/crypto-js/tripledes.js","../../../node_modules/crypto-js/rc4.js","../../../node_modules/crypto-js/rabbit.js","../../../node_modules/crypto-js/rabbit-legacy.js","../../../node_modules/crypto-js/blowfish.js","../../../node_modules/crypto-js/index.js","../src/services/debugLogger.ts","../src/services/api.ts","../src/services/nativeAuth.ts","../src/services/mobilePassword.ts","../src/hooks/useMobilePassword.ts","../src/components/PasswordRecoveryModal.tsx","../src/hooks/useTokenHealthCheck.ts","../src/hooks/useNativeAuth.ts","../src/components/LoginModal.tsx","../src/utils/countries.ts","../src/components/PhoneInput.tsx","../src/components/AppsLogoSlider.tsx","../src/services/mobileRegistration.ts","../src/hooks/useMobileRegistration.ts","../src/components/SignupModal.tsx","../src/services/profileChange.ts","../src/components/AvatarCropModal.tsx","../src/services/profileMedia.ts","../src/services/profile.ts","../src/components/OnboardingModal.tsx","../src/components/DebugPanel.tsx","../src/logo/ollaid.png","../src/components/NativeSSOPage.tsx","../src/provider.tsx","../src/hooks/useLogout.ts","../src/services/iamAccount.ts"],"sourcesContent":["/**\n * Embedded UI primitives for @ollaid/native-sso\n * Lightweight replacements for shadcn/ui components + inline SVG icons\n * No external dependencies required\n * \n * @version 2.7.0\n */\n\nimport React, { forwardRef, createContext, useContext, useEffect } from 'react';\n\n// ============================================\n// SVG Icons (inline, no lucide dependency)\n// ============================================\n\nconst iconProps = { width: '100%', height: '100%', viewBox: '0 0 24 24', fill: 'none', stroke: 'currentColor', strokeWidth: 2, strokeLinecap: 'round' as const, strokeLinejoin: 'round' as const };\n\nexport function IconShieldCheck(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\" />\n <path d=\"m9 12 2 2 4-4\" />\n </svg>\n );\n}\n\nexport function IconMail(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <rect width=\"20\" height=\"16\" x=\"2\" y=\"4\" rx=\"2\" />\n <path d=\"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7\" />\n </svg>\n );\n}\n\nexport function IconPhone(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\" />\n </svg>\n );\n}\n\nexport function IconLock(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\" ry=\"2\" />\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n </svg>\n );\n}\n\nexport function IconKeyRound(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <path d=\"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z\" />\n <circle cx=\"16.5\" cy=\"7.5\" r=\".5\" fill=\"currentColor\" />\n </svg>\n );\n}\n\nexport function IconArrowLeft(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <path d=\"m12 19-7-7 7-7\" />\n <path d=\"M19 12H5\" />\n </svg>\n );\n}\n\nexport function IconEye(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <path d=\"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n );\n}\n\nexport function IconEyeOff(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <path d=\"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\" />\n <path d=\"M14.084 14.158a3 3 0 0 1-4.242-4.242\" />\n <path d=\"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\" />\n <path d=\"m2 2 20 20\" />\n </svg>\n );\n}\n\nexport function IconCheckCircle2(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"m9 12 2 2 4-4\" />\n </svg>\n );\n}\n\nexport function IconLoader2(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props} style={{ animation: 'spin 1s linear infinite', ...(props.style || {}) }}>\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n );\n}\n\nexport function IconAlertTriangle(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\" />\n <path d=\"M12 9v4\" />\n <path d=\"M12 17h.01\" />\n </svg>\n );\n}\n\nexport function IconSmartphone(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <rect width=\"14\" height=\"20\" x=\"5\" y=\"2\" rx=\"2\" ry=\"2\" />\n <path d=\"M12 18h.01\" />\n </svg>\n );\n}\n\nexport function IconHome(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <path d=\"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8\" />\n <path d=\"M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\" />\n </svg>\n );\n}\n\nexport function IconCalendar(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <path d=\"M8 2v4\" /><path d=\"M16 2v4\" />\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"4\" rx=\"2\" />\n <path d=\"M3 10h18\" />\n </svg>\n );\n}\n\nexport function IconBell(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <path d=\"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9\" />\n <path d=\"M10.3 21a1.94 1.94 0 0 0 3.4 0\" />\n </svg>\n );\n}\n\nexport function IconMessageCircle(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <path d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22z\" />\n </svg>\n );\n}\n\nexport function IconUsers(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\" />\n <circle cx=\"9\" cy=\"7\" r=\"4\" />\n <path d=\"M22 21v-2a4 4 0 0 0-3-3.87\" />\n <path d=\"M16 3.13a4 4 0 0 1 0 7.75\" />\n </svg>\n );\n}\n\nexport function IconSettings(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <path d=\"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n );\n}\n\nexport function IconGlobe(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...iconProps} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\" />\n <path d=\"M2 12h20\" />\n </svg>\n );\n}\n\n// ============================================\n// Dialog\n// ============================================\n\ninterface DialogContextValue {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}\n\nconst DialogContext = createContext<DialogContextValue>({ open: false, onOpenChange: () => {} });\n\nexport function Dialog({ open, onOpenChange, children }: { open: boolean; onOpenChange: (open: boolean) => void; children: React.ReactNode }) {\n useEffect(() => {\n if (open) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n return () => { document.body.style.overflow = ''; };\n }, [open]);\n\n if (!open) return null;\n\n return (\n <DialogContext.Provider value={{ open, onOpenChange }}>\n {children}\n </DialogContext.Provider>\n );\n}\n\nexport function DialogContent({ children, className = '', style, hideCloseButton = false }: { children: React.ReactNode; className?: string; style?: React.CSSProperties; hideCloseButton?: boolean }) {\n const { onOpenChange } = useContext(DialogContext);\n\n return (\n <div style={{ position: 'fixed', inset: 0, zIndex: 50, display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <div \n style={{ \n position: 'fixed', inset: 0, \n backgroundColor: 'rgba(0,0,0,0.5)', \n backdropFilter: 'blur(4px)',\n animation: 'ollaid-overlay-in 0.25s ease-out',\n }}\n />\n <div \n className={className}\n style={{ \n position: 'relative', zIndex: 51, width: '100%', maxWidth: '28rem', \n margin: '1rem', padding: '1rem', borderRadius: '0.75rem',\n backgroundColor: 'white', boxShadow: '0 25px 50px -12px rgba(0,0,0,0.25)',\n maxHeight: '90vh',\n display: 'flex', flexDirection: 'column',\n animation: 'ollaid-modal-in 0.3s ease-out',\n ...style,\n }}\n >\n {!hideCloseButton && (\n <button\n onClick={() => onOpenChange(false)}\n style={{ position: 'absolute', right: '0.75rem', top: '0.75rem', background: 'none', border: 'none', cursor: 'pointer', fontSize: '1.25rem', color: '#9ca3af', lineHeight: 1, zIndex: 2 }}\n aria-label=\"Close\"\n >\n ✕\n </button>\n )}\n {children}\n </div>\n </div>\n );\n}\n\nexport function DialogBody({ children, className = '', style }: { children: React.ReactNode; className?: string; style?: React.CSSProperties }) {\n return (\n <div className={className} style={{ flex: 1, overflowY: 'auto', paddingBottom: '0.5rem', minHeight: 0, ...style }}>\n {children}\n </div>\n );\n}\n\nexport function DialogFooter({ children, className = '', style }: { children: React.ReactNode; className?: string; style?: React.CSSProperties }) {\n return (\n <div className={className} style={{ flexShrink: 0, paddingTop: '0.75rem', borderTop: '1px solid #e5e7eb', display: 'flex', flexDirection: 'column', gap: '0.5rem', ...style }}>\n {children}\n </div>\n );\n}\n\nexport function DialogHeader({ children, className = '', style }: { children: React.ReactNode; className?: string; style?: React.CSSProperties }) {\n return <div className={className} style={{ marginBottom: '0.5rem', flexShrink: 0, ...style }}>{children}</div>;\n}\n\nexport function DialogTitle({ children, className = '' }: { children: React.ReactNode; className?: string }) {\n return <h2 className={className} style={{ fontSize: '1.25rem', fontWeight: 600, color: '#111827' }}>{children}</h2>;\n}\n\nexport function DialogDescription({ children, className = '' }: { children: React.ReactNode; className?: string }) {\n return <p className={className} style={{ fontSize: '0.875rem', color: '#6b7280', marginTop: '0.25rem' }}>{children}</p>;\n}\n\n// ============================================\n// Button\n// ============================================\n\ninterface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: 'default' | 'outline' | 'ghost';\n size?: 'default' | 'sm' | 'lg';\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(({ \n variant = 'default', size = 'default', className = '', style, disabled, children, ...props \n}, ref) => {\n const baseStyle: React.CSSProperties = {\n display: 'inline-flex', alignItems: 'center', justifyContent: 'center',\n borderRadius: '0.5rem', fontWeight: 500, cursor: disabled ? 'not-allowed' : 'pointer',\n transition: 'all 0.15s', border: 'none', opacity: disabled ? 0.5 : 1,\n fontSize: size === 'sm' ? '0.875rem' : '0.9375rem',\n padding: size === 'sm' ? '0.375rem 0.75rem' : size === 'lg' ? '0.75rem 1.5rem' : '0.625rem 1rem',\n height: size === 'sm' ? '2rem' : size === 'lg' ? '3rem' : '2.5rem',\n ...(variant === 'default' ? { backgroundColor: '#002147', color: 'white' } : {}),\n ...(variant === 'outline' ? { backgroundColor: 'transparent', border: '1px solid #d1d5db', color: '#374151' } : {}),\n ...(variant === 'ghost' ? { backgroundColor: 'transparent', color: '#374151' } : {}),\n ...style,\n };\n\n return (\n <button ref={ref} className={className} style={baseStyle} disabled={disabled} {...props}>\n {children}\n </button>\n );\n});\nButton.displayName = 'Button';\n\n// ============================================\n// Input\n// ============================================\n\nexport const Input = forwardRef<HTMLInputElement, React.InputHTMLAttributes<HTMLInputElement> & { className?: string }>(\n ({ className = '', style, ...props }, ref) => {\n return (\n <input\n ref={ref}\n className={className}\n style={{\n width: '100%', padding: '0.5rem 0.75rem', borderRadius: '0.375rem',\n border: '1px solid #d1d5db', fontSize: '0.9375rem', outline: 'none',\n transition: 'border-color 0.15s', backgroundColor: '#f9fafb', color: '#111827',\n ...style,\n }}\n {...props}\n />\n );\n }\n);\nInput.displayName = 'Input';\n\n// ============================================\n// Label\n// ============================================\n\nexport const Label = forwardRef<HTMLLabelElement, React.LabelHTMLAttributes<HTMLLabelElement>>(\n ({ className = '', style, ...props }, ref) => {\n return (\n <label\n ref={ref}\n className={className}\n style={{ fontSize: '0.875rem', fontWeight: 500, color: '#374151', ...style }}\n {...props}\n />\n );\n }\n);\nLabel.displayName = 'Label';\n\n// ============================================\n// RadioGroup (simplified)\n// ============================================\n\ninterface RadioGroupProps {\n value: string;\n onValueChange: (value: string) => void;\n children: React.ReactNode;\n className?: string;\n}\n\nconst RadioGroupContext = createContext<{ value: string; onValueChange: (v: string) => void }>({ value: '', onValueChange: () => {} });\n\nexport function RadioGroup({ value, onValueChange, children, className = '' }: RadioGroupProps) {\n return (\n <RadioGroupContext.Provider value={{ value, onValueChange }}>\n <div className={className}>{children}</div>\n </RadioGroupContext.Provider>\n );\n}\n\nexport function RadioGroupItem({ value, id }: { value: string; id: string }) {\n const { value: groupValue, onValueChange } = useContext(RadioGroupContext);\n return (\n <input\n type=\"radio\"\n id={id}\n checked={groupValue === value}\n onChange={() => onValueChange(value)}\n style={{ width: '1rem', height: '1rem', accentColor: '#002147' }}\n />\n );\n}\n\n// Global keyframes for spinner\nif (typeof document !== 'undefined') {\n const styleId = 'ollaid-sso-keyframes';\n if (!document.getElementById(styleId)) {\n const style = document.createElement('style');\n style.id = styleId;\n style.textContent = `@keyframes spin { to { transform: rotate(360deg); } } @keyframes ollaid-overlay-in { from { opacity: 0; } to { opacity: 1; } } @keyframes ollaid-modal-in { from { opacity: 0; transform: translateY(20px) scale(0.97); } to { opacity: 1; transform: translateY(0) scale(1); } }`;\n document.head.appendChild(style);\n }\n}\n","/**\n * OTP Input component for @ollaid/native-sso\n */\n\nimport { useRef, useState, useEffect, KeyboardEvent, ClipboardEvent } from 'react';\n\ninterface OTPInputProps {\n length?: 6 | 8;\n value: string;\n onChange: (value: string) => void;\n onComplete?: (value: string) => void;\n disabled?: boolean;\n autoFocus?: boolean;\n}\n\nexport function OTPInput({\n length = 6, value, onChange, onComplete, disabled = false, autoFocus = true,\n}: OTPInputProps) {\n const safeLength = Number.isFinite(length) ? Math.max(1, Math.min(12, Math.trunc(length))) : 6;\n const inputRefs = useRef<(HTMLInputElement | null)[]>([]);\n const [activeIndex, setActiveIndex] = useState(0);\n\n useEffect(() => { inputRefs.current = inputRefs.current.slice(0, safeLength); }, [safeLength]);\n\n useEffect(() => {\n if (autoFocus && inputRefs.current[0]) inputRefs.current[0].focus();\n }, [autoFocus]);\n\n useEffect(() => {\n if (value.length === safeLength && onComplete) onComplete(value);\n }, [value, safeLength, onComplete]);\n\n const handleChange = (index: number, char: string) => {\n if (disabled) return;\n const digit = char.replace(/[^0-9]/g, '');\n if (!digit) return;\n const newValue = value.split('');\n newValue[index] = digit;\n onChange(newValue.join('').slice(0, safeLength));\n if (index < safeLength - 1) {\n inputRefs.current[index + 1]?.focus();\n setActiveIndex(index + 1);\n }\n };\n\n const handleKeyDown = (index: number, e: KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n if (e.key === 'Backspace') {\n e.preventDefault();\n const newValue = value.split('');\n if (value[index]) {\n newValue[index] = '';\n onChange(newValue.join(''));\n } else if (index > 0) {\n newValue[index - 1] = '';\n onChange(newValue.join(''));\n inputRefs.current[index - 1]?.focus();\n setActiveIndex(index - 1);\n }\n } else if (e.key === 'ArrowLeft' && index > 0) {\n inputRefs.current[index - 1]?.focus();\n setActiveIndex(index - 1);\n } else if (e.key === 'ArrowRight' && index < safeLength - 1) {\n inputRefs.current[index + 1]?.focus();\n setActiveIndex(index + 1);\n }\n };\n\n const handlePaste = (e: ClipboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n e.preventDefault();\n const pasted = e.clipboardData.getData('text').replace(/[^0-9]/g, '');\n if (pasted) {\n const newValue = pasted.slice(0, safeLength);\n onChange(newValue);\n const focusIndex = Math.min(newValue.length, safeLength - 1);\n inputRefs.current[focusIndex]?.focus();\n setActiveIndex(focusIndex);\n }\n };\n\n return (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '0.5rem' }}>\n {Array.from({ length: safeLength }).map((_, index) => (\n <input\n key={index}\n ref={(el) => (inputRefs.current[index] = el)}\n type=\"text\"\n inputMode=\"numeric\"\n maxLength={1}\n value={value[index] || ''}\n onChange={(e) => handleChange(index, e.target.value)}\n onKeyDown={(e) => handleKeyDown(index, e)}\n onPaste={handlePaste}\n onFocus={() => setActiveIndex(index)}\n disabled={disabled}\n aria-label={`Digit ${index + 1}`}\n style={{\n width: '2.5rem', height: '3rem', textAlign: 'center', fontSize: '1.25rem',\n fontWeight: 600, borderRadius: '0.375rem', border: '2px solid',\n borderColor: activeIndex === index && !disabled ? 'hsl(var(--primary, 222 47% 11%))' : value[index] ? 'hsl(var(--primary, 222 47% 11%) / 0.5)' : '#d1d5db',\n backgroundColor: value[index] ? 'hsl(var(--primary, 222 47% 11%) / 0.05)' : 'white',\n outline: 'none', transition: 'all 0.2s',\n opacity: disabled ? 0.5 : 1, cursor: disabled ? 'not-allowed' : 'text',\n }}\n />\n ))}\n </div>\n );\n}\n\nexport default OTPInput;\n","export default {}",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/*globals window, global, require*/\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\n\t var crypto;\n\n\t // Native crypto from window (Browser)\n\t if (typeof window !== 'undefined' && window.crypto) {\n\t crypto = window.crypto;\n\t }\n\n\t // Native crypto in web worker (Browser)\n\t if (typeof self !== 'undefined' && self.crypto) {\n\t crypto = self.crypto;\n\t }\n\n\t // Native crypto from worker\n\t if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n\t crypto = globalThis.crypto;\n\t }\n\n\t // Native (experimental IE 11) crypto from window (Browser)\n\t if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n\t crypto = window.msCrypto;\n\t }\n\n\t // Native crypto from global (NodeJS)\n\t if (!crypto && typeof global !== 'undefined' && global.crypto) {\n\t crypto = global.crypto;\n\t }\n\n\t // Native crypto import via require (NodeJS)\n\t if (!crypto && typeof require === 'function') {\n\t try {\n\t crypto = require('crypto');\n\t } catch (err) {}\n\t }\n\n\t /*\n\t * Cryptographically secure pseudorandom number generator\n\t *\n\t * As Math.random() is cryptographically not safe to use\n\t */\n\t var cryptoSecureRandomInt = function () {\n\t if (crypto) {\n\t // Use getRandomValues method (Browser)\n\t if (typeof crypto.getRandomValues === 'function') {\n\t try {\n\t return crypto.getRandomValues(new Uint32Array(1))[0];\n\t } catch (err) {}\n\t }\n\n\t // Use randomBytes method (NodeJS)\n\t if (typeof crypto.randomBytes === 'function') {\n\t try {\n\t return crypto.randomBytes(4).readInt32LE();\n\t } catch (err) {}\n\t }\n\t }\n\n\t throw new Error('Native crypto module could not be used to get secure random number.');\n\t };\n\n\t /*\n\t * Local polyfill of Object.create\n\n\t */\n\t var create = Object.create || (function () {\n\t function F() {}\n\n\t return function (obj) {\n\t var subtype;\n\n\t F.prototype = obj;\n\n\t subtype = new F();\n\n\t F.prototype = null;\n\n\t return subtype;\n\t };\n\t }());\n\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t var subtype = create(this);\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var j = 0; j < thatSigBytes; j += 4) {\n\t thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t for (var i = 0; i < nBytes; i += 4) {\n\t words.push(cryptoSecureRandomInt());\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t var processedWords;\n\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var X32WordArray = C_lib.WordArray;\n\n\t /**\n\t * x64 namespace.\n\t */\n\t var C_x64 = C.x64 = {};\n\n\t /**\n\t * A 64-bit word.\n\t */\n\t var X64Word = C_x64.Word = Base.extend({\n\t /**\n\t * Initializes a newly created 64-bit word.\n\t *\n\t * @param {number} high The high 32 bits.\n\t * @param {number} low The low 32 bits.\n\t *\n\t * @example\n\t *\n\t * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);\n\t */\n\t init: function (high, low) {\n\t this.high = high;\n\t this.low = low;\n\t }\n\n\t /**\n\t * Bitwise NOTs this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after negating.\n\t *\n\t * @example\n\t *\n\t * var negated = x64Word.not();\n\t */\n\t // not: function () {\n\t // var high = ~this.high;\n\t // var low = ~this.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise ANDs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to AND with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after ANDing.\n\t *\n\t * @example\n\t *\n\t * var anded = x64Word.and(anotherX64Word);\n\t */\n\t // and: function (word) {\n\t // var high = this.high & word.high;\n\t // var low = this.low & word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise ORs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to OR with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after ORing.\n\t *\n\t * @example\n\t *\n\t * var ored = x64Word.or(anotherX64Word);\n\t */\n\t // or: function (word) {\n\t // var high = this.high | word.high;\n\t // var low = this.low | word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise XORs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to XOR with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after XORing.\n\t *\n\t * @example\n\t *\n\t * var xored = x64Word.xor(anotherX64Word);\n\t */\n\t // xor: function (word) {\n\t // var high = this.high ^ word.high;\n\t // var low = this.low ^ word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Shifts this word n bits to the left.\n\t *\n\t * @param {number} n The number of bits to shift.\n\t *\n\t * @return {X64Word} A new x64-Word object after shifting.\n\t *\n\t * @example\n\t *\n\t * var shifted = x64Word.shiftL(25);\n\t */\n\t // shiftL: function (n) {\n\t // if (n < 32) {\n\t // var high = (this.high << n) | (this.low >>> (32 - n));\n\t // var low = this.low << n;\n\t // } else {\n\t // var high = this.low << (n - 32);\n\t // var low = 0;\n\t // }\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Shifts this word n bits to the right.\n\t *\n\t * @param {number} n The number of bits to shift.\n\t *\n\t * @return {X64Word} A new x64-Word object after shifting.\n\t *\n\t * @example\n\t *\n\t * var shifted = x64Word.shiftR(7);\n\t */\n\t // shiftR: function (n) {\n\t // if (n < 32) {\n\t // var low = (this.low >>> n) | (this.high << (32 - n));\n\t // var high = this.high >>> n;\n\t // } else {\n\t // var low = this.high >>> (n - 32);\n\t // var high = 0;\n\t // }\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Rotates this word n bits to the left.\n\t *\n\t * @param {number} n The number of bits to rotate.\n\t *\n\t * @return {X64Word} A new x64-Word object after rotating.\n\t *\n\t * @example\n\t *\n\t * var rotated = x64Word.rotL(25);\n\t */\n\t // rotL: function (n) {\n\t // return this.shiftL(n).or(this.shiftR(64 - n));\n\t // },\n\n\t /**\n\t * Rotates this word n bits to the right.\n\t *\n\t * @param {number} n The number of bits to rotate.\n\t *\n\t * @return {X64Word} A new x64-Word object after rotating.\n\t *\n\t * @example\n\t *\n\t * var rotated = x64Word.rotR(7);\n\t */\n\t // rotR: function (n) {\n\t // return this.shiftR(n).or(this.shiftL(64 - n));\n\t // },\n\n\t /**\n\t * Adds this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to add with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after adding.\n\t *\n\t * @example\n\t *\n\t * var added = x64Word.add(anotherX64Word);\n\t */\n\t // add: function (word) {\n\t // var low = (this.low + word.low) | 0;\n\t // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0;\n\t // var high = (this.high + word.high + carry) | 0;\n\n\t // return X64Word.create(high, low);\n\t // }\n\t });\n\n\t /**\n\t * An array of 64-bit words.\n\t *\n\t * @property {Array} words The array of CryptoJS.x64.Word objects.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var X64WordArray = C_x64.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create();\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create([\n\t * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n\t * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n\t * ]);\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create([\n\t * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n\t * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n\t * ], 10);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 8;\n\t }\n\t },\n\n\t /**\n\t * Converts this 64-bit word array to a 32-bit word array.\n\t *\n\t * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array.\n\t *\n\t * @example\n\t *\n\t * var x32WordArray = x64WordArray.toX32();\n\t */\n\t toX32: function () {\n\t // Shortcuts\n\t var x64Words = this.words;\n\t var x64WordsLength = x64Words.length;\n\n\t // Convert\n\t var x32Words = [];\n\t for (var i = 0; i < x64WordsLength; i++) {\n\t var x64Word = x64Words[i];\n\t x32Words.push(x64Word.high);\n\t x32Words.push(x64Word.low);\n\t }\n\n\t return X32WordArray.create(x32Words, this.sigBytes);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {X64WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = x64WordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\n\t // Clone \"words\" array\n\t var words = clone.words = this.words.slice(0);\n\n\t // Clone each X64Word object\n\t var wordsLength = words.length;\n\t for (var i = 0; i < wordsLength; i++) {\n\t words[i] = words[i].clone();\n\t }\n\n\t return clone;\n\t }\n\t });\n\t}());\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Check if typed arrays are supported\n\t if (typeof ArrayBuffer != 'function') {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\n\t // Reference original init\n\t var superInit = WordArray.init;\n\n\t // Augment WordArray.init to handle typed arrays\n\t var subInit = WordArray.init = function (typedArray) {\n\t // Convert buffers to uint8\n\t if (typedArray instanceof ArrayBuffer) {\n\t typedArray = new Uint8Array(typedArray);\n\t }\n\n\t // Convert other array views to uint8\n\t if (\n\t typedArray instanceof Int8Array ||\n\t (typeof Uint8ClampedArray !== \"undefined\" && typedArray instanceof Uint8ClampedArray) ||\n\t typedArray instanceof Int16Array ||\n\t typedArray instanceof Uint16Array ||\n\t typedArray instanceof Int32Array ||\n\t typedArray instanceof Uint32Array ||\n\t typedArray instanceof Float32Array ||\n\t typedArray instanceof Float64Array\n\t ) {\n\t typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\n\t }\n\n\t // Handle Uint8Array\n\t if (typedArray instanceof Uint8Array) {\n\t // Shortcut\n\t var typedArrayByteLength = typedArray.byteLength;\n\n\t // Extract bytes\n\t var words = [];\n\t for (var i = 0; i < typedArrayByteLength; i++) {\n\t words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8);\n\t }\n\n\t // Initialize this word array\n\t superInit.call(this, words, typedArrayByteLength);\n\t } else {\n\t // Else call normal init\n\t superInit.apply(this, arguments);\n\t }\n\t };\n\n\t subInit.prototype = WordArray;\n\t}());\n\n\n\treturn CryptoJS.lib.WordArray;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * UTF-16 BE encoding strategy.\n\t */\n\t var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {\n\t /**\n\t * Converts a word array to a UTF-16 BE string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-16 BE string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var utf16Chars = [];\n\t for (var i = 0; i < sigBytes; i += 2) {\n\t var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff;\n\t utf16Chars.push(String.fromCharCode(codePoint));\n\t }\n\n\t return utf16Chars.join('');\n\t },\n\n\t /**\n\t * Converts a UTF-16 BE string to a word array.\n\t *\n\t * @param {string} utf16Str The UTF-16 BE string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf16.parse(utf16String);\n\t */\n\t parse: function (utf16Str) {\n\t // Shortcut\n\t var utf16StrLength = utf16Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < utf16StrLength; i++) {\n\t words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16);\n\t }\n\n\t return WordArray.create(words, utf16StrLength * 2);\n\t }\n\t };\n\n\t /**\n\t * UTF-16 LE encoding strategy.\n\t */\n\t C_enc.Utf16LE = {\n\t /**\n\t * Converts a word array to a UTF-16 LE string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-16 LE string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var utf16Chars = [];\n\t for (var i = 0; i < sigBytes; i += 2) {\n\t var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff);\n\t utf16Chars.push(String.fromCharCode(codePoint));\n\t }\n\n\t return utf16Chars.join('');\n\t },\n\n\t /**\n\t * Converts a UTF-16 LE string to a word array.\n\t *\n\t * @param {string} utf16Str The UTF-16 LE string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);\n\t */\n\t parse: function (utf16Str) {\n\t // Shortcut\n\t var utf16StrLength = utf16Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < utf16StrLength; i++) {\n\t words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16));\n\t }\n\n\t return WordArray.create(words, utf16StrLength * 2);\n\t }\n\t };\n\n\t function swapEndian(word) {\n\t return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Utf16;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64 encoding strategy.\n\t */\n\t var Base64 = C_enc.Base64 = {\n\t /**\n\t * Converts a word array to a Base64 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Base64 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64 string to a word array.\n\t *\n\t * @param {string} base64Str The Base64 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n\t */\n\t parse: function (base64Str) {\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = this._map;\n\t var reverseMap = this._reverseMap;\n\n\t if (!reverseMap) {\n\t reverseMap = this._reverseMap = [];\n\t for (var j = 0; j < map.length; j++) {\n\t reverseMap[map.charCodeAt(j)] = j;\n\t }\n\t }\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex !== -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n\t };\n\n\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t var bitsCombined = bits1 | bits2;\n\t words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\t return WordArray.create(words, nBytes);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64url encoding strategy.\n\t */\n\t var Base64url = C_enc.Base64url = {\n\t /**\n\t * Converts a word array to a Base64url string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @param {boolean} urlSafe Whether to use url safe\n\t *\n\t * @return {string} The Base64url string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64url.stringify(wordArray);\n\t */\n\t stringify: function (wordArray, urlSafe) {\n\t if (urlSafe === undefined) {\n\t urlSafe = true\n\t }\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = urlSafe ? this._safe_map : this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64url string to a word array.\n\t *\n\t * @param {string} base64Str The Base64url string.\n\t *\n\t * @param {boolean} urlSafe Whether to use url safe\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64url.parse(base64String);\n\t */\n\t parse: function (base64Str, urlSafe) {\n\t if (urlSafe === undefined) {\n\t urlSafe = true\n\t }\n\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = urlSafe ? this._safe_map : this._map;\n\t var reverseMap = this._reverseMap;\n\n\t if (!reverseMap) {\n\t reverseMap = this._reverseMap = [];\n\t for (var j = 0; j < map.length; j++) {\n\t reverseMap[map.charCodeAt(j)] = j;\n\t }\n\t }\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex !== -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n\t _safe_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n\t };\n\n\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t var bitsCombined = bits1 | bits2;\n\t words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\t return WordArray.create(words, nBytes);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64url;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var T = [];\n\n\t // Compute constants\n\t (function () {\n\t for (var i = 0; i < 64; i++) {\n\t T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;\n\t }\n\t }());\n\n\t /**\n\t * MD5 hash algorithm.\n\t */\n\t var MD5 = C_algo.MD5 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var M_offset_0 = M[offset + 0];\n\t var M_offset_1 = M[offset + 1];\n\t var M_offset_2 = M[offset + 2];\n\t var M_offset_3 = M[offset + 3];\n\t var M_offset_4 = M[offset + 4];\n\t var M_offset_5 = M[offset + 5];\n\t var M_offset_6 = M[offset + 6];\n\t var M_offset_7 = M[offset + 7];\n\t var M_offset_8 = M[offset + 8];\n\t var M_offset_9 = M[offset + 9];\n\t var M_offset_10 = M[offset + 10];\n\t var M_offset_11 = M[offset + 11];\n\t var M_offset_12 = M[offset + 12];\n\t var M_offset_13 = M[offset + 13];\n\t var M_offset_14 = M[offset + 14];\n\t var M_offset_15 = M[offset + 15];\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\n\t // Computation\n\t a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n\t d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n\t c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n\t b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n\t a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n\t d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n\t c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n\t b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n\t a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n\t d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n\t c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n\t b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n\t a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n\t d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n\t c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n\t b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n\n\t a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n\t d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n\t c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n\t b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n\t a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n\t d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n\t c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n\t b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n\t a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n\t d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n\t c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n\t b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n\t a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n\t d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n\t c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n\t b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n\n\t a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n\t d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n\t c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n\t b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n\t a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n\t d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n\t c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n\t b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n\t a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n\t d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n\t c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n\t b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n\t a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n\t d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n\t c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n\t b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n\n\t a = II(a, b, c, d, M_offset_0, 6, T[48]);\n\t d = II(d, a, b, c, M_offset_7, 10, T[49]);\n\t c = II(c, d, a, b, M_offset_14, 15, T[50]);\n\t b = II(b, c, d, a, M_offset_5, 21, T[51]);\n\t a = II(a, b, c, d, M_offset_12, 6, T[52]);\n\t d = II(d, a, b, c, M_offset_3, 10, T[53]);\n\t c = II(c, d, a, b, M_offset_10, 15, T[54]);\n\t b = II(b, c, d, a, M_offset_1, 21, T[55]);\n\t a = II(a, b, c, d, M_offset_8, 6, T[56]);\n\t d = II(d, a, b, c, M_offset_15, 10, T[57]);\n\t c = II(c, d, a, b, M_offset_6, 15, T[58]);\n\t b = II(b, c, d, a, M_offset_13, 21, T[59]);\n\t a = II(a, b, c, d, M_offset_4, 6, T[60]);\n\t d = II(d, a, b, c, M_offset_11, 10, T[61]);\n\t c = II(c, d, a, b, M_offset_2, 15, T[62]);\n\t b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\n\t var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n\t var nBitsTotalL = nBitsTotal;\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (\n\t (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)\n\t );\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)\n\t );\n\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t function FF(a, b, c, d, x, s, t) {\n\t var n = a + ((b & c) | (~b & d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function GG(a, b, c, d, x, s, t) {\n\t var n = a + ((b & d) | (c & ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function HH(a, b, c, d, x, s, t) {\n\t var n = a + (b ^ c ^ d) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function II(a, b, c, d, x, s, t) {\n\t var n = a + (c ^ (b | ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.MD5('message');\n\t * var hash = CryptoJS.MD5(wordArray);\n\t */\n\t C.MD5 = Hasher._createHelper(MD5);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacMD5(message, key);\n\t */\n\t C.HmacMD5 = Hasher._createHmacHelper(MD5);\n\t}(Math));\n\n\n\treturn CryptoJS.MD5;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-1 hash algorithm.\n\t */\n\t var SHA1 = C_algo.SHA1 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476,\n\t 0xc3d2e1f0\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\n\t // Computation\n\t for (var i = 0; i < 80; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n\t W[i] = (n << 1) | (n >>> 31);\n\t }\n\n\t var t = ((a << 5) | (a >>> 27)) + e + W[i];\n\t if (i < 20) {\n\t t += ((b & c) | (~b & d)) + 0x5a827999;\n\t } else if (i < 40) {\n\t t += (b ^ c ^ d) + 0x6ed9eba1;\n\t } else if (i < 60) {\n\t t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;\n\t } else /* if (i < 80) */ {\n\t t += (b ^ c ^ d) - 0x359d3e2a;\n\t }\n\n\t e = d;\n\t d = c;\n\t c = (b << 30) | (b >>> 2);\n\t b = a;\n\t a = t;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA1('message');\n\t * var hash = CryptoJS.SHA1(wordArray);\n\t */\n\t C.SHA1 = Hasher._createHelper(SHA1);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA1(message, key);\n\t */\n\t C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n\t}());\n\n\n\treturn CryptoJS.SHA1;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Initialization and round constants tables\n\t var H = [];\n\t var K = [];\n\n\t // Compute constants\n\t (function () {\n\t function isPrime(n) {\n\t var sqrtN = Math.sqrt(n);\n\t for (var factor = 2; factor <= sqrtN; factor++) {\n\t if (!(n % factor)) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t function getFractionalBits(n) {\n\t return ((n - (n | 0)) * 0x100000000) | 0;\n\t }\n\n\t var n = 2;\n\t var nPrime = 0;\n\t while (nPrime < 64) {\n\t if (isPrime(n)) {\n\t if (nPrime < 8) {\n\t H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t }\n\t K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t nPrime++;\n\t }\n\n\t n++;\n\t }\n\t }());\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-256 hash algorithm.\n\t */\n\t var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init(H.slice(0));\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\t var f = H[5];\n\t var g = H[6];\n\t var h = H[7];\n\n\t // Computation\n\t for (var i = 0; i < 64; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var gamma0x = W[i - 15];\n\t var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^\n\t ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t (gamma0x >>> 3);\n\n\t var gamma1x = W[i - 2];\n\t var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t (gamma1x >>> 10);\n\n\t W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t }\n\n\t var ch = (e & f) ^ (~e & g);\n\t var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n\t var t1 = h + sigma1 + ch + K[i] + W[i];\n\t var t2 = sigma0 + maj;\n\n\t h = g;\n\t g = f;\n\t f = e;\n\t e = (d + t1) | 0;\n\t d = c;\n\t c = b;\n\t b = a;\n\t a = (t1 + t2) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t H[5] = (H[5] + f) | 0;\n\t H[6] = (H[6] + g) | 0;\n\t H[7] = (H[7] + h) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA256('message');\n\t * var hash = CryptoJS.SHA256(wordArray);\n\t */\n\t C.SHA256 = Hasher._createHelper(SHA256);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA256(message, key);\n\t */\n\t C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha256\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha256\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var SHA256 = C_algo.SHA256;\n\n\t /**\n\t * SHA-224 hash algorithm.\n\t */\n\t var SHA224 = C_algo.SHA224 = SHA256.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n\t 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4\n\t ]);\n\t },\n\n\t _doFinalize: function () {\n\t var hash = SHA256._doFinalize.call(this);\n\n\t hash.sigBytes -= 4;\n\n\t return hash;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA224('message');\n\t * var hash = CryptoJS.SHA224(wordArray);\n\t */\n\t C.SHA224 = SHA256._createHelper(SHA224);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA224(message, key);\n\t */\n\t C.HmacSHA224 = SHA256._createHmacHelper(SHA224);\n\t}());\n\n\n\treturn CryptoJS.SHA224;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Hasher = C_lib.Hasher;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var X64WordArray = C_x64.WordArray;\n\t var C_algo = C.algo;\n\n\t function X64Word_create() {\n\t return X64Word.create.apply(X64Word, arguments);\n\t }\n\n\t // Constants\n\t var K = [\n\t X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd),\n\t X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc),\n\t X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019),\n\t X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118),\n\t X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe),\n\t X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2),\n\t X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1),\n\t X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694),\n\t X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3),\n\t X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65),\n\t X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483),\n\t X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5),\n\t X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210),\n\t X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4),\n\t X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725),\n\t X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70),\n\t X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926),\n\t X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df),\n\t X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8),\n\t X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b),\n\t X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001),\n\t X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30),\n\t X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910),\n\t X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8),\n\t X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53),\n\t X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8),\n\t X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb),\n\t X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3),\n\t X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60),\n\t X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec),\n\t X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9),\n\t X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b),\n\t X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207),\n\t X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178),\n\t X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6),\n\t X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b),\n\t X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493),\n\t X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c),\n\t X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a),\n\t X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817)\n\t ];\n\n\t // Reusable objects\n\t var W = [];\n\t (function () {\n\t for (var i = 0; i < 80; i++) {\n\t W[i] = X64Word_create();\n\t }\n\t }());\n\n\t /**\n\t * SHA-512 hash algorithm.\n\t */\n\t var SHA512 = C_algo.SHA512 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new X64WordArray.init([\n\t new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b),\n\t new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1),\n\t new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f),\n\t new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179)\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var H0 = H[0];\n\t var H1 = H[1];\n\t var H2 = H[2];\n\t var H3 = H[3];\n\t var H4 = H[4];\n\t var H5 = H[5];\n\t var H6 = H[6];\n\t var H7 = H[7];\n\n\t var H0h = H0.high;\n\t var H0l = H0.low;\n\t var H1h = H1.high;\n\t var H1l = H1.low;\n\t var H2h = H2.high;\n\t var H2l = H2.low;\n\t var H3h = H3.high;\n\t var H3l = H3.low;\n\t var H4h = H4.high;\n\t var H4l = H4.low;\n\t var H5h = H5.high;\n\t var H5l = H5.low;\n\t var H6h = H6.high;\n\t var H6l = H6.low;\n\t var H7h = H7.high;\n\t var H7l = H7.low;\n\n\t // Working variables\n\t var ah = H0h;\n\t var al = H0l;\n\t var bh = H1h;\n\t var bl = H1l;\n\t var ch = H2h;\n\t var cl = H2l;\n\t var dh = H3h;\n\t var dl = H3l;\n\t var eh = H4h;\n\t var el = H4l;\n\t var fh = H5h;\n\t var fl = H5l;\n\t var gh = H6h;\n\t var gl = H6l;\n\t var hh = H7h;\n\t var hl = H7l;\n\n\t // Rounds\n\t for (var i = 0; i < 80; i++) {\n\t var Wil;\n\t var Wih;\n\n\t // Shortcut\n\t var Wi = W[i];\n\n\t // Extend message\n\t if (i < 16) {\n\t Wih = Wi.high = M[offset + i * 2] | 0;\n\t Wil = Wi.low = M[offset + i * 2 + 1] | 0;\n\t } else {\n\t // Gamma0\n\t var gamma0x = W[i - 15];\n\t var gamma0xh = gamma0x.high;\n\t var gamma0xl = gamma0x.low;\n\t var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7);\n\t var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25));\n\n\t // Gamma1\n\t var gamma1x = W[i - 2];\n\t var gamma1xh = gamma1x.high;\n\t var gamma1xl = gamma1x.low;\n\t var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6);\n\t var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26));\n\n\t // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n\t var Wi7 = W[i - 7];\n\t var Wi7h = Wi7.high;\n\t var Wi7l = Wi7.low;\n\n\t var Wi16 = W[i - 16];\n\t var Wi16h = Wi16.high;\n\t var Wi16l = Wi16.low;\n\n\t Wil = gamma0l + Wi7l;\n\t Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0);\n\t Wil = Wil + gamma1l;\n\t Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0);\n\t Wil = Wil + Wi16l;\n\t Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0);\n\n\t Wi.high = Wih;\n\t Wi.low = Wil;\n\t }\n\n\t var chh = (eh & fh) ^ (~eh & gh);\n\t var chl = (el & fl) ^ (~el & gl);\n\t var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);\n\t var majl = (al & bl) ^ (al & cl) ^ (bl & cl);\n\n\t var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));\n\t var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));\n\t var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9));\n\t var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9));\n\n\t // t1 = h + sigma1 + ch + K[i] + W[i]\n\t var Ki = K[i];\n\t var Kih = Ki.high;\n\t var Kil = Ki.low;\n\n\t var t1l = hl + sigma1l;\n\t var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);\n\t var t1l = t1l + chl;\n\t var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);\n\t var t1l = t1l + Kil;\n\t var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0);\n\t var t1l = t1l + Wil;\n\t var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0);\n\n\t // t2 = sigma0 + maj\n\t var t2l = sigma0l + majl;\n\t var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);\n\n\t // Update working variables\n\t hh = gh;\n\t hl = gl;\n\t gh = fh;\n\t gl = fl;\n\t fh = eh;\n\t fl = el;\n\t el = (dl + t1l) | 0;\n\t eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;\n\t dh = ch;\n\t dl = cl;\n\t ch = bh;\n\t cl = bl;\n\t bh = ah;\n\t bl = al;\n\t al = (t1l + t2l) | 0;\n\t ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H0l = H0.low = (H0l + al);\n\t H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0));\n\t H1l = H1.low = (H1l + bl);\n\t H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0));\n\t H2l = H2.low = (H2l + cl);\n\t H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0));\n\t H3l = H3.low = (H3l + dl);\n\t H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0));\n\t H4l = H4.low = (H4l + el);\n\t H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0));\n\t H5l = H5.low = (H5l + fl);\n\t H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0));\n\t H6l = H6.low = (H6l + gl);\n\t H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0));\n\t H7l = H7.low = (H7l + hl);\n\t H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0));\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Convert hash to 32-bit word array before returning\n\t var hash = this._hash.toX32();\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t },\n\n\t blockSize: 1024/32\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA512('message');\n\t * var hash = CryptoJS.SHA512(wordArray);\n\t */\n\t C.SHA512 = Hasher._createHelper(SHA512);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA512(message, key);\n\t */\n\t C.HmacSHA512 = Hasher._createHmacHelper(SHA512);\n\t}());\n\n\n\treturn CryptoJS.SHA512;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"), require(\"./sha512\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\", \"./sha512\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var X64WordArray = C_x64.WordArray;\n\t var C_algo = C.algo;\n\t var SHA512 = C_algo.SHA512;\n\n\t /**\n\t * SHA-384 hash algorithm.\n\t */\n\t var SHA384 = C_algo.SHA384 = SHA512.extend({\n\t _doReset: function () {\n\t this._hash = new X64WordArray.init([\n\t new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507),\n\t new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939),\n\t new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511),\n\t new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4)\n\t ]);\n\t },\n\n\t _doFinalize: function () {\n\t var hash = SHA512._doFinalize.call(this);\n\n\t hash.sigBytes -= 16;\n\n\t return hash;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA384('message');\n\t * var hash = CryptoJS.SHA384(wordArray);\n\t */\n\t C.SHA384 = SHA512._createHelper(SHA384);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA384(message, key);\n\t */\n\t C.HmacSHA384 = SHA512._createHmacHelper(SHA384);\n\t}());\n\n\n\treturn CryptoJS.SHA384;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var C_algo = C.algo;\n\n\t // Constants tables\n\t var RHO_OFFSETS = [];\n\t var PI_INDEXES = [];\n\t var ROUND_CONSTANTS = [];\n\n\t // Compute Constants\n\t (function () {\n\t // Compute rho offset constants\n\t var x = 1, y = 0;\n\t for (var t = 0; t < 24; t++) {\n\t RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64;\n\n\t var newX = y % 5;\n\t var newY = (2 * x + 3 * y) % 5;\n\t x = newX;\n\t y = newY;\n\t }\n\n\t // Compute pi index constants\n\t for (var x = 0; x < 5; x++) {\n\t for (var y = 0; y < 5; y++) {\n\t PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5;\n\t }\n\t }\n\n\t // Compute round constants\n\t var LFSR = 0x01;\n\t for (var i = 0; i < 24; i++) {\n\t var roundConstantMsw = 0;\n\t var roundConstantLsw = 0;\n\n\t for (var j = 0; j < 7; j++) {\n\t if (LFSR & 0x01) {\n\t var bitPosition = (1 << j) - 1;\n\t if (bitPosition < 32) {\n\t roundConstantLsw ^= 1 << bitPosition;\n\t } else /* if (bitPosition >= 32) */ {\n\t roundConstantMsw ^= 1 << (bitPosition - 32);\n\t }\n\t }\n\n\t // Compute next LFSR\n\t if (LFSR & 0x80) {\n\t // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1\n\t LFSR = (LFSR << 1) ^ 0x71;\n\t } else {\n\t LFSR <<= 1;\n\t }\n\t }\n\n\t ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);\n\t }\n\t }());\n\n\t // Reusable objects for temporary values\n\t var T = [];\n\t (function () {\n\t for (var i = 0; i < 25; i++) {\n\t T[i] = X64Word.create();\n\t }\n\t }());\n\n\t /**\n\t * SHA-3 hash algorithm.\n\t */\n\t var SHA3 = C_algo.SHA3 = Hasher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} outputLength\n\t * The desired number of bits in the output hash.\n\t * Only values permitted are: 224, 256, 384, 512.\n\t * Default: 512\n\t */\n\t cfg: Hasher.cfg.extend({\n\t outputLength: 512\n\t }),\n\n\t _doReset: function () {\n\t var state = this._state = []\n\t for (var i = 0; i < 25; i++) {\n\t state[i] = new X64Word.init();\n\t }\n\n\t this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcuts\n\t var state = this._state;\n\t var nBlockSizeLanes = this.blockSize / 2;\n\n\t // Absorb\n\t for (var i = 0; i < nBlockSizeLanes; i++) {\n\t // Shortcuts\n\t var M2i = M[offset + 2 * i];\n\t var M2i1 = M[offset + 2 * i + 1];\n\n\t // Swap endian\n\t M2i = (\n\t (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) |\n\t (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00)\n\t );\n\t M2i1 = (\n\t (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) |\n\t (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00)\n\t );\n\n\t // Absorb message into state\n\t var lane = state[i];\n\t lane.high ^= M2i1;\n\t lane.low ^= M2i;\n\t }\n\n\t // Rounds\n\t for (var round = 0; round < 24; round++) {\n\t // Theta\n\t for (var x = 0; x < 5; x++) {\n\t // Mix column lanes\n\t var tMsw = 0, tLsw = 0;\n\t for (var y = 0; y < 5; y++) {\n\t var lane = state[x + 5 * y];\n\t tMsw ^= lane.high;\n\t tLsw ^= lane.low;\n\t }\n\n\t // Temporary values\n\t var Tx = T[x];\n\t Tx.high = tMsw;\n\t Tx.low = tLsw;\n\t }\n\t for (var x = 0; x < 5; x++) {\n\t // Shortcuts\n\t var Tx4 = T[(x + 4) % 5];\n\t var Tx1 = T[(x + 1) % 5];\n\t var Tx1Msw = Tx1.high;\n\t var Tx1Lsw = Tx1.low;\n\n\t // Mix surrounding columns\n\t var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31));\n\t var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31));\n\t for (var y = 0; y < 5; y++) {\n\t var lane = state[x + 5 * y];\n\t lane.high ^= tMsw;\n\t lane.low ^= tLsw;\n\t }\n\t }\n\n\t // Rho Pi\n\t for (var laneIndex = 1; laneIndex < 25; laneIndex++) {\n\t var tMsw;\n\t var tLsw;\n\n\t // Shortcuts\n\t var lane = state[laneIndex];\n\t var laneMsw = lane.high;\n\t var laneLsw = lane.low;\n\t var rhoOffset = RHO_OFFSETS[laneIndex];\n\n\t // Rotate lanes\n\t if (rhoOffset < 32) {\n\t tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset));\n\t tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset));\n\t } else /* if (rhoOffset >= 32) */ {\n\t tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset));\n\t tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset));\n\t }\n\n\t // Transpose lanes\n\t var TPiLane = T[PI_INDEXES[laneIndex]];\n\t TPiLane.high = tMsw;\n\t TPiLane.low = tLsw;\n\t }\n\n\t // Rho pi at x = y = 0\n\t var T0 = T[0];\n\t var state0 = state[0];\n\t T0.high = state0.high;\n\t T0.low = state0.low;\n\n\t // Chi\n\t for (var x = 0; x < 5; x++) {\n\t for (var y = 0; y < 5; y++) {\n\t // Shortcuts\n\t var laneIndex = x + 5 * y;\n\t var lane = state[laneIndex];\n\t var TLane = T[laneIndex];\n\t var Tx1Lane = T[((x + 1) % 5) + 5 * y];\n\t var Tx2Lane = T[((x + 2) % 5) + 5 * y];\n\n\t // Mix rows\n\t lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high);\n\t lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low);\n\t }\n\t }\n\n\t // Iota\n\t var lane = state[0];\n\t var roundConstant = ROUND_CONSTANTS[round];\n\t lane.high ^= roundConstant.high;\n\t lane.low ^= roundConstant.low;\n\t }\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\t var blockSizeBits = this.blockSize * 32;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32);\n\t dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var state = this._state;\n\t var outputLengthBytes = this.cfg.outputLength / 8;\n\t var outputLengthLanes = outputLengthBytes / 8;\n\n\t // Squeeze\n\t var hashWords = [];\n\t for (var i = 0; i < outputLengthLanes; i++) {\n\t // Shortcuts\n\t var lane = state[i];\n\t var laneMsw = lane.high;\n\t var laneLsw = lane.low;\n\n\t // Swap endian\n\t laneMsw = (\n\t (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) |\n\t (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00)\n\t );\n\t laneLsw = (\n\t (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) |\n\t (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00)\n\t );\n\n\t // Squeeze state to retrieve hash\n\t hashWords.push(laneLsw);\n\t hashWords.push(laneMsw);\n\t }\n\n\t // Return final computed hash\n\t return new WordArray.init(hashWords, outputLengthBytes);\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\n\t var state = clone._state = this._state.slice(0);\n\t for (var i = 0; i < 25; i++) {\n\t state[i] = state[i].clone();\n\t }\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA3('message');\n\t * var hash = CryptoJS.SHA3(wordArray);\n\t */\n\t C.SHA3 = Hasher._createHelper(SHA3);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA3(message, key);\n\t */\n\t C.HmacSHA3 = Hasher._createHmacHelper(SHA3);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA3;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/** @preserve\n\t(c) 2012 by Cédric Mesnil. All rights reserved.\n\n\tRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n\t - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n\t - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t*/\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var _zl = WordArray.create([\n\t 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n\t 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n\t 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n\t 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n\t 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]);\n\t var _zr = WordArray.create([\n\t 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n\t 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n\t 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n\t 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n\t 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]);\n\t var _sl = WordArray.create([\n\t 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n\t 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n\t 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n\t 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n\t 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]);\n\t var _sr = WordArray.create([\n\t 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n\t 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n\t 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n\t 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n\t 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]);\n\n\t var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]);\n\t var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]);\n\n\t /**\n\t * RIPEMD160 hash algorithm.\n\t */\n\t var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t // Swap\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\t // Shortcut\n\t var H = this._hash.words;\n\t var hl = _hl.words;\n\t var hr = _hr.words;\n\t var zl = _zl.words;\n\t var zr = _zr.words;\n\t var sl = _sl.words;\n\t var sr = _sr.words;\n\n\t // Working variables\n\t var al, bl, cl, dl, el;\n\t var ar, br, cr, dr, er;\n\n\t ar = al = H[0];\n\t br = bl = H[1];\n\t cr = cl = H[2];\n\t dr = dl = H[3];\n\t er = el = H[4];\n\t // Computation\n\t var t;\n\t for (var i = 0; i < 80; i += 1) {\n\t t = (al + M[offset+zl[i]])|0;\n\t if (i<16){\n\t\t t += f1(bl,cl,dl) + hl[0];\n\t } else if (i<32) {\n\t\t t += f2(bl,cl,dl) + hl[1];\n\t } else if (i<48) {\n\t\t t += f3(bl,cl,dl) + hl[2];\n\t } else if (i<64) {\n\t\t t += f4(bl,cl,dl) + hl[3];\n\t } else {// if (i<80) {\n\t\t t += f5(bl,cl,dl) + hl[4];\n\t }\n\t t = t|0;\n\t t = rotl(t,sl[i]);\n\t t = (t+el)|0;\n\t al = el;\n\t el = dl;\n\t dl = rotl(cl, 10);\n\t cl = bl;\n\t bl = t;\n\n\t t = (ar + M[offset+zr[i]])|0;\n\t if (i<16){\n\t\t t += f5(br,cr,dr) + hr[0];\n\t } else if (i<32) {\n\t\t t += f4(br,cr,dr) + hr[1];\n\t } else if (i<48) {\n\t\t t += f3(br,cr,dr) + hr[2];\n\t } else if (i<64) {\n\t\t t += f2(br,cr,dr) + hr[3];\n\t } else {// if (i<80) {\n\t\t t += f1(br,cr,dr) + hr[4];\n\t }\n\t t = t|0;\n\t t = rotl(t,sr[i]) ;\n\t t = (t+er)|0;\n\t ar = er;\n\t er = dr;\n\t dr = rotl(cr, 10);\n\t cr = br;\n\t br = t;\n\t }\n\t // Intermediate hash value\n\t t = (H[1] + cl + dr)|0;\n\t H[1] = (H[2] + dl + er)|0;\n\t H[2] = (H[3] + el + ar)|0;\n\t H[3] = (H[4] + al + br)|0;\n\t H[4] = (H[0] + bl + cr)|0;\n\t H[0] = t;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)\n\t );\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 5; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t // Swap\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\n\t function f1(x, y, z) {\n\t return ((x) ^ (y) ^ (z));\n\n\t }\n\n\t function f2(x, y, z) {\n\t return (((x)&(y)) | ((~x)&(z)));\n\t }\n\n\t function f3(x, y, z) {\n\t return (((x) | (~(y))) ^ (z));\n\t }\n\n\t function f4(x, y, z) {\n\t return (((x) & (z)) | ((y)&(~(z))));\n\t }\n\n\t function f5(x, y, z) {\n\t return ((x) ^ ((y) |(~(z))));\n\n\t }\n\n\t function rotl(x,n) {\n\t return (x<<n) | (x>>>(32-n));\n\t }\n\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.RIPEMD160('message');\n\t * var hash = CryptoJS.RIPEMD160(wordArray);\n\t */\n\t C.RIPEMD160 = Hasher._createHelper(RIPEMD160);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacRIPEMD160(message, key);\n\t */\n\t C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160);\n\t}(Math));\n\n\n\treturn CryptoJS.RIPEMD160;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var C_algo = C.algo;\n\n\t /**\n\t * HMAC algorithm.\n\t */\n\t var HMAC = C_algo.HMAC = Base.extend({\n\t /**\n\t * Initializes a newly created HMAC.\n\t *\n\t * @param {Hasher} hasher The hash algorithm to use.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @example\n\t *\n\t * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n\t */\n\t init: function (hasher, key) {\n\t // Init hasher\n\t hasher = this._hasher = new hasher.init();\n\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof key == 'string') {\n\t key = Utf8.parse(key);\n\t }\n\n\t // Shortcuts\n\t var hasherBlockSize = hasher.blockSize;\n\t var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n\t // Allow arbitrary length keys\n\t if (key.sigBytes > hasherBlockSizeBytes) {\n\t key = hasher.finalize(key);\n\t }\n\n\t // Clamp excess bits\n\t key.clamp();\n\n\t // Clone key for inner and outer pads\n\t var oKey = this._oKey = key.clone();\n\t var iKey = this._iKey = key.clone();\n\n\t // Shortcuts\n\t var oKeyWords = oKey.words;\n\t var iKeyWords = iKey.words;\n\n\t // XOR keys with pad constants\n\t for (var i = 0; i < hasherBlockSize; i++) {\n\t oKeyWords[i] ^= 0x5c5c5c5c;\n\t iKeyWords[i] ^= 0x36363636;\n\t }\n\t oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this HMAC to its initial state.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.reset();\n\t */\n\t reset: function () {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Reset\n\t hasher.reset();\n\t hasher.update(this._iKey);\n\t },\n\n\t /**\n\t * Updates this HMAC with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {HMAC} This HMAC instance.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.update('message');\n\t * hmacHasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t this._hasher.update(messageUpdate);\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the HMAC computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @example\n\t *\n\t * var hmac = hmacHasher.finalize();\n\t * var hmac = hmacHasher.finalize('message');\n\t * var hmac = hmacHasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Compute HMAC\n\t var innerHash = hasher.finalize(messageUpdate);\n\t hasher.reset();\n\t var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\n\t return hmac;\n\t }\n\t });\n\t}());\n\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha256\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha256\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var SHA256 = C_algo.SHA256;\n\t var HMAC = C_algo.HMAC;\n\n\t /**\n\t * Password-Based Key Derivation Function 2 algorithm.\n\t */\n\t var PBKDF2 = C_algo.PBKDF2 = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hasher to use. Default: SHA256\n\t * @property {number} iterations The number of iterations to perform. Default: 250000\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: SHA256,\n\t iterations: 250000\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.PBKDF2.create();\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init HMAC\n\t var hmac = HMAC.create(cfg.hasher, password);\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\t var blockIndex = WordArray.create([0x00000001]);\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var blockIndexWords = blockIndex.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t var block = hmac.update(salt).finalize(blockIndex);\n\t hmac.reset();\n\n\t // Shortcuts\n\t var blockWords = block.words;\n\t var blockWordsLength = blockWords.length;\n\n\t // Iterations\n\t var intermediate = block;\n\t for (var i = 1; i < iterations; i++) {\n\t intermediate = hmac.finalize(intermediate);\n\t hmac.reset();\n\n\t // Shortcut\n\t var intermediateWords = intermediate.words;\n\n\t // XOR intermediate with block\n\t for (var j = 0; j < blockWordsLength; j++) {\n\t blockWords[j] ^= intermediateWords[j];\n\t }\n\t }\n\n\t derivedKey.concat(block);\n\t blockIndexWords[0]++;\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.PBKDF2(password, salt);\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.PBKDF2 = function (password, salt, cfg) {\n\t return PBKDF2.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.PBKDF2;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha1\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha1\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var MD5 = C_algo.MD5;\n\n\t /**\n\t * This key derivation function is meant to conform with EVP_BytesToKey.\n\t * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n\t */\n\t var EvpKDF = C_algo.EvpKDF = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: MD5,\n\t iterations: 1\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.EvpKDF.create();\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t var block;\n\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init hasher\n\t var hasher = cfg.hasher.create();\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t if (block) {\n\t hasher.update(block);\n\t }\n\t block = hasher.update(password).finalize(salt);\n\t hasher.reset();\n\n\t // Iterations\n\t for (var i = 1; i < iterations; i++) {\n\t block = hasher.finalize(block);\n\t hasher.reset();\n\t }\n\n\t derivedKey.concat(block);\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.EvpKDF(password, salt);\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.EvpKDF = function (password, salt, cfg) {\n\t return EvpKDF.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.EvpKDF;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./evpkdf\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./evpkdf\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher core components.\n\t */\n\tCryptoJS.lib.Cipher || (function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var Base64 = C_enc.Base64;\n\t var C_algo = C.algo;\n\t var EvpKDF = C_algo.EvpKDF;\n\n\t /**\n\t * Abstract base cipher template.\n\t *\n\t * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n\t * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n\t * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n\t * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n\t */\n\t var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {WordArray} iv The IV to use for this operation.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Creates this cipher in encryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createEncryptor: function (key, cfg) {\n\t return this.create(this._ENC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Creates this cipher in decryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createDecryptor: function (key, cfg) {\n\t return this.create(this._DEC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Initializes a newly created cipher.\n\t *\n\t * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n\t */\n\t init: function (xformMode, key, cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Store transform mode and key\n\t this._xformMode = xformMode;\n\t this._key = key;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this cipher to its initial state.\n\t *\n\t * @example\n\t *\n\t * cipher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-cipher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Adds data to be encrypted or decrypted.\n\t *\n\t * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.process('data');\n\t * var encrypted = cipher.process(wordArray);\n\t */\n\t process: function (dataUpdate) {\n\t // Append\n\t this._append(dataUpdate);\n\n\t // Process available blocks\n\t return this._process();\n\t },\n\n\t /**\n\t * Finalizes the encryption or decryption process.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after final processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.finalize();\n\t * var encrypted = cipher.finalize('data');\n\t * var encrypted = cipher.finalize(wordArray);\n\t */\n\t finalize: function (dataUpdate) {\n\t // Final data update\n\t if (dataUpdate) {\n\t this._append(dataUpdate);\n\t }\n\n\t // Perform concrete-cipher logic\n\t var finalProcessedData = this._doFinalize();\n\n\t return finalProcessedData;\n\t },\n\n\t keySize: 128/32,\n\n\t ivSize: 128/32,\n\n\t _ENC_XFORM_MODE: 1,\n\n\t _DEC_XFORM_MODE: 2,\n\n\t /**\n\t * Creates shortcut functions to a cipher's object interface.\n\t *\n\t * @param {Cipher} cipher The cipher to create a helper for.\n\t *\n\t * @return {Object} An object with encrypt and decrypt shortcut functions.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n\t */\n\t _createHelper: (function () {\n\t function selectCipherStrategy(key) {\n\t if (typeof key == 'string') {\n\t return PasswordBasedCipher;\n\t } else {\n\t return SerializableCipher;\n\t }\n\t }\n\n\t return function (cipher) {\n\t return {\n\t encrypt: function (message, key, cfg) {\n\t return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n\t },\n\n\t decrypt: function (ciphertext, key, cfg) {\n\t return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n\t }\n\t };\n\t };\n\t }())\n\t });\n\n\t /**\n\t * Abstract base stream cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n\t */\n\t var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n\t _doFinalize: function () {\n\t // Process partial blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 1\n\t });\n\n\t /**\n\t * Mode namespace.\n\t */\n\t var C_mode = C.mode = {};\n\n\t /**\n\t * Abstract base block cipher mode template.\n\t */\n\t var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n\t /**\n\t * Creates this mode for encryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n\t */\n\t createEncryptor: function (cipher, iv) {\n\t return this.Encryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Creates this mode for decryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n\t */\n\t createDecryptor: function (cipher, iv) {\n\t return this.Decryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Initializes a newly created mode.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n\t */\n\t init: function (cipher, iv) {\n\t this._cipher = cipher;\n\t this._iv = iv;\n\t }\n\t });\n\n\t /**\n\t * Cipher Block Chaining mode.\n\t */\n\t var CBC = C_mode.CBC = (function () {\n\t /**\n\t * Abstract base CBC mode.\n\t */\n\t var CBC = BlockCipherMode.extend();\n\n\t /**\n\t * CBC encryptor.\n\t */\n\t CBC.Encryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // XOR and encrypt\n\t xorBlock.call(this, words, offset, blockSize);\n\t cipher.encryptBlock(words, offset);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t /**\n\t * CBC decryptor.\n\t */\n\t CBC.Decryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t // Decrypt and XOR\n\t cipher.decryptBlock(words, offset);\n\t xorBlock.call(this, words, offset, blockSize);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function xorBlock(words, offset, blockSize) {\n\t var block;\n\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Choose mixing block\n\t if (iv) {\n\t block = iv;\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t block = this._prevBlock;\n\t }\n\n\t // XOR blocks\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= block[i];\n\t }\n\t }\n\n\t return CBC;\n\t }());\n\n\t /**\n\t * Padding namespace.\n\t */\n\t var C_pad = C.pad = {};\n\n\t /**\n\t * PKCS #5/7 padding strategy.\n\t */\n\t var Pkcs7 = C_pad.Pkcs7 = {\n\t /**\n\t * Pads data using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to pad.\n\t * @param {number} blockSize The multiple that the data should be padded to.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n\t */\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Create padding word\n\t var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;\n\n\t // Create padding\n\t var paddingWords = [];\n\t for (var i = 0; i < nPaddingBytes; i += 4) {\n\t paddingWords.push(paddingWord);\n\t }\n\t var padding = WordArray.create(paddingWords, nPaddingBytes);\n\n\t // Add padding\n\t data.concat(padding);\n\t },\n\n\t /**\n\t * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to unpad.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.unpad(wordArray);\n\t */\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t };\n\n\t /**\n\t * Abstract base block cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n\t */\n\t var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Mode} mode The block mode to use. Default: CBC\n\t * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n\t */\n\t cfg: Cipher.cfg.extend({\n\t mode: CBC,\n\t padding: Pkcs7\n\t }),\n\n\t reset: function () {\n\t var modeCreator;\n\n\t // Reset cipher\n\t Cipher.reset.call(this);\n\n\t // Shortcuts\n\t var cfg = this.cfg;\n\t var iv = cfg.iv;\n\t var mode = cfg.mode;\n\n\t // Reset block mode\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t modeCreator = mode.createEncryptor;\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t modeCreator = mode.createDecryptor;\n\t // Keep at least one block in the buffer for unpadding\n\t this._minBufferSize = 1;\n\t }\n\n\t if (this._mode && this._mode.__creator == modeCreator) {\n\t this._mode.init(this, iv && iv.words);\n\t } else {\n\t this._mode = modeCreator.call(mode, this, iv && iv.words);\n\t this._mode.__creator = modeCreator;\n\t }\n\t },\n\n\t _doProcessBlock: function (words, offset) {\n\t this._mode.processBlock(words, offset);\n\t },\n\n\t _doFinalize: function () {\n\t var finalProcessedBlocks;\n\n\t // Shortcut\n\t var padding = this.cfg.padding;\n\n\t // Finalize\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t // Pad data\n\t padding.pad(this._data, this.blockSize);\n\n\t // Process final blocks\n\t finalProcessedBlocks = this._process(!!'flush');\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t // Process final blocks\n\t finalProcessedBlocks = this._process(!!'flush');\n\n\t // Unpad data\n\t padding.unpad(finalProcessedBlocks);\n\t }\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 128/32\n\t });\n\n\t /**\n\t * A collection of cipher parameters.\n\t *\n\t * @property {WordArray} ciphertext The raw ciphertext.\n\t * @property {WordArray} key The key to this ciphertext.\n\t * @property {WordArray} iv The IV used in the ciphering operation.\n\t * @property {WordArray} salt The salt used with a key derivation function.\n\t * @property {Cipher} algorithm The cipher algorithm.\n\t * @property {Mode} mode The block mode used in the ciphering operation.\n\t * @property {Padding} padding The padding scheme used in the ciphering operation.\n\t * @property {number} blockSize The block size of the cipher.\n\t * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n\t */\n\t var CipherParams = C_lib.CipherParams = Base.extend({\n\t /**\n\t * Initializes a newly created cipher params object.\n\t *\n\t * @param {Object} cipherParams An object with any of the possible cipher parameters.\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.lib.CipherParams.create({\n\t * ciphertext: ciphertextWordArray,\n\t * key: keyWordArray,\n\t * iv: ivWordArray,\n\t * salt: saltWordArray,\n\t * algorithm: CryptoJS.algo.AES,\n\t * mode: CryptoJS.mode.CBC,\n\t * padding: CryptoJS.pad.PKCS7,\n\t * blockSize: 4,\n\t * formatter: CryptoJS.format.OpenSSL\n\t * });\n\t */\n\t init: function (cipherParams) {\n\t this.mixIn(cipherParams);\n\t },\n\n\t /**\n\t * Converts this cipher params object to a string.\n\t *\n\t * @param {Format} formatter (Optional) The formatting strategy to use.\n\t *\n\t * @return {string} The stringified cipher params.\n\t *\n\t * @throws Error If neither the formatter nor the default formatter is set.\n\t *\n\t * @example\n\t *\n\t * var string = cipherParams + '';\n\t * var string = cipherParams.toString();\n\t * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n\t */\n\t toString: function (formatter) {\n\t return (formatter || this.formatter).stringify(this);\n\t }\n\t });\n\n\t /**\n\t * Format namespace.\n\t */\n\t var C_format = C.format = {};\n\n\t /**\n\t * OpenSSL formatting strategy.\n\t */\n\t var OpenSSLFormatter = C_format.OpenSSL = {\n\t /**\n\t * Converts a cipher params object to an OpenSSL-compatible string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The OpenSSL-compatible string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t var wordArray;\n\n\t // Shortcuts\n\t var ciphertext = cipherParams.ciphertext;\n\t var salt = cipherParams.salt;\n\n\t // Format\n\t if (salt) {\n\t wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n\t } else {\n\t wordArray = ciphertext;\n\t }\n\n\t return wordArray.toString(Base64);\n\t },\n\n\t /**\n\t * Converts an OpenSSL-compatible string to a cipher params object.\n\t *\n\t * @param {string} openSSLStr The OpenSSL-compatible string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n\t */\n\t parse: function (openSSLStr) {\n\t var salt;\n\n\t // Parse base64\n\t var ciphertext = Base64.parse(openSSLStr);\n\n\t // Shortcut\n\t var ciphertextWords = ciphertext.words;\n\n\t // Test for salt\n\t if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n\t // Extract salt\n\t salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n\t // Remove salt from ciphertext\n\t ciphertextWords.splice(0, 4);\n\t ciphertext.sigBytes -= 16;\n\t }\n\n\t return CipherParams.create({ ciphertext: ciphertext, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n\t */\n\t var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n\t */\n\t cfg: Base.extend({\n\t format: OpenSSLFormatter\n\t }),\n\n\t /**\n\t * Encrypts a message.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Encrypt\n\t var encryptor = cipher.createEncryptor(key, cfg);\n\t var ciphertext = encryptor.finalize(message);\n\n\t // Shortcut\n\t var cipherCfg = encryptor.cfg;\n\n\t // Create and return serializable cipher params\n\t return CipherParams.create({\n\t ciphertext: ciphertext,\n\t key: key,\n\t iv: cipherCfg.iv,\n\t algorithm: cipher,\n\t mode: cipherCfg.mode,\n\t padding: cipherCfg.padding,\n\t blockSize: cipher.blockSize,\n\t formatter: cfg.format\n\t });\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Decrypt\n\t var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n\n\t return plaintext;\n\t },\n\n\t /**\n\t * Converts serialized ciphertext to CipherParams,\n\t * else assumed CipherParams already and returns ciphertext unchanged.\n\t *\n\t * @param {CipherParams|string} ciphertext The ciphertext.\n\t * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n\t *\n\t * @return {CipherParams} The unserialized ciphertext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n\t */\n\t _parse: function (ciphertext, format) {\n\t if (typeof ciphertext == 'string') {\n\t return format.parse(ciphertext, this);\n\t } else {\n\t return ciphertext;\n\t }\n\t }\n\t });\n\n\t /**\n\t * Key derivation function namespace.\n\t */\n\t var C_kdf = C.kdf = {};\n\n\t /**\n\t * OpenSSL key derivation function.\n\t */\n\t var OpenSSLKdf = C_kdf.OpenSSL = {\n\t /**\n\t * Derives a key and IV from a password.\n\t *\n\t * @param {string} password The password to derive from.\n\t * @param {number} keySize The size in words of the key to generate.\n\t * @param {number} ivSize The size in words of the IV to generate.\n\t * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n\t *\n\t * @return {CipherParams} A cipher params object with the key, IV, and salt.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n\t */\n\t execute: function (password, keySize, ivSize, salt, hasher) {\n\t // Generate random salt\n\t if (!salt) {\n\t salt = WordArray.random(64/8);\n\t }\n\n\t // Derive key and IV\n\t if (!hasher) {\n\t var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);\n\t } else {\n\t var key = EvpKDF.create({ keySize: keySize + ivSize, hasher: hasher }).compute(password, salt);\n\t }\n\n\n\t // Separate key and IV\n\t var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n\t key.sigBytes = keySize * 4;\n\n\t // Return params\n\t return CipherParams.create({ key: key, iv: iv, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A serializable cipher wrapper that derives the key from a password,\n\t * and returns ciphertext as a serializable cipher params object.\n\t */\n\t var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n\t */\n\t cfg: SerializableCipher.cfg.extend({\n\t kdf: OpenSSLKdf\n\t }),\n\n\t /**\n\t * Encrypts a message using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, cfg.salt, cfg.hasher);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Encrypt\n\t var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\n\t // Mix in derived params\n\t ciphertext.mixIn(derivedParams);\n\n\t return ciphertext;\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt, cfg.hasher);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Decrypt\n\t var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n\n\t return plaintext;\n\t }\n\t });\n\t}());\n\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher Feedback block mode.\n\t */\n\tCryptoJS.mode.CFB = (function () {\n\t var CFB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t CFB.Encryptor = CFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t CFB.Decryptor = CFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {\n\t var keystream;\n\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Generate keystream\n\t if (iv) {\n\t keystream = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t keystream = this._prevBlock;\n\t }\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\n\t return CFB;\n\t}());\n\n\n\treturn CryptoJS.mode.CFB;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Counter block mode.\n\t */\n\tCryptoJS.mode.CTR = (function () {\n\t var CTR = CryptoJS.lib.BlockCipherMode.extend();\n\n\t var Encryptor = CTR.Encryptor = CTR.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var counter = this._counter;\n\n\t // Generate keystream\n\t if (iv) {\n\t counter = this._counter = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\t var keystream = counter.slice(0);\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Increment counter\n\t counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t CTR.Decryptor = Encryptor;\n\n\t return CTR;\n\t}());\n\n\n\treturn CryptoJS.mode.CTR;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/** @preserve\n\t * Counter block mode compatible with Dr Brian Gladman fileenc.c\n\t * derived from CryptoJS.mode.CTR\n\t * Jan Hruby jhruby.web@gmail.com\n\t */\n\tCryptoJS.mode.CTRGladman = (function () {\n\t var CTRGladman = CryptoJS.lib.BlockCipherMode.extend();\n\n\t\tfunction incWord(word)\n\t\t{\n\t\t\tif (((word >> 24) & 0xff) === 0xff) { //overflow\n\t\t\tvar b1 = (word >> 16)&0xff;\n\t\t\tvar b2 = (word >> 8)&0xff;\n\t\t\tvar b3 = word & 0xff;\n\n\t\t\tif (b1 === 0xff) // overflow b1\n\t\t\t{\n\t\t\tb1 = 0;\n\t\t\tif (b2 === 0xff)\n\t\t\t{\n\t\t\t\tb2 = 0;\n\t\t\t\tif (b3 === 0xff)\n\t\t\t\t{\n\t\t\t\t\tb3 = 0;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t++b3;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t++b2;\n\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t++b1;\n\t\t\t}\n\n\t\t\tword = 0;\n\t\t\tword += (b1 << 16);\n\t\t\tword += (b2 << 8);\n\t\t\tword += b3;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\tword += (0x01 << 24);\n\t\t\t}\n\t\t\treturn word;\n\t\t}\n\n\t\tfunction incCounter(counter)\n\t\t{\n\t\t\tif ((counter[0] = incWord(counter[0])) === 0)\n\t\t\t{\n\t\t\t\t// encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8\n\t\t\t\tcounter[1] = incWord(counter[1]);\n\t\t\t}\n\t\t\treturn counter;\n\t\t}\n\n\t var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var counter = this._counter;\n\n\t // Generate keystream\n\t if (iv) {\n\t counter = this._counter = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\n\t\t\t\tincCounter(counter);\n\n\t\t\t\tvar keystream = counter.slice(0);\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t CTRGladman.Decryptor = Encryptor;\n\n\t return CTRGladman;\n\t}());\n\n\n\n\n\treturn CryptoJS.mode.CTRGladman;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Output Feedback block mode.\n\t */\n\tCryptoJS.mode.OFB = (function () {\n\t var OFB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t var Encryptor = OFB.Encryptor = OFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var keystream = this._keystream;\n\n\t // Generate keystream\n\t if (iv) {\n\t keystream = this._keystream = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t OFB.Decryptor = Encryptor;\n\n\t return OFB;\n\t}());\n\n\n\treturn CryptoJS.mode.OFB;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Electronic Codebook block mode.\n\t */\n\tCryptoJS.mode.ECB = (function () {\n\t var ECB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t ECB.Encryptor = ECB.extend({\n\t processBlock: function (words, offset) {\n\t this._cipher.encryptBlock(words, offset);\n\t }\n\t });\n\n\t ECB.Decryptor = ECB.extend({\n\t processBlock: function (words, offset) {\n\t this._cipher.decryptBlock(words, offset);\n\t }\n\t });\n\n\t return ECB;\n\t}());\n\n\n\treturn CryptoJS.mode.ECB;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ANSI X.923 padding strategy.\n\t */\n\tCryptoJS.pad.AnsiX923 = {\n\t pad: function (data, blockSize) {\n\t // Shortcuts\n\t var dataSigBytes = data.sigBytes;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes;\n\n\t // Compute last byte position\n\t var lastBytePos = dataSigBytes + nPaddingBytes - 1;\n\n\t // Pad\n\t data.clamp();\n\t data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8);\n\t data.sigBytes += nPaddingBytes;\n\t },\n\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Ansix923;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ISO 10126 padding strategy.\n\t */\n\tCryptoJS.pad.Iso10126 = {\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Pad\n\t data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).\n\t concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1));\n\t },\n\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Iso10126;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ISO/IEC 9797-1 Padding Method 2.\n\t */\n\tCryptoJS.pad.Iso97971 = {\n\t pad: function (data, blockSize) {\n\t // Add 0x80 byte\n\t data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1));\n\n\t // Zero pad the rest\n\t CryptoJS.pad.ZeroPadding.pad(data, blockSize);\n\t },\n\n\t unpad: function (data) {\n\t // Remove zero padding\n\t CryptoJS.pad.ZeroPadding.unpad(data);\n\n\t // Remove one more byte -- the 0x80 byte\n\t data.sigBytes--;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Iso97971;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Zero padding strategy.\n\t */\n\tCryptoJS.pad.ZeroPadding = {\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Pad\n\t data.clamp();\n\t data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes);\n\t },\n\n\t unpad: function (data) {\n\t // Shortcut\n\t var dataWords = data.words;\n\n\t // Unpad\n\t var i = data.sigBytes - 1;\n\t for (var i = data.sigBytes - 1; i >= 0; i--) {\n\t if (((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) {\n\t data.sigBytes = i + 1;\n\t break;\n\t }\n\t }\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.ZeroPadding;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * A noop padding strategy.\n\t */\n\tCryptoJS.pad.NoPadding = {\n\t pad: function () {\n\t },\n\n\t unpad: function () {\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.NoPadding;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var CipherParams = C_lib.CipherParams;\n\t var C_enc = C.enc;\n\t var Hex = C_enc.Hex;\n\t var C_format = C.format;\n\n\t var HexFormatter = C_format.Hex = {\n\t /**\n\t * Converts the ciphertext of a cipher params object to a hexadecimally encoded string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The hexadecimally encoded string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.format.Hex.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t return cipherParams.ciphertext.toString(Hex);\n\t },\n\n\t /**\n\t * Converts a hexadecimally encoded ciphertext string to a cipher params object.\n\t *\n\t * @param {string} input The hexadecimally encoded string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.Hex.parse(hexString);\n\t */\n\t parse: function (input) {\n\t var ciphertext = Hex.parse(input);\n\t return CipherParams.create({ ciphertext: ciphertext });\n\t }\n\t };\n\t}());\n\n\n\treturn CryptoJS.format.Hex;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Lookup tables\n\t var SBOX = [];\n\t var INV_SBOX = [];\n\t var SUB_MIX_0 = [];\n\t var SUB_MIX_1 = [];\n\t var SUB_MIX_2 = [];\n\t var SUB_MIX_3 = [];\n\t var INV_SUB_MIX_0 = [];\n\t var INV_SUB_MIX_1 = [];\n\t var INV_SUB_MIX_2 = [];\n\t var INV_SUB_MIX_3 = [];\n\n\t // Compute lookup tables\n\t (function () {\n\t // Compute double table\n\t var d = [];\n\t for (var i = 0; i < 256; i++) {\n\t if (i < 128) {\n\t d[i] = i << 1;\n\t } else {\n\t d[i] = (i << 1) ^ 0x11b;\n\t }\n\t }\n\n\t // Walk GF(2^8)\n\t var x = 0;\n\t var xi = 0;\n\t for (var i = 0; i < 256; i++) {\n\t // Compute sbox\n\t var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n\t sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n\t SBOX[x] = sx;\n\t INV_SBOX[sx] = x;\n\n\t // Compute multiplication\n\t var x2 = d[x];\n\t var x4 = d[x2];\n\t var x8 = d[x4];\n\n\t // Compute sub bytes, mix columns tables\n\t var t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n\t SUB_MIX_0[x] = (t << 24) | (t >>> 8);\n\t SUB_MIX_1[x] = (t << 16) | (t >>> 16);\n\t SUB_MIX_2[x] = (t << 8) | (t >>> 24);\n\t SUB_MIX_3[x] = t;\n\n\t // Compute inv sub bytes, inv mix columns tables\n\t var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n\t INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);\n\t INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);\n\t INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);\n\t INV_SUB_MIX_3[sx] = t;\n\n\t // Compute next counter\n\t if (!x) {\n\t x = xi = 1;\n\t } else {\n\t x = x2 ^ d[d[d[x8 ^ x2]]];\n\t xi ^= d[d[xi]];\n\t }\n\t }\n\t }());\n\n\t // Precomputed Rcon lookup\n\t var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n\t /**\n\t * AES block cipher algorithm.\n\t */\n\t var AES = C_algo.AES = BlockCipher.extend({\n\t _doReset: function () {\n\t var t;\n\n\t // Skip reset of nRounds has been set before and key did not change\n\t if (this._nRounds && this._keyPriorReset === this._key) {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var key = this._keyPriorReset = this._key;\n\t var keyWords = key.words;\n\t var keySize = key.sigBytes / 4;\n\n\t // Compute number of rounds\n\t var nRounds = this._nRounds = keySize + 6;\n\n\t // Compute number of key schedule rows\n\t var ksRows = (nRounds + 1) * 4;\n\n\t // Compute key schedule\n\t var keySchedule = this._keySchedule = [];\n\t for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n\t if (ksRow < keySize) {\n\t keySchedule[ksRow] = keyWords[ksRow];\n\t } else {\n\t t = keySchedule[ksRow - 1];\n\n\t if (!(ksRow % keySize)) {\n\t // Rot word\n\t t = (t << 8) | (t >>> 24);\n\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\n\t // Mix Rcon\n\t t ^= RCON[(ksRow / keySize) | 0] << 24;\n\t } else if (keySize > 6 && ksRow % keySize == 4) {\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\t }\n\n\t keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n\t }\n\t }\n\n\t // Compute inv key schedule\n\t var invKeySchedule = this._invKeySchedule = [];\n\t for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n\t var ksRow = ksRows - invKsRow;\n\n\t if (invKsRow % 4) {\n\t var t = keySchedule[ksRow];\n\t } else {\n\t var t = keySchedule[ksRow - 4];\n\t }\n\n\t if (invKsRow < 4 || ksRow <= 4) {\n\t invKeySchedule[invKsRow] = t;\n\t } else {\n\t invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^\n\t INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n\t }\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t // Swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\n\t this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\n\t // Inv swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\t },\n\n\t _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n\t // Shortcut\n\t var nRounds = this._nRounds;\n\n\t // Get input, add round key\n\t var s0 = M[offset] ^ keySchedule[0];\n\t var s1 = M[offset + 1] ^ keySchedule[1];\n\t var s2 = M[offset + 2] ^ keySchedule[2];\n\t var s3 = M[offset + 3] ^ keySchedule[3];\n\n\t // Key schedule row counter\n\t var ksRow = 4;\n\n\t // Rounds\n\t for (var round = 1; round < nRounds; round++) {\n\t // Shift rows, sub bytes, mix columns, add round key\n\t var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n\t var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n\t var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n\t var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\n\t // Update state\n\t s0 = t0;\n\t s1 = t1;\n\t s2 = t2;\n\t s3 = t3;\n\t }\n\n\t // Shift rows, sub bytes, add round key\n\t var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n\t var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n\t var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n\t var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\n\t // Set output\n\t M[offset] = t0;\n\t M[offset + 1] = t1;\n\t M[offset + 2] = t2;\n\t M[offset + 3] = t3;\n\t },\n\n\t keySize: 256/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.AES = BlockCipher._createHelper(AES);\n\t}());\n\n\n\treturn CryptoJS.AES;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Permuted Choice 1 constants\n\t var PC1 = [\n\t 57, 49, 41, 33, 25, 17, 9, 1,\n\t 58, 50, 42, 34, 26, 18, 10, 2,\n\t 59, 51, 43, 35, 27, 19, 11, 3,\n\t 60, 52, 44, 36, 63, 55, 47, 39,\n\t 31, 23, 15, 7, 62, 54, 46, 38,\n\t 30, 22, 14, 6, 61, 53, 45, 37,\n\t 29, 21, 13, 5, 28, 20, 12, 4\n\t ];\n\n\t // Permuted Choice 2 constants\n\t var PC2 = [\n\t 14, 17, 11, 24, 1, 5,\n\t 3, 28, 15, 6, 21, 10,\n\t 23, 19, 12, 4, 26, 8,\n\t 16, 7, 27, 20, 13, 2,\n\t 41, 52, 31, 37, 47, 55,\n\t 30, 40, 51, 45, 33, 48,\n\t 44, 49, 39, 56, 34, 53,\n\t 46, 42, 50, 36, 29, 32\n\t ];\n\n\t // Cumulative bit shift constants\n\t var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];\n\n\t // SBOXes and round permutation constants\n\t var SBOX_P = [\n\t {\n\t 0x0: 0x808200,\n\t 0x10000000: 0x8000,\n\t 0x20000000: 0x808002,\n\t 0x30000000: 0x2,\n\t 0x40000000: 0x200,\n\t 0x50000000: 0x808202,\n\t 0x60000000: 0x800202,\n\t 0x70000000: 0x800000,\n\t 0x80000000: 0x202,\n\t 0x90000000: 0x800200,\n\t 0xa0000000: 0x8200,\n\t 0xb0000000: 0x808000,\n\t 0xc0000000: 0x8002,\n\t 0xd0000000: 0x800002,\n\t 0xe0000000: 0x0,\n\t 0xf0000000: 0x8202,\n\t 0x8000000: 0x0,\n\t 0x18000000: 0x808202,\n\t 0x28000000: 0x8202,\n\t 0x38000000: 0x8000,\n\t 0x48000000: 0x808200,\n\t 0x58000000: 0x200,\n\t 0x68000000: 0x808002,\n\t 0x78000000: 0x2,\n\t 0x88000000: 0x800200,\n\t 0x98000000: 0x8200,\n\t 0xa8000000: 0x808000,\n\t 0xb8000000: 0x800202,\n\t 0xc8000000: 0x800002,\n\t 0xd8000000: 0x8002,\n\t 0xe8000000: 0x202,\n\t 0xf8000000: 0x800000,\n\t 0x1: 0x8000,\n\t 0x10000001: 0x2,\n\t 0x20000001: 0x808200,\n\t 0x30000001: 0x800000,\n\t 0x40000001: 0x808002,\n\t 0x50000001: 0x8200,\n\t 0x60000001: 0x200,\n\t 0x70000001: 0x800202,\n\t 0x80000001: 0x808202,\n\t 0x90000001: 0x808000,\n\t 0xa0000001: 0x800002,\n\t 0xb0000001: 0x8202,\n\t 0xc0000001: 0x202,\n\t 0xd0000001: 0x800200,\n\t 0xe0000001: 0x8002,\n\t 0xf0000001: 0x0,\n\t 0x8000001: 0x808202,\n\t 0x18000001: 0x808000,\n\t 0x28000001: 0x800000,\n\t 0x38000001: 0x200,\n\t 0x48000001: 0x8000,\n\t 0x58000001: 0x800002,\n\t 0x68000001: 0x2,\n\t 0x78000001: 0x8202,\n\t 0x88000001: 0x8002,\n\t 0x98000001: 0x800202,\n\t 0xa8000001: 0x202,\n\t 0xb8000001: 0x808200,\n\t 0xc8000001: 0x800200,\n\t 0xd8000001: 0x0,\n\t 0xe8000001: 0x8200,\n\t 0xf8000001: 0x808002\n\t },\n\t {\n\t 0x0: 0x40084010,\n\t 0x1000000: 0x4000,\n\t 0x2000000: 0x80000,\n\t 0x3000000: 0x40080010,\n\t 0x4000000: 0x40000010,\n\t 0x5000000: 0x40084000,\n\t 0x6000000: 0x40004000,\n\t 0x7000000: 0x10,\n\t 0x8000000: 0x84000,\n\t 0x9000000: 0x40004010,\n\t 0xa000000: 0x40000000,\n\t 0xb000000: 0x84010,\n\t 0xc000000: 0x80010,\n\t 0xd000000: 0x0,\n\t 0xe000000: 0x4010,\n\t 0xf000000: 0x40080000,\n\t 0x800000: 0x40004000,\n\t 0x1800000: 0x84010,\n\t 0x2800000: 0x10,\n\t 0x3800000: 0x40004010,\n\t 0x4800000: 0x40084010,\n\t 0x5800000: 0x40000000,\n\t 0x6800000: 0x80000,\n\t 0x7800000: 0x40080010,\n\t 0x8800000: 0x80010,\n\t 0x9800000: 0x0,\n\t 0xa800000: 0x4000,\n\t 0xb800000: 0x40080000,\n\t 0xc800000: 0x40000010,\n\t 0xd800000: 0x84000,\n\t 0xe800000: 0x40084000,\n\t 0xf800000: 0x4010,\n\t 0x10000000: 0x0,\n\t 0x11000000: 0x40080010,\n\t 0x12000000: 0x40004010,\n\t 0x13000000: 0x40084000,\n\t 0x14000000: 0x40080000,\n\t 0x15000000: 0x10,\n\t 0x16000000: 0x84010,\n\t 0x17000000: 0x4000,\n\t 0x18000000: 0x4010,\n\t 0x19000000: 0x80000,\n\t 0x1a000000: 0x80010,\n\t 0x1b000000: 0x40000010,\n\t 0x1c000000: 0x84000,\n\t 0x1d000000: 0x40004000,\n\t 0x1e000000: 0x40000000,\n\t 0x1f000000: 0x40084010,\n\t 0x10800000: 0x84010,\n\t 0x11800000: 0x80000,\n\t 0x12800000: 0x40080000,\n\t 0x13800000: 0x4000,\n\t 0x14800000: 0x40004000,\n\t 0x15800000: 0x40084010,\n\t 0x16800000: 0x10,\n\t 0x17800000: 0x40000000,\n\t 0x18800000: 0x40084000,\n\t 0x19800000: 0x40000010,\n\t 0x1a800000: 0x40004010,\n\t 0x1b800000: 0x80010,\n\t 0x1c800000: 0x0,\n\t 0x1d800000: 0x4010,\n\t 0x1e800000: 0x40080010,\n\t 0x1f800000: 0x84000\n\t },\n\t {\n\t 0x0: 0x104,\n\t 0x100000: 0x0,\n\t 0x200000: 0x4000100,\n\t 0x300000: 0x10104,\n\t 0x400000: 0x10004,\n\t 0x500000: 0x4000004,\n\t 0x600000: 0x4010104,\n\t 0x700000: 0x4010000,\n\t 0x800000: 0x4000000,\n\t 0x900000: 0x4010100,\n\t 0xa00000: 0x10100,\n\t 0xb00000: 0x4010004,\n\t 0xc00000: 0x4000104,\n\t 0xd00000: 0x10000,\n\t 0xe00000: 0x4,\n\t 0xf00000: 0x100,\n\t 0x80000: 0x4010100,\n\t 0x180000: 0x4010004,\n\t 0x280000: 0x0,\n\t 0x380000: 0x4000100,\n\t 0x480000: 0x4000004,\n\t 0x580000: 0x10000,\n\t 0x680000: 0x10004,\n\t 0x780000: 0x104,\n\t 0x880000: 0x4,\n\t 0x980000: 0x100,\n\t 0xa80000: 0x4010000,\n\t 0xb80000: 0x10104,\n\t 0xc80000: 0x10100,\n\t 0xd80000: 0x4000104,\n\t 0xe80000: 0x4010104,\n\t 0xf80000: 0x4000000,\n\t 0x1000000: 0x4010100,\n\t 0x1100000: 0x10004,\n\t 0x1200000: 0x10000,\n\t 0x1300000: 0x4000100,\n\t 0x1400000: 0x100,\n\t 0x1500000: 0x4010104,\n\t 0x1600000: 0x4000004,\n\t 0x1700000: 0x0,\n\t 0x1800000: 0x4000104,\n\t 0x1900000: 0x4000000,\n\t 0x1a00000: 0x4,\n\t 0x1b00000: 0x10100,\n\t 0x1c00000: 0x4010000,\n\t 0x1d00000: 0x104,\n\t 0x1e00000: 0x10104,\n\t 0x1f00000: 0x4010004,\n\t 0x1080000: 0x4000000,\n\t 0x1180000: 0x104,\n\t 0x1280000: 0x4010100,\n\t 0x1380000: 0x0,\n\t 0x1480000: 0x10004,\n\t 0x1580000: 0x4000100,\n\t 0x1680000: 0x100,\n\t 0x1780000: 0x4010004,\n\t 0x1880000: 0x10000,\n\t 0x1980000: 0x4010104,\n\t 0x1a80000: 0x10104,\n\t 0x1b80000: 0x4000004,\n\t 0x1c80000: 0x4000104,\n\t 0x1d80000: 0x4010000,\n\t 0x1e80000: 0x4,\n\t 0x1f80000: 0x10100\n\t },\n\t {\n\t 0x0: 0x80401000,\n\t 0x10000: 0x80001040,\n\t 0x20000: 0x401040,\n\t 0x30000: 0x80400000,\n\t 0x40000: 0x0,\n\t 0x50000: 0x401000,\n\t 0x60000: 0x80000040,\n\t 0x70000: 0x400040,\n\t 0x80000: 0x80000000,\n\t 0x90000: 0x400000,\n\t 0xa0000: 0x40,\n\t 0xb0000: 0x80001000,\n\t 0xc0000: 0x80400040,\n\t 0xd0000: 0x1040,\n\t 0xe0000: 0x1000,\n\t 0xf0000: 0x80401040,\n\t 0x8000: 0x80001040,\n\t 0x18000: 0x40,\n\t 0x28000: 0x80400040,\n\t 0x38000: 0x80001000,\n\t 0x48000: 0x401000,\n\t 0x58000: 0x80401040,\n\t 0x68000: 0x0,\n\t 0x78000: 0x80400000,\n\t 0x88000: 0x1000,\n\t 0x98000: 0x80401000,\n\t 0xa8000: 0x400000,\n\t 0xb8000: 0x1040,\n\t 0xc8000: 0x80000000,\n\t 0xd8000: 0x400040,\n\t 0xe8000: 0x401040,\n\t 0xf8000: 0x80000040,\n\t 0x100000: 0x400040,\n\t 0x110000: 0x401000,\n\t 0x120000: 0x80000040,\n\t 0x130000: 0x0,\n\t 0x140000: 0x1040,\n\t 0x150000: 0x80400040,\n\t 0x160000: 0x80401000,\n\t 0x170000: 0x80001040,\n\t 0x180000: 0x80401040,\n\t 0x190000: 0x80000000,\n\t 0x1a0000: 0x80400000,\n\t 0x1b0000: 0x401040,\n\t 0x1c0000: 0x80001000,\n\t 0x1d0000: 0x400000,\n\t 0x1e0000: 0x40,\n\t 0x1f0000: 0x1000,\n\t 0x108000: 0x80400000,\n\t 0x118000: 0x80401040,\n\t 0x128000: 0x0,\n\t 0x138000: 0x401000,\n\t 0x148000: 0x400040,\n\t 0x158000: 0x80000000,\n\t 0x168000: 0x80001040,\n\t 0x178000: 0x40,\n\t 0x188000: 0x80000040,\n\t 0x198000: 0x1000,\n\t 0x1a8000: 0x80001000,\n\t 0x1b8000: 0x80400040,\n\t 0x1c8000: 0x1040,\n\t 0x1d8000: 0x80401000,\n\t 0x1e8000: 0x400000,\n\t 0x1f8000: 0x401040\n\t },\n\t {\n\t 0x0: 0x80,\n\t 0x1000: 0x1040000,\n\t 0x2000: 0x40000,\n\t 0x3000: 0x20000000,\n\t 0x4000: 0x20040080,\n\t 0x5000: 0x1000080,\n\t 0x6000: 0x21000080,\n\t 0x7000: 0x40080,\n\t 0x8000: 0x1000000,\n\t 0x9000: 0x20040000,\n\t 0xa000: 0x20000080,\n\t 0xb000: 0x21040080,\n\t 0xc000: 0x21040000,\n\t 0xd000: 0x0,\n\t 0xe000: 0x1040080,\n\t 0xf000: 0x21000000,\n\t 0x800: 0x1040080,\n\t 0x1800: 0x21000080,\n\t 0x2800: 0x80,\n\t 0x3800: 0x1040000,\n\t 0x4800: 0x40000,\n\t 0x5800: 0x20040080,\n\t 0x6800: 0x21040000,\n\t 0x7800: 0x20000000,\n\t 0x8800: 0x20040000,\n\t 0x9800: 0x0,\n\t 0xa800: 0x21040080,\n\t 0xb800: 0x1000080,\n\t 0xc800: 0x20000080,\n\t 0xd800: 0x21000000,\n\t 0xe800: 0x1000000,\n\t 0xf800: 0x40080,\n\t 0x10000: 0x40000,\n\t 0x11000: 0x80,\n\t 0x12000: 0x20000000,\n\t 0x13000: 0x21000080,\n\t 0x14000: 0x1000080,\n\t 0x15000: 0x21040000,\n\t 0x16000: 0x20040080,\n\t 0x17000: 0x1000000,\n\t 0x18000: 0x21040080,\n\t 0x19000: 0x21000000,\n\t 0x1a000: 0x1040000,\n\t 0x1b000: 0x20040000,\n\t 0x1c000: 0x40080,\n\t 0x1d000: 0x20000080,\n\t 0x1e000: 0x0,\n\t 0x1f000: 0x1040080,\n\t 0x10800: 0x21000080,\n\t 0x11800: 0x1000000,\n\t 0x12800: 0x1040000,\n\t 0x13800: 0x20040080,\n\t 0x14800: 0x20000000,\n\t 0x15800: 0x1040080,\n\t 0x16800: 0x80,\n\t 0x17800: 0x21040000,\n\t 0x18800: 0x40080,\n\t 0x19800: 0x21040080,\n\t 0x1a800: 0x0,\n\t 0x1b800: 0x21000000,\n\t 0x1c800: 0x1000080,\n\t 0x1d800: 0x40000,\n\t 0x1e800: 0x20040000,\n\t 0x1f800: 0x20000080\n\t },\n\t {\n\t 0x0: 0x10000008,\n\t 0x100: 0x2000,\n\t 0x200: 0x10200000,\n\t 0x300: 0x10202008,\n\t 0x400: 0x10002000,\n\t 0x500: 0x200000,\n\t 0x600: 0x200008,\n\t 0x700: 0x10000000,\n\t 0x800: 0x0,\n\t 0x900: 0x10002008,\n\t 0xa00: 0x202000,\n\t 0xb00: 0x8,\n\t 0xc00: 0x10200008,\n\t 0xd00: 0x202008,\n\t 0xe00: 0x2008,\n\t 0xf00: 0x10202000,\n\t 0x80: 0x10200000,\n\t 0x180: 0x10202008,\n\t 0x280: 0x8,\n\t 0x380: 0x200000,\n\t 0x480: 0x202008,\n\t 0x580: 0x10000008,\n\t 0x680: 0x10002000,\n\t 0x780: 0x2008,\n\t 0x880: 0x200008,\n\t 0x980: 0x2000,\n\t 0xa80: 0x10002008,\n\t 0xb80: 0x10200008,\n\t 0xc80: 0x0,\n\t 0xd80: 0x10202000,\n\t 0xe80: 0x202000,\n\t 0xf80: 0x10000000,\n\t 0x1000: 0x10002000,\n\t 0x1100: 0x10200008,\n\t 0x1200: 0x10202008,\n\t 0x1300: 0x2008,\n\t 0x1400: 0x200000,\n\t 0x1500: 0x10000000,\n\t 0x1600: 0x10000008,\n\t 0x1700: 0x202000,\n\t 0x1800: 0x202008,\n\t 0x1900: 0x0,\n\t 0x1a00: 0x8,\n\t 0x1b00: 0x10200000,\n\t 0x1c00: 0x2000,\n\t 0x1d00: 0x10002008,\n\t 0x1e00: 0x10202000,\n\t 0x1f00: 0x200008,\n\t 0x1080: 0x8,\n\t 0x1180: 0x202000,\n\t 0x1280: 0x200000,\n\t 0x1380: 0x10000008,\n\t 0x1480: 0x10002000,\n\t 0x1580: 0x2008,\n\t 0x1680: 0x10202008,\n\t 0x1780: 0x10200000,\n\t 0x1880: 0x10202000,\n\t 0x1980: 0x10200008,\n\t 0x1a80: 0x2000,\n\t 0x1b80: 0x202008,\n\t 0x1c80: 0x200008,\n\t 0x1d80: 0x0,\n\t 0x1e80: 0x10000000,\n\t 0x1f80: 0x10002008\n\t },\n\t {\n\t 0x0: 0x100000,\n\t 0x10: 0x2000401,\n\t 0x20: 0x400,\n\t 0x30: 0x100401,\n\t 0x40: 0x2100401,\n\t 0x50: 0x0,\n\t 0x60: 0x1,\n\t 0x70: 0x2100001,\n\t 0x80: 0x2000400,\n\t 0x90: 0x100001,\n\t 0xa0: 0x2000001,\n\t 0xb0: 0x2100400,\n\t 0xc0: 0x2100000,\n\t 0xd0: 0x401,\n\t 0xe0: 0x100400,\n\t 0xf0: 0x2000000,\n\t 0x8: 0x2100001,\n\t 0x18: 0x0,\n\t 0x28: 0x2000401,\n\t 0x38: 0x2100400,\n\t 0x48: 0x100000,\n\t 0x58: 0x2000001,\n\t 0x68: 0x2000000,\n\t 0x78: 0x401,\n\t 0x88: 0x100401,\n\t 0x98: 0x2000400,\n\t 0xa8: 0x2100000,\n\t 0xb8: 0x100001,\n\t 0xc8: 0x400,\n\t 0xd8: 0x2100401,\n\t 0xe8: 0x1,\n\t 0xf8: 0x100400,\n\t 0x100: 0x2000000,\n\t 0x110: 0x100000,\n\t 0x120: 0x2000401,\n\t 0x130: 0x2100001,\n\t 0x140: 0x100001,\n\t 0x150: 0x2000400,\n\t 0x160: 0x2100400,\n\t 0x170: 0x100401,\n\t 0x180: 0x401,\n\t 0x190: 0x2100401,\n\t 0x1a0: 0x100400,\n\t 0x1b0: 0x1,\n\t 0x1c0: 0x0,\n\t 0x1d0: 0x2100000,\n\t 0x1e0: 0x2000001,\n\t 0x1f0: 0x400,\n\t 0x108: 0x100400,\n\t 0x118: 0x2000401,\n\t 0x128: 0x2100001,\n\t 0x138: 0x1,\n\t 0x148: 0x2000000,\n\t 0x158: 0x100000,\n\t 0x168: 0x401,\n\t 0x178: 0x2100400,\n\t 0x188: 0x2000001,\n\t 0x198: 0x2100000,\n\t 0x1a8: 0x0,\n\t 0x1b8: 0x2100401,\n\t 0x1c8: 0x100401,\n\t 0x1d8: 0x400,\n\t 0x1e8: 0x2000400,\n\t 0x1f8: 0x100001\n\t },\n\t {\n\t 0x0: 0x8000820,\n\t 0x1: 0x20000,\n\t 0x2: 0x8000000,\n\t 0x3: 0x20,\n\t 0x4: 0x20020,\n\t 0x5: 0x8020820,\n\t 0x6: 0x8020800,\n\t 0x7: 0x800,\n\t 0x8: 0x8020000,\n\t 0x9: 0x8000800,\n\t 0xa: 0x20800,\n\t 0xb: 0x8020020,\n\t 0xc: 0x820,\n\t 0xd: 0x0,\n\t 0xe: 0x8000020,\n\t 0xf: 0x20820,\n\t 0x80000000: 0x800,\n\t 0x80000001: 0x8020820,\n\t 0x80000002: 0x8000820,\n\t 0x80000003: 0x8000000,\n\t 0x80000004: 0x8020000,\n\t 0x80000005: 0x20800,\n\t 0x80000006: 0x20820,\n\t 0x80000007: 0x20,\n\t 0x80000008: 0x8000020,\n\t 0x80000009: 0x820,\n\t 0x8000000a: 0x20020,\n\t 0x8000000b: 0x8020800,\n\t 0x8000000c: 0x0,\n\t 0x8000000d: 0x8020020,\n\t 0x8000000e: 0x8000800,\n\t 0x8000000f: 0x20000,\n\t 0x10: 0x20820,\n\t 0x11: 0x8020800,\n\t 0x12: 0x20,\n\t 0x13: 0x800,\n\t 0x14: 0x8000800,\n\t 0x15: 0x8000020,\n\t 0x16: 0x8020020,\n\t 0x17: 0x20000,\n\t 0x18: 0x0,\n\t 0x19: 0x20020,\n\t 0x1a: 0x8020000,\n\t 0x1b: 0x8000820,\n\t 0x1c: 0x8020820,\n\t 0x1d: 0x20800,\n\t 0x1e: 0x820,\n\t 0x1f: 0x8000000,\n\t 0x80000010: 0x20000,\n\t 0x80000011: 0x800,\n\t 0x80000012: 0x8020020,\n\t 0x80000013: 0x20820,\n\t 0x80000014: 0x20,\n\t 0x80000015: 0x8020000,\n\t 0x80000016: 0x8000000,\n\t 0x80000017: 0x8000820,\n\t 0x80000018: 0x8020820,\n\t 0x80000019: 0x8000020,\n\t 0x8000001a: 0x8000800,\n\t 0x8000001b: 0x0,\n\t 0x8000001c: 0x20800,\n\t 0x8000001d: 0x820,\n\t 0x8000001e: 0x20020,\n\t 0x8000001f: 0x8020800\n\t }\n\t ];\n\n\t // Masks that select the SBOX input\n\t var SBOX_MASK = [\n\t 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000,\n\t 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f\n\t ];\n\n\t /**\n\t * DES block cipher algorithm.\n\t */\n\t var DES = C_algo.DES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\n\t // Select 56 bits according to PC1\n\t var keyBits = [];\n\t for (var i = 0; i < 56; i++) {\n\t var keyBitPos = PC1[i] - 1;\n\t keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1;\n\t }\n\n\t // Assemble 16 subkeys\n\t var subKeys = this._subKeys = [];\n\t for (var nSubKey = 0; nSubKey < 16; nSubKey++) {\n\t // Create subkey\n\t var subKey = subKeys[nSubKey] = [];\n\n\t // Shortcut\n\t var bitShift = BIT_SHIFTS[nSubKey];\n\n\t // Select 48 bits according to PC2\n\t for (var i = 0; i < 24; i++) {\n\t // Select from the left 28 key bits\n\t subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6);\n\n\t // Select from the right 28 key bits\n\t subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6);\n\t }\n\n\t // Since each subkey is applied to an expanded 32-bit input,\n\t // the subkey can be broken into 8 values scaled to 32-bits,\n\t // which allows the key to be used without expansion\n\t subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31);\n\t for (var i = 1; i < 7; i++) {\n\t subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3);\n\t }\n\t subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27);\n\t }\n\n\t // Compute inverse subkeys\n\t var invSubKeys = this._invSubKeys = [];\n\t for (var i = 0; i < 16; i++) {\n\t invSubKeys[i] = subKeys[15 - i];\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._subKeys);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._invSubKeys);\n\t },\n\n\t _doCryptBlock: function (M, offset, subKeys) {\n\t // Get input\n\t this._lBlock = M[offset];\n\t this._rBlock = M[offset + 1];\n\n\t // Initial permutation\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeLR.call(this, 1, 0x55555555);\n\n\t // Rounds\n\t for (var round = 0; round < 16; round++) {\n\t // Shortcuts\n\t var subKey = subKeys[round];\n\t var lBlock = this._lBlock;\n\t var rBlock = this._rBlock;\n\n\t // Feistel function\n\t var f = 0;\n\t for (var i = 0; i < 8; i++) {\n\t f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];\n\t }\n\t this._lBlock = rBlock;\n\t this._rBlock = lBlock ^ f;\n\t }\n\n\t // Undo swap from last round\n\t var t = this._lBlock;\n\t this._lBlock = this._rBlock;\n\t this._rBlock = t;\n\n\t // Final permutation\n\t exchangeLR.call(this, 1, 0x55555555);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\n\t // Set output\n\t M[offset] = this._lBlock;\n\t M[offset + 1] = this._rBlock;\n\t },\n\n\t keySize: 64/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t // Swap bits across the left and right words\n\t function exchangeLR(offset, mask) {\n\t var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask;\n\t this._rBlock ^= t;\n\t this._lBlock ^= t << offset;\n\t }\n\n\t function exchangeRL(offset, mask) {\n\t var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask;\n\t this._lBlock ^= t;\n\t this._rBlock ^= t << offset;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.DES = BlockCipher._createHelper(DES);\n\n\t /**\n\t * Triple-DES block cipher algorithm.\n\t */\n\t var TripleDES = C_algo.TripleDES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t // Make sure the key length is valid (64, 128 or >= 192 bit)\n\t if (keyWords.length !== 2 && keyWords.length !== 4 && keyWords.length < 6) {\n\t throw new Error('Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.');\n\t }\n\n\t // Extend the key according to the keying options defined in 3DES standard\n\t var key1 = keyWords.slice(0, 2);\n\t var key2 = keyWords.length < 4 ? keyWords.slice(0, 2) : keyWords.slice(2, 4);\n\t var key3 = keyWords.length < 6 ? keyWords.slice(0, 2) : keyWords.slice(4, 6);\n\n\t // Create DES instances\n\t this._des1 = DES.createEncryptor(WordArray.create(key1));\n\t this._des2 = DES.createEncryptor(WordArray.create(key2));\n\t this._des3 = DES.createEncryptor(WordArray.create(key3));\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._des1.encryptBlock(M, offset);\n\t this._des2.decryptBlock(M, offset);\n\t this._des3.encryptBlock(M, offset);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._des3.decryptBlock(M, offset);\n\t this._des2.encryptBlock(M, offset);\n\t this._des1.decryptBlock(M, offset);\n\t },\n\n\t keySize: 192/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.TripleDES = BlockCipher._createHelper(TripleDES);\n\t}());\n\n\n\treturn CryptoJS.TripleDES;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t /**\n\t * RC4 stream cipher algorithm.\n\t */\n\t var RC4 = C_algo.RC4 = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t var keySigBytes = key.sigBytes;\n\n\t // Init sbox\n\t var S = this._S = [];\n\t for (var i = 0; i < 256; i++) {\n\t S[i] = i;\n\t }\n\n\t // Key setup\n\t for (var i = 0, j = 0; i < 256; i++) {\n\t var keyByteIndex = i % keySigBytes;\n\t var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff;\n\n\t j = (j + S[i] + keyByte) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\t }\n\n\t // Counters\n\t this._i = this._j = 0;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t M[offset] ^= generateKeystreamWord.call(this);\n\t },\n\n\t keySize: 256/32,\n\n\t ivSize: 0\n\t });\n\n\t function generateKeystreamWord() {\n\t // Shortcuts\n\t var S = this._S;\n\t var i = this._i;\n\t var j = this._j;\n\n\t // Generate keystream word\n\t var keystreamWord = 0;\n\t for (var n = 0; n < 4; n++) {\n\t i = (i + 1) % 256;\n\t j = (j + S[i]) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\n\t keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8);\n\t }\n\n\t // Update counters\n\t this._i = i;\n\t this._j = j;\n\n\t return keystreamWord;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4 = StreamCipher._createHelper(RC4);\n\n\t /**\n\t * Modified RC4 stream cipher algorithm.\n\t */\n\t var RC4Drop = C_algo.RC4Drop = RC4.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} drop The number of keystream words to drop. Default 192\n\t */\n\t cfg: RC4.cfg.extend({\n\t drop: 192\n\t }),\n\n\t _doReset: function () {\n\t RC4._doReset.call(this);\n\n\t // Drop\n\t for (var i = this.cfg.drop; i > 0; i--) {\n\t generateKeystreamWord.call(this);\n\t }\n\t }\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4Drop = StreamCipher._createHelper(RC4Drop);\n\t}());\n\n\n\treturn CryptoJS.RC4;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t // Reusable objects\n\t var S = [];\n\t var C_ = [];\n\t var G = [];\n\n\t /**\n\t * Rabbit stream cipher algorithm\n\t */\n\t var Rabbit = C_algo.Rabbit = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var K = this._key.words;\n\t var iv = this.cfg.iv;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) |\n\t (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Generate initial state values\n\t var X = this._X = [\n\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);\n\t */\n\t C.Rabbit = StreamCipher._createHelper(Rabbit);\n\t}());\n\n\n\treturn CryptoJS.Rabbit;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t // Reusable objects\n\t var S = [];\n\t var C_ = [];\n\t var G = [];\n\n\t /**\n\t * Rabbit stream cipher algorithm.\n\t *\n\t * This is a legacy version that neglected to convert the key to little-endian.\n\t * This error doesn't affect the cipher's security,\n\t * but it does affect its compatibility with other implementations.\n\t */\n\t var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var K = this._key.words;\n\t var iv = this.cfg.iv;\n\n\t // Generate initial state values\n\t var X = this._X = [\n\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy);\n\t}());\n\n\n\treturn CryptoJS.RabbitLegacy;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t const N = 16;\n\n\t //Origin pbox and sbox, derived from PI\n\t const ORIG_P = [\n\t 0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344,\n\t 0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89,\n\t 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C,\n\t 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917,\n\t 0x9216D5D9, 0x8979FB1B\n\t ];\n\n\t const ORIG_S = [\n\t [ 0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7,\n\t 0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99,\n\t 0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16,\n\t 0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E,\n\t 0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE,\n\t 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013,\n\t 0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF,\n\t 0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E,\n\t 0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60,\n\t 0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440,\n\t 0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE,\n\t 0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A,\n\t 0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E,\n\t 0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677,\n\t 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193,\n\t 0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032,\n\t 0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88,\n\t 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239,\n\t 0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E,\n\t 0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0,\n\t 0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3,\n\t 0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98,\n\t 0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88,\n\t 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE,\n\t 0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6,\n\t 0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D,\n\t 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B,\n\t 0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7,\n\t 0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA,\n\t 0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463,\n\t 0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F,\n\t 0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09,\n\t 0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3,\n\t 0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB,\n\t 0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279,\n\t 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8,\n\t 0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB,\n\t 0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82,\n\t 0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB,\n\t 0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573,\n\t 0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0,\n\t 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B,\n\t 0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790,\n\t 0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8,\n\t 0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4,\n\t 0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0,\n\t 0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7,\n\t 0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C,\n\t 0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD,\n\t 0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1,\n\t 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299,\n\t 0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9,\n\t 0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477,\n\t 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF,\n\t 0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49,\n\t 0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF,\n\t 0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA,\n\t 0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5,\n\t 0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41,\n\t 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915,\n\t 0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400,\n\t 0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915,\n\t 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664,\n\t 0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A ],\n\t [ 0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623,\n\t 0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266,\n\t 0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1,\n\t 0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E,\n\t 0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6,\n\t 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1,\n\t 0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E,\n\t 0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1,\n\t 0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737,\n\t 0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8,\n\t 0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF,\n\t 0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD,\n\t 0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701,\n\t 0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7,\n\t 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41,\n\t 0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331,\n\t 0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF,\n\t 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF,\n\t 0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E,\n\t 0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87,\n\t 0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C,\n\t 0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2,\n\t 0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16,\n\t 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD,\n\t 0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B,\n\t 0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509,\n\t 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E,\n\t 0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3,\n\t 0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F,\n\t 0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A,\n\t 0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4,\n\t 0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960,\n\t 0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66,\n\t 0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28,\n\t 0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802,\n\t 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84,\n\t 0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510,\n\t 0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF,\n\t 0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14,\n\t 0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E,\n\t 0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50,\n\t 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7,\n\t 0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8,\n\t 0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281,\n\t 0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99,\n\t 0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696,\n\t 0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128,\n\t 0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73,\n\t 0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0,\n\t 0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0,\n\t 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105,\n\t 0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250,\n\t 0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3,\n\t 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285,\n\t 0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00,\n\t 0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061,\n\t 0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB,\n\t 0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E,\n\t 0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735,\n\t 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC,\n\t 0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9,\n\t 0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340,\n\t 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20,\n\t 0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7 ],\n\t [ 0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934,\n\t 0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068,\n\t 0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF,\n\t 0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840,\n\t 0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45,\n\t 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504,\n\t 0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A,\n\t 0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB,\n\t 0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE,\n\t 0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6,\n\t 0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42,\n\t 0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B,\n\t 0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2,\n\t 0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB,\n\t 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527,\n\t 0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B,\n\t 0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33,\n\t 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C,\n\t 0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3,\n\t 0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC,\n\t 0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17,\n\t 0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564,\n\t 0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B,\n\t 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115,\n\t 0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922,\n\t 0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728,\n\t 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0,\n\t 0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E,\n\t 0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37,\n\t 0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D,\n\t 0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804,\n\t 0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B,\n\t 0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3,\n\t 0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB,\n\t 0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D,\n\t 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C,\n\t 0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350,\n\t 0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9,\n\t 0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A,\n\t 0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE,\n\t 0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D,\n\t 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC,\n\t 0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F,\n\t 0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61,\n\t 0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2,\n\t 0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9,\n\t 0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2,\n\t 0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C,\n\t 0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E,\n\t 0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633,\n\t 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10,\n\t 0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169,\n\t 0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52,\n\t 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027,\n\t 0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5,\n\t 0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62,\n\t 0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634,\n\t 0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76,\n\t 0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24,\n\t 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC,\n\t 0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4,\n\t 0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C,\n\t 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837,\n\t 0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0 ],\n\t [ 0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B,\n\t 0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE,\n\t 0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B,\n\t 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4,\n\t 0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8,\n\t 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6,\n\t 0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304,\n\t 0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22,\n\t 0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4,\n\t 0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6,\n\t 0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9,\n\t 0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59,\n\t 0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593,\n\t 0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51,\n\t 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28,\n\t 0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C,\n\t 0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B,\n\t 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28,\n\t 0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C,\n\t 0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD,\n\t 0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A,\n\t 0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319,\n\t 0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB,\n\t 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F,\n\t 0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991,\n\t 0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32,\n\t 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680,\n\t 0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166,\n\t 0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE,\n\t 0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB,\n\t 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5,\n\t 0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47,\n\t 0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370,\n\t 0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D,\n\t 0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84,\n\t 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048,\n\t 0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8,\n\t 0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD,\n\t 0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9,\n\t 0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7,\n\t 0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38,\n\t 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F,\n\t 0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C,\n\t 0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525,\n\t 0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1,\n\t 0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442,\n\t 0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964,\n\t 0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E,\n\t 0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8,\n\t 0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D,\n\t 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F,\n\t 0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299,\n\t 0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02,\n\t 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC,\n\t 0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614,\n\t 0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A,\n\t 0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6,\n\t 0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B,\n\t 0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0,\n\t 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060,\n\t 0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E,\n\t 0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9,\n\t 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F,\n\t 0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6 ]\n\t ];\n\n\t var BLOWFISH_CTX = {\n\t pbox: [],\n\t sbox: []\n\t }\n\n\t function F(ctx, x){\n\t let a = (x >> 24) & 0xFF;\n\t let b = (x >> 16) & 0xFF;\n\t let c = (x >> 8) & 0xFF;\n\t let d = x & 0xFF;\n\n\t let y = ctx.sbox[0][a] + ctx.sbox[1][b];\n\t y = y ^ ctx.sbox[2][c];\n\t y = y + ctx.sbox[3][d];\n\n\t return y;\n\t }\n\n\t function BlowFish_Encrypt(ctx, left, right){\n\t let Xl = left;\n\t let Xr = right;\n\t let temp;\n\n\t for(let i = 0; i < N; ++i){\n\t Xl = Xl ^ ctx.pbox[i];\n\t Xr = F(ctx, Xl) ^ Xr;\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\t }\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\n\t Xr = Xr ^ ctx.pbox[N];\n\t Xl = Xl ^ ctx.pbox[N + 1];\n\n\t return {left: Xl, right: Xr};\n\t }\n\n\t function BlowFish_Decrypt(ctx, left, right){\n\t let Xl = left;\n\t let Xr = right;\n\t let temp;\n\n\t for(let i = N + 1; i > 1; --i){\n\t Xl = Xl ^ ctx.pbox[i];\n\t Xr = F(ctx, Xl) ^ Xr;\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\t }\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\n\t Xr = Xr ^ ctx.pbox[1];\n\t Xl = Xl ^ ctx.pbox[0];\n\n\t return {left: Xl, right: Xr};\n\t }\n\n\t /**\n\t * Initialization ctx's pbox and sbox.\n\t *\n\t * @param {Object} ctx The object has pbox and sbox.\n\t * @param {Array} key An array of 32-bit words.\n\t * @param {int} keysize The length of the key.\n\t *\n\t * @example\n\t *\n\t * BlowFishInit(BLOWFISH_CTX, key, 128/32);\n\t */\n\t function BlowFishInit(ctx, key, keysize)\n\t {\n\t for(let Row = 0; Row < 4; Row++)\n\t {\n\t ctx.sbox[Row] = [];\n\t for(let Col = 0; Col < 256; Col++)\n\t {\n\t ctx.sbox[Row][Col] = ORIG_S[Row][Col];\n\t }\n\t }\n\n\t let keyIndex = 0;\n\t for(let index = 0; index < N + 2; index++)\n\t {\n\t ctx.pbox[index] = ORIG_P[index] ^ key[keyIndex];\n\t keyIndex++;\n\t if(keyIndex >= keysize)\n\t {\n\t keyIndex = 0;\n\t }\n\t }\n\n\t let Data1 = 0;\n\t let Data2 = 0;\n\t let res = 0;\n\t for(let i = 0; i < N + 2; i += 2)\n\t {\n\t res = BlowFish_Encrypt(ctx, Data1, Data2);\n\t Data1 = res.left;\n\t Data2 = res.right;\n\t ctx.pbox[i] = Data1;\n\t ctx.pbox[i + 1] = Data2;\n\t }\n\n\t for(let i = 0; i < 4; i++)\n\t {\n\t for(let j = 0; j < 256; j += 2)\n\t {\n\t res = BlowFish_Encrypt(ctx, Data1, Data2);\n\t Data1 = res.left;\n\t Data2 = res.right;\n\t ctx.sbox[i][j] = Data1;\n\t ctx.sbox[i][j + 1] = Data2;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t /**\n\t * Blowfish block cipher algorithm.\n\t */\n\t var Blowfish = C_algo.Blowfish = BlockCipher.extend({\n\t _doReset: function () {\n\t // Skip reset of nRounds has been set before and key did not change\n\t if (this._keyPriorReset === this._key) {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var key = this._keyPriorReset = this._key;\n\t var keyWords = key.words;\n\t var keySize = key.sigBytes / 4;\n\n\t //Initialization pbox and sbox\n\t BlowFishInit(BLOWFISH_CTX, keyWords, keySize);\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t var res = BlowFish_Encrypt(BLOWFISH_CTX, M[offset], M[offset + 1]);\n\t M[offset] = res.left;\n\t M[offset + 1] = res.right;\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t var res = BlowFish_Decrypt(BLOWFISH_CTX, M[offset], M[offset + 1]);\n\t M[offset] = res.left;\n\t M[offset + 1] = res.right;\n\t },\n\n\t blockSize: 64/32,\n\n\t keySize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.Blowfish.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.Blowfish.decrypt(ciphertext, key, cfg);\n\t */\n\t C.Blowfish = BlockCipher._createHelper(Blowfish);\n\t}());\n\n\n\treturn CryptoJS.Blowfish;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"), require(\"./lib-typedarrays\"), require(\"./enc-utf16\"), require(\"./enc-base64\"), require(\"./enc-base64url\"), require(\"./md5\"), require(\"./sha1\"), require(\"./sha256\"), require(\"./sha224\"), require(\"./sha512\"), require(\"./sha384\"), require(\"./sha3\"), require(\"./ripemd160\"), require(\"./hmac\"), require(\"./pbkdf2\"), require(\"./evpkdf\"), require(\"./cipher-core\"), require(\"./mode-cfb\"), require(\"./mode-ctr\"), require(\"./mode-ctr-gladman\"), require(\"./mode-ofb\"), require(\"./mode-ecb\"), require(\"./pad-ansix923\"), require(\"./pad-iso10126\"), require(\"./pad-iso97971\"), require(\"./pad-zeropadding\"), require(\"./pad-nopadding\"), require(\"./format-hex\"), require(\"./aes\"), require(\"./tripledes\"), require(\"./rc4\"), require(\"./rabbit\"), require(\"./rabbit-legacy\"), require(\"./blowfish\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\", \"./lib-typedarrays\", \"./enc-utf16\", \"./enc-base64\", \"./enc-base64url\", \"./md5\", \"./sha1\", \"./sha256\", \"./sha224\", \"./sha512\", \"./sha384\", \"./sha3\", \"./ripemd160\", \"./hmac\", \"./pbkdf2\", \"./evpkdf\", \"./cipher-core\", \"./mode-cfb\", \"./mode-ctr\", \"./mode-ctr-gladman\", \"./mode-ofb\", \"./mode-ecb\", \"./pad-ansix923\", \"./pad-iso10126\", \"./pad-iso97971\", \"./pad-zeropadding\", \"./pad-nopadding\", \"./format-hex\", \"./aes\", \"./tripledes\", \"./rc4\", \"./rabbit\", \"./rabbit-legacy\", \"./blowfish\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\treturn CryptoJS;\n\n}));","/**\n * Debug Logger pour @ollaid/native-sso\n * Stocke l'historique des appels API en mémoire pour le DebugPanel\n * @version 2.7.0\n */\n\nexport interface ApiCallLog {\n id: string;\n timestamp: string;\n method: 'GET' | 'POST' | 'PUT' | 'DELETE';\n endpoint: string;\n requestBody: unknown;\n requestHeaders?: Record<string, string>;\n responseStatus: number | null;\n responseBody: unknown;\n duration: number;\n error?: string;\n}\n\nconst MAX_LOGS = 50;\nlet apiLogs: ApiCallLog[] = [];\nlet listeners: ((logs: ApiCallLog[]) => void)[] = [];\n\nconst REDACTED = '[redacted]';\n\nfunction isSensitiveKey(key: string): boolean {\n const normalized = key.toLowerCase();\n return (\n normalized.includes('token') ||\n normalized.includes('password') ||\n normalized.includes('secret') ||\n normalized.includes('authorization') ||\n normalized.includes('otp') ||\n normalized.includes('code') ||\n normalized.includes('cookie') ||\n normalized.includes('credential') ||\n normalized.includes('app_access') ||\n normalized.includes('sanctum')\n );\n}\n\nfunction sanitizeValue(value: unknown, keyHint = ''): unknown {\n if (value === null || value === undefined) return value;\n if (typeof value === 'string') {\n if (keyHint && isSensitiveKey(keyHint)) return REDACTED;\n if (/^Bearer\\s+/i.test(value)) return REDACTED;\n if (/^[0-9]+\\|[A-Za-z0-9]/.test(value)) return REDACTED;\n return value;\n }\n if (typeof value !== 'object') return value;\n if (Array.isArray(value)) return value.map(item => sanitizeValue(item));\n\n const input = value as Record<string, unknown>;\n const output: Record<string, unknown> = {};\n for (const [key, child] of Object.entries(input)) {\n output[key] = isSensitiveKey(key) ? REDACTED : sanitizeValue(child, key);\n }\n return output;\n}\n\nfunction notifyListeners() {\n listeners.forEach(fn => fn([...apiLogs]));\n}\n\nexport function logApiCall(\n method: ApiCallLog['method'],\n endpoint: string,\n requestBody: unknown,\n requestHeaders?: Record<string, string>\n): string {\n const id = `${Date.now()}-${Math.random().toString(36).substring(2, 7)}`;\n const log: ApiCallLog = {\n id,\n timestamp: new Date().toISOString(),\n method,\n endpoint,\n requestBody: sanitizeValue(requestBody),\n requestHeaders: requestHeaders ? (sanitizeValue(requestHeaders) as Record<string, string>) : undefined,\n responseStatus: null,\n responseBody: null,\n duration: 0,\n };\n\n apiLogs.unshift(log);\n if (apiLogs.length > MAX_LOGS) {\n apiLogs = apiLogs.slice(0, MAX_LOGS);\n }\n notifyListeners();\n return id;\n}\n\nexport function logApiResponse(\n logId: string,\n responseStatus: number,\n responseBody: unknown,\n startTime: number,\n error?: string\n): void {\n const log = apiLogs.find(l => l.id === logId);\n if (log) {\n log.responseStatus = responseStatus;\n log.responseBody = sanitizeValue(responseBody);\n log.duration = Date.now() - startTime;\n log.error = error;\n notifyListeners();\n }\n}\n\nexport function getApiLogs(): ApiCallLog[] {\n return [...apiLogs];\n}\n\nexport function clearApiLogs(): void {\n apiLogs = [];\n notifyListeners();\n}\n\nexport function subscribeToLogs(callback: (logs: ApiCallLog[]) => void): () => void {\n listeners.push(callback);\n return () => {\n listeners = listeners.filter(fn => fn !== callback);\n };\n}\n\nexport function exportLogsAsText(): string {\n if (apiLogs.length === 0) return 'Aucun appel API enregistré.';\n\n const lines: string[] = [\n '='.repeat(60),\n 'NATIVE SSO DEBUG LOGS',\n `Exporté le: ${new Date().toISOString()}`,\n '='.repeat(60),\n '',\n ];\n\n apiLogs.slice().reverse().forEach((log, index) => {\n const emoji = log.responseStatus === null ? '⏳' : (log.responseStatus >= 200 && log.responseStatus < 300 ? '✅' : '❌');\n lines.push(`[${index + 1}] ${emoji} ${log.method} ${log.endpoint}`);\n lines.push(` Status: ${log.responseStatus ?? 'En cours...'} | Durée: ${log.duration}ms`);\n if (log.requestBody) lines.push(` Request: ${JSON.stringify(log.requestBody)}`);\n if (log.responseBody) lines.push(` Response: ${JSON.stringify(log.responseBody)}`);\n if (log.error) lines.push(` ⚠️ Error: ${log.error}`);\n lines.push('');\n });\n\n return lines.join('\\n');\n}\n","/**\n * Client API pour @ollaid/native-sso\n * Gestion des requêtes HTTP avec timeout, device ID, token storage\n *\n * @version 2.7.0\n */\n\nimport * as CryptoJS from 'crypto-js';\nimport { logApiCall, logApiResponse } from './debugLogger';\n\n// ============================================\n// Types d'erreur\n// ============================================\n\nexport type ApiErrorType = 'network' | 'timeout' | 'server' | 'validation' | 'auth' | 'unknown';\n\nexport class ApiError extends Error {\n type: ApiErrorType;\n statusCode?: number;\n errorType?: string;\n response?: unknown;\n\n constructor(\n message: string,\n type: ApiErrorType,\n statusCode?: number,\n errorType?: string,\n response?: unknown\n ) {\n super(message);\n this.name = 'ApiError';\n this.type = type;\n this.statusCode = statusCode;\n this.errorType = errorType;\n this.response = response;\n }\n}\n\n// ============================================\n// Configuration\n// ============================================\n\nexport interface NativeAuthConfig {\n /** URL du Backend SaaS (pour config et exchange) */\n saasApiUrl: string;\n /** URL du Backend IAM (pour encrypt, init, validate, etc.) */\n iamApiUrl: string;\n /** Timeout en ms (défaut: 30000) */\n timeout?: number;\n /** Mode debug (logs console) */\n debug?: boolean;\n /** \n * Préfixe de configuration IAM côté backend (défaut: 'iam').\n * Permet le multi-tenant : chaque frontend envoie son préfixe\n * pour que le backend SaaS lise le bon bloc config/services.php.\n * Ex: 'iam', 'iam_vendor', 'iam_client', 'iam_admin'\n */\n configPrefix?: string;\n /**\n * Stockage session injectable.\n * Défaut: localStorage en navigateur, mémoire en fallback.\n * Utile pour Capacitor ou des wrappers secure-storage côté app consommatrice.\n */\n storage?: NativeStorageAdapter;\n}\n\nlet config: NativeAuthConfig = {\n saasApiUrl: '',\n iamApiUrl: '',\n timeout: 30000,\n debug: false,\n configPrefix: 'iam',\n};\n\nexport interface NativeStorageAdapter {\n getItem(key: string): string | null;\n setItem(key: string, value: string): void;\n removeItem(key: string): void;\n clear(): void;\n}\n\nconst memoryStorage = (): NativeStorageAdapter => {\n const state = new Map<string, string>();\n return {\n getItem: (key) => (state.has(key) ? state.get(key)! : null),\n setItem: (key, value) => {\n state.set(key, value);\n },\n removeItem: (key) => {\n state.delete(key);\n },\n clear: () => {\n state.clear();\n },\n };\n};\n\nconst STORAGE_ENCRYPTION_PREFIX = 'enc:v1:';\nconst STORAGE_ENCRYPTION_SECRET_PREFIX = 'ollaid-native-sso::storage::v1';\n\nconst RAW_STORAGE_KEYS = new Set<string>([\n 'sso_storage_seed',\n]);\n\nconst STORAGE_PREFIX = 'sso_';\n\nconst LEGACY_STORAGE_KEYS: Record<string, string> = {\n sso_auth_token: 'auth_token',\n sso_token: 'token',\n sso_user: 'user',\n sso_account_type: 'account_type',\n sso_alias_reference: 'alias_reference',\n sso_app_access_token_ref: 'app_access_token_ref',\n sso_refresh_token: 'refresh_token',\n sso_token_expires_at: 'token_expires_at',\n sso_refresh_expires_at: 'refresh_expires_at',\n sso_device_id: 'native_sso_device_id',\n sso_session_uuid: 'native_sso_session_uuid',\n sso_image_last_status: 'sso_image_last_status',\n sso_image_last_check: 'sso_image_last_check',\n sso_image_recheck_at: 'sso_image_recheck_at',\n};\n\nfunction resolveBaseStorage(): NativeStorageAdapter {\n if (typeof localStorage !== 'undefined') {\n return {\n getItem: (key) => localStorage.getItem(key),\n setItem: (key, value) => localStorage.setItem(key, value),\n removeItem: (key) => localStorage.removeItem(key),\n clear: () => localStorage.clear(),\n };\n }\n return memoryStorage();\n}\n\nlet rawStorageAdapter: NativeStorageAdapter = resolveBaseStorage();\nlet storageAdapter: NativeStorageAdapter = createEncryptedStorageAdapter(rawStorageAdapter);\n\nfunction isRawStorageKey(key: string): boolean {\n return RAW_STORAGE_KEYS.has(key);\n}\n\nfunction getLegacyStorageKey(key: string): string | null {\n return LEGACY_STORAGE_KEYS[key] || null;\n}\n\nfunction migrateLegacyValue(base: NativeStorageAdapter, key: string, legacyKey: string, rawValue: string): string {\n base.setItem(key, encryptStorageValue(rawValue));\n base.removeItem(legacyKey);\n return rawValue;\n}\n\nfunction getStorageEncryptionSecret(): string {\n const storage = rawStorageAdapter;\n let seed = storage.getItem('native_sso_storage_seed');\n\n if (!seed) {\n seed = `seed_${Date.now()}_${Math.random().toString(36).substring(2, 15)}_${Math.random().toString(36).substring(2, 15)}`;\n storage.setItem('native_sso_storage_seed', seed);\n }\n\n const origin = typeof window !== 'undefined' && window.location?.origin\n ? window.location.origin\n : 'unknown-origin';\n const prefix = config.configPrefix || 'iam';\n\n return `${STORAGE_ENCRYPTION_SECRET_PREFIX}::${origin}::${prefix}::${seed}`;\n}\n\nfunction encryptStorageValue(value: string): string {\n const secret = getStorageEncryptionSecret();\n const ciphertext = CryptoJS.AES.encrypt(value, secret).toString();\n return `${STORAGE_ENCRYPTION_PREFIX}${ciphertext}`;\n}\n\nfunction decryptStorageValue(value: string): string | null {\n if (!value.startsWith(STORAGE_ENCRYPTION_PREFIX)) {\n return value;\n }\n\n const secret = getStorageEncryptionSecret();\n const ciphertext = value.slice(STORAGE_ENCRYPTION_PREFIX.length);\n\n try {\n const bytes = CryptoJS.AES.decrypt(ciphertext, secret);\n const plaintext = bytes.toString(CryptoJS.enc.Utf8);\n return plaintext || null;\n } catch {\n return null;\n }\n}\n\nfunction createEncryptedStorageAdapter(base: NativeStorageAdapter): NativeStorageAdapter {\n return {\n getItem: (key) => {\n const rawValue = base.getItem(key);\n if (rawValue !== null) {\n if (isRawStorageKey(key)) {\n return rawValue;\n }\n\n const decrypted = decryptStorageValue(rawValue);\n if (decrypted !== null) {\n return decrypted;\n }\n\n if (rawValue.length > 0) {\n base.setItem(key, encryptStorageValue(rawValue));\n }\n\n return rawValue;\n }\n\n const legacyKey = getLegacyStorageKey(key);\n if (!legacyKey) {\n return null;\n }\n\n const legacyValue = base.getItem(legacyKey);\n if (legacyValue === null) {\n return null;\n }\n\n if (isRawStorageKey(key)) {\n base.setItem(key, legacyValue);\n base.removeItem(legacyKey);\n return legacyValue;\n }\n\n return migrateLegacyValue(base, key, legacyKey, legacyValue);\n },\n setItem: (key, value) => {\n if (isRawStorageKey(key)) {\n base.setItem(key, value);\n return;\n }\n\n base.setItem(key, encryptStorageValue(value));\n const legacyKey = getLegacyStorageKey(key);\n if (legacyKey) {\n base.removeItem(legacyKey);\n }\n },\n removeItem: (key) => {\n base.removeItem(key);\n const legacyKey = getLegacyStorageKey(key);\n if (legacyKey) {\n base.removeItem(legacyKey);\n }\n },\n clear: () => {\n base.clear();\n },\n };\n}\n\nexport function setNativeStorage(adapter?: NativeStorageAdapter): void {\n rawStorageAdapter = adapter ?? resolveBaseStorage();\n storageAdapter = createEncryptedStorageAdapter(rawStorageAdapter);\n}\n\nexport function getNativeStorage(): NativeStorageAdapter {\n return storageAdapter;\n}\n\nexport const setNativeAuthConfig = (newConfig: Partial<NativeAuthConfig>): void => {\n config = { ...config, ...newConfig };\n if (newConfig.storage) {\n setNativeStorage(newConfig.storage);\n } else if (!config.storage) {\n setNativeStorage();\n }\n \n if (config.debug) {\n console.log('🔐 @ollaid/native-sso Config:', {\n saasApiUrl: config.saasApiUrl,\n iamApiUrl: config.iamApiUrl,\n });\n }\n};\n\nexport const getNativeAuthConfig = (): NativeAuthConfig => ({ ...config });\n\nexport const isDebugMode = (): boolean => config.debug === true;\n\nexport const getSaasApiBaseUrl = (): string => {\n if (!config.saasApiUrl) {\n throw new ApiError('saasApiUrl non configurée', 'unknown');\n }\n return config.saasApiUrl;\n};\n\nexport const getIamApiBaseUrl = (): string => {\n if (!config.iamApiUrl) {\n throw new ApiError('iamApiUrl non configurée', 'unknown');\n }\n return config.iamApiUrl;\n};\n\n// ============================================\n// Device ID\n// ============================================\n\nconst DEVICE_ID_KEY = 'sso_device_id';\nconst SESSION_UUID_KEY = 'sso_session_uuid';\n\nfunction generateUuid(): string {\n // Prefer native UUID when available (modern browsers / webviews).\n // Fallback is not cryptographically strong, but good enough as a stable instance id.\n const globalCrypto = typeof globalThis !== 'undefined' ? globalThis.crypto : undefined;\n if (globalCrypto && typeof globalCrypto.randomUUID === 'function') {\n return globalCrypto.randomUUID();\n }\n return `uuid_${Date.now()}_${Math.random().toString(36).slice(2)}_${Math.random().toString(36).slice(2)}`;\n}\n\nexport const getDeviceId = (): string => {\n const storage = getNativeStorage();\n let deviceId = storage.getItem(DEVICE_ID_KEY);\n if (!deviceId) {\n deviceId = `nat_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;\n storage.setItem(DEVICE_ID_KEY, deviceId);\n }\n return deviceId;\n};\n\n/**\n * Stable session UUID (instance id) persisted in localStorage.\n *\n * This is NOT a security token. It is used to disambiguate sessions across devices/webviews\n * and to help backends implement multi-session behavior safely.\n */\nexport const getSessionUuid = (): string => {\n const storage = getNativeStorage();\n let uuid = storage.getItem(SESSION_UUID_KEY);\n if (!uuid) {\n uuid = generateUuid();\n storage.setItem(SESSION_UUID_KEY, uuid);\n }\n return uuid;\n};\n\n// ============================================\n// Device context (Capacitor)\n// ============================================\n\nexport interface NativeDeviceContext {\n deviceName?: string | null;\n deviceModel?: string | null;\n deviceManufacturer?: string | null;\n operatingSystem?: string | null;\n osVersion?: string | null;\n platform?: string | null;\n browser?: string | null;\n language?: string | null;\n webviewVersion?: string | null;\n isNative?: boolean | null;\n label?: string | null;\n}\n\nlet deviceContext: NativeDeviceContext | null = null;\nlet deviceContextPromise: Promise<NativeDeviceContext | null> | null = null;\n\nfunction inferBrowserFromUserAgent(userAgent?: string | null): string | null {\n if (!userAgent) return null;\n if (userAgent.includes('Firefox')) return 'Firefox';\n if (userAgent.includes('Edg')) return 'Edge';\n if (userAgent.includes('Chrome')) return 'Chrome';\n if (userAgent.includes('Safari')) return 'Safari';\n if (userAgent.includes('Opera') || userAgent.includes('OPR')) return 'Opera';\n return null;\n}\n\nfunction buildDeviceLabel(context: NativeDeviceContext): string {\n const parts = [\n context.deviceName,\n context.deviceManufacturer,\n context.deviceModel,\n context.operatingSystem && context.osVersion\n ? `${context.operatingSystem} ${context.osVersion}`\n : context.operatingSystem,\n ].filter(Boolean) as string[];\n\n if (parts.length > 0) {\n return parts.join(' ');\n }\n\n if (context.browser || context.platform) {\n return `${context.browser || 'Appareil'} - ${context.platform || 'mobile'}`;\n }\n\n return 'Appareil mobile';\n}\n\nasync function loadDeviceContext(): Promise<NativeDeviceContext | null> {\n if (typeof window === 'undefined') {\n return null;\n }\n\n try {\n const { Device } = await import('@capacitor/device');\n const info = await Device.getInfo();\n const languageResult = await Device.getLanguageCode().catch(() => null) as { value?: string } | null;\n const userAgent = typeof navigator !== 'undefined' ? navigator.userAgent : null;\n const context: NativeDeviceContext = {\n deviceName: info.name ?? null,\n deviceModel: info.model ?? null,\n deviceManufacturer: info.manufacturer ?? null,\n operatingSystem: info.operatingSystem ?? null,\n osVersion: info.osVersion ?? null,\n platform: info.platform ?? null,\n browser: inferBrowserFromUserAgent(userAgent),\n language: languageResult?.value ?? (typeof navigator !== 'undefined' ? navigator.language : null),\n webviewVersion: (info as { webViewVersion?: string }).webViewVersion ?? null,\n isNative: info.platform ? info.platform !== 'web' : null,\n label: '',\n };\n\n context.label = buildDeviceLabel(context);\n deviceContext = context;\n return context;\n } catch {\n return null;\n }\n}\n\nexport async function ensureDeviceContext(): Promise<NativeDeviceContext | null> {\n if (deviceContext) {\n return deviceContext;\n }\n\n if (!deviceContextPromise) {\n deviceContextPromise = loadDeviceContext().finally(() => {\n deviceContextPromise = null;\n });\n }\n\n return deviceContextPromise;\n}\n\n// ============================================\n// Token storage (clés unifiées avec Web SSO)\n// ============================================\n\nconst STORAGE = {\n AUTH_TOKEN: 'sso_auth_token',\n TOKEN: 'sso_token',\n USER: 'sso_user',\n ACCOUNT_TYPE: 'sso_account_type',\n ALIAS_REFERENCE: 'sso_alias_reference',\n APP_ACCESS_TOKEN_REF: 'sso_app_access_token_ref',\n REFRESH_TOKEN: 'sso_refresh_token',\n TOKEN_EXPIRES_AT: 'sso_token_expires_at',\n REFRESH_EXPIRES_AT: 'sso_refresh_expires_at',\n} as const;\n\nconst PROFILE_STORAGE = {\n IMAGE_LAST_STATUS: 'sso_image_last_status',\n IMAGE_LAST_CHECK: 'sso_image_last_check',\n IMAGE_RECHECK_AT: 'sso_image_recheck_at',\n} as const;\n\nexport interface SsoSessionSnapshot<TUser = unknown> {\n authToken: string | null;\n refreshToken: string | null;\n refreshExpiresAt: string | null;\n tokenExpiresAt: string | null;\n appAccessTokenRef: string | null;\n aliasReference: string | null;\n accountType: string | null;\n deviceId: string | null;\n sessionUuid: string | null;\n user: TUser | null;\n}\n\nexport const setAuthToken = (token: string): void => {\n const storage = getNativeStorage();\n storage.setItem(STORAGE.AUTH_TOKEN, token);\n};\n\nexport const getAuthToken = (): string | null => {\n const storage = getNativeStorage();\n return storage.getItem(STORAGE.AUTH_TOKEN) || storage.getItem(STORAGE.TOKEN);\n};\n\n/**\n * @deprecated Utilisez `logout()` à la place. `clearAuthToken()` ne fait que nettoyer\n * le localStorage sans révoquer les sessions côté SaaS et IAM, ce qui laisse des\n * sessions orphelines actives. `logout()` garantit la double revocation complète.\n */\nexport const clearAuthToken = (): void => {\n const storage = getNativeStorage();\n storage.removeItem(STORAGE.AUTH_TOKEN);\n storage.removeItem(STORAGE.TOKEN);\n storage.removeItem(STORAGE.USER);\n storage.removeItem(STORAGE.ACCOUNT_TYPE);\n storage.removeItem(STORAGE.ALIAS_REFERENCE);\n storage.removeItem(STORAGE.APP_ACCESS_TOKEN_REF);\n storage.removeItem(STORAGE.REFRESH_TOKEN);\n storage.removeItem(STORAGE.TOKEN_EXPIRES_AT);\n storage.removeItem(STORAGE.REFRESH_EXPIRES_AT);\n};\n\n/**\n * Déconnexion complète et sécurisée.\n * \n * Effectue la double revocation (SaaS + IAM) puis nettoie le localStorage.\n * **Toute déconnexion frontend DOIT passer par cette fonction** pour éviter\n * les sessions orphelines sur l'IAM.\n * \n * @example\n * ```tsx\n * import { logout } from '@ollaid/native-sso';\n * \n * const handleLogout = async () => {\n * await logout();\n * navigate('/auth/login');\n * };\n * ```\n */\nexport const logout = async (): Promise<{ success: boolean }> => {\n // Import dynamique pour éviter les dépendances circulaires\n const { nativeAuthService } = await import('./nativeAuth');\n const token = getAuthToken();\n return nativeAuthService.logout(token || undefined);\n};\n\nexport const setAuthUser = (user: unknown): void => {\n getNativeStorage().setItem(STORAGE.USER, JSON.stringify(user));\n};\n\nexport const getAuthUser = <T>(): T | null => {\n const user = getNativeStorage().getItem(STORAGE.USER);\n if (!user) return null;\n try {\n return JSON.parse(user);\n } catch {\n getNativeStorage().removeItem(STORAGE.USER);\n return null;\n }\n};\n\nexport const setAccountType = (type: string): void => {\n getNativeStorage().setItem(STORAGE.ACCOUNT_TYPE, type);\n};\n\nexport const getAccountType = (): string | null => {\n return getNativeStorage().getItem(STORAGE.ACCOUNT_TYPE);\n};\n\nexport function getSsoSessionSnapshot<TUser = unknown>(): SsoSessionSnapshot<TUser> {\n const storage = getNativeStorage();\n const userRaw = storage.getItem(STORAGE.USER);\n let user: TUser | null = null;\n\n if (userRaw) {\n try {\n user = JSON.parse(userRaw) as TUser;\n } catch {\n user = null;\n }\n }\n\n return {\n authToken: getAuthToken(),\n refreshToken: storage.getItem(STORAGE.REFRESH_TOKEN),\n refreshExpiresAt: storage.getItem(STORAGE.REFRESH_EXPIRES_AT),\n tokenExpiresAt: storage.getItem(STORAGE.TOKEN_EXPIRES_AT),\n appAccessTokenRef: storage.getItem(STORAGE.APP_ACCESS_TOKEN_REF),\n aliasReference: storage.getItem(STORAGE.ALIAS_REFERENCE),\n accountType: storage.getItem(STORAGE.ACCOUNT_TYPE),\n deviceId: storage.getItem(DEVICE_ID_KEY),\n sessionUuid: storage.getItem(SESSION_UUID_KEY),\n user,\n };\n}\n\nexport function hasSsoSession(): boolean {\n const snapshot = getSsoSessionSnapshot();\n return Boolean(snapshot.authToken && snapshot.user);\n}\n\nexport { STORAGE as STORAGE_KEYS };\nexport { PROFILE_STORAGE as PROFILE_PROMPT_KEYS };\n\nexport interface ProfilePromptState {\n lastStatus: boolean | null;\n lastCheckAt: number | null;\n recheckAt: number | null;\n}\n\nexport function getProfilePromptState(): ProfilePromptState {\n const storage = getNativeStorage();\n const lastStatusRaw = storage.getItem(PROFILE_STORAGE.IMAGE_LAST_STATUS);\n const lastCheckRaw = storage.getItem(PROFILE_STORAGE.IMAGE_LAST_CHECK);\n const recheckRaw = storage.getItem(PROFILE_STORAGE.IMAGE_RECHECK_AT);\n\n const parseTs = (value: string | null): number | null => {\n if (!value) return null;\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : null;\n };\n\n return {\n lastStatus: lastStatusRaw === null ? null : lastStatusRaw === 'true',\n lastCheckAt: parseTs(lastCheckRaw),\n recheckAt: parseTs(recheckRaw),\n };\n}\n\nexport function setProfilePromptState(status: boolean, recheckAt: number | null = null): void {\n const storage = getNativeStorage();\n storage.setItem(PROFILE_STORAGE.IMAGE_LAST_STATUS, status ? 'true' : 'false');\n storage.setItem(PROFILE_STORAGE.IMAGE_LAST_CHECK, String(Date.now()));\n\n if (recheckAt && Number.isFinite(recheckAt)) {\n storage.setItem(PROFILE_STORAGE.IMAGE_RECHECK_AT, String(recheckAt));\n } else {\n storage.removeItem(PROFILE_STORAGE.IMAGE_RECHECK_AT);\n }\n}\n\nexport function markProfilePromptComplete(): void {\n setProfilePromptState(true, null);\n}\n\nexport function snoozeProfilePrompt(hours = 8): void {\n setProfilePromptState(false, Date.now() + hours * 60 * 60 * 1000);\n}\n\n// ============================================\n// Fetch helper\n// ============================================\n\nexport async function fetchWithTimeout<T>(\n url: string,\n options: RequestInit,\n timeout: number\n): Promise<T> {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n const method = (options.method as 'GET' | 'POST' | 'PUT' | 'DELETE') || 'GET';\n let parsedBody: unknown = undefined;\n if (typeof options.body === 'string') {\n try {\n parsedBody = JSON.parse(options.body);\n } catch {\n parsedBody = options.body;\n }\n }\n const logId = isDebugMode() ? logApiCall(method, url, parsedBody) : null;\n const startTime = Date.now();\n\n try {\n const response = await fetch(url, {\n ...options,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n const contentType = response.headers.get('content-type');\n if (!contentType?.includes('application/json')) {\n await response.text();\n if (isDebugMode()) {\n console.error('❌ Réponse non-JSON:', response.status);\n if (logId) logApiResponse(logId, response.status, { raw: '[non-json response]' }, startTime, 'Non-JSON response');\n }\n throw new ApiError(`Erreur serveur (${response.status})`, 'server', response.status);\n }\n\n const data = await response.json();\n\n if (!response.ok) {\n if (logId) logApiResponse(logId, response.status, data, startTime, data.message);\n throw new ApiError(\n data.message || `Erreur ${response.status}`,\n response.status === 401 ? 'auth' : response.status >= 500 ? 'server' : 'validation',\n response.status,\n data.error_type,\n data\n );\n }\n\n if (logId) logApiResponse(logId, response.status, data, startTime);\n return data;\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof ApiError) throw error;\n\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n if (logId) logApiResponse(logId, 0, null, startTime, 'Timeout');\n throw new ApiError('Délai d\\'attente dépassé', 'timeout');\n }\n if (error instanceof TypeError) {\n if (logId) logApiResponse(logId, 0, null, startTime, 'Network error');\n throw new ApiError('Impossible de contacter le serveur', 'network');\n }\n }\n\n if (logId) logApiResponse(logId, 0, null, startTime, 'Unknown error');\n throw new ApiError('Erreur inattendue', 'unknown');\n }\n}\n\nexport function getHeaders(token?: string, includeConfigPrefix = false): HeadersInit {\n const headers: HeadersInit = {\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n };\n\n const deviceId = getDeviceId();\n if (deviceId) {\n headers['X-Device-Id'] = deviceId;\n }\n\n const sessionUuid = getSessionUuid();\n if (sessionUuid) {\n headers['X-Session-UUID'] = sessionUuid;\n }\n\n if (deviceContext?.label) {\n headers['X-Device-Label'] = deviceContext.label;\n }\n if (deviceContext?.browser) {\n headers['X-Device-Browser'] = deviceContext.browser;\n }\n if (deviceContext?.deviceName) {\n headers['X-Device-Name'] = deviceContext.deviceName;\n }\n if (deviceContext?.deviceModel) {\n headers['X-Device-Model'] = deviceContext.deviceModel;\n }\n if (deviceContext?.deviceManufacturer) {\n headers['X-Device-Manufacturer'] = deviceContext.deviceManufacturer;\n }\n if (deviceContext?.operatingSystem) {\n headers['X-Device-Operating-System'] = deviceContext.operatingSystem;\n }\n if (deviceContext?.osVersion) {\n headers['X-Device-Os-Version'] = deviceContext.osVersion;\n }\n if (deviceContext?.platform) {\n headers['X-Device-Platform'] = deviceContext.platform;\n }\n if (deviceContext?.language) {\n headers['X-Device-Language'] = deviceContext.language;\n }\n if (deviceContext?.webviewVersion) {\n headers['X-Device-WebView-Version'] = deviceContext.webviewVersion;\n }\n if (typeof deviceContext?.isNative === 'boolean') {\n headers['X-Device-Is-Native'] = deviceContext.isNative ? 'true' : 'false';\n }\n\n const appAccessTokenRef = getNativeStorage().getItem(STORAGE.APP_ACCESS_TOKEN_REF);\n if (appAccessTokenRef) {\n headers['X-App-Access-Token-Ref'] = appAccessTokenRef;\n }\n\n // Multi-tenant: envoyer le préfixe de config au backend SaaS\n if (includeConfigPrefix && config.configPrefix) {\n headers['X-IAM-Config-Prefix'] = config.configPrefix;\n }\n\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n\n return headers;\n}\n\nexport default {\n getConfig: getNativeAuthConfig,\n setConfig: setNativeAuthConfig,\n};\n","/**\n * Service d'authentification Native Mobile SSO v1.0\n * Architecture Frontend-First : Direct IAM après encryption\n * \n * @version 2.7.0\n */\n\nimport { \n ApiError, \n fetchWithTimeout,\n getHeaders,\n getDeviceId,\n getNativeStorage,\n ensureDeviceContext,\n setAuthToken,\n setAuthUser,\n clearAuthToken,\n getNativeAuthConfig,\n setNativeAuthConfig,\n isDebugMode,\n STORAGE_KEYS,\n} from './api';\n\nimport type {\n NativeAuthType,\n NativeEncryptRequest,\n NativeEncryptResponse,\n NativeInitResponse,\n NativeValidateResponse,\n NativeGrantAccessResponse,\n NativeResendOtpResponse,\n NativeExchangeResponse,\n NativeConfigResponse,\n NativeCredentials,\n NativeRefreshResponse,\n} from '../types/native';\n\n// ============================================\n// Credentials en mémoire (jamais persistés)\n// ============================================\n\nlet credentials: NativeCredentials | null = null;\nlet credentialsLoadedAt: number = 0;\nlet credentialsTtl: number = 300; // Default 5 minutes\nlet refreshInFlight: Promise<NativeRefreshResponse> | null = null;\nlet lastSuccessfulRefreshAt = 0;\nlet lastSuccessfulRefreshResponse: NativeRefreshResponse | null = null;\n\nconst DEFAULT_TTL = 300;\nconst REFRESH_MARGIN = 30; // Refresh 30s before expiration\nconst REFRESH_COOLDOWN_MS = 60 * 1000;\n\n// ============================================\n// Service Native Auth\n// ============================================\n\nexport const nativeAuthService = {\n hasCredentials(): boolean {\n return credentials !== null;\n },\n\n getCredentials(): NativeCredentials | null {\n return credentials ? { ...credentials } : null;\n },\n\n getCredentialsTtl(): number {\n return credentialsTtl;\n },\n\n getCredentialsAge(): number {\n if (!credentialsLoadedAt) return Infinity;\n return (Date.now() - credentialsLoadedAt) / 1000;\n },\n\n areCredentialsExpiringSoon(): boolean {\n if (!credentials || !credentialsLoadedAt) return true;\n const age = this.getCredentialsAge();\n return age >= (credentialsTtl - REFRESH_MARGIN);\n },\n\n async ensureFreshCredentials(): Promise<void> {\n if (!credentials || this.areCredentialsExpiringSoon()) {\n if (isDebugMode()) {\n console.log('🔄 [Native] Credentials expirés ou proches — auto-refresh');\n }\n await this.loadCredentials();\n }\n },\n\n async loadCredentials(): Promise<NativeCredentials> {\n const config = getNativeAuthConfig();\n if (!config.saasApiUrl) {\n throw new ApiError('saasApiUrl non configurée', 'unknown');\n }\n\n await ensureDeviceContext();\n\n if (isDebugMode()) {\n console.log('📤 [SaaS] GET /native/config');\n }\n\n const response = await fetchWithTimeout<NativeConfigResponse>(\n `${config.saasApiUrl}/native/config`,\n { method: 'GET', headers: getHeaders(undefined, true) },\n config.timeout || 30000\n );\n\n if (!response.success || !response.encrypted_credentials || !response.app_key) {\n throw new ApiError('Configuration invalide reçue du SaaS (app_key ou encrypted_credentials manquant)', 'server');\n }\n\n credentials = {\n appKey: response.app_key,\n encryptedCredentials: response.encrypted_credentials,\n };\n\n credentialsLoadedAt = Date.now();\n credentialsTtl = response.credentials_ttl || DEFAULT_TTL;\n\n // Propager le debug mode depuis le backend (si défini)\n if (typeof response.debug === 'boolean') {\n const currentConfig = getNativeAuthConfig();\n if (currentConfig.debug !== true) {\n setNativeAuthConfig({ debug: response.debug });\n }\n }\n\n if (isDebugMode()) {\n console.log('✅ [SaaS] Credentials chargés (ttl:', credentialsTtl, 's, debug:', response.debug ?? 'non défini', ')');\n }\n\n return credentials;\n },\n\n async encrypt(\n type: NativeAuthType,\n data: Partial<NativeEncryptRequest>\n ): Promise<NativeEncryptResponse> {\n // Auto-refresh credentials if expiring soon\n await this.ensureFreshCredentials();\n\n if (!credentials) {\n throw new ApiError('Credentials non chargés. Appelez loadCredentials() d\\'abord.', 'auth');\n }\n\n const config = getNativeAuthConfig();\n if (!config.iamApiUrl) {\n throw new ApiError('iamApiUrl non configurée', 'unknown');\n }\n\n await ensureDeviceContext();\n\n const payload: NativeEncryptRequest = {\n type,\n app_key: credentials.appKey,\n encrypted_credentials: credentials.encryptedCredentials,\n ...data,\n };\n\n if (isDebugMode()) {\n const safeData = {\n ...data,\n } as Partial<NativeEncryptRequest> & {\n password?: string;\n otp_code?: string;\n email?: string;\n phone?: string;\n ccphone?: string;\n };\n if (typeof safeData.password === 'string') safeData.password = '[redacted]';\n if (typeof safeData.otp_code === 'string') safeData.otp_code = '[redacted]';\n if (typeof safeData.email === 'string') safeData.email = safeData.email.includes('@')\n ? safeData.email.replace(/(^.).*(@.*$)/, '$1***$2')\n : '[redacted]';\n if (typeof safeData.ccphone === 'string') {\n safeData.ccphone = '[redacted]';\n }\n if (typeof safeData.phone === 'string') {\n safeData.phone = '[redacted]';\n }\n console.log('📤 [IAM] POST /iam/native/encrypt', { type, ...safeData });\n }\n\n const response = await fetchWithTimeout<NativeEncryptResponse>(\n `${config.iamApiUrl}/iam/native/encrypt`,\n {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify(payload),\n },\n config.timeout || 30000\n );\n\n if (isDebugMode()) {\n console.log('✅ [IAM] native_token reçu, expire dans', response.expires_in, 's');\n }\n\n return response;\n },\n\n async init(nativeToken: string): Promise<NativeInitResponse> {\n const config = getNativeAuthConfig();\n if (!config.iamApiUrl) {\n throw new ApiError('iamApiUrl non configurée', 'unknown');\n }\n\n await ensureDeviceContext();\n\n if (isDebugMode()) {\n console.log('📤 [IAM] POST /iam/native/init');\n }\n\n const response = await fetchWithTimeout<NativeInitResponse>(\n `${config.iamApiUrl}/iam/native/init`,\n {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify({ native_token: nativeToken }),\n },\n config.timeout || 30000\n );\n\n if (isDebugMode()) {\n console.log('✅ [IAM] Init:', { status: response.status, hasProcessToken: !!response.process_token });\n }\n\n return response;\n },\n\n async validate(\n processToken: string,\n creds: { password?: string; otp_code?: string }\n ): Promise<NativeValidateResponse> {\n const config = getNativeAuthConfig();\n if (!config.iamApiUrl) {\n throw new ApiError('iamApiUrl non configurée', 'unknown');\n }\n\n await ensureDeviceContext();\n\n if (isDebugMode()) {\n console.log('📤 [IAM] POST /iam/native/validate');\n }\n\n const response = await fetchWithTimeout<NativeValidateResponse>(\n `${config.iamApiUrl}/iam/native/validate`,\n {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify({\n process_token: processToken,\n ...creds,\n }),\n },\n config.timeout || 30000\n );\n\n if (isDebugMode()) {\n console.log('✅ [IAM] Validate:', { \n hasCallback: !!response.callback_token, \n requires2fa: response.requires_2fa \n });\n }\n\n return response;\n },\n\n async verifyTotp(\n processToken: string,\n totpCode: string\n ): Promise<NativeValidateResponse> {\n const config = getNativeAuthConfig();\n if (!config.iamApiUrl) {\n throw new ApiError('iamApiUrl non configurée', 'unknown');\n }\n\n await ensureDeviceContext();\n\n if (isDebugMode()) {\n console.log('📤 [IAM] POST /iam/native/verify-totp');\n }\n\n return fetchWithTimeout<NativeValidateResponse>(\n `${config.iamApiUrl}/iam/native/verify-totp`,\n {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify({\n process_token: processToken,\n totp_code: totpCode,\n }),\n },\n config.timeout || 30000\n );\n },\n\n async grantAccess(processToken: string): Promise<NativeGrantAccessResponse> {\n const config = getNativeAuthConfig();\n if (!config.iamApiUrl) {\n throw new ApiError('iamApiUrl non configurée', 'unknown');\n }\n\n await ensureDeviceContext();\n\n if (isDebugMode()) {\n console.log('📤 [IAM] POST /iam/native/grant-access');\n }\n\n return fetchWithTimeout<NativeGrantAccessResponse>(\n `${config.iamApiUrl}/iam/native/grant-access`,\n {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify({ process_token: processToken }),\n },\n config.timeout || 30000\n );\n },\n\n async resendOtp(processToken: string): Promise<NativeResendOtpResponse> {\n const config = getNativeAuthConfig();\n if (!config.iamApiUrl) {\n throw new ApiError('iamApiUrl non configurée', 'unknown');\n }\n\n await ensureDeviceContext();\n\n if (isDebugMode()) {\n console.log('📤 [IAM] POST /iam/native/resend-otp');\n }\n\n return fetchWithTimeout<NativeResendOtpResponse>(\n `${config.iamApiUrl}/iam/native/resend-otp`,\n {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify({ process_token: processToken }),\n },\n config.timeout || 30000\n );\n },\n\n async exchange(callbackToken: string): Promise<NativeExchangeResponse> {\n const config = getNativeAuthConfig();\n if (!config.saasApiUrl) {\n throw new ApiError('saasApiUrl non configurée', 'unknown');\n }\n\n await ensureDeviceContext();\n\n if (isDebugMode()) {\n console.log('📤 [SaaS] POST /native/exchange');\n }\n\n const response = await fetchWithTimeout<NativeExchangeResponse>(\n `${config.saasApiUrl}/native/exchange`,\n {\n method: 'POST',\n headers: getHeaders(undefined, true),\n body: JSON.stringify({ callback_token: callbackToken }),\n },\n config.timeout || 30000\n );\n\n if (response.success && response.token) {\n setAuthToken(response.token);\n if (response.user) {\n setAuthUser(response.user);\n }\n // Persist expiration if provided\n const storage = getNativeStorage();\n if (response.expires_at) {\n storage.setItem(STORAGE_KEYS.TOKEN_EXPIRES_AT, response.expires_at);\n }\n // Persist refresh token if the SaaS supports it\n if (response.refresh_token) {\n storage.setItem(STORAGE_KEYS.REFRESH_TOKEN, response.refresh_token);\n }\n if (response.refresh_expires_at) {\n storage.setItem(STORAGE_KEYS.REFRESH_EXPIRES_AT, response.refresh_expires_at);\n }\n // Persister app_access_token_ref pour la double revocation (logout/health check)\n if (response.app_access_token_ref) {\n storage.setItem(STORAGE_KEYS.APP_ACCESS_TOKEN_REF, response.app_access_token_ref);\n }\n // Persister alias_reference pour accès rapide\n const aliasRef = response.user?.alias_reference || response.alias_reference;\n if (aliasRef) {\n storage.setItem(STORAGE_KEYS.ALIAS_REFERENCE, aliasRef as string);\n }\n }\n\n if (isDebugMode()) {\n console.log('✅ [SaaS] Session établie:', { user: response.user?.name });\n }\n\n return response;\n },\n\n async checkToken(token: string): Promise<{ valid: boolean; user?: import('../types/native').UserInfos }> {\n const cfg = getNativeAuthConfig();\n if (!cfg.saasApiUrl) {\n throw new ApiError('saasApiUrl non configurée', 'unknown');\n }\n\n await ensureDeviceContext();\n\n if (isDebugMode()) {\n console.log('📤 [SaaS] POST /native/check-token');\n }\n\n try {\n const response = await fetchWithTimeout<{ status?: string; success?: boolean; user?: import('../types/native').UserInfos }>(\n `${cfg.saasApiUrl}/native/check-token`,\n {\n method: 'POST',\n headers: getHeaders(token, true),\n },\n 10000\n );\n\n // Format principal : { status: 'connected', user: {...} }\n if (response.status === 'connected' && response.user) {\n return { valid: true, user: response.user };\n }\n\n // Fallback legacy : { success: true, user: {...} }\n if (response.success !== false) {\n return { valid: true, user: response.user };\n }\n\n return { valid: false };\n } catch (err) {\n if (err instanceof ApiError && err.statusCode === 401) {\n return { valid: false };\n }\n throw err;\n }\n },\n\n async refresh(): Promise<NativeRefreshResponse> {\n const now = Date.now();\n\n if (refreshInFlight) {\n return refreshInFlight;\n }\n\n if (\n lastSuccessfulRefreshResponse?.success\n && lastSuccessfulRefreshAt\n && now - lastSuccessfulRefreshAt < REFRESH_COOLDOWN_MS\n ) {\n if (isDebugMode()) {\n console.log('🔄 [SaaS] POST /native/refresh — cooldown actif, réponse réutilisée');\n }\n return lastSuccessfulRefreshResponse;\n }\n\n const cfg = getNativeAuthConfig();\n if (!cfg.saasApiUrl) {\n throw new ApiError('saasApiUrl non configurée', 'unknown');\n }\n\n await ensureDeviceContext();\n\n const refreshToken = getNativeStorage().getItem(STORAGE_KEYS.REFRESH_TOKEN);\n\n if (!refreshToken) {\n return { success: false, error_type: 'missing_refresh', message: 'Refresh token manquant' };\n }\n\n if (isDebugMode()) {\n console.log('📤 [SaaS] POST /native/refresh');\n }\n\n refreshInFlight = (async () => {\n try {\n let response: NativeRefreshResponse;\n try {\n response = await fetchWithTimeout<NativeRefreshResponse>(\n `${cfg.saasApiUrl}/native/refresh`,\n {\n method: 'POST',\n headers: getHeaders(undefined, true),\n body: JSON.stringify({ refresh_token: refreshToken }),\n },\n cfg.timeout || 30000\n );\n } catch (err) {\n // Normalize common cases for callers (do not force logout on network errors).\n if (err instanceof ApiError) {\n if (err.statusCode === 401) {\n response = {\n success: false,\n error_type: err.errorType || 'invalid_refresh',\n message: err.message,\n };\n } else if (err.statusCode === 404) {\n response = {\n success: false,\n error_type: 'not_supported',\n message: 'Endpoint refresh non disponible sur ce SaaS',\n };\n } else {\n throw err;\n }\n } else {\n throw err;\n }\n }\n\n // Backends can return {success:false,...} with 200 (not recommended),\n // but we keep the contract tolerant and only update state on explicit success.\n // Refresh contract:\n // - Recommended: keep the SAME access token and only extend expires_at (token omitted in response).\n // - Supported: rotate token (token returned) if backend chooses to.\n if (response.success) {\n if (response.token) {\n setAuthToken(response.token);\n }\n\n const storage = getNativeStorage();\n if (response.expires_at) storage.setItem(STORAGE_KEYS.TOKEN_EXPIRES_AT, response.expires_at);\n if (response.refresh_token) storage.setItem(STORAGE_KEYS.REFRESH_TOKEN, response.refresh_token);\n if (response.refresh_expires_at) storage.setItem(STORAGE_KEYS.REFRESH_EXPIRES_AT, response.refresh_expires_at);\n if (response.app_access_token_ref) storage.setItem(STORAGE_KEYS.APP_ACCESS_TOKEN_REF, response.app_access_token_ref);\n if (response.alias_reference) storage.setItem(STORAGE_KEYS.ALIAS_REFERENCE, response.alias_reference);\n\n if (response.user) {\n // Best-effort store: user may be NativeUser or UserInfos\n setAuthUser(response.user);\n }\n\n lastSuccessfulRefreshAt = Date.now();\n lastSuccessfulRefreshResponse = response;\n }\n\n return response;\n } finally {\n refreshInFlight = null;\n }\n })();\n\n return refreshInFlight;\n },\n\n async logout(token?: string): Promise<{ success: boolean }> {\n const config = getNativeAuthConfig();\n await ensureDeviceContext();\n\n // Récupérer les identifiants avant nettoyage\n const storage = getNativeStorage();\n const appAccessTokenRef = storage.getItem(STORAGE_KEYS.APP_ACCESS_TOKEN_REF);\n\n // Double revocation : SaaS + IAM en parallèle (best-effort)\n const promises: Promise<unknown>[] = [];\n\n // ① Appel SaaS — révoque le Sanctum token\n if (config.saasApiUrl && token) {\n promises.push(\n fetchWithTimeout<{ success: boolean }>(\n `${config.saasApiUrl}/native/logout`,\n {\n method: 'POST',\n headers: getHeaders(token, true),\n },\n config.timeout || 30000\n ).catch((err) => {\n if (isDebugMode()) {\n console.warn('⚠️ [SaaS] Échec logout (non-bloquant):', err instanceof Error ? err.message : err);\n }\n })\n );\n }\n\n // ② Appel direct IAM — révoque l'AppAccessToken via sa référence stable\n if (config.iamApiUrl && appAccessTokenRef) {\n const payload: Record<string, string> = { app_access_token_ref: appAccessTokenRef };\n\n promises.push(\n fetchWithTimeout<{ success: boolean }>(\n `${config.iamApiUrl}/iam/disconnect`,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },\n body: JSON.stringify(payload),\n },\n 5000\n ).catch((err) => {\n if (isDebugMode()) {\n console.warn('⚠️ [IAM] Échec disconnect (non-bloquant):', err instanceof Error ? err.message : err);\n }\n })\n );\n }\n\n // Attendre les deux sans bloquer\n await Promise.allSettled(promises);\n\n if (isDebugMode()) {\n console.log('✅ [Logout] Double revocation terminée — nettoyage local');\n }\n\n // Nettoyage local garanti (même si les deux appels échouent)\n clearAuthToken();\n credentials = null;\n credentialsLoadedAt = 0;\n refreshInFlight = null;\n lastSuccessfulRefreshAt = 0;\n lastSuccessfulRefreshResponse = null;\n return { success: true };\n },\n\n clearCredentials(): void {\n credentials = null;\n credentialsLoadedAt = 0;\n refreshInFlight = null;\n lastSuccessfulRefreshAt = 0;\n lastSuccessfulRefreshResponse = null;\n },\n\n // ============================================\n // High-level methods\n // ============================================\n\n async loginEmail(\n email: string,\n accountType: 'user' | 'admin' = 'user'\n ): Promise<NativeInitResponse> {\n const { native_token } = await this.encrypt('login_email', {\n email,\n account_type: accountType,\n });\n return this.init(native_token);\n },\n\n async loginPhone(\n ccphone: string,\n phone: string,\n accountType: 'user' | 'admin' = 'user'\n ): Promise<NativeInitResponse> {\n const { native_token } = await this.encrypt('login_phone', {\n ccphone,\n phone,\n account_type: accountType,\n });\n return this.init(native_token);\n },\n\n async loginAccessOtp(otpCode: string): Promise<NativeInitResponse> {\n const { native_token } = await this.encrypt('login_access_otp', {\n otp_code: otpCode.replace(/[\\s-]/g, ''),\n });\n return this.init(native_token);\n },\n\n async register(data: {\n name: string;\n email?: string;\n ccphone: string;\n phone: string;\n town?: string;\n country?: string;\n registration_type?: 'email' | 'phone';\n }): Promise<NativeInitResponse> {\n const { native_token } = await this.encrypt('register', {\n ...data,\n registration_type: data.registration_type || 'email',\n });\n return this.init(native_token);\n },\n\n async registerPhoneOnly(data: {\n name: string;\n ccphone: string;\n phone: string;\n town?: string;\n country?: string;\n }): Promise<NativeInitResponse> {\n if (data.ccphone !== '+221') {\n throw new ApiError(\n \"L'inscription par téléphone est réservée aux numéros sénégalais (+221)\",\n 'validation',\n 422,\n 'invalid_country_code'\n );\n }\n\n const { native_token } = await this.encrypt('register', {\n ...data,\n email: '',\n registration_type: 'phone',\n });\n return this.init(native_token);\n },\n\n async recoverPassword(\n method: 'email' | 'phone',\n identifier: { email?: string; ccphone?: string; phone?: string }\n ): Promise<NativeInitResponse> {\n const { native_token } = await this.encrypt('recovery_password', {\n method,\n ...identifier,\n });\n return this.init(native_token);\n },\n};\n\nexport default nativeAuthService;\n","/**\n * Service de récupération de mot de passe v1.0\n * Architecture Frontend-First : Appels directs à l'IAM\n * \n * @version 2.7.0\n */\n\nimport { \n ApiError, \n fetchWithTimeout, \n getNativeAuthConfig, \n isDebugMode,\n} from './api';\nimport { nativeAuthService } from './nativeAuth';\n\nimport type {\n MobilePasswordInitResponse,\n MobilePasswordSelectMethodResponse,\n MobilePasswordResetResponse,\n MobilePasswordResendResponse,\n} from '../types/mobile';\n\n// ============================================\n// Credentials (shared with nativeAuth)\n// ============================================\n\nfunction getIAMHeaders(): HeadersInit {\n const creds = nativeAuthService.getCredentials();\n if (!creds) {\n throw new ApiError('Credentials non chargés. Appelez loadCredentials() d\\'abord.', 'auth');\n }\n\n return {\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n 'X-IAM-App-Key': creds.appKey,\n };\n}\n\n// ============================================\n// Service\n// ============================================\n\nexport const mobilePasswordService = {\n hasCredentials(): boolean {\n return nativeAuthService.hasCredentials();\n },\n\n async loadCredentials() {\n return nativeAuthService.loadCredentials();\n },\n\n async initRecovery(email: string): Promise<MobilePasswordInitResponse> {\n const config = getNativeAuthConfig();\n if (!config.iamApiUrl) {\n throw new ApiError('iamApiUrl non configurée', 'unknown');\n }\n\n if (!nativeAuthService.hasCredentials()) {\n await nativeAuthService.loadCredentials();\n }\n\n if (isDebugMode()) {\n const maskedEmail = email.includes('@') ? email.replace(/(^.).*(@.*$)/, '$1***$2') : '[redacted]';\n console.log('📤 [IAM] POST /iam/native/password/init', { email: maskedEmail });\n }\n\n const response = await fetchWithTimeout<MobilePasswordInitResponse>(\n `${config.iamApiUrl}/iam/native/password/init`,\n {\n method: 'POST',\n headers: getIAMHeaders(),\n body: JSON.stringify({ email }),\n },\n config.timeout || 30000\n );\n\n if (isDebugMode()) {\n console.log('✅ [IAM] Init recovery:', { \n status: response.status, \n hasOtp: !!response.otp_code,\n });\n }\n\n return response;\n },\n\n async selectMethod(\n processToken: string, \n receiveChoice: 'email' | 'phone'\n ): Promise<MobilePasswordSelectMethodResponse> {\n const config = getNativeAuthConfig();\n if (!config.iamApiUrl) {\n throw new ApiError('iamApiUrl non configurée', 'unknown');\n }\n\n if (isDebugMode()) {\n console.log('📤 [IAM] POST /iam/native/password/select-method', { receiveChoice });\n }\n\n return fetchWithTimeout<MobilePasswordSelectMethodResponse>(\n `${config.iamApiUrl}/iam/native/password/select-method`,\n {\n method: 'POST',\n headers: getIAMHeaders(),\n body: JSON.stringify({ \n process_token: processToken, \n receive_choice: receiveChoice,\n }),\n },\n config.timeout || 30000\n );\n },\n\n validateOtpLocally(inputCode: string, storedCode: string): boolean {\n return inputCode === storedCode;\n },\n\n async reset(\n processToken: string,\n password: string\n ): Promise<MobilePasswordResetResponse> {\n const config = getNativeAuthConfig();\n if (!config.iamApiUrl) {\n throw new ApiError('iamApiUrl non configurée', 'unknown');\n }\n\n if (isDebugMode()) {\n console.log('📤 [IAM] POST /iam/native/password/reset');\n }\n\n return fetchWithTimeout<MobilePasswordResetResponse>(\n `${config.iamApiUrl}/iam/native/password/reset`,\n {\n method: 'POST',\n headers: getIAMHeaders(),\n body: JSON.stringify({\n process_token: processToken,\n password,\n password_confirmation: password,\n }),\n },\n config.timeout || 30000\n );\n },\n\n async resendOtp(processToken: string): Promise<MobilePasswordResendResponse> {\n const config = getNativeAuthConfig();\n if (!config.iamApiUrl) {\n throw new ApiError('iamApiUrl non configurée', 'unknown');\n }\n\n if (isDebugMode()) {\n console.log('📤 [IAM] POST /iam/native/password/resend');\n }\n\n return fetchWithTimeout<MobilePasswordResendResponse>(\n `${config.iamApiUrl}/iam/native/password/resend`,\n {\n method: 'POST',\n headers: getIAMHeaders(),\n body: JSON.stringify({ process_token: processToken }),\n },\n config.timeout || 30000\n );\n },\n};\n\nexport { ApiError };\nexport default mobilePasswordService;\n","/**\n * Hook de récupération de mot de passe v1.0\n * Architecture Frontend-First avec appels directs à l'IAM\n * \n * @version 2.7.0\n */\n\nimport { useState, useCallback, useEffect, useRef } from 'react';\nimport { mobilePasswordService } from '../services/mobilePassword';\nimport { setNativeAuthConfig, ApiError } from '../services/api';\nimport type { MobilePasswordState } from '../types/mobile';\n\nexport interface UseMobilePasswordOptions {\n saasApiUrl: string;\n iamApiUrl: string;\n autoLoadCredentials?: boolean;\n \n}\n\ninterface MobilePasswordStateExtended extends MobilePasswordState {\n credentialsLoaded: boolean;\n errorType: string | null;\n}\n\nfunction getErrorMessage(err: unknown, context: string): { message: string; type: string } {\n if (err instanceof ApiError) {\n return { message: err.message, type: err.type };\n }\n if (err instanceof Error) {\n if (err.message.includes('fetch') || err.message.includes('network')) {\n return { message: 'Vérifiez votre connexion Internet', type: 'network' };\n }\n if (err.message.includes('timeout')) {\n return { message: 'Le serveur met trop de temps à répondre', type: 'timeout' };\n }\n return { message: err.message, type: 'unknown' };\n }\n return { message: `Erreur lors de ${context}`, type: 'unknown' };\n}\n\nexport function useMobilePassword(options: UseMobilePasswordOptions) {\n const { saasApiUrl, iamApiUrl, autoLoadCredentials = true } = options;\n\n const configuredRef = useRef(false);\n\n useEffect(() => {\n if (!configuredRef.current) {\n setNativeAuthConfig({ saasApiUrl, iamApiUrl });\n configuredRef.current = true;\n }\n }, [saasApiUrl, iamApiUrl]);\n\n const [state, setState] = useState<MobilePasswordStateExtended>({\n credentialsLoaded: false,\n processToken: null,\n status: 'idle',\n storedOtp: null,\n receiveMode: null,\n maskedEmail: null,\n maskedPhone: null,\n loading: false,\n error: null,\n errorType: null,\n });\n\n const loadCredentials = useCallback(async () => {\n setState(prev => ({ ...prev, loading: true, error: null, errorType: null }));\n try {\n await mobilePasswordService.loadCredentials();\n setState(prev => ({ ...prev, credentialsLoaded: true, loading: false }));\n return { success: true };\n } catch (err) {\n const { message, type } = getErrorMessage(err, 'le chargement');\n setState(prev => ({ ...prev, loading: false, error: message, errorType: type }));\n return { success: false, error_type: type };\n }\n }, []);\n\n useEffect(() => {\n if (autoLoadCredentials && !state.credentialsLoaded) {\n loadCredentials();\n }\n }, [autoLoadCredentials, state.credentialsLoaded, loadCredentials]);\n\n const initRecovery = useCallback(async (email: string) => {\n setState(prev => ({ ...prev, loading: true, error: null, errorType: null }));\n try {\n if (!mobilePasswordService.hasCredentials()) {\n await mobilePasswordService.loadCredentials();\n }\n const response = await mobilePasswordService.initRecovery(email);\n\n if (response.success && response.process_token) {\n if (response.status === 'choice_required') {\n setState(prev => ({\n ...prev,\n credentialsLoaded: true,\n processToken: response.process_token!,\n status: 'choice_required',\n maskedEmail: response.masked_email || null,\n maskedPhone: response.masked_phone || null,\n loading: false,\n }));\n return { success: true, status: 'choice_required' as const };\n } else {\n setState(prev => ({\n ...prev,\n credentialsLoaded: true,\n processToken: response.process_token!,\n status: 'pending_otp',\n storedOtp: response.otp_code || null,\n receiveMode: 'email',\n maskedEmail: response.masked_email || null,\n loading: false,\n }));\n return { success: true, status: 'pending_otp' as const };\n }\n }\n\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Aucun compte trouvé avec cet email',\n errorType: response.error_type || 'unknown',\n }));\n return { success: false, error_type: response.error_type };\n } catch (err) {\n const { message, type } = getErrorMessage(err, 'la recherche du compte');\n setState(prev => ({ ...prev, loading: false, error: message, errorType: type }));\n return { success: false, error_type: type };\n }\n }, []);\n\n const selectMethod = useCallback(async (choice: 'email' | 'phone') => {\n if (!state.processToken) {\n return { success: false, error: 'Session invalide' };\n }\n setState(prev => ({ ...prev, loading: true, error: null, errorType: null }));\n try {\n const response = await mobilePasswordService.selectMethod(state.processToken, choice);\n if (response.success) {\n setState(prev => ({\n ...prev,\n status: 'pending_otp',\n storedOtp: response.otp_code || null,\n receiveMode: response.receive_mode || choice,\n loading: false,\n }));\n return { success: true };\n }\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Impossible d\\'envoyer le code',\n errorType: response.error_type || 'unknown',\n }));\n return { success: false, error_type: response.error_type };\n } catch (err) {\n const { message, type } = getErrorMessage(err, 'l\\'envoi du code');\n setState(prev => ({ ...prev, loading: false, error: message, errorType: type }));\n return { success: false, error_type: type };\n }\n }, [state.processToken]);\n\n const verifyOtp = useCallback((inputCode: string): boolean => {\n if (!state.storedOtp) {\n setState(prev => ({ ...prev, error: 'Session invalide', errorType: 'invalid_session' }));\n return false;\n }\n const isValid = mobilePasswordService.validateOtpLocally(inputCode, state.storedOtp);\n if (isValid) {\n setState(prev => ({ ...prev, status: 'pending_password', error: null, errorType: null }));\n return true;\n }\n setState(prev => ({ ...prev, error: 'Code incorrect', errorType: 'invalid_otp' }));\n return false;\n }, [state.storedOtp]);\n\n const resetPassword = useCallback(async (password: string) => {\n if (!state.processToken) {\n return { success: false, error: 'Session invalide' };\n }\n setState(prev => ({ ...prev, loading: true, error: null, errorType: null }));\n try {\n const response = await mobilePasswordService.reset(state.processToken, password);\n if (response.success) {\n setState(prev => ({ ...prev, status: 'completed', loading: false }));\n return { success: true };\n }\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Erreur lors de la réinitialisation',\n errorType: response.error_type || 'unknown',\n }));\n return { success: false, error_type: response.error_type };\n } catch (err) {\n const { message, type } = getErrorMessage(err, 'la réinitialisation');\n setState(prev => ({ ...prev, loading: false, error: message, errorType: type }));\n return { success: false, error_type: type };\n }\n }, [state.processToken]);\n\n const resendOtp = useCallback(async () => {\n if (!state.processToken) {\n return { success: false, error: 'Session invalide' };\n }\n setState(prev => ({ ...prev, loading: true, error: null, errorType: null }));\n try {\n const response = await mobilePasswordService.resendOtp(state.processToken);\n if (response.success && response.otp_code) {\n setState(prev => ({ ...prev, storedOtp: response.otp_code!, loading: false }));\n return { success: true, cooldown: response.cooldown_remaining };\n }\n setState(prev => ({ ...prev, loading: false }));\n return { success: false, error_type: response.error_type };\n } catch (err) {\n const { message, type } = getErrorMessage(err, 'le renvoi');\n setState(prev => ({ ...prev, loading: false, error: message, errorType: type }));\n return { success: false, error_type: type };\n }\n }, [state.processToken]);\n\n const reset = useCallback(() => {\n setState({\n credentialsLoaded: state.credentialsLoaded,\n processToken: null,\n status: 'idle',\n storedOtp: null,\n receiveMode: null,\n maskedEmail: null,\n maskedPhone: null,\n loading: false,\n error: null,\n errorType: null,\n });\n }, [state.credentialsLoaded]);\n\n const clearError = useCallback(() => {\n setState(prev => ({ ...prev, error: null, errorType: null }));\n }, []);\n\n return {\n credentialsLoaded: state.credentialsLoaded,\n processToken: state.processToken,\n status: state.status,\n storedOtp: state.storedOtp,\n receiveMode: state.receiveMode,\n maskedEmail: state.maskedEmail,\n maskedPhone: state.maskedPhone,\n loading: state.loading,\n error: state.error,\n errorType: state.errorType,\n\n isCompleted: state.status === 'completed',\n isChoiceRequired: state.status === 'choice_required',\n isPendingOtp: state.status === 'pending_otp',\n isPendingPassword: state.status === 'pending_password',\n\n loadCredentials,\n initRecovery,\n selectMethod,\n verifyOtp,\n resetPassword,\n resendOtp,\n reset,\n clearError,\n };\n}\n\nexport default useMobilePassword;\n","/**\n * Password Recovery Modal for @ollaid/native-sso\n * Flow: email → method-choice → OTP → new password → success\n * Design aligned with web SSO\n * \n * @version 2.7.0\n */\n\nimport { useState, useEffect } from 'react';\nimport {\n Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogBody, DialogFooter,\n Button, Input, Label, RadioGroup, RadioGroupItem,\n IconLock, IconCheckCircle2, IconArrowLeft, IconKeyRound, IconLoader2,\n} from './ui';\nimport OTPInput from './OTPInput';\nimport { useMobilePassword } from '../hooks/useMobilePassword';\n\nexport interface PasswordRecoveryModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onSuccess: () => void;\n saasApiUrl: string;\n iamApiUrl: string;\n \n}\n\ntype RecoveryStep = 'email' | 'method-choice' | 'otp' | 'password' | 'success';\n\nconst C = {\n primary: '#002147',\n green: '#16a34a',\n greenBg: '#dcfce7',\n gray100: '#f3f4f6',\n gray200: '#e5e7eb',\n gray500: '#6b7280',\n gray700: '#374151',\n gray900: '#111827',\n red: '#dc2626',\n redBg: '#fef2f2',\n white: '#ffffff',\n} as const;\n\nconst iconCircle = (bg: string, size = '3rem'): React.CSSProperties => ({\n margin: '0 auto', width: size, height: size, backgroundColor: bg, borderRadius: '50%',\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n});\n\nconst backBtnStyle: React.CSSProperties = {\n position: 'absolute', left: '1rem', top: '1rem', background: 'none', border: 'none',\n cursor: 'pointer', padding: '0.5rem', borderRadius: '0.375rem', color: C.gray700, zIndex: 10,\n};\n\nexport function PasswordRecoveryModal({ open, onOpenChange, onSuccess, saasApiUrl, iamApiUrl }: PasswordRecoveryModalProps) {\n const {\n status, loading: pwLoading, error: pwError, receiveMode, maskedEmail, maskedPhone,\n initRecovery, selectMethod, verifyOtp, resetPassword, resendOtp, reset: resetHook, clearError,\n } = useMobilePassword({ saasApiUrl, iamApiUrl });\n\n const [step, setStep] = useState<RecoveryStep>('email');\n const [email, setEmail] = useState('');\n const [otp, setOtp] = useState('');\n const [password, setPassword] = useState('');\n const [confirmPassword, setConfirmPassword] = useState('');\n const [localError, setLocalError] = useState<string | null>(null);\n const [selectedMethod, setSelectedMethod] = useState<'email' | 'phone'>('email');\n const [resendCooldown, setResendCooldown] = useState(0);\n\n const error = localError || pwError;\n\n useEffect(() => {\n if (status === 'choice_required') setStep('method-choice');\n else if (status === 'pending_otp') { setStep('otp'); setResendCooldown(60); }\n else if (status === 'pending_password') setStep('password');\n else if (status === 'completed') setStep('success');\n }, [status]);\n\n useEffect(() => {\n if (resendCooldown > 0) {\n const timer = setTimeout(() => setResendCooldown(resendCooldown - 1), 1000);\n return () => clearTimeout(timer);\n }\n }, [resendCooldown]);\n\n const resetState = () => {\n setStep('email'); setEmail(''); setOtp(''); setPassword(''); setConfirmPassword('');\n setLocalError(null); setSelectedMethod('email'); setResendCooldown(0); resetHook();\n };\n\n const handleClose = () => { resetState(); onOpenChange(false); };\n const handleBackToLogin = () => { resetState(); onSuccess(); };\n\n const handleEmailSubmit = async () => {\n setLocalError(null); clearError();\n if (!email.trim()) { setLocalError(\"L'adresse email est requise\"); return; }\n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email.trim())) { setLocalError('Veuillez entrer une adresse email valide'); return; }\n await initRecovery(email.trim());\n };\n\n const handleMethodSubmit = async () => {\n setLocalError(null); clearError();\n await selectMethod(selectedMethod);\n };\n\n const handleOTPSubmit = () => {\n if (otp.length !== 6) { setLocalError('Veuillez entrer le code à 6 chiffres'); return; }\n setLocalError(null); clearError();\n const isValid = verifyOtp(otp);\n if (!isValid) setLocalError('Code incorrect');\n };\n\n const handleResendOTP = async () => {\n if (resendCooldown > 0) return;\n const result = await resendOtp();\n if (result.success) { setResendCooldown(result.cooldown || 60); setOtp(''); setLocalError(null); }\n };\n\n const handlePasswordSubmit = async () => {\n if (password.length < 8) { setLocalError('Le mot de passe doit contenir au moins 8 caractères'); return; }\n if (password !== confirmPassword) { setLocalError('Les mots de passe ne correspondent pas'); return; }\n setLocalError(null); clearError();\n await resetPassword(password);\n };\n\n const goBack = () => {\n setLocalError(null); clearError();\n if (step === 'method-choice') { setStep('email'); resetHook(); }\n else if (step === 'otp') { setStep(maskedPhone ? 'method-choice' : 'email'); resetHook(); }\n else if (step === 'password') setStep('otp');\n };\n\n // ===== SUCCESS =====\n if (step === 'success') {\n return (\n <Dialog open={open} onOpenChange={handleClose}>\n <DialogContent>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={{ ...iconCircle(C.greenBg), width: '5rem', height: '5rem' }}>\n <IconCheckCircle2 style={{ width: '3rem', height: '3rem', color: C.green }} />\n </div>\n <DialogTitle>Mot de passe modifié !</DialogTitle>\n <DialogDescription>Votre mot de passe a été changé avec succès.</DialogDescription>\n </DialogHeader>\n <DialogFooter style={{ borderTop: 'none' }}>\n <Button onClick={handleBackToLogin} style={{ width: '100%' }}>Retour à la connexion</Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n }\n\n return (\n <Dialog open={open} onOpenChange={handleClose}>\n <DialogContent>\n {step !== 'email' && (\n <button onClick={goBack} style={backBtnStyle} type=\"button\">\n <IconArrowLeft style={{ width: '1rem', height: '1rem' }} />\n </button>\n )}\n\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={iconCircle(C.primary + '1a')}>\n {step === 'otp' ? (\n <IconKeyRound style={{ width: '1.5rem', height: '1.5rem', color: C.primary }} />\n ) : (\n <IconLock style={{ width: '1.5rem', height: '1.5rem', color: C.primary }} />\n )}\n </div>\n <DialogTitle>\n {step === 'email' && 'Récupération de mot de passe'}\n {step === 'method-choice' && 'Recevoir le code de vérification'}\n {step === 'otp' && 'Vérification'}\n {step === 'password' && 'Nouveau mot de passe'}\n </DialogTitle>\n <DialogDescription>\n {step === 'email' && 'Veuillez entrer votre adresse email'}\n {step === 'method-choice' && 'Comment souhaitez-vous recevoir le code ?'}\n {step === 'otp' && (receiveMode === 'phone' ? `Code envoyé par SMS au ${maskedPhone}` : `Code envoyé par email à ${maskedEmail}`)}\n {step === 'password' && 'Définissez votre nouveau mot de passe'}\n </DialogDescription>\n </DialogHeader>\n\n <DialogBody>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n {error && <div style={{ padding: '0.75rem', borderRadius: '0.375rem', backgroundColor: C.redBg, color: C.red, fontSize: '0.875rem' }}>{error}</div>}\n\n {step === 'email' && (\n <div><Label htmlFor=\"recovery-email\">Adresse email</Label><Input id=\"recovery-email\" type=\"email\" placeholder=\"vous@exemple.com\" value={email} onChange={e => setEmail(e.target.value)} disabled={pwLoading} /></div>\n )}\n\n {step === 'method-choice' && (\n <RadioGroup value={selectedMethod} onValueChange={v => setSelectedMethod(v as 'email' | 'phone')}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.75rem' }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.75rem', padding: '1rem', borderRadius: '0.5rem', border: `2px solid ${selectedMethod === 'email' ? C.primary : C.gray200}`, cursor: 'pointer' }} onClick={() => setSelectedMethod('email')}>\n <RadioGroupItem value=\"email\" id=\"method-email\" />\n <div><div style={{ fontWeight: 500 }}>Par email</div><div style={{ fontSize: '0.75rem', color: C.gray500 }}>{maskedEmail}</div></div>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.75rem', padding: '1rem', borderRadius: '0.5rem', border: `2px solid ${selectedMethod === 'phone' ? C.primary : C.gray200}`, cursor: 'pointer' }} onClick={() => setSelectedMethod('phone')}>\n <RadioGroupItem value=\"phone\" id=\"method-phone\" />\n <div><div style={{ fontWeight: 500 }}>Par SMS</div><div style={{ fontSize: '0.75rem', color: C.gray500 }}>{maskedPhone}</div></div>\n </div>\n </div>\n </RadioGroup>\n )}\n\n {step === 'otp' && (\n <>\n <OTPInput value={otp} onChange={setOtp} disabled={pwLoading} />\n <div style={{ textAlign: 'center', fontSize: '0.875rem' }}>\n {resendCooldown > 0 ? <span style={{ color: C.gray500 }}>Renvoyer dans {resendCooldown}s</span> : (\n <button type=\"button\" style={{ color: C.primary, background: 'none', border: 'none', cursor: 'pointer', textDecoration: 'underline' }} onClick={handleResendOTP}>Code non reçu ? Renvoyer</button>\n )}\n </div>\n </>\n )}\n\n {step === 'password' && (\n <>\n <div><Label>Nouveau mot de passe</Label><Input type=\"password\" placeholder=\"Minimum 8 caractères\" value={password} onChange={e => setPassword(e.target.value)} disabled={pwLoading} /></div>\n <div><Label>Confirmer le mot de passe</Label><Input type=\"password\" placeholder=\"Retapez votre mot de passe\" value={confirmPassword} onChange={e => setConfirmPassword(e.target.value)} disabled={pwLoading} /></div>\n </>\n )}\n </div>\n </DialogBody>\n\n <DialogFooter>\n {step === 'email' && (\n <>\n <Button onClick={handleEmailSubmit} disabled={pwLoading} style={{ width: '100%' }}>\n {pwLoading ? (\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <IconLoader2 style={{ width: '1rem', height: '1rem' }} /> Vérification...\n </span>\n ) : 'Continuer'}\n </Button>\n <Button variant=\"ghost\" onClick={handleBackToLogin} style={{ width: '100%' }}>Retour à la connexion</Button>\n </>\n )}\n {step === 'method-choice' && (\n <Button onClick={handleMethodSubmit} disabled={pwLoading} style={{ width: '100%' }}>\n {pwLoading ? (\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <IconLoader2 style={{ width: '1rem', height: '1rem' }} /> Envoi...\n </span>\n ) : 'Envoyer le code'}\n </Button>\n )}\n {step === 'otp' && (\n <Button onClick={handleOTPSubmit} disabled={otp.length !== 6} style={{ width: '100%' }}>Vérifier</Button>\n )}\n {step === 'password' && (\n <Button onClick={handlePasswordSubmit} disabled={pwLoading || !password || !confirmPassword} style={{ width: '100%' }}>\n {pwLoading ? (\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <IconLoader2 style={{ width: '1rem', height: '1rem' }} /> Modification...\n </span>\n ) : 'Modifier le mot de passe'}\n </Button>\n )}\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\nexport default PasswordRecoveryModal;\n","/**\n * Hook de vérification périodique du token Sanctum (Auth Check)\n * \n * Le package consulte l'endpoint POST /api/native/check-token du SaaS\n * pour vérifier si l'utilisateur est toujours connecté.\n * \n * - Premier check 60s après login\n * - Checks suivants toutes les 2 min\n * - Si status === 'connected' → met à jour user_infos en localStorage\n * - Si 401 → révoque l'IAM (POST /iam/disconnect) + nettoie le frontend\n * - Ne déconnecte PAS si offline ou serveur inaccessible\n * \n * @version 2.7.0\n */\n\nimport { useEffect, useRef, useCallback } from 'react';\nimport { STORAGE_KEYS, getHeaders, getNativeStorage, ensureDeviceContext } from '../services/api';\nimport type { UserInfos } from '../types/native';\n\nconst FIRST_CHECK_DELAY = 60 * 1000; // 60 secondes\nconst INTERVAL_DELAY = 2 * 60 * 1000; // 2 minutes\n\nexport interface UseTokenHealthCheckOptions {\n /** Whether to enable health checks (true when authenticated) */\n enabled: boolean;\n /** SaaS API base URL */\n saasApiUrl: string;\n /** IAM API base URL (for revocation on 401) */\n iamApiUrl: string;\n /** Called when the backend explicitly invalidates the token (401) */\n onTokenInvalid: () => void;\n /**\n * Optional handler for 401. If provided, it can attempt a refresh and decide\n * whether the session was recovered.\n *\n * Return values:\n * - 'recovered': session is valid again (do NOT call onTokenInvalid)\n * - 'invalid': token is explicitly invalid (call onTokenInvalid)\n * - 'noop': fall back to default behavior\n */\n onUnauthorized?: () => Promise<'recovered' | 'invalid' | 'noop'>;\n /** Called when fresh user_infos are received */\n onUserUpdated?: (userInfos: UserInfos) => void;\n /** Debug mode */\n debug?: boolean;\n}\n\n/**\n * Appelle POST /api/native/check-token sur le SaaS.\n * \n * Le SaaS doit retourner :\n * - 200 { status: 'connected', user: { ...user_infos } } → token valide\n * - 401 { status: 'disconnected', message: '...' } → token invalide\n */\nasync function checkTokenValidity(\n saasApiUrl: string,\n token: string,\n debug: boolean\n): Promise<{ valid: boolean; user?: UserInfos }> {\n // 1. Check connectivity first\n if (typeof navigator !== 'undefined' && !navigator.onLine) {\n if (debug) console.log('🔄 [HealthCheck] Offline — skip');\n throw new Error('offline');\n }\n\n await ensureDeviceContext();\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 10000); // 10s timeout\n\n try {\n const response = await fetch(`${saasApiUrl}/native/check-token`, {\n method: 'POST',\n headers: getHeaders(token, true),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n // 401 = seul signal explicite de déconnexion (Sanctum ou backend)\n if (response.status === 401) {\n if (debug) console.log('🔄 [HealthCheck] Token invalide (401) — déconnexion');\n return { valid: false };\n }\n\n // Tout autre code non-OK = problème serveur, PAS un problème de token → session conservée\n if (!response.ok) {\n if (debug) console.log(`🔄 [HealthCheck] Erreur serveur ${response.status} — session conservée`);\n throw new Error(`server_error_${response.status}`);\n }\n\n const data = await response.json();\n\n // Format standard : { status: 'connected', user: {...} }\n if (data.status === 'connected' && data.user) {\n if (debug) console.log('🔄 [HealthCheck] Token valide ✅ — user_infos mis à jour');\n return { valid: true, user: data.user };\n }\n\n // HTTP 200 = Sanctum a confirmé l'authentification, token valide\n // On ne déconnecte JAMAIS sur un body ambigu : seul le 401 fait foi\n if (debug) console.log('🔄 [HealthCheck] Token valide ✅');\n return { valid: true, user: data.user };\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof Error && error.message === 'offline') {\n throw error;\n }\n\n // Network errors, timeouts, server unreachable → do NOT invalidate\n if (debug) {\n const msg = error instanceof Error ? error.message : 'unknown';\n console.log(`🔄 [HealthCheck] Erreur réseau/serveur (${msg}) — session conservée`);\n }\n throw error;\n }\n}\n\n/**\n * Révoque la session sur l'IAM (fire-and-forget).\n * Appelé quand le SaaS retourne 401 pour s'assurer que l'AppAccessToken\n * est aussi révoqué côté IAM.\n */\nfunction revokeOnIam(iamApiUrl: string, debug: boolean): void {\n try {\n const controller = new AbortController();\n setTimeout(() => controller.abort(), 5000); // 5s timeout\n\n // Récupérer app_access_token_ref pour lookup rapide côté IAM\n const appAccessTokenRef = getNativeStorage().getItem(STORAGE_KEYS.APP_ACCESS_TOKEN_REF);\n\n if (!appAccessTokenRef) return;\n\n const payload: Record<string, string> = { app_access_token_ref: appAccessTokenRef };\n\n if (debug) {\n console.log('🔄 [HealthCheck] Revocation IAM:', { hasRef: true });\n }\n\n fetch(`${iamApiUrl}/iam/disconnect`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n },\n body: JSON.stringify(payload),\n signal: controller.signal,\n }).catch(() => {\n if (debug) console.log('🔄 [HealthCheck] Échec revocation IAM (non-bloquant)');\n });\n } catch {\n // Fire-and-forget — never block\n }\n}\n\nexport function useTokenHealthCheck(options: UseTokenHealthCheckOptions): void {\n const { enabled, saasApiUrl, iamApiUrl, onTokenInvalid, onUnauthorized, onUserUpdated, debug = false } = options;\n\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const enabledRef = useRef(enabled);\n const callbacksRef = useRef({ onTokenInvalid, onUserUpdated });\n\n // Keep refs up to date\n enabledRef.current = enabled;\n callbacksRef.current = { onTokenInvalid, onUserUpdated };\n\n const performCheck = useCallback(async () => {\n if (!enabledRef.current) return;\n\n const storage = getNativeStorage();\n const token = storage.getItem(STORAGE_KEYS.AUTH_TOKEN) || storage.getItem(STORAGE_KEYS.TOKEN);\n\n if (!token) {\n if (debug) console.log('🔄 [HealthCheck] Pas de token — arrêt');\n return;\n }\n\n try {\n const result = await checkTokenValidity(saasApiUrl, token, debug);\n\n if (!result.valid) {\n // Token explicitly rejected by SaaS (401)\n // Optional recovery path: try refresh before invalidating locally.\n if (onUnauthorized) {\n try {\n const decision = await onUnauthorized();\n if (decision === 'recovered') {\n if (debug) console.log('🔄 [HealthCheck] Session récupérée via refresh ✅');\n return;\n }\n if (decision === 'noop') {\n // fall through\n } else if (decision === 'invalid') {\n // proceed to invalidation below\n }\n } catch {\n // ignore, proceed to invalidation below\n }\n }\n\n // 1. Revoke on IAM (fire-and-forget)\n if (iamApiUrl) {\n if (debug) console.log('🔄 [HealthCheck] Revocation IAM avec app_access_token_ref...');\n revokeOnIam(iamApiUrl, debug);\n }\n\n // 2. Clear frontend session\n callbacksRef.current.onTokenInvalid();\n return;\n }\n\n // Token valid — update user_infos if provided\n if (result.user && callbacksRef.current.onUserUpdated) {\n callbacksRef.current.onUserUpdated(result.user);\n }\n } catch {\n // Network/timeout/server error → silently keep session\n }\n }, [saasApiUrl, iamApiUrl, debug, onUnauthorized]);\n\n useEffect(() => {\n // Cleanup previous timers\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n\n if (!enabled || !saasApiUrl) return;\n\n if (debug) console.log('🔄 [HealthCheck] Activé — premier check dans 60s, puis toutes les 2 min');\n\n // First check after 60 seconds\n timerRef.current = setTimeout(() => {\n performCheck();\n\n // Then every 2 minutes\n intervalRef.current = setInterval(performCheck, INTERVAL_DELAY);\n }, FIRST_CHECK_DELAY);\n\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n if (intervalRef.current) clearInterval(intervalRef.current);\n };\n }, [enabled, saasApiUrl, performCheck, debug]);\n}\n\nexport default useTokenHealthCheck;\n","/**\n * Hook d'authentification Native SSO v1.0\n * Architecture Frontend-First avec appels directs à l'IAM\n * \n * @version 2.7.0\n */\n\nimport { useState, useCallback, useEffect, useRef } from 'react';\nimport { nativeAuthService } from '../services/nativeAuth';\nimport { getNativeStorage, setNativeAuthConfig, setNativeStorage, STORAGE_KEYS, isDebugMode, type NativeStorageAdapter } from '../services/api';\nimport { useTokenHealthCheck } from './useTokenHealthCheck';\nimport type {\n NativeAuthState,\n NativeAuthStatus,\n NativeExchangeResponse,\n AccountType,\n UserInfos,\n} from '../types/native';\n\n/** Helper: persist session to localStorage (unified keys) */\nfunction saveSession(exchangeResult: NativeExchangeResponse, accountType: AccountType | 'user' | 'client') {\n const storage = getNativeStorage();\n const sanctumToken = exchangeResult.auth_token || exchangeResult.token;\n storage.setItem(STORAGE_KEYS.AUTH_TOKEN, sanctumToken);\n if (exchangeResult.expires_at) {\n storage.setItem(STORAGE_KEYS.TOKEN_EXPIRES_AT, exchangeResult.expires_at);\n }\n if (exchangeResult.refresh_token) {\n storage.setItem(STORAGE_KEYS.REFRESH_TOKEN, exchangeResult.refresh_token);\n }\n if (exchangeResult.refresh_expires_at) {\n storage.setItem(STORAGE_KEYS.REFRESH_EXPIRES_AT, exchangeResult.refresh_expires_at);\n }\n \n // Build user object from user_infos if available, otherwise from user\n const baseUser = exchangeResult.user_infos \n ? { ...exchangeResult.user, ...exchangeResult.user_infos }\n : exchangeResult.user;\n \n // Enrich user with iam_reference and alias_reference\n const aliasRef = exchangeResult.user?.alias_reference || exchangeResult.alias_reference || '';\n const iamRef = exchangeResult.user?.reference || '';\n \n const userToStore = {\n ...baseUser,\n iam_reference: iamRef,\n alias_reference: aliasRef,\n };\n \n // Store alias_reference separately for quick access\n if (aliasRef) {\n storage.setItem(STORAGE_KEYS.ALIAS_REFERENCE, aliasRef);\n }\n \n // Store app_access_token_ref for fast IAM revocation\n if (exchangeResult.app_access_token_ref) {\n storage.setItem(STORAGE_KEYS.APP_ACCESS_TOKEN_REF, exchangeResult.app_access_token_ref);\n }\n \n // account_type is stored SEPARATELY, never inside the user object\n // Use the accountType string directly (already resolved by the caller)\n const acctType = typeof accountType === 'string' ? accountType : 'user';\n storage.setItem(STORAGE_KEYS.USER, JSON.stringify(userToStore));\n storage.setItem(STORAGE_KEYS.ACCOUNT_TYPE, acctType);\n \n return { token: sanctumToken, user: userToStore };\n}\n\n/** Helper: clear session from localStorage */\nfunction clearSession() {\n const storage = getNativeStorage();\n storage.removeItem(STORAGE_KEYS.AUTH_TOKEN);\n storage.removeItem(STORAGE_KEYS.TOKEN);\n storage.removeItem(STORAGE_KEYS.USER);\n storage.removeItem(STORAGE_KEYS.ACCOUNT_TYPE);\n storage.removeItem(STORAGE_KEYS.ALIAS_REFERENCE);\n storage.removeItem(STORAGE_KEYS.APP_ACCESS_TOKEN_REF);\n storage.removeItem(STORAGE_KEYS.REFRESH_TOKEN);\n storage.removeItem(STORAGE_KEYS.TOKEN_EXPIRES_AT);\n storage.removeItem(STORAGE_KEYS.REFRESH_EXPIRES_AT);\n}\n\nfunction getErrorMessage(err: unknown, context: string): { message: string; type: string } {\n if (err instanceof Error) {\n if (err.message.includes('fetch') || err.message.includes('network')) {\n return { message: 'Vérifiez votre connexion Internet', type: 'network' };\n }\n if (err.message.includes('timeout')) {\n return { message: 'Le serveur met trop de temps à répondre', type: 'timeout' };\n }\n return { message: err.message, type: 'unknown' };\n }\n return { message: `Erreur lors de ${context}`, type: 'unknown' };\n}\n\nexport interface UseNativeAuthOptions {\n /** URL du Backend SaaS */\n saasApiUrl: string;\n /** URL du Backend IAM */\n iamApiUrl: string;\n /** Charger les credentials automatiquement au montage */\n autoLoadCredentials?: boolean;\n /** Type de compte par défaut à persister (défaut: 'user') */\n defaultAccountType?: 'user' | 'client';\n /** \n * Préfixe de configuration IAM côté backend (défaut: 'iam').\n * Permet le multi-tenant dynamique : 'iam', 'iam_vendor', 'iam_client', etc.\n */\n configPrefix?: string;\n /** Stockage injecté pour les apps natives / Capacitor */\n storage?: NativeStorageAdapter;\n}\n\nexport function useNativeAuth(options: UseNativeAuthOptions) {\n const { saasApiUrl, iamApiUrl, autoLoadCredentials = true, defaultAccountType = 'user', configPrefix = 'iam', storage } = options;\n\n if (storage) {\n setNativeStorage(storage);\n }\n \n const configuredRef = useRef(false);\n \n // Debug réactif : mis à jour après loadCredentials\n const [isDebug, setIsDebug] = useState(isDebugMode());\n \n useEffect(() => {\n if (!configuredRef.current) {\n setNativeAuthConfig({ saasApiUrl, iamApiUrl, configPrefix, storage });\n configuredRef.current = true;\n }\n }, [saasApiUrl, iamApiUrl, configPrefix, storage]);\n\n const [state, setState] = useState<NativeAuthState & { otpMethod?: string | null; otpSentTo?: string | null }>({\n credentialsLoaded: false,\n processToken: null,\n status: null,\n user: null,\n application: null,\n prompt: null,\n alternativeMethod: null,\n conflict: null,\n loading: false,\n error: null,\n errorType: null,\n otpMethod: null,\n otpSentTo: null,\n });\n\n const [accountType, setAccountType] = useState<AccountType>('email');\n\n // --- Token Health Check ---\n const handleTokenInvalid = useCallback(() => {\n if (isDebug) console.log('🔐 [HealthCheck] Token invalide — déconnexion locale');\n clearSession();\n setState({\n credentialsLoaded: false,\n processToken: null,\n status: null,\n user: null,\n application: null,\n prompt: null,\n alternativeMethod: null,\n conflict: null,\n loading: false,\n error: null,\n errorType: null,\n otpMethod: null,\n otpSentTo: null,\n });\n }, [isDebug]);\n\n const handleUserUpdated = useCallback((userInfos: UserInfos) => {\n // Merge fresh user_infos into stored user\n const storedRaw = getNativeStorage().getItem(STORAGE_KEYS.USER);\n if (storedRaw) {\n try {\n const stored = JSON.parse(storedRaw);\n const merged = { ...stored, ...userInfos };\n getNativeStorage().setItem(STORAGE_KEYS.USER, JSON.stringify(merged));\n setState(prev => ({ ...prev, user: merged }));\n } catch { /* ignore */ }\n }\n }, []);\n\n const refreshingRef = useRef(false);\n const tryRefreshSession = useCallback(async (): Promise<'recovered' | 'invalid' | 'noop'> => {\n // Avoid parallel refreshes\n if (refreshingRef.current) return 'noop';\n refreshingRef.current = true;\n try {\n const refreshToken = getNativeStorage().getItem(STORAGE_KEYS.REFRESH_TOKEN);\n if (!refreshToken) {\n if (isDebug) console.log('🔐 [Refresh] Pas de refresh_token — impossible de recuperer');\n return 'noop';\n }\n\n // Offline: never logout and don't attempt refresh\n if (typeof navigator !== 'undefined' && !navigator.onLine) {\n if (isDebug) console.log('🔐 [Refresh] Offline — skip');\n return 'noop';\n }\n\n const res = await nativeAuthService.refresh();\n if (res.success) {\n // Update in-memory state from localStorage\n const storedUser = getNativeStorage().getItem(STORAGE_KEYS.USER);\n if (storedUser) {\n try {\n const user = JSON.parse(storedUser);\n setState(prev => ({ ...prev, user, status: 'completed' }));\n } catch {\n // ignore\n }\n }\n return 'recovered';\n }\n\n // If backend explicitly rejects refresh, treat as invalid session\n if (res.success === false && res.error_type === 'invalid_refresh') {\n if (isDebug) console.log('🔐 [Refresh] invalid_refresh — deconnexion autorisee');\n return 'invalid';\n }\n\n return 'noop';\n } catch (err) {\n // Network/timeout/5xx => keep session\n if (isDebug) console.log('🔐 [Refresh] Echec refresh (non-bloquant)');\n return 'noop';\n } finally {\n refreshingRef.current = false;\n }\n }, [isDebug]);\n\n useTokenHealthCheck({\n enabled: state.status === 'completed' && state.user !== null,\n saasApiUrl,\n iamApiUrl,\n onTokenInvalid: handleTokenInvalid,\n onUnauthorized: tryRefreshSession,\n onUserUpdated: handleUserUpdated,\n debug: isDebug,\n });\n\n // Proactive refresh based on expires_at (best-effort)\n useEffect(() => {\n if (state.status !== 'completed' || !state.user) return;\n\n const expiresAt = getNativeStorage().getItem(STORAGE_KEYS.TOKEN_EXPIRES_AT);\n if (!expiresAt) return;\n\n const ts = Date.parse(expiresAt);\n if (Number.isNaN(ts)) return;\n\n // Refresh 5 minutes before expiry (server time skew tolerant)\n const marginMs = 5 * 60 * 1000;\n const delay = Math.max(ts - Date.now() - marginMs, 30 * 1000); // at least 30s\n\n const t = setTimeout(() => {\n tryRefreshSession();\n }, delay);\n\n return () => clearTimeout(t);\n }, [state.status, state.user, tryRefreshSession]);\n\n // Check existing session\n useEffect(() => {\n const storage = getNativeStorage();\n const storedToken = storage.getItem(STORAGE_KEYS.AUTH_TOKEN) || storage.getItem(STORAGE_KEYS.TOKEN);\n const storedUser = storage.getItem(STORAGE_KEYS.USER);\n \n if (storedToken && storedUser) {\n try {\n const user = JSON.parse(storedUser);\n setState(prev => ({ ...prev, user, status: 'completed' }));\n } catch {\n clearSession();\n }\n }\n }, []);\n\n // Background auto-refresh of credentials before TTL expiration\n useEffect(() => {\n // Only refresh while user is NOT authenticated and credentials are loaded\n if (state.status === 'completed' || !state.credentialsLoaded) return;\n\n const ttl = nativeAuthService.getCredentialsTtl();\n const refreshInterval = Math.max((ttl - 30) * 1000, 30000); // At least 30s\n\n if (isDebug) {\n console.log(`🔄 [Native] Auto-refresh credentials every ${refreshInterval / 1000}s (TTL: ${ttl}s)`);\n }\n\n const timer = setInterval(async () => {\n try {\n await nativeAuthService.loadCredentials();\n // Re-check debug après refresh (le backend peut changer la valeur)\n setIsDebug(isDebugMode());\n if (isDebugMode()) console.log('✅ [Native] Credentials auto-refreshed');\n } catch (err) {\n if (isDebugMode()) console.warn('⚠️ [Native] Auto-refresh failed:', err);\n }\n }, refreshInterval);\n\n return () => clearInterval(timer);\n }, [state.status, state.credentialsLoaded, isDebug]);\n\n const loadCredentials = useCallback(async () => {\n setState(prev => ({ ...prev, loading: true, error: null }));\n try {\n await nativeAuthService.loadCredentials();\n // Mettre à jour le debug réactif après chargement des credentials\n setIsDebug(isDebugMode());\n setState(prev => ({ ...prev, credentialsLoaded: true, loading: false }));\n return { success: true };\n } catch (err) {\n const { message, type } = getErrorMessage(err, 'le chargement');\n setState(prev => ({ ...prev, loading: false, error: message, errorType: type }));\n return { success: false, error_type: type };\n }\n }, []);\n\n // Auto-load credentials\n useEffect(() => {\n if (autoLoadCredentials && !state.credentialsLoaded && !state.user) {\n loadCredentials();\n }\n }, [autoLoadCredentials, state.credentialsLoaded, state.user, loadCredentials]);\n\n const loginWithEmail = useCallback(async (\n email: string,\n acctType: 'user' | 'admin' = 'user'\n ) => {\n setState(prev => ({ ...prev, loading: true, error: null, errorType: null }));\n try {\n if (!nativeAuthService.hasCredentials()) {\n await nativeAuthService.loadCredentials();\n }\n const response = await nativeAuthService.loginEmail(email, acctType);\n\n // Garde: ancien backend peut retourner needs_access directement depuis init\n if (response.success && (response.status === 'needs_access' || response.needs_access)) {\n setState(prev => ({\n ...prev,\n processToken: response.process_token || null,\n status: 'needs_access' as NativeAuthStatus,\n application: response.application || null,\n prompt: response.prompt || null,\n user: response.user ? {\n reference: `USR-${response.user.id}`,\n name: response.user.name,\n email: response.user.email,\n } : null,\n loading: false,\n }));\n return { success: true, status: 'needs_access' };\n }\n\n if (response.success && response.process_token) {\n setState(prev => ({\n ...prev,\n processToken: response.process_token!,\n status: response.status as NativeAuthStatus,\n application: response.application || null,\n prompt: response.prompt || null,\n user: response.user ? {\n reference: `USR-${response.user.id}`,\n name: response.user.name,\n email: response.user.email,\n } : null,\n loading: false,\n }));\n return { success: true, status: response.status };\n }\n\n if (response.error_type === 'alias_disabled' && response.alternative_method) {\n setState(prev => ({\n ...prev,\n alternativeMethod: {\n type: response.alternative_method!,\n value: response.alternative_method === 'email' \n ? response.alternative_email! \n : response.alternative_phone!,\n },\n loading: false,\n error: 'Cette méthode de connexion est désactivée',\n errorType: 'alias_disabled',\n }));\n return { success: false, error_type: 'alias_disabled' };\n }\n\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Erreur d\\'authentification',\n errorType: response.error_type || 'unknown',\n }));\n return { success: false, error_type: response.error_type };\n } catch (err) {\n const { message, type } = getErrorMessage(err, 'l\\'authentification');\n setState(prev => ({ ...prev, loading: false, error: message, errorType: type }));\n return { success: false, error_type: type };\n }\n }, []);\n\n const loginWithPhone = useCallback(async (\n ccphone: string,\n phone: string,\n acctType: 'user' | 'admin' = 'user'\n ) => {\n setState(prev => ({ ...prev, loading: true, error: null, errorType: null }));\n try {\n if (!nativeAuthService.hasCredentials()) {\n await nativeAuthService.loadCredentials();\n }\n const response = await nativeAuthService.loginPhone(ccphone, phone, acctType);\n\n // Garde: ancien backend peut retourner needs_access directement depuis init\n if (response.success && (response.status === 'needs_access' || response.needs_access)) {\n setState(prev => ({\n ...prev,\n processToken: response.process_token || null,\n status: 'needs_access' as NativeAuthStatus,\n application: response.application || null,\n user: response.user ? {\n reference: `USR-${response.user.id}`,\n name: response.user.name,\n email: response.user.email,\n } : null,\n loading: false,\n }));\n return { success: true, status: 'needs_access' };\n }\n\n if (response.success && response.process_token) {\n setState(prev => ({\n ...prev,\n processToken: response.process_token!,\n status: response.status as NativeAuthStatus,\n application: response.application || null,\n loading: false,\n }));\n return { success: true, status: response.status };\n }\n\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Erreur d\\'authentification',\n errorType: response.error_type || 'unknown',\n }));\n return { success: false, error_type: response.error_type };\n } catch (err) {\n const { message, type } = getErrorMessage(err, 'l\\'authentification');\n setState(prev => ({ ...prev, loading: false, error: message, errorType: type }));\n return { success: false, error_type: type };\n }\n }, []);\n\n const loginWithAccessOtp = useCallback(async (otpCode: string) => {\n setState(prev => ({ ...prev, loading: true, error: null }));\n try {\n if (!nativeAuthService.hasCredentials()) {\n await nativeAuthService.loadCredentials();\n }\n const response = await nativeAuthService.loginAccessOtp(otpCode);\n\n // v4.5: Handle needs_access (user needs to confirm access)\n // Tolère success:true ou success:false avec needs_access\n if ((response.needs_access || response.status === 'needs_access') && response.process_token) {\n setState(prev => ({\n ...prev,\n processToken: response.process_token!,\n status: 'needs_access' as NativeAuthStatus,\n application: response.application || null,\n user: response.user ? {\n reference: `USR-${response.user.id}`,\n name: response.user.name,\n email: response.user.email,\n } : null,\n loading: false,\n }));\n return { success: true, status: 'needs_access' };\n }\n\n // v4.5: Handle direct callback_token (user already has access)\n if (response.success && response.callback_token) {\n setState(prev => ({ ...prev, loading: false }));\n return { success: true, status: 'completed', callback_token: response.callback_token };\n }\n\n // Legacy: Handle process_token response\n if (response.success && response.process_token) {\n setState(prev => ({\n ...prev,\n processToken: response.process_token!,\n status: response.status as NativeAuthStatus,\n loading: false,\n }));\n return { success: true, status: response.status };\n }\n\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Code invalide',\n errorType: response.error_type || 'invalid_otp',\n }));\n return { success: false, error_type: response.error_type };\n } catch (err) {\n const { message, type } = getErrorMessage(err, 'l\\'authentification');\n setState(prev => ({ ...prev, loading: false, error: message, errorType: type }));\n return { success: false, error_type: type };\n }\n }, []);\n\n const register = useCallback(async (\n data: {\n name: string;\n email?: string;\n ccphone: string;\n phone: string;\n town?: string;\n country?: string;\n }\n ) => {\n setState(prev => ({ ...prev, loading: true, error: null, errorType: null }));\n try {\n if (!nativeAuthService.hasCredentials()) {\n await nativeAuthService.loadCredentials();\n }\n const registrationType = accountType === 'phone-only' ? 'phone' : 'email';\n \n const response = await nativeAuthService.register({\n ...data,\n email: registrationType === 'phone' ? '' : data.email,\n registration_type: registrationType,\n });\n\n if (response.success && response.process_token) {\n setState(prev => ({\n ...prev,\n processToken: response.process_token!,\n status: response.status as NativeAuthStatus,\n otpMethod: response.otp_method || null,\n otpSentTo: response.otp_sent_to || null,\n conflict: response.conflict ? {\n type: response.conflict.type,\n maskedIdentifier: response.conflict.masked_identifier,\n options: {\n canLogin: response.conflict.options.can_login,\n canRecoverByEmail: response.conflict.options.can_recover_by_email,\n canRecoverBySms: response.conflict.options.can_recover_by_sms,\n maskedEmail: response.conflict.options.masked_email,\n maskedPhone: response.conflict.options.masked_phone,\n },\n } : null,\n loading: false,\n }));\n return { success: true, status: response.status };\n }\n\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Erreur lors de l\\'inscription',\n errorType: response.error_type || 'unknown',\n }));\n return { success: false, error_type: response.error_type };\n } catch (err) {\n const { message, type } = getErrorMessage(err, 'l\\'inscription');\n setState(prev => ({ ...prev, loading: false, error: message, errorType: type }));\n return { success: false, error_type: type };\n }\n }, [accountType]);\n\n const submitPassword = useCallback(async (password: string) => {\n if (!state.processToken) {\n return { success: false, error: 'Session invalide' };\n }\n setState(prev => ({ ...prev, loading: true, error: null }));\n try {\n const response = await nativeAuthService.validate(state.processToken, { password });\n\n if (response.success && response.callback_token) {\n const exchangeResult = await nativeAuthService.exchange(response.callback_token);\n if (exchangeResult.success) {\n const { user: savedUser } = saveSession(exchangeResult, defaultAccountType);\n setState(prev => ({\n ...prev,\n status: 'completed',\n user: savedUser,\n processToken: null,\n loading: false,\n }));\n return { success: true, user: savedUser, callback_token: response.callback_token };\n }\n setState(prev => ({\n ...prev,\n loading: false,\n error: exchangeResult.message || 'Erreur lors de l\\'échange',\n errorType: 'exchange_failed',\n }));\n return { success: false, error_type: 'exchange_failed' };\n }\n\n if (response.requires_2fa) {\n setState(prev => ({ ...prev, status: 'pending_2fa', loading: false }));\n return { success: true, requires_2fa: true };\n }\n\n // needs_access after password validation — stocker le nouveau process_token\n if (response.success && (response.status === 'needs_access' || response.needs_access)) {\n setState(prev => ({\n ...prev,\n status: 'needs_access' as NativeAuthStatus,\n processToken: response.process_token || prev.processToken,\n application: response.application || prev.application,\n user: response.user ? {\n reference: `USR-${response.user.id}`,\n name: response.user.name,\n email: response.user.email,\n } : prev.user,\n prompt: response.prompt || prev.prompt,\n loading: false,\n }));\n return { success: true, status: 'needs_access' };\n }\n\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Mot de passe incorrect',\n errorType: response.error_type || 'invalid_password',\n }));\n return { success: false, error_type: response.error_type };\n } catch (err) {\n const { message, type } = getErrorMessage(err, 'la validation');\n setState(prev => ({ ...prev, loading: false, error: message, errorType: type }));\n return { success: false, error_type: type };\n }\n }, [state.processToken, defaultAccountType]);\n\n const submitOtp = useCallback(async (otpCode: string) => {\n if (!state.processToken) {\n return { success: false, error: 'Session invalide' };\n }\n setState(prev => ({ ...prev, loading: true, error: null }));\n try {\n const response = await nativeAuthService.validate(state.processToken, { otp_code: otpCode });\n\n if (response.success && response.callback_token) {\n const exchangeResult = await nativeAuthService.exchange(response.callback_token);\n if (exchangeResult.success) {\n const { user: savedUser } = saveSession(exchangeResult, defaultAccountType);\n setState(prev => ({\n ...prev,\n status: 'completed',\n user: savedUser,\n processToken: null,\n loading: false,\n }));\n return { success: true, user: savedUser, callback_token: response.callback_token };\n }\n setState(prev => ({\n ...prev,\n loading: false,\n error: exchangeResult.message || 'Erreur lors de l\\'échange',\n errorType: 'exchange_failed',\n }));\n return { success: false, error_type: 'exchange_failed' };\n }\n\n if (response.success && response.status === 'pending_registration') {\n setState(prev => ({ ...prev, status: 'pending_registration', loading: false }));\n return { success: true, status: 'pending_registration' };\n }\n\n // needs_access after OTP validation — stocker le nouveau process_token\n if (response.success && (response.status === 'needs_access' || response.needs_access)) {\n setState(prev => ({\n ...prev,\n status: 'needs_access' as NativeAuthStatus,\n processToken: response.process_token || prev.processToken,\n application: response.application || prev.application,\n user: response.user ? {\n reference: `USR-${response.user.id}`,\n name: response.user.name,\n email: response.user.email,\n } : prev.user,\n prompt: response.prompt || prev.prompt,\n loading: false,\n }));\n return { success: true, status: 'needs_access' };\n }\n\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Code incorrect',\n errorType: response.error_type || 'invalid_otp',\n }));\n return { success: false, error_type: response.error_type };\n } catch (err) {\n const { message, type } = getErrorMessage(err, 'la vérification');\n setState(prev => ({ ...prev, loading: false, error: message, errorType: type }));\n return { success: false, error_type: type };\n }\n }, [state.processToken, defaultAccountType]);\n\n const submitTotp = useCallback(async (totpCode: string) => {\n if (!state.processToken) {\n return { success: false, error: 'Session invalide' };\n }\n setState(prev => ({ ...prev, loading: true, error: null }));\n try {\n const response = await nativeAuthService.verifyTotp(state.processToken, totpCode);\n\n if (response.success && response.callback_token) {\n const exchangeResult = await nativeAuthService.exchange(response.callback_token);\n if (exchangeResult.success) {\n const { user: savedUser } = saveSession(exchangeResult, defaultAccountType);\n setState(prev => ({\n ...prev,\n status: 'completed',\n user: savedUser,\n processToken: null,\n loading: false,\n }));\n return { success: true, user: savedUser };\n }\n }\n\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Code 2FA incorrect',\n errorType: response.error_type || 'invalid_totp',\n }));\n return { success: false, error_type: response.error_type };\n } catch (err) {\n const { message, type } = getErrorMessage(err, 'la vérification 2FA');\n setState(prev => ({ ...prev, loading: false, error: message, errorType: type }));\n return { success: false, error_type: type };\n }\n }, [state.processToken, defaultAccountType]);\n\n const grantAccess = useCallback(async () => {\n if (!state.processToken) {\n return { success: false, error: 'Session invalide' };\n }\n setState(prev => ({ ...prev, loading: true, error: null }));\n try {\n const response = await nativeAuthService.grantAccess(state.processToken);\n\n if (response.success && response.callback_token) {\n const exchangeResult = await nativeAuthService.exchange(response.callback_token);\n if (exchangeResult.success) {\n const { user: savedUser } = saveSession(exchangeResult, defaultAccountType);\n setState(prev => ({\n ...prev,\n status: 'completed',\n user: savedUser,\n processToken: null,\n loading: false,\n }));\n return { success: true, user: savedUser, callback_token: response.callback_token };\n }\n }\n\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Erreur lors de l\\'accès',\n errorType: response.error_type || 'unknown',\n }));\n return { success: false };\n } catch (err) {\n const { message, type } = getErrorMessage(err, 'l\\'accès');\n setState(prev => ({ ...prev, loading: false, error: message, errorType: type }));\n return { success: false, error_type: type };\n }\n }, [state.processToken, defaultAccountType]);\n\n const resendOtp = useCallback(async () => {\n if (!state.processToken) {\n return { success: false, error: 'Session invalide' };\n }\n setState(prev => ({ ...prev, loading: true, error: null }));\n try {\n const response = await nativeAuthService.resendOtp(state.processToken);\n setState(prev => ({ ...prev, loading: false }));\n return { \n success: response.success, \n cooldown: response.cooldown_remaining,\n message: response.message,\n otp_code_dev: response.otp_code_dev,\n };\n } catch (err) {\n const { message, type } = getErrorMessage(err, 'le renvoi');\n setState(prev => ({ ...prev, loading: false, error: message, errorType: type }));\n return { success: false };\n }\n }, [state.processToken]);\n\n const setSession = useCallback((data: NativeExchangeResponse) => {\n const { user: savedUser } = saveSession(data, defaultAccountType);\n setState(prev => ({\n ...prev,\n user: savedUser,\n status: 'completed',\n processToken: null,\n }));\n }, [defaultAccountType]);\n\n const logout = useCallback(async () => {\n const storage = getNativeStorage();\n const token = storage.getItem(STORAGE_KEYS.AUTH_TOKEN) || storage.getItem(STORAGE_KEYS.TOKEN);\n try {\n if (token) {\n await nativeAuthService.logout(token);\n }\n } catch { /* ignore */ }\n\n clearSession();\n \n setState({\n credentialsLoaded: false,\n processToken: null,\n status: null,\n user: null,\n application: null,\n prompt: null,\n alternativeMethod: null,\n conflict: null,\n loading: false,\n error: null,\n errorType: null,\n otpMethod: null,\n otpSentTo: null,\n });\n }, []);\n\n const reset = useCallback(() => {\n setState(prev => ({\n ...prev,\n processToken: null,\n status: null,\n application: null,\n prompt: null,\n alternativeMethod: null,\n conflict: null,\n error: null,\n errorType: null,\n }));\n }, []);\n\n const clearError = useCallback(() => {\n setState(prev => ({ ...prev, error: null, errorType: null }));\n }, []);\n\n return {\n // State\n credentialsLoaded: state.credentialsLoaded,\n processToken: state.processToken,\n status: state.status,\n user: state.user,\n application: state.application,\n prompt: state.prompt,\n alternativeMethod: state.alternativeMethod,\n conflict: state.conflict,\n loading: state.loading,\n error: state.error,\n errorType: state.errorType,\n isAuthenticated: state.status === 'completed' && state.user !== null,\n \n /** Debug réactif — mis à jour après loadCredentials */\n isDebug,\n \n accountType,\n isPhoneOnly: accountType === 'phone-only',\n otpMethod: state.otpMethod,\n otpSentTo: state.otpSentTo,\n\n // Methods\n loadCredentials,\n loginWithEmail,\n loginWithPhone,\n loginWithAccessOtp,\n submitPassword,\n submitOtp,\n submitTotp,\n grantAccess,\n resendOtp,\n setSession,\n logout,\n reset,\n clearError,\n register,\n setAccountType,\n };\n}\n\nexport default useNativeAuth;\n","/**\n * Login Modal for @ollaid/native-sso\n * Complete login flow aligned with Native SSO design\n * \n * @version 2.7.0\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport {\n Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogBody, DialogFooter,\n Button, Input, Label,\n IconShieldCheck, IconMail, IconPhone, IconLock, IconKeyRound,\n IconArrowLeft, IconEye, IconEyeOff, IconCheckCircle2, IconLoader2,\n} from './ui';\nimport OTPInput from './OTPInput';\nimport PasswordRecoveryModal from './PasswordRecoveryModal';\nimport { useNativeAuth } from '../hooks/useNativeAuth';\nimport { getAuthToken } from '../services/api';\nimport type { UserInfos } from '../types/native';\n\ntype LoginStep = 'choice' | 'email-check' | 'email-password' | 'email-otp' | 'email-create-password' | 'phone-input' | 'phone-otp' | 'access-otp';\n\nexport interface LoginModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onSwitchToSignup: () => void;\n onLoginSuccess?: (token: string, user: UserInfos) => void;\n saasApiUrl: string;\n iamApiUrl: string;\n loading?: boolean;\n showSwitchToSignup?: boolean;\n /** Type de compte par défaut à persister dans localStorage */\n defaultAccountType?: 'user' | 'client';\n /** Pre-fill phone number and go directly to phone-input step */\n initialPhone?: string;\n}\n\ntype LoginResult = {\n success: boolean;\n user?: Partial<UserInfos> & Pick<UserInfos, 'name'>;\n};\n\n// Design tokens\nconst C = {\n primary: '#002147',\n accent: '#e8430a',\n green: '#16a34a',\n greenBg: '#dcfce7',\n amber: '#f59e0b',\n amberBg: '#fef3c7',\n gray100: '#f3f4f6',\n gray200: '#e5e7eb',\n gray500: '#6b7280',\n gray700: '#374151',\n gray900: '#111827',\n red: '#dc2626',\n redBg: '#fef2f2',\n white: '#ffffff',\n} as const;\n\n// Reusable style helpers\nconst iconCircle = (bg: string): React.CSSProperties => ({\n margin: '0 auto', width: '3rem', height: '3rem', backgroundColor: bg, borderRadius: '50%',\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n});\n\nconst backBtnStyle: React.CSSProperties = {\n position: 'absolute', left: '1rem', top: '1rem', background: 'none', border: 'none',\n cursor: 'pointer', padding: '0.5rem', borderRadius: '0.375rem', color: C.gray700, zIndex: 10,\n};\n\nconst linkStyle: React.CSSProperties = {\n color: C.primary, cursor: 'pointer', background: 'none', border: 'none',\n fontWeight: 500, textDecoration: 'underline', fontSize: '0.875rem',\n};\n\nconst errorBoxStyle: React.CSSProperties = {\n padding: '0.75rem', borderRadius: '0.375rem', backgroundColor: C.redBg,\n color: C.red, fontSize: '0.875rem',\n};\n\nconst methodBtnStyle: React.CSSProperties = {\n width: '100%', height: '3.5rem', justifyContent: 'flex-start', gap: '0.75rem',\n textAlign: 'left' as const, backgroundColor: C.gray100, borderColor: C.gray200,\n};\n\nconst methodIconStyle = (bg: string): React.CSSProperties => ({\n width: '2.5rem', height: '2.5rem', backgroundColor: bg, borderRadius: '0.5rem',\n display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0,\n});\n\nexport function LoginModal({\n open, onOpenChange, onSwitchToSignup, onLoginSuccess, saasApiUrl, iamApiUrl, loading, showSwitchToSignup = true, defaultAccountType, initialPhone,\n}: LoginModalProps) {\n const {\n status, user, application, alternativeMethod, loading: authLoading, error: authError,\n loginWithEmail, loginWithPhone, submitPassword, submitOtp, grantAccess, loginWithAccessOtp,\n resendOtp, reset: resetAuth, clearError,\n } = useNativeAuth({ saasApiUrl, iamApiUrl, defaultAccountType });\n\n const [step, setStep] = useState<LoginStep>('choice');\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [showPassword, setShowPassword] = useState(false);\n const [userName, setUserName] = useState<string | null>(null);\n const [phone, setPhone] = useState('');\n const [phoneOtpCode, setPhoneOtpCode] = useState('');\n const [emailOtpCode, setEmailOtpCode] = useState('');\n const [accessOtpCode, setAccessOtpCode] = useState('');\n const [localError, setLocalError] = useState<string | null>(null);\n const [resendCooldown, setResendCooldown] = useState(0);\n const [loginSuccess, setLoginSuccess] = useState(false);\n const [loginData, setLoginData] = useState<{ token: string; user: UserInfos } | null>(null);\n const [showPasswordRecovery, setShowPasswordRecovery] = useState(false);\n\n const CCPHONE = '+221';\n const isSubmitting = authLoading || loading;\n const error = localError || authError;\n\n useEffect(() => {\n if (resendCooldown > 0) {\n const timer = setTimeout(() => setResendCooldown(p => p - 1), 1000);\n return () => clearTimeout(timer);\n }\n }, [resendCooldown]);\n\n useEffect(() => {\n if (status === 'pending_password') setStep('email-password');\n else if (status === 'pending_otp') {\n if (step === 'email-check' || step === 'email-password') setStep('email-otp');\n else if (step === 'phone-input') setStep('phone-otp');\n setResendCooldown(60);\n }\n }, [status, step]);\n\n useEffect(() => {\n if (loginSuccess && loginData) {\n const timer = setTimeout(() => {\n onLoginSuccess?.(loginData.token, loginData.user);\n }, 1000);\n return () => clearTimeout(timer);\n }\n }, [loginSuccess, loginData, onLoginSuccess]);\n\n const resetState = useCallback(() => {\n setStep('choice'); setEmail(''); setPassword('');\n setShowPassword(false); setUserName(null); setPhone(''); setPhoneOtpCode(''); setEmailOtpCode('');\n setAccessOtpCode(''); setLocalError(null); setLoginSuccess(false); setLoginData(null);\n setResendCooldown(0); resetAuth();\n }, [resetAuth]);\n\n useEffect(() => { if (!open) resetState(); }, [open, resetState]);\n\n // Pre-fill phone from conflict resolution\n useEffect(() => {\n if (open && initialPhone) {\n setStep('phone-input');\n setPhone(initialPhone);\n }\n }, [open, initialPhone]);\n\n /**\n * Finalise la connexion après que useNativeAuth ait déjà fait l'exchange.\n * Ne PAS re-appeler nativeAuthService.exchange() ici — le hook l'a déjà fait.\n */\n const finalizeLogin = (result: LoginResult) => {\n if (result.success && result.user) {\n const token = getAuthToken() || '';\n setLoginData({ token, user: result.user as UserInfos });\n setLoginSuccess(true);\n }\n };\n\n const handleEmailCheck = async () => {\n setLocalError(null); clearError();\n if (!email.trim()) { setLocalError(\"L'adresse email est requise\"); return; }\n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)) { setLocalError('Adresse email invalide'); return; }\n const result = await loginWithEmail(email.trim());\n if (result.success && user?.name) setUserName(user.name);\n };\n\n const handleEmailPasswordSubmit = async (e: React.FormEvent) => {\n e.preventDefault(); setLocalError(null); clearError();\n if (!password) { setLocalError('Le mot de passe est requis'); return; }\n if (password.length < 8) { setLocalError('Le mot de passe doit contenir au moins 8 caractères'); return; }\n const result = await submitPassword(password);\n finalizeLogin(result);\n };\n\n const handleEmailOtpVerify = async () => {\n setLocalError(null); clearError();\n if (emailOtpCode.length !== 6) { setLocalError('Le code doit contenir 6 chiffres'); return; }\n const result = await submitOtp(emailOtpCode);\n finalizeLogin(result);\n };\n\n const handlePhoneInit = async () => {\n setLocalError(null); clearError();\n const cleanPhone = phone.replace(/\\s/g, '');\n if (cleanPhone.length !== 9) { setLocalError('Le numéro doit contenir exactement 9 chiffres'); return; }\n await loginWithPhone(CCPHONE, cleanPhone);\n };\n\n const handlePhoneVerify = async () => {\n setLocalError(null); clearError();\n if (phoneOtpCode.length !== 6) { setLocalError('Veuillez entrer le code à 6 chiffres'); return; }\n const result = await submitOtp(phoneOtpCode);\n finalizeLogin(result);\n };\n\n const handleAccessOtpSubmit = async () => {\n setLocalError(null); clearError();\n if (accessOtpCode.length !== 8) { setLocalError('Veuillez entrer le code à 8 chiffres'); return; }\n const result = await loginWithAccessOtp(accessOtpCode);\n finalizeLogin(result);\n };\n\n const handleGrantAccess = async () => {\n setLocalError(null); clearError();\n const result = await grantAccess();\n finalizeLogin(result);\n };\n\n const handleResendOTP = async () => {\n if (resendCooldown > 0) return;\n const result = await resendOtp();\n if (result.success) setResendCooldown(result.cooldown || 60);\n };\n\n const goBack = () => {\n setLocalError(null); clearError();\n switch (step) {\n case 'email-check': case 'phone-input': case 'access-otp': setStep('choice'); resetAuth(); break;\n case 'email-password': case 'email-otp': setStep('email-check'); resetAuth(); break;\n case 'phone-otp': setStep('phone-input'); resetAuth(); break;\n default: setStep('choice'); resetAuth();\n }\n };\n\n // Render helpers\n const renderError = () => error ? <div style={errorBoxStyle}>{error}</div> : null;\n\n const renderBackBtn = () => (\n <button onClick={goBack} style={backBtnStyle} type=\"button\">\n <IconArrowLeft style={{ width: '1rem', height: '1rem' }} />\n </button>\n );\n\n const renderResendLink = () => (\n <div style={{ textAlign: 'center', fontSize: '0.875rem' }}>\n {resendCooldown > 0 ? (\n <span style={{ color: C.gray500 }}>Renvoyer dans {resendCooldown}s</span>\n ) : (\n <button type=\"button\" style={linkStyle} onClick={handleResendOTP}>\n Code non reçu ? Renvoyer\n </button>\n )}\n </div>\n );\n\n const renderLoaderBtn = (text: string, loadingText: string, onClick: () => void, disabled: boolean, extraStyle?: React.CSSProperties) => (\n <Button onClick={onClick} disabled={isSubmitting || disabled} style={{ width: '100%', ...extraStyle }}>\n {isSubmitting ? (\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <IconLoader2 style={{ width: '1rem', height: '1rem' }} />\n {loadingText}\n </span>\n ) : text}\n </Button>\n );\n\n return (\n <>\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent>\n\n {/* ===================== SUCCESS ===================== */}\n {loginSuccess && loginData ? (\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={{ ...iconCircle(C.greenBg), width: '5rem', height: '5rem' }}>\n <IconCheckCircle2 style={{ width: '3rem', height: '3rem', color: C.green }} />\n </div>\n <DialogTitle>Connexion réussie</DialogTitle>\n <DialogDescription>\n <span style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '0.5rem', marginTop: '0.5rem' }}>\n <IconLoader2 style={{ width: '1rem', height: '1rem', color: C.gray500 }} />\n Redirection en cours...\n </span>\n </DialogDescription>\n </DialogHeader>\n\n /* ===================== NEEDS ACCESS ===================== */\n ) : status === 'needs_access' && user && application ? (\n <>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={{ ...iconCircle(C.primary + '1a'), width: '4rem', height: '4rem' }}>\n {application.logo ? (\n <img src={application.logo} alt={application.name} style={{ width: '2.5rem', height: '2.5rem', borderRadius: '0.5rem' }} />\n ) : (\n <IconShieldCheck style={{ width: '2rem', height: '2rem', color: C.primary }} />\n )}\n </div>\n <DialogTitle>Bienvenue sur {application.name} !</DialogTitle>\n <DialogDescription>\n Bonjour <strong style={{ color: C.gray900 }}>{user.name}</strong>, vous n'avez pas encore de compte sur <strong style={{ color: C.primary }}>{application.name}</strong>.\n </DialogDescription>\n </DialogHeader>\n <DialogBody>\n <div style={{ padding: '1rem', backgroundColor: C.gray100, borderRadius: '0.5rem', fontSize: '0.875rem', color: C.gray500 }}>\n Votre compte <strong style={{ color: C.primary }}>iam.ollaid.com</strong> existe déjà. Cliquez sur Confirmer pour créer votre accès à <strong style={{ color: C.gray900 }}>{application.name}</strong>.\n </div>\n {renderError()}\n </DialogBody>\n <DialogFooter>\n <Button onClick={handleGrantAccess} disabled={isSubmitting} style={{ width: '100%' }}>\n {isSubmitting ? (\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <IconLoader2 style={{ width: '1rem', height: '1rem' }} />\n Création en cours...\n </span>\n ) : 'Confirmer la création de mon compte'}\n </Button>\n <Button variant=\"outline\" onClick={() => { resetAuth(); setStep('choice'); }} disabled={isSubmitting} style={{ width: '100%' }}>\n Annuler\n </Button>\n </DialogFooter>\n </>\n\n /* ===================== ALIAS DISABLED ===================== */\n ) : alternativeMethod ? (\n <>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={{ ...iconCircle(C.amberBg), width: '4rem', height: '4rem' }}>\n {alternativeMethod.type === 'email' ? (\n <IconMail style={{ width: '2rem', height: '2rem', color: C.amber }} />\n ) : (\n <IconPhone style={{ width: '2rem', height: '2rem', color: C.amber }} />\n )}\n </div>\n <DialogTitle>Moyen de connexion désactivé</DialogTitle>\n <DialogDescription>\n Vos identifiants sont corrects, mais vous avez désactivé ce moyen de connexion depuis votre compte IAM.\n </DialogDescription>\n </DialogHeader>\n <DialogBody>\n {alternativeMethod.value && (\n <div style={{ padding: '1rem', backgroundColor: C.gray100, borderRadius: '0.5rem' }}>\n <p style={{ fontSize: '0.875rem', color: C.gray500, marginBottom: '0.75rem' }}>Vous pouvez vous connecter avec :</p>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem', fontSize: '0.875rem', fontWeight: 500, color: C.gray900 }}>\n {alternativeMethod.type === 'phone' ? (\n <IconPhone style={{ width: '1rem', height: '1rem', color: C.primary }} />\n ) : (\n <IconMail style={{ width: '1rem', height: '1rem', color: C.primary }} />\n )}\n <span>{alternativeMethod.value}</span>\n </div>\n </div>\n )}\n </DialogBody>\n <DialogFooter>\n <Button onClick={() => {\n if (alternativeMethod.type === 'phone') setStep('phone-input');\n else setStep('email-check');\n resetAuth();\n }} style={{ width: '100%' }}>\n {alternativeMethod.type === 'phone' ? 'Se connecter par téléphone' : 'Se connecter par email'}\n </Button>\n <Button variant=\"outline\" onClick={() => window.open('https://iam.ollaid.com', '_blank')} style={{ width: '100%' }}>\n Réactiver depuis iam.ollaid.com\n </Button>\n <Button variant=\"ghost\" onClick={() => onOpenChange(false)} style={{ width: '100%' }}>\n Annuler\n </Button>\n </DialogFooter>\n </>\n\n /* ===================== MAIN STEPS ===================== */\n ) : (\n <>\n {step !== 'choice' && renderBackBtn()}\n\n {/* ===== CHOICE ===== */}\n {step === 'choice' && (\n <>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={iconCircle(C.gray100)}>\n <IconShieldCheck style={{ width: '1.5rem', height: '1.5rem', color: C.primary }} />\n </div>\n <DialogTitle>Connexion</DialogTitle>\n <DialogDescription>Choisissez votre méthode de connexion</DialogDescription>\n </DialogHeader>\n <DialogBody>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.75rem' }}>\n {renderError()}\n <Button variant=\"outline\" onClick={() => setStep('email-check')} style={methodBtnStyle}>\n <div style={methodIconStyle(C.accent)}>\n <IconMail style={{ width: '1.25rem', height: '1.25rem', color: C.white }} />\n </div>\n <div>\n <div style={{ fontWeight: 500, color: C.gray900 }}>Adresse email</div>\n <div style={{ fontSize: '0.75rem', color: C.gray500 }}>Connexion avec email</div>\n </div>\n </Button>\n <Button variant=\"outline\" onClick={() => setStep('phone-input')} style={methodBtnStyle}>\n <div style={methodIconStyle(C.accent)}>\n <IconPhone style={{ width: '1.25rem', height: '1.25rem', color: C.white }} />\n </div>\n <div>\n <div style={{ fontWeight: 500, color: C.gray900 }}>\n Numéro de téléphone <span style={{ color: C.gray500 }}>(Sénégal)</span>\n </div>\n <div style={{ fontSize: '0.75rem', color: C.gray500 }}>Connexion avec code SMS</div>\n </div>\n </Button>\n <Button variant=\"outline\" onClick={() => setStep('access-otp')} style={methodBtnStyle}>\n <div style={methodIconStyle(C.primary)}>\n <IconKeyRound style={{ width: '1.25rem', height: '1.25rem', color: C.white }} />\n </div>\n <div>\n <div style={{ fontWeight: 500, color: C.gray900 }}>Accès OTP</div>\n <div style={{ fontSize: '0.75rem', color: C.gray500 }}>Disponible sur le backoffice IAM</div>\n </div>\n </Button>\n <div style={{ textAlign: 'center', fontSize: '0.875rem', paddingTop: '0.5rem' }}>\n <span style={{ color: C.gray500 }}>Mot de passe oublié ? </span>\n <button type=\"button\" style={linkStyle} onClick={() => setShowPasswordRecovery(true)}>Récupérer</button>\n </div>\n <div style={{ position: 'relative', padding: '0.5rem 0' }}>\n <div style={{ position: 'absolute', inset: 0, display: 'flex', alignItems: 'center' }}>\n <span style={{ width: '100%', borderTop: `1px solid ${C.gray200}` }} />\n </div>\n </div>\n {showSwitchToSignup && (\n <div style={{ textAlign: 'center', fontSize: '0.875rem' }}>\n <span style={{ color: C.gray500 }}>Pas encore de compte ? </span>\n <button type=\"button\" style={linkStyle} onClick={onSwitchToSignup}>Inscrivez-vous</button>\n </div>\n )}\n </div>\n </DialogBody>\n </>\n )}\n\n {/* ===== EMAIL CHECK ===== */}\n {step === 'email-check' && (\n <>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={iconCircle(C.accent)}>\n <IconMail style={{ width: '1.5rem', height: '1.5rem', color: C.white }} />\n </div>\n <DialogTitle>Connexion par email</DialogTitle>\n <DialogDescription>Entrez votre adresse email</DialogDescription>\n </DialogHeader>\n <DialogBody>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n {renderError()}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.25rem' }}>\n <Label htmlFor=\"email\">Adresse email</Label>\n <Input id=\"email\" type=\"email\" placeholder=\"vous@exemple.com\" value={email}\n onChange={e => setEmail(e.target.value)} disabled={isSubmitting}\n onKeyDown={e => { if (e.key === 'Enter') { e.preventDefault(); handleEmailCheck(); } }}\n />\n </div>\n <div style={{ textAlign: 'right' }}>\n <button type=\"button\" style={{ ...linkStyle, fontSize: '0.75rem' }} onClick={() => setShowPasswordRecovery(true)}>\n Mot de passe oublié ?\n </button>\n </div>\n </div>\n </DialogBody>\n <DialogFooter>\n {renderLoaderBtn('Continuer', 'Vérification...', handleEmailCheck, !email.trim())}\n {showSwitchToSignup && (\n <div style={{ textAlign: 'center', fontSize: '0.875rem' }}>\n <span style={{ color: C.gray500 }}>Pas encore de compte ? </span>\n <button type=\"button\" style={linkStyle} onClick={onSwitchToSignup}>Inscrivez-vous</button>\n </div>\n )}\n </DialogFooter>\n </>\n )}\n\n {/* ===== EMAIL PASSWORD ===== */}\n {step === 'email-password' && (\n <>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={iconCircle(C.accent)}>\n <IconLock style={{ width: '1.5rem', height: '1.5rem', color: C.white }} />\n </div>\n {userName && <DialogTitle>Bonjour {userName} 👋</DialogTitle>}\n <DialogDescription>{email}</DialogDescription>\n </DialogHeader>\n <form onSubmit={handleEmailPasswordSubmit} style={{ display: 'flex', flexDirection: 'column', flex: 1, minHeight: 0 }}>\n <DialogBody>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n {renderError()}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.25rem' }}>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <Label htmlFor=\"password\">Mot de passe</Label>\n <button type=\"button\" style={{ ...linkStyle, fontSize: '0.75rem' }} onClick={() => setShowPasswordRecovery(true)}>\n Mot de passe oublié ?\n </button>\n </div>\n <div style={{ position: 'relative' }}>\n <Input id=\"password\" type={showPassword ? 'text' : 'password'} placeholder=\"••••••••\" value={password}\n onChange={e => setPassword(e.target.value)} disabled={isSubmitting}\n style={{ paddingRight: '2.5rem' }}\n />\n <button type=\"button\" onClick={() => setShowPassword(!showPassword)}\n style={{ position: 'absolute', right: 0, top: 0, height: '100%', padding: '0 0.75rem', background: 'none', border: 'none', cursor: 'pointer' }}>\n {showPassword ? (\n <IconEyeOff style={{ width: '1rem', height: '1rem', color: C.gray500 }} />\n ) : (\n <IconEye style={{ width: '1rem', height: '1rem', color: C.gray500 }} />\n )}\n </button>\n </div>\n </div>\n </div>\n </DialogBody>\n <DialogFooter>\n <Button type=\"submit\" disabled={isSubmitting || !password} style={{ width: '100%' }}>\n {isSubmitting ? (\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <IconLoader2 style={{ width: '1rem', height: '1rem' }} />\n Connexion...\n </span>\n ) : 'Se connecter'}\n </Button>\n </DialogFooter>\n </form>\n </>\n )}\n\n {/* ===== EMAIL OTP ===== */}\n {step === 'email-otp' && (\n <>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={iconCircle(C.accent)}>\n <IconKeyRound style={{ width: '1.5rem', height: '1.5rem', color: C.white }} />\n </div>\n <DialogTitle>Vérification</DialogTitle>\n <DialogDescription>\n Un code de vérification a été envoyé à<br />\n <strong style={{ color: C.gray900 }}>{email}</strong>\n </DialogDescription>\n </DialogHeader>\n <DialogBody>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n {renderError()}\n <OTPInput value={emailOtpCode} onChange={setEmailOtpCode} disabled={isSubmitting} />\n {renderResendLink()}\n </div>\n </DialogBody>\n <DialogFooter>\n {renderLoaderBtn('Vérifier', 'Vérification...', handleEmailOtpVerify, emailOtpCode.length !== 6)}\n </DialogFooter>\n </>\n )}\n\n {/* ===== PHONE INPUT ===== */}\n {step === 'phone-input' && (\n <>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={iconCircle(C.accent)}>\n <IconPhone style={{ width: '1.5rem', height: '1.5rem', color: C.white }} />\n </div>\n <DialogTitle>Connexion par téléphone</DialogTitle>\n <DialogDescription>Entrez votre numéro pour recevoir un code SMS</DialogDescription>\n </DialogHeader>\n <DialogBody>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n {renderError()}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.25rem' }}>\n <Label>Indicatif</Label>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem', padding: '0.75rem', backgroundColor: C.gray100, borderRadius: '0.375rem' }}>\n <span style={{ fontSize: '1.125rem' }}>🇸🇳</span>\n <span style={{ fontWeight: 500, color: C.gray900 }}>Sénégal (+221)</span>\n </div>\n </div>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.25rem' }}>\n <Label htmlFor=\"login-phone\">Numéro de téléphone</Label>\n <Input id=\"login-phone\" type=\"tel\" placeholder=\"77 123 45 67\" value={phone}\n onChange={e => { const val = e.target.value.replace(/\\D/g, '').slice(0, 9); setPhone(val); }}\n disabled={isSubmitting} maxLength={9}\n onKeyDown={e => { if (e.key === 'Enter') { e.preventDefault(); handlePhoneInit(); } }}\n />\n <p style={{ fontSize: '0.75rem', color: C.gray500 }}>9 chiffres requis ({phone.replace(/\\D/g, '').length}/9)</p>\n </div>\n </div>\n </DialogBody>\n <DialogFooter>\n {renderLoaderBtn('Recevoir le code SMS', 'Envoi en cours...', handlePhoneInit, phone.replace(/\\D/g, '').length !== 9)}\n {showSwitchToSignup && (\n <div style={{ textAlign: 'center', fontSize: '0.875rem' }}>\n <span style={{ color: C.gray500 }}>Pas encore de compte ? </span>\n <button type=\"button\" style={linkStyle} onClick={onSwitchToSignup}>Inscrivez-vous</button>\n </div>\n )}\n </DialogFooter>\n </>\n )}\n\n {/* ===== PHONE OTP ===== */}\n {step === 'phone-otp' && (\n <>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={iconCircle(C.accent)}>\n <IconPhone style={{ width: '1.5rem', height: '1.5rem', color: C.white }} />\n </div>\n <DialogTitle>Vérification</DialogTitle>\n <DialogDescription>\n Un code a été envoyé au{' '}\n <strong style={{ color: C.gray900 }}>+221 {phone.slice(0, 2)}***{phone.slice(-2)}</strong>\n </DialogDescription>\n </DialogHeader>\n <DialogBody>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n {renderError()}\n <OTPInput value={phoneOtpCode} onChange={setPhoneOtpCode} disabled={isSubmitting} />\n {renderResendLink()}\n </div>\n </DialogBody>\n <DialogFooter>\n {renderLoaderBtn('Se connecter', 'Vérification...', handlePhoneVerify, phoneOtpCode.length !== 6)}\n </DialogFooter>\n </>\n )}\n\n {/* ===== ACCESS OTP ===== */}\n {step === 'access-otp' && (\n <>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={iconCircle(C.primary)}>\n <IconKeyRound style={{ width: '1.5rem', height: '1.5rem', color: C.white }} />\n </div>\n <DialogTitle>Code d'accès</DialogTitle>\n <DialogDescription>Entrez le code d'accès à 8 chiffres</DialogDescription>\n </DialogHeader>\n <DialogBody>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n {renderError()}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.25rem' }}>\n <Label>Code d'accès (8 chiffres)</Label>\n <Input type=\"text\" inputMode=\"numeric\" placeholder=\"0000-0000\" value={accessOtpCode}\n onChange={e => setAccessOtpCode(e.target.value.replace(/\\D/g, '').slice(0, 8))}\n disabled={isSubmitting}\n style={{ textAlign: 'center', fontSize: '1.5rem', letterSpacing: '0.15em', fontFamily: 'monospace' }}\n maxLength={8}\n />\n </div>\n </div>\n </DialogBody>\n <DialogFooter>\n {renderLoaderBtn('Se connecter', 'Vérification...', handleAccessOtpSubmit, accessOtpCode.length !== 8)}\n </DialogFooter>\n </>\n )}\n </>\n )}\n </DialogContent>\n </Dialog>\n\n <PasswordRecoveryModal\n open={showPasswordRecovery}\n onOpenChange={setShowPasswordRecovery}\n onSuccess={() => setShowPasswordRecovery(false)}\n saasApiUrl={saasApiUrl}\n iamApiUrl={iamApiUrl}\n \n />\n </>\n );\n}\n\nexport default LoginModal;\n","/**\n * Complete world countries list for @ollaid/native-sso\n * Default: Sénégal (+221, SN)\n */\n\nexport interface Country {\n code: string; // ISO 2-letter (e.g. \"SN\")\n name: string; // Display name\n dialCode: string; // Phone prefix (e.g. \"+221\")\n flag: string; // Emoji flag\n digits: number; // Expected phone number length (without prefix)\n}\n\n// West Africa prioritized at top, then rest of Africa, Europe, Americas, Asia, Oceania\nexport const COUNTRIES: Country[] = [\n // ── Afrique de l'Ouest (prioritaires) ──\n { code: \"SN\", name: \"Sénégal\", dialCode: \"+221\", flag: \"🇸🇳\", digits: 9 },\n { code: \"CI\", name: \"Côte d'Ivoire\", dialCode: \"+225\", flag: \"🇨🇮\", digits: 10 },\n { code: \"ML\", name: \"Mali\", dialCode: \"+223\", flag: \"🇲🇱\", digits: 8 },\n { code: \"BF\", name: \"Burkina Faso\", dialCode: \"+226\", flag: \"🇧🇫\", digits: 8 },\n { code: \"GN\", name: \"Guinée\", dialCode: \"+224\", flag: \"🇬🇳\", digits: 9 },\n { code: \"TG\", name: \"Togo\", dialCode: \"+228\", flag: \"🇹🇬\", digits: 8 },\n { code: \"BJ\", name: \"Bénin\", dialCode: \"+229\", flag: \"🇧🇯\", digits: 8 },\n { code: \"NE\", name: \"Niger\", dialCode: \"+227\", flag: \"🇳🇪\", digits: 8 },\n { code: \"MR\", name: \"Mauritanie\", dialCode: \"+222\", flag: \"🇲🇷\", digits: 8 },\n { code: \"GW\", name: \"Guinée-Bissau\", dialCode: \"+245\", flag: \"🇬🇼\", digits: 7 },\n { code: \"GM\", name: \"Gambie\", dialCode: \"+220\", flag: \"🇬🇲\", digits: 7 },\n { code: \"CV\", name: \"Cap-Vert\", dialCode: \"+238\", flag: \"🇨🇻\", digits: 7 },\n { code: \"SL\", name: \"Sierra Leone\", dialCode: \"+232\", flag: \"🇸🇱\", digits: 8 },\n { code: \"LR\", name: \"Liberia\", dialCode: \"+231\", flag: \"🇱🇷\", digits: 7 },\n { code: \"GH\", name: \"Ghana\", dialCode: \"+233\", flag: \"🇬🇭\", digits: 9 },\n { code: \"NG\", name: \"Nigeria\", dialCode: \"+234\", flag: \"🇳🇬\", digits: 10 },\n\n // ── Afrique Centrale ──\n { code: \"CM\", name: \"Cameroun\", dialCode: \"+237\", flag: \"🇨🇲\", digits: 9 },\n { code: \"GA\", name: \"Gabon\", dialCode: \"+241\", flag: \"🇬🇦\", digits: 7 },\n { code: \"CG\", name: \"Congo\", dialCode: \"+242\", flag: \"🇨🇬\", digits: 9 },\n { code: \"CD\", name: \"RD Congo\", dialCode: \"+243\", flag: \"🇨🇩\", digits: 9 },\n { code: \"TD\", name: \"Tchad\", dialCode: \"+235\", flag: \"🇹🇩\", digits: 8 },\n { code: \"CF\", name: \"Centrafrique\", dialCode: \"+236\", flag: \"🇨🇫\", digits: 8 },\n { code: \"GQ\", name: \"Guinée équatoriale\", dialCode: \"+240\", flag: \"🇬🇶\", digits: 9 },\n { code: \"ST\", name: \"São Tomé-et-Príncipe\", dialCode: \"+239\", flag: \"🇸🇹\", digits: 7 },\n { code: \"BI\", name: \"Burundi\", dialCode: \"+257\", flag: \"🇧🇮\", digits: 8 },\n { code: \"RW\", name: \"Rwanda\", dialCode: \"+250\", flag: \"🇷🇼\", digits: 9 },\n\n // ── Afrique de l'Est ──\n { code: \"KE\", name: \"Kenya\", dialCode: \"+254\", flag: \"🇰🇪\", digits: 9 },\n { code: \"TZ\", name: \"Tanzanie\", dialCode: \"+255\", flag: \"🇹🇿\", digits: 9 },\n { code: \"UG\", name: \"Ouganda\", dialCode: \"+256\", flag: \"🇺🇬\", digits: 9 },\n { code: \"ET\", name: \"Éthiopie\", dialCode: \"+251\", flag: \"🇪🇹\", digits: 9 },\n { code: \"SO\", name: \"Somalie\", dialCode: \"+252\", flag: \"🇸🇴\", digits: 8 },\n { code: \"DJ\", name: \"Djibouti\", dialCode: \"+253\", flag: \"🇩🇯\", digits: 8 },\n { code: \"ER\", name: \"Érythrée\", dialCode: \"+291\", flag: \"🇪🇷\", digits: 7 },\n { code: \"SS\", name: \"Soudan du Sud\", dialCode: \"+211\", flag: \"🇸🇸\", digits: 9 },\n { code: \"MG\", name: \"Madagascar\", dialCode: \"+261\", flag: \"🇲🇬\", digits: 9 },\n { code: \"MU\", name: \"Maurice\", dialCode: \"+230\", flag: \"🇲🇺\", digits: 8 },\n { code: \"SC\", name: \"Seychelles\", dialCode: \"+248\", flag: \"🇸🇨\", digits: 7 },\n { code: \"KM\", name: \"Comores\", dialCode: \"+269\", flag: \"🇰🇲\", digits: 7 },\n\n // ── Afrique Australe ──\n { code: \"ZA\", name: \"Afrique du Sud\", dialCode: \"+27\", flag: \"🇿🇦\", digits: 9 },\n { code: \"MZ\", name: \"Mozambique\", dialCode: \"+258\", flag: \"🇲🇿\", digits: 9 },\n { code: \"ZW\", name: \"Zimbabwe\", dialCode: \"+263\", flag: \"🇿🇼\", digits: 9 },\n { code: \"ZM\", name: \"Zambie\", dialCode: \"+260\", flag: \"🇿🇲\", digits: 9 },\n { code: \"MW\", name: \"Malawi\", dialCode: \"+265\", flag: \"🇲🇼\", digits: 9 },\n { code: \"BW\", name: \"Botswana\", dialCode: \"+267\", flag: \"🇧🇼\", digits: 8 },\n { code: \"NA\", name: \"Namibie\", dialCode: \"+264\", flag: \"🇳🇦\", digits: 9 },\n { code: \"AO\", name: \"Angola\", dialCode: \"+244\", flag: \"🇦🇴\", digits: 9 },\n { code: \"SZ\", name: \"Eswatini\", dialCode: \"+268\", flag: \"🇸🇿\", digits: 8 },\n { code: \"LS\", name: \"Lesotho\", dialCode: \"+266\", flag: \"🇱🇸\", digits: 8 },\n\n // ── Afrique du Nord ──\n { code: \"MA\", name: \"Maroc\", dialCode: \"+212\", flag: \"🇲🇦\", digits: 9 },\n { code: \"DZ\", name: \"Algérie\", dialCode: \"+213\", flag: \"🇩🇿\", digits: 9 },\n { code: \"TN\", name: \"Tunisie\", dialCode: \"+216\", flag: \"🇹🇳\", digits: 8 },\n { code: \"LY\", name: \"Libye\", dialCode: \"+218\", flag: \"🇱🇾\", digits: 9 },\n { code: \"EG\", name: \"Égypte\", dialCode: \"+20\", flag: \"🇪🇬\", digits: 10 },\n { code: \"SD\", name: \"Soudan\", dialCode: \"+249\", flag: \"🇸🇩\", digits: 9 },\n\n // ── Europe ──\n { code: \"FR\", name: \"France\", dialCode: \"+33\", flag: \"🇫🇷\", digits: 9 },\n { code: \"BE\", name: \"Belgique\", dialCode: \"+32\", flag: \"🇧🇪\", digits: 9 },\n { code: \"CH\", name: \"Suisse\", dialCode: \"+41\", flag: \"🇨🇭\", digits: 9 },\n { code: \"DE\", name: \"Allemagne\", dialCode: \"+49\", flag: \"🇩🇪\", digits: 10 },\n { code: \"GB\", name: \"Royaume-Uni\", dialCode: \"+44\", flag: \"🇬🇧\", digits: 10 },\n { code: \"ES\", name: \"Espagne\", dialCode: \"+34\", flag: \"🇪🇸\", digits: 9 },\n { code: \"IT\", name: \"Italie\", dialCode: \"+39\", flag: \"🇮🇹\", digits: 10 },\n { code: \"PT\", name: \"Portugal\", dialCode: \"+351\", flag: \"🇵🇹\", digits: 9 },\n { code: \"NL\", name: \"Pays-Bas\", dialCode: \"+31\", flag: \"🇳🇱\", digits: 9 },\n { code: \"SE\", name: \"Suède\", dialCode: \"+46\", flag: \"🇸🇪\", digits: 9 },\n { code: \"NO\", name: \"Norvège\", dialCode: \"+47\", flag: \"🇳🇴\", digits: 8 },\n { code: \"DK\", name: \"Danemark\", dialCode: \"+45\", flag: \"🇩🇰\", digits: 8 },\n { code: \"FI\", name: \"Finlande\", dialCode: \"+358\", flag: \"🇫🇮\", digits: 10 },\n { code: \"PL\", name: \"Pologne\", dialCode: \"+48\", flag: \"🇵🇱\", digits: 9 },\n { code: \"AT\", name: \"Autriche\", dialCode: \"+43\", flag: \"🇦🇹\", digits: 10 },\n { code: \"IE\", name: \"Irlande\", dialCode: \"+353\", flag: \"🇮🇪\", digits: 9 },\n { code: \"GR\", name: \"Grèce\", dialCode: \"+30\", flag: \"🇬🇷\", digits: 10 },\n { code: \"CZ\", name: \"Tchéquie\", dialCode: \"+420\", flag: \"🇨🇿\", digits: 9 },\n { code: \"RO\", name: \"Roumanie\", dialCode: \"+40\", flag: \"🇷🇴\", digits: 9 },\n { code: \"HU\", name: \"Hongrie\", dialCode: \"+36\", flag: \"🇭🇺\", digits: 9 },\n { code: \"BG\", name: \"Bulgarie\", dialCode: \"+359\", flag: \"🇧🇬\", digits: 9 },\n { code: \"HR\", name: \"Croatie\", dialCode: \"+385\", flag: \"🇭🇷\", digits: 9 },\n { code: \"SK\", name: \"Slovaquie\", dialCode: \"+421\", flag: \"🇸🇰\", digits: 9 },\n { code: \"SI\", name: \"Slovénie\", dialCode: \"+386\", flag: \"🇸🇮\", digits: 8 },\n { code: \"RS\", name: \"Serbie\", dialCode: \"+381\", flag: \"🇷🇸\", digits: 9 },\n { code: \"UA\", name: \"Ukraine\", dialCode: \"+380\", flag: \"🇺🇦\", digits: 9 },\n { code: \"RU\", name: \"Russie\", dialCode: \"+7\", flag: \"🇷🇺\", digits: 10 },\n { code: \"TR\", name: \"Turquie\", dialCode: \"+90\", flag: \"🇹🇷\", digits: 10 },\n { code: \"LU\", name: \"Luxembourg\", dialCode: \"+352\", flag: \"🇱🇺\", digits: 9 },\n { code: \"MC\", name: \"Monaco\", dialCode: \"+377\", flag: \"🇲🇨\", digits: 8 },\n { code: \"IS\", name: \"Islande\", dialCode: \"+354\", flag: \"🇮🇸\", digits: 7 },\n { code: \"AL\", name: \"Albanie\", dialCode: \"+355\", flag: \"🇦🇱\", digits: 9 },\n { code: \"ME\", name: \"Monténégro\", dialCode: \"+382\", flag: \"🇲🇪\", digits: 8 },\n { code: \"MK\", name: \"Macédoine du Nord\", dialCode: \"+389\", flag: \"🇲🇰\", digits: 8 },\n { code: \"BA\", name: \"Bosnie-Herzégovine\", dialCode: \"+387\", flag: \"🇧🇦\", digits: 8 },\n { code: \"LT\", name: \"Lituanie\", dialCode: \"+370\", flag: \"🇱🇹\", digits: 8 },\n { code: \"LV\", name: \"Lettonie\", dialCode: \"+371\", flag: \"🇱🇻\", digits: 8 },\n { code: \"EE\", name: \"Estonie\", dialCode: \"+372\", flag: \"🇪🇪\", digits: 8 },\n { code: \"MT\", name: \"Malte\", dialCode: \"+356\", flag: \"🇲🇹\", digits: 8 },\n { code: \"CY\", name: \"Chypre\", dialCode: \"+357\", flag: \"🇨🇾\", digits: 8 },\n { code: \"MD\", name: \"Moldavie\", dialCode: \"+373\", flag: \"🇲🇩\", digits: 8 },\n { code: \"GE\", name: \"Géorgie\", dialCode: \"+995\", flag: \"🇬🇪\", digits: 9 },\n { code: \"AM\", name: \"Arménie\", dialCode: \"+374\", flag: \"🇦🇲\", digits: 8 },\n { code: \"AZ\", name: \"Azerbaïdjan\", dialCode: \"+994\", flag: \"🇦🇿\", digits: 9 },\n { code: \"BY\", name: \"Biélorussie\", dialCode: \"+375\", flag: \"🇧🇾\", digits: 9 },\n\n // ── Amérique du Nord ──\n { code: \"US\", name: \"États-Unis\", dialCode: \"+1\", flag: \"🇺🇸\", digits: 10 },\n { code: \"CA\", name: \"Canada\", dialCode: \"+1\", flag: \"🇨🇦\", digits: 10 },\n { code: \"MX\", name: \"Mexique\", dialCode: \"+52\", flag: \"🇲🇽\", digits: 10 },\n\n // ── Amérique Centrale & Caraïbes ──\n { code: \"HT\", name: \"Haïti\", dialCode: \"+509\", flag: \"🇭🇹\", digits: 8 },\n { code: \"DO\", name: \"République dominicaine\", dialCode: \"+1809\", flag: \"🇩🇴\", digits: 10 },\n { code: \"CU\", name: \"Cuba\", dialCode: \"+53\", flag: \"🇨🇺\", digits: 8 },\n { code: \"JM\", name: \"Jamaïque\", dialCode: \"+1876\", flag: \"🇯🇲\", digits: 7 },\n { code: \"GT\", name: \"Guatemala\", dialCode: \"+502\", flag: \"🇬🇹\", digits: 8 },\n { code: \"HN\", name: \"Honduras\", dialCode: \"+504\", flag: \"🇭🇳\", digits: 8 },\n { code: \"SV\", name: \"El Salvador\", dialCode: \"+503\", flag: \"🇸🇻\", digits: 8 },\n { code: \"NI\", name: \"Nicaragua\", dialCode: \"+505\", flag: \"🇳🇮\", digits: 8 },\n { code: \"CR\", name: \"Costa Rica\", dialCode: \"+506\", flag: \"🇨🇷\", digits: 8 },\n { code: \"PA\", name: \"Panama\", dialCode: \"+507\", flag: \"🇵🇦\", digits: 8 },\n { code: \"TT\", name: \"Trinité-et-Tobago\", dialCode: \"+1868\", flag: \"🇹🇹\", digits: 7 },\n\n // ── Amérique du Sud ──\n { code: \"BR\", name: \"Brésil\", dialCode: \"+55\", flag: \"🇧🇷\", digits: 11 },\n { code: \"AR\", name: \"Argentine\", dialCode: \"+54\", flag: \"🇦🇷\", digits: 10 },\n { code: \"CO\", name: \"Colombie\", dialCode: \"+57\", flag: \"🇨🇴\", digits: 10 },\n { code: \"CL\", name: \"Chili\", dialCode: \"+56\", flag: \"🇨🇱\", digits: 9 },\n { code: \"PE\", name: \"Pérou\", dialCode: \"+51\", flag: \"🇵🇪\", digits: 9 },\n { code: \"VE\", name: \"Venezuela\", dialCode: \"+58\", flag: \"🇻🇪\", digits: 10 },\n { code: \"EC\", name: \"Équateur\", dialCode: \"+593\", flag: \"🇪🇨\", digits: 9 },\n { code: \"BO\", name: \"Bolivie\", dialCode: \"+591\", flag: \"🇧🇴\", digits: 8 },\n { code: \"PY\", name: \"Paraguay\", dialCode: \"+595\", flag: \"🇵🇾\", digits: 9 },\n { code: \"UY\", name: \"Uruguay\", dialCode: \"+598\", flag: \"🇺🇾\", digits: 8 },\n { code: \"GY\", name: \"Guyana\", dialCode: \"+592\", flag: \"🇬🇾\", digits: 7 },\n { code: \"SR\", name: \"Suriname\", dialCode: \"+597\", flag: \"🇸🇷\", digits: 7 },\n\n // ── Moyen-Orient ──\n { code: \"AE\", name: \"Émirats arabes unis\", dialCode: \"+971\", flag: \"🇦🇪\", digits: 9 },\n { code: \"SA\", name: \"Arabie saoudite\", dialCode: \"+966\", flag: \"🇸🇦\", digits: 9 },\n { code: \"QA\", name: \"Qatar\", dialCode: \"+974\", flag: \"🇶🇦\", digits: 8 },\n { code: \"KW\", name: \"Koweït\", dialCode: \"+965\", flag: \"🇰🇼\", digits: 8 },\n { code: \"BH\", name: \"Bahreïn\", dialCode: \"+973\", flag: \"🇧🇭\", digits: 8 },\n { code: \"OM\", name: \"Oman\", dialCode: \"+968\", flag: \"🇴🇲\", digits: 8 },\n { code: \"JO\", name: \"Jordanie\", dialCode: \"+962\", flag: \"🇯🇴\", digits: 9 },\n { code: \"LB\", name: \"Liban\", dialCode: \"+961\", flag: \"🇱🇧\", digits: 8 },\n { code: \"IQ\", name: \"Irak\", dialCode: \"+964\", flag: \"🇮🇶\", digits: 10 },\n { code: \"IR\", name: \"Iran\", dialCode: \"+98\", flag: \"🇮🇷\", digits: 10 },\n { code: \"IL\", name: \"Israël\", dialCode: \"+972\", flag: \"🇮🇱\", digits: 9 },\n { code: \"PS\", name: \"Palestine\", dialCode: \"+970\", flag: \"🇵🇸\", digits: 9 },\n { code: \"YE\", name: \"Yémen\", dialCode: \"+967\", flag: \"🇾🇪\", digits: 9 },\n { code: \"SY\", name: \"Syrie\", dialCode: \"+963\", flag: \"🇸🇾\", digits: 9 },\n\n // ── Asie ──\n { code: \"CN\", name: \"Chine\", dialCode: \"+86\", flag: \"🇨🇳\", digits: 11 },\n { code: \"JP\", name: \"Japon\", dialCode: \"+81\", flag: \"🇯🇵\", digits: 10 },\n { code: \"KR\", name: \"Corée du Sud\", dialCode: \"+82\", flag: \"🇰🇷\", digits: 10 },\n { code: \"IN\", name: \"Inde\", dialCode: \"+91\", flag: \"🇮🇳\", digits: 10 },\n { code: \"PK\", name: \"Pakistan\", dialCode: \"+92\", flag: \"🇵🇰\", digits: 10 },\n { code: \"BD\", name: \"Bangladesh\", dialCode: \"+880\", flag: \"🇧🇩\", digits: 10 },\n { code: \"ID\", name: \"Indonésie\", dialCode: \"+62\", flag: \"🇮🇩\", digits: 10 },\n { code: \"MY\", name: \"Malaisie\", dialCode: \"+60\", flag: \"🇲🇾\", digits: 10 },\n { code: \"PH\", name: \"Philippines\", dialCode: \"+63\", flag: \"🇵🇭\", digits: 10 },\n { code: \"TH\", name: \"Thaïlande\", dialCode: \"+66\", flag: \"🇹🇭\", digits: 9 },\n { code: \"VN\", name: \"Vietnam\", dialCode: \"+84\", flag: \"🇻🇳\", digits: 9 },\n { code: \"SG\", name: \"Singapour\", dialCode: \"+65\", flag: \"🇸🇬\", digits: 8 },\n { code: \"HK\", name: \"Hong Kong\", dialCode: \"+852\", flag: \"🇭🇰\", digits: 8 },\n { code: \"TW\", name: \"Taïwan\", dialCode: \"+886\", flag: \"🇹🇼\", digits: 9 },\n { code: \"MM\", name: \"Myanmar\", dialCode: \"+95\", flag: \"🇲🇲\", digits: 9 },\n { code: \"KH\", name: \"Cambodge\", dialCode: \"+855\", flag: \"🇰🇭\", digits: 9 },\n { code: \"LA\", name: \"Laos\", dialCode: \"+856\", flag: \"🇱🇦\", digits: 10 },\n { code: \"NP\", name: \"Népal\", dialCode: \"+977\", flag: \"🇳🇵\", digits: 10 },\n { code: \"LK\", name: \"Sri Lanka\", dialCode: \"+94\", flag: \"🇱🇰\", digits: 9 },\n { code: \"AF\", name: \"Afghanistan\", dialCode: \"+93\", flag: \"🇦🇫\", digits: 9 },\n { code: \"UZ\", name: \"Ouzbékistan\", dialCode: \"+998\", flag: \"🇺🇿\", digits: 9 },\n { code: \"KZ\", name: \"Kazakhstan\", dialCode: \"+7\", flag: \"🇰🇿\", digits: 10 },\n { code: \"MN\", name: \"Mongolie\", dialCode: \"+976\", flag: \"🇲🇳\", digits: 8 },\n\n // ── Océanie ──\n { code: \"AU\", name: \"Australie\", dialCode: \"+61\", flag: \"🇦🇺\", digits: 9 },\n { code: \"NZ\", name: \"Nouvelle-Zélande\", dialCode: \"+64\", flag: \"🇳🇿\", digits: 9 },\n { code: \"FJ\", name: \"Fidji\", dialCode: \"+679\", flag: \"🇫🇯\", digits: 7 },\n { code: \"PG\", name: \"Papouasie-Nouvelle-Guinée\", dialCode: \"+675\", flag: \"🇵🇬\", digits: 8 },\n];\n\n// ── Defaults ──\nexport const DEFAULT_COUNTRY_CODE = \"SN\";\nexport const DEFAULT_DIAL_CODE = \"+221\";\n\n// ── Sorted by ISO code (alphabetical) ──\nexport const COUNTRIES_SORTED_BY_CODE: Country[] = [...COUNTRIES].sort((a, b) => a.code.localeCompare(b.code));\n\n// ── Helpers ──\nexport const getCountryByCode = (code: string): Country | undefined =>\n COUNTRIES.find(c => c.code.toLowerCase() === code.toLowerCase());\n\nexport const getCountryByDialCode = (dialCode: string): Country | undefined =>\n COUNTRIES.find(c => c.dialCode === dialCode);\n\nexport const getDefaultCountry = (): Country =>\n COUNTRIES.find(c => c.code === DEFAULT_COUNTRY_CODE)!;\n\nexport const searchCountries = (query: string): Country[] => {\n const q = query.toLowerCase().trim();\n if (!q) return COUNTRIES;\n return COUNTRIES.filter(c =>\n c.name.toLowerCase().includes(q) ||\n c.dialCode.includes(q) ||\n c.code.toLowerCase().includes(q)\n );\n};\n","/**\n * Phone Input component for @ollaid/native-sso\n * Custom select overlay: dropdown shows ISO code, selected display shows only flag + dialCode\n */\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { COUNTRIES_SORTED_BY_CODE, getCountryByDialCode, DEFAULT_DIAL_CODE } from '../utils/countries';\n\ninterface PhoneInputProps {\n value: string;\n onChange: (value: string) => void;\n ccphone?: string;\n onCcphoneChange?: (value: string) => void;\n disabled?: boolean;\n readOnly?: boolean;\n error?: string;\n placeholder?: string;\n lockCcphone?: boolean;\n}\n\nexport function PhoneInput({\n value, onChange, ccphone = DEFAULT_DIAL_CODE, onCcphoneChange, disabled = false, readOnly = false, error, placeholder = '77 123 45 67', lockCcphone = false,\n}: PhoneInputProps) {\n const normalizedCcphone = ccphone || DEFAULT_DIAL_CODE;\n const selectedCountry = getCountryByDialCode(normalizedCcphone) || COUNTRIES_SORTED_BY_CODE[0];\n const [dropdownOpen, setDropdownOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n // Close dropdown on outside click\n useEffect(() => {\n if (!dropdownOpen) return;\n const handler = (e: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) setDropdownOpen(false);\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [dropdownOpen]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled || readOnly) return;\n const cleaned = e.target.value.replace(/\\D/g, '');\n onChange(cleaned.slice(0, selectedCountry.digits));\n };\n\n const handlePaste = (e: React.ClipboardEvent<HTMLInputElement>) => {\n if (disabled || readOnly) return;\n e.preventDefault();\n const pasted = e.clipboardData.getData('text').replace(/\\s+/g, '').replace(/\\D/g, '');\n onChange(pasted.slice(0, selectedCountry.digits));\n };\n\n const handleSelect = (dialCode: string) => {\n if (disabled || readOnly) return;\n if (onCcphoneChange) onCcphoneChange(dialCode);\n setDropdownOpen(false);\n };\n\n return (\n <div>\n <div style={{\n display: 'flex', alignItems: 'center', border: `2px solid ${error ? '#ef4444' : '#d1d5db'}`,\n borderRadius: '0.5rem', overflow: 'visible', opacity: (disabled || readOnly) ? 0.75 : 1,\n backgroundColor: (disabled || readOnly) ? '#f9fafb' : 'white', position: 'relative',\n }}>\n {onCcphoneChange && !lockCcphone ? (\n <div ref={dropdownRef} style={{ position: 'relative' }}>\n {/* Display button: only flag + dialCode */}\n <button\n type=\"button\"\n onClick={() => !(disabled || readOnly) && setDropdownOpen(!dropdownOpen)}\n disabled={disabled || readOnly}\n style={{\n display: 'flex', alignItems: 'center', gap: '0.35rem', padding: '0.45rem 0.6rem',\n backgroundColor: '#f9fafb', borderRight: '1px solid #e5e7eb', border: 'none',\n cursor: (disabled || readOnly) ? 'not-allowed' : 'pointer', fontWeight: 500, color: '#374151',\n fontSize: '0.85rem', whiteSpace: 'nowrap',\n }}\n >\n <span style={{ fontSize: '1rem' }}>{selectedCountry.flag}</span>\n <span>{selectedCountry.dialCode}</span>\n <span style={{ fontSize: '0.625rem', marginLeft: '0.125rem' }}>▼</span>\n </button>\n\n {/* Dropdown list: shows CODE FLAG DIALCODE */}\n {dropdownOpen && (\n <div style={{\n position: 'absolute', top: '100%', left: 0, zIndex: 50,\n backgroundColor: 'white', border: '1px solid #d1d5db', borderRadius: '0.375rem',\n boxShadow: '0 4px 12px rgba(0,0,0,0.15)', maxHeight: '15rem', overflowY: 'auto',\n minWidth: '12rem', marginTop: '0.25rem',\n }}>\n {COUNTRIES_SORTED_BY_CODE.map((c) => (\n <button\n key={`${c.code}-${c.dialCode}`}\n type=\"button\"\n onClick={() => handleSelect(c.dialCode)}\n style={{\n display: 'flex', alignItems: 'center', gap: '0.5rem', width: '100%',\n padding: '0.45rem 0.75rem', border: 'none', cursor: 'pointer', fontSize: '0.85rem',\n backgroundColor: c.dialCode === normalizedCcphone ? '#f3f4f6' : 'transparent',\n textAlign: 'left',\n }}\n onMouseEnter={(e) => (e.currentTarget.style.backgroundColor = '#f3f4f6')}\n onMouseLeave={(e) => (e.currentTarget.style.backgroundColor = c.dialCode === normalizedCcphone ? '#f3f4f6' : 'transparent')}\n >\n <span style={{ fontWeight: 600, color: '#374151', minWidth: '1.75rem' }}>{c.code}</span>\n <span>{c.flag}</span>\n <span style={{ color: '#6b7280' }}>{c.dialCode}</span>\n </button>\n ))}\n </div>\n )}\n </div>\n ) : (\n /* Locked view: only flag + dialCode */\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.35rem', padding: '0.45rem 0.6rem', backgroundColor: '#f9fafb', borderRight: '1px solid #e5e7eb' }}>\n <span style={{ fontSize: '1rem' }}>{selectedCountry.flag}</span>\n <span style={{ fontWeight: 500, color: '#374151' }}>{selectedCountry.dialCode}</span>\n </div>\n )}\n <input\n type=\"tel\"\n inputMode=\"numeric\"\n value={value}\n onChange={handleChange}\n onPaste={handlePaste}\n disabled={disabled}\n readOnly={readOnly}\n placeholder={placeholder}\n style={{ flex: 1, padding: '0.45rem 0.6rem', fontSize: '0.95rem', border: 'none', outline: 'none', backgroundColor: 'transparent' }}\n />\n </div>\n {error && <p style={{ fontSize: '0.875rem', color: '#ef4444', marginTop: '0.25rem' }}>{error}</p>}\n <p style={{ fontSize: '0.75rem', color: '#6b7280', marginTop: '0.25rem' }}>\n {selectedCountry.digits} chiffres requis ({value.length}/{selectedCountry.digits})\n </p>\n </div>\n );\n}\n\nexport default PhoneInput;\n","/**\n * Apps Logo Slider for @ollaid/native-sso\n * Matches Web SSO badge style: horizontal marquee, small icons, no app names\n */\n\nimport { useEffect, useState } from 'react';\nimport { getNativeAuthConfig } from '../services/api';\n\ninterface AppsLogoSliderProps {\n speed?: 'slow' | 'normal' | 'fast';\n className?: string;\n iamApiUrl?: string;\n}\n\ninterface AppInfo { id: number; name: string; logo: string | null; }\n\nexport function AppsLogoSlider({ className = '', iamApiUrl: iamApiUrlProp }: AppsLogoSliderProps) {\n const [applications, setApplications] = useState<AppInfo[]>([]);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n const resolvedIamApiUrl = iamApiUrlProp || getNativeAuthConfig().iamApiUrl;\n if (!resolvedIamApiUrl) return;\n const fetchApps = async () => {\n try {\n const iamBaseUrl = resolvedIamApiUrl.replace('/api', '');\n const response = await fetch(`${iamBaseUrl}/api/public/applications`, { headers: { 'Accept': 'application/json' } });\n if (response.ok) {\n const data = await response.json();\n if (data.success && Array.isArray(data.data)) setApplications(data.data);\n }\n } catch { /* ignore */ } finally { setIsLoading(false); }\n };\n fetchApps();\n }, [iamApiUrlProp]);\n\n const getLogoUrl = (logo: string | null): string | null => {\n if (!logo) return null;\n if (logo.startsWith('http')) return logo;\n const resolvedUrl = iamApiUrlProp || getNativeAuthConfig().iamApiUrl;\n return `${resolvedUrl.replace('/api', '')}/storage/applications/${logo}`;\n };\n\n if (isLoading) {\n return (\n <div className={className} style={{ width: '100%', height: '100%', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <div style={{ display: 'flex', gap: '0.75rem', padding: '0 0.75rem' }}>\n {[1, 2, 3, 4, 5].map((i) => (\n <div key={i} style={{ width: '2rem', height: '2rem', borderRadius: '0.5rem', backgroundColor: '#e5e7eb', flexShrink: 0 }} />\n ))}\n </div>\n </div>\n );\n }\n\n if (applications.length === 0) return null;\n\n // Triple for smooth infinite loop (same as web SSO)\n const displayApps = [...applications, ...applications, ...applications];\n\n return (\n <div\n className={className}\n style={{ position: 'relative', width: '100%', height: '100%', overflow: 'hidden' }}\n >\n {/* Left gradient mask */}\n <div style={{\n position: 'absolute', left: 0, top: 0, bottom: 0, width: '1.5rem',\n background: 'linear-gradient(to right, #ffffff, transparent)',\n zIndex: 10, pointerEvents: 'none',\n }} />\n\n {/* Marquee content */}\n <div style={{\n display: 'flex',\n animation: 'ollaid-marquee 20s linear infinite',\n height: '100%',\n alignItems: 'center',\n }}>\n {displayApps.map((app, index) => {\n const logoUrl = getLogoUrl(app.logo);\n return (\n <div\n key={`${app.id}-${index}`}\n style={{ flexShrink: 0, padding: '0 0.75rem', display: 'flex', alignItems: 'center', height: '100%' }}\n >\n {logoUrl ? (\n <img\n src={logoUrl}\n alt={app.name}\n style={{ width: '2rem', height: '2rem', objectFit: 'contain' }}\n onError={(e) => {\n const target = e.currentTarget;\n target.style.display = 'none';\n if (target.nextElementSibling) {\n (target.nextElementSibling as HTMLElement).style.display = 'flex';\n }\n }}\n />\n ) : null}\n <div\n style={{\n width: '2rem',\n height: '2rem',\n borderRadius: '0.5rem',\n backgroundColor: '#f3f4f6',\n alignItems: 'center',\n justifyContent: 'center',\n display: logoUrl ? 'none' : 'flex',\n }}\n >\n <span style={{ fontSize: '0.75rem', fontWeight: 700, color: '#6b7280' }}>\n {app.name?.charAt(0)?.toUpperCase() || 'A'}\n </span>\n </div>\n </div>\n );\n })}\n </div>\n\n {/* Right gradient mask */}\n <div style={{\n position: 'absolute', right: 0, top: 0, bottom: 0, width: '1.5rem',\n background: 'linear-gradient(to left, #ffffff, transparent)',\n zIndex: 10, pointerEvents: 'none',\n }} />\n </div>\n );\n}\n\nexport default AppsLogoSlider;\n","/**\n * Service d'inscription Mobile SSO v1.0\n * Architecture Frontend-First : Appels directs à l'IAM via nativeAuth\n * \n * @version 2.7.0\n */\n\nimport { nativeAuthService } from './nativeAuth';\nimport { \n ApiError, \n fetchWithTimeout, \n getHeaders,\n getNativeAuthConfig, \n isDebugMode,\n ensureDeviceContext,\n} from './api';\n\nimport type {\n MobileRegistrationFormData,\n MobileVerifyOtpResponse,\n MobileRegistrationCompleteResponse,\n MobileResendOtpResponse,\n} from '../types/mobile';\nimport type { NativeInitResponse } from '../types/native';\n\nexport const mobileRegistrationService = {\n /**\n * Init registration via nativeAuth.register() (Frontend-First)\n */\n async init(\n data: Omit<MobileRegistrationFormData, 'password' | 'password_confirmation'>\n ): Promise<NativeInitResponse> {\n if (!nativeAuthService.hasCredentials()) {\n await nativeAuthService.loadCredentials();\n }\n\n return nativeAuthService.register({\n name: data.name,\n email: data.email,\n ccphone: data.ccphone,\n phone: data.phone,\n town: data.town,\n country: data.country,\n registration_type: data.registration_type,\n });\n },\n\n /**\n * Verify OTP via nativeAuth.validate()\n */\n async verifyOtp(\n processToken: string,\n otpCode: string\n ): Promise<MobileVerifyOtpResponse> {\n const config = getNativeAuthConfig();\n await ensureDeviceContext();\n\n if (isDebugMode()) {\n console.log('📤 [IAM] POST /iam/native/validate (registration OTP)');\n }\n\n return fetchWithTimeout<MobileVerifyOtpResponse>(\n `${config.iamApiUrl}/iam/native/validate`,\n {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify({\n process_token: processToken,\n otp_code: otpCode,\n }),\n },\n config.timeout || 30000\n );\n },\n\n /**\n * Complete registration with password\n */\n async complete(\n processToken: string,\n password: string\n ): Promise<MobileRegistrationCompleteResponse> {\n const config = getNativeAuthConfig();\n await ensureDeviceContext();\n\n if (isDebugMode()) {\n console.log('📤 [IAM] POST /iam/native/validate (registration complete)');\n }\n\n return fetchWithTimeout<MobileRegistrationCompleteResponse>(\n `${config.iamApiUrl}/iam/native/validate`,\n {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify({\n process_token: processToken,\n password,\n password_confirmation: password,\n }),\n },\n config.timeout || 30000\n );\n },\n\n /**\n * Complete phone-only registration (no password)\n */\n async completePhoneOnly(\n processToken: string\n ): Promise<MobileRegistrationCompleteResponse> {\n const config = getNativeAuthConfig();\n await ensureDeviceContext();\n\n if (isDebugMode()) {\n console.log('📤 [IAM] POST /iam/native/validate (phone-only complete)');\n }\n\n return fetchWithTimeout<MobileRegistrationCompleteResponse>(\n `${config.iamApiUrl}/iam/native/validate`,\n {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify({\n process_token: processToken,\n }),\n },\n config.timeout || 30000\n );\n },\n\n /**\n * Resend OTP\n */\n async resendOtp(processToken: string): Promise<MobileResendOtpResponse> {\n return nativeAuthService.resendOtp(processToken) as unknown as MobileResendOtpResponse;\n },\n};\n\nexport default mobileRegistrationService;\n","/**\n * Hook d'inscription Mobile SSO v1.0\n * Gère le flow: init → verify-otp → complete\n * \n * @version 2.7.0\n */\n\nimport { useState, useCallback, useEffect, useRef } from 'react';\nimport { mobileRegistrationService } from '../services/mobileRegistration';\nimport { nativeAuthService } from '../services/nativeAuth';\nimport { setNativeAuthConfig, ApiError } from '../services/api';\nimport type { \n MobileRegistrationFormData,\n AccountType,\n} from '../types/mobile';\n\ninterface RegistrationConflict {\n type: 'email' | 'phone';\n masked_identifier: string;\n options: {\n can_login: boolean;\n can_recover_by_email: boolean;\n can_recover_by_sms: boolean;\n masked_email?: string;\n masked_phone?: string;\n };\n}\n\ninterface ApiConflictResponse {\n conflict?: RegistrationConflict;\n message?: string;\n error_type?: string;\n}\n\ninterface RegistrationState {\n processToken: string | null;\n status: 'idle' | 'pending_otp' | 'pending_password' | 'pending_registration' | 'completed';\n loading: boolean;\n error: string | null;\n conflict: RegistrationConflict | null;\n}\n\nfunction getErrorMessage(err: unknown, context: string): string {\n if (err instanceof Error) {\n if (err.message.includes('fetch') || err.message.includes('network')) {\n return 'Vérifiez votre connexion Internet';\n }\n if (err.message.includes('timeout')) {\n return 'Le serveur met trop de temps à répondre';\n }\n return err.message;\n }\n return `Erreur lors de ${context}`;\n}\n\nexport interface UseMobileRegistrationOptions {\n saasApiUrl: string;\n iamApiUrl: string;\n \n}\n\nexport function useMobileRegistration(options?: UseMobileRegistrationOptions) {\n const configuredRef = useRef(false);\n\n useEffect(() => {\n if (options && !configuredRef.current) {\n setNativeAuthConfig({ \n saasApiUrl: options.saasApiUrl, \n iamApiUrl: options.iamApiUrl,\n });\n configuredRef.current = true;\n }\n }, [options]);\n\n const [state, setState] = useState<RegistrationState>({\n processToken: null,\n status: 'idle',\n loading: false,\n error: null,\n conflict: null,\n });\n\n const [formData, setFormData] = useState<Partial<MobileRegistrationFormData>>({});\n const [accountType, setAccountType] = useState<AccountType>('email');\n\n const updateFormData = useCallback((data: Partial<MobileRegistrationFormData>) => {\n setFormData(prev => ({ ...prev, ...data }));\n }, []);\n\n const initRegistration = useCallback(async (\n data: Omit<MobileRegistrationFormData, 'password' | 'password_confirmation'>\n ) => {\n setState(prev => ({ ...prev, loading: true, error: null, conflict: null }));\n \n const enrichedData = {\n ...data,\n email: accountType === 'phone-only' ? '' : data.email,\n registration_type: accountType === 'phone-only' ? 'phone' as const : 'email' as const,\n };\n \n setFormData(enrichedData);\n\n try {\n if (!nativeAuthService.hasCredentials()) {\n await nativeAuthService.loadCredentials();\n }\n\n const response = await mobileRegistrationService.init(enrichedData);\n\n if (response.success && response.process_token) {\n setState(prev => ({\n ...prev,\n processToken: response.process_token!,\n status: 'pending_otp',\n loading: false,\n conflict: null,\n }));\n return { \n success: true, \n otp_code_dev: response.otp_code_dev,\n otp_method: response.otp_method,\n otp_sent_to: response.otp_sent_to,\n };\n }\n\n if (response.conflict) {\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Ce compte existe déjà',\n conflict: response.conflict!,\n }));\n return { success: false, error_type: response.error_type };\n }\n\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Erreur lors de l\\'inscription',\n conflict: null,\n }));\n return { success: false, error_type: response.error_type };\n } catch (err) {\n // Extract conflict data from 409 responses\n if (err instanceof ApiError && err.statusCode === 409 && err.response) {\n const resp = err.response as ApiConflictResponse;\n if (resp.conflict) {\n setState(prev => ({\n ...prev,\n loading: false,\n error: resp.message || 'Ce compte existe déjà',\n conflict: resp.conflict ?? null,\n }));\n return { success: false, error_type: resp.error_type };\n }\n }\n\n const message = getErrorMessage(err, 'l\\'inscription');\n setState(prev => ({ ...prev, loading: false, error: message, conflict: null }));\n return { success: false };\n }\n }, [accountType]);\n\n const verifyOtp = useCallback(async (otpCode: string) => {\n if (!state.processToken) {\n return { success: false, error: 'Session invalide' };\n }\n setState(prev => ({ ...prev, loading: true, error: null }));\n try {\n const response = await mobileRegistrationService.verifyOtp(state.processToken, otpCode);\n\n if (response.success) {\n if (response.status === 'completed' && response.callback_token) {\n setState(prev => ({ ...prev, status: 'completed', loading: false }));\n return { success: true, completed: true, callback_token: response.callback_token };\n }\n\n setState(prev => ({ ...prev, status: 'pending_password', loading: false }));\n return { success: true, completed: false };\n }\n\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Code incorrect',\n }));\n return { success: false, error_type: response.error_type };\n } catch (err) {\n const message = getErrorMessage(err, 'la vérification');\n setState(prev => ({ ...prev, loading: false, error: message }));\n return { success: false };\n }\n }, [state.processToken]);\n\n const completeRegistration = useCallback(async (password: string) => {\n if (!state.processToken) {\n return { success: false, error: 'Session invalide' };\n }\n setState(prev => ({ ...prev, loading: true, error: null }));\n try {\n const response = await mobileRegistrationService.complete(state.processToken, password);\n\n if (response.success && response.callback_token) {\n setState(prev => ({ ...prev, status: 'completed', loading: false }));\n return { success: true, callback_token: response.callback_token };\n }\n\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Erreur lors de la finalisation',\n }));\n return { success: false, error_type: response.error_type };\n } catch (err) {\n const message = getErrorMessage(err, 'la finalisation');\n setState(prev => ({ ...prev, loading: false, error: message }));\n return { success: false };\n }\n }, [state.processToken]);\n\n const completePhoneOnlyRegistration = useCallback(async () => {\n if (!state.processToken) {\n return { success: false, error: 'Session invalide' };\n }\n setState(prev => ({ ...prev, loading: true, error: null }));\n try {\n const response = await mobileRegistrationService.completePhoneOnly(state.processToken);\n\n if (response.success && response.callback_token) {\n setState(prev => ({ ...prev, status: 'completed', loading: false }));\n return { success: true, callback_token: response.callback_token };\n }\n\n setState(prev => ({\n ...prev,\n loading: false,\n error: response.message || 'Erreur lors de la finalisation',\n }));\n return { success: false, error_type: response.error_type };\n } catch (err) {\n const message = getErrorMessage(err, 'la finalisation');\n setState(prev => ({ ...prev, loading: false, error: message }));\n return { success: false };\n }\n }, [state.processToken]);\n\n const resendOtp = useCallback(async () => {\n if (!state.processToken) {\n return { success: false, error: 'Session invalide' };\n }\n setState(prev => ({ ...prev, loading: true, error: null }));\n try {\n const response = await mobileRegistrationService.resendOtp(state.processToken);\n setState(prev => ({ ...prev, loading: false }));\n return { \n success: response.success, \n cooldown: response.cooldown_remaining,\n otp_code_dev: response.otp_code_dev,\n };\n } catch (err) {\n const message = getErrorMessage(err, 'le renvoi');\n setState(prev => ({ ...prev, loading: false, error: message }));\n return { success: false };\n }\n }, [state.processToken]);\n\n const reset = useCallback(() => {\n setState({\n processToken: null,\n status: 'idle',\n loading: false,\n error: null,\n conflict: null,\n });\n setFormData({});\n setAccountType('email');\n }, []);\n\n const clearError = useCallback(() => {\n setState(prev => ({ ...prev, error: null, conflict: null }));\n }, []);\n\n return {\n processToken: state.processToken,\n status: state.status,\n formData,\n loading: state.loading,\n error: state.error,\n conflict: state.conflict,\n isCompleted: state.status === 'completed',\n hasConflict: state.conflict !== null,\n \n accountType,\n setAccountType,\n isPhoneOnly: accountType === 'phone-only',\n\n updateFormData,\n initRegistration,\n verifyOtp,\n completeRegistration,\n completePhoneOnlyRegistration,\n resendOtp,\n reset,\n clearError,\n };\n}\n\nexport default useMobileRegistration;\n","/**\n * Signup Modal for @ollaid/native-sso — Design aligned with web SSO\n * Full signup flow: intro → account-type → info → OTP → password → confirm → success\n * \n * @version 2.7.0\n */\n\nimport { useState, useEffect } from 'react';\nimport {\n Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogBody, DialogFooter,\n Button, Input, Label,\n IconShieldCheck, IconCheckCircle2, IconMail, IconSmartphone, IconArrowLeft,\n IconKeyRound, IconLock, IconLoader2,\n IconHome, IconCalendar, IconBell, IconMessageCircle, IconUsers, IconSettings,\n} from './ui';\nimport PhoneInput from './PhoneInput';\nimport OTPInput from './OTPInput';\nimport AppsLogoSlider from './AppsLogoSlider';\nimport PasswordRecoveryModal from './PasswordRecoveryModal';\nimport { useMobileRegistration } from '../hooks/useMobileRegistration';\nimport { nativeAuthService } from '../services/nativeAuth';\nimport { COUNTRIES_SORTED_BY_CODE, getCountryByCode, DEFAULT_COUNTRY_CODE } from '../utils/countries';\nimport type { UserInfos } from '../types/native';\nimport type { MobileRegistrationFormData } from '../types/mobile';\n\ntype SignupStep = 'intro' | 'account-type' | 'info' | 'otp' | 'password' | 'confirm';\n\nexport interface SignupModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onSwitchToLogin: () => void;\n onSignupSuccess: (token: string, user: UserInfos) => void;\n saasApiUrl: string;\n iamApiUrl: string;\n /** Type de compte par défaut à persister dans localStorage */\n defaultAccountType?: 'user' | 'client';\n /** Called when conflict resolution wants to switch to login with a pre-filled phone */\n onSwitchToLoginWithPhone?: (phone: string) => void;\n}\n\nconst C = {\n primary: '#002147',\n accent: '#e8430a',\n green: '#16a34a',\n greenBg: '#dcfce7',\n gray100: '#f3f4f6',\n gray200: '#e5e7eb',\n gray500: '#6b7280',\n gray700: '#374151',\n gray900: '#111827',\n red: '#dc2626',\n redBg: '#fef2f2',\n amber: '#f59e0b',\n amberBg: '#fef3c7',\n white: '#ffffff',\n} as const;\n\nconst iconCircle = (bg: string, size = '3rem'): React.CSSProperties => ({\n margin: '0 auto', width: size, height: size, backgroundColor: bg, borderRadius: '50%',\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n});\n\nconst backBtnStyle: React.CSSProperties = {\n position: 'absolute', left: '1rem', top: '1rem', background: 'none', border: 'none',\n cursor: 'pointer', padding: '0.5rem', borderRadius: '0.375rem', color: C.gray700, zIndex: 10,\n};\n\nconst linkStyle: React.CSSProperties = {\n color: C.primary, cursor: 'pointer', background: 'none', border: 'none',\n fontWeight: 500, textDecoration: 'underline', fontSize: '0.875rem',\n};\n\nconst TOTAL_STEPS = 6;\n\nfunction StepIndicator({ current }: { current: number }) {\n return (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '0.5rem', marginTop: '0.75rem' }}>\n {Array.from({ length: TOTAL_STEPS }, (_, i) => (\n <div key={i} style={{\n width: i + 1 === current ? '1.5rem' : '0.5rem',\n height: '0.5rem',\n borderRadius: '9999px',\n backgroundColor: i + 1 <= current ? C.accent : C.gray200,\n transition: 'all 0.2s',\n }} />\n ))}\n <span style={{ fontSize: '0.75rem', color: C.gray500, marginLeft: '0.5rem' }}>Étape {current}/{TOTAL_STEPS}</span>\n </div>\n );\n}\n\n// Orbit success animation\nfunction SuccessOrbit() {\n const orbitIcons = [IconHome, IconCalendar, IconBell, IconMessageCircle, IconUsers, IconSettings];\n return (\n <div style={{ position: 'relative', width: '10rem', height: '10rem', margin: '0 auto' }}>\n {/* Center shield */}\n <div style={{\n position: 'absolute', top: '50%', left: '50%', transform: 'translate(-50%, -50%)',\n width: '4rem', height: '4rem', backgroundColor: C.greenBg, borderRadius: '50%',\n display: 'flex', alignItems: 'center', justifyContent: 'center', zIndex: 2,\n }}>\n <IconShieldCheck style={{ width: '2rem', height: '2rem', color: C.green }} />\n </div>\n {/* Orbiting icons */}\n {orbitIcons.map((Icon, i) => {\n const angle = (i * 360) / orbitIcons.length;\n return (\n <div key={i} style={{\n position: 'absolute', top: '50%', left: '50%', width: '2rem', height: '2rem',\n transform: `rotate(${angle}deg) translate(4rem) rotate(-${angle}deg)`,\n transformOrigin: '0 0',\n animation: `spin ${8 + i}s linear infinite`,\n }}>\n <div style={{\n width: '2rem', height: '2rem', backgroundColor: C.gray100, borderRadius: '50%',\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n }}>\n <Icon style={{ width: '1rem', height: '1rem', color: C.gray500 }} />\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\nexport function SignupModal({ open, onOpenChange, onSwitchToLogin, onSignupSuccess, saasApiUrl, iamApiUrl, defaultAccountType, onSwitchToLoginWithPhone }: SignupModalProps) {\n const {\n status, formData, loading: regLoading, error: regError, conflict, accountType, setAccountType, isPhoneOnly,\n updateFormData, initRegistration, verifyOtp, completeRegistration, resendOtp, reset: resetReg, clearError,\n } = useMobileRegistration({ saasApiUrl, iamApiUrl });\n\n const [showPasswordRecovery, setShowPasswordRecovery] = useState(false);\n\n const [step, setStep] = useState<SignupStep>('intro');\n const [otpCode, setOtpCode] = useState('');\n const [password, setPassword] = useState('');\n const [passwordConfirm, setPasswordConfirm] = useState('');\n const [localError, setLocalError] = useState<string | null>(null);\n const [resendCooldown, setResendCooldown] = useState(0);\n const [signupSuccess, setSignupSuccess] = useState(false);\n const [signupData, setSignupData] = useState<{ token: string; user: UserInfos } | null>(null);\n\n const error = localError || regError;\n\n useEffect(() => { if (!open) { setStep('intro'); setOtpCode(''); setPassword(''); setPasswordConfirm(''); setLocalError(null); setSignupSuccess(false); setSignupData(null); setResendCooldown(0); resetReg(); } }, [open, resetReg]);\n useEffect(() => { if (status === 'pending_otp') { setStep('otp'); setResendCooldown(60); } else if (status === 'pending_password') setStep('password'); }, [status]);\n useEffect(() => { if (resendCooldown > 0) { const t = setTimeout(() => setResendCooldown(r => r - 1), 1000); return () => clearTimeout(t); } }, [resendCooldown]);\n useEffect(() => { if (signupSuccess && signupData) { const t = setTimeout(() => onSignupSuccess(signupData.token, signupData.user), 2000); return () => clearTimeout(t); } }, [signupSuccess, signupData, onSignupSuccess]);\n\n const exchangeCallbackToken = async (callbackToken: string) => {\n try {\n const response = await nativeAuthService.exchange(callbackToken);\n if (response.success && response.token) {\n setSignupData({ token: response.token, user: response.user as UserInfos });\n setSignupSuccess(true);\n } else setLocalError(\"Erreur lors de la finalisation de l'inscription\");\n } catch { setLocalError('Erreur de connexion au serveur'); }\n };\n\n const handleInfoSubmit = async (e: React.FormEvent) => {\n e.preventDefault(); setLocalError(null); clearError();\n if (!formData.name?.trim()) { setLocalError('Le nom est requis'); return; }\n if (!isPhoneOnly && !formData.email?.trim()) { setLocalError(\"L'adresse email est requise\"); return; }\n if (!formData.phone?.trim() || (formData.phone?.length || 0) < 6) { setLocalError('Numéro de téléphone invalide'); return; }\n if (formData.ccphone === '+221' && formData.phone?.length !== 9) { setLocalError('Le numéro sénégalais doit contenir exactement 9 chiffres'); return; }\n if (isPhoneOnly && formData.ccphone !== '+221') { setLocalError(\"L'inscription par téléphone est réservée aux numéros sénégalais (+221)\"); return; }\n if (!formData.town?.trim()) { setLocalError('La ville est requise'); return; }\n if (!formData.country?.trim()) { setLocalError('Le pays est requis'); return; }\n const registrationData: Omit<MobileRegistrationFormData, 'password' | 'password_confirmation'> = {\n name: formData.name || '',\n email: formData.email || '',\n ccphone: formData.ccphone || '+221',\n phone: formData.phone || '',\n town: formData.town,\n country: formData.country,\n };\n await initRegistration(registrationData);\n };\n\n const handleOTPSubmit = async () => {\n if (otpCode.length !== 6) { setLocalError('Veuillez entrer le code à 6 chiffres'); return; }\n setLocalError(null); clearError();\n const result = await verifyOtp(otpCode);\n if (result.success && result.completed && result.callback_token) await exchangeCallbackToken(result.callback_token);\n };\n\n const handlePasswordSubmit = (e: React.FormEvent) => {\n e.preventDefault(); setLocalError(null);\n if (!password || password.length < 8) { setLocalError('Le mot de passe doit contenir au moins 8 caractères'); return; }\n if (password !== passwordConfirm) { setLocalError('Les mots de passe ne correspondent pas'); return; }\n setStep('confirm');\n };\n\n const handleConfirm = async () => {\n setLocalError(null); clearError();\n const result = await completeRegistration(password);\n if (result.success && result.callback_token) await exchangeCallbackToken(result.callback_token);\n };\n\n const handleResendOTP = async () => { if (resendCooldown > 0) return; const r = await resendOtp(); if (r.success) setResendCooldown(r.cooldown || 60); };\n\n const goToStep = (s: SignupStep) => { setLocalError(null); clearError(); setStep(s); };\n\n const handleAccountTypeSelect = (type: 'email' | 'phone-only') => {\n setAccountType(type);\n if (type === 'phone-only') updateFormData({ ccphone: '+221', country: 'SN', email: '' });\n else if (!formData.country) updateFormData({ country: DEFAULT_COUNTRY_CODE });\n goToStep('info');\n };\n\n const stepNumber = { intro: 1, 'account-type': 2, info: 3, otp: 4, password: 5, confirm: 6 }[step];\n\n const renderError = () => error ? <div style={{ padding: '0.75rem', borderRadius: '0.375rem', backgroundColor: C.redBg, color: C.red, fontSize: '0.875rem' }}>{error}</div> : null;\n\n return (\n <>\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent>\n\n {/* ===================== SUCCESS ===================== */}\n {signupSuccess && signupData ? (\n <DialogHeader style={{ textAlign: 'center' }}>\n <SuccessOrbit />\n <DialogTitle>Félicitations !</DialogTitle>\n <DialogDescription>\n Votre compte a été créé avec succès. Bienvenue {formData.name} !\n </DialogDescription>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '0.5rem', fontSize: '0.875rem', color: C.gray500, marginTop: '1rem' }}>\n <IconLoader2 style={{ width: '1rem', height: '1rem' }} />\n Connexion automatique en cours...\n </div>\n </DialogHeader>\n ) : (\n <>\n {/* ===== INTRO ===== */}\n {step === 'intro' && (\n <>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={iconCircle(C.accent + '1a', '4rem')}>\n <IconShieldCheck style={{ width: '2rem', height: '2rem', color: C.accent }} />\n </div>\n <DialogTitle>Ouvrez un compte Ollaid</DialogTitle>\n <DialogDescription>Un compte unique qui vous donne accès à toutes les applications</DialogDescription>\n </DialogHeader>\n <DialogBody>\n <AppsLogoSlider iamApiUrl={iamApiUrl} />\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.75rem', fontSize: '0.875rem', color: C.gray500, margin: '0.75rem 0' }}>\n {['Un seul compte pour toutes les applications', 'Plus besoin de multiples mots de passe', 'Connexion simplifiée et sécurisée'].map(text => (\n <div key={text} style={{ display: 'flex', alignItems: 'center', gap: '0.75rem' }}>\n <IconCheckCircle2 style={{ width: '1.25rem', height: '1.25rem', color: C.green, flexShrink: 0 }} />\n {text}\n </div>\n ))}\n </div>\n <StepIndicator current={1} />\n </DialogBody>\n <DialogFooter>\n <Button onClick={() => goToStep('account-type')} style={{ width: '100%' }}>Suivant →</Button>\n <div style={{ textAlign: 'center', fontSize: '0.875rem' }}>\n <span style={{ color: C.gray500 }}>Déjà un compte ? </span>\n <button type=\"button\" style={linkStyle} onClick={onSwitchToLogin}>Connectez-vous</button>\n </div>\n </DialogFooter>\n </>\n )}\n\n {/* ===== ACCOUNT TYPE ===== */}\n {step === 'account-type' && (\n <>\n <button onClick={() => goToStep('intro')} style={backBtnStyle} type=\"button\">\n <IconArrowLeft style={{ width: '1rem', height: '1rem' }} />\n </button>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={iconCircle(C.gray100)}>\n <IconShieldCheck style={{ width: '1.5rem', height: '1.5rem', color: C.primary }} />\n </div>\n <DialogTitle>Choisissez votre type de compte</DialogTitle>\n </DialogHeader>\n <DialogBody>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.75rem' }}>\n <button type=\"button\" onClick={() => handleAccountTypeSelect('email')}\n style={{ width: '100%', padding: '1rem', border: `2px solid ${C.gray200}`, borderRadius: '0.5rem', textAlign: 'left', cursor: 'pointer', background: C.white, display: 'flex', alignItems: 'center', gap: '0.75rem' }}>\n <div style={{ width: '2.5rem', height: '2.5rem', backgroundColor: C.accent, borderRadius: '0.5rem', display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}>\n <IconMail style={{ width: '1.25rem', height: '1.25rem', color: C.white }} />\n </div>\n <div>\n <div style={{ fontWeight: 600, color: C.gray900 }}>Email + Téléphone</div>\n <div style={{ fontSize: '0.875rem', color: C.gray500 }}>Compte complet</div>\n </div>\n </button>\n <button type=\"button\" onClick={() => handleAccountTypeSelect('phone-only')}\n style={{ width: '100%', padding: '1rem', border: `2px solid ${C.gray200}`, borderRadius: '0.5rem', textAlign: 'left', cursor: 'pointer', background: C.white, display: 'flex', alignItems: 'center', gap: '0.75rem' }}>\n <div style={{ width: '2.5rem', height: '2.5rem', backgroundColor: C.accent, borderRadius: '0.5rem', display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}>\n <IconSmartphone style={{ width: '1.25rem', height: '1.25rem', color: C.white }} />\n </div>\n <div>\n <div style={{ fontWeight: 600, color: C.gray900 }}>Téléphone uniquement</div>\n <div style={{ fontSize: '0.875rem', color: C.gray500 }}>🇸🇳 Sénégal uniquement</div>\n </div>\n </button>\n </div>\n <StepIndicator current={2} />\n </DialogBody>\n </>\n )}\n\n {/* ===== INFO (with conflict resolution) ===== */}\n {step === 'info' && (\n <>\n <button onClick={() => goToStep('account-type')} style={backBtnStyle} type=\"button\">\n <IconArrowLeft style={{ width: '1rem', height: '1rem' }} />\n </button>\n\n {/* ---- CONFLICT VIEW ---- */}\n {conflict ? (\n <>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={iconCircle(C.amberBg)}>\n <IconShieldCheck style={{ width: '1.5rem', height: '1.5rem', color: C.amber }} />\n </div>\n <DialogTitle>\n {conflict.type === 'phone' ? 'Numéro déjà utilisé' : 'Email déjà utilisé'}\n </DialogTitle>\n <DialogDescription>\n {conflict.type === 'phone'\n ? `Le numéro ${formData.ccphone || ''} ${formData.phone || ''} est déjà associé à un compte.`\n : `L'adresse ${formData.email || ''} est déjà associée à un compte.`}\n {' '}S'il s'agit du vôtre, connectez-vous.\n </DialogDescription>\n </DialogHeader>\n <DialogFooter style={{ borderTop: 'none' }}>\n {conflict.type === 'phone' && formData.ccphone === '+221' && conflict.options?.can_login && (\n <Button\n onClick={() => {\n const fullPhone = formData.phone || '';\n if (onSwitchToLoginWithPhone) onSwitchToLoginWithPhone(fullPhone);\n else onSwitchToLogin();\n }}\n style={{ width: '100%' }}\n >\n <IconSmartphone style={{ width: '1rem', height: '1rem' }} />\n Se connecter par téléphone\n </Button>\n )}\n {(conflict.type === 'email' || (conflict.type === 'phone' && formData.ccphone !== '+221')) && conflict.options?.can_login && (\n <Button onClick={onSwitchToLogin} style={{ width: '100%' }}>\n Se connecter\n </Button>\n )}\n {!isPhoneOnly && (conflict.options?.can_recover_by_email || conflict.options?.can_recover_by_sms) && (\n <Button variant=\"outline\" onClick={() => setShowPasswordRecovery(true)} style={{ width: '100%' }}>\n Récupérer mon compte\n </Button>\n )}\n <Button variant=\"outline\" onClick={() => clearError()} style={{ width: '100%' }}>\n {conflict.type === 'phone' ? 'Changer le numéro' : \"Changer l'email\"}\n </Button>\n {conflict.options?.masked_email && (\n <div style={{ padding: '0.75rem', backgroundColor: C.gray100, borderRadius: '0.375rem', fontSize: '0.8125rem', color: C.gray500, textAlign: 'center' }}>\n Email lié : <strong style={{ color: C.gray900 }}>{conflict.options.masked_email}</strong>\n </div>\n )}\n {conflict.options?.masked_phone && (\n <div style={{ padding: '0.75rem', backgroundColor: C.gray100, borderRadius: '0.375rem', fontSize: '0.8125rem', color: C.gray500, textAlign: 'center' }}>\n Téléphone lié : <strong style={{ color: C.gray900 }}>{conflict.options.masked_phone}</strong>\n </div>\n )}\n </DialogFooter>\n </>\n ) : (\n /* ---- NORMAL INFO FORM ---- */\n <>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={iconCircle(C.primary + '1a')}>\n <IconShieldCheck style={{ width: '1.5rem', height: '1.5rem', color: C.primary }} />\n </div>\n <DialogTitle>Créer votre compte</DialogTitle>\n </DialogHeader>\n <form onSubmit={handleInfoSubmit} style={{ display: 'flex', flexDirection: 'column', flex: 1, minHeight: 0 }}>\n <DialogBody>\n {isPhoneOnly && (\n <div style={{ padding: '0.75rem', borderRadius: '0.375rem', backgroundColor: C.accent + '1a', color: C.accent, fontSize: '0.8125rem', marginBottom: '0.5rem', textAlign: 'center' }}>\n 📱 Inscription par téléphone — 🇸🇳 Sénégal uniquement\n </div>\n )}\n {!isPhoneOnly && (\n <div style={{ padding: '0.75rem', borderRadius: '0.375rem', backgroundColor: C.amberBg, color: '#92400e', fontSize: '0.8125rem', marginBottom: '0.5rem', textAlign: 'center' }}>\n ⚠️ Un code OTP sera envoyé par email pour vérification\n </div>\n )}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.75rem' }}>\n {renderError()}\n <div><Label>Nom complet <span style={{ color: C.red }}>*</span></Label><Input placeholder=\"Jean Dupont\" value={formData.name || ''} onChange={e => updateFormData({ name: e.target.value })} disabled={regLoading} /></div>\n {!isPhoneOnly && <div><Label>Adresse email <span style={{ color: C.red }}>*</span></Label><Input type=\"email\" placeholder=\"vous@exemple.com\" value={formData.email || ''} onChange={e => updateFormData({ email: e.target.value })} disabled={regLoading} /></div>}\n <div><Label>Numéro de téléphone <span style={{ color: C.red }}>*</span></Label><PhoneInput value={formData.phone || ''} onChange={p => updateFormData({ phone: p })} ccphone={formData.ccphone || '+221'} onCcphoneChange={c => updateFormData({ ccphone: c })} disabled={regLoading} lockCcphone={isPhoneOnly} /></div>\n <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '0.75rem' }}>\n <div><Label>Ville <span style={{ color: C.red }}>*</span></Label><Input placeholder=\"Dakar\" value={formData.town || ''} onChange={e => updateFormData({ town: e.target.value })} disabled={regLoading} /></div>\n <div>\n <Label>Pays <span style={{ color: C.red }}>*</span></Label>\n <select\n value={formData.country || DEFAULT_COUNTRY_CODE}\n onChange={e => {\n const country = getCountryByCode(e.target.value);\n updateFormData({ country: e.target.value, ccphone: country?.dialCode || '+221' });\n }}\n disabled={regLoading || isPhoneOnly}\n style={{ width: '100%', padding: '0.5rem', borderRadius: '0.375rem', border: '1px solid #d1d5db', backgroundColor: (regLoading || isPhoneOnly) ? '#f3f4f6' : 'white', fontSize: '0.875rem' }}\n >\n {COUNTRIES_SORTED_BY_CODE.map(c => (\n <option key={c.code} value={c.code}>{c.code} {c.flag} {c.name}</option>\n ))}\n </select>\n </div>\n </div>\n <StepIndicator current={3} />\n </div>\n </DialogBody>\n <DialogFooter>\n <Button type=\"submit\" disabled={regLoading} style={{ width: '100%' }}>\n {regLoading ? (\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <IconLoader2 style={{ width: '1rem', height: '1rem' }} /> Vérification...\n </span>\n ) : 'Continuer'}\n </Button>\n </DialogFooter>\n </form>\n </>\n )}\n </>\n )}\n\n {/* ===== OTP ===== */}\n {step === 'otp' && (\n <>\n <button onClick={() => goToStep('info')} style={backBtnStyle} type=\"button\">\n <IconArrowLeft style={{ width: '1rem', height: '1rem' }} />\n </button>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={iconCircle(C.accent)}>\n <IconKeyRound style={{ width: '1.5rem', height: '1.5rem', color: C.white }} />\n </div>\n <DialogTitle>Vérification</DialogTitle>\n <DialogDescription>Entrez le code envoyé {isPhoneOnly ? `au ${formData.ccphone} ${formData.phone}` : `à ${formData.email}`}</DialogDescription>\n </DialogHeader>\n <DialogBody>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n {renderError()}\n <OTPInput value={otpCode} onChange={setOtpCode} disabled={regLoading} />\n <div style={{ textAlign: 'center', fontSize: '0.875rem' }}>\n {resendCooldown > 0 ? <span style={{ color: C.gray500 }}>Renvoyer dans {resendCooldown}s</span> : <button type=\"button\" onClick={handleResendOTP} style={linkStyle}>Code non reçu ? Renvoyer</button>}\n </div>\n <StepIndicator current={4} />\n </div>\n </DialogBody>\n <DialogFooter>\n <Button onClick={handleOTPSubmit} disabled={regLoading || otpCode.length !== 6} style={{ width: '100%' }}>\n {regLoading ? (\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <IconLoader2 style={{ width: '1rem', height: '1rem' }} /> Vérification...\n </span>\n ) : 'Vérifier'}\n </Button>\n </DialogFooter>\n </>\n )}\n\n {/* ===== PASSWORD ===== */}\n {step === 'password' && (\n <>\n <button onClick={() => goToStep('otp')} style={backBtnStyle} type=\"button\">\n <IconArrowLeft style={{ width: '1rem', height: '1rem' }} />\n </button>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={iconCircle(C.accent)}>\n <IconLock style={{ width: '1.5rem', height: '1.5rem', color: C.white }} />\n </div>\n <DialogTitle>Créer un mot de passe</DialogTitle>\n </DialogHeader>\n <form onSubmit={handlePasswordSubmit} style={{ display: 'flex', flexDirection: 'column', flex: 1, minHeight: 0 }}>\n <DialogBody>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.75rem' }}>\n {renderError()}\n <div><Label>Mot de passe</Label><Input type=\"password\" placeholder=\"Minimum 8 caractères\" value={password} onChange={e => setPassword(e.target.value)} disabled={regLoading} /></div>\n <div><Label>Confirmer le mot de passe</Label><Input type=\"password\" placeholder=\"••••••••\" value={passwordConfirm} onChange={e => setPasswordConfirm(e.target.value)} disabled={regLoading} /></div>\n <StepIndicator current={5} />\n </div>\n </DialogBody>\n <DialogFooter>\n <Button type=\"submit\" disabled={regLoading} style={{ width: '100%' }}>Continuer</Button>\n </DialogFooter>\n </form>\n </>\n )}\n\n {/* ===== CONFIRM ===== */}\n {step === 'confirm' && (\n <>\n <button onClick={() => goToStep('password')} style={backBtnStyle} type=\"button\">\n <IconArrowLeft style={{ width: '1rem', height: '1rem' }} />\n </button>\n <DialogHeader style={{ textAlign: 'center' }}>\n <div style={iconCircle(C.primary + '1a')}>\n <IconShieldCheck style={{ width: '1.5rem', height: '1.5rem', color: C.primary }} />\n </div>\n <DialogTitle>Confirmer votre inscription</DialogTitle>\n </DialogHeader>\n <DialogBody>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.75rem' }}>\n {renderError()}\n <div style={{ backgroundColor: C.gray100, borderRadius: '0.5rem', padding: '1rem' }}>\n {[['Nom', formData.name], ...(!isPhoneOnly ? [['Email', formData.email]] : []), ['Téléphone', `${formData.ccphone} ${formData.phone}`], ['Ville', formData.town], ['Pays', formData.country]].map(([label, value]) => (\n <div key={label as string} style={{ display: 'flex', justifyContent: 'space-between', padding: '0.375rem 0' }}>\n <span style={{ fontSize: '0.875rem', color: C.gray500 }}>{label}</span>\n <span style={{ fontSize: '0.875rem', fontWeight: 500 }}>{value as string}</span>\n </div>\n ))}\n </div>\n <StepIndicator current={6} />\n </div>\n </DialogBody>\n <DialogFooter>\n <Button onClick={handleConfirm} disabled={regLoading} style={{ width: '100%' }}>\n {regLoading ? (\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <IconLoader2 style={{ width: '1rem', height: '1rem' }} /> Création du compte...\n </span>\n ) : 'Créer mon compte'}\n </Button>\n </DialogFooter>\n </>\n )}\n </>\n )}\n </DialogContent>\n </Dialog>\n\n <PasswordRecoveryModal\n open={showPasswordRecovery}\n onOpenChange={setShowPasswordRecovery}\n onSuccess={() => setShowPasswordRecovery(false)}\n saasApiUrl={saasApiUrl}\n iamApiUrl={iamApiUrl}\n />\n </>\n );\n}\n\nexport default SignupModal;\n","/**\n * Profile change service for @ollaid/native-sso\n * Uses authenticated IAM endpoints for email / phone change with OTP confirmation.\n *\n * @version 2.7.0\n */\n\nimport { fetchWithTimeout, getAuthToken, getHeaders, getIamApiBaseUrl, ensureDeviceContext } from './api';\n\nexport type ProfileChangeKind = 'email' | 'phone';\nexport type ProfileChangeMethod = 'email' | 'phone';\n\nexport interface ProfileChangeRequestResponse {\n success: boolean;\n message?: string;\n request_id?: number;\n method?: ProfileChangeMethod;\n otp_dev?: string | null;\n}\n\nexport interface ProfileChangeVerifyResponse {\n success: boolean;\n message?: string;\n step?: 'pending_new_otp' | 'completed' | string;\n user?: unknown;\n}\n\nfunction getBaseUrl() {\n return getIamApiBaseUrl();\n}\n\nasync function getAuthHeaders(includeConfigPrefix = false) {\n const token = getAuthToken();\n await ensureDeviceContext();\n return getHeaders(token || undefined, includeConfigPrefix);\n}\n\nexport const profileChangeService = {\n async requestEmailChange(newEmail: string, method: ProfileChangeMethod = 'phone'): Promise<ProfileChangeRequestResponse> {\n const headers = await getAuthHeaders(true);\n return fetchWithTimeout<ProfileChangeRequestResponse>(\n `${getBaseUrl()}/backoffice/profile/email/request`,\n {\n method: 'POST',\n headers,\n body: JSON.stringify({ new_email: newEmail, method }),\n },\n 30000\n );\n },\n\n async requestPhoneChange(ccphone: string, phone: string, method: ProfileChangeMethod = 'email'): Promise<ProfileChangeRequestResponse> {\n const headers = await getAuthHeaders(true);\n return fetchWithTimeout<ProfileChangeRequestResponse>(\n `${getBaseUrl()}/backoffice/profile/phone/request`,\n {\n method: 'POST',\n headers,\n body: JSON.stringify({ ccphone, phone, method }),\n },\n 30000\n );\n },\n\n async verifyOldOTP(requestId: number, otpCode: string): Promise<ProfileChangeVerifyResponse> {\n const headers = await getAuthHeaders(true);\n return fetchWithTimeout<ProfileChangeVerifyResponse>(\n `${getBaseUrl()}/backoffice/profile/change/verify-old`,\n {\n method: 'POST',\n headers,\n body: JSON.stringify({ request_id: requestId, otp_code: otpCode }),\n },\n 30000\n );\n },\n\n async verifyNewOTP(requestId: number, otpCode: string): Promise<ProfileChangeVerifyResponse> {\n const headers = await getAuthHeaders(true);\n return fetchWithTimeout<ProfileChangeVerifyResponse>(\n `${getBaseUrl()}/backoffice/profile/change/verify-new`,\n {\n method: 'POST',\n headers,\n body: JSON.stringify({ request_id: requestId, otp_code: otpCode }),\n },\n 30000\n );\n },\n\n async resendOTP(requestId: number): Promise<ProfileChangeRequestResponse> {\n const headers = await getAuthHeaders(true);\n return fetchWithTimeout<ProfileChangeRequestResponse>(\n `${getBaseUrl()}/backoffice/profile/change/resend-otp`,\n {\n method: 'POST',\n headers,\n body: JSON.stringify({ request_id: requestId }),\n },\n 30000\n );\n },\n\n async switchMethod(requestId: number, method: ProfileChangeMethod): Promise<ProfileChangeRequestResponse> {\n const headers = await getAuthHeaders(true);\n return fetchWithTimeout<ProfileChangeRequestResponse>(\n `${getBaseUrl()}/backoffice/profile/change/switch-method`,\n {\n method: 'POST',\n headers,\n body: JSON.stringify({ request_id: requestId, method }),\n },\n 30000\n );\n },\n};\n\nexport default profileChangeService;\n","/**\n * AvatarCropModal — recadrage carré simple et déterministe\n *\n * Version réécrite from scratch pour éviter les états qui bloquent le bouton Valider.\n *\n * @version 2.7.0\n */\n\nimport { useCallback, useEffect, useMemo, useRef, useState, type PointerEvent as ReactPointerEvent } from 'react';\nimport { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogBody, DialogFooter, Button } from './ui';\n\nexport interface AvatarCropModalProps {\n open: boolean;\n imageSrc: string | null;\n onOpenChange: (open: boolean) => void;\n onCancel: () => void;\n onConfirm: (blob: Blob) => Promise<void> | void;\n}\n\ntype Point = { x: number; y: number };\ntype Size = { width: number; height: number };\ntype CropRect = { x: number; y: number; size: number };\ntype DragMode = 'move' | 'resize-nw' | 'resize-ne' | 'resize-sw' | 'resize-se' | null;\n\nconst MIN_SIZE = 88;\nconst HANDLE = 16;\nconst OUTPUT = 512;\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.max(min, Math.min(max, value));\n}\n\nfunction getContainRect(container: Size, natural: Size) {\n if (!container.width || !container.height || !natural.width || !natural.height) {\n return { x: 0, y: 0, width: 0, height: 0, scale: 1 };\n }\n\n const scale = Math.min(container.width / natural.width, container.height / natural.height);\n const width = natural.width * scale;\n const height = natural.height * scale;\n\n return {\n x: (container.width - width) / 2,\n y: (container.height - height) / 2,\n width,\n height,\n scale,\n };\n}\n\nexport function AvatarCropModal({ open, imageSrc, onOpenChange, onCancel, onConfirm }: AvatarCropModalProps) {\n const wrapRef = useRef<HTMLDivElement | null>(null);\n const imgRef = useRef<HTMLImageElement | null>(null);\n const dragRef = useRef<{\n mode: DragMode;\n pointerId: number;\n start: Point;\n startCrop: CropRect;\n } | null>(null);\n\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState('');\n const [natural, setNatural] = useState<Size>({ width: 0, height: 0 });\n const [container, setContainer] = useState<Size>({ width: 0, height: 0 });\n const [crop, setCrop] = useState<CropRect | null>(null);\n const [dragMode, setDragMode] = useState<DragMode>(null);\n\n const frame = useMemo(() => getContainRect(container, natural), [container, natural]);\n\n useEffect(() => {\n if (!open) return;\n setLoading(false);\n setError('');\n setNatural({ width: 0, height: 0 });\n setCrop(null);\n setDragMode(null);\n dragRef.current = null;\n }, [open, imageSrc]);\n\n useEffect(() => {\n if (!open) return;\n\n const measure = () => {\n const el = wrapRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n setContainer({ width: rect.width, height: rect.width });\n };\n\n measure();\n window.addEventListener('resize', measure);\n return () => window.removeEventListener('resize', measure);\n }, [open]);\n\n useEffect(() => {\n if (!open || !frame.width || !frame.height) return;\n setCrop((current) => {\n if (current) {\n const maxSize = Math.min(frame.width, frame.height);\n const size = clamp(current.size, MIN_SIZE, maxSize);\n const x = clamp(current.x, frame.x, frame.x + frame.width - size);\n const y = clamp(current.y, frame.y, frame.y + frame.height - size);\n return { x, y, size };\n }\n\n const maxSize = Math.min(frame.width, frame.height);\n const size = clamp(Math.round(maxSize * 0.7), MIN_SIZE, maxSize);\n return {\n x: frame.x + Math.round((frame.width - size) / 2),\n y: frame.y + Math.round((frame.height - size) / 2),\n size,\n };\n });\n }, [open, frame]);\n\n const startDrag = (mode: DragMode, event: ReactPointerEvent<HTMLDivElement>) => {\n if (!crop || !mode) return;\n event.preventDefault();\n event.stopPropagation();\n dragRef.current = {\n mode,\n pointerId: event.pointerId,\n start: { x: event.clientX, y: event.clientY },\n startCrop: crop,\n };\n setDragMode(mode);\n try {\n event.currentTarget.setPointerCapture(event.pointerId);\n } catch {\n // not supported in all webviews\n }\n };\n\n const moveCrop = useCallback((clientX: number, clientY: number) => {\n const state = dragRef.current;\n if (!state || !crop || !frame.width || !frame.height) return;\n\n const dx = clientX - state.start.x;\n const dy = clientY - state.start.y;\n const maxSize = Math.min(frame.width, frame.height);\n\n if (state.mode === 'move') {\n setCrop({\n ...state.startCrop,\n x: clamp(state.startCrop.x + dx, frame.x, frame.x + frame.width - state.startCrop.size),\n y: clamp(state.startCrop.y + dy, frame.y, frame.y + frame.height - state.startCrop.size),\n });\n return;\n }\n\n let next = { ...state.startCrop };\n const anchorLeft = state.startCrop.x;\n const anchorTop = state.startCrop.y;\n const anchorRight = state.startCrop.x + state.startCrop.size;\n const anchorBottom = state.startCrop.y + state.startCrop.size;\n\n if (state.mode === 'resize-se') {\n const size = clamp(Math.max(state.startCrop.size + dx, state.startCrop.size + dy), MIN_SIZE, maxSize);\n next = { x: anchorLeft, y: anchorTop, size };\n } else if (state.mode === 'resize-sw') {\n const size = clamp(Math.max(state.startCrop.size - dx, state.startCrop.size + dy), MIN_SIZE, maxSize);\n next = { x: anchorRight - size, y: anchorTop, size };\n } else if (state.mode === 'resize-ne') {\n const size = clamp(Math.max(state.startCrop.size + dx, state.startCrop.size - dy), MIN_SIZE, maxSize);\n next = { x: anchorLeft, y: anchorBottom - size, size };\n } else if (state.mode === 'resize-nw') {\n const size = clamp(Math.max(state.startCrop.size - dx, state.startCrop.size - dy), MIN_SIZE, maxSize);\n next = { x: anchorRight - size, y: anchorBottom - size, size };\n }\n\n next.x = clamp(next.x, frame.x, frame.x + frame.width - next.size);\n next.y = clamp(next.y, frame.y, frame.y + frame.height - next.size);\n setCrop(next);\n }, [crop, frame.height, frame.width, frame.x, frame.y]);\n\n useEffect(() => {\n if (!dragMode) return;\n\n const onMove = (event: PointerEvent) => {\n if (!dragRef.current || event.pointerId !== dragRef.current.pointerId) return;\n moveCrop(event.clientX, event.clientY);\n };\n\n const onUp = (event: PointerEvent) => {\n if (!dragRef.current || event.pointerId !== dragRef.current.pointerId) return;\n dragRef.current = null;\n setDragMode(null);\n window.removeEventListener('pointermove', onMove);\n window.removeEventListener('pointerup', onUp);\n window.removeEventListener('pointercancel', onUp);\n };\n\n window.addEventListener('pointermove', onMove);\n window.addEventListener('pointerup', onUp);\n window.addEventListener('pointercancel', onUp);\n return () => {\n window.removeEventListener('pointermove', onMove);\n window.removeEventListener('pointerup', onUp);\n window.removeEventListener('pointercancel', onUp);\n };\n }, [dragMode, moveCrop]);\n\n const handleConfirm = async () => {\n if (!imageSrc || !imgRef.current || !crop || !natural.width || !natural.height) {\n setError('L’image n’est pas encore prête.');\n return;\n }\n\n const canvas = document.createElement('canvas');\n canvas.width = OUTPUT;\n canvas.height = OUTPUT;\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n setError('Impossible de préparer le recadrage.');\n return;\n }\n\n const sx = (crop.x - frame.x) / frame.scale;\n const sy = (crop.y - frame.y) / frame.scale;\n const sSize = crop.size / frame.scale;\n\n setLoading(true);\n setError('');\n\n try {\n ctx.drawImage(imgRef.current, sx, sy, sSize, sSize, 0, 0, OUTPUT, OUTPUT);\n const blob = await new Promise<Blob | null>((resolve) => canvas.toBlob(resolve, 'image/jpeg', 0.92));\n if (!blob) {\n throw new Error('Impossible de générer l’image recadrée.');\n }\n\n await onConfirm(blob);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Erreur lors de la validation.');\n } finally {\n setLoading(false);\n }\n };\n\n const overlayStyle: React.CSSProperties = {\n position: 'absolute',\n inset: 0,\n cursor: dragMode ? 'grabbing' : 'grab',\n touchAction: 'none',\n };\n\n const cropStyle: React.CSSProperties = crop\n ? {\n position: 'absolute',\n left: `${crop.x}px`,\n top: `${crop.y}px`,\n width: `${crop.size}px`,\n height: `${crop.size}px`,\n border: '2px solid #ffffff',\n borderRadius: '0.5rem',\n boxShadow: '0 0 0 9999px rgba(0, 0, 0, 0.40)',\n boxSizing: 'border-box',\n touchAction: 'none',\n }\n : { display: 'none' };\n\n const handleOuter: React.CSSProperties = {\n position: 'absolute',\n width: `${HANDLE * 2}px`,\n height: `${HANDLE * 2}px`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 2,\n touchAction: 'none',\n userSelect: 'none',\n };\n\n const handleInner: React.CSSProperties = {\n width: `${HANDLE}px`,\n height: `${HANDLE}px`,\n borderRadius: '999px',\n border: '2px solid #002147',\n background: '#fff',\n boxShadow: '0 1px 2px rgba(0,0,0,0.18)',\n };\n\n return (\n <Dialog open={open} onOpenChange={(next) => { if (!next) onCancel(); onOpenChange(next); }}>\n <DialogContent style={{ maxWidth: '28rem', padding: '0.8rem', maxHeight: '90vh' }}>\n <DialogHeader>\n <DialogTitle>Recadrer la photo</DialogTitle>\n <DialogDescription>Déplacez le carré, puis validez pour enregistrer l’avatar.</DialogDescription>\n </DialogHeader>\n\n <DialogBody style={{ maxHeight: '64vh', overflowY: 'auto', paddingBottom: '0.25rem' }}>\n <div\n ref={wrapRef}\n style={{\n position: 'relative',\n width: '100%',\n aspectRatio: '1 / 1',\n overflow: 'hidden',\n borderRadius: '0.8rem',\n border: '1px solid #e5e7eb',\n background: '#0f172a',\n }}\n >\n {imageSrc && (\n <img\n ref={imgRef}\n src={imageSrc}\n alt=\"Aperçu\"\n onLoad={(e) => {\n setNatural({ width: e.currentTarget.naturalWidth, height: e.currentTarget.naturalHeight });\n }}\n style={{\n position: 'absolute',\n inset: 0,\n width: '100%',\n height: '100%',\n objectFit: 'contain',\n userSelect: 'none',\n pointerEvents: 'none',\n }}\n />\n )}\n\n {crop && (\n <div style={overlayStyle}>\n <div style={cropStyle} onPointerDown={(e) => startDrag('move', e)}>\n <div style={{ ...handleOuter, left: `-${HANDLE * 0.5}px`, top: `-${HANDLE * 0.5}px`, cursor: 'nwse-resize' }} onPointerDown={(e) => startDrag('resize-nw', e)}>\n <div style={handleInner} />\n </div>\n <div style={{ ...handleOuter, right: `-${HANDLE * 0.5}px`, top: `-${HANDLE * 0.5}px`, cursor: 'nesw-resize' }} onPointerDown={(e) => startDrag('resize-ne', e)}>\n <div style={handleInner} />\n </div>\n <div style={{ ...handleOuter, left: `-${HANDLE * 0.5}px`, bottom: `-${HANDLE * 0.5}px`, cursor: 'nesw-resize' }} onPointerDown={(e) => startDrag('resize-sw', e)}>\n <div style={handleInner} />\n </div>\n <div style={{ ...handleOuter, right: `-${HANDLE * 0.5}px`, bottom: `-${HANDLE * 0.5}px`, cursor: 'nwse-resize' }} onPointerDown={(e) => startDrag('resize-se', e)}>\n <div style={handleInner} />\n </div>\n </div>\n </div>\n )}\n </div>\n\n <div style={{ marginTop: '0.9rem', display: 'grid', gap: '0.6rem' }}>\n <div style={{ fontSize: '0.8rem', color: '#6b7280', lineHeight: 1.4 }}>\n Faites glisser le carré pour cadrer l’image. Les coins redimensionnent le carré.\n </div>\n {error && (\n <div style={{ padding: '0.65rem 0.75rem', borderRadius: '0.5rem', border: '1px solid #fecaca', background: '#fef2f2', color: '#b91c1c', fontSize: '0.85rem', lineHeight: 1.4 }}>\n {error}\n </div>\n )}\n </div>\n </DialogBody>\n\n <DialogFooter style={{ flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center' }}>\n <Button variant=\"outline\" onClick={onCancel} disabled={loading} style={{ minWidth: '6.5rem', height: '2.35rem' }}>\n Annuler\n </Button>\n <Button onClick={handleConfirm} disabled={!imageSrc || loading || !crop} style={{ minWidth: '7rem', height: '2.35rem' }}>\n {loading ? 'Chargement...' : 'Valider'}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\nexport default AvatarCropModal;\n","/**\n * Profile media service for @ollaid/native-sso\n * Uploads the cropped avatar to the IAM authenticated profile endpoint.\n *\n * @version 2.7.0\n */\n\nimport { fetchWithTimeout, getAuthToken, getHeaders, getIamApiBaseUrl, ensureDeviceContext } from './api';\nimport type { UserInfos } from '../types/native';\n\nexport interface ProfileImageUploadResponse {\n message?: string;\n user?: UserInfos;\n user_infos?: UserInfos;\n}\n\nexport const profileMediaService = {\n async uploadProfileImage(image: Blob, filename = 'avatar.jpg'): Promise<ProfileImageUploadResponse> {\n const baseUrl = getIamApiBaseUrl();\n const token = getAuthToken();\n if (!token) {\n throw new Error('Token manquant');\n }\n\n await ensureDeviceContext();\n\n const formData = new FormData();\n formData.append('image', image, filename);\n\n const headers = getHeaders(token, true);\n delete (headers as Record<string, string>)['Content-Type'];\n\n return fetchWithTimeout<ProfileImageUploadResponse>(\n `${baseUrl}/backoffice/profile/image`,\n {\n method: 'POST',\n headers,\n body: formData,\n },\n 30000\n );\n },\n};\n\nexport default profileMediaService;\n","/**\n * Profile service for @ollaid/native-sso\n * Updates the authenticated profile fields via IAM.\n *\n * @version 2.7.0\n */\n\nimport { fetchWithTimeout, getAuthToken, getHeaders, getIamApiBaseUrl, ensureDeviceContext } from './api';\nimport type { UserInfos } from '../types/native';\n\nexport interface ProfileUpdateRequest {\n name?: string;\n ccphone?: string;\n phone?: string;\n email?: string;\n address?: string;\n town?: string;\n country?: string;\n}\n\nexport interface ProfileUpdateResponse {\n message?: string;\n user?: UserInfos;\n user_infos?: UserInfos;\n}\n\nexport interface ProfileFetchResponse {\n message?: string;\n user?: UserInfos;\n user_infos?: UserInfos;\n}\n\nexport const profileService = {\n async getProfile(): Promise<ProfileFetchResponse> {\n const baseUrl = getIamApiBaseUrl();\n const token = getAuthToken();\n if (!token) {\n throw new Error('Token manquant');\n }\n\n await ensureDeviceContext();\n\n return fetchWithTimeout<ProfileFetchResponse>(\n `${baseUrl}/backoffice/profile`,\n {\n method: 'GET',\n headers: getHeaders(token, true),\n },\n 20000\n );\n },\n\n async updateProfile(data: ProfileUpdateRequest): Promise<ProfileUpdateResponse> {\n const baseUrl = getIamApiBaseUrl();\n const token = getAuthToken();\n if (!token) {\n throw new Error('Token manquant');\n }\n\n await ensureDeviceContext();\n\n return fetchWithTimeout<ProfileUpdateResponse>(\n `${baseUrl}/backoffice/profile`,\n {\n method: 'PUT',\n headers: getHeaders(token, true),\n body: JSON.stringify(data),\n },\n 30000\n );\n },\n};\n\nexport default profileService;\n","/**\n * OnboardingModal — Modal de profil unifiée\n * Mode `missing` : champs absents uniquement\n * Mode `edit` : édition complète du profil depuis le SaaS\n *\n * @version 2.7.0\n */\n\nimport { useState, useCallback, useEffect, useRef } from 'react';\nimport { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogBody, DialogFooter, Button, Label } from './ui';\nimport OTPInput from './OTPInput';\nimport { PhoneInput } from './PhoneInput';\nimport { profileChangeService } from '../services/profileChange';\nimport AvatarCropModal from './AvatarCropModal';\nimport { profileMediaService } from '../services/profileMedia';\nimport { profileService } from '../services/profile';\nimport type { NativeUser, UserInfos } from '../types/native';\nimport { COUNTRIES_SORTED_BY_CODE, DEFAULT_COUNTRY_CODE } from '../utils/countries';\n\nconst C = {\n primary: '#002147',\n accent: '#e8430a',\n gray100: '#f3f4f6',\n gray200: '#e5e7eb',\n gray500: '#6b7280',\n gray700: '#374151',\n white: '#ffffff',\n} as const;\n\nexport interface OnboardingModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onDismiss: () => void;\n user: NativeUser;\n variant?: 'missing' | 'edit';\n profileHydrating?: boolean;\n onComplete: (data: {\n name?: string;\n image_url?: string;\n ccphone?: string;\n phone?: string;\n email?: string;\n address?: string;\n town?: string;\n country?: string;\n user_infos?: UserInfos;\n }) => void;\n onSkip: () => void;\n}\n\ntype ContactKind = 'email' | 'phone';\ntype ContactPhase = 'request' | 'verify-old' | 'verify-new';\n\ninterface ContactFlowState {\n kind: ContactKind;\n phase: ContactPhase;\n requestId: number | null;\n method: 'email' | 'phone';\n newEmail: string;\n newCcphone: string;\n newPhone: string;\n oldOtp: string;\n newOtp: string;\n loading: boolean;\n error: string;\n resendAvailableAt: number | null;\n}\n\ntype SubmitState = 'idle' | 'submitting' | 'success' | 'error';\ntype ConfirmAction = 'back' | 'resend' | 'cancel-load' | null;\n\nexport function OnboardingModal({ open, onOpenChange, onDismiss, user, variant = 'missing', profileHydrating = false, onComplete, onSkip }: OnboardingModalProps) {\n const isEditMode = variant === 'edit';\n const hasCurrentPhone = Boolean(user.phone);\n const hasCurrentEmail = Boolean(user.email);\n const directPhoneEdit = !isEditMode || !hasCurrentPhone;\n const directEmailEdit = !isEditMode || !hasCurrentEmail;\n const needsName = !isEditMode ? !user.name?.trim() : true;\n\n const [name, setName] = useState(user.name || '');\n const [photoPreview, setPhotoPreview] = useState<string>('');\n const [avatarPickerOpen, setAvatarPickerOpen] = useState(false);\n const [pendingAvatarSrc, setPendingAvatarSrc] = useState<string | null>(null);\n const [avatarUploading, setAvatarUploading] = useState(false);\n const avatarFileInputRef = useRef<HTMLInputElement | null>(null);\n const [ccphone, setCcphone] = useState(user.ccphone || '+221');\n const [phone, setPhone] = useState(user.phone || '');\n const [email, setEmail] = useState(user.email || '');\n const [address, setAddress] = useState(user.address || '');\n const [town, setTown] = useState(user.town || '');\n const [country, setCountry] = useState(user.country || DEFAULT_COUNTRY_CODE);\n const [submitting, setSubmitting] = useState(false);\n const [fileError, setFileError] = useState('');\n const [contactFlow, setContactFlow] = useState<ContactFlowState | null>(null);\n const [submitState, setSubmitState] = useState<SubmitState>('idle');\n const [submitMessage, setSubmitMessage] = useState('');\n const [submitError, setSubmitError] = useState('');\n const [confirmAction, setConfirmAction] = useState<ConfirmAction>(null);\n const [nowTick, setNowTick] = useState(Date.now());\n const userHydrationKey = [\n user.reference || '',\n user.name || '',\n user.email || '',\n user.ccphone || '',\n user.phone || '',\n user.address || '',\n user.town || '',\n user.country || '',\n user.image_url || '',\n user.auth_2fa ? '1' : '0',\n ].join('|');\n const currentDialCode = (user.ccphone || ccphone || '+221').trim();\n const baseSmsAllowed = currentDialCode === '+221';\n const contactSmsAllowed = contactFlow\n ? (contactFlow.kind === 'phone'\n ? contactFlow.newCcphone.trim() === '+221'\n : baseSmsAllowed)\n : baseSmsAllowed;\n const lockModalClose = profileHydrating || submitting || submitState === 'success' || avatarUploading || Boolean(contactFlow?.loading);\n\n useEffect(() => {\n if (!open) return;\n setName(user.name || '');\n setPhotoPreview(isEditMode ? (user.image_url || '') : '');\n setPendingAvatarSrc(null);\n setAvatarPickerOpen(false);\n setAvatarUploading(false);\n setCcphone(user.ccphone || '+221');\n setPhone(user.phone || '');\n setEmail(user.email || '');\n setAddress(user.address || '');\n setTown(user.town || '');\n setCountry(user.country || DEFAULT_COUNTRY_CODE);\n setSubmitting(false);\n setFileError('');\n setContactFlow(null);\n setSubmitState('idle');\n setSubmitMessage('');\n setSubmitError('');\n setConfirmAction(null);\n }, [open, isEditMode, userHydrationKey, user.name, user.image_url, user.ccphone, user.phone, user.email, user.address, user.town, user.country]);\n\n useEffect(() => {\n if (!contactFlow?.resendAvailableAt) return;\n\n const timer = window.setInterval(() => {\n setNowTick(Date.now());\n }, 1000);\n\n return () => window.clearInterval(timer);\n }, [contactFlow?.resendAvailableAt]);\n\n const markSuccess = useCallback((message: string) => {\n setSubmitting(false);\n setSubmitState('success');\n setSubmitMessage(message);\n setSubmitError('');\n }, []);\n\n const handleFileChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (!file) return;\n\n if (file.size > 2 * 1024 * 1024) {\n setFileError('Le fichier dépasse 2 Mo. Veuillez choisir une image plus légère.');\n e.target.value = '';\n return;\n }\n\n setFileError('');\n const reader = new FileReader();\n reader.onload = () => setPhotoPreview(reader.result as string);\n reader.readAsDataURL(file);\n }, []);\n\n const canSubmit = !avatarUploading && (\n name.trim().length > 0 &&\n (directPhoneEdit ? phone.length >= 7 : true) &&\n (directEmailEdit ? email.trim().length > 0 : true) &&\n town.trim().length > 0\n );\n\n const handleSubmit = useCallback(async () => {\n if (!canSubmit) return;\n setSubmitting(true);\n setSubmitState('submitting');\n setSubmitError('');\n\n const data = {\n name: name.trim(),\n ccphone: directPhoneEdit ? ccphone : user.ccphone || undefined,\n phone: directPhoneEdit ? phone : user.phone || undefined,\n email: directEmailEdit ? email.trim() : user.email || undefined,\n ...(address.trim() ? { address: address.trim() } : {}),\n ...(town.trim() ? { town: town.trim() } : {}),\n ...(country ? { country } : {}),\n };\n\n try {\n const response = await profileService.updateProfile(data);\n const payload = (response.user_infos || response.user || {}) as Partial<UserInfos>;\n const updatedUser: NativeUser = {\n ...user,\n name: payload.name || data.name || user.name,\n email: payload.email ?? data.email ?? user.email,\n ccphone: payload.ccphone || data.ccphone || user.ccphone,\n phone: payload.phone || data.phone || user.phone,\n address: payload.address || data.address || user.address,\n town: payload.town || data.town || user.town,\n country: payload.country || data.country || user.country,\n image_url: payload.image_url || user.image_url,\n auth_2fa: payload.auth_2fa ?? user.auth_2fa,\n alias_reference: payload.alias_reference || user.alias_reference,\n iam_reference: payload.iam_reference || user.iam_reference,\n };\n\n onComplete({\n name: updatedUser.name,\n image_url: updatedUser.image_url,\n ccphone: updatedUser.ccphone,\n phone: updatedUser.phone,\n email: updatedUser.email || undefined,\n address: updatedUser.address,\n town: updatedUser.town,\n country: updatedUser.country,\n user_infos: {\n reference: updatedUser.reference,\n name: updatedUser.name,\n email: updatedUser.email || null,\n ccphone: updatedUser.ccphone,\n phone: updatedUser.phone,\n address: updatedUser.address,\n town: updatedUser.town,\n country: updatedUser.country,\n image_url: updatedUser.image_url,\n auth_2fa: updatedUser.auth_2fa,\n alias_reference: updatedUser.alias_reference,\n iam_reference: updatedUser.iam_reference,\n },\n });\n markSuccess(response.message || 'Mise à jour réussie');\n } catch (error) {\n setSubmitting(false);\n setSubmitState('error');\n setSubmitError(error instanceof Error ? error.message : 'Erreur lors de l’enregistrement');\n }\n }, [canSubmit, user, name, directPhoneEdit, directEmailEdit, ccphone, phone, email, address, town, country, onComplete, markSuccess]);\n\n const openAvatarPicker = useCallback(() => {\n avatarFileInputRef.current?.click();\n }, []);\n\n const handleAvatarSelected = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n const file = event.target.files?.[0];\n if (!file) return;\n const reader = new FileReader();\n reader.onload = () => {\n setPendingAvatarSrc(reader.result as string);\n setAvatarPickerOpen(true);\n };\n reader.readAsDataURL(file);\n event.target.value = '';\n }, []);\n\n const handleAvatarConfirm = useCallback(async (blob: Blob) => {\n setAvatarUploading(true);\n try {\n const filename = `avatar-${Date.now()}.jpg`;\n const response = await profileMediaService.uploadProfileImage(blob, filename);\n const payload = (response.user_infos || response.user || {}) as Partial<NativeUser & { image?: string }>;\n const nextImage = payload.image_url || payload.image;\n if (nextImage) {\n setPhotoPreview(nextImage);\n } else {\n setPhotoPreview(URL.createObjectURL(blob));\n }\n if (Object.keys(payload).length > 0) {\n onComplete({\n name: payload.name,\n image_url: nextImage || undefined,\n ccphone: payload.ccphone || undefined,\n phone: payload.phone || undefined,\n email: payload.email || undefined,\n address: payload.address || undefined,\n town: payload.town || undefined,\n country: payload.country || undefined,\n user_infos: {\n reference: payload.reference || user.reference,\n name: payload.name || user.name,\n email: payload.email ?? user.email ?? null,\n ccphone: payload.ccphone || user.ccphone,\n phone: payload.phone || user.phone,\n address: payload.address || user.address,\n town: payload.town || user.town,\n country: payload.country || user.country,\n image_url: nextImage || user.image_url,\n auth_2fa: payload.auth_2fa ?? user.auth_2fa,\n alias_reference: payload.alias_reference || user.alias_reference,\n iam_reference: payload.iam_reference || user.iam_reference,\n },\n });\n }\n markSuccess('Mise à jour réussie');\n setPendingAvatarSrc(null);\n setAvatarPickerOpen(false);\n } finally {\n setAvatarUploading(false);\n }\n }, [onComplete, markSuccess, user.reference, user.name, user.email, user.ccphone, user.phone, user.address, user.town, user.country, user.image_url, user.auth_2fa, user.alias_reference, user.iam_reference]);\n\n const openContactFlow = useCallback((kind: ContactKind) => {\n setContactFlow({\n kind,\n phase: 'request',\n requestId: null,\n method: kind === 'email'\n ? 'email'\n : (currentDialCode === '+221' ? 'phone' : 'email'),\n newEmail: '',\n newCcphone: kind === 'phone' ? (user.ccphone || '+221') : '+221',\n newPhone: '',\n oldOtp: '',\n newOtp: '',\n loading: false,\n error: '',\n resendAvailableAt: null,\n });\n }, [currentDialCode, user.ccphone]);\n\n const closeContactFlow = useCallback(() => {\n setContactFlow(null);\n }, []);\n\n const updateFlow = useCallback((patch: Partial<ContactFlowState>) => {\n setContactFlow((prev) => prev ? { ...prev, ...patch } : prev);\n }, []);\n\n const currentPhoneDialDisplay = user.ccphone || ccphone || '+221';\n const currentPhoneNumberDisplay = user.phone || phone || '';\n const currentEmailLabel = user.email || email || '';\n const currentPhoneDialCode = (currentPhoneDialDisplay || '+221').trim() || '+221';\n const currentPhoneDigits = (user.phone || phone || '').replace(/\\D/g, '');\n const formatPhoneDisplay = useCallback((dial: string, digits: string) => {\n const cleanDial = (dial || '+221').trim() || '+221';\n const cleanDigits = (digits || '').replace(/\\D/g, '');\n return cleanDigits ? `${cleanDial} ${cleanDigits}` : cleanDial;\n }, []);\n const currentEmailNormalized = currentEmailLabel.trim().toLowerCase();\n const requestEmailNormalized = contactFlow?.kind === 'email' ? contactFlow.newEmail.trim().toLowerCase() : '';\n const requestPhoneDialCode = contactFlow?.kind === 'phone' ? (contactFlow.newCcphone.trim() || '+221') : '';\n const requestPhoneDigits = contactFlow?.kind === 'phone' ? contactFlow.newPhone.replace(/\\D/g, '') : '';\n const emailIsCurrent = Boolean(contactFlow?.kind === 'email' && requestEmailNormalized && requestEmailNormalized === currentEmailNormalized);\n const phoneIsCurrent = Boolean(\n contactFlow?.kind === 'phone'\n && requestPhoneDigits\n && requestPhoneDialCode === currentPhoneDialCode\n && requestPhoneDigits === currentPhoneDigits\n );\n const requestDuplicateMessage = emailIsCurrent\n ? 'Vous ne pouvez pas écrire votre actuelle adresse email. Veuillez en choisir une autre.'\n : phoneIsCurrent\n ? 'Vous ne pouvez pas écrire votre actuel numéro de téléphone. Veuillez en choisir un autre.'\n : '';\n\n const requestChange = useCallback(async () => {\n if (!contactFlow || contactFlow.loading) return;\n const sameEmail = contactFlow.kind === 'email'\n && contactFlow.newEmail.trim().toLowerCase() === currentEmailNormalized;\n const samePhone = contactFlow.kind === 'phone'\n && contactFlow.newCcphone.trim() === currentPhoneDialCode\n && contactFlow.newPhone.replace(/\\D/g, '') === currentPhoneDigits;\n if (sameEmail || samePhone) {\n updateFlow({\n loading: false,\n error: sameEmail\n ? 'Vous ne pouvez pas écrire votre actuelle adresse email. Veuillez en choisir une autre.'\n : 'Vous ne pouvez pas écrire votre actuel numéro de téléphone. Veuillez en choisir un autre.',\n });\n return;\n }\n updateFlow({ loading: true, error: '' });\n\n try {\n const method = contactSmsAllowed ? contactFlow.method : 'email';\n const response = contactFlow.kind === 'email'\n ? await profileChangeService.requestEmailChange(contactFlow.newEmail.trim(), method)\n : await profileChangeService.requestPhoneChange(contactFlow.newCcphone, contactFlow.newPhone.trim(), method);\n\n if (!response.success || !response.request_id) {\n throw new Error(response.message || 'Impossible de démarrer le changement');\n }\n\n updateFlow({ requestId: response.request_id, phase: 'verify-old', loading: false, error: '', resendAvailableAt: Date.now() + 120000 });\n } catch (error) {\n updateFlow({ loading: false, error: error instanceof Error ? error.message : 'Erreur inconnue' });\n }\n }, [contactFlow, updateFlow, contactSmsAllowed, currentEmailNormalized, currentPhoneDialCode, currentPhoneDigits]);\n\n const verifyOld = useCallback(async () => {\n if (!contactFlow?.requestId || contactFlow.loading) return;\n updateFlow({ loading: true, error: '' });\n\n try {\n const response = await profileChangeService.verifyOldOTP(contactFlow.requestId, contactFlow.oldOtp);\n if (!response.success) throw new Error(response.message || 'Code OTP incorrect');\n updateFlow({ phase: 'verify-new', loading: false, error: '', resendAvailableAt: Date.now() + 120000 });\n } catch (error) {\n updateFlow({ loading: false, error: error instanceof Error ? error.message : 'Code OTP incorrect' });\n }\n }, [contactFlow, updateFlow]);\n\n const verifyNew = useCallback(async () => {\n if (!contactFlow?.requestId || contactFlow.loading) return;\n updateFlow({ loading: true, error: '' });\n\n try {\n const response = await profileChangeService.verifyNewOTP(contactFlow.requestId, contactFlow.newOtp);\n if (!response.success) throw new Error(response.message || 'Code OTP incorrect');\n\n const updatedUser: NativeUser = {\n ...user,\n ...(contactFlow.kind === 'email'\n ? { email: contactFlow.newEmail.trim() }\n : { ccphone: contactFlow.newCcphone, phone: contactFlow.newPhone.trim() }),\n };\n\n if (response.user && typeof response.user === 'object') {\n Object.assign(updatedUser, response.user as Partial<NativeUser>);\n }\n\n setContactFlow(null);\n onComplete({\n name: updatedUser.name,\n image_url: updatedUser.image_url,\n ccphone: updatedUser.ccphone,\n phone: updatedUser.phone,\n email: updatedUser.email || undefined,\n user_infos: {\n reference: updatedUser.reference,\n name: updatedUser.name,\n email: updatedUser.email || null,\n ccphone: updatedUser.ccphone,\n phone: updatedUser.phone,\n address: updatedUser.address,\n town: updatedUser.town,\n country: updatedUser.country,\n image_url: updatedUser.image_url,\n auth_2fa: updatedUser.auth_2fa,\n alias_reference: updatedUser.alias_reference,\n iam_reference: updatedUser.iam_reference,\n },\n });\n markSuccess(contactFlow.kind === 'email' ? 'Email mis à jour avec succès.' : 'Téléphone mis à jour avec succès.');\n } catch (error) {\n updateFlow({ loading: false, error: error instanceof Error ? error.message : 'Code OTP incorrect' });\n }\n }, [contactFlow, onComplete, updateFlow, user, markSuccess]);\n\n const resendFlowOtp = useCallback(async () => {\n if (!contactFlow?.requestId || contactFlow.loading) return;\n updateFlow({ loading: true, error: '' });\n\n try {\n const response = await profileChangeService.resendOTP(contactFlow.requestId);\n if (!response.success) throw new Error(response.message || 'Impossible de renvoyer le code');\n updateFlow({ loading: false, error: '', resendAvailableAt: Date.now() + 120000 });\n } catch (error) {\n updateFlow({ loading: false, error: error instanceof Error ? error.message : 'Erreur inconnue' });\n }\n }, [contactFlow, updateFlow]);\n\n const switchFlowMethod = useCallback(async (method: 'email' | 'phone') => {\n if (!contactFlow) return;\n\n if (contactFlow.phase === 'request' || !contactFlow.requestId) {\n updateFlow({ method, error: '' });\n return;\n }\n\n if (contactFlow.loading) return;\n updateFlow({ loading: true, error: '', method });\n\n try {\n const response = await profileChangeService.switchMethod(contactFlow.requestId, method);\n if (!response.success) throw new Error(response.message || 'Impossible de changer la méthode');\n updateFlow({ loading: false, error: '' });\n } catch (error) {\n updateFlow({ loading: false, error: error instanceof Error ? error.message : 'Erreur inconnue' });\n }\n }, [contactFlow, updateFlow]);\n\n useEffect(() => {\n if (!contactFlow || contactFlow.kind !== 'phone') return;\n if (contactFlow.newCcphone.trim() !== '+221' && contactFlow.method !== 'email') {\n updateFlow({ method: 'email' });\n }\n }, [contactFlow, updateFlow]);\n\n const confirmBackToRequest = useCallback(() => {\n if (!contactFlow) return;\n updateFlow({\n phase: 'request',\n requestId: null,\n oldOtp: '',\n newOtp: '',\n error: '',\n loading: false,\n resendAvailableAt: null,\n });\n setConfirmAction(null);\n }, [contactFlow, updateFlow]);\n\n const confirmResendOtp = useCallback(async () => {\n if (!contactFlow) return;\n setConfirmAction(null);\n await resendFlowOtp();\n }, [contactFlow, resendFlowOtp]);\n\n const handleDialogOpenChange = useCallback((nextOpen: boolean) => {\n if (nextOpen) {\n onOpenChange(true);\n return;\n }\n\n if (lockModalClose) return;\n onOpenChange(false);\n }, [lockModalClose, onOpenChange]);\n const contactTargetLabel = contactFlow\n ? (contactFlow.kind === 'email'\n ? (contactFlow.newEmail.trim() || currentEmailLabel || 'votre adresse email')\n : formatPhoneDisplay(contactFlow.newCcphone, contactFlow.newPhone))\n : '';\n const currentReceiveLabel = (contactFlow ? (contactSmsAllowed ? contactFlow.method : 'email') : 'email') === 'phone'\n ? `SMS au ${contactFlow?.kind === 'phone' ? contactTargetLabel : formatPhoneDisplay(currentPhoneDialDisplay, currentPhoneNumberDisplay)}`\n : `email à ${contactFlow?.kind === 'email' ? contactTargetLabel : (currentEmailLabel || 'votre adresse email')}`;\n const resendCountdown = contactFlow?.resendAvailableAt\n ? Math.max(0, Math.ceil((contactFlow.resendAvailableAt - nowTick) / 1000))\n : 0;\n const canResendOtp = Boolean(contactFlow?.requestId) && !contactFlow?.loading && resendCountdown === 0;\n\n const ShieldIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke={C.accent} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\" />\n <path d=\"m9 12 2 2 4-4\" />\n </svg>\n );\n\n const renderSuccess = () => (\n <>\n <DialogHeader>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem', marginBottom: '0.25rem' }}>\n <ShieldIcon />\n <DialogTitle>Profil enregistré</DialogTitle>\n </div>\n <DialogDescription>\n {submitMessage || 'Vos informations ont été mises à jour.'}\n </DialogDescription>\n </DialogHeader>\n\n <DialogBody style={{ maxHeight: '52vh', overflowY: 'auto', paddingBottom: '0.25rem' }}>\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', gap: '0.75rem', padding: '1.5rem 1rem', textAlign: 'center' }}>\n <svg width=\"42\" height=\"42\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#16a34a\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"m9 12 2 2 4-4\" />\n </svg>\n <div style={{ fontSize: '1rem', fontWeight: 700, color: C.gray700 }}>\n Mise à jour réussie\n </div>\n <div style={{ fontSize: '0.875rem', color: C.gray500 }}>\n Vous pouvez fermer cette fenêtre maintenant.\n </div>\n </div>\n </DialogBody>\n <DialogFooter style={{ flexDirection: 'row', alignItems: 'center' }}>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={onDismiss}\n style={{ width: '100%', height: '2.6rem' }}\n >\n Fermer\n </Button>\n </DialogFooter>\n </>\n );\n\n const renderHydration = () => (\n <>\n <DialogHeader>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem', marginBottom: '0.25rem' }}>\n <ShieldIcon />\n <DialogTitle>{isEditMode ? 'Modifier votre profil' : 'Complétez votre profil'}</DialogTitle>\n </div>\n <DialogDescription>\n Récupération de vos infos depuis iam.ollaid.com en cours. Le SSO synchronise vos données avant l’affichage du formulaire.\n </DialogDescription>\n </DialogHeader>\n\n <DialogBody style={{ maxHeight: '52vh', overflowY: 'auto', paddingBottom: '0.25rem' }}>\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', gap: '0.9rem', padding: '2rem 1rem', textAlign: 'center' }}>\n <svg width=\"42\" height=\"42\" viewBox=\"0 0 24 24\" fill=\"none\" stroke={C.primary} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ animation: 'spin 1s linear infinite' }}>\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n <div style={{ fontSize: '1rem', fontWeight: 700, color: C.gray700 }}>\n Récupération de vos informations\n </div>\n <div style={{ fontSize: '0.875rem', color: C.gray500, lineHeight: 1.5 }}>\n Le modal sera rempli automatiquement dès que les données IAM seront prêtes.\n </div>\n </div>\n </DialogBody>\n\n <DialogFooter style={{ flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center' }}>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => setConfirmAction('cancel-load')}\n style={{ minWidth: '6.5rem', height: '2.35rem' }}\n >\n Fermer\n </Button>\n </DialogFooter>\n </>\n );\n\n const renderBase = () => (\n <>\n <DialogHeader>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem', marginBottom: '0.25rem' }}>\n <ShieldIcon />\n <DialogTitle>{isEditMode ? 'Modifier votre profil' : 'Complétez votre profil'}</DialogTitle>\n </div>\n <DialogDescription>\n {isEditMode\n ? 'Mettez à jour vos informations sans quitter le SaaS.'\n : 'Ajoutez les informations manquantes pour finaliser votre compte.'}\n </DialogDescription>\n </DialogHeader>\n\n <DialogBody style={{ maxHeight: '52vh', overflowY: 'auto', paddingBottom: '0.25rem' }}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.85rem', marginTop: '0.25rem', paddingRight: '0.25rem' }}>\n {submitError && (\n <div style={{ padding: '0.75rem', borderRadius: '0.5rem', backgroundColor: '#fef2f2', border: '1px solid #fecaca', color: '#b91c1c', fontSize: '0.875rem' }}>\n {submitError}\n </div>\n )}\n\n {submitState === 'submitting' && (\n <div style={{ padding: '0.75rem', borderRadius: '0.5rem', backgroundColor: '#eff6ff', border: '1px solid #bfdbfe', color: '#1d4ed8', fontSize: '0.875rem', display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ animation: 'spin 1s linear infinite' }}>\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n Enregistrement en cours...\n </div>\n )}\n\n <div style={{ display: 'grid', gridTemplateColumns: '4.25rem 1fr', gap: '0.75rem', alignItems: 'center' }}>\n <div style={{ position: 'relative' }}>\n <button\n type=\"button\"\n onClick={openAvatarPicker}\n disabled={avatarUploading}\n style={{\n width: '4.25rem',\n height: '4.25rem',\n borderRadius: '50%',\n border: `1px solid ${C.gray200}`,\n backgroundColor: C.gray100,\n overflow: 'hidden',\n position: 'relative',\n padding: 0,\n cursor: avatarUploading ? 'not-allowed' : 'pointer',\n }}\n >\n {photoPreview || user.image_url ? (\n <img src={photoPreview || user.image_url} alt=\"Photo de profil\" style={{ width: '100%', height: '100%', objectFit: 'cover' }} />\n ) : (\n <div style={{ width: '100%', height: '100%', display: 'flex', alignItems: 'center', justifyContent: 'center', color: C.gray500 }}>\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"8\" r=\"4\" />\n <path d=\"M5.5 21a8.38 8.38 0 0 1 13 0\" />\n </svg>\n </div>\n )}\n <div style={{\n position: 'absolute', inset: 0, display: 'flex', alignItems: 'center', justifyContent: 'center',\n background: avatarUploading ? 'rgba(255,255,255,0.55)' : 'rgba(0,0,0,0.08)',\n }}>\n {avatarUploading ? (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke={C.primary} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ animation: 'spin 1s linear infinite' }}>\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n ) : (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke={C.white} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M15 8h.01\" />\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" />\n <path d=\"m21 15-5-5L5 21\" />\n </svg>\n )}\n </div>\n </button>\n <input ref={avatarFileInputRef} type=\"file\" accept=\"image/*\" onChange={handleAvatarSelected} style={{ display: 'none' }} />\n </div>\n\n <div>\n <Label style={{ display: 'block', marginBottom: '0.35rem', color: C.gray700, fontWeight: 500, fontSize: '0.875rem' }}>\n Nom complet\n </Label>\n <input\n type=\"text\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"Jean Dupont\"\n style={{\n width: '100%',\n height: '2.25rem',\n padding: '0 0.75rem',\n border: `1px solid ${C.gray200}`,\n borderRadius: '0.375rem',\n fontSize: '0.875rem',\n color: C.gray700,\n backgroundColor: C.white,\n outline: 'none',\n }}\n />\n </div>\n </div>\n\n {isEditMode && hasCurrentPhone && !contactFlow && (\n <div>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: '0.35rem' }}>\n <Label style={{ color: C.gray700, fontWeight: 500, fontSize: '0.875rem' }}>\n Numéro de téléphone\n </Label>\n <button type=\"button\" onClick={() => openContactFlow('phone')} style={{ border: 'none', background: 'transparent', padding: 0, color: C.accent, fontWeight: 700, fontSize: '0.8rem', cursor: 'pointer' }}>\n Changer\n </button>\n </div>\n <div style={{ display: 'grid', gridTemplateColumns: '6rem 1fr', gap: '0.5rem' }}>\n <input\n type=\"text\"\n value={currentPhoneDialDisplay}\n readOnly\n style={{\n width: '100%',\n height: '2.25rem',\n padding: '0 0.65rem',\n border: `1px solid ${C.gray200}`,\n borderRadius: '0.375rem',\n fontSize: '0.875rem',\n color: C.gray700,\n backgroundColor: '#f9fafb',\n outline: 'none',\n }}\n />\n <input\n type=\"text\"\n value={currentPhoneNumberDisplay}\n readOnly\n style={{\n width: '100%',\n height: '2.25rem',\n padding: '0 0.75rem',\n border: `1px solid ${C.gray200}`,\n borderRadius: '0.375rem',\n fontSize: '0.875rem',\n color: C.gray700,\n backgroundColor: '#f9fafb',\n outline: 'none',\n }}\n />\n </div>\n </div>\n )}\n\n {isEditMode && hasCurrentEmail && !contactFlow && (\n <div>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: '0.35rem' }}>\n <Label style={{ color: C.gray700, fontWeight: 500, fontSize: '0.875rem' }}>\n Adresse email\n </Label>\n <button type=\"button\" onClick={() => openContactFlow('email')} style={{ border: 'none', background: 'transparent', padding: 0, color: C.accent, fontWeight: 700, fontSize: '0.8rem', cursor: 'pointer' }}>\n Changer\n </button>\n </div>\n <input\n type=\"email\"\n value={currentEmailLabel}\n readOnly\n style={{\n width: '100%',\n height: '2.25rem',\n padding: '0 0.75rem',\n border: `1px solid ${C.gray200}`,\n borderRadius: '0.375rem',\n fontSize: '0.875rem',\n color: C.gray700,\n backgroundColor: '#f9fafb',\n outline: 'none',\n }}\n />\n </div>\n )}\n\n {(!isEditMode || !hasCurrentPhone) && (\n <div>\n <Label style={{ display: 'block', marginBottom: '0.35rem', color: C.gray700, fontWeight: 500, fontSize: '0.875rem' }}>\n Numéro de téléphone\n </Label>\n <PhoneInput value={phone} onChange={setPhone} ccphone={ccphone} onCcphoneChange={setCcphone} />\n </div>\n )}\n\n {(!isEditMode || !hasCurrentEmail) && (\n <div>\n <Label style={{ display: 'block', marginBottom: '0.35rem', color: C.gray700, fontWeight: 500, fontSize: '0.875rem' }}>\n Adresse email\n </Label>\n <input\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder=\"email@exemple.com\"\n style={{\n width: '100%',\n height: '2.25rem',\n padding: '0 0.75rem',\n border: `1px solid ${C.gray200}`,\n borderRadius: '0.375rem',\n fontSize: '0.875rem',\n color: C.gray700,\n backgroundColor: C.white,\n outline: 'none',\n }}\n />\n </div>\n )}\n\n <div style={{ display: 'grid', gap: '0.85rem' }}>\n <div>\n <Label style={{ display: 'block', marginBottom: '0.35rem', color: C.gray700, fontWeight: 500, fontSize: '0.875rem' }}>\n Adresse\n </Label>\n <input\n type=\"text\"\n value={address}\n onChange={(e) => setAddress(e.target.value)}\n placeholder=\"Rue, quartier, numéro\"\n style={{\n width: '100%',\n height: '2.25rem',\n padding: '0 0.75rem',\n border: `1px solid ${C.gray200}`,\n borderRadius: '0.375rem',\n fontSize: '0.875rem',\n color: C.gray700,\n backgroundColor: C.white,\n outline: 'none',\n }}\n />\n </div>\n\n <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '0.75rem' }}>\n <div>\n <Label style={{ display: 'block', marginBottom: '0.35rem', color: C.gray700, fontWeight: 500, fontSize: '0.875rem' }}>\n Ville <span style={{ color: '#dc2626' }}>*</span>\n </Label>\n <input\n type=\"text\"\n value={town}\n onChange={(e) => setTown(e.target.value)}\n required\n placeholder=\"Dakar\"\n style={{\n width: '100%',\n height: '2.25rem',\n padding: '0 0.75rem',\n border: `1px solid ${C.gray200}`,\n borderRadius: '0.375rem',\n fontSize: '0.875rem',\n color: C.gray700,\n backgroundColor: C.white,\n outline: 'none',\n }}\n />\n </div>\n <div>\n <Label style={{ display: 'block', marginBottom: '0.35rem', color: C.gray700, fontWeight: 500, fontSize: '0.875rem' }}>\n Pays\n </Label>\n <select\n value={country}\n onChange={(e) => setCountry(e.target.value)}\n style={{\n width: '100%',\n height: '2.25rem',\n padding: '0 0.6rem',\n border: `1px solid ${C.gray200}`,\n borderRadius: '0.375rem',\n fontSize: '0.875rem',\n color: C.gray700,\n backgroundColor: C.white,\n outline: 'none',\n }}\n >\n {COUNTRIES_SORTED_BY_CODE.map((c) => (\n <option key={c.code} value={c.code}>{c.flag} {c.name}</option>\n ))}\n </select>\n </div>\n </div>\n </div>\n\n </div>\n </DialogBody>\n\n <DialogFooter style={{ flexDirection: 'row', justifyContent: submitState === 'success' ? 'center' : 'space-between', alignItems: 'center' }}>\n {submitState === 'success' ? (\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={onDismiss}\n style={{ width: '100%', height: '2.6rem' }}\n >\n Fermer\n </Button>\n ) : (\n <>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n disabled={submitting}\n style={{ minWidth: '6.5rem', height: '2.35rem' }}\n >\n Fermer\n </Button>\n <Button\n type=\"button\"\n onClick={isEditMode ? handleSubmit : onSkip}\n disabled={isEditMode ? (!canSubmit || submitting) : submitting}\n style={{ minWidth: '7.25rem', height: '2.35rem', opacity: (isEditMode ? (canSubmit && !submitting) : !submitting) ? 1 : 0.5 }}\n >\n {submitting ? (\n <span style={{ display: 'inline-flex', alignItems: 'center', gap: '0.45rem' }}>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ animation: 'spin 1s linear infinite' }}>\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n Enregistrement...\n </span>\n ) : (isEditMode ? 'Enregistrer' : 'Plus tard')}\n </Button>\n </>\n )}\n </DialogFooter>\n <AvatarCropModal\n open={avatarPickerOpen}\n imageSrc={pendingAvatarSrc}\n onOpenChange={setAvatarPickerOpen}\n onCancel={() => {\n setAvatarPickerOpen(false);\n setPendingAvatarSrc(null);\n }}\n onConfirm={handleAvatarConfirm}\n />\n </>\n );\n\n const renderContactFlow = () => {\n if (!contactFlow) return null;\n const isEmail = contactFlow.kind === 'email';\n const targetLabel = isEmail\n ? (contactFlow.newEmail || 'la nouvelle adresse')\n : `${contactFlow.newCcphone} ${contactFlow.newPhone}`.trim();\n const sentToLabel = currentReceiveLabel;\n\n return (\n <>\n <DialogHeader>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem', marginBottom: '0.25rem' }}>\n <ShieldIcon />\n <DialogTitle>{isEmail ? 'Changer l’email' : 'Changer le téléphone'}</DialogTitle>\n </div>\n <DialogDescription>\n {contactFlow.phase === 'request'\n ? `Veuillez renseigner le nouveau ${isEmail ? 'email' : 'numéro de téléphone'} pour lancer la vérification.`\n : contactFlow.phase === 'verify-old'\n ? `Le code OTP a été envoyé sur : ${sentToLabel}.`\n : `Le second code OTP a été envoyé sur : ${sentToLabel}.`\n }\n </DialogDescription>\n </DialogHeader>\n\n <DialogBody style={{ maxHeight: '52vh', overflowY: 'auto', paddingBottom: '0.25rem' }}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem', marginTop: '0.75rem' }}>\n {contactFlow.error && (\n <div style={{ padding: '0.75rem', borderRadius: '0.5rem', backgroundColor: '#fef2f2', color: '#b91c1c', fontSize: '0.875rem' }}>\n {contactFlow.error}\n </div>\n )}\n\n {contactFlow.phase === 'request' && (\n <>\n {isEmail ? (\n <div>\n <div style={{ marginBottom: '0.5rem', padding: '0.7rem 0.75rem', borderRadius: '0.5rem', backgroundColor: '#f9fafb', border: '1px solid #e5e7eb', fontSize: '0.85rem', color: C.gray700, lineHeight: 1.45 }}>\n <div><strong>Email actuel :</strong> {currentEmailLabel || 'non renseigné'}</div>\n <div style={{ marginTop: '0.2rem', color: C.gray500 }}>\n Veuillez renseigner le nouveau email pour lancer la vérification.\n </div>\n </div>\n <Label style={{ display: 'block', marginBottom: '0.5rem', color: C.gray700, fontWeight: 500 }}>\n Nouvel email\n </Label>\n <input\n type=\"email\"\n value={contactFlow.newEmail}\n onChange={(e) => updateFlow({ newEmail: e.target.value })}\n placeholder=\"nouvel@email.com\"\n style={{\n width: '100%',\n height: '2.5rem',\n padding: '0 0.75rem',\n border: `1px solid ${C.gray200}`,\n borderRadius: '0.375rem',\n fontSize: '0.875rem',\n color: C.gray700,\n backgroundColor: C.white,\n outline: 'none',\n }}\n />\n {emailIsCurrent && (\n <span style={{ display: 'block', marginTop: '0.35rem', color: '#b91c1c', fontSize: '0.8rem', lineHeight: 1.35 }}>\n {requestDuplicateMessage}\n </span>\n )}\n </div>\n ) : (\n <div>\n <div style={{ marginBottom: '0.5rem', padding: '0.7rem 0.75rem', borderRadius: '0.5rem', backgroundColor: '#f9fafb', border: '1px solid #e5e7eb', fontSize: '0.85rem', color: C.gray700, lineHeight: 1.45 }}>\n <div><strong>Numéro actuel :</strong> {formatPhoneDisplay(currentPhoneDialDisplay, currentPhoneNumberDisplay) || 'non renseigné'}</div>\n <div style={{ marginTop: '0.2rem', color: C.gray500 }}>\n Veuillez renseigner le nouveau numéro de téléphone pour lancer la vérification.\n </div>\n </div>\n <Label style={{ display: 'block', marginBottom: '0.5rem', color: C.gray700, fontWeight: 500 }}>\n Nouveau téléphone\n </Label>\n <PhoneInput\n value={contactFlow.newPhone}\n onChange={(value) => updateFlow({ newPhone: value })}\n ccphone={contactFlow.newCcphone}\n onCcphoneChange={(value) => updateFlow({ newCcphone: value, method: value.trim() === '+221' ? contactFlow.method : 'email' })}\n />\n {phoneIsCurrent && (\n <span style={{ display: 'block', marginTop: '0.35rem', color: '#b91c1c', fontSize: '0.8rem', lineHeight: 1.35 }}>\n {requestDuplicateMessage}\n </span>\n )}\n </div>\n )}\n\n {contactSmsAllowed ? (\n <div style={{ display: 'flex', gap: '0.5rem', flexWrap: 'wrap' }}>\n <Button\n type=\"button\"\n variant={contactFlow.method === 'email' ? 'default' : 'outline'}\n onClick={() => switchFlowMethod('email')}\n style={{ flex: 1 }}\n >\n Code par email\n </Button>\n <Button\n type=\"button\"\n variant={contactFlow.method === 'phone' ? 'default' : 'outline'}\n onClick={() => switchFlowMethod('phone')}\n style={{ flex: 1 }}\n >\n Code par téléphone\n </Button>\n </div>\n ) : (\n <div style={{ padding: '0.75rem', borderRadius: '0.5rem', backgroundColor: '#f9fafb', border: '1px solid #e5e7eb', color: C.gray700, fontSize: '0.875rem', lineHeight: 1.45 }}>\n Le SMS est disponible uniquement pour les numéros sénégalais (+221). Le code sera envoyé par email.\n </div>\n )}\n <span style={{ color: C.gray500, fontSize: '0.8rem', lineHeight: 1.35 }}>\n Vous allez recevoir le code par {currentReceiveLabel}.\n </span>\n </>\n )}\n\n {contactFlow.phase === 'verify-old' && (\n <>\n <div style={{ padding: '0.75rem', borderRadius: '0.5rem', backgroundColor: '#f9fafb', border: '1px solid #e5e7eb', fontSize: '0.875rem', color: C.gray700 }}>\n <div><strong>{isEmail ? 'Email actuel' : 'Numéro de téléphone actuel'} :</strong> {isEmail ? currentEmailLabel : formatPhoneDisplay(currentPhoneDialDisplay, currentPhoneNumberDisplay)}</div>\n <div style={{ marginTop: '0.25rem' }}><strong>Nouveau :</strong> {targetLabel}</div>\n <div style={{ marginTop: '0.25rem' }}><strong>Envoi :</strong> {sentToLabel}</div>\n </div>\n\n <div>\n <Label style={{ display: 'block', marginBottom: '0.5rem', color: C.gray700, fontWeight: 500 }}>\n Code reçu sur l'ancien contact\n </Label>\n <OTPInput\n value={contactFlow.oldOtp}\n onChange={(value) => updateFlow({ oldOtp: value })}\n disabled={contactFlow.loading}\n />\n </div>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: '0.75rem', flexWrap: 'wrap' }}>\n <div style={{ fontSize: '0.82rem', color: C.gray500 }}>\n {canResendOtp\n ? 'Vous pouvez renvoyer un nouveau code.'\n : `Renvoyer un code dans ${resendCountdown}s`}\n </div>\n {canResendOtp && (\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => setConfirmAction('resend')}\n disabled={contactFlow.loading}\n style={{ height: '2.35rem' }}\n >\n Renvoyer le code\n </Button>\n )}\n </div>\n </>\n )}\n\n {contactFlow.phase === 'verify-new' && (\n <>\n <div style={{ padding: '0.75rem', borderRadius: '0.5rem', backgroundColor: '#f9fafb', border: '1px solid #e5e7eb', fontSize: '0.875rem', color: C.gray700 }}>\n <div><strong>{isEmail ? 'Email actuel' : 'Numéro de téléphone actuel'} :</strong> {isEmail ? currentEmailLabel : formatPhoneDisplay(currentPhoneDialDisplay, currentPhoneNumberDisplay)}</div>\n <div style={{ marginTop: '0.25rem' }}><strong>Nouveau :</strong> {targetLabel}</div>\n <div style={{ marginTop: '0.25rem' }}><strong>Envoi :</strong> {sentToLabel}</div>\n </div>\n\n <div>\n <Label style={{ display: 'block', marginBottom: '0.5rem', color: C.gray700, fontWeight: 500 }}>\n Code reçu sur le nouveau contact\n </Label>\n <OTPInput\n value={contactFlow.newOtp}\n onChange={(value) => updateFlow({ newOtp: value })}\n disabled={contactFlow.loading}\n />\n </div>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: '0.75rem', flexWrap: 'wrap' }}>\n <div style={{ fontSize: '0.82rem', color: C.gray500 }}>\n {canResendOtp\n ? 'Vous pouvez renvoyer un nouveau code.'\n : `Renvoyer un code dans ${resendCountdown}s`}\n </div>\n {canResendOtp && (\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => setConfirmAction('resend')}\n disabled={contactFlow.loading}\n style={{ height: '2.35rem' }}\n >\n Renvoyer le code\n </Button>\n )}\n </div>\n </>\n )}\n </div>\n </DialogBody>\n <DialogFooter style={{ flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center' }}>\n {contactFlow.phase === 'request' ? (\n <>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={closeContactFlow}\n disabled={contactFlow.loading}\n style={{ minWidth: '6.5rem', height: '2.35rem' }}\n >\n Fermer\n </Button>\n <Button\n type=\"button\"\n onClick={requestChange}\n disabled={\n contactFlow.loading ||\n (isEmail ? !contactFlow.newEmail.trim() : !contactFlow.newPhone.trim()) ||\n emailIsCurrent ||\n phoneIsCurrent\n }\n style={{ minWidth: '7.25rem', height: '2.35rem', opacity: contactFlow.loading ? 0.5 : 1 }}\n >\n {contactFlow.loading ? (\n <span style={{ display: 'inline-flex', alignItems: 'center', gap: '0.45rem' }}>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ animation: 'spin 1s linear infinite' }}>\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n Envoi...\n </span>\n ) : 'Envoyer'}\n </Button>\n </>\n ) : (\n <>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => setConfirmAction('back')}\n disabled={contactFlow.loading}\n style={{ minWidth: '6.5rem', height: '2.35rem' }}\n >\n Retour\n </Button>\n <Button\n type=\"button\"\n onClick={contactFlow.phase === 'verify-old' ? verifyOld : verifyNew}\n disabled={\n contactFlow.loading ||\n (contactFlow.phase === 'verify-old' && contactFlow.oldOtp.length !== 6) ||\n (contactFlow.phase === 'verify-new' && contactFlow.newOtp.length !== 6)\n }\n style={{ minWidth: '7.25rem', height: '2.35rem', opacity: contactFlow.loading ? 0.5 : 1 }}\n >\n {contactFlow.loading ? (\n <span style={{ display: 'inline-flex', alignItems: 'center', gap: '0.45rem' }}>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ animation: 'spin 1s linear infinite' }}>\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n Vérification...\n </span>\n ) : (contactFlow.phase === 'verify-old' ? 'Vérifier' : 'Confirmer')}\n </Button>\n </>\n )}\n </DialogFooter>\n </>\n );\n };\n\n const renderConfirmDialog = () => {\n if (!confirmAction) return null;\n\n const config = confirmAction === 'back'\n ? {\n title: 'Retourner à l’étape précédente ?',\n description: 'La vérification en cours sera interrompue. Vous pourrez reprendre le changement depuis le début.',\n confirmLabel: 'Retourner',\n }\n : confirmAction === 'resend'\n ? {\n title: 'Renvoyer un nouveau code OTP ?',\n description: `Un nouveau code sera envoyé vers ${currentReceiveLabel}.`,\n confirmLabel: 'Renvoyer',\n }\n : {\n title: 'Annuler la récupération ?',\n description: 'Les informations IAM ne seront pas récupérées maintenant. Vous pourrez relancer l’ouverture plus tard.',\n confirmLabel: 'Annuler',\n };\n\n const confirm = async () => {\n if (confirmAction === 'back') {\n confirmBackToRequest();\n } else if (confirmAction === 'resend') {\n await confirmResendOtp();\n } else {\n setConfirmAction(null);\n onDismiss();\n }\n };\n\n return (\n <Dialog open={Boolean(confirmAction)} onOpenChange={(open) => { if (!open) setConfirmAction(null); }}>\n <DialogContent hideCloseButton={false} style={{ maxWidth: '22rem', padding: '0.9rem 1rem', borderRadius: '0.7rem' }}>\n <DialogHeader>\n <div style={{ fontSize: '1rem', fontWeight: 600, color: '#111827' }}>{config.title}</div>\n <DialogDescription>{config.description}</DialogDescription>\n </DialogHeader>\n <DialogFooter style={{ flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center' }}>\n <Button type=\"button\" variant=\"outline\" onClick={() => setConfirmAction(null)} style={{ minWidth: '6rem', height: '2.25rem' }}>\n Annuler\n </Button>\n <Button type=\"button\" onClick={confirm} style={{ minWidth: '6.5rem', height: '2.25rem' }}>\n {confirmAction === 'resend' && contactFlow?.loading ? 'Envoi...' : config.confirmLabel}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n };\n\n return (\n <Dialog open={open} onOpenChange={handleDialogOpenChange}>\n <DialogContent\n hideCloseButton={lockModalClose}\n style={{ maxWidth: '26rem', padding: '0.75rem 0.8rem', borderRadius: '0.65rem', maxHeight: '88vh' }}\n >\n {profileHydrating && submitState === 'idle' && !contactFlow ? renderHydration() : contactFlow ? renderContactFlow() : submitState === 'success' ? renderSuccess() : renderBase()}\n </DialogContent>\n {renderConfirmDialog()}\n </Dialog>\n );\n}\n\nexport default OnboardingModal;\n","/**\n * DebugPanel — Panneau de debug flottant pour @ollaid/native-sso\n * Affiche l'historique des appels API en temps réel (style terminal)\n * N'apparaît que quand debug=true\n * @version 2.7.0\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport { subscribeToLogs, clearApiLogs, exportLogsAsText, type ApiCallLog } from '../services/debugLogger';\n\nexport type DebugOnboardingPreset = 'current' | 'photo' | 'phone' | 'email' | 'all';\n\ninterface DebugPanelProps {\n saasApiUrl: string;\n iamApiUrl: string;\n onOpenLogin?: () => void;\n onOpenSignup?: () => void;\n onOpenOnboarding?: (preset: DebugOnboardingPreset) => void;\n onResetProfilePrompt?: () => void;\n}\n\nexport function DebugPanel({ saasApiUrl, iamApiUrl, onOpenLogin, onOpenSignup, onOpenOnboarding, onResetProfilePrompt }: DebugPanelProps) {\n const [logs, setLogs] = useState<ApiCallLog[]>([]);\n const [expanded, setExpanded] = useState(true);\n const [selectedLog, setSelectedLog] = useState<string | null>(null);\n\n useEffect(() => {\n return subscribeToLogs(setLogs);\n }, []);\n\n const handleCopy = useCallback(() => {\n const text = exportLogsAsText();\n navigator.clipboard?.writeText(text).catch(() => {});\n }, []);\n\n const handleClear = useCallback(() => {\n clearApiLogs();\n setSelectedLog(null);\n }, []);\n\n const statusColor = (status: number | null) => {\n if (status === null) return '#f59e0b';\n if (status >= 200 && status < 300) return '#22c55e';\n return '#ef4444';\n };\n\n const statusEmoji = (status: number | null) => {\n if (status === null) return '⏳';\n if (status >= 200 && status < 300) return '✅';\n return '❌';\n };\n\n const selected = selectedLog ? logs.find(l => l.id === selectedLog) : null;\n\n return (\n <div style={{\n position: 'fixed',\n bottom: 0,\n left: 0,\n right: 0,\n zIndex: 99999,\n fontFamily: 'monospace',\n fontSize: '12px',\n }}>\n {/* Header bar */}\n <div\n onClick={() => setExpanded(!expanded)}\n style={{\n background: '#1a1a2e',\n color: '#e2e8f0',\n padding: '6px 12px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n cursor: 'pointer',\n borderTop: '2px solid #6366f1',\n }}\n >\n <span>🔐 Debug SSO — {logs.length} appel{logs.length > 1 ? 's' : ''}</span>\n <div style={{ display: 'flex', gap: '8px', alignItems: 'center' }}>\n {expanded && (\n <>\n <button onClick={(e) => { e.stopPropagation(); handleCopy(); }}\n style={{ background: '#334155', color: '#e2e8f0', border: 'none', borderRadius: '4px', padding: '2px 8px', cursor: 'pointer', fontSize: '11px' }}>\n 📋 Copier\n </button>\n <button onClick={(e) => { e.stopPropagation(); handleClear(); }}\n style={{ background: '#334155', color: '#e2e8f0', border: 'none', borderRadius: '4px', padding: '2px 8px', cursor: 'pointer', fontSize: '11px' }}>\n 🗑️ Effacer\n </button>\n </>\n )}\n <span>{expanded ? '▼' : '▲'}</span>\n </div>\n </div>\n\n {/* Body */}\n {expanded && (\n <div style={{\n background: '#0f0f23',\n color: '#e2e8f0',\n maxHeight: '300px',\n overflowY: 'auto',\n }}>\n {/* Config bar */}\n <div style={{ padding: '4px 12px', background: '#1e1e3f', fontSize: '10px', color: '#94a3b8', display: 'flex', gap: '16px', alignItems: 'center', flexWrap: 'wrap' }}>\n <span>SaaS: <span style={{ color: '#6366f1' }}>{saasApiUrl}</span></span>\n <span>IAM: <span style={{ color: '#6366f1' }}>{iamApiUrl}</span></span>\n <div style={{ marginLeft: 'auto', display: 'flex', gap: '6px', flexWrap: 'wrap' }}>\n <button\n onClick={(e) => { e.stopPropagation(); onOpenLogin?.(); }}\n disabled={!onOpenLogin}\n style={{ background: '#334155', color: '#e2e8f0', border: 'none', borderRadius: '4px', padding: '2px 8px', cursor: onOpenLogin ? 'pointer' : 'not-allowed', fontSize: '11px', opacity: onOpenLogin ? 1 : 0.5 }}\n >\n Connexion\n </button>\n <button\n onClick={(e) => { e.stopPropagation(); onOpenSignup?.(); }}\n disabled={!onOpenSignup}\n style={{ background: '#334155', color: '#e2e8f0', border: 'none', borderRadius: '4px', padding: '2px 8px', cursor: onOpenSignup ? 'pointer' : 'not-allowed', fontSize: '11px', opacity: onOpenSignup ? 1 : 0.5 }}\n >\n Inscription\n </button>\n <button\n onClick={(e) => { e.stopPropagation(); onOpenOnboarding?.('current'); }}\n disabled={!onOpenOnboarding}\n style={{ background: '#334155', color: '#e2e8f0', border: 'none', borderRadius: '4px', padding: '2px 8px', cursor: onOpenOnboarding ? 'pointer' : 'not-allowed', fontSize: '11px', opacity: onOpenOnboarding ? 1 : 0.5 }}\n >\n Infos profile\n </button>\n <button\n onClick={(e) => { e.stopPropagation(); onResetProfilePrompt?.(); }}\n disabled={!onResetProfilePrompt}\n style={{ background: '#334155', color: '#e2e8f0', border: 'none', borderRadius: '4px', padding: '2px 8px', cursor: onResetProfilePrompt ? 'pointer' : 'not-allowed', fontSize: '11px', opacity: onResetProfilePrompt ? 1 : 0.5 }}\n >\n Reset profil\n </button>\n </div>\n </div>\n\n {logs.length === 0 ? (\n <div style={{ padding: '20px', textAlign: 'center', color: '#64748b' }}>\n Aucun appel API. Tentez une connexion pour voir les logs.\n </div>\n ) : (\n <div>\n {logs.map(log => (\n <div key={log.id}>\n <div\n onClick={() => setSelectedLog(selectedLog === log.id ? null : log.id)}\n style={{\n padding: '4px 12px',\n borderBottom: '1px solid #1e293b',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n background: selectedLog === log.id ? '#1e293b' : 'transparent',\n }}\n >\n <span>{statusEmoji(log.responseStatus)}</span>\n <span style={{\n background: log.method === 'GET' ? '#22c55e' : '#3b82f6',\n color: '#fff',\n padding: '0 4px',\n borderRadius: '2px',\n fontSize: '10px',\n fontWeight: 'bold',\n }}>{log.method}</span>\n <span style={{ flex: 1, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {log.endpoint}\n </span>\n <span style={{ color: statusColor(log.responseStatus), minWidth: '30px' }}>\n {log.responseStatus ?? '...'}\n </span>\n <span style={{ color: '#64748b', minWidth: '50px', textAlign: 'right' }}>\n {log.duration ? `${log.duration}ms` : '...'}\n </span>\n </div>\n\n {/* Detail view */}\n {selectedLog === log.id && selected && (\n <div style={{ padding: '8px 12px 8px 32px', background: '#111827', borderBottom: '1px solid #1e293b' }}>\n <div style={{ color: '#94a3b8', marginBottom: '4px' }}>\n ⏰ {new Date(log.timestamp).toLocaleTimeString()}\n </div>\n {log.requestBody ? (\n <div style={{ marginBottom: '4px' }}>\n <div style={{ color: '#6366f1', fontSize: '10px' }}>REQUEST:</div>\n <pre style={{ color: '#cbd5e1', whiteSpace: 'pre-wrap', wordBreak: 'break-all', margin: 0, maxHeight: '80px', overflow: 'auto' }}>\n {JSON.stringify(log.requestBody, null, 2)}\n </pre>\n </div>\n ) : null}\n {log.responseBody ? (\n <div>\n <div style={{ color: '#6366f1', fontSize: '10px' }}>RESPONSE:</div>\n <pre style={{ color: '#cbd5e1', whiteSpace: 'pre-wrap', wordBreak: 'break-all', margin: 0, maxHeight: '120px', overflow: 'auto' }}>\n {JSON.stringify(log.responseBody, null, 2)}\n </pre>\n </div>\n ) : null}\n {log.error && (\n <div style={{ color: '#ef4444', marginTop: '4px' }}>⚠️ {log.error}</div>\n )}\n </div>\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport default DebugPanel;\n","export default \"data:image/png;base64,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\"","/**\n * NativeSSOPage — Page autonome complète pour @ollaid/native-sso\n * Design aligné sur le parcours Native SSO (fond primary, card blanche, ShieldCheck branding)\n * \n * @version 2.7.0\n */\n\nimport { useState, useCallback, useEffect, useRef } from 'react';\nimport { LoginModal } from './LoginModal';\nimport { SignupModal } from './SignupModal';\nimport { OnboardingModal } from './OnboardingModal';\nimport AppsLogoSlider from './AppsLogoSlider';\nimport { DebugPanel, type DebugOnboardingPreset } from './DebugPanel';\nimport ollaidLogo from '../logo/ollaid.png';\nimport { Button } from './ui';\nimport {\n getNativeStorage,\n setNativeStorage,\n STORAGE_KEYS,\n logout,\n getProfilePromptState,\n markProfilePromptComplete,\n setProfilePromptState,\n snoozeProfilePrompt,\n} from '../services/api';\nimport { nativeAuthService } from '../services/nativeAuth';\nimport { profileService } from '../services/profile';\nimport { useNativeAuth } from '../hooks/useNativeAuth';\nimport type { UserInfos, NativeUser } from '../types/native';\nimport type { NativeStorageAdapter } from '../services/api';\n\nexport interface NativeSSOPageProps {\n saasApiUrl: string;\n iamApiUrl: string;\n onLoginSuccess?: (token: string, user: UserInfos) => void;\n onLogout?: () => void;\n onOnboardingComplete?: (data: {\n name?: string;\n image_url?: string;\n ccphone?: string;\n phone?: string;\n email?: string;\n address?: string;\n town?: string;\n country?: string;\n user_infos?: UserInfos;\n }) => void;\n accountType?: 'user' | 'client';\n configPrefix?: string;\n title?: string;\n description?: string;\n logoUrl?: string;\n hideFooter?: boolean;\n redirectAfterLogin?: string;\n redirectAfterLogout?: string;\n storage?: NativeStorageAdapter;\n}\n\ntype ModalState = 'none' | 'login' | 'signup';\n\nconst PROFILE_PROMPT_DELAY_MS = 5 * 60 * 1000;\nconst PROFILE_PROMPT_SNOOZE_MS = 8 * 60 * 60 * 1000;\nconst PROFILE_SYNC_INTERVAL_MS = 30 * 60 * 1000;\nconst PROFILE_FETCH_RETRY_DELAY_MS = 1200;\nconst PROFILE_FETCH_MAX_ATTEMPTS = 3;\n\nconst COLORS = {\n primary: '#002147',\n primaryForeground: '#ffffff',\n accent: '#e8430a',\n card: '#ffffff',\n cardForeground: '#1a2332',\n muted: '#6b7280',\n border: '#e5e7eb',\n shadow: '0 10px 25px -5px rgba(0,0,0,0.2)',\n} as const;\n\nconst LIGHT_VARS: Record<string, string> = {\n \"--background\": \"40 20% 96%\",\n \"--foreground\": \"220 15% 15%\",\n \"--card\": \"0 0% 100%\",\n \"--card-foreground\": \"220 15% 15%\",\n \"--popover\": \"0 0% 100%\",\n \"--popover-foreground\": \"220 15% 15%\",\n \"--primary\": \"209 100% 13%\",\n \"--primary-foreground\": \"0 0% 100%\",\n \"--secondary\": \"40 15% 92%\",\n \"--secondary-foreground\": \"220 15% 25%\",\n \"--muted\": \"40 10% 90%\",\n \"--muted-foreground\": \"220 10% 50%\",\n \"--accent\": \"16 99% 52%\",\n \"--accent-foreground\": \"0 0% 100%\",\n \"--destructive\": \"0 84.2% 60.2%\",\n \"--destructive-foreground\": \"210 40% 98%\",\n \"--border\": \"40 15% 88%\",\n \"--input\": \"40 15% 88%\",\n \"--ring\": \"209 100% 13%\",\n};\n\nfunction safeRedirect(target?: string): boolean {\n if (!target) return false;\n\n if (target.startsWith('/')) {\n window.location.href = target;\n return true;\n }\n\n try {\n const url = new URL(target, window.location.origin);\n if (url.origin === window.location.origin) {\n window.location.href = url.toString();\n return true;\n }\n } catch {\n // ignore invalid URL\n }\n\n return false;\n}\n\n// Shield check SVG inline\nconst ShieldCheckIcon = ({ size = 24, color = COLORS.accent }: { size?: number; color?: string }) => (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke={color} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\" />\n <path d=\"m9 12 2 2 4-4\" />\n </svg>\n);\n\nfunction needsOnboarding(user: NativeUser | UserInfos): boolean {\n return !user.image_url || !user.phone || !user.email;\n}\n\nfunction isProfileComplete(user: NativeUser | UserInfos): boolean {\n return Boolean(user.image_url && user.phone && user.email);\n}\n\n// Gradient border animation keyframes (injected once)\nconst GRADIENT_STYLE_ID = 'ollaid-sso-gradient-anim';\nfunction injectGradientAnimation() {\n if (document.getElementById(GRADIENT_STYLE_ID)) return;\n const style = document.createElement('style');\n style.id = GRADIENT_STYLE_ID;\n style.textContent = `\n @keyframes ollaid-border-gradient {\n 0% { background-position: 0% 50%; }\n 50% { background-position: 100% 50%; }\n 100% { background-position: 0% 50%; }\n }\n @keyframes ollaid-marquee {\n 0% { transform: translateX(0); }\n 100% { transform: translateX(-50%); }\n }\n `;\n document.head.appendChild(style);\n}\n\n/** Top branding: ShieldCheck + iam.ollaid.com + subtitle */\nconst TopBranding = ({ subtitle }: { subtitle: string }) => (\n <div style={{ textAlign: 'center', marginBottom: '1.5rem' }}>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '0.5rem', marginBottom: '0.5rem' }}>\n <ShieldCheckIcon size={28} color={COLORS.accent} />\n <span style={{ fontSize: '1.25rem', fontWeight: 700, color: COLORS.primaryForeground }}>\n iam.<span style={{ color: COLORS.accent }}>ollaid</span>.com\n </span>\n </div>\n <p style={{ fontSize: '1rem', fontWeight: 600, color: 'rgba(255,255,255,0.85)' }}>\n {subtitle}\n </p>\n </div>\n);\n\n/** Footer: Ollaid logo + copyright */\nconst Footer = ({ hideFooter }: { hideFooter: boolean }) => (\n <div style={{ marginTop: '1.5rem', textAlign: 'center' }}>\n <img src={ollaidLogo} alt=\"Ollaid\" style={{ height: '28px', margin: '0 auto 0.5rem' }} />\n {!hideFooter && (\n <p style={{ fontSize: '0.75rem', color: 'rgba(255,255,255,0.5)' }}>\n © 2026 iam.ollaid.com propulsé par <span style={{ fontWeight: 500 }}>ollaid</span>\n </p>\n )}\n </div>\n);\n\nexport function NativeSSOPage({\n saasApiUrl,\n iamApiUrl,\n onLoginSuccess,\n onLogout,\n onOnboardingComplete,\n accountType = 'user',\n configPrefix = 'iam',\n title = 'Un compte pour toutes vos applications',\n description = 'Connectez-vous avec votre compte Ollaid pour accéder à toutes les applications partenaires.',\n logoUrl,\n hideFooter = false,\n redirectAfterLogin,\n redirectAfterLogout,\n storage,\n}: NativeSSOPageProps) {\n if (storage) {\n setNativeStorage(storage);\n }\n\n const [modal, setModal] = useState<ModalState>('none');\n const [loginInitialPhone, setLoginInitialPhone] = useState<string | undefined>();\n const [showOnboarding, setShowOnboarding] = useState(false);\n const [pendingSession, setPendingSession] = useState<{ token: string; user: NativeUser; sourceUser: NativeUser } | null>(null);\n const [debugOnboardingState, setDebugOnboardingState] = useState<{\n token: string;\n user: NativeUser;\n sourceUser: NativeUser;\n preset: DebugOnboardingPreset;\n variant: 'edit';\n } | null>(null);\n const [session, setSession] = useState<{ token: string; user: NativeUser } | null>(() => {\n try {\n const storage = getNativeStorage();\n const token = storage.getItem(STORAGE_KEYS.AUTH_TOKEN) || storage.getItem(STORAGE_KEYS.TOKEN);\n const userStr = storage.getItem(STORAGE_KEYS.USER);\n if (token && userStr) return { token, user: JSON.parse(userStr) };\n } catch {\n return null;\n }\n return null;\n });\n\n const { isDebug: resolvedDebug } = useNativeAuth({ saasApiUrl, iamApiUrl, configPrefix, autoLoadCredentials: true, storage });\n const onboardingPromptTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const onboardingRecheckTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const profileSyncTimerRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const profileHydrationRunningRef = useRef(false);\n const profileHydrationRequestedRef = useRef<string | null>(null);\n const sessionRef = useRef(session);\n const [profileHydrating, setProfileHydrating] = useState(false);\n\n useEffect(() => {\n sessionRef.current = session;\n }, [session]);\n\n const clearOnboardingTimers = useCallback(() => {\n if (onboardingPromptTimerRef.current) {\n clearTimeout(onboardingPromptTimerRef.current);\n onboardingPromptTimerRef.current = null;\n }\n if (onboardingRecheckTimerRef.current) {\n clearTimeout(onboardingRecheckTimerRef.current);\n onboardingRecheckTimerRef.current = null;\n }\n }, []);\n\n const persistSessionUser = useCallback((token: string, user: NativeUser) => {\n const storage = getNativeStorage();\n setSession({ token, user });\n storage.setItem(STORAGE_KEYS.USER, JSON.stringify(user));\n storage.setItem(STORAGE_KEYS.AUTH_TOKEN, token);\n }, []);\n\n const extractUserInfos = useCallback((payload: unknown): Partial<NativeUser> | null => {\n if (!payload || typeof payload !== 'object') return null;\n const data = payload as Record<string, unknown>;\n const candidate = (data.user_infos && typeof data.user_infos === 'object')\n ? data.user_infos as Record<string, unknown>\n : data.user && typeof data.user === 'object'\n ? data.user as Record<string, unknown>\n : data;\n\n return {\n reference: typeof candidate.reference === 'string' ? candidate.reference : undefined,\n name: typeof candidate.name === 'string' ? candidate.name : undefined,\n email: typeof candidate.email === 'string' ? candidate.email : undefined,\n ccphone: typeof candidate.ccphone === 'string' ? candidate.ccphone : undefined,\n phone: typeof candidate.phone === 'string' ? candidate.phone : undefined,\n address: typeof candidate.address === 'string' ? candidate.address : undefined,\n town: typeof candidate.town === 'string' ? candidate.town : undefined,\n country: typeof candidate.country === 'string' ? candidate.country : undefined,\n image_url: typeof candidate.image_url === 'string' ? candidate.image_url : undefined,\n auth_2fa: typeof candidate.auth_2fa === 'boolean' ? candidate.auth_2fa : undefined,\n alias_reference: typeof candidate.alias_reference === 'string' ? candidate.alias_reference : undefined,\n iam_reference: typeof candidate.iam_reference === 'string' ? candidate.iam_reference : undefined,\n };\n }, []);\n\n const refreshSessionProfile = useCallback(async (force = false): Promise<NativeUser | null> => {\n const activeSession = sessionRef.current;\n if (!activeSession?.token) return null;\n if (profileHydrationRunningRef.current && !force) return activeSession.user;\n if (profileHydrationRequestedRef.current === activeSession.token && !force) return activeSession.user;\n\n profileHydrationRunningRef.current = true;\n profileHydrationRequestedRef.current = activeSession.token;\n setProfileHydrating(true);\n try {\n let lastError: unknown = null;\n for (let attempt = 1; attempt <= PROFILE_FETCH_MAX_ATTEMPTS; attempt += 1) {\n try {\n const response = await profileService.getProfile();\n const mergedInfos = extractUserInfos(response) || {};\n const mergedUser = { ...activeSession.user, ...mergedInfos } as NativeUser;\n persistSessionUser(activeSession.token, mergedUser);\n return mergedUser;\n } catch (error) {\n lastError = error;\n if (attempt < PROFILE_FETCH_MAX_ATTEMPTS) {\n await new Promise((resolve) => setTimeout(resolve, PROFILE_FETCH_RETRY_DELAY_MS * attempt));\n }\n }\n }\n\n const isDev = Boolean((import.meta as unknown as { env?: { DEV?: boolean } }).env?.DEV);\n if (isDev) {\n console.warn('Profile hydration failed after retries', lastError);\n }\n return activeSession.user;\n } finally {\n profileHydrationRunningRef.current = false;\n setProfileHydrating(false);\n }\n }, [persistSessionUser, extractUserInfos]);\n\n const makeDebugOnboardingUser = useCallback((baseUser: NativeUser, preset: DebugOnboardingPreset): NativeUser => {\n const normalized: NativeUser = { ...baseUser };\n\n if (preset === 'current') return normalized;\n if (preset === 'photo') return { ...normalized, image_url: '' };\n if (preset === 'phone') return { ...normalized, phone: '', ccphone: '' };\n if (preset === 'email') return { ...normalized, email: '' };\n return { ...normalized, image_url: '', phone: '', ccphone: '', email: '' };\n }, []);\n\n const syncProfilePrompt = useCallback((currentSession: { token: string; user: NativeUser } | null) => {\n clearOnboardingTimers();\n\n if (!currentSession) {\n setPendingSession(null);\n setShowOnboarding(false);\n return;\n }\n\n const promptState = getProfilePromptState();\n const now = Date.now();\n const onboardingVisible = showOnboarding || Boolean(pendingSession || debugOnboardingState);\n\n if (promptState.lastStatus === true || isProfileComplete(currentSession.user)) {\n markProfilePromptComplete();\n if (!onboardingVisible) {\n setPendingSession(null);\n setShowOnboarding(false);\n }\n return;\n }\n\n setPendingSession({ ...currentSession, sourceUser: currentSession.user });\n\n const scheduleOpen = () => {\n onboardingPromptTimerRef.current = setTimeout(() => {\n const latestPromptState = getProfilePromptState();\n if (latestPromptState.lastStatus === true) return;\n if (!currentSession) return;\n if (!isProfileComplete(currentSession.user)) {\n setShowOnboarding(true);\n }\n }, PROFILE_PROMPT_DELAY_MS);\n };\n\n if (promptState.recheckAt && promptState.recheckAt > now) {\n onboardingRecheckTimerRef.current = setTimeout(() => {\n const latestPromptState = getProfilePromptState();\n if (latestPromptState.lastStatus === true) return;\n if (!currentSession) return;\n if (!isProfileComplete(currentSession.user)) {\n scheduleOpen();\n }\n }, promptState.recheckAt - now);\n return;\n }\n\n scheduleOpen();\n }, [clearOnboardingTimers, showOnboarding, pendingSession, debugOnboardingState]);\n\n // Force light mode + inject gradient animation\n useEffect(() => {\n injectGradientAnimation();\n const root = document.documentElement;\n const originalValues: Record<string, string> = {};\n Object.keys(LIGHT_VARS).forEach((key) => { originalValues[key] = root.style.getPropertyValue(key); });\n Object.entries(LIGHT_VARS).forEach(([key, value]) => { root.style.setProperty(key, value); });\n root.classList.add('light');\n root.classList.remove('dark');\n root.style.colorScheme = 'light';\n const meta = document.createElement('meta');\n meta.name = 'color-scheme';\n meta.content = 'light';\n document.head.appendChild(meta);\n return () => {\n Object.entries(originalValues).forEach(([key, value]) => {\n if (value) root.style.setProperty(key, value);\n else root.style.removeProperty(key);\n });\n root.classList.remove('light');\n root.style.colorScheme = '';\n meta.remove();\n };\n }, []);\n\n const openLogin = useCallback(() => setModal('login'), []);\n const openSignup = useCallback(() => setModal('signup'), []);\n const closeModal = useCallback(() => { setModal('none'); setLoginInitialPhone(undefined); }, []);\n const switchToSignup = useCallback(() => { setModal('none'); setLoginInitialPhone(undefined); setTimeout(() => setModal('signup'), 150); }, []);\n const switchToLogin = useCallback(() => { setModal('none'); setLoginInitialPhone(undefined); setTimeout(() => setModal('login'), 150); }, []);\n const switchToLoginWithPhone = useCallback((phone: string) => {\n setModal('none');\n setLoginInitialPhone(phone);\n setTimeout(() => setModal('login'), 150);\n }, []);\n\n const handleLoginSuccess = useCallback((token: string, user: UserInfos) => {\n const userObj: NativeUser = {\n reference: '',\n name: user.name,\n email: user.email || undefined,\n phone: user.phone,\n ccphone: user.ccphone,\n image_url: user.image_url,\n account_type: accountType,\n };\n setModal('none');\n persistSessionUser(token, userObj);\n syncProfilePrompt({ token, user: userObj });\n void refreshSessionProfile(true);\n\n if (!needsOnboarding(userObj)) {\n markProfilePromptComplete();\n onLoginSuccess?.(token, user);\n safeRedirect(redirectAfterLogin);\n }\n }, [onLoginSuccess, redirectAfterLogin, persistSessionUser, syncProfilePrompt, refreshSessionProfile, accountType]);\n\n const handleOnboardingComplete = useCallback((data: {\n name?: string;\n image_url?: string;\n ccphone?: string;\n phone?: string;\n email?: string;\n address?: string;\n town?: string;\n country?: string;\n user_infos?: UserInfos;\n }) => {\n const activeSession = debugOnboardingState || pendingSession;\n if (!activeSession) return;\n const updatedUser = { ...activeSession.sourceUser, ...(data.user_infos || data) } as NativeUser;\n persistSessionUser(activeSession.token, updatedUser);\n onOnboardingComplete?.({\n name: updatedUser.name,\n image_url: updatedUser.image_url,\n ccphone: updatedUser.ccphone || undefined,\n phone: updatedUser.phone || undefined,\n email: updatedUser.email || undefined,\n address: updatedUser.address || undefined,\n town: updatedUser.town || undefined,\n country: updatedUser.country || undefined,\n user_infos: {\n reference: updatedUser.reference,\n name: updatedUser.name,\n email: updatedUser.email || null,\n ccphone: updatedUser.ccphone,\n phone: updatedUser.phone,\n address: updatedUser.address,\n town: updatedUser.town,\n country: updatedUser.country,\n image_url: updatedUser.image_url,\n auth_2fa: updatedUser.auth_2fa,\n alias_reference: updatedUser.alias_reference,\n iam_reference: updatedUser.iam_reference,\n },\n });\n if (!debugOnboardingState) {\n markProfilePromptComplete();\n }\n void refreshSessionProfile(true);\n }, [pendingSession, debugOnboardingState, onOnboardingComplete, persistSessionUser, refreshSessionProfile]);\n\n const handleOnboardingSkip = useCallback(() => {\n const activeSession = debugOnboardingState || pendingSession;\n if (!activeSession) return;\n setShowOnboarding(false);\n setPendingSession(null);\n setDebugOnboardingState(null);\n if (!debugOnboardingState) {\n persistSessionUser(activeSession.token, activeSession.user);\n snoozeProfilePrompt(PROFILE_PROMPT_SNOOZE_MS / (60 * 60 * 1000));\n onLoginSuccess?.(activeSession.token, activeSession.user as unknown as UserInfos);\n safeRedirect(redirectAfterLogin);\n return;\n }\n }, [pendingSession, debugOnboardingState, onLoginSuccess, redirectAfterLogin, persistSessionUser]);\n\n const handleOnboardingDismiss = useCallback(() => {\n setShowOnboarding(false);\n setPendingSession(null);\n setDebugOnboardingState(null);\n }, []);\n\n const handleLogout = useCallback(async () => {\n await logout();\n setSession(null);\n setPendingSession(null);\n setDebugOnboardingState(null);\n clearOnboardingTimers();\n onLogout?.();\n safeRedirect(redirectAfterLogout);\n }, [onLogout, redirectAfterLogout, clearOnboardingTimers]);\n\n const openDebugLogin = useCallback(() => {\n clearOnboardingTimers();\n setShowOnboarding(false);\n setPendingSession(null);\n setDebugOnboardingState(null);\n setModal('login');\n }, [clearOnboardingTimers]);\n\n const openDebugSignup = useCallback(() => {\n clearOnboardingTimers();\n setShowOnboarding(false);\n setPendingSession(null);\n setDebugOnboardingState(null);\n setModal('signup');\n }, [clearOnboardingTimers]);\n\n const openDebugOnboarding = useCallback((preset: DebugOnboardingPreset = 'current') => {\n if (!session) return;\n clearOnboardingTimers();\n setModal('none');\n const simulatedUser = makeDebugOnboardingUser(session.user, preset);\n setDebugOnboardingState({\n token: session.token,\n user: simulatedUser,\n sourceUser: session.user,\n preset,\n variant: 'edit',\n });\n setPendingSession(null);\n setShowOnboarding(true);\n }, [session, clearOnboardingTimers, makeDebugOnboardingUser]);\n\n const resetDebugProfilePrompt = useCallback(() => {\n setProfilePromptState(false, Date.now() + PROFILE_PROMPT_SNOOZE_MS);\n if (session) {\n clearOnboardingTimers();\n setDebugOnboardingState(null);\n setPendingSession({ ...session, sourceUser: session.user });\n setShowOnboarding(true);\n }\n }, [session, clearOnboardingTimers]);\n\n useEffect(() => {\n syncProfilePrompt(session);\n return () => {\n clearOnboardingTimers();\n };\n }, [session, syncProfilePrompt, clearOnboardingTimers]);\n\n useEffect(() => {\n if (!session?.token) return;\n if (!showOnboarding && !debugOnboardingState) return;\n void refreshSessionProfile();\n }, [session?.token, showOnboarding, debugOnboardingState, refreshSessionProfile]);\n\n useEffect(() => {\n if (!session?.token) return;\n\n const syncUserInfos = async () => {\n try {\n const response = await nativeAuthService.checkToken(session.token);\n if (!response.valid || !response.user) {\n await refreshSessionProfile(true);\n return;\n }\n\n const storedRaw = getNativeStorage().getItem(STORAGE_KEYS.USER);\n\n let storedUser: Record<string, unknown> = session.user as unknown as Record<string, unknown>;\n if (storedRaw) {\n try {\n storedUser = JSON.parse(storedRaw);\n } catch {\n // keep current session user\n }\n }\n\n const mergedUser = { ...storedUser, ...response.user } as NativeUser;\n persistSessionUser(session.token, mergedUser);\n\n if (isProfileComplete(mergedUser)) {\n markProfilePromptComplete();\n setShowOnboarding(false);\n setPendingSession(null);\n }\n } catch {\n await refreshSessionProfile(true);\n }\n };\n\n if (profileSyncTimerRef.current) {\n clearInterval(profileSyncTimerRef.current);\n profileSyncTimerRef.current = null;\n }\n\n profileSyncTimerRef.current = setInterval(syncUserInfos, PROFILE_SYNC_INTERVAL_MS);\n return () => {\n if (profileSyncTimerRef.current) {\n clearInterval(profileSyncTimerRef.current);\n profileSyncTimerRef.current = null;\n }\n };\n }, [session?.token, session?.user, persistSessionUser, refreshSessionProfile]);\n\n // Styles\n const containerStyle: React.CSSProperties = {\n minHeight: '100vh',\n backgroundColor: COLORS.primary,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '1.5rem 1rem',\n };\n\n const cardStyle: React.CSSProperties = {\n width: '100%',\n maxWidth: '28rem',\n backgroundColor: COLORS.card,\n border: `1px solid ${COLORS.border}`,\n borderRadius: '0.75rem',\n boxShadow: COLORS.shadow,\n overflow: 'hidden',\n };\n\n // Badge-style slider wrapper (shield circle + animated gradient pill)\n const SliderBadge = () => (\n <div style={{ width: '100%', maxWidth: '28rem', marginBottom: '1.5rem' }}>\n {logoUrl ? (\n <img src={logoUrl} alt=\"Logo\" style={{ height: '3rem', margin: '0 auto' }} />\n ) : (\n <div style={{ display: 'flex', alignItems: 'center', gap: '1rem' }}>\n {/* Shield circle */}\n <div style={{\n width: '3rem',\n height: '3rem',\n borderRadius: '50%',\n backgroundColor: '#ffffff',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n boxShadow: '0 2px 8px rgba(0,0,0,0.15)',\n border: `1px solid ${COLORS.border}`,\n }}>\n <ShieldCheckIcon size={22} color={COLORS.accent} />\n </div>\n {/* Animated gradient pill with slider */}\n <div style={{\n flex: 1,\n minWidth: 0,\n position: 'relative',\n borderRadius: '9999px',\n padding: '2px',\n background: `linear-gradient(90deg, ${COLORS.primary}, ${COLORS.accent}, ${COLORS.primary})`,\n backgroundSize: '200% 100%',\n animation: 'ollaid-border-gradient 3s ease infinite',\n }}>\n <div style={{\n backgroundColor: '#ffffff',\n borderRadius: '9999px',\n height: '3rem',\n overflow: 'hidden',\n }}>\n <AppsLogoSlider iamApiUrl={iamApiUrl} speed=\"normal\" />\n </div>\n </div>\n </div>\n )}\n </div>\n );\n\n // Auto-redirect if already authenticated and redirectAfterLogin is set\n if (session) {\n if (redirectAfterLogin) {\n // Redirect immediately — don't show authenticated view\n safeRedirect(redirectAfterLogin);\n return (\n <div style={containerStyle}>\n <TopBranding subtitle={title} />\n <p style={{ color: 'rgba(255,255,255,0.7)', fontSize: '0.875rem' }}>Redirection en cours...</p>\n </div>\n );\n }\n\n return (\n <div style={containerStyle}>\n <TopBranding subtitle={title} />\n <SliderBadge />\n\n <div style={cardStyle}>\n <div style={{ padding: '2rem 1.5rem 1.5rem' }}>\n <h2 style={{ fontSize: '1.25rem', fontWeight: 600, textAlign: 'center', color: COLORS.cardForeground }}>\n Bienvenue, {session.user.name}\n </h2>\n <p style={{ fontSize: '0.875rem', color: COLORS.muted, textAlign: 'center', marginTop: '0.25rem' }}>\n Vous êtes connecté à votre compte Ollaid SSO\n </p>\n <div style={{ marginTop: '1.5rem' }}>\n <Button variant=\"outline\" onClick={handleLogout} style={{ width: '100%' }}>\n Déconnexion\n </Button>\n </div>\n </div>\n </div>\n\n <Footer hideFooter={hideFooter} />\n\n {(pendingSession || debugOnboardingState) && (\n <OnboardingModal\n open={showOnboarding}\n onOpenChange={(open) => { if (!open) handleOnboardingSkip(); }}\n onDismiss={handleOnboardingDismiss}\n user={(debugOnboardingState || pendingSession)!.user}\n variant={debugOnboardingState ? 'edit' : 'missing'}\n profileHydrating={profileHydrating}\n onComplete={handleOnboardingComplete}\n onSkip={handleOnboardingSkip}\n />\n )}\n\n {resolvedDebug && (\n <DebugPanel\n saasApiUrl={saasApiUrl}\n iamApiUrl={iamApiUrl}\n onOpenLogin={openDebugLogin}\n onOpenSignup={openDebugSignup}\n onOpenOnboarding={openDebugOnboarding}\n onResetProfilePrompt={resetDebugProfilePrompt}\n />\n )}\n </div>\n );\n }\n\n // Unauthenticated view\n return (\n <div style={containerStyle}>\n <TopBranding subtitle={title} />\n <SliderBadge />\n\n {/* Main card */}\n <div style={cardStyle}>\n <div style={{ padding: '2rem 1.5rem 1.5rem' }}>\n <p style={{ fontSize: '0.875rem', color: COLORS.muted, textAlign: 'center', marginBottom: '1.5rem' }}>\n {description}\n </p>\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.75rem' }}>\n <Button onClick={openLogin} style={{ width: '100%', height: '2.75rem' }}>\n Connexion\n </Button>\n <Button\n variant=\"outline\"\n onClick={openSignup}\n style={{ width: '100%', height: '2.75rem', borderColor: COLORS.cardForeground, color: COLORS.cardForeground }}\n >\n Inscription\n </Button>\n </div>\n </div>\n </div>\n\n <Footer hideFooter={hideFooter} />\n\n <LoginModal\n open={modal === 'login'}\n onOpenChange={open => { if (!open) closeModal(); }}\n onSwitchToSignup={switchToSignup}\n onLoginSuccess={handleLoginSuccess}\n saasApiUrl={saasApiUrl}\n iamApiUrl={iamApiUrl}\n defaultAccountType={accountType}\n initialPhone={loginInitialPhone}\n />\n\n <SignupModal\n open={modal === 'signup'}\n onOpenChange={open => { if (!open) closeModal(); }}\n onSwitchToLogin={switchToLogin}\n onSwitchToLoginWithPhone={switchToLoginWithPhone}\n onSignupSuccess={handleLoginSuccess}\n saasApiUrl={saasApiUrl}\n iamApiUrl={iamApiUrl}\n defaultAccountType={accountType}\n />\n\n {(pendingSession || debugOnboardingState) && (\n <OnboardingModal\n open={showOnboarding}\n onOpenChange={(open) => { if (!open) handleOnboardingSkip(); }}\n onDismiss={handleOnboardingDismiss}\n user={(debugOnboardingState || pendingSession)!.user}\n variant={debugOnboardingState ? 'edit' : 'missing'}\n profileHydrating={profileHydrating}\n onComplete={handleOnboardingComplete}\n onSkip={handleOnboardingSkip}\n />\n )}\n\n {resolvedDebug && (\n <DebugPanel\n saasApiUrl={saasApiUrl}\n iamApiUrl={iamApiUrl}\n onOpenLogin={openDebugLogin}\n onOpenSignup={openDebugSignup}\n onOpenOnboarding={openDebugOnboarding}\n onResetProfilePrompt={resetDebugProfilePrompt}\n />\n )}\n </div>\n );\n}\n\nexport default NativeSSOPage;\n","/* eslint-disable react-refresh/only-export-components */\n/**\n * NativeSSOProvider — React Context pour @ollaid/native-sso\n * Centralise la configuration pour les hooks et composants individuels\n * \n * @version 2.7.0\n */\n\nimport { createContext, useContext, useEffect, useRef, type ReactNode } from 'react';\nimport { setNativeAuthConfig, setNativeStorage, type NativeAuthConfig, type NativeStorageAdapter } from './services/api';\n\nexport interface NativeSSOConfig {\n /** URL du Backend SaaS (ex: https://mon-saas.com/api) */\n saasApiUrl: string;\n /** URL du Backend IAM (ex: https://identityam.ollaid.com/api) */\n iamApiUrl: string;\n /** Timeout en ms (défaut: 30000) */\n timeout?: number;\n /** Mode debug (logs console) */\n debug?: boolean;\n /** Stockage injectable pour les apps natives / Capacitor */\n storage?: NativeStorageAdapter;\n}\n\nconst NativeSSOContext = createContext<NativeSSOConfig | null>(null);\n\nexport interface NativeSSOProviderProps {\n config: NativeSSOConfig;\n children: ReactNode;\n}\n\n/**\n * Provider React pour centraliser la config SSO.\n * \n * Usage :\n * ```tsx\n * <NativeSSOProvider config={{ saasApiUrl: '...', iamApiUrl: '...' }}>\n * <App />\n * </NativeSSOProvider>\n * ```\n */\nexport function NativeSSOProvider({ config, children }: NativeSSOProviderProps) {\n const configuredRef = useRef(false);\n\n if (config.storage) {\n setNativeStorage(config.storage);\n }\n\n useEffect(() => {\n if (!configuredRef.current) {\n setNativeAuthConfig(config);\n configuredRef.current = true;\n }\n }, [config]);\n\n return (\n <NativeSSOContext.Provider value={config}>\n {children}\n </NativeSSOContext.Provider>\n );\n}\n\n/**\n * Hook pour accéder à la config SSO depuis le Provider.\n * Optionnel : les hooks acceptent aussi la config en paramètre.\n */\nexport function useNativeSSOConfig(): NativeSSOConfig {\n const ctx = useContext(NativeSSOContext);\n if (!ctx) {\n throw new Error('useNativeSSOConfig doit être utilisé dans un <NativeSSOProvider>');\n }\n return ctx;\n}\n\nexport default NativeSSOProvider;\n","/**\n * Hook React pour la déconnexion sécurisée.\n * \n * Wrape `logout()` avec gestion d'état (loading, error)\n * et callbacks (onSuccess, onError) pour une intégration UX simple.\n * \n * @example\n * ```tsx\n * import { useLogout } from '@ollaid/native-sso';\n * \n * const LogoutButton = () => {\n * const { logout, loading, error } = useLogout({\n * onSuccess: () => navigate('/auth/login'),\n * onError: (err) => toast.error(err.message),\n * });\n * \n * return (\n * <button onClick={logout} disabled={loading}>\n * {loading ? 'Déconnexion...' : 'Se déconnecter'}\n * </button>\n * );\n * };\n * ```\n * \n * @version 2.7.0\n */\n\nimport { useState, useCallback } from 'react';\nimport { logout } from '../services/api';\n\nexport interface UseLogoutOptions {\n /** Callback appelé après une déconnexion réussie (redirection, toast, etc.) */\n onSuccess?: () => void;\n /** Callback appelé en cas d'erreur (notification, log, etc.) */\n onError?: (error: Error) => void;\n}\n\nexport interface UseLogoutReturn {\n /** Déclenche la déconnexion complète (double revocation SaaS + IAM) */\n logout: () => Promise<void>;\n /** `true` pendant l'appel de déconnexion */\n loading: boolean;\n /** Message d'erreur si la déconnexion a échoué, `null` sinon */\n error: string | null;\n}\n\nexport const useLogout = (options?: UseLogoutOptions): UseLogoutReturn => {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const handleLogout = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n await logout();\n options?.onSuccess?.();\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Erreur de déconnexion';\n setError(message);\n options?.onError?.(err instanceof Error ? err : new Error(message));\n } finally {\n setLoading(false);\n }\n }, [options]);\n\n return { logout: handleLogout, loading, error };\n};\n","/**\n * Service IAM Account — APIs server-to-server\n * link-phone, link-email, refresh-user-info, update-avatar, reset-avatar\n * \n * ⚠️ ATTENTION — SERVER-TO-SERVER UNIQUEMENT\n * Ces APIs utilisent la `secret_key` de votre application IAM.\n * Elles doivent être appelées EXCLUSIVEMENT depuis un backend (Node.js, PHP, etc.).\n * Ne JAMAIS appeler ces méthodes depuis du code frontend/navigateur car la\n * secret_key serait exposée dans les DevTools réseau.\n * \n * @version 2.7.0\n */\n\nimport { fetchWithTimeout, getHeaders, getNativeAuthConfig } from './api';\nimport { nativeAuthService } from './nativeAuth';\n\nimport type {\n LinkPhoneRequest,\n LinkPhoneResponse,\n LinkEmailRequest,\n LinkEmailResponse,\n RefreshUserInfoSingleRequest,\n RefreshUserInfoSingleResponse,\n RefreshUserInfoBulkRequest,\n RefreshUserInfoBulkResponse,\n UpdateAvatarRequest,\n UpdateAvatarResponse,\n ResetAvatarRequest,\n ResetAvatarResponse,\n} from '../types/native';\n\n// ============================================\n// Helper — auto-fill credentials if available\n// ============================================\n\nfunction getCredentialsOrThrow(params: { app_key?: string; secret_key?: string }) {\n const app_key = params.app_key;\n const secret_key = params.secret_key;\n\n if (!app_key || !secret_key) {\n throw new Error('app_key et secret_key sont requis en paramètre. Ces APIs sont server-to-server et ne peuvent pas utiliser les encrypted_credentials.');\n }\n\n return { app_key, secret_key };\n}\n\n// ============================================\n// Service\n// ============================================\n\nexport const iamAccountService = {\n\n /**\n * Lier un numéro de téléphone à un compte utilisateur existant\n * POST {iamApiUrl}/iam/link-phone\n */\n async linkPhone(params: Partial<Pick<LinkPhoneRequest, 'app_key' | 'secret_key'>> & Omit<LinkPhoneRequest, 'app_key' | 'secret_key'>): Promise<LinkPhoneResponse> {\n const config = getNativeAuthConfig();\n const { app_key, secret_key } = getCredentialsOrThrow(params);\n\n return fetchWithTimeout<LinkPhoneResponse>(\n `${config.iamApiUrl}/iam/link-phone`,\n {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify({\n app_key,\n secret_key,\n iam_reference: params.iam_reference,\n ccphone: params.ccphone,\n phone: params.phone,\n }),\n },\n config.timeout || 30000\n );\n },\n\n /**\n * Lier une adresse email à un compte utilisateur existant\n * POST {iamApiUrl}/iam/link-email\n */\n async linkEmail(params: Partial<Pick<LinkEmailRequest, 'app_key' | 'secret_key'>> & Omit<LinkEmailRequest, 'app_key' | 'secret_key'>): Promise<LinkEmailResponse> {\n const config = getNativeAuthConfig();\n const { app_key, secret_key } = getCredentialsOrThrow(params);\n\n return fetchWithTimeout<LinkEmailResponse>(\n `${config.iamApiUrl}/iam/link-email`,\n {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify({\n app_key,\n secret_key,\n iam_reference: params.iam_reference,\n email: params.email,\n }),\n },\n config.timeout || 30000\n );\n },\n\n /**\n * Récupérer les user_infos d'un utilisateur (mode single)\n * POST {iamApiUrl}/iam/refresh-user-info\n */\n async refreshUserInfo(params: Partial<Pick<RefreshUserInfoSingleRequest, 'secret_key'>> & Omit<RefreshUserInfoSingleRequest, 'secret_key'>): Promise<RefreshUserInfoSingleResponse> {\n const config = getNativeAuthConfig();\n \n const secret_key = params.secret_key;\n\n if (!secret_key) {\n throw new Error('secret_key est requis. Chargez les credentials ou passez-la en paramètre.');\n }\n\n return fetchWithTimeout<RefreshUserInfoSingleResponse>(\n `${config.iamApiUrl}/iam/refresh-user-info`,\n {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify({\n secret_key,\n alias_reference: params.alias_reference,\n }),\n },\n config.timeout || 30000\n );\n },\n\n /**\n * Récupérer les user_infos en bulk (max 100 alias_references)\n * POST {iamApiUrl}/iam/refresh-user-info\n */\n async refreshUserInfoBulk(params: Partial<Pick<RefreshUserInfoBulkRequest, 'secret_key'>> & Omit<RefreshUserInfoBulkRequest, 'secret_key'>): Promise<RefreshUserInfoBulkResponse> {\n const config = getNativeAuthConfig();\n \n const secret_key = params.secret_key;\n\n if (!secret_key) {\n throw new Error('secret_key est requis. Chargez les credentials ou passez-la en paramètre.');\n }\n\n if (params.alias_references.length > 100) {\n throw new Error('Maximum 100 alias_references par requête bulk.');\n }\n\n return fetchWithTimeout<RefreshUserInfoBulkResponse>(\n `${config.iamApiUrl}/iam/refresh-user-info`,\n {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify({\n secret_key,\n alias_references: params.alias_references,\n }),\n },\n config.timeout || 30000\n );\n },\n\n /**\n * Mettre à jour l'avatar d'un utilisateur pour une application spécifique\n * POST {iamApiUrl}/iam/update-avatar\n */\n async updateAvatar(params: Partial<Pick<UpdateAvatarRequest, 'app_key' | 'secret_key'>> & Omit<UpdateAvatarRequest, 'app_key' | 'secret_key'>): Promise<UpdateAvatarResponse> {\n const config = getNativeAuthConfig();\n const { app_key, secret_key } = getCredentialsOrThrow(params);\n\n return fetchWithTimeout<UpdateAvatarResponse>(\n `${config.iamApiUrl}/iam/update-avatar`,\n {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify({\n app_key,\n secret_key,\n alias_reference: params.alias_reference,\n avatar_url: params.avatar_url,\n }),\n },\n config.timeout || 30000\n );\n },\n\n /**\n * Réinitialiser l'avatar d'un utilisateur (remettre à null pour utiliser l'image globale)\n * POST {iamApiUrl}/iam/reset-avatar\n */\n async resetAvatar(params: Partial<Pick<ResetAvatarRequest, 'app_key' | 'secret_key'>> & Omit<ResetAvatarRequest, 'app_key' | 'secret_key'>): Promise<ResetAvatarResponse> {\n const config = getNativeAuthConfig();\n const { app_key, secret_key } = getCredentialsOrThrow(params);\n\n return fetchWithTimeout<ResetAvatarResponse>(\n `${config.iamApiUrl}/iam/reset-avatar`,\n {\n method: 'POST',\n headers: getHeaders(),\n body: JSON.stringify({\n app_key,\n secret_key,\n alias_reference: params.alias_reference,\n }),\n },\n config.timeout || 30000\n );\n },\n};\n"],"names":["jsxs","jsx","createContext","useEffect","useContext","forwardRef","useRef","useState","module","this","Math","undefined","global","require","C","require$$0","n","H","require$$1","require$$2","hmac","CBC","require$$3","require$$4","SUB_MIX_0","SUB_MIX_1","SUB_MIX_2","SUB_MIX_3","SBOX","require$$5","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","require$$22","require$$23","require$$24","require$$25","require$$26","require$$27","require$$28","require$$29","require$$30","require$$31","require$$32","require$$33","require$$34","CryptoJS.AES","CryptoJS.enc","nativeAuthService","config","STORAGE_KEYS","getErrorMessage","useCallback","iconCircle","backBtnStyle","Fragment","storage","logout","linkStyle","_a","_b","_c","_d","_e","_f","useMemo","maxSize","size","open"],"mappings":"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A,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,WAAY,UAAU;AAAA,UAC7E,eAAe,WAAY,UAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,SAAU;AAAA,UAC7E,eAAe,YAAY,SAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,SAAU;AAAA,UAC7E,eAAe,WAAY,UAAU;AAAA,UAAG,eAAe,WAAY,UAAU;AAAA,UAC7E,eAAe,WAAY,UAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,SAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,WAAY,UAAU;AAAA,UAAG,eAAe,WAAY,SAAU;AAAA,UAC7E,eAAe,WAAY,UAAU;AAAA,UAAG,eAAe,WAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,SAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,SAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,WAAY,SAAU;AAAA,UAC7E,eAAe,WAAY,UAAU;AAAA,UAAG,eAAe,WAAY,UAAU;AAAA,UAC7E,eAAe,WAAY,UAAU;AAAA,UAAG,eAAe,WAAY,UAAU;AAAA,UAC7E,eAAe,WAAY,UAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,SAAU;AAAA,UAC7E,eAAe,YAAY,SAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,SAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,WAAY,UAAU;AAAA,UAAG,eAAe,WAAY,UAAU;AAAA,UAC7E,eAAe,WAAY,UAAU;AAAA,UAAG,eAAe,WAAY,SAAU;AAAA,UAC7E,eAAe,WAAY,SAAU;AAAA,UAAG,eAAe,WAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,SAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,UAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,UAC7E,eAAe,YAAY,SAAU;AAAA,UAAG,eAAe,YAAY,UAAU;AAAA,QACtF;AAGK,YAAI,IAAI,CAAA;AACR,SAAC,WAAY;AACT,mBAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AACzB,cAAE,CAAC,IAAI,eAAc;AAAA,UAClC;AAAA,QACA,GAAM;AAKD,YAAI,SAAS,OAAO,SAAS,OAAO,OAAO;AAAA,UACvC,UAAU,WAAY;AAClB,iBAAK,QAAQ,IAAI,aAAa,KAAK;AAAA,cAC/B,IAAI,QAAQ,KAAK,YAAY,UAAU;AAAA,cAAG,IAAI,QAAQ,KAAK,YAAY,UAAU;AAAA,cACjF,IAAI,QAAQ,KAAK,YAAY,UAAU;AAAA,cAAG,IAAI,QAAQ,KAAK,YAAY,UAAU;AAAA,cACjF,IAAI,QAAQ,KAAK,YAAY,UAAU;AAAA,cAAG,IAAI,QAAQ,KAAK,YAAY,SAAU;AAAA,cACjF,IAAI,QAAQ,KAAK,WAAY,UAAU;AAAA,cAAG,IAAI,QAAQ,KAAK,YAAY,SAAU;AAAA,YAClG,CAAc;AAAA,UACd;AAAA,UAES,iBAAiB,SAAU,GAAG,QAAQ;AAElC,gBAAI,IAAI,KAAK,MAAM;AAEnB,gBAAI,KAAK,EAAE,CAAC;AACZ,gBAAI,KAAK,EAAE,CAAC;AACZ,gBAAI,KAAK,EAAE,CAAC;AACZ,gBAAI,KAAK,EAAE,CAAC;AACZ,gBAAI,KAAK,EAAE,CAAC;AACZ,gBAAI,KAAK,EAAE,CAAC;AACZ,gBAAI,KAAK,EAAE,CAAC;AACZ,gBAAI,KAAK,EAAE,CAAC;AAEZ,gBAAI,MAAM,GAAG;AACb,gBAAI,MAAM,GAAG;AACb,gBAAI,MAAM,GAAG;AACb,gBAAI,MAAM,GAAG;AACb,gBAAI,MAAM,GAAG;AACb,gBAAI,MAAM,GAAG;AACb,gBAAI,MAAM,GAAG;AACb,gBAAI,MAAM,GAAG;AACb,gBAAI,MAAM,GAAG;AACb,gBAAI,MAAM,GAAG;AACb,gBAAI,MAAM,GAAG;AACb,gBAAI,MAAM,GAAG;AACb,gBAAI,MAAM,GAAG;AACb,gBAAI,MAAM,GAAG;AACb,gBAAI,MAAM,GAAG;AACb,gBAAI,MAAM,GAAG;AAGb,gBAAI,KAAK;AACT,gBAAI,KAAK;AACT,gBAAI,KAAK;AACT,gBAAI,KAAK;AACT,gBAAI,KAAK;AACT,gBAAI,KAAK;AACT,gBAAI,KAAK;AACT,gBAAI,KAAK;AACT,gBAAI,KAAK;AACT,gBAAI,KAAK;AACT,gBAAI,KAAK;AACT,gBAAI,KAAK;AACT,gBAAI,KAAK;AACT,gBAAI,KAAK;AACT,gBAAI,KAAK;AACT,gBAAI,KAAK;AAGT,qBAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AACzB,kBAAI;AACJ,kBAAI;AAGJ,kBAAI,KAAK,EAAE,CAAC;AAGZ,kBAAI,IAAI,IAAI;AACR,sBAAM,GAAG,OAAO,EAAE,SAAS,IAAI,CAAC,IAAQ;AACxC,sBAAM,GAAG,MAAO,EAAE,SAAS,IAAI,IAAI,CAAC,IAAI;AAAA,cAC7D,OAAwB;AAEH,oBAAI,UAAW,EAAE,IAAI,EAAE;AACvB,oBAAI,WAAW,QAAQ;AACvB,oBAAI,WAAW,QAAQ;AACvB,oBAAI,WAAa,aAAa,IAAM,YAAY,OAAS,aAAa,IAAM,YAAY,MAAQ,aAAa;AAC7G,oBAAI,WAAa,aAAa,IAAM,YAAY,OAAS,aAAa,IAAM,YAAY,OAAS,aAAa,IAAM,YAAY;AAGhI,oBAAI,UAAW,EAAE,IAAI,CAAC;AACtB,oBAAI,WAAW,QAAQ;AACvB,oBAAI,WAAW,QAAQ;AACvB,oBAAI,WAAa,aAAa,KAAO,YAAY,OAAS,YAAY,IAAM,aAAa,MAAQ,aAAa;AAC9G,oBAAI,WAAa,aAAa,KAAO,YAAY,OAAS,YAAY,IAAM,aAAa,OAAS,aAAa,IAAM,YAAY;AAGjI,oBAAI,MAAO,EAAE,IAAI,CAAC;AAClB,oBAAI,OAAO,IAAI;AACf,oBAAI,OAAO,IAAI;AAEf,oBAAI,OAAQ,EAAE,IAAI,EAAE;AACpB,oBAAI,QAAQ,KAAK;AACjB,oBAAI,QAAQ,KAAK;AAEjB,sBAAM,UAAU;AAChB,sBAAM,UAAU,QAAS,QAAQ,IAAM,YAAY,IAAK,IAAI;AAC5D,sBAAM,MAAM;AACZ,sBAAM,MAAM,WAAY,QAAQ,IAAM,YAAY,IAAK,IAAI;AAC3D,sBAAM,MAAM;AACZ,sBAAM,MAAM,SAAU,QAAQ,IAAM,UAAU,IAAK,IAAI;AAEvD,mBAAG,OAAO;AACV,mBAAG,MAAO;AAAA,cAC/B;AAEiB,kBAAI,MAAQ,KAAK,KAAO,CAAC,KAAK;AAC9B,kBAAI,MAAQ,KAAK,KAAO,CAAC,KAAK;AAC9B,kBAAI,OAAQ,KAAK,KAAO,KAAK,KAAO,KAAK;AACzC,kBAAI,OAAQ,KAAK,KAAO,KAAK,KAAO,KAAK;AAEzC,kBAAI,WAAY,OAAO,KAAO,MAAM,MAAS,MAAM,KAAQ,OAAO,MAAQ,MAAM,KAAO,OAAO;AAC9F,kBAAI,WAAY,OAAO,KAAO,MAAM,MAAS,MAAM,KAAQ,OAAO,MAAQ,MAAM,KAAO,OAAO;AAC9F,kBAAI,WAAY,OAAO,KAAO,MAAM,OAAS,OAAO,KAAO,MAAM,OAAS,MAAM,KAAO,OAAO;AAC9F,kBAAI,WAAY,OAAO,KAAO,MAAM,OAAS,OAAO,KAAO,MAAM,OAAS,MAAM,KAAO,OAAO;AAG9F,kBAAI,KAAM,EAAE,CAAC;AACb,kBAAI,MAAM,GAAG;AACb,kBAAI,MAAM,GAAG;AAEb,kBAAI,MAAM,KAAK;AACf,kBAAI,MAAM,KAAK,WAAY,QAAQ,IAAM,OAAO,IAAK,IAAI;AACzD,kBAAI,MAAM,MAAM;AAChB,kBAAI,MAAM,MAAM,OAAQ,QAAQ,IAAM,QAAQ,IAAK,IAAI;AACvD,kBAAI,MAAM,MAAM;AAChB,kBAAI,MAAM,MAAM,OAAQ,QAAQ,IAAM,QAAQ,IAAK,IAAI;AACvD,kBAAI,MAAM,MAAM;AAChB,kBAAI,MAAM,MAAM,OAAQ,QAAQ,IAAM,QAAQ,IAAK,IAAI;AAGvD,kBAAI,MAAM,UAAU;AACpB,kBAAI,MAAM,UAAU,QAAS,QAAQ,IAAM,YAAY,IAAK,IAAI;AAGhE,mBAAK;AACL,mBAAK;AACL,mBAAK;AACL,mBAAK;AACL,mBAAK;AACL,mBAAK;AACL,mBAAM,KAAK,MAAO;AAClB,mBAAM,KAAK,OAAQ,OAAO,IAAM,OAAO,IAAK,IAAI,KAAM;AACtD,mBAAK;AACL,mBAAK;AACL,mBAAK;AACL,mBAAK;AACL,mBAAK;AACL,mBAAK;AACL,mBAAM,MAAM,MAAO;AACnB,mBAAM,MAAM,OAAQ,OAAO,IAAM,QAAQ,IAAK,IAAI,KAAM;AAAA,YACzE;AAGa,kBAAM,GAAG,MAAQ,MAAM;AACvB,eAAG,OAAQ,MAAM,MAAO,QAAQ,IAAM,OAAO,IAAK,IAAI;AACtD,kBAAM,GAAG,MAAQ,MAAM;AACvB,eAAG,OAAQ,MAAM,MAAO,QAAQ,IAAM,OAAO,IAAK,IAAI;AACtD,kBAAM,GAAG,MAAQ,MAAM;AACvB,eAAG,OAAQ,MAAM,MAAO,QAAQ,IAAM,OAAO,IAAK,IAAI;AACtD,kBAAM,GAAG,MAAQ,MAAM;AACvB,eAAG,OAAQ,MAAM,MAAO,QAAQ,IAAM,OAAO,IAAK,IAAI;AACtD,kBAAM,GAAG,MAAQ,MAAM;AACvB,eAAG,OAAQ,MAAM,MAAO,QAAQ,IAAM,OAAO,IAAK,IAAI;AACtD,kBAAM,GAAG,MAAQ,MAAM;AACvB,eAAG,OAAQ,MAAM,MAAO,QAAQ,IAAM,OAAO,IAAK,IAAI;AACtD,kBAAM,GAAG,MAAQ,MAAM;AACvB,eAAG,OAAQ,MAAM,MAAO,QAAQ,IAAM,OAAO,IAAK,IAAI;AACtD,kBAAM,GAAG,MAAQ,MAAM;AACvB,eAAG,OAAQ,MAAM,MAAO,QAAQ,IAAM,OAAO,IAAK,IAAI;AAAA,UACnE;AAAA,UAES,aAAa,WAAY;AAErB,gBAAI,OAAO,KAAK;AAChB,gBAAI,YAAY,KAAK;AAErB,gBAAI,aAAa,KAAK,cAAc;AACpC,gBAAI,YAAY,KAAK,WAAW;AAGhC,sBAAU,cAAc,CAAC,KAAK,OAAS,KAAK,YAAY;AACxD,uBAAa,YAAY,QAAS,MAAO,KAAK,EAAE,IAAI,KAAK,MAAM,aAAa,UAAW;AACvF,uBAAa,YAAY,QAAS,MAAO,KAAK,EAAE,IAAI;AACpD,iBAAK,WAAW,UAAU,SAAS;AAGnC,iBAAK,SAAQ;AAGb,gBAAI,OAAO,KAAK,MAAM,MAAK;AAG3B,mBAAO;AAAA,UACpB;AAAA,UAES,OAAO,WAAY;AACf,gBAAI,QAAQ,OAAO,MAAM,KAAK,IAAI;AAClC,kBAAM,QAAQ,KAAK,MAAM,MAAK;AAE9B,mBAAO;AAAA,UACpB;AAAA,UAES,WAAW,OAAK;AAAA,QACzB,CAAM;AAgBD,QAAAA,GAAE,SAAS,OAAO,cAAc,MAAM;AAgBtC,QAAAA,GAAE,aAAa,OAAO,kBAAkB,MAAM;AAAA,MACnD,GAAE;AAGD,aAAO,SAAS;AAAA,IAEjB,CAAC;AAAA;;;;;;;;;ACrUA,KAAC,SAAU,MAAM,SAAS,OAAO;AACA;AAEhC,QAAAN,QAAA,UAA2B,QAAQO,YAAA,GAAmBG,eAAA,GAAuBC,eAAmB;AAAA,MAClG;AAAA,IASA,GAAEV,gBAAM,SAAU,UAAU;AAE3B,OAAC,WAAY;AAET,YAAIK,KAAI;AACR,YAAI,QAAQA,GAAE;AACd,YAAI,UAAU,MAAM;AACpB,YAAI,eAAe,MAAM;AACzB,YAAI,SAASA,GAAE;AACf,YAAI,SAAS,OAAO;AAKpB,YAAI,SAAS,OAAO,SAAS,OAAO,OAAO;AAAA,UACvC,UAAU,WAAY;AAClB,iBAAK,QAAQ,IAAI,aAAa,KAAK;AAAA,cAC/B,IAAI,QAAQ,KAAK,YAAY,UAAU;AAAA,cAAG,IAAI,QAAQ,KAAK,YAAY,SAAU;AAAA,cACjF,IAAI,QAAQ,KAAK,YAAY,SAAU;AAAA,cAAG,IAAI,QAAQ,KAAK,WAAY,UAAU;AAAA,cACjF,IAAI,QAAQ,KAAK,YAAY,UAAU;AAAA,cAAG,IAAI,QAAQ,KAAK,YAAY,UAAU;AAAA,cACjF,IAAI,QAAQ,KAAK,YAAY,UAAU;AAAA,cAAG,IAAI,QAAQ,KAAK,YAAY,UAAU;AAAA,YAClG,CAAc;AAAA,UACd;AAAA,UAES,aAAa,WAAY;AACrB,gBAAI,OAAO,OAAO,YAAY,KAAK,IAAI;AAEvC,iBAAK,YAAY;AAEjB,mBAAO;AAAA,UACpB;AAAA,QACA,CAAM;AAgBD,QAAAA,GAAE,SAAS,OAAO,cAAc,MAAM;AAgBtC,QAAAA,GAAE,aAAa,OAAO,kBAAkB,MAAM;AAAA,MACnD,GAAE;AAGD,aAAO,SAAS;AAAA,IAEjB,CAAC;AAAA;;;;;;;;;AClFA,KAAC,SAAU,MAAM,SAAS,OAAO;AACA;AAEhC,QAAAN,QAAA,UAA2B,QAAQO,YAAA,GAAmBG,eAAA,CAAqB;AAAA,MAC7E;AAAA,IASA,GAAET,gBAAM,SAAU,UAAU;AAE3B,OAAC,SAAUC,OAAM;AAEb,YAAII,KAAI;AACR,YAAI,QAAQA,GAAE;AACd,YAAI,YAAY,MAAM;AACtB,YAAI,SAAS,MAAM;AACnB,YAAI,QAAQA,GAAE;AACd,YAAI,UAAU,MAAM;AACpB,YAAI,SAASA,GAAE;AAGf,YAAI,cAAc,CAAA;AAClB,YAAI,aAAc,CAAA;AAClB,YAAI,kBAAkB,CAAA;AAGtB,SAAC,WAAY;AAET,cAAI,IAAI,GAAG,IAAI;AACf,mBAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AACzB,wBAAY,IAAI,IAAI,CAAC,KAAM,IAAI,MAAM,IAAI,KAAK,IAAK;AAEnD,gBAAI,OAAO,IAAI;AACf,gBAAI,QAAQ,IAAI,IAAI,IAAI,KAAK;AAC7B,gBAAI;AACJ,gBAAI;AAAA,UACjB;AAGS,mBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,qBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,yBAAW,IAAI,IAAI,CAAC,IAAI,KAAM,IAAI,IAAI,IAAI,KAAK,IAAK;AAAA,YACrE;AAAA,UACA;AAGS,cAAI,OAAO;AACX,mBAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AACzB,gBAAI,mBAAmB;AACvB,gBAAI,mBAAmB;AAEvB,qBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,kBAAI,OAAO,GAAM;AACb,oBAAI,eAAe,KAAK,KAAK;AAC7B,oBAAI,cAAc,IAAI;AAClB,sCAAoB,KAAK;AAAA,gBAClD,OAAyD;AAChC,sCAAoB,KAAM,cAAc;AAAA,gBACjE;AAAA,cACA;AAGiB,kBAAI,OAAO,KAAM;AAEb,uBAAQ,QAAQ,IAAK;AAAA,cAC1C,OAAwB;AACH,yBAAS;AAAA,cAC9B;AAAA,YACA;AAEa,4BAAgB,CAAC,IAAI,QAAQ,OAAO,kBAAkB,gBAAgB;AAAA,UACnF;AAAA,QACA,GAAM;AAGD,YAAI,IAAI,CAAA;AACR,SAAC,WAAY;AACT,mBAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AACzB,cAAE,CAAC,IAAI,QAAQ,OAAM;AAAA,UAClC;AAAA,QACA,GAAM;AAKD,YAAI,OAAO,OAAO,OAAO,OAAO,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UASnC,KAAK,OAAO,IAAI,OAAO;AAAA,YACnB,cAAc;AAAA,UAC3B,CAAU;AAAA,UAED,UAAU,WAAY;AAClB,gBAAI,QAAQ,KAAK,SAAS,CAAA;AAC1B,qBAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AACzB,oBAAM,CAAC,IAAI,IAAI,QAAQ,KAAI;AAAA,YAC5C;AAEa,iBAAK,aAAa,OAAO,IAAI,KAAK,IAAI,gBAAgB;AAAA,UACnE;AAAA,UAES,iBAAiB,SAAU,GAAG,QAAQ;AAElC,gBAAI,QAAQ,KAAK;AACjB,gBAAI,kBAAkB,KAAK,YAAY;AAGvC,qBAAS,IAAI,GAAG,IAAI,iBAAiB,KAAK;AAEtC,kBAAI,MAAO,EAAE,SAAS,IAAI,CAAC;AAC3B,kBAAI,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC;AAG/B,qBACO,OAAO,IAAO,QAAQ,MAAO,YAC7B,OAAO,KAAO,QAAQ,KAAO;AAEpC,sBACO,QAAQ,IAAO,SAAS,MAAO,YAC/B,QAAQ,KAAO,SAAS,KAAO;AAItC,kBAAI,OAAO,MAAM,CAAC;AAClB,mBAAK,QAAQ;AACb,mBAAK,OAAQ;AAAA,YAC9B;AAGa,qBAAS,QAAQ,GAAG,QAAQ,IAAI,SAAS;AAErC,uBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAExB,oBAAI,OAAO,GAAG,OAAO;AACrB,yBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,sBAAI,OAAO,MAAM,IAAI,IAAI,CAAC;AAC1B,0BAAQ,KAAK;AACb,0BAAQ,KAAK;AAAA,gBACtC;AAGqB,oBAAI,KAAK,EAAE,CAAC;AACZ,mBAAG,OAAO;AACV,mBAAG,MAAO;AAAA,cAC/B;AACiB,uBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAExB,oBAAI,MAAM,GAAG,IAAI,KAAK,CAAC;AACvB,oBAAI,MAAM,GAAG,IAAI,KAAK,CAAC;AACvB,oBAAI,SAAS,IAAI;AACjB,oBAAI,SAAS,IAAI;AAGjB,oBAAI,OAAO,IAAI,QAAS,UAAU,IAAM,WAAW;AACnD,oBAAI,OAAO,IAAI,OAAS,UAAU,IAAM,WAAW;AACnD,yBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,sBAAI,OAAO,MAAM,IAAI,IAAI,CAAC;AAC1B,uBAAK,QAAQ;AACb,uBAAK,OAAQ;AAAA,gBACtC;AAAA,cACA;AAGiB,uBAAS,YAAY,GAAG,YAAY,IAAI,aAAa;AACjD,oBAAI;AACJ,oBAAI;AAGJ,oBAAI,OAAO,MAAM,SAAS;AAC1B,oBAAI,UAAU,KAAK;AACnB,oBAAI,UAAU,KAAK;AACnB,oBAAI,YAAY,YAAY,SAAS;AAGrC,oBAAI,YAAY,IAAI;AAChB,yBAAQ,WAAW,YAAc,YAAa,KAAK;AACnD,yBAAQ,WAAW,YAAc,YAAa,KAAK;AAAA,gBAC5E,OAAuD;AAC9B,yBAAQ,WAAY,YAAY,KAAQ,YAAa,KAAK;AAC1D,yBAAQ,WAAY,YAAY,KAAQ,YAAa,KAAK;AAAA,gBACnF;AAGqB,oBAAI,UAAU,EAAE,WAAW,SAAS,CAAC;AACrC,wBAAQ,OAAO;AACf,wBAAQ,MAAO;AAAA,cACpC;AAGiB,kBAAI,KAAK,EAAE,CAAC;AACZ,kBAAI,SAAS,MAAM,CAAC;AACpB,iBAAG,OAAO,OAAO;AACjB,iBAAG,MAAO,OAAO;AAGjB,uBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,yBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAExB,sBAAI,YAAY,IAAI,IAAI;AACxB,sBAAI,OAAO,MAAM,SAAS;AAC1B,sBAAI,QAAQ,EAAE,SAAS;AACvB,sBAAI,UAAU,GAAI,IAAI,KAAK,IAAK,IAAI,CAAC;AACrC,sBAAI,UAAU,GAAI,IAAI,KAAK,IAAK,IAAI,CAAC;AAGrC,uBAAK,OAAO,MAAM,OAAQ,CAAC,QAAQ,OAAO,QAAQ;AAClD,uBAAK,MAAO,MAAM,MAAQ,CAAC,QAAQ,MAAO,QAAQ;AAAA,gBAC3E;AAAA,cACA;AAGiB,kBAAI,OAAO,MAAM,CAAC;AAClB,kBAAI,gBAAgB,gBAAgB,KAAK;AACzC,mBAAK,QAAQ,cAAc;AAC3B,mBAAK,OAAQ,cAAc;AAAA,YAC5C;AAAA,UACA;AAAA,UAES,aAAa,WAAY;AAErB,gBAAI,OAAO,KAAK;AAChB,gBAAI,YAAY,KAAK;AACJ,iBAAK,cAAc;AACpC,gBAAI,YAAY,KAAK,WAAW;AAChC,gBAAI,gBAAgB,KAAK,YAAY;AAGrC,sBAAU,cAAc,CAAC,KAAK,KAAQ,KAAK,YAAY;AACvD,uBAAYJ,MAAK,MAAM,YAAY,KAAK,aAAa,IAAI,kBAAmB,KAAK,CAAC,KAAK;AACvF,iBAAK,WAAW,UAAU,SAAS;AAGnC,iBAAK,SAAQ;AAGb,gBAAI,QAAQ,KAAK;AACjB,gBAAI,oBAAoB,KAAK,IAAI,eAAe;AAChD,gBAAI,oBAAoB,oBAAoB;AAG5C,gBAAI,YAAY,CAAA;AAChB,qBAAS,IAAI,GAAG,IAAI,mBAAmB,KAAK;AAExC,kBAAI,OAAO,MAAM,CAAC;AAClB,kBAAI,UAAU,KAAK;AACnB,kBAAI,UAAU,KAAK;AAGnB,yBACO,WAAW,IAAO,YAAY,MAAO,YACrC,WAAW,KAAO,YAAY,KAAO;AAE5C,yBACO,WAAW,IAAO,YAAY,MAAO,YACrC,WAAW,KAAO,YAAY,KAAO;AAI5C,wBAAU,KAAK,OAAO;AACtB,wBAAU,KAAK,OAAO;AAAA,YACvC;AAGa,mBAAO,IAAI,UAAU,KAAK,WAAW,iBAAiB;AAAA,UACnE;AAAA,UAES,OAAO,WAAY;AACf,gBAAI,QAAQ,OAAO,MAAM,KAAK,IAAI;AAElC,gBAAI,QAAQ,MAAM,SAAS,KAAK,OAAO,MAAM,CAAC;AAC9C,qBAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AACzB,oBAAM,CAAC,IAAI,MAAM,CAAC,EAAE,MAAK;AAAA,YAC1C;AAEa,mBAAO;AAAA,UACpB;AAAA,QACA,CAAM;AAgBD,QAAAI,GAAE,OAAO,OAAO,cAAc,IAAI;AAgBlC,QAAAA,GAAE,WAAW,OAAO,kBAAkB,IAAI;AAAA,MAC/C,GAAG,IAAI;AAGN,aAAO,SAAS;AAAA,IAEjB,CAAC;AAAA;;;;;;;;;ACrUA,KAAC,SAAU,MAAM,SAAS;AACO;AAEhC,QAAAN,kBAA2B,QAAQO,aAAiB;AAAA,MACtD;AAAA,IASA,GAAEN,gBAAM,SAAU,UAAU;AAAA,MAE5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWC,OAAC,SAAUC,OAAM;AAEb,YAAII,KAAI;AACR,YAAI,QAAQA,GAAE;AACd,YAAI,YAAY,MAAM;AACtB,YAAI,SAAS,MAAM;AACnB,YAAI,SAASA,GAAE;AAGf,YAAI,MAAM,UAAU,OAAO;AAAA,UACvB;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAG;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAC3D;AAAA,UAAI;AAAA,UAAG;AAAA,UAAK;AAAA,UAAG;AAAA,UAAK;AAAA,UAAG;AAAA,UAAK;AAAA,UAAG;AAAA,UAAK;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAG;AAAA,UAAI;AAAA,UAAK;AAAA,UAC5D;AAAA,UAAG;AAAA,UAAI;AAAA,UAAK;AAAA,UAAI;AAAA,UAAG;AAAA,UAAK;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAG;AAAA,UAAI;AAAA,UAAK;AAAA,UAAG;AAAA,UAC3D;AAAA,UAAI;AAAA,UAAG;AAAA,UAAI;AAAA,UAAK;AAAA,UAAI;AAAA,UAAG;AAAA,UAAK;AAAA,UAAG;AAAA,UAAK;AAAA,UAAI;AAAA,UAAG;AAAA,UAAI;AAAA,UAAK;AAAA,UAAI;AAAA,UAAI;AAAA,UAC5D;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAG;AAAA,UAAK;AAAA,UAAG;AAAA,UAAI;AAAA,UAAK;AAAA,UAAI;AAAA,UAAI;AAAA,UAAG;AAAA,UAAK;AAAA,UAAG;AAAA,UAAI;AAAA,QAAE,CAAC;AAClE,YAAI,MAAM,UAAU,OAAO;AAAA,UACvB;AAAA,UAAG;AAAA,UAAK;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAG;AAAA,UAAK;AAAA,UAAG;AAAA,UAAK;AAAA,UAAG;AAAA,UAAK;AAAA,UAAI;AAAA,UAAG;AAAA,UAAK;AAAA,UAAG;AAAA,UAC3D;AAAA,UAAG;AAAA,UAAK;AAAA,UAAI;AAAA,UAAI;AAAA,UAAG;AAAA,UAAK;AAAA,UAAG;AAAA,UAAI;AAAA,UAAI;AAAA,UAAK;AAAA,UAAG;AAAA,UAAK;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAC5D;AAAA,UAAK;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAG;AAAA,UAAK;AAAA,UAAI;AAAA,UAAG;AAAA,UAAK;AAAA,UAAG;AAAA,UAAK;AAAA,UAAG;AAAA,UAAK;AAAA,UAAI;AAAA,UAAG;AAAA,UAC5D;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAG;AAAA,UAAI;AAAA,UAAK;AAAA,UAAI;AAAA,UAAG;AAAA,UAAK;AAAA,UAAG;AAAA,UAAK;AAAA,UAAI;AAAA,UAAG;AAAA,UAAI;AAAA,UAC3D;AAAA,UAAI;AAAA,UAAI;AAAA,UAAK;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAG;AAAA,UAAI;AAAA,UAAK;AAAA,UAAI;AAAA,UAAI;AAAA,UAAG;AAAA,QAAE,CAAC;AACnE,YAAI,MAAM,UAAU,OAAO;AAAA,UACtB;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAK;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAG;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAK;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAC9D;AAAA,UAAG;AAAA,UAAK;AAAA,UAAG;AAAA,UAAI;AAAA,UAAK;AAAA,UAAI;AAAA,UAAG;AAAA,UAAK;AAAA,UAAG;AAAA,UAAI;AAAA,UAAK;AAAA,UAAG;AAAA,UAAK;AAAA,UAAG;AAAA,UAAI;AAAA,UAC3D;AAAA,UAAI;AAAA,UAAK;AAAA,UAAI;AAAA,UAAG;AAAA,UAAK;AAAA,UAAG;AAAA,UAAI;AAAA,UAAI;AAAA,UAAK;AAAA,UAAG;AAAA,UAAK;AAAA,UAAI;AAAA,UAAG;AAAA,UAAK;AAAA,UAAI;AAAA,UAC3D;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAK;AAAA,UAAI;AAAA,UAAI;AAAA,UAAG;AAAA,UAAK;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAG;AAAA,UAC9D;AAAA,UAAG;AAAA,UAAK;AAAA,UAAG;AAAA,UAAK;AAAA,UAAI;AAAA,UAAG;AAAA,UAAI;AAAA,UAAK;AAAA,UAAG;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAK;AAAA,UAAI;AAAA,UAAI;AAAA,SAAG;AACnE,YAAI,MAAM,UAAU,OAAO;AAAA,UACvB;AAAA,UAAI;AAAA,UAAI;AAAA,UAAG;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAK;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAG;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAK;AAAA,UAC5D;AAAA,UAAG;AAAA,UAAI;AAAA,UAAK;AAAA,UAAG;AAAA,UAAK;AAAA,UAAI;AAAA,UAAG;AAAA,UAAK;AAAA,UAAI;AAAA,UAAG;AAAA,UAAK;AAAA,UAAI;AAAA,UAAG;AAAA,UAAI;AAAA,UAAI;AAAA,UAC3D;AAAA,UAAI;AAAA,UAAG;AAAA,UAAI;AAAA,UAAK;AAAA,UAAI;AAAA,UAAI;AAAA,UAAG;AAAA,UAAI;AAAA,UAAI;AAAA,UAAK;AAAA,UAAG;AAAA,UAAI;AAAA,UAAI;AAAA,UAAK;AAAA,UAAI;AAAA,UAC5D;AAAA,UAAK;AAAA,UAAI;AAAA,UAAG;AAAA,UAAI;AAAA,UAAI;AAAA,UAAK;AAAA,UAAG;AAAA,UAAK;AAAA,UAAI;AAAA,UAAG;AAAA,UAAK;AAAA,UAAG;AAAA,UAAK;AAAA,UAAG;AAAA,UAAK;AAAA,UAC7D;AAAA,UAAI;AAAA,UAAG;AAAA,UAAK;AAAA,UAAG;AAAA,UAAK;AAAA,UAAG;AAAA,UAAK;AAAA,UAAI;AAAA,UAAG;AAAA,UAAK;AAAA,UAAI;AAAA,UAAG;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,SAAI;AAEnE,YAAI,MAAO,UAAU,OAAO,CAAE,GAAY,YAAY,YAAY,YAAY,UAAU,CAAC;AACzF,YAAI,MAAO,UAAU,OAAO,CAAE,YAAY,YAAY,YAAY,YAAY,CAAU,CAAC;AAKzF,YAAI,YAAY,OAAO,YAAY,OAAO,OAAO;AAAA,UAC7C,UAAU,WAAY;AAClB,iBAAK,QAAS,UAAU,OAAO,CAAC,YAAY,YAAY,YAAY,WAAY,UAAU,CAAC;AAAA,UACxG;AAAA,UAES,iBAAiB,SAAU,GAAG,QAAQ;AAGlC,qBAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAEzB,kBAAI,WAAW,SAAS;AACxB,kBAAI,aAAa,EAAE,QAAQ;AAG3B,gBAAE,QAAQ,KACH,cAAc,IAAO,eAAe,MAAO,YAC3C,cAAc,KAAO,eAAe,KAAO;AAAA,YAEnE;AAEa,gBAAI,IAAK,KAAK,MAAM;AACpB,gBAAI,KAAK,IAAI;AACb,gBAAI,KAAK,IAAI;AACb,gBAAI,KAAK,IAAI;AACb,gBAAI,KAAK,IAAI;AACb,gBAAI,KAAK,IAAI;AACb,gBAAI,KAAK,IAAI;AAGb,gBAAI,IAAI,IAAI,IAAI,IAAI;AACpB,gBAAI,IAAI,IAAI,IAAI,IAAI;AAEpB,iBAAK,KAAK,EAAE,CAAC;AACb,iBAAK,KAAK,EAAE,CAAC;AACb,iBAAK,KAAK,EAAE,CAAC;AACb,iBAAK,KAAK,EAAE,CAAC;AACb,iBAAK,KAAK,EAAE,CAAC;AAEb,gBAAI;AACJ,qBAAS,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG;AAC5B,kBAAK,KAAM,EAAE,SAAO,GAAG,CAAC,CAAC,IAAG;AAC5B,kBAAI,IAAE,IAAG;AACZ,qBAAM,GAAG,IAAG,IAAG,EAAE,IAAI,GAAG,CAAC;AAAA,cACvC,WAA4B,IAAE,IAAI;AACpB,qBAAM,GAAG,IAAG,IAAG,EAAE,IAAI,GAAG,CAAC;AAAA,cACvC,WAA4B,IAAE,IAAI;AACpB,qBAAM,GAAG,IAAG,IAAG,EAAE,IAAI,GAAG,CAAC;AAAA,cACvC,WAA4B,IAAE,IAAI;AACpB,qBAAM,GAAG,IAAG,IAAG,EAAE,IAAI,GAAG,CAAC;AAAA,cACvC,OAAwB;AACV,qBAAM,GAAG,IAAG,IAAG,EAAE,IAAI,GAAG,CAAC;AAAA,cACvC;AACiB,kBAAI,IAAE;AACN,kBAAK,KAAK,GAAE,GAAG,CAAC,CAAC;AACjB,kBAAK,IAAE,KAAI;AACX,mBAAK;AACL,mBAAK;AACL,mBAAK,KAAK,IAAI,EAAE;AAChB,mBAAK;AACL,mBAAK;AAEL,kBAAK,KAAK,EAAE,SAAO,GAAG,CAAC,CAAC,IAAG;AAC3B,kBAAI,IAAE,IAAG;AACZ,qBAAM,GAAG,IAAG,IAAG,EAAE,IAAI,GAAG,CAAC;AAAA,cACvC,WAA4B,IAAE,IAAI;AACpB,qBAAM,GAAG,IAAG,IAAG,EAAE,IAAI,GAAG,CAAC;AAAA,cACvC,WAA4B,IAAE,IAAI;AACpB,qBAAM,GAAG,IAAG,IAAG,EAAE,IAAI,GAAG,CAAC;AAAA,cACvC,WAA4B,IAAE,IAAI;AACpB,qBAAM,GAAG,IAAG,IAAG,EAAE,IAAI,GAAG,CAAC;AAAA,cACvC,OAAwB;AACV,qBAAM,GAAG,IAAG,IAAG,EAAE,IAAI,GAAG,CAAC;AAAA,cACvC;AACiB,kBAAI,IAAE;AACN,kBAAK,KAAK,GAAE,GAAG,CAAC,CAAC;AACjB,kBAAK,IAAE,KAAI;AACX,mBAAK;AACL,mBAAK;AACL,mBAAK,KAAK,IAAI,EAAE;AAChB,mBAAK;AACL,mBAAK;AAAA,YACtB;AAEa,gBAAQ,EAAE,CAAC,IAAI,KAAK,KAAI;AACxB,cAAE,CAAC,IAAK,EAAE,CAAC,IAAI,KAAK,KAAI;AACxB,cAAE,CAAC,IAAK,EAAE,CAAC,IAAI,KAAK,KAAI;AACxB,cAAE,CAAC,IAAK,EAAE,CAAC,IAAI,KAAK,KAAI;AACxB,cAAE,CAAC,IAAK,EAAE,CAAC,IAAI,KAAK,KAAI;AACxB,cAAE,CAAC,IAAK;AAAA,UACrB;AAAA,UAES,aAAa,WAAY;AAErB,gBAAI,OAAO,KAAK;AAChB,gBAAI,YAAY,KAAK;AAErB,gBAAI,aAAa,KAAK,cAAc;AACpC,gBAAI,YAAY,KAAK,WAAW;AAGhC,sBAAU,cAAc,CAAC,KAAK,OAAS,KAAK,YAAY;AACxD,uBAAa,YAAY,OAAQ,KAAM,KAAK,EAAE,KACvC,cAAc,IAAO,eAAe,MAAO,YAC3C,cAAc,KAAO,eAAe,KAAO;AAElD,iBAAK,YAAY,UAAU,SAAS,KAAK;AAGzC,iBAAK,SAAQ;AAGb,gBAAI,OAAO,KAAK;AAChB,gBAAI,IAAI,KAAK;AAGb,qBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAExB,kBAAI,MAAM,EAAE,CAAC;AAGb,gBAAE,CAAC,KAAO,OAAO,IAAO,QAAQ,MAAO,YAC7B,OAAO,KAAO,QAAQ,KAAO;AAAA,YACxD;AAGa,mBAAO;AAAA,UACpB;AAAA,UAES,OAAO,WAAY;AACf,gBAAI,QAAQ,OAAO,MAAM,KAAK,IAAI;AAClC,kBAAM,QAAQ,KAAK,MAAM,MAAK;AAE9B,mBAAO;AAAA,UACpB;AAAA,QACA,CAAM;AAGD,iBAAS,GAAG,GAAG,GAAG,GAAG;AACjB,iBAAS,IAAM,IAAM;AAAA,QAE9B;AAEK,iBAAS,GAAG,GAAG,GAAG,GAAG;AACjB,iBAAU,IAAI,IAAQ,CAAC,IAAI;AAAA,QACpC;AAEK,iBAAS,GAAG,GAAG,GAAG,GAAG;AACjB,kBAAU,IAAM,CAAE,KAAQ;AAAA,QACnC;AAEK,iBAAS,GAAG,GAAG,GAAG,GAAG;AACjB,iBAAU,IAAM,IAAQ,IAAI,CAAE;AAAA,QACvC;AAEK,iBAAS,GAAG,GAAG,GAAG,GAAG;AACjB,iBAAS,KAAO,IAAK,CAAE;AAAA,QAEhC;AAEK,iBAAS,KAAK,GAAE,GAAG;AACf,iBAAQ,KAAG,IAAM,MAAK,KAAG;AAAA,QAClC;AAiBK,QAAAA,GAAE,YAAY,OAAO,cAAc,SAAS;AAgB5C,QAAAA,GAAE,gBAAgB,OAAO,kBAAkB,SAAS;AAAA,MACzD,GAAO;AAGN,aAAO,SAAS;AAAA,IAEjB,CAAC;AAAA;;;;;;;;;AC1QA,KAAC,SAAU,MAAM,SAAS;AACO;AAEhC,QAAAN,kBAA2B,QAAQO,aAAiB;AAAA,MACtD;AAAA,IASA,GAAEN,gBAAM,SAAU,UAAU;AAE3B,OAAC,WAAY;AAET,YAAIK,KAAI;AACR,YAAI,QAAQA,GAAE;AACd,YAAI,OAAO,MAAM;AACjB,YAAI,QAAQA,GAAE;AACd,YAAI,OAAO,MAAM;AACjB,YAAI,SAASA,GAAE;AAKJ,eAAO,OAAO,KAAK,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAWjC,MAAM,SAAU,QAAQ,KAAK;AAEzB,qBAAS,KAAK,UAAU,IAAI,OAAO,KAAI;AAGvC,gBAAI,OAAO,OAAO,UAAU;AACxB,oBAAM,KAAK,MAAM,GAAG;AAAA,YACrC;AAGa,gBAAI,kBAAkB,OAAO;AAC7B,gBAAI,uBAAuB,kBAAkB;AAG7C,gBAAI,IAAI,WAAW,sBAAsB;AACrC,oBAAM,OAAO,SAAS,GAAG;AAAA,YAC1C;AAGa,gBAAI,MAAK;AAGT,gBAAI,OAAO,KAAK,QAAQ,IAAI,MAAK;AACjC,gBAAI,OAAO,KAAK,QAAQ,IAAI,MAAK;AAGjC,gBAAI,YAAY,KAAK;AACrB,gBAAI,YAAY,KAAK;AAGrB,qBAAS,IAAI,GAAG,IAAI,iBAAiB,KAAK;AACtC,wBAAU,CAAC,KAAK;AAChB,wBAAU,CAAC,KAAK;AAAA,YACjC;AACa,iBAAK,WAAW,KAAK,WAAW;AAGhC,iBAAK,MAAK;AAAA,UACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UASS,OAAO,WAAY;AAEf,gBAAI,SAAS,KAAK;AAGlB,mBAAO,MAAK;AACZ,mBAAO,OAAO,KAAK,KAAK;AAAA,UACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAcS,QAAQ,SAAU,eAAe;AAC7B,iBAAK,QAAQ,OAAO,aAAa;AAGjC,mBAAO;AAAA,UACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAgBS,UAAU,SAAU,eAAe;AAE/B,gBAAI,SAAS,KAAK;AAGlB,gBAAI,YAAY,OAAO,SAAS,aAAa;AAC7C,mBAAO,MAAK;AACZ,gBAAIM,QAAO,OAAO,SAAS,KAAK,MAAM,MAAK,EAAG,OAAO,SAAS,CAAC;AAE/D,mBAAOA;AAAA,UACpB;AAAA,QACA,CAAM;AAAA,MACN,GAAE;AAAA,IAGF,CAAC;AAAA;;;;;;;;;AC9IA,KAAC,SAAU,MAAM,SAAS,OAAO;AACA;AAEhC,QAAAZ,QAAA,UAA2B,QAAQO,YAAA,GAAmBG,cAAA,GAAqBC,aAAiB;AAAA,MAC9F;AAAA,IASA,GAAEV,gBAAM,SAAU,UAAU;AAE3B,OAAC,WAAY;AAET,YAAIK,KAAI;AACR,YAAI,QAAQA,GAAE;AACd,YAAI,OAAO,MAAM;AACjB,YAAI,YAAY,MAAM;AACtB,YAAI,SAASA,GAAE;AACf,YAAI,SAAS,OAAO;AACpB,YAAI,OAAO,OAAO;AAKlB,YAAI,SAAS,OAAO,SAAS,KAAK,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAQrC,KAAK,KAAK,OAAO;AAAA,YACb,SAAS,MAAI;AAAA,YACb,QAAQ;AAAA,YACR,YAAY;AAAA,UACzB,CAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAaD,MAAM,SAAU,KAAK;AACjB,iBAAK,MAAM,KAAK,IAAI,OAAO,GAAG;AAAA,UAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAcS,SAAS,SAAU,UAAU,MAAM;AAE/B,gBAAI,MAAM,KAAK;AAGf,gBAAIM,QAAO,KAAK,OAAO,IAAI,QAAQ,QAAQ;AAG3C,gBAAI,aAAa,UAAU,OAAM;AACjC,gBAAI,aAAa,UAAU,OAAO,CAAC,CAAU,CAAC;AAG9C,gBAAI,kBAAkB,WAAW;AACjC,gBAAI,kBAAkB,WAAW;AACjC,gBAAI,UAAU,IAAI;AAClB,gBAAI,aAAa,IAAI;AAGrB,mBAAO,gBAAgB,SAAS,SAAS;AACrC,kBAAI,QAAQA,MAAK,OAAO,IAAI,EAAE,SAAS,UAAU;AACjD,cAAAA,MAAK,MAAK;AAGV,kBAAI,aAAa,MAAM;AACvB,kBAAI,mBAAmB,WAAW;AAGlC,kBAAI,eAAe;AACnB,uBAAS,IAAI,GAAG,IAAI,YAAY,KAAK;AACjC,+BAAeA,MAAK,SAAS,YAAY;AACzC,gBAAAA,MAAK,MAAK;AAGV,oBAAI,oBAAoB,aAAa;AAGrC,yBAAS,IAAI,GAAG,IAAI,kBAAkB,KAAK;AACvC,6BAAW,CAAC,KAAK,kBAAkB,CAAC;AAAA,gBAC7D;AAAA,cACA;AAEiB,yBAAW,OAAO,KAAK;AACvB,8BAAgB,CAAC;AAAA,YAClC;AACa,uBAAW,WAAW,UAAU;AAEhC,mBAAO;AAAA,UACpB;AAAA,QACA,CAAM;AAmBD,QAAAN,GAAE,SAAS,SAAU,UAAU,MAAM,KAAK;AACtC,iBAAO,OAAO,OAAO,GAAG,EAAE,QAAQ,UAAU,IAAI;AAAA,QACzD;AAAA,MACA,GAAE;AAGD,aAAO,SAAS;AAAA,IAEjB,CAAC;AAAA;;;;;;;;;AChJA,KAAC,SAAU,MAAM,SAAS,OAAO;AACA;AAEhC,QAAAN,QAAA,UAA2B,QAAQO,YAAA,GAAmBG,YAAA,GAAmBC,aAAiB;AAAA,MAC5F;AAAA,IASA,GAAEV,gBAAM,SAAU,UAAU;AAE3B,OAAC,WAAY;AAET,YAAIK,KAAI;AACR,YAAI,QAAQA,GAAE;AACd,YAAI,OAAO,MAAM;AACjB,YAAI,YAAY,MAAM;AACtB,YAAI,SAASA,GAAE;AACf,YAAI,MAAM,OAAO;AAMjB,YAAI,SAAS,OAAO,SAAS,KAAK,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAQrC,KAAK,KAAK,OAAO;AAAA,YACb,SAAS,MAAI;AAAA,YACb,QAAQ;AAAA,YACR,YAAY;AAAA,UACzB,CAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAaD,MAAM,SAAU,KAAK;AACjB,iBAAK,MAAM,KAAK,IAAI,OAAO,GAAG;AAAA,UAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAcS,SAAS,SAAU,UAAU,MAAM;AAC/B,gBAAI;AAGJ,gBAAI,MAAM,KAAK;AAGf,gBAAI,SAAS,IAAI,OAAO,OAAM;AAG9B,gBAAI,aAAa,UAAU,OAAM;AAGjC,gBAAI,kBAAkB,WAAW;AACjC,gBAAI,UAAU,IAAI;AAClB,gBAAI,aAAa,IAAI;AAGrB,mBAAO,gBAAgB,SAAS,SAAS;AACrC,kBAAI,OAAO;AACP,uBAAO,OAAO,KAAK;AAAA,cACxC;AACiB,sBAAQ,OAAO,OAAO,QAAQ,EAAE,SAAS,IAAI;AAC7C,qBAAO,MAAK;AAGZ,uBAAS,IAAI,GAAG,IAAI,YAAY,KAAK;AACjC,wBAAQ,OAAO,SAAS,KAAK;AAC7B,uBAAO,MAAK;AAAA,cACjC;AAEiB,yBAAW,OAAO,KAAK;AAAA,YACxC;AACa,uBAAW,WAAW,UAAU;AAEhC,mBAAO;AAAA,UACpB;AAAA,QACA,CAAM;AAmBD,QAAAA,GAAE,SAAS,SAAU,UAAU,MAAM,KAAK;AACtC,iBAAO,OAAO,OAAO,GAAG,EAAE,QAAQ,UAAU,IAAI;AAAA,QACzD;AAAA,MACA,GAAE;AAGD,aAAO,SAAS;AAAA,IAEjB,CAAC;AAAA;;;;;;;;;ACrIA,KAAC,SAAU,MAAM,SAAS,OAAO;AACA;AAEhC,QAAAN,QAAA,UAA2B,QAAQO,YAAA,GAAmBG,cAAA,CAAmB;AAAA,MAC3E;AAAA,IASA,GAAET,gBAAM,SAAU,UAAU;AAK3B,eAAS,IAAI,UAAW,SAAUE,aAAW;AAEzC,YAAIG,KAAI;AACR,YAAI,QAAQA,GAAE;AACd,YAAI,OAAO,MAAM;AACjB,YAAI,YAAY,MAAM;AACtB,YAAI,yBAAyB,MAAM;AACnC,YAAI,QAAQA,GAAE;AACH,cAAM;AACjB,YAAI,SAAS,MAAM;AACnB,YAAI,SAASA,GAAE;AACf,YAAI,SAAS,OAAO;AAUpB,YAAI,SAAS,MAAM,SAAS,uBAAuB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAMtD,KAAK,KAAK,OAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAgBhB,iBAAiB,SAAU,KAAK,KAAK;AACjC,mBAAO,KAAK,OAAO,KAAK,iBAAiB,KAAK,GAAG;AAAA,UAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAgBS,iBAAiB,SAAU,KAAK,KAAK;AACjC,mBAAO,KAAK,OAAO,KAAK,iBAAiB,KAAK,GAAG;AAAA,UAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAaS,MAAM,SAAU,WAAW,KAAK,KAAK;AAEjC,iBAAK,MAAM,KAAK,IAAI,OAAO,GAAG;AAG9B,iBAAK,aAAa;AAClB,iBAAK,OAAO;AAGZ,iBAAK,MAAK;AAAA,UACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UASS,OAAO,WAAY;AAEf,mCAAuB,MAAM,KAAK,IAAI;AAGtC,iBAAK,SAAQ;AAAA,UAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAcS,SAAS,SAAU,YAAY;AAE3B,iBAAK,QAAQ,UAAU;AAGvB,mBAAO,KAAK,SAAQ;AAAA,UACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAgBS,UAAU,SAAU,YAAY;AAE5B,gBAAI,YAAY;AACZ,mBAAK,QAAQ,UAAU;AAAA,YACxC;AAGa,gBAAI,qBAAqB,KAAK,YAAW;AAEzC,mBAAO;AAAA,UACpB;AAAA,UAES,SAAS,MAAI;AAAA,UAEb,QAAQ,MAAI;AAAA,UAEZ,iBAAiB;AAAA,UAEjB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAejB,eAAgB,2BAAY;AACxB,qBAAS,qBAAqB,KAAK;AAC/B,kBAAI,OAAO,OAAO,UAAU;AACxB,uBAAO;AAAA,cAC5B,OAAwB;AACH,uBAAO;AAAA,cAC5B;AAAA,YACA;AAEa,mBAAO,SAAU,QAAQ;AACrB,qBAAO;AAAA,gBACH,SAAS,SAAU,SAAS,KAAK,KAAK;AAClC,yBAAO,qBAAqB,GAAG,EAAE,QAAQ,QAAQ,SAAS,KAAK,GAAG;AAAA,gBAC3F;AAAA,gBAEqB,SAAS,SAAU,YAAY,KAAK,KAAK;AACrC,yBAAO,qBAAqB,GAAG,EAAE,QAAQ,QAAQ,YAAY,KAAK,GAAG;AAAA,gBAC9F;AAAA,cACA;AAAA,YACA;AAAA,UACA,EAAU;AAAA,QACV,CAAM;AAOkB,cAAM,eAAe,OAAO,OAAO;AAAA,UAClD,aAAa,WAAY;AAErB,gBAAI,uBAAuB,KAAK,SAAS,IAAS;AAElD,mBAAO;AAAA,UACpB;AAAA,UAES,WAAW;AAAA,QACpB,CAAM;AAKD,YAAI,SAASA,GAAE,OAAO,CAAA;AAKtB,YAAI,kBAAkB,MAAM,kBAAkB,KAAK,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAatD,iBAAiB,SAAU,QAAQ,IAAI;AACnC,mBAAO,KAAK,UAAU,OAAO,QAAQ,EAAE;AAAA,UACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAcS,iBAAiB,SAAU,QAAQ,IAAI;AACnC,mBAAO,KAAK,UAAU,OAAO,QAAQ,EAAE;AAAA,UACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAYS,MAAM,SAAU,QAAQ,IAAI;AACxB,iBAAK,UAAU;AACf,iBAAK,MAAM;AAAA,UACxB;AAAA,QACA,CAAM;AAKD,YAAI,MAAM,OAAO,MAAO,WAAY;AAIhC,cAAIO,OAAM,gBAAgB,OAAM;AAKhC,UAAAA,KAAI,YAAYA,KAAI,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAWvB,cAAc,SAAU,OAAO,QAAQ;AAEnC,kBAAI,SAAS,KAAK;AAClB,kBAAI,YAAY,OAAO;AAGvB,uBAAS,KAAK,MAAM,OAAO,QAAQ,SAAS;AAC5C,qBAAO,aAAa,OAAO,MAAM;AAGjC,mBAAK,aAAa,MAAM,MAAM,QAAQ,SAAS,SAAS;AAAA,YACzE;AAAA,UACA,CAAU;AAKD,UAAAA,KAAI,YAAYA,KAAI,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAWvB,cAAc,SAAU,OAAO,QAAQ;AAEnC,kBAAI,SAAS,KAAK;AAClB,kBAAI,YAAY,OAAO;AAGvB,kBAAI,YAAY,MAAM,MAAM,QAAQ,SAAS,SAAS;AAGtD,qBAAO,aAAa,OAAO,MAAM;AACjC,uBAAS,KAAK,MAAM,OAAO,QAAQ,SAAS;AAG5C,mBAAK,aAAa;AAAA,YACnC;AAAA,UACA,CAAU;AAED,mBAAS,SAAS,OAAO,QAAQ,WAAW;AACxC,gBAAI;AAGJ,gBAAI,KAAK,KAAK;AAGd,gBAAI,IAAI;AACJ,sBAAQ;AAGR,mBAAK,MAAMV;AAAAA,YAC5B,OAAoB;AACH,sBAAQ,KAAK;AAAA,YAC9B;AAGa,qBAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAChC,oBAAM,SAAS,CAAC,KAAK,MAAM,CAAC;AAAA,YAC7C;AAAA,UACA;AAES,iBAAOU;AAAA,QAChB;AAKK,YAAI,QAAQP,GAAE,MAAM,CAAA;AAKpB,YAAI,QAAQ,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAatB,KAAK,SAAU,MAAM,WAAW;AAE5B,gBAAI,iBAAiB,YAAY;AAGjC,gBAAI,gBAAgB,iBAAiB,KAAK,WAAW;AAGrD,gBAAI,cAAe,iBAAiB,KAAO,iBAAiB,KAAO,iBAAiB,IAAK;AAGzF,gBAAI,eAAe,CAAA;AACnB,qBAAS,IAAI,GAAG,IAAI,eAAe,KAAK,GAAG;AACvC,2BAAa,KAAK,WAAW;AAAA,YAC9C;AACa,gBAAI,UAAU,UAAU,OAAO,cAAc,aAAa;AAG1D,iBAAK,OAAO,OAAO;AAAA,UAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAaS,OAAO,SAAU,MAAM;AAEnB,gBAAI,gBAAgB,KAAK,MAAO,KAAK,WAAW,MAAO,CAAC,IAAI;AAG5D,iBAAK,YAAY;AAAA,UAC9B;AAAA,QACA;AAOuB,cAAM,cAAc,OAAO,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAOhD,KAAK,OAAO,IAAI,OAAO;AAAA,YACnB,MAAM;AAAA,YACN,SAAS;AAAA,UACtB,CAAU;AAAA,UAED,OAAO,WAAY;AACf,gBAAI;AAGJ,mBAAO,MAAM,KAAK,IAAI;AAGtB,gBAAI,MAAM,KAAK;AACf,gBAAI,KAAK,IAAI;AACb,gBAAI,OAAO,IAAI;AAGf,gBAAI,KAAK,cAAc,KAAK,iBAAiB;AACzC,4BAAc,KAAK;AAAA,YACpC,OAAuE;AACtD,4BAAc,KAAK;AAEnB,mBAAK,iBAAiB;AAAA,YACvC;AAEa,gBAAI,KAAK,SAAS,KAAK,MAAM,aAAa,aAAa;AACnD,mBAAK,MAAM,KAAK,MAAM,MAAM,GAAG,KAAK;AAAA,YACrD,OAAoB;AACH,mBAAK,QAAQ,YAAY,KAAK,MAAM,MAAM,MAAM,GAAG,KAAK;AACxD,mBAAK,MAAM,YAAY;AAAA,YACxC;AAAA,UACA;AAAA,UAES,iBAAiB,SAAU,OAAO,QAAQ;AACtC,iBAAK,MAAM,aAAa,OAAO,MAAM;AAAA,UAClD;AAAA,UAES,aAAa,WAAY;AACrB,gBAAI;AAGJ,gBAAI,UAAU,KAAK,IAAI;AAGvB,gBAAI,KAAK,cAAc,KAAK,iBAAiB;AAEzC,sBAAQ,IAAI,KAAK,OAAO,KAAK,SAAS;AAGtC,qCAAuB,KAAK,SAAS,IAAS;AAAA,YAC/D,OAAuE;AAEtD,qCAAuB,KAAK,SAAS,IAAS;AAG9C,sBAAQ,MAAM,oBAAoB;AAAA,YACnD;AAEa,mBAAO;AAAA,UACpB;AAAA,UAES,WAAW,MAAI;AAAA,QACxB,CAAM;AAeD,YAAI,eAAe,MAAM,eAAe,KAAK,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAoBhD,MAAM,SAAU,cAAc;AAC1B,iBAAK,MAAM,YAAY;AAAA,UACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAiBS,UAAU,SAAU,WAAW;AAC3B,oBAAQ,aAAa,KAAK,WAAW,UAAU,IAAI;AAAA,UAChE;AAAA,QACA,CAAM;AAKD,YAAI,WAAWA,GAAE,SAAS,CAAA;AAK1B,YAAI,mBAAmB,SAAS,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UActC,WAAW,SAAU,cAAc;AAC/B,gBAAI;AAGJ,gBAAI,aAAa,aAAa;AAC9B,gBAAI,OAAO,aAAa;AAGxB,gBAAI,MAAM;AACN,0BAAY,UAAU,OAAO,CAAC,YAAY,UAAU,CAAC,EAAE,OAAO,IAAI,EAAE,OAAO,UAAU;AAAA,YACtG,OAAoB;AACH,0BAAY;AAAA,YAC7B;AAEa,mBAAO,UAAU,SAAS,MAAM;AAAA,UAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAeS,OAAO,SAAU,YAAY;AACzB,gBAAI;AAGJ,gBAAI,aAAa,OAAO,MAAM,UAAU;AAGxC,gBAAI,kBAAkB,WAAW;AAGjC,gBAAI,gBAAgB,CAAC,KAAK,cAAc,gBAAgB,CAAC,KAAK,YAAY;AAEtE,qBAAO,UAAU,OAAO,gBAAgB,MAAM,GAAG,CAAC,CAAC;AAGnD,8BAAgB,OAAO,GAAG,CAAC;AAC3B,yBAAW,YAAY;AAAA,YACxC;AAEa,mBAAO,aAAa,OAAO,EAAE,YAAwB,MAAY;AAAA,UAC9E;AAAA,QACA;AAKK,YAAI,qBAAqB,MAAM,qBAAqB,KAAK,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAM5D,KAAK,KAAK,OAAO;AAAA,YACb,QAAQ;AAAA,UACrB,CAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAoBD,SAAS,SAAU,QAAQ,SAAS,KAAK,KAAK;AAE1C,kBAAM,KAAK,IAAI,OAAO,GAAG;AAGzB,gBAAI,YAAY,OAAO,gBAAgB,KAAK,GAAG;AAC/C,gBAAI,aAAa,UAAU,SAAS,OAAO;AAG3C,gBAAI,YAAY,UAAU;AAG1B,mBAAO,aAAa,OAAO;AAAA,cACvB;AAAA,cACA;AAAA,cACA,IAAI,UAAU;AAAA,cACd,WAAW;AAAA,cACX,MAAM,UAAU;AAAA,cAChB,SAAS,UAAU;AAAA,cACnB,WAAW,OAAO;AAAA,cAClB,WAAW,IAAI;AAAA,YAChC,CAAc;AAAA,UACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAmBS,SAAS,SAAU,QAAQ,YAAY,KAAK,KAAK;AAE7C,kBAAM,KAAK,IAAI,OAAO,GAAG;AAGzB,yBAAa,KAAK,OAAO,YAAY,IAAI,MAAM;AAG/C,gBAAI,YAAY,OAAO,gBAAgB,KAAK,GAAG,EAAE,SAAS,WAAW,UAAU;AAE/E,mBAAO;AAAA,UACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAiBS,QAAQ,SAAU,YAAY,QAAQ;AAClC,gBAAI,OAAO,cAAc,UAAU;AAC/B,qBAAO,OAAO,MAAM,YAAY,IAAI;AAAA,YACrD,OAAoB;AACH,qBAAO;AAAA,YACxB;AAAA,UACA;AAAA,QACA,CAAM;AAKD,YAAI,QAAQA,GAAE,MAAM,CAAA;AAKpB,YAAI,aAAa,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAkB7B,SAAS,SAAU,UAAU,SAAS,QAAQ,MAAM,QAAQ;AAExD,gBAAI,CAAC,MAAM;AACP,qBAAO,UAAU,OAAO,KAAG,CAAC;AAAA,YAC7C;AAGa,gBAAI,CAAC,QAAQ;AACT,kBAAI,MAAM,OAAO,OAAO,EAAE,SAAS,UAAU,QAAQ,EAAE,QAAQ,UAAU,IAAI;AAAA,YAC9F,OAAoB;AACH,kBAAI,MAAM,OAAO,OAAO,EAAE,SAAS,UAAU,QAAQ,OAAc,CAAE,EAAE,QAAQ,UAAU,IAAI;AAAA,YAC9G;AAIa,gBAAI,KAAK,UAAU,OAAO,IAAI,MAAM,MAAM,OAAO,GAAG,SAAS,CAAC;AAC9D,gBAAI,WAAW,UAAU;AAGzB,mBAAO,aAAa,OAAO,EAAE,KAAU,IAAQ,MAAY;AAAA,UACxE;AAAA,QACA;AAMK,YAAI,sBAAsB,MAAM,sBAAsB,mBAAmB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAM5E,KAAK,mBAAmB,IAAI,OAAO;AAAA,YAC/B,KAAK;AAAA,UAClB,CAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAmBD,SAAS,SAAU,QAAQ,SAAS,UAAU,KAAK;AAE/C,kBAAM,KAAK,IAAI,OAAO,GAAG;AAGzB,gBAAI,gBAAgB,IAAI,IAAI,QAAQ,UAAU,OAAO,SAAS,OAAO,QAAQ,IAAI,MAAM,IAAI,MAAM;AAGjG,gBAAI,KAAK,cAAc;AAGvB,gBAAI,aAAa,mBAAmB,QAAQ,KAAK,MAAM,QAAQ,SAAS,cAAc,KAAK,GAAG;AAG9F,uBAAW,MAAM,aAAa;AAE9B,mBAAO;AAAA,UACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAmBS,SAAS,SAAU,QAAQ,YAAY,UAAU,KAAK;AAElD,kBAAM,KAAK,IAAI,OAAO,GAAG;AAGzB,yBAAa,KAAK,OAAO,YAAY,IAAI,MAAM;AAG/C,gBAAI,gBAAgB,IAAI,IAAI,QAAQ,UAAU,OAAO,SAAS,OAAO,QAAQ,WAAW,MAAM,IAAI,MAAM;AAGxG,gBAAI,KAAK,cAAc;AAGvB,gBAAI,YAAY,mBAAmB,QAAQ,KAAK,MAAM,QAAQ,YAAY,cAAc,KAAK,GAAG;AAEhG,mBAAO;AAAA,UACpB;AAAA,QACA,CAAM;AAAA,MACN;IAGA,CAAC;AAAA;;;;;;;;;AC93BA,KAAC,SAAU,MAAM,SAAS,OAAO;AACA;AAEhC,QAAAN,QAAA,UAA2B,QAAQO,YAAA,GAAmBG,kBAAA,CAAwB;AAAA,MAChF;AAAA,IASA,GAAET,gBAAM,SAAU,UAAU;AAK3B,eAAS,KAAK,MAAO,WAAY;AAC7B,YAAI,MAAM,SAAS,IAAI,gBAAgB,OAAM;AAE7C,YAAI,YAAY,IAAI,OAAO;AAAA,UACvB,cAAc,SAAU,OAAO,QAAQ;AAEnC,gBAAI,SAAS,KAAK;AAClB,gBAAI,YAAY,OAAO;AAEvB,wCAA4B,KAAK,MAAM,OAAO,QAAQ,WAAW,MAAM;AAGvE,iBAAK,aAAa,MAAM,MAAM,QAAQ,SAAS,SAAS;AAAA,UACrE;AAAA,QACA,CAAM;AAED,YAAI,YAAY,IAAI,OAAO;AAAA,UACvB,cAAc,SAAU,OAAO,QAAQ;AAEnC,gBAAI,SAAS,KAAK;AAClB,gBAAI,YAAY,OAAO;AAGvB,gBAAI,YAAY,MAAM,MAAM,QAAQ,SAAS,SAAS;AAEtD,wCAA4B,KAAK,MAAM,OAAO,QAAQ,WAAW,MAAM;AAGvE,iBAAK,aAAa;AAAA,UAC/B;AAAA,QACA,CAAM;AAED,iBAAS,4BAA4B,OAAO,QAAQ,WAAW,QAAQ;AACnE,cAAI;AAGJ,cAAI,KAAK,KAAK;AAGd,cAAI,IAAI;AACJ,wBAAY,GAAG,MAAM,CAAC;AAGtB,iBAAK,MAAM;AAAA,UACxB,OAAgB;AACH,wBAAY,KAAK;AAAA,UAC9B;AACS,iBAAO,aAAa,WAAW,CAAC;AAGhC,mBAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAChC,kBAAM,SAAS,CAAC,KAAK,UAAU,CAAC;AAAA,UAC7C;AAAA,QACA;AAEK,eAAO;AAAA,MACZ;AAGC,aAAO,SAAS,KAAK;AAAA,IAEtB,CAAC;AAAA;;;;;;;;;AC/EA,KAAC,SAAU,MAAM,SAAS,OAAO;AACA;AAEhC,QAAAD,QAAA,UAA2B,QAAQO,YAAA,GAAmBG,kBAAA,CAAwB;AAAA,MAChF;AAAA,IASA,GAAET,gBAAM,SAAU,UAAU;AAK3B,eAAS,KAAK,MAAO,WAAY;AAC7B,YAAI,MAAM,SAAS,IAAI,gBAAgB,OAAM;AAE7C,YAAI,YAAY,IAAI,YAAY,IAAI,OAAO;AAAA,UACvC,cAAc,SAAU,OAAO,QAAQ;AAEnC,gBAAI,SAAS,KAAK;AAClB,gBAAI,YAAY,OAAO;AACvB,gBAAI,KAAK,KAAK;AACd,gBAAI,UAAU,KAAK;AAGnB,gBAAI,IAAI;AACJ,wBAAU,KAAK,WAAW,GAAG,MAAM,CAAC;AAGpC,mBAAK,MAAM;AAAA,YAC5B;AACa,gBAAI,YAAY,QAAQ,MAAM,CAAC;AAC/B,mBAAO,aAAa,WAAW,CAAC;AAGhC,oBAAQ,YAAY,CAAC,IAAK,QAAQ,YAAY,CAAC,IAAI,IAAK;AAGxD,qBAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAChC,oBAAM,SAAS,CAAC,KAAK,UAAU,CAAC;AAAA,YACjD;AAAA,UACA;AAAA,QACA,CAAM;AAED,YAAI,YAAY;AAEhB,eAAO;AAAA,MACZ;AAGC,aAAO,SAAS,KAAK;AAAA,IAEtB,CAAC;AAAA;;;;;;;;;ACzDA,KAAC,SAAU,MAAM,SAAS,OAAO;AACA;AAEhC,QAAAD,QAAA,UAA2B,QAAQO,YAAA,GAAmBG,kBAAA,CAAwB;AAAA,MAChF;AAAA,IASA,GAAET,gBAAM,SAAU,UAAU;AAAA,MAE5B;AAAA;AAAA;AAAA;AAAA;AAKC,eAAS,KAAK,aAAc,WAAY;AACpC,YAAI,aAAa,SAAS,IAAI,gBAAgB,OAAM;AAEvD,iBAAS,QAAQ,MACjB;AACC,eAAM,QAAQ,KAAM,SAAU,KAAM;AACpC,gBAAI,KAAM,QAAQ,KAAI;AACtB,gBAAI,KAAM,QAAQ,IAAG;AACrB,gBAAI,KAAK,OAAO;AAEhB,gBAAI,OAAO,KACX;AACA,mBAAK;AACL,kBAAI,OAAO,KACX;AACC,qBAAK;AACL,oBAAI,OAAO,KACX;AACC,uBAAK;AAAA,gBACV,OAEI;AACC,oBAAE;AAAA,gBACP;AAAA,cACA,OAEG;AACC,kBAAE;AAAA,cACN;AAAA,YACA,OAEG;AACA,gBAAE;AAAA,YACL;AAEG,mBAAO;AACP,oBAAS,MAAM;AACf,oBAAS,MAAM;AACf,oBAAQ;AAAA,UACX,OAEG;AACA,oBAAS,KAAQ;AAAA,UACpB;AACG,iBAAO;AAAA,QACV;AAEE,iBAAS,WAAW,SACpB;AACC,eAAK,QAAQ,CAAC,IAAI,QAAQ,QAAQ,CAAC,CAAC,OAAO,GAC3C;AAEC,oBAAQ,CAAC,IAAI,QAAQ,QAAQ,CAAC,CAAC;AAAA,UACnC;AACG,iBAAO;AAAA,QACV;AAEK,YAAI,YAAY,WAAW,YAAY,WAAW,OAAO;AAAA,UACrD,cAAc,SAAU,OAAO,QAAQ;AAEnC,gBAAI,SAAS,KAAK;AAClB,gBAAI,YAAY,OAAO;AACvB,gBAAI,KAAK,KAAK;AACd,gBAAI,UAAU,KAAK;AAGnB,gBAAI,IAAI;AACJ,wBAAU,KAAK,WAAW,GAAG,MAAM,CAAC;AAGpC,mBAAK,MAAM;AAAA,YAC5B;AAEI,uBAAW,OAAO;AAElB,gBAAI,YAAY,QAAQ,MAAM,CAAC;AACtB,mBAAO,aAAa,WAAW,CAAC;AAGhC,qBAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAChC,oBAAM,SAAS,CAAC,KAAK,UAAU,CAAC;AAAA,YACjD;AAAA,UACA;AAAA,QACA,CAAM;AAED,mBAAW,YAAY;AAEvB,eAAO;AAAA,MACZ;AAKC,aAAO,SAAS,KAAK;AAAA,IAEtB,CAAC;AAAA;;;;;;;;;ACnHA,KAAC,SAAU,MAAM,SAAS,OAAO;AACA;AAEhC,QAAAD,QAAA,UAA2B,QAAQO,YAAA,GAAmBG,kBAAA,CAAwB;AAAA,MAChF;AAAA,IASA,GAAET,gBAAM,SAAU,UAAU;AAK3B,eAAS,KAAK,MAAO,WAAY;AAC7B,YAAI,MAAM,SAAS,IAAI,gBAAgB,OAAM;AAE7C,YAAI,YAAY,IAAI,YAAY,IAAI,OAAO;AAAA,UACvC,cAAc,SAAU,OAAO,QAAQ;AAEnC,gBAAI,SAAS,KAAK;AAClB,gBAAI,YAAY,OAAO;AACvB,gBAAI,KAAK,KAAK;AACd,gBAAI,YAAY,KAAK;AAGrB,gBAAI,IAAI;AACJ,0BAAY,KAAK,aAAa,GAAG,MAAM,CAAC;AAGxC,mBAAK,MAAM;AAAA,YAC5B;AACa,mBAAO,aAAa,WAAW,CAAC;AAGhC,qBAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAChC,oBAAM,SAAS,CAAC,KAAK,UAAU,CAAC;AAAA,YACjD;AAAA,UACA;AAAA,QACA,CAAM;AAED,YAAI,YAAY;AAEhB,eAAO;AAAA,MACZ;AAGC,aAAO,SAAS,KAAK;AAAA,IAEtB,CAAC;AAAA;;;;;;;;;ACrDA,KAAC,SAAU,MAAM,SAAS,OAAO;AACA;AAEhC,QAAAD,QAAA,UAA2B,QAAQO,YAAA,GAAmBG,kBAAA,CAAwB;AAAA,MAChF;AAAA,IASA,GAAET,gBAAM,SAAU,UAAU;AAK3B,eAAS,KAAK,MAAO,WAAY;AAC7B,YAAI,MAAM,SAAS,IAAI,gBAAgB,OAAM;AAE7C,YAAI,YAAY,IAAI,OAAO;AAAA,UACvB,cAAc,SAAU,OAAO,QAAQ;AACnC,iBAAK,QAAQ,aAAa,OAAO,MAAM;AAAA,UACpD;AAAA,QACA,CAAM;AAED,YAAI,YAAY,IAAI,OAAO;AAAA,UACvB,cAAc,SAAU,OAAO,QAAQ;AACnC,iBAAK,QAAQ,aAAa,OAAO,MAAM;AAAA,UACpD;AAAA,QACA,CAAM;AAED,eAAO;AAAA,MACZ;AAGC,aAAO,SAAS,KAAK;AAAA,IAEtB,CAAC;AAAA;;;;;;;;;ACvCA,KAAC,SAAU,MAAM,SAAS,OAAO;AACA;AAEhC,QAAAD,QAAA,UAA2B,QAAQO,YAAA,GAAmBG,kBAAA,CAAwB;AAAA,MAChF;AAAA,IASA,GAAET,gBAAM,SAAU,UAAU;AAK3B,eAAS,IAAI,WAAW;AAAA,QACpB,KAAK,SAAU,MAAM,WAAW;AAE5B,cAAI,eAAe,KAAK;AACxB,cAAI,iBAAiB,YAAY;AAGjC,cAAI,gBAAgB,iBAAiB,eAAe;AAGpD,cAAI,cAAc,eAAe,gBAAgB;AAGjD,eAAK,MAAK;AACV,eAAK,MAAM,gBAAgB,CAAC,KAAK,iBAAkB,KAAM,cAAc,IAAK;AAC5E,eAAK,YAAY;AAAA,QAC1B;AAAA,QAEK,OAAO,SAAU,MAAM;AAEnB,cAAI,gBAAgB,KAAK,MAAO,KAAK,WAAW,MAAO,CAAC,IAAI;AAG5D,eAAK,YAAY;AAAA,QAC1B;AAAA,MACA;AAGC,aAAO,SAAS,IAAI;AAAA,IAErB,CAAC;AAAA;;;;;;;;;AChDA,KAAC,SAAU,MAAM,SAAS,OAAO;AACA;AAEhC,QAAAD,QAAA,UAA2B,QAAQO,YAAA,GAAmBG,kBAAA,CAAwB;AAAA,MAChF;AAAA,IASA,GAAET,gBAAM,SAAU,UAAU;AAK3B,eAAS,IAAI,WAAW;AAAA,QACpB,KAAK,SAAU,MAAM,WAAW;AAE5B,cAAI,iBAAiB,YAAY;AAGjC,cAAI,gBAAgB,iBAAiB,KAAK,WAAW;AAGrD,eAAK,OAAO,SAAS,IAAI,UAAU,OAAO,gBAAgB,CAAC,CAAC,EACvD,OAAO,SAAS,IAAI,UAAU,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;AAAA,QAC5E;AAAA,QAEK,OAAO,SAAU,MAAM;AAEnB,cAAI,gBAAgB,KAAK,MAAO,KAAK,WAAW,MAAO,CAAC,IAAI;AAG5D,eAAK,YAAY;AAAA,QAC1B;AAAA,MACA;AAGC,aAAO,SAAS,IAAI;AAAA,IAErB,CAAC;AAAA;;;;;;;;;AC3CA,KAAC,SAAU,MAAM,SAAS,OAAO;AACA;AAEhC,QAAAD,QAAA,UAA2B,QAAQO,YAAA,GAAmBG,kBAAA,CAAwB;AAAA,MAChF;AAAA,IASA,GAAET,gBAAM,SAAU,UAAU;AAK3B,eAAS,IAAI,WAAW;AAAA,QACpB,KAAK,SAAU,MAAM,WAAW;AAE5B,eAAK,OAAO,SAAS,IAAI,UAAU,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC;AAG1D,mBAAS,IAAI,YAAY,IAAI,MAAM,SAAS;AAAA,QACrD;AAAA,QAEK,OAAO,SAAU,MAAM;AAEnB,mBAAS,IAAI,YAAY,MAAM,IAAI;AAGnC,eAAK;AAAA,QACd;AAAA,MACA;AAGC,aAAO,SAAS,IAAI;AAAA,IAErB,CAAC;AAAA;;;;;;;;;ACvCA,KAAC,SAAU,MAAM,SAAS,OAAO;AACA;AAEhC,QAAAD,QAAA,UAA2B,QAAQO,YAAA,GAAmBG,kBAAA,CAAwB;AAAA,MAChF;AAAA,IASA,GAAET,gBAAM,SAAU,UAAU;AAK3B,eAAS,IAAI,cAAc;AAAA,QACvB,KAAK,SAAU,MAAM,WAAW;AAE5B,cAAI,iBAAiB,YAAY;AAGjC,eAAK,MAAK;AACV,eAAK,YAAY,kBAAmB,KAAK,WAAW,kBAAmB;AAAA,QAChF;AAAA,QAEK,OAAO,SAAU,MAAM;AAEnB,cAAI,YAAY,KAAK;AAGrB,cAAI,IAAI,KAAK,WAAW;AACxB,mBAAS,IAAI,KAAK,WAAW,GAAG,KAAK,GAAG,KAAK;AACzC,gBAAM,UAAU,MAAM,CAAC,MAAO,KAAM,IAAI,IAAK,IAAM,KAAO;AACtD,mBAAK,WAAW,IAAI;AACpB;AAAA,YACjB;AAAA,UACA;AAAA,QACA;AAAA,MACA;AAGC,aAAO,SAAS,IAAI;AAAA,IAErB,CAAC;AAAA;;;;;;;;;AC9CA,KAAC,SAAU,MAAM,SAAS,OAAO;AACA;AAEhC,QAAAD,QAAA,UAA2B,QAAQO,YAAA,GAAmBG,kBAAA,CAAwB;AAAA,MAChF;AAAA,IASA,GAAET,gBAAM,SAAU,UAAU;AAK3B,eAAS,IAAI,YAAY;AAAA,QACrB,KAAK,WAAY;AAAA,QACtB;AAAA,QAEK,OAAO,WAAY;AAAA,QACxB;AAAA,MACA;AAGC,aAAO,SAAS,IAAI;AAAA,IAErB,CAAC;AAAA;;;;;;;;;AC7BA,KAAC,SAAU,MAAM,SAAS,OAAO;AACA;AAEhC,QAAAD,QAAA,UAA2B,QAAQO,YAAA,GAAmBG,kBAAA,CAAwB;AAAA,MAChF;AAAA,IASA,GAAET,gBAAM,SAAU,UAAU;AAE3B,OAAC,SAAUE,aAAW;AAElB,YAAIG,KAAI;AACR,YAAI,QAAQA,GAAE;AACd,YAAI,eAAe,MAAM;AACzB,YAAI,QAAQA,GAAE;AACd,YAAI,MAAM,MAAM;AAChB,YAAI,WAAWA,GAAE;AAEE,iBAAS,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAc9B,WAAW,SAAU,cAAc;AAC/B,mBAAO,aAAa,WAAW,SAAS,GAAG;AAAA,UACxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAeS,OAAO,SAAU,OAAO;AACpB,gBAAI,aAAa,IAAI,MAAM,KAAK;AAChC,mBAAO,aAAa,OAAO,EAAE,WAAsB,CAAE;AAAA,UAClE;AAAA,QACA;AAAA,MACA,GAAE;AAGD,aAAO,SAAS,OAAO;AAAA,IAExB,CAAC;AAAA;;;;;;;;;ACjEA,KAAC,SAAU,MAAM,SAAS,OAAO;AACA;AAEhC,QAAAN,QAAA,UAA2B,QAAQO,eAAmBG,oBAAyBC,cAAkBG,iBAAqBC,mBAAwB;AAAA,MAChJ;AAAA,IASA,GAAEd,gBAAM,SAAU,UAAU;AAE3B,OAAC,WAAY;AAET,YAAIK,KAAI;AACR,YAAI,QAAQA,GAAE;AACd,YAAI,cAAc,MAAM;AACxB,YAAI,SAASA,GAAE;AAGf,YAAI,OAAO,CAAA;AACX,YAAI,WAAW,CAAA;AACf,YAAI,YAAY,CAAA;AAChB,YAAI,YAAY,CAAA;AAChB,YAAI,YAAY,CAAA;AAChB,YAAI,YAAY,CAAA;AAChB,YAAI,gBAAgB,CAAA;AACpB,YAAI,gBAAgB,CAAA;AACpB,YAAI,gBAAgB,CAAA;AACpB,YAAI,gBAAgB,CAAA;AAGpB,SAAC,WAAY;AAET,cAAI,IAAI,CAAA;AACR,mBAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC1B,gBAAI,IAAI,KAAK;AACT,gBAAE,CAAC,IAAI,KAAK;AAAA,YAC7B,OAAoB;AACH,gBAAE,CAAC,IAAK,KAAK,IAAK;AAAA,YACnC;AAAA,UACA;AAGS,cAAI,IAAI;AACR,cAAI,KAAK;AACT,mBAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAE1B,gBAAI,KAAK,KAAM,MAAM,IAAM,MAAM,IAAM,MAAM,IAAM,MAAM;AACzD,iBAAM,OAAO,IAAM,KAAK,MAAQ;AAChC,iBAAK,CAAC,IAAI;AACV,qBAAS,EAAE,IAAI;AAGf,gBAAI,KAAK,EAAE,CAAC;AACZ,gBAAI,KAAK,EAAE,EAAE;AACb,gBAAI,KAAK,EAAE,EAAE;AAGb,gBAAI,IAAK,EAAE,EAAE,IAAI,MAAU,KAAK;AAChC,sBAAU,CAAC,IAAK,KAAK,KAAO,MAAM;AAClC,sBAAU,CAAC,IAAK,KAAK,KAAO,MAAM;AAClC,sBAAU,CAAC,IAAK,KAAK,IAAO,MAAM;AAClC,sBAAU,CAAC,IAAI;AAGf,gBAAI,IAAK,KAAK,WAAc,KAAK,QAAY,KAAK,MAAU,IAAI;AAChE,0BAAc,EAAE,IAAK,KAAK,KAAO,MAAM;AACvC,0BAAc,EAAE,IAAK,KAAK,KAAO,MAAM;AACvC,0BAAc,EAAE,IAAK,KAAK,IAAO,MAAM;AACvC,0BAAc,EAAE,IAAI;AAGpB,gBAAI,CAAC,GAAG;AACJ,kBAAI,KAAK;AAAA,YAC1B,OAAoB;AACH,kBAAI,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AACxB,oBAAM,EAAE,EAAE,EAAE,CAAC;AAAA,YAC9B;AAAA,UACA;AAAA,QACA,GAAM;AAGD,YAAI,OAAO,CAAC,GAAM,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,KAAM,IAAM,EAAI;AAK5E,YAAI,MAAM,OAAO,MAAM,YAAY,OAAO;AAAA,UACtC,UAAU,WAAY;AAClB,gBAAI;AAGJ,gBAAI,KAAK,YAAY,KAAK,mBAAmB,KAAK,MAAM;AACpD;AAAA,YACjB;AAGa,gBAAI,MAAM,KAAK,iBAAiB,KAAK;AACrC,gBAAI,WAAW,IAAI;AACnB,gBAAI,UAAU,IAAI,WAAW;AAG7B,gBAAI,UAAU,KAAK,WAAW,UAAU;AAGxC,gBAAI,UAAU,UAAU,KAAK;AAG7B,gBAAI,cAAc,KAAK,eAAe,CAAA;AACtC,qBAAS,QAAQ,GAAG,QAAQ,QAAQ,SAAS;AACzC,kBAAI,QAAQ,SAAS;AACjB,4BAAY,KAAK,IAAI,SAAS,KAAK;AAAA,cACxD,OAAwB;AACH,oBAAI,YAAY,QAAQ,CAAC;AAEzB,oBAAI,EAAE,QAAQ,UAAU;AAEpB,sBAAK,KAAK,IAAM,MAAM;AAGtB,sBAAK,KAAK,MAAM,EAAE,KAAK,KAAO,KAAM,MAAM,KAAM,GAAI,KAAK,KAAO,KAAM,MAAM,IAAK,GAAI,KAAK,IAAK,KAAK,IAAI,GAAI;AAG5G,uBAAK,KAAM,QAAQ,UAAW,CAAC,KAAK;AAAA,gBAC7D,WAAgC,UAAU,KAAK,QAAQ,WAAW,GAAG;AAE5C,sBAAK,KAAK,MAAM,EAAE,KAAK,KAAO,KAAM,MAAM,KAAM,GAAI,KAAK,KAAO,KAAM,MAAM,IAAK,GAAI,KAAK,IAAK,KAAK,IAAI,GAAI;AAAA,gBACrI;AAEqB,4BAAY,KAAK,IAAI,YAAY,QAAQ,OAAO,IAAI;AAAA,cACzE;AAAA,YACA;AAGa,gBAAI,iBAAiB,KAAK,kBAAkB,CAAA;AAC5C,qBAAS,WAAW,GAAG,WAAW,QAAQ,YAAY;AAClD,kBAAI,QAAQ,SAAS;AAErB,kBAAI,WAAW,GAAG;AACd,oBAAI,IAAI,YAAY,KAAK;AAAA,cAC9C,OAAwB;AACH,oBAAI,IAAI,YAAY,QAAQ,CAAC;AAAA,cAClD;AAEiB,kBAAI,WAAW,KAAK,SAAS,GAAG;AAC5B,+BAAe,QAAQ,IAAI;AAAA,cAChD,OAAwB;AACH,+BAAe,QAAQ,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC,IAAI,cAAc,KAAM,MAAM,KAAM,GAAI,CAAC,IACrE,cAAc,KAAM,MAAM,IAAK,GAAI,CAAC,IAAI,cAAc,KAAK,IAAI,GAAI,CAAC;AAAA,cACpH;AAAA,YACA;AAAA,UACA;AAAA,UAES,cAAc,SAAU,GAAG,QAAQ;AAC/B,iBAAK,cAAc,GAAG,QAAQ,KAAK,cAAc,WAAW,WAAW,WAAW,WAAW,IAAI;AAAA,UAC9G;AAAA,UAES,cAAc,SAAU,GAAG,QAAQ;AAE/B,gBAAI,IAAI,EAAE,SAAS,CAAC;AACpB,cAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC;AAC5B,cAAE,SAAS,CAAC,IAAI;AAEhB,iBAAK,cAAc,GAAG,QAAQ,KAAK,iBAAiB,eAAe,eAAe,eAAe,eAAe,QAAQ;AAGxH,gBAAI,IAAI,EAAE,SAAS,CAAC;AACpB,cAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC;AAC5B,cAAE,SAAS,CAAC,IAAI;AAAA,UAC7B;AAAA,UAES,eAAe,SAAU,GAAG,QAAQ,aAAaU,YAAWC,YAAWC,YAAWC,YAAWC,OAAM;AAE/F,gBAAI,UAAU,KAAK;AAGnB,gBAAI,KAAK,EAAE,MAAM,IAAQ,YAAY,CAAC;AACtC,gBAAI,KAAK,EAAE,SAAS,CAAC,IAAI,YAAY,CAAC;AACtC,gBAAI,KAAK,EAAE,SAAS,CAAC,IAAI,YAAY,CAAC;AACtC,gBAAI,KAAK,EAAE,SAAS,CAAC,IAAI,YAAY,CAAC;AAGtC,gBAAI,QAAQ;AAGZ,qBAAS,QAAQ,GAAG,QAAQ,SAAS,SAAS;AAE1C,kBAAI,KAAKJ,WAAU,OAAO,EAAE,IAAIC,WAAW,OAAO,KAAM,GAAI,IAAIC,WAAW,OAAO,IAAK,GAAI,IAAIC,WAAU,KAAK,GAAI,IAAI,YAAY,OAAO;AACzI,kBAAI,KAAKH,WAAU,OAAO,EAAE,IAAIC,WAAW,OAAO,KAAM,GAAI,IAAIC,WAAW,OAAO,IAAK,GAAI,IAAIC,WAAU,KAAK,GAAI,IAAI,YAAY,OAAO;AACzI,kBAAI,KAAKH,WAAU,OAAO,EAAE,IAAIC,WAAW,OAAO,KAAM,GAAI,IAAIC,WAAW,OAAO,IAAK,GAAI,IAAIC,WAAU,KAAK,GAAI,IAAI,YAAY,OAAO;AACzI,kBAAI,KAAKH,WAAU,OAAO,EAAE,IAAIC,WAAW,OAAO,KAAM,GAAI,IAAIC,WAAW,OAAO,IAAK,GAAI,IAAIC,WAAU,KAAK,GAAI,IAAI,YAAY,OAAO;AAGzI,mBAAK;AACL,mBAAK;AACL,mBAAK;AACL,mBAAK;AAAA,YACtB;AAGa,gBAAI,MAAOC,MAAK,OAAO,EAAE,KAAK,KAAOA,MAAM,OAAO,KAAM,GAAI,KAAK,KAAOA,MAAM,OAAO,IAAK,GAAI,KAAK,IAAKA,MAAK,KAAK,GAAI,KAAK,YAAY,OAAO;AAC9I,gBAAI,MAAOA,MAAK,OAAO,EAAE,KAAK,KAAOA,MAAM,OAAO,KAAM,GAAI,KAAK,KAAOA,MAAM,OAAO,IAAK,GAAI,KAAK,IAAKA,MAAK,KAAK,GAAI,KAAK,YAAY,OAAO;AAC9I,gBAAI,MAAOA,MAAK,OAAO,EAAE,KAAK,KAAOA,MAAM,OAAO,KAAM,GAAI,KAAK,KAAOA,MAAM,OAAO,IAAK,GAAI,KAAK,IAAKA,MAAK,KAAK,GAAI,KAAK,YAAY,OAAO;AAC9I,gBAAI,MAAOA,MAAK,OAAO,EAAE,KAAK,KAAOA,MAAM,OAAO,KAAM,GAAI,KAAK,KAAOA,MAAM,OAAO,IAAK,GAAI,KAAK,IAAKA,MAAK,KAAK,GAAI,KAAK,YAAY,OAAO;AAG9I,cAAE,MAAM,IAAQ;AAChB,cAAE,SAAS,CAAC,IAAI;AAChB,cAAE,SAAS,CAAC,IAAI;AAChB,cAAE,SAAS,CAAC,IAAI;AAAA,UAC7B;AAAA,UAES,SAAS,MAAI;AAAA,QACtB,CAAM;AAUD,QAAAd,GAAE,MAAM,YAAY,cAAc,GAAG;AAAA,MAC1C,GAAE;AAGD,aAAO,SAAS;AAAA,IAEjB,CAAC;AAAA;;;;;;;;;ACzOA,KAAC,SAAU,MAAM,SAAS,OAAO;AACA;AAEhC,QAAAN,QAAA,UAA2B,QAAQO,eAAmBG,oBAAyBC,cAAkBG,iBAAqBC,mBAAwB;AAAA,MAChJ;AAAA,IASA,GAAEd,gBAAM,SAAU,UAAU;AAE3B,OAAC,WAAY;AAET,YAAIK,KAAI;AACR,YAAI,QAAQA,GAAE;AACd,YAAI,YAAY,MAAM;AACtB,YAAI,cAAc,MAAM;AACxB,YAAI,SAASA,GAAE;AAGf,YAAI,MAAM;AAAA,UACN;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAC5B;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAC5B;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAC5B;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAC5B;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAC5B;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAC5B;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,QACrC;AAGK,YAAI,MAAM;AAAA,UACN;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UACpB;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UACpB;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UACpB;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UACpB;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UACpB;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UACpB;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UACpB;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,QAC7B;AAGK,YAAI,aAAa,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAGhF,YAAI,SAAS;AAAA,UACT;AAAA,YACI,GAAK;AAAA,YACL,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,WAAW;AAAA,YACX,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,GAAK;AAAA,YACL,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,WAAW;AAAA,YACX,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA;UAEhB;AAAA,YACI,GAAK;AAAA,YACL,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,WAAW;AAAA,YACX,WAAW;AAAA,YACX,WAAW;AAAA,YACX,WAAW;AAAA,YACX,WAAW;AAAA,YACX,WAAW;AAAA,YACX,WAAW;AAAA,YACX,WAAW;AAAA,YACX,WAAW;AAAA,YACX,WAAW;AAAA,YACX,SAAU;AAAA,YACV,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,WAAW;AAAA,YACX,WAAW;AAAA,YACX,WAAW;AAAA,YACX,WAAW;AAAA,YACX,WAAW;AAAA,YACX,WAAW;AAAA,YACX,WAAW;AAAA,YACX,WAAW;AAAA,YACX,WAAW;AAAA,YACX,WAAW;AAAA,YACX,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA,YACZ,WAAY;AAAA;UAEhB;AAAA,YACI,GAAK;AAAA,YACL,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAS;AAAA,YACT,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA,YACX,UAAW;AAAA;UAEf;AAAA,YACI,GAAK;AAAA,YACL,OAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,OAAQ;AAAA,YACR,OAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,SAAS;AAAA,YACT,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA,YACV,SAAU;AAAA;UAEd;AAAA,YACI,GAAK;AAAA,YACL,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,OAAQ;AAAA,YACR,OAAQ;AAAA,YACR,OAAQ;AAAA,YACR,OAAQ;AAAA,YACR,OAAQ;AAAA,YACR,OAAQ;AAAA,YACR,OAAQ;AAAA,YACR,OAAQ;AAAA,YACR,OAAQ;AAAA,YACR,OAAQ;AAAA,YACR,OAAQ;AAAA,YACR,OAAQ;AAAA,YACR,OAAQ;AAAA,YACR,MAAO;AAAA,YACP,MAAQ;AAAA,YACR,OAAQ;AAAA,YACR,OAAQ;AAAA,YACR,OAAQ;AAAA,YACR,OAAQ;AAAA,YACR,OAAQ;AAAA,YACR,OAAQ;AAAA,YACR,OAAQ;AAAA,YACR,OAAQ;AAAA,YACR,OAAQ;AAAA,YACR,OAAQ;AAAA,YACR,OAAQ;AAAA,YACR,OAAQ;AAAA,YACR,OAAQ;AAAA,YACR,OAAQ;AAAA,YACR,OAAS;AAAA,YACT,OAAS;AAAA,YACT,OAAS;AAAA,YACT,OAAS;AAAA,YACT,OAAS;AAAA,YACT,OAAS;AAAA,YACT,OAAS;AAAA,YACT,OAAS;AAAA,YACT,OAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,OAAS;AAAA,YACT,OAAS;AAAA,YACT,OAAS;AAAA,YACT,OAAS;AAAA,YACT,OAAS;AAAA,YACT,OAAS;AAAA,YACT,OAAS;AAAA,YACT,OAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA,YACT,QAAS;AAAA;UAEb;AAAA,YACI,GAAK;AAAA,YACL,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,MAAO;AAAA,YACP,MAAO;AAAA,YACP,MAAO;AAAA,YACP,MAAO;AAAA,YACP,MAAO;AAAA,YACP,MAAO;AAAA,YACP,MAAO;AAAA,YACP,MAAO;AAAA,YACP,MAAO;AAAA,YACP,MAAO;AAAA,YACP,MAAO;AAAA,YACP,MAAO;AAAA,YACP,KAAM;AAAA,YACN,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,MAAO;AAAA,YACP,MAAO;AAAA,YACP,MAAO;AAAA,YACP,MAAO;AAAA,YACP,MAAO;AAAA,YACP,MAAO;AAAA,YACP,MAAO;AAAA,YACP,MAAO;AAAA,YACP,MAAO;AAAA,YACP,MAAO;AAAA,YACP,MAAO;AAAA,YACP,MAAO;AAAA,YACP,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,MAAQ;AAAA,YACR,MAAQ;AAAA;UAEZ;AAAA,YACI,GAAK;AAAA,YACL,IAAM;AAAA,YACN,IAAM;AAAA,YACN,IAAM;AAAA,YACN,IAAM;AAAA,YACN,IAAM;AAAA,YACN,IAAM;AAAA,YACN,KAAM;AAAA,YACN,KAAM;AAAA,YACN,KAAM;AAAA,YACN,KAAM;AAAA,YACN,KAAM;AAAA,YACN,KAAM;AAAA,YACN,KAAM;AAAA,YACN,KAAM;AAAA,YACN,KAAM;AAAA,YACN,GAAK;AAAA,YACL,IAAM;AAAA,YACN,IAAM;AAAA,YACN,IAAM;AAAA,YACN,IAAM;AAAA,YACN,IAAM;AAAA,YACN,KAAM;AAAA,YACN,KAAM;AAAA,YACN,KAAM;AAAA,YACN,KAAM;AAAA,YACN,KAAM;AAAA,YACN,KAAM;AAAA,YACN,KAAM;AAAA,YACN,KAAM;AAAA,YACN,KAAM;AAAA,YACN,KAAM;AAAA,YACN,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA,YACP,KAAO;AAAA;UAEX;AAAA,YACI,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,YACL,GAAK;AAAA,YACL,IAAK;AAAA,YACL,IAAK;AAAA,YACL,IAAK;AAAA,YACL,IAAK;AAAA,YACL,IAAK;AAAA,YACL,IAAK;AAAA,YACL,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,IAAM;AAAA,YACN,IAAM;AAAA,YACN,IAAM;AAAA,YACN,IAAM;AAAA,YACN,IAAM;AAAA,YACN,IAAM;AAAA,YACN,IAAM;AAAA,YACN,IAAM;AAAA,YACN,IAAM;AAAA,YACN,IAAM;AAAA,YACN,IAAM;AAAA,YACN,IAAM;AAAA,YACN,IAAM;AAAA,YACN,IAAM;AAAA,YACN,IAAM;AAAA,YACN,IAAM;AAAA,YACN,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,YAAY;AAAA;QAEzB;AAGK,YAAI,YAAY;AAAA,UACZ;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,QAC7C;AAKK,YAAI,MAAM,OAAO,MAAM,YAAY,OAAO;AAAA,UACtC,UAAU,WAAY;AAElB,gBAAI,MAAM,KAAK;AACf,gBAAI,WAAW,IAAI;AAGnB,gBAAI,UAAU,CAAA;AACd,qBAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AACzB,kBAAI,YAAY,IAAI,CAAC,IAAI;AACzB,sBAAQ,CAAC,IAAK,SAAS,cAAc,CAAC,MAAO,KAAK,YAAY,KAAO;AAAA,YACtF;AAGa,gBAAI,UAAU,KAAK,WAAW,CAAA;AAC9B,qBAAS,UAAU,GAAG,UAAU,IAAI,WAAW;AAE3C,kBAAI,SAAS,QAAQ,OAAO,IAAI,CAAA;AAGhC,kBAAI,WAAW,WAAW,OAAO;AAGjC,uBAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAEzB,uBAAQ,IAAI,IAAK,CAAC,KAAK,SAAU,IAAI,CAAC,IAAI,IAAK,YAAY,EAAE,KAAM,KAAK,IAAI;AAG5E,uBAAO,KAAM,IAAI,IAAK,EAAE,KAAK,QAAQ,MAAQ,IAAI,IAAI,EAAE,IAAI,IAAK,YAAY,EAAG,KAAM,KAAK,IAAI;AAAA,cACnH;AAKiB,qBAAO,CAAC,IAAK,OAAO,CAAC,KAAK,IAAM,OAAO,CAAC,MAAM;AAC9C,uBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,uBAAO,CAAC,IAAI,OAAO,CAAC,OAAQ,IAAI,KAAK,IAAI;AAAA,cAC9D;AACiB,qBAAO,CAAC,IAAK,OAAO,CAAC,KAAK,IAAM,OAAO,CAAC,MAAM;AAAA,YAC/D;AAGa,gBAAI,aAAa,KAAK,cAAc,CAAA;AACpC,qBAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AACzB,yBAAW,CAAC,IAAI,QAAQ,KAAK,CAAC;AAAA,YAC/C;AAAA,UACA;AAAA,UAES,cAAc,SAAU,GAAG,QAAQ;AAC/B,iBAAK,cAAc,GAAG,QAAQ,KAAK,QAAQ;AAAA,UACxD;AAAA,UAES,cAAc,SAAU,GAAG,QAAQ;AAC/B,iBAAK,cAAc,GAAG,QAAQ,KAAK,WAAW;AAAA,UAC3D;AAAA,UAES,eAAe,SAAU,GAAG,QAAQ,SAAS;AAEzC,iBAAK,UAAU,EAAE,MAAM;AACvB,iBAAK,UAAU,EAAE,SAAS,CAAC;AAG3B,uBAAW,KAAK,MAAM,GAAI,SAAU;AACpC,uBAAW,KAAK,MAAM,IAAI,KAAU;AACpC,uBAAW,KAAK,MAAM,GAAI,SAAU;AACpC,uBAAW,KAAK,MAAM,GAAI,QAAU;AACpC,uBAAW,KAAK,MAAM,GAAI,UAAU;AAGpC,qBAAS,QAAQ,GAAG,QAAQ,IAAI,SAAS;AAErC,kBAAI,SAAS,QAAQ,KAAK;AAC1B,kBAAI,SAAS,KAAK;AAClB,kBAAI,SAAS,KAAK;AAGlB,kBAAI,IAAI;AACR,uBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,qBAAK,OAAO,CAAC,IAAI,SAAS,OAAO,CAAC,KAAK,UAAU,CAAC,OAAO,CAAC;AAAA,cAC/E;AACiB,mBAAK,UAAU;AACf,mBAAK,UAAU,SAAS;AAAA,YACzC;AAGa,gBAAI,IAAI,KAAK;AACb,iBAAK,UAAU,KAAK;AACpB,iBAAK,UAAU;AAGf,uBAAW,KAAK,MAAM,GAAI,UAAU;AACpC,uBAAW,KAAK,MAAM,GAAI,QAAU;AACpC,uBAAW,KAAK,MAAM,GAAI,SAAU;AACpC,uBAAW,KAAK,MAAM,IAAI,KAAU;AACpC,uBAAW,KAAK,MAAM,GAAI,SAAU;AAGpC,cAAE,MAAM,IAAI,KAAK;AACjB,cAAE,SAAS,CAAC,IAAI,KAAK;AAAA,UAClC;AAAA,UAES,SAAS,KAAG;AAAA,UAEZ,QAAQ,KAAG;AAAA,UAEX,WAAW,KAAG;AAAA,QACvB,CAAM;AAGD,iBAAS,WAAW,QAAQ,MAAM;AAC9B,cAAI,KAAM,KAAK,YAAY,SAAU,KAAK,WAAW;AACrD,eAAK,WAAW;AAChB,eAAK,WAAW,KAAK;AAAA,QAC9B;AAEK,iBAAS,WAAW,QAAQ,MAAM;AAC9B,cAAI,KAAM,KAAK,YAAY,SAAU,KAAK,WAAW;AACrD,eAAK,WAAW;AAChB,eAAK,WAAW,KAAK;AAAA,QAC9B;AAUK,QAAAA,GAAE,MAAM,YAAY,cAAc,GAAG;AAKrC,YAAI,YAAY,OAAO,YAAY,YAAY,OAAO;AAAA,UAClD,UAAU,WAAY;AAElB,gBAAI,MAAM,KAAK;AACf,gBAAI,WAAW,IAAI;AAEnB,gBAAI,SAAS,WAAW,KAAK,SAAS,WAAW,KAAK,SAAS,SAAS,GAAG;AACvE,oBAAM,IAAI,MAAM,+EAA+E;AAAA,YAChH;AAGa,gBAAI,OAAO,SAAS,MAAM,GAAG,CAAC;AAC9B,gBAAI,OAAO,SAAS,SAAS,IAAI,SAAS,MAAM,GAAG,CAAC,IAAI,SAAS,MAAM,GAAG,CAAC;AAC3E,gBAAI,OAAO,SAAS,SAAS,IAAI,SAAS,MAAM,GAAG,CAAC,IAAI,SAAS,MAAM,GAAG,CAAC;AAG3E,iBAAK,QAAQ,IAAI,gBAAgB,UAAU,OAAO,IAAI,CAAC;AACvD,iBAAK,QAAQ,IAAI,gBAAgB,UAAU,OAAO,IAAI,CAAC;AACvD,iBAAK,QAAQ,IAAI,gBAAgB,UAAU,OAAO,IAAI,CAAC;AAAA,UACpE;AAAA,UAES,cAAc,SAAU,GAAG,QAAQ;AAC/B,iBAAK,MAAM,aAAa,GAAG,MAAM;AACjC,iBAAK,MAAM,aAAa,GAAG,MAAM;AACjC,iBAAK,MAAM,aAAa,GAAG,MAAM;AAAA,UAC9C;AAAA,UAES,cAAc,SAAU,GAAG,QAAQ;AAC/B,iBAAK,MAAM,aAAa,GAAG,MAAM;AACjC,iBAAK,MAAM,aAAa,GAAG,MAAM;AACjC,iBAAK,MAAM,aAAa,GAAG,MAAM;AAAA,UAC9C;AAAA,UAES,SAAS,MAAI;AAAA,UAEb,QAAQ,KAAG;AAAA,UAEX,WAAW,KAAG;AAAA,QACvB,CAAM;AAUD,QAAAA,GAAE,YAAY,YAAY,cAAc,SAAS;AAAA,MACtD,GAAE;AAGD,aAAO,SAAS;AAAA,IAEjB,CAAC;AAAA;;;;;;;;;AC1wBA,KAAC,SAAU,MAAM,SAAS,OAAO;AACA;AAEhC,QAAAN,QAAA,UAA2B,QAAQO,eAAmBG,oBAAyBC,cAAkBG,iBAAqBC,mBAAwB;AAAA,MAChJ;AAAA,IASA,GAAEd,gBAAM,SAAU,UAAU;AAE3B,OAAC,WAAY;AAET,YAAIK,KAAI;AACR,YAAI,QAAQA,GAAE;AACd,YAAI,eAAe,MAAM;AACzB,YAAI,SAASA,GAAE;AAKf,YAAI,MAAM,OAAO,MAAM,aAAa,OAAO;AAAA,UACvC,UAAU,WAAY;AAElB,gBAAI,MAAM,KAAK;AACf,gBAAI,WAAW,IAAI;AACnB,gBAAI,cAAc,IAAI;AAGtB,gBAAI,IAAI,KAAK,KAAK,CAAA;AAClB,qBAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC1B,gBAAE,CAAC,IAAI;AAAA,YACxB;AAGa,qBAAS,IAAI,GAAG,IAAI,GAAG,IAAI,KAAK,KAAK;AACjC,kBAAI,eAAe,IAAI;AACvB,kBAAI,UAAW,SAAS,iBAAiB,CAAC,MAAO,KAAM,eAAe,IAAK,IAAM;AAEjF,mBAAK,IAAI,EAAE,CAAC,IAAI,WAAW;AAG3B,kBAAI,IAAI,EAAE,CAAC;AACX,gBAAE,CAAC,IAAI,EAAE,CAAC;AACV,gBAAE,CAAC,IAAI;AAAA,YACxB;AAGa,iBAAK,KAAK,KAAK,KAAK;AAAA,UACjC;AAAA,UAES,iBAAiB,SAAU,GAAG,QAAQ;AAClC,cAAE,MAAM,KAAK,sBAAsB,KAAK,IAAI;AAAA,UACzD;AAAA,UAES,SAAS,MAAI;AAAA,UAEb,QAAQ;AAAA,QACjB,CAAM;AAED,iBAAS,wBAAwB;AAE7B,cAAI,IAAI,KAAK;AACb,cAAI,IAAI,KAAK;AACb,cAAI,IAAI,KAAK;AAGb,cAAI,gBAAgB;AACpB,mBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,iBAAK,IAAI,KAAK;AACd,iBAAK,IAAI,EAAE,CAAC,KAAK;AAGjB,gBAAI,IAAI,EAAE,CAAC;AACX,cAAE,CAAC,IAAI,EAAE,CAAC;AACV,cAAE,CAAC,IAAI;AAEP,6BAAiB,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,KAAM,KAAK,IAAI;AAAA,UAClE;AAGS,eAAK,KAAK;AACV,eAAK,KAAK;AAEV,iBAAO;AAAA,QAChB;AAUK,QAAAA,GAAE,MAAM,aAAa,cAAc,GAAG;AAKtC,YAAI,UAAU,OAAO,UAAU,IAAI,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAMtC,KAAK,IAAI,IAAI,OAAO;AAAA,YAChB,MAAM;AAAA,UACnB,CAAU;AAAA,UAED,UAAU,WAAY;AAClB,gBAAI,SAAS,KAAK,IAAI;AAGtB,qBAAS,IAAI,KAAK,IAAI,MAAM,IAAI,GAAG,KAAK;AACpC,oCAAsB,KAAK,IAAI;AAAA,YAChD;AAAA,UACA;AAAA,QACA,CAAM;AAUD,QAAAA,GAAE,UAAU,aAAa,cAAc,OAAO;AAAA,MACnD,GAAE;AAGD,aAAO,SAAS;AAAA,IAEjB,CAAC;AAAA;;;;;;;;;AC1IA,KAAC,SAAU,MAAM,SAAS,OAAO;AACA;AAEhC,QAAAN,QAAA,UAA2B,QAAQO,eAAmBG,oBAAyBC,cAAkBG,iBAAqBC,mBAAwB;AAAA,MAChJ;AAAA,IASA,GAAEd,gBAAM,SAAU,UAAU;AAE3B,OAAC,WAAY;AAET,YAAIK,KAAI;AACR,YAAI,QAAQA,GAAE;AACd,YAAI,eAAe,MAAM;AACzB,YAAI,SAASA,GAAE;AAGf,YAAI,IAAK,CAAA;AACT,YAAI,KAAK,CAAA;AACT,YAAI,IAAK,CAAA;AAKT,YAAI,SAAS,OAAO,SAAS,aAAa,OAAO;AAAA,UAC7C,UAAU,WAAY;AAElB,gBAAI,IAAI,KAAK,KAAK;AAClB,gBAAI,KAAK,KAAK,IAAI;AAGlB,qBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,gBAAE,CAAC,KAAO,EAAE,CAAC,KAAK,IAAO,EAAE,CAAC,MAAM,MAAO,YAC/B,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM,KAAO;AAAA,YAC1D;AAGa,gBAAI,IAAI,KAAK,KAAK;AAAA,cACd,EAAE,CAAC;AAAA,cAAI,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM;AAAA,cAC/B,EAAE,CAAC;AAAA,cAAI,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM;AAAA,cAC/B,EAAE,CAAC;AAAA,cAAI,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM;AAAA,cAC/B,EAAE,CAAC;AAAA,cAAI,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM;AAAA,YAChD;AAGa,gBAAIA,KAAI,KAAK,KAAK;AAAA,cACb,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM;AAAA,cAAM,EAAE,CAAC,IAAI,aAAe,EAAE,CAAC,IAAI;AAAA,cAC3D,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM;AAAA,cAAM,EAAE,CAAC,IAAI,aAAe,EAAE,CAAC,IAAI;AAAA,cAC3D,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM;AAAA,cAAM,EAAE,CAAC,IAAI,aAAe,EAAE,CAAC,IAAI;AAAA,cAC3D,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM;AAAA,cAAM,EAAE,CAAC,IAAI,aAAe,EAAE,CAAC,IAAI;AAAA,YAC7E;AAGa,iBAAK,KAAK;AAGV,qBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,wBAAU,KAAK,IAAI;AAAA,YACpC;AAGa,qBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,cAAAA,GAAE,CAAC,KAAK,EAAG,IAAI,IAAK,CAAC;AAAA,YACtC;AAGa,gBAAI,IAAI;AAEJ,kBAAI,KAAK,GAAG;AACZ,kBAAI,OAAO,GAAG,CAAC;AACf,kBAAI,OAAO,GAAG,CAAC;AAGf,kBAAI,MAAQ,QAAQ,IAAM,SAAS,MAAO,YAAiB,QAAQ,KAAO,SAAS,KAAM;AACzF,kBAAI,MAAQ,QAAQ,IAAM,SAAS,MAAO,YAAiB,QAAQ,KAAO,SAAS,KAAM;AACzF,kBAAI,KAAM,OAAO,KAAO,KAAK;AAC7B,kBAAI,KAAM,MAAM,KAAQ,KAAK;AAG7B,cAAAA,GAAE,CAAC,KAAK;AACR,cAAAA,GAAE,CAAC,KAAK;AACR,cAAAA,GAAE,CAAC,KAAK;AACR,cAAAA,GAAE,CAAC,KAAK;AACR,cAAAA,GAAE,CAAC,KAAK;AACR,cAAAA,GAAE,CAAC,KAAK;AACR,cAAAA,GAAE,CAAC,KAAK;AACR,cAAAA,GAAE,CAAC,KAAK;AAGR,uBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,0BAAU,KAAK,IAAI;AAAA,cACxC;AAAA,YACA;AAAA,UACA;AAAA,UAES,iBAAiB,SAAU,GAAG,QAAQ;AAElC,gBAAI,IAAI,KAAK;AAGb,sBAAU,KAAK,IAAI;AAGnB,cAAE,CAAC,IAAI,EAAE,CAAC,IAAK,EAAE,CAAC,MAAM,KAAO,EAAE,CAAC,KAAK;AACvC,cAAE,CAAC,IAAI,EAAE,CAAC,IAAK,EAAE,CAAC,MAAM,KAAO,EAAE,CAAC,KAAK;AACvC,cAAE,CAAC,IAAI,EAAE,CAAC,IAAK,EAAE,CAAC,MAAM,KAAO,EAAE,CAAC,KAAK;AACvC,cAAE,CAAC,IAAI,EAAE,CAAC,IAAK,EAAE,CAAC,MAAM,KAAO,EAAE,CAAC,KAAK;AAEvC,qBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAExB,gBAAE,CAAC,KAAO,EAAE,CAAC,KAAK,IAAO,EAAE,CAAC,MAAM,MAAO,YAC/B,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM,KAAO;AAGzC,gBAAE,SAAS,CAAC,KAAK,EAAE,CAAC;AAAA,YACrC;AAAA,UACA;AAAA,UAES,WAAW,MAAI;AAAA,UAEf,QAAQ,KAAG;AAAA,QACpB,CAAM;AAED,iBAAS,YAAY;AAEjB,cAAI,IAAI,KAAK;AACb,cAAIA,KAAI,KAAK;AAGb,mBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,eAAG,CAAC,IAAIA,GAAE,CAAC;AAAA,UACxB;AAGS,UAAAA,GAAE,CAAC,IAAKA,GAAE,CAAC,IAAI,aAAa,KAAK,KAAM;AACvC,UAAAA,GAAE,CAAC,IAAKA,GAAE,CAAC,IAAI,cAAeA,GAAE,CAAC,MAAM,IAAM,GAAG,CAAC,MAAM,IAAK,IAAI,KAAM;AACtE,UAAAA,GAAE,CAAC,IAAKA,GAAE,CAAC,IAAI,aAAeA,GAAE,CAAC,MAAM,IAAM,GAAG,CAAC,MAAM,IAAK,IAAI,KAAM;AACtE,UAAAA,GAAE,CAAC,IAAKA,GAAE,CAAC,IAAI,cAAeA,GAAE,CAAC,MAAM,IAAM,GAAG,CAAC,MAAM,IAAK,IAAI,KAAM;AACtE,UAAAA,GAAE,CAAC,IAAKA,GAAE,CAAC,IAAI,cAAeA,GAAE,CAAC,MAAM,IAAM,GAAG,CAAC,MAAM,IAAK,IAAI,KAAM;AACtE,UAAAA,GAAE,CAAC,IAAKA,GAAE,CAAC,IAAI,aAAeA,GAAE,CAAC,MAAM,IAAM,GAAG,CAAC,MAAM,IAAK,IAAI,KAAM;AACtE,UAAAA,GAAE,CAAC,IAAKA,GAAE,CAAC,IAAI,cAAeA,GAAE,CAAC,MAAM,IAAM,GAAG,CAAC,MAAM,IAAK,IAAI,KAAM;AACtE,UAAAA,GAAE,CAAC,IAAKA,GAAE,CAAC,IAAI,cAAeA,GAAE,CAAC,MAAM,IAAM,GAAG,CAAC,MAAM,IAAK,IAAI,KAAM;AACtE,eAAK,KAAMA,GAAE,CAAC,MAAM,IAAM,GAAG,CAAC,MAAM,IAAK,IAAI;AAG7C,mBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,gBAAI,KAAK,EAAE,CAAC,IAAIA,GAAE,CAAC;AAGnB,gBAAI,KAAK,KAAK;AACd,gBAAI,KAAK,OAAO;AAGhB,gBAAI,OAAS,KAAK,OAAQ,MAAM,KAAK,OAAQ,MAAM,KAAK;AACxD,gBAAI,OAAQ,KAAK,cAAc,KAAM,OAAQ,KAAK,SAAc,KAAM;AAGtE,cAAE,CAAC,IAAI,KAAK;AAAA,UACzB;AAGS,YAAE,CAAC,IAAK,EAAE,CAAC,KAAM,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM,OAAS,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM,MAAQ;AAClF,YAAE,CAAC,IAAK,EAAE,CAAC,KAAM,EAAE,CAAC,KAAK,IAAO,EAAE,CAAC,MAAM,MAAO,EAAE,CAAC,IAAK;AACxD,YAAE,CAAC,IAAK,EAAE,CAAC,KAAM,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM,OAAS,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM,MAAQ;AAClF,YAAE,CAAC,IAAK,EAAE,CAAC,KAAM,EAAE,CAAC,KAAK,IAAO,EAAE,CAAC,MAAM,MAAO,EAAE,CAAC,IAAK;AACxD,YAAE,CAAC,IAAK,EAAE,CAAC,KAAM,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM,OAAS,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM,MAAQ;AAClF,YAAE,CAAC,IAAK,EAAE,CAAC,KAAM,EAAE,CAAC,KAAK,IAAO,EAAE,CAAC,MAAM,MAAO,EAAE,CAAC,IAAK;AACxD,YAAE,CAAC,IAAK,EAAE,CAAC,KAAM,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM,OAAS,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM,MAAQ;AAClF,YAAE,CAAC,IAAK,EAAE,CAAC,KAAM,EAAE,CAAC,KAAK,IAAO,EAAE,CAAC,MAAM,MAAO,EAAE,CAAC,IAAK;AAAA,QACjE;AAUK,QAAAA,GAAE,SAAS,aAAa,cAAc,MAAM;AAAA,MACjD,GAAE;AAGD,aAAO,SAAS;AAAA,IAEjB,CAAC;AAAA;;;;;;;;;AC/LA,KAAC,SAAU,MAAM,SAAS,OAAO;AACA;AAEhC,QAAAN,QAAA,UAA2B,QAAQO,eAAmBG,oBAAyBC,cAAkBG,iBAAqBC,mBAAwB;AAAA,MAChJ;AAAA,IASA,GAAEd,gBAAM,SAAU,UAAU;AAE3B,OAAC,WAAY;AAET,YAAIK,KAAI;AACR,YAAI,QAAQA,GAAE;AACd,YAAI,eAAe,MAAM;AACzB,YAAI,SAASA,GAAE;AAGf,YAAI,IAAK,CAAA;AACT,YAAI,KAAK,CAAA;AACT,YAAI,IAAK,CAAA;AAST,YAAI,eAAe,OAAO,eAAe,aAAa,OAAO;AAAA,UACzD,UAAU,WAAY;AAElB,gBAAI,IAAI,KAAK,KAAK;AAClB,gBAAI,KAAK,KAAK,IAAI;AAGlB,gBAAI,IAAI,KAAK,KAAK;AAAA,cACd,EAAE,CAAC;AAAA,cAAI,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM;AAAA,cAC/B,EAAE,CAAC;AAAA,cAAI,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM;AAAA,cAC/B,EAAE,CAAC;AAAA,cAAI,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM;AAAA,cAC/B,EAAE,CAAC;AAAA,cAAI,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM;AAAA,YAChD;AAGa,gBAAIA,KAAI,KAAK,KAAK;AAAA,cACb,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM;AAAA,cAAM,EAAE,CAAC,IAAI,aAAe,EAAE,CAAC,IAAI;AAAA,cAC3D,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM;AAAA,cAAM,EAAE,CAAC,IAAI,aAAe,EAAE,CAAC,IAAI;AAAA,cAC3D,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM;AAAA,cAAM,EAAE,CAAC,IAAI,aAAe,EAAE,CAAC,IAAI;AAAA,cAC3D,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM;AAAA,cAAM,EAAE,CAAC,IAAI,aAAe,EAAE,CAAC,IAAI;AAAA,YAC7E;AAGa,iBAAK,KAAK;AAGV,qBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,wBAAU,KAAK,IAAI;AAAA,YACpC;AAGa,qBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,cAAAA,GAAE,CAAC,KAAK,EAAG,IAAI,IAAK,CAAC;AAAA,YACtC;AAGa,gBAAI,IAAI;AAEJ,kBAAI,KAAK,GAAG;AACZ,kBAAI,OAAO,GAAG,CAAC;AACf,kBAAI,OAAO,GAAG,CAAC;AAGf,kBAAI,MAAQ,QAAQ,IAAM,SAAS,MAAO,YAAiB,QAAQ,KAAO,SAAS,KAAM;AACzF,kBAAI,MAAQ,QAAQ,IAAM,SAAS,MAAO,YAAiB,QAAQ,KAAO,SAAS,KAAM;AACzF,kBAAI,KAAM,OAAO,KAAO,KAAK;AAC7B,kBAAI,KAAM,MAAM,KAAQ,KAAK;AAG7B,cAAAA,GAAE,CAAC,KAAK;AACR,cAAAA,GAAE,CAAC,KAAK;AACR,cAAAA,GAAE,CAAC,KAAK;AACR,cAAAA,GAAE,CAAC,KAAK;AACR,cAAAA,GAAE,CAAC,KAAK;AACR,cAAAA,GAAE,CAAC,KAAK;AACR,cAAAA,GAAE,CAAC,KAAK;AACR,cAAAA,GAAE,CAAC,KAAK;AAGR,uBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,0BAAU,KAAK,IAAI;AAAA,cACxC;AAAA,YACA;AAAA,UACA;AAAA,UAES,iBAAiB,SAAU,GAAG,QAAQ;AAElC,gBAAI,IAAI,KAAK;AAGb,sBAAU,KAAK,IAAI;AAGnB,cAAE,CAAC,IAAI,EAAE,CAAC,IAAK,EAAE,CAAC,MAAM,KAAO,EAAE,CAAC,KAAK;AACvC,cAAE,CAAC,IAAI,EAAE,CAAC,IAAK,EAAE,CAAC,MAAM,KAAO,EAAE,CAAC,KAAK;AACvC,cAAE,CAAC,IAAI,EAAE,CAAC,IAAK,EAAE,CAAC,MAAM,KAAO,EAAE,CAAC,KAAK;AACvC,cAAE,CAAC,IAAI,EAAE,CAAC,IAAK,EAAE,CAAC,MAAM,KAAO,EAAE,CAAC,KAAK;AAEvC,qBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAExB,gBAAE,CAAC,KAAO,EAAE,CAAC,KAAK,IAAO,EAAE,CAAC,MAAM,MAAO,YAC/B,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM,KAAO;AAGzC,gBAAE,SAAS,CAAC,KAAK,EAAE,CAAC;AAAA,YACrC;AAAA,UACA;AAAA,UAES,WAAW,MAAI;AAAA,UAEf,QAAQ,KAAG;AAAA,QACpB,CAAM;AAED,iBAAS,YAAY;AAEjB,cAAI,IAAI,KAAK;AACb,cAAIA,KAAI,KAAK;AAGb,mBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,eAAG,CAAC,IAAIA,GAAE,CAAC;AAAA,UACxB;AAGS,UAAAA,GAAE,CAAC,IAAKA,GAAE,CAAC,IAAI,aAAa,KAAK,KAAM;AACvC,UAAAA,GAAE,CAAC,IAAKA,GAAE,CAAC,IAAI,cAAeA,GAAE,CAAC,MAAM,IAAM,GAAG,CAAC,MAAM,IAAK,IAAI,KAAM;AACtE,UAAAA,GAAE,CAAC,IAAKA,GAAE,CAAC,IAAI,aAAeA,GAAE,CAAC,MAAM,IAAM,GAAG,CAAC,MAAM,IAAK,IAAI,KAAM;AACtE,UAAAA,GAAE,CAAC,IAAKA,GAAE,CAAC,IAAI,cAAeA,GAAE,CAAC,MAAM,IAAM,GAAG,CAAC,MAAM,IAAK,IAAI,KAAM;AACtE,UAAAA,GAAE,CAAC,IAAKA,GAAE,CAAC,IAAI,cAAeA,GAAE,CAAC,MAAM,IAAM,GAAG,CAAC,MAAM,IAAK,IAAI,KAAM;AACtE,UAAAA,GAAE,CAAC,IAAKA,GAAE,CAAC,IAAI,aAAeA,GAAE,CAAC,MAAM,IAAM,GAAG,CAAC,MAAM,IAAK,IAAI,KAAM;AACtE,UAAAA,GAAE,CAAC,IAAKA,GAAE,CAAC,IAAI,cAAeA,GAAE,CAAC,MAAM,IAAM,GAAG,CAAC,MAAM,IAAK,IAAI,KAAM;AACtE,UAAAA,GAAE,CAAC,IAAKA,GAAE,CAAC,IAAI,cAAeA,GAAE,CAAC,MAAM,IAAM,GAAG,CAAC,MAAM,IAAK,IAAI,KAAM;AACtE,eAAK,KAAMA,GAAE,CAAC,MAAM,IAAM,GAAG,CAAC,MAAM,IAAK,IAAI;AAG7C,mBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,gBAAI,KAAK,EAAE,CAAC,IAAIA,GAAE,CAAC;AAGnB,gBAAI,KAAK,KAAK;AACd,gBAAI,KAAK,OAAO;AAGhB,gBAAI,OAAS,KAAK,OAAQ,MAAM,KAAK,OAAQ,MAAM,KAAK;AACxD,gBAAI,OAAQ,KAAK,cAAc,KAAM,OAAQ,KAAK,SAAc,KAAM;AAGtE,cAAE,CAAC,IAAI,KAAK;AAAA,UACzB;AAGS,YAAE,CAAC,IAAK,EAAE,CAAC,KAAM,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM,OAAS,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM,MAAQ;AAClF,YAAE,CAAC,IAAK,EAAE,CAAC,KAAM,EAAE,CAAC,KAAK,IAAO,EAAE,CAAC,MAAM,MAAO,EAAE,CAAC,IAAK;AACxD,YAAE,CAAC,IAAK,EAAE,CAAC,KAAM,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM,OAAS,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM,MAAQ;AAClF,YAAE,CAAC,IAAK,EAAE,CAAC,KAAM,EAAE,CAAC,KAAK,IAAO,EAAE,CAAC,MAAM,MAAO,EAAE,CAAC,IAAK;AACxD,YAAE,CAAC,IAAK,EAAE,CAAC,KAAM,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM,OAAS,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM,MAAQ;AAClF,YAAE,CAAC,IAAK,EAAE,CAAC,KAAM,EAAE,CAAC,KAAK,IAAO,EAAE,CAAC,MAAM,MAAO,EAAE,CAAC,IAAK;AACxD,YAAE,CAAC,IAAK,EAAE,CAAC,KAAM,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM,OAAS,EAAE,CAAC,KAAK,KAAO,EAAE,CAAC,MAAM,MAAQ;AAClF,YAAE,CAAC,IAAK,EAAE,CAAC,KAAM,EAAE,CAAC,KAAK,IAAO,EAAE,CAAC,MAAM,MAAO,EAAE,CAAC,IAAK;AAAA,QACjE;AAUK,QAAAA,GAAE,eAAe,aAAa,cAAc,YAAY;AAAA,MAC7D,GAAE;AAGD,aAAO,SAAS;AAAA,IAEjB,CAAC;AAAA;;;;;;;;;AC7LA,KAAC,SAAU,MAAM,SAAS,OAAO;AACA;AAEhC,QAAAN,QAAA,UAA2B,QAAQO,eAAmBG,oBAAyBC,cAAkBG,iBAAqBC,mBAAwB;AAAA,MAChJ;AAAA,IASA,GAAEd,gBAAM,SAAU,UAAU;AAE3B,OAAC,WAAY;AAET,YAAIK,KAAI;AACR,YAAI,QAAQA,GAAE;AACd,YAAI,cAAc,MAAM;AACxB,YAAI,SAASA,GAAE;AAEf,cAAM,IAAI;AAGV,cAAM,SAAS;AAAA,UACX;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,UAAY;AAAA,UAAY;AAAA,UACpC;AAAA,UAAY;AAAA,QACrB;AAEK,cAAM,SAAS;AAAA,UACX;AAAA,YAAI;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,UAAU;AAAA,UAClD;AAAA,YAAI;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,UAAU;AAAA,UAClD;AAAA,YAAI;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,UAAU;AAAA,UAClD;AAAA,YAAI;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;AAAA,YAAY;AAAA,YACpC;AAAA,YAAY;AAAA,YAAY;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","x_google_ignoreList":[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38]}