diff --git a/.cursorrules b/.cursorrules index 659e694f0..b0636760a 100644 --- a/.cursorrules +++ b/.cursorrules @@ -10,6 +10,7 @@ - **Do not generate .md files** unless explicity told to do so. - **Comments** should always be made in all lowercase and simple english - **Error messages**, any error being shown in the ui should be user friendly and easy to understand, and any error being logged in consoles and sentry should be descriptive for developers to help with debugging +- **Never add AI co-author to commits** - do not add "Co-Authored-By" lines for AI assistants in git commits ## 💻 Code Quality @@ -78,6 +79,57 @@ - **Service Worker cache version** - only bump `NEXT_PUBLIC_API_VERSION` for breaking API changes (see JSDoc in `src/app/sw.ts`). Users auto-migrate. - **Gate heavy features in dev** - prefetching, precompiling, or eager loading of routes can add 5-10s to dev cold starts. wrap with `process.env.NODE_ENV !== 'development'` (e.g. `` in layout.tsx). +## 🎨 Design System + +- **Live showcase**: visit `/dev/components` to see all components rendered with all variants and copy-paste code +- **Three layers**: Bruddle primitives (`src/components/0_Bruddle/`), Global shared components (`src/components/Global/`), and Tailwind custom classes (`tailwind.config.js`) + +### Bruddle Primitives (`0_Bruddle/`) +- Button, Card (named export), BaseInput, BaseSelect, Checkbox, Divider, Title, Toast, PageContainer, CloudsBackground + +### Global Shared Components (`Global/`) +- **Navigation**: NavHeader (back button + title), TopNavbar, Footer +- **Modals**: Modal (base @headlessui Dialog), ActionModal (with buttons/checkboxes/icons), Drawer (vaul bottom sheet) +- **Loading**: Loading (spinner), PeanutLoading (branded), PeanutFactsLoading (with fun facts) +- **Cards**: Card (with position prop for stacked lists), InfoCard, PeanutActionCard +- **Status**: StatusPill, StatusBadge, ErrorAlert, ProgressBar +- **Icons**: Icon component with 50+ icons — `` +- **Inputs**: AmountInput, ValidatedInput, CopyField, GeneralRecipientInput, TokenSelector +- **Utilities**: CopyToClipboard, AddressLink, ExternalWalletButton, ShareButton, Banner, MarqueeWrapper + +### Color Names (misleading!) +- `purple-1` / `primary-1` = `#FF90E8` (pink, not purple) +- `primary-3` = `#EFE4FF` (lavender) +- `yellow-1` / `secondary-1` = `#FFC900` +- `green-1` = `#98E9AB` + +### Key Rules +- **Button sizing trap**: `size="large"` is `h-10` (40px) — SHORTER than default `h-13` (52px). never use for primary CTAs +- **Primary CTA**: ` + + ) + } + + // Render the appropriate screen based on current step + // Flow: info -> details -> (payment page) -> success + // Note: geo step only shown if user is ineligible + const renderScreen = () => { + switch (currentStep) { + case 'info': + return ( + goToNextStep()} + hasPurchased={cardInfo?.hasPurchased ?? false} + slotsRemaining={cardInfo?.slotsRemaining} + recentPurchases={cardInfo?.recentPurchases} + /> + ) + case 'details': + return ( + goToNextStep()} + onBack={() => goToPreviousStep()} + /> + ) + case 'geo': + return ( + goToNextStep()} + onInitiatePurchase={handleInitiatePurchase} + onBack={() => goToPreviousStep()} + purchaseError={purchaseError} + /> + ) + case 'success': + return router.push('/badges')} /> + default: + return ( + goToNextStep()} + hasPurchased={cardInfo?.hasPurchased ?? false} + slotsRemaining={cardInfo?.slotsRemaining} + recentPurchases={cardInfo?.recentPurchases} + /> + ) + } + } + + return {renderScreen()} +} + +export default CardPioneerPage diff --git a/src/app/(mobile-ui)/dev/components/page.tsx b/src/app/(mobile-ui)/dev/components/page.tsx new file mode 100644 index 000000000..edac175e3 --- /dev/null +++ b/src/app/(mobile-ui)/dev/components/page.tsx @@ -0,0 +1,1398 @@ +'use client' + +import { useState } from 'react' +import NavHeader from '@/components/Global/NavHeader' +import { Icon, type IconName } from '@/components/Global/Icons/Icon' +import Divider from '@/components/0_Bruddle/Divider' +import { Button } from '@/components/0_Bruddle/Button' +import { Card } from '@/components/0_Bruddle/Card' +import GlobalCard from '@/components/Global/Card' +import BaseInput from '@/components/0_Bruddle/BaseInput' +import BaseSelect from '@/components/0_Bruddle/BaseSelect' +import Checkbox from '@/components/0_Bruddle/Checkbox' +import CopyField from '@/components/Global/CopyField' +import Loading from '@/components/Global/Loading' +import PeanutLoading from '@/components/Global/PeanutLoading' +import ErrorAlert from '@/components/Global/ErrorAlert' +import EmptyState from '@/components/Global/EmptyStates/EmptyState' +import NoDataEmptyState from '@/components/Global/EmptyStates/NoDataEmptyState' +import StatusBadge from '@/components/Global/Badges/StatusBadge' +import StatusPill from '@/components/Global/StatusPill' +import { useToast } from '@/components/0_Bruddle/Toast' +import FlowHeader from '@/components/Global/FlowHeader' +import Modal from '@/components/Global/Modal' +import ActionModal from '@/components/Global/ActionModal' +import Title from '@/components/0_Bruddle/Title' +import CopyToClipboard from '@/components/Global/CopyToClipboard' +import AddressLink from '@/components/Global/AddressLink' +import MoreInfo from '@/components/Global/MoreInfo' +import { Section, PropTable, CopySnippet, StatusTag } from './showcase-utils' + +const TOC: { id: string; label: string; icon: IconName }[] = [ + { id: 'guidelines', label: 'Guidelines', icon: 'docs' }, + { id: 'buttons', label: 'Buttons', icon: 'switch' }, + { id: 'cards', label: 'Cards', icon: 'docs' }, + { id: 'inputs', label: 'Inputs', icon: 'clip' }, + { id: 'feedback', label: 'Feedback', icon: 'meter' }, + { id: 'navigation', label: 'Navigation', icon: 'link' }, + { id: 'layouts', label: 'Layouts', icon: 'switch' }, + { id: 'patterns', label: 'Patterns', icon: 'bulb' }, +] + +const ALL_ICONS: IconName[] = [ + 'alert', + 'alert-filled', + 'arrow-down', + 'arrow-down-left', + 'arrow-up', + 'arrow-up-right', + 'arrow-exchange', + 'badge', + 'bank', + 'bell', + 'bulb', + 'camera', + 'camera-flip', + 'cancel', + 'check', + 'check-circle', + 'chevron-up', + 'chevron-down', + 'clip', + 'clock', + 'copy', + 'currency', + 'docs', + 'dollar', + 'double-check', + 'download', + 'error', + 'exchange', + 'external-link', + 'eye', + 'eye-slash', + 'failed', + 'fees', + 'gift', + 'globe-lock', + 'history', + 'home', + 'info', + 'info-filled', + 'invite-heart', + 'link', + 'link-slash', + 'lock', + 'logout', + 'meter', + 'minus-circle', + 'mobile-install', + 'paperclip', + 'paste', + 'peanut-support', + 'pending', + 'plus', + 'plus-circle', + 'processing', + 'qr-code', + 'question-mark', + 'retry', + 'search', + 'share', + 'shield', + 'smile', + 'split', + 'star', + 'success', + 'switch', + 'trophy', + 'txn-off', + 'upload-cloud', + 'user', + 'user-id', + 'user-plus', + 'wallet', + 'wallet-cancel', + 'wallet-outline', + 'achievements', +] + +export default function ComponentsPage() { + const [inputValue, setInputValue] = useState('') + const [selectValue, setSelectValue] = useState('') + const [checkboxValue, setCheckboxValue] = useState(false) + const [showPeanutLoading, setShowPeanutLoading] = useState(false) + const [showModal, setShowModal] = useState(false) + const [showActionModal, setShowActionModal] = useState(false) + const { success, error, info, warning } = useToast() + + return ( +
+
+ +
+ + {/* sticky TOC */} +
+
+ {TOC.map((item) => ( + + + {item.label} + + ))} +
+
+ +
+ {/* ━━━━━━━━━━━━━━━━━━ GUIDELINES ━━━━━━━━━━━━━━━━━━ */} +
+

Guidelines & Legend

+ + {/* legend */} +
+

status tags

+
+
+ + stable, widely used +
+
+ + {'< 5 usages'} +
+
+ + 0 production usages +
+
+ + works but needs cleanup +
+
+
+ + {/* design rules */} +
+

design rules

+
+

buttons

+
    +
  • + primary CTA: variant="purple" shadowSize="4" w-full — NO size + prop +
  • +
  • secondary CTA: variant="stroke" w-full
  • +
  • + default h-13 is tallest. size="large" is h-10 — never for primary CTAs +
  • +
+
+
+

text & links

+
    +
  • primary text: text-n-1 | secondary: text-grey-1
  • +
  • inline links: text-black underline — never text-purple-1
  • +
+
+
+

containers

+
    +
  • + standalone: Bruddle Card (named export) | stacked lists: Global Card (default + export) +
  • +
  • shadows: always black #000 | border radius: always rounded-sm
  • +
+
+
+

modals

+
    +
  • + informational: Modal | user action/confirmation: ActionModal | mobile interaction: + Drawer +
  • +
+
+
+

loading

+
    +
  • + inline spinner: Loading | page-level branded: PeanutLoading | with entertainment: + PeanutFactsLoading +
  • +
+
+
+

messaging

+
    +
  • + card deposits: "starter balance" — never "card balance" or + "Peanut rewards" +
  • +
+
+
+ + {/* three-tier architecture */} +
+

architecture (three tiers)

+
+

+ Bruddle primitives — + src/components/0_Bruddle/ — Button, Card, BaseInput, BaseSelect, Checkbox, Divider, + Title, Toast +

+

+ Global shared — src/components/Global/ — + NavHeader, FlowHeader, Modal, ActionModal, Drawer, Loading, PeanutLoading, StatusBadge, + EmptyState, CopyField, Icon, AddressLink, MoreInfo, etc. +

+

+ Tailwind classes — .row, .col, .shadow-2, + .shadow-4, .label-*, .brutal-border, .bg-peanut-repeat-* +

+
+
+
+ + + + {/* ━━━━━━━━━━━━━━━━━━ BUTTONS ━━━━━━━━━━━━━━━━━━ */} +
+
+ + +
+ size="large" is h-10 (SHORTER than default h-13). default = tallest button. + primary CTAs should use NO size prop. +
+
+ +
+
+ {( + [ + ['purple', '59 usages', 'production'], + ['stroke', '27 usages', 'production'], + ['primary-soft', '18 usages', 'production'], + ['transparent', '12 usages', 'production'], + ['dark', '2 usages', 'limited'], + ['transparent-dark', '3 usages', 'limited'], + ] as const + ).map(([variant, count, status]) => ( +
+
+ {variant} + {count} + +
+ + Label`} /> +
+ ))} + +
+
+ transparent-light + 2 usages + +
+
+ +
+ Label`} /> +
+
+
+ +
+
+
+ +

h-13 (52px)

+
+
+ +

h-8 · 29 usages

+
+
+ +

h-9 · 10 usages

+
+
+ +

h-10 · 5 usages

+
+
+
+ +
+

+ shadowSize="4" has 160 usages. everything else is negligible. +

+
+ {(['3', '4', '6', '8'] as const).map((s) => ( +
+ +

+ {s === '4' ? '160 usages' : s === '8' ? '1 usage' : '0 usages'} +

+
+ ))} +
+
+ +
+

primary CTA (most common pattern)

+ + Continue`} + /> + +

secondary CTA

+ + Go Back`} /> + +

with icon

+
+ + +
+ Share`} /> + +

states

+
+ + +
+
+
+ + + + {/* ━━━━━━━━━━━━━━━━━━ CARDS ━━━━━━━━━━━━━━━━━━ */} +
+
+

standalone containers with optional shadow. named export.

+ + + +

no shadow

+
+ content`} /> + + +

shadowSize="4"

+
+ content`} /> + + +

shadowSize="6"

+
+ +

shadowSize="8"

+
+ +

with sub-components

+ + + Card Title + description text + + +

body content

+
+
+ + + Title + Description + + Content +`} + /> +
+ +
+

+ for stacked list items with position-aware borders. default export. heavily used across the + app. +

+ void', '(none)'], + ]} + /> + + +

position="single"

+
+ content`} /> + +

stacked list

+
+ +

position="first"

+
+ +

position="middle"

+
+ +

position="middle"

+
+ +

position="last"

+
+
+ + First + Middle + Last +
`} + /> + +

no border

+ +

border=false

+
+ +
+ + + + {/* ━━━━━━━━━━━━━━━━━━ INPUTS ━━━━━━━━━━━━━━━━━━ */} +
+
+ + setInputValue(e.target.value)} + /> + setValue(e.target.value)} />`} + /> + + + USD} + /> +
+ +
+ ', '(required)'], + ['placeholder', 'string', 'Select...'], + ['value', 'string', '(none)'], + ['onValueChange', '(value: string) => void', '(none)'], + ['disabled', 'boolean', 'false'], + ['error', 'boolean', 'false'], + ]} + /> + + `} + /> +
+ + +
+
+ +
+ setCheckboxValue(e.target.checked)} + /> + setChecked(e.target.checked)} />`} + /> +
+ +
+

+ input + copy button combo. used for addresses, codes, links. +

+ + `} /> + +
+ +
+
+

+ ValidatedInput — async validation with debounce, + loading state, check/error icons. used in setup flows. +

+ +

+ AmountInput — large currency input with conversion, + slider, balance display. used in payment flows. +

+ +

+ GeneralRecipientInput — multi-type recipient input + (address, username, etc). +

+ +

+ FileUploadInput — file upload with drag-and-drop. +

+ +
+
+
+ + + + {/* ━━━━━━━━━━━━━━━━━━ FEEDBACK ━━━━━━━━━━━━━━━━━━ */} +
+
+

+ simple css spinner. default h-4 w-4. clean, minimal, no deps. +

+
+ {['h-4 w-4', 'h-8 w-8', 'h-12 w-12'].map((size) => ( +
+ + {size} +
+ ))} +
+ `} /> +
+ +
+

+ branded loading with animated peanutman logo. optional fullscreen overlay and message. +

+ + + `} /> + {showPeanutLoading && } + +
+ +
+

+ context-based toast system. 4 types. auto-dismiss. clean API. +

+
+ + + + +
+ +
+ +
+

+ color-coded text badge. 9 status types. 3 sizes. well-structured. +

+
+ {( + [ + 'completed', + 'pending', + 'processing', + 'failed', + 'cancelled', + 'refunded', + 'soon', + 'closed', + ] as const + ).map((s) => ( + + ))} +
+ `} /> +

sizes

+
+ + + +
+
+ +
+

+ compact circular icon indicator. smaller than StatusBadge. +

+
+ {( + [ + 'completed', + 'pending', + 'processing', + 'failed', + 'cancelled', + 'refunded', + 'soon', + 'closed', + ] as const + ).map((s) => ( +
+ + {s} +
+ ))} +
+ `} /> +
+ +
+

inline error message display. simple, clean.

+ + `} /> +
+ +
+

+ structured empty state with icon, title, description, optional CTA. +

+ + `} /> +
+ +
+

branded empty state with crying peanutman animation.

+ + `} /> +
+
+ + + + {/* ━━━━━━━━━━━━━━━━━━ NAVIGATION ━━━━━━━━━━━━━━━━━━ */} + + + + + {/* ━━━━━━━━━━━━━━━━━━ LAYOUTS ━━━━━━━━━━━━━━━━━━ */} +
+
+

+ all mobile screens use min-h-[inherit] from the app + shell. these are the standard patterns for arranging NavHeader + content + CTA. +

+ +
+ CTA buttons always go INSIDE the my-auto wrapper so they center as a group with the content. + never leave CTA as a sibling of the content div. +
+
+ +
+

+ most common layout. content + CTA grouped and vertically centered. used in card flow, + confirmation screens, empty states. +

+ + {/* live demo */} +
+
+
+
+
+
+
+
+
+
+
+ + + +
+ {/* content */} + ... + {/* CTA — inside my-auto wrapper */} + +
+
`} + /> +
+ +
+

+ CTA pinned to bottom, content centered above. used for success screens, landing pages where + CTA should always be visible. +

+ + {/* live demo */} +
+
+
+
+
+
+
+
+
+ + + +
+ {/* content centers itself */} +
+ {/* CTA pinned to bottom via justify-between */} + +
`} + /> +
+ +
+

+ for long lists. CTA at bottom after content, no forced centering. used in history, settings, + transaction lists. +

+ + {/* live demo */} +
+
+
+ {[1, 2, 3, 4, 5].map((i) => ( +
+
+
+ ))} +
+
+ + + +
+ {items.map(item => ...)} +
+
`} + /> +
+ +
+
+
+ +
+

CTA as sibling of my-auto div

+

+ button gets pushed to bottom by gap, not grouped with content +

+
+
+
+ +
+

justify-between when you want grouped centering

+

+ pins CTA to bottom instead of keeping it close to content +

+
+
+
+ +
+

using space-y-8 on outer div

+

conflicts with flex centering. use gap-8 instead

+
+
+
+ +
+

CTA inside my-auto wrapper

+

content + CTA center as one unit

+
+
+
+
+
+ + + + {/* ━━━━━━━━━━━━━━━━━━ PATTERNS ━━━━━━━━━━━━━━━━━━ */} +
+
+

material design icons. tap any icon name to copy.

+
+ {ALL_ICONS.map((name) => ( + + ))} +
+ `} /> +
+ +
+

+ from tailwind.config.js — names can be misleading. tap to copy class name. +

+
+ {[ + ['purple-1', 'bg-purple-1', '#FF90E8', 'pink!'], + ['primary-3', 'bg-primary-3', '#EFE4FF', 'lavender'], + ['primary-4', 'bg-primary-4', '#D8C4F6', 'deeper lavender'], + ['yellow-1', 'bg-yellow-1', '#FFC900', 'peanut yellow'], + ['green-1', 'bg-green-1', '#98E9AB', 'success green'], + ['n-1', 'bg-n-1', '#000000', 'black'], + ['grey-1', 'bg-grey-1', '#6B6B6B', 'secondary text'], + ['teal-1', 'bg-teal-1', '#C3F5E4', 'teal'], + ['violet-1', 'bg-violet-1', '#A78BFA', 'violet'], + ['error-1', 'bg-error-1', '#FF6B6B', 'error red'], + ['success-3', 'bg-success-3', '#4ADE80', 'success bg'], + ['secondary-1', 'bg-secondary-1', '#FFC900', 'same as yellow-1'], + ].map(([name, bg, hex, note]) => ( + + ))} +
+
+ +
+
+
+ .bg-peanut-repeat-normal +
+ +
+ .bg-peanut-repeat-large +
+
+ .bg-peanut-repeat-small +
+
+
+ +
+
+ + </div> + <CopySnippet code={`<Title text="PEANUT" />`} /> + <div className="rounded-sm bg-purple-1 p-4"> + <Title text="NO OFFSET" offset={false} /> + </div> + </Section> + + <Section title="Copy & Share Utilities"> + <div className="space-y-3"> + <div> + <div className="mb-1 flex items-center gap-2"> + <span className="text-xs font-bold">CopyToClipboard</span> + <StatusTag status="production" /> + </div> + <p className="text-xs text-grey-1">icon or button mode. 2s checkmark feedback.</p> + <div className="mt-1 flex items-center gap-3"> + <CopyToClipboard textToCopy="copied text!" /> + <span className="text-xs text-grey-1">icon mode (default)</span> + </div> + <CopySnippet + code={`import CopyToClipboard from '@/components/Global/CopyToClipboard'\n<CopyToClipboard textToCopy="text" />`} + /> + </div> + <div> + <div className="mb-1 flex items-center gap-2"> + <span className="text-xs font-bold">ShareButton</span> + <StatusTag status="production" /> + </div> + <p className="text-xs text-grey-1"> + web share API with clipboard fallback. async URL generation. + </p> + <CopySnippet + code={`import ShareButton from '@/components/Global/ShareButton'\n<ShareButton url="https://peanut.me/..." title="Share" />`} + /> + </div> + </div> + </Section> + + <Section title="Address & Identity"> + <div className="space-y-3"> + <div> + <div className="mb-1 flex items-center gap-2"> + <span className="text-xs font-bold">AddressLink</span> + <StatusTag status="production" /> + </div> + <p className="text-xs text-grey-1"> + shortened address with ENS resolution and profile link. + </p> + <AddressLink address="0x1234567890abcdef1234567890abcdef12345678" /> + <CopySnippet + code={`import AddressLink from '@/components/Global/AddressLink'\n<AddressLink address="0x1234..." />`} + /> + </div> + <div> + <div className="mb-1 flex items-center gap-2"> + <span className="text-xs font-bold">MoreInfo (Tooltip)</span> + <StatusTag status="production" /> + </div> + <p className="text-xs text-grey-1"> + info icon with smart-positioned tooltip. portal-rendered. + </p> + <div className="flex items-center gap-2"> + <span className="text-sm">some label</span> + <MoreInfo text="this explains what the label means" /> + </div> + <CopySnippet + code={`import MoreInfo from '@/components/Global/MoreInfo'\n<MoreInfo text="Explanation here" />`} + /> + </div> + </div> + </Section> + + <Section title="Country Representation"> + <p className="text-xs text-grey-1"> + countries are represented using flagcdn.com images + country data from AddMoney/consts. + </p> + <div className="space-y-2 rounded-sm border border-n-1 p-3 text-xs"> + <p> + <span className="font-bold">CountryList</span> — searchable country list with + geolocation sorting, flag images, and status badges. + </p> + <CopySnippet code={`import { CountryList } from '@/components/Common/CountryList'`} /> + <p className="mt-2"> + <span className="font-bold">CountryFlagAndName</span> — single country display with + flag. supports multi-flag for bridge regions. + </p> + <CopySnippet + code={`import { CountryFlagAndName } from '@/components/Kyc/CountryFlagAndName'`} + /> + <p className="mt-2"> + <span className="font-bold">flag images pattern</span> + </p> + <CopySnippet + code={`<img src={\`https://flagcdn.com/w160/\${countryCode}.png\`} alt="flag" className="h-6 w-6 rounded-full object-cover" />`} + /> + </div> + </Section> + + <Section + title="Divider" + importPath={`import Divider from '@/components/0_Bruddle/Divider'`} + status="production" + > + <Divider /> + <Divider text="or" /> + <CopySnippet code={`<Divider text="or" />`} /> + </Section> + + <Section title="Tailwind Custom Classes"> + <div className="space-y-3 text-xs"> + <div className="rounded-sm border border-n-1 p-3"> + <p className="font-bold">layout</p> + <p className="mt-1 font-mono text-grey-1">.row — flex items-center gap-2</p> + <p className="font-mono text-grey-1">.col — flex flex-col gap-2</p> + </div> + <div className="rounded-sm border border-n-1 p-3"> + <p className="font-bold">shadows</p> + <div className="mt-2 flex gap-3"> + <div className="shadow-2 rounded-sm border border-n-1 px-3 py-2">.shadow-2</div> + <div className="shadow-4 rounded-sm border border-n-1 px-3 py-2">.shadow-4</div> + </div> + </div> + <div className="rounded-sm border border-n-1 p-3"> + <p className="font-bold">labels</p> + <div className="mt-2 flex flex-wrap gap-2"> + {['label-stroke', 'label-purple', 'label-yellow', 'label-black', 'label-teal'].map( + (cls) => ( + <span + key={cls} + className={`${cls} inline-block rounded-full px-3 py-1 text-xs font-bold`} + > + {cls.replace('label-', '')} + </span> + ) + )} + </div> + </div> + <div className="rounded-sm border border-n-1 p-3"> + <p className="font-bold">borders</p> + <p className="mt-1 font-mono text-grey-1">.brutal-border — 2px solid black</p> + <p className="font-mono text-grey-1">border border-n-1 — standard 1px black</p> + <p className="font-mono text-grey-1">rounded-sm — standard border radius</p> + </div> + <div className="rounded-sm border border-n-1 p-3"> + <p className="font-bold">icon sizes</p> + <p className="mt-1 font-mono text-grey-1"> + .icon-16 .icon-18 .icon-20 .icon-22 .icon-24 .icon-28 + </p> + </div> + </div> + </Section> + </div> + </div> + </div> + ) +} diff --git a/src/app/(mobile-ui)/dev/components/showcase-utils.tsx b/src/app/(mobile-ui)/dev/components/showcase-utils.tsx new file mode 100644 index 000000000..bfc2cd6b7 --- /dev/null +++ b/src/app/(mobile-ui)/dev/components/showcase-utils.tsx @@ -0,0 +1,127 @@ +'use client' + +import { useState } from 'react' +import { Icon } from '@/components/Global/Icons/Icon' + +// copy code snippet to clipboard with visual feedback +export const CopySnippet = ({ code }: { code: string }) => { + const [copied, setCopied] = useState(false) + + const handleCopy = () => { + navigator.clipboard.writeText(code) + setCopied(true) + setTimeout(() => setCopied(false), 1500) + } + + return ( + <button + onClick={handleCopy} + className="group relative mt-1 flex w-full items-start gap-2 rounded-sm border border-n-1/20 bg-primary-3/20 px-3 py-2 text-left font-mono text-[11px] text-grey-1 hover:border-n-1/40" + > + <span className="flex-1 whitespace-pre-wrap break-all">{code}</span> + <span className="shrink-0 opacity-40 group-hover:opacity-100"> + {copied ? <Icon name="check" size={14} /> : <Icon name="copy" size={14} />} + </span> + </button> + ) +} + +// production readiness badge +export const StatusTag = ({ status }: { status: 'production' | 'limited' | 'unused' | 'needs-refactor' }) => { + const styles = { + production: 'bg-green-1/30 text-n-1', + limited: 'bg-yellow-1/30 text-n-1', + unused: 'bg-n-1/10 text-grey-1', + 'needs-refactor': 'bg-error-1/30 text-n-1', + } + const labels = { + production: 'production', + limited: 'limited use', + unused: 'unused', + 'needs-refactor': 'needs refactor', + } + return ( + <span className={`inline-block rounded-full px-2 py-0.5 text-[10px] font-bold ${styles[status]}`}> + {labels[status]} + </span> + ) +} + +// quality score stars (1-5) +export const QualityScore = ({ score, label }: { score: 1 | 2 | 3 | 4 | 5; label?: string }) => { + const descriptions: Record<number, string> = { + 1: 'needs rewrite', + 2: 'works but messy', + 3: 'decent', + 4: 'clean', + 5: 'elegant', + } + return ( + <span className="inline-flex items-center gap-1 text-[10px] text-grey-1" title={label || descriptions[score]}> + {'★'.repeat(score)} + {'☆'.repeat(5 - score)} + {label && <span className="ml-0.5">{label}</span>} + </span> + ) +} + +// usage count badge +export const UsageCount = ({ count }: { count: number }) => ( + <span className="text-[10px] text-grey-1"> + {count} usage{count !== 1 ? 's' : ''} + </span> +) + +// section wrapper with title, status, quality, and usage count +export const Section = ({ + title, + id, + status, + quality, + usages, + importPath, + children, +}: { + title: string + id?: string + status?: 'production' | 'limited' | 'unused' | 'needs-refactor' + quality?: 1 | 2 | 3 | 4 | 5 + usages?: number + importPath?: string + children: React.ReactNode +}) => ( + <div id={id} className="space-y-3"> + <div className="flex flex-wrap items-center gap-2"> + <h2 className="text-lg font-bold">{title}</h2> + {status && <StatusTag status={status} />} + {quality && <QualityScore score={quality} />} + {usages !== undefined && <UsageCount count={usages} />} + </div> + {importPath && <CopySnippet code={importPath} />} + {children} + </div> +) + +// props table +export const PropTable = ({ rows }: { rows: [string, string, string][] }) => ( + <div className="overflow-x-auto rounded-sm border border-n-1 text-xs"> + <table className="w-full"> + <thead> + <tr className="border-b border-n-1 bg-primary-3/20"> + <th className="px-3 py-1.5 text-left font-bold">prop</th> + <th className="px-3 py-1.5 text-left font-bold">options</th> + <th className="px-3 py-1.5 text-left font-bold">default</th> + </tr> + </thead> + <tbody> + {rows.map(([prop, options, def]) => ( + <tr key={prop} className="border-b border-n-1 last:border-0"> + <td className="px-3 py-1.5 font-mono font-bold">{prop}</td> + <td className="px-3 py-1.5 font-mono">{options}</td> + <td className="px-3 py-1.5 font-mono">{def}</td> + </tr> + ))} + </tbody> + </table> + </div> +) diff --git a/src/app/(mobile-ui)/dev/ds/_components/CatalogCard.tsx b/src/app/(mobile-ui)/dev/ds/_components/CatalogCard.tsx new file mode 100644 index 000000000..17d29d2bc --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/_components/CatalogCard.tsx @@ -0,0 +1,55 @@ +'use client' + +import Link from 'next/link' +import { Icon, type IconName } from '@/components/Global/Icons/Icon' +import { Card } from '@/components/0_Bruddle/Card' +import { StatusTag } from './StatusTag' + +interface CatalogCardProps { + title: string + description: string + href: string + icon?: IconName + status?: 'production' | 'limited' | 'unused' | 'needs-refactor' + quality?: 1 | 2 | 3 | 4 | 5 + usages?: number +} + +export function CatalogCard({ title, description, href, icon, status, quality, usages }: CatalogCardProps) { + return ( + <Link href={href}> + <Card className="h-full cursor-pointer p-4 transition-all hover:shadow-4 hover:-translate-x-1 hover:-translate-y-1"> + <div className="flex items-start gap-3"> + {icon && ( + <div className="flex size-9 shrink-0 items-center justify-center rounded-sm border border-n-1 bg-primary-3"> + <Icon name={icon} size={18} /> + </div> + )} + <div className="min-w-0 flex-1"> + <h3 className="text-base font-bold">{title}</h3> + <p className="mt-1 text-sm text-grey-1">{description}</p> + <div className="mt-2 flex flex-wrap items-center gap-1.5"> + {status && <StatusTag status={status} />} + {quality && ( + <span className="text-[10px] text-grey-1"> + {'★'.repeat(quality)} + {'☆'.repeat(5 - quality)} + </span> + )} + {usages !== undefined && ( + <span className="text-[10px] text-grey-1"> + {usages} usage{usages !== 1 ? 's' : ''} + </span> + )} + </div> + </div> + <Icon name="arrow-up-right" size={14} className="shrink-0 text-grey-1" /> + </div> + </Card> + </Link> + ) +} + +export function CatalogGrid({ children }: { children: React.ReactNode }) { + return <div className="grid grid-cols-1 gap-3 sm:grid-cols-2">{children}</div> +} diff --git a/src/app/(mobile-ui)/dev/ds/_components/CodeBlock.tsx b/src/app/(mobile-ui)/dev/ds/_components/CodeBlock.tsx new file mode 100644 index 000000000..be340465e --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/_components/CodeBlock.tsx @@ -0,0 +1,37 @@ +'use client' + +import { useState } from 'react' +import { Icon } from '@/components/Global/Icons/Icon' +import { useHighlightedCode } from '../_hooks/useHighlightedCode' + +interface CodeBlockProps { + code: string + label?: string + language?: string +} + +export function CodeBlock({ code, label, language = 'tsx' }: CodeBlockProps) { + const html = useHighlightedCode(code, language) + const [copied, setCopied] = useState(false) + + const handleCopy = () => { + navigator.clipboard.writeText(code) + setCopied(true) + setTimeout(() => setCopied(false), 1500) + } + + return ( + <div> + <div className="flex items-center justify-between"> + {label && <span className="text-xs font-bold uppercase tracking-wider text-grey-1">{label}</span>} + <button onClick={handleCopy} className="ml-auto text-grey-1 opacity-40 hover:opacity-100"> + {copied ? <Icon name="check" size={14} /> : <Icon name="copy" size={14} />} + </button> + </div> + <div + className="shiki-code mt-2 overflow-x-auto rounded-sm text-[13px] leading-relaxed [&_code]:block [&_pre]:!bg-transparent [&_pre]:p-0" + dangerouslySetInnerHTML={{ __html: html }} + /> + </div> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/_components/DesignNote.tsx b/src/app/(mobile-ui)/dev/ds/_components/DesignNote.tsx new file mode 100644 index 000000000..e82a33622 --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/_components/DesignNote.tsx @@ -0,0 +1,24 @@ +import { Icon } from '@/components/Global/Icons/Icon' + +const styles = { + warning: { + container: 'border-yellow-1/40 bg-yellow-1/20', + icon: 'text-n-1', + iconName: 'alert' as const, + }, + info: { + container: 'border-primary-3 bg-primary-3/20', + icon: 'text-n-1', + iconName: 'info' as const, + }, +} + +export function DesignNote({ type, children }: { type: 'warning' | 'info'; children: React.ReactNode }) { + const s = styles[type] + return ( + <div className={`flex items-start gap-3 rounded-sm border p-4 text-sm ${s.container}`}> + <Icon name={s.iconName} size={18} className={`mt-0.5 shrink-0 ${s.icon}`} /> + <div className="font-bold leading-relaxed">{children}</div> + </div> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/_components/DoDont.tsx b/src/app/(mobile-ui)/dev/ds/_components/DoDont.tsx new file mode 100644 index 000000000..8de7cb3f9 --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/_components/DoDont.tsx @@ -0,0 +1,33 @@ +import { Icon } from '@/components/Global/Icons/Icon' + +interface DoDontProps { + doExample: React.ReactNode + doLabel?: string + dontExample: React.ReactNode + dontLabel?: string +} + +export function DoDont({ doExample, doLabel = 'Do', dontExample, dontLabel = "Don't" }: DoDontProps) { + return ( + <div className="grid grid-cols-1 gap-4 sm:grid-cols-2"> + <div> + <div className="rounded-sm border-2 border-green-1 bg-white p-4">{doExample}</div> + <div className="mt-2 flex items-center gap-1.5"> + <div className="flex size-5 items-center justify-center rounded-full bg-green-1"> + <Icon name="check" size={12} className="text-white" /> + </div> + <span className="text-sm font-bold">{doLabel}</span> + </div> + </div> + <div> + <div className="rounded-sm border-2 border-error-1 bg-white p-4">{dontExample}</div> + <div className="mt-2 flex items-center gap-1.5"> + <div className="flex size-5 items-center justify-center rounded-full bg-error-1"> + <Icon name="cancel" size={12} className="text-white" /> + </div> + <span className="text-sm font-bold">{dontLabel}</span> + </div> + </div> + </div> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/_components/DocHeader.tsx b/src/app/(mobile-ui)/dev/ds/_components/DocHeader.tsx new file mode 100644 index 000000000..55cf98bc0 --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/_components/DocHeader.tsx @@ -0,0 +1,21 @@ +import { StatusTag } from './StatusTag' + +interface DocHeaderProps { + title: string + description: string + status?: 'production' | 'limited' | 'unused' | 'needs-refactor' + usages?: string +} + +export function DocHeader({ title, description, status, usages }: DocHeaderProps) { + return ( + <div className="border-b border-gray-3 pb-8"> + <div className="flex items-center gap-3"> + <h1 className="text-h3">{title}</h1> + {status && <StatusTag status={status} />} + {usages && <span className="text-xs text-grey-1">{usages}</span>} + </div> + <p className="mt-3 max-w-prose text-sm leading-relaxed text-grey-1">{description}</p> + </div> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/_components/DocPage.tsx b/src/app/(mobile-ui)/dev/ds/_components/DocPage.tsx new file mode 100644 index 000000000..3183b66fc --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/_components/DocPage.tsx @@ -0,0 +1,33 @@ +import React from 'react' + +function DocPageRoot({ children }: { children: React.ReactNode }) { + // Extract Design/Code children for backward compat, or render directly + const extracted: React.ReactNode[] = [] + + React.Children.forEach(children, (child) => { + if (!React.isValidElement(child)) { + extracted.push(child) + return + } + if (child.type === Design) { + // Unwrap Design children directly + extracted.push(child.props.children) + } else if (child.type === Code) { + // Skip Code — code now lives inside DocSection.Code + } else { + extracted.push(child) + } + }) + + return <div className="space-y-16">{extracted}</div> +} + +function Design({ children }: { children: React.ReactNode }) { + return <>{children}</> +} + +function Code({ children }: { children: React.ReactNode }) { + return <>{children}</> +} + +export const DocPage = Object.assign(DocPageRoot, { Design, Code }) diff --git a/src/app/(mobile-ui)/dev/ds/_components/DocSection.tsx b/src/app/(mobile-ui)/dev/ds/_components/DocSection.tsx new file mode 100644 index 000000000..acaad3762 --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/_components/DocSection.tsx @@ -0,0 +1,75 @@ +'use client' + +import React, { useState } from 'react' + +interface DocSectionProps { + title: string + description?: string + children: React.ReactNode +} + +function DocSectionRoot({ title, description, children }: DocSectionProps) { + const [codeVisible, setCodeVisible] = useState(false) + + let contentNode: React.ReactNode = null + let codeNode: React.ReactNode = null + let hasCompoundChildren = false + + React.Children.forEach(children, (child) => { + if (!React.isValidElement(child)) return + if (child.type === Content) { + contentNode = child.props.children + hasCompoundChildren = true + } + if (child.type === Code) { + codeNode = child.props.children + hasCompoundChildren = true + } + }) + + // Backward compat: if no Content/Code wrappers, treat all children as content + if (!hasCompoundChildren) { + contentNode = children + } + + const hasCode = codeNode !== null + + return ( + <section className={hasCode ? 'lg:grid lg:grid-cols-2 lg:gap-10' : ''}> + {/* Left: title + description + content */} + <div> + <div className="flex items-center gap-2"> + <h2 className="text-h5">{title}</h2> + {hasCode && ( + <button + onClick={() => setCodeVisible(!codeVisible)} + className="flex items-center gap-1 rounded-sm border border-gray-3 px-1.5 py-0.5 text-[10px] font-bold text-grey-1 lg:hidden" + aria-label={codeVisible ? 'Hide code' : 'Show code'} + > + </> + </button> + )} + </div> + {description && <p className="mt-2 text-sm text-grey-1">{description}</p>} + <div className="mt-6">{contentNode}</div> + </div> + + {/* Right: code */} + {hasCode && ( + <div className={`mt-6 lg:mt-0 ${codeVisible ? 'block' : 'hidden'} lg:block`}> + <div className="space-y-6 rounded-sm bg-primary-3/10 p-4">{codeNode}</div> + </div> + )} + </section> + ) +} + +function Content({ children }: { children: React.ReactNode }) { + return <>{children}</> +} + +function Code({ children }: { children: React.ReactNode }) { + return <>{children}</> +} + +export const DocSection = Object.assign(DocSectionRoot, { Content, Code }) diff --git a/src/app/(mobile-ui)/dev/ds/_components/DocSidebar.tsx b/src/app/(mobile-ui)/dev/ds/_components/DocSidebar.tsx new file mode 100644 index 000000000..937c63b61 --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/_components/DocSidebar.tsx @@ -0,0 +1,95 @@ +'use client' + +import { useState } from 'react' +import Link from 'next/link' +import { usePathname } from 'next/navigation' +import { Icon } from '@/components/Global/Icons/Icon' +import { SIDEBAR_CONFIG } from './nav-config' + +export function DocSidebar() { + const pathname = usePathname() + const [isOpen, setIsOpen] = useState(false) + + // Determine which tier we're in + const tier = pathname?.includes('/foundations') + ? 'foundations' + : pathname?.includes('/primitives') + ? 'primitives' + : pathname?.includes('/patterns') + ? 'patterns' + : pathname?.includes('/playground') + ? 'playground' + : null + + const items = tier ? SIDEBAR_CONFIG[tier] : [] + + if (!tier || items.length === 0) return null + + return ( + <> + {/* Mobile hamburger */} + <button + onClick={() => setIsOpen(!isOpen)} + className="flex items-center gap-1.5 rounded-sm border border-n-1/20 px-2.5 py-1.5 text-xs font-bold md:hidden" + > + <Icon name="docs" size={14} /> + Menu + </button> + + {/* Mobile overlay */} + {isOpen && ( + <div className="fixed inset-0 z-40 md:hidden" onClick={() => setIsOpen(false)}> + <div className="absolute inset-0 bg-black/20" /> + <nav + className="absolute left-0 top-0 h-full w-64 border-r border-n-1 bg-white p-4 shadow-lg" + onClick={(e) => e.stopPropagation()} + > + <div className="mb-4 flex items-center justify-between"> + <span className="text-sm font-bold capitalize">{tier}</span> + <button onClick={() => setIsOpen(false)}> + <Icon name="cancel" size={16} /> + </button> + </div> + <SidebarLinks items={items} pathname={pathname} onNavigate={() => setIsOpen(false)} /> + </nav> + </div> + )} + + {/* Desktop sidebar */} + <nav className="hidden w-48 shrink-0 border-r border-gray-3 pr-4 md:block"> + <SidebarLinks items={items} pathname={pathname} /> + </nav> + </> + ) +} + +function SidebarLinks({ + items, + pathname, + onNavigate, +}: { + items: typeof SIDEBAR_CONFIG.foundations + pathname: string | null + onNavigate?: () => void +}) { + return ( + <div className="flex flex-col gap-0.5"> + {items.map((item) => { + const isActive = pathname === item.href + return ( + <Link + key={item.href} + href={item.href} + onClick={onNavigate} + className={`flex items-center gap-2 rounded-sm px-3 py-2 text-xs font-bold transition-colors ${ + isActive ? 'bg-gray-3 text-n-1' : 'text-grey-1 hover:bg-gray-3/50 hover:text-n-1' + }`} + > + <Icon name={item.icon} size={14} /> + {item.label} + </Link> + ) + })} + </div> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/_components/Playground.tsx b/src/app/(mobile-ui)/dev/ds/_components/Playground.tsx new file mode 100644 index 000000000..1b4a15eb4 --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/_components/Playground.tsx @@ -0,0 +1,111 @@ +'use client' + +import { useState } from 'react' +import { CodeBlock } from './CodeBlock' + +export type PlaygroundControl = + | { type: 'select'; prop: string; label: string; options: string[] } + | { type: 'boolean'; prop: string; label: string } + | { type: 'text'; prop: string; label: string; placeholder?: string } + +interface PlaygroundProps { + name: string + importPath: string + defaults: Record<string, any> + controls: PlaygroundControl[] + render: (props: Record<string, any>) => React.ReactNode + codeTemplate: (props: Record<string, any>) => string +} + +export function Playground({ name, importPath, defaults, controls, render, codeTemplate }: PlaygroundProps) { + const [props, setProps] = useState<Record<string, any>>(defaults) + + const updateProp = (key: string, value: any) => { + setProps((prev) => ({ ...prev, [key]: value })) + } + + return ( + <div className="space-y-4"> + {/* Preview */} + <div className="rounded-sm border border-gray-3 bg-white p-6"> + <div className="mb-3 text-xs font-bold uppercase tracking-wider text-gray-2">Preview</div> + <div className="flex items-center justify-center rounded-sm bg-gray-3/30 py-8">{render(props)}</div> + </div> + + {/* Controls */} + <div className="rounded-sm border border-gray-3 bg-gray-3/20 p-4"> + <div className="mb-3 text-xs font-bold uppercase tracking-wider text-gray-2">Controls</div> + <div className="grid grid-cols-2 gap-3 sm:grid-cols-3"> + {controls.map((control) => ( + <ControlField + key={control.prop} + control={control} + value={props[control.prop]} + onChange={(v) => updateProp(control.prop, v)} + /> + ))} + </div> + </div> + + {/* Generated code */} + <CodeBlock code={codeTemplate(props)} label="Code" /> + <CodeBlock code={importPath} label="Import" /> + </div> + ) +} + +function ControlField({ + control, + value, + onChange, +}: { + control: PlaygroundControl + value: any + onChange: (v: any) => void +}) { + switch (control.type) { + case 'select': + return ( + <div> + <label className="mb-1 block text-xs font-bold text-grey-1">{control.label}</label> + <select + value={value ?? ''} + onChange={(e) => onChange(e.target.value || undefined)} + className="w-full rounded-sm border border-n-1/30 bg-white px-2 py-1.5 text-xs font-bold" + > + <option value="">(none)</option> + {control.options.map((opt) => ( + <option key={opt} value={opt}> + {opt} + </option> + ))} + </select> + </div> + ) + case 'boolean': + return ( + <div className="flex items-center gap-2"> + <input + type="checkbox" + checked={!!value} + onChange={(e) => onChange(e.target.checked)} + className="size-4 rounded-sm border border-n-1" + /> + <label className="text-xs font-bold text-grey-1">{control.label}</label> + </div> + ) + case 'text': + return ( + <div> + <label className="mb-1 block text-xs font-bold text-grey-1">{control.label}</label> + <input + type="text" + value={value ?? ''} + onChange={(e) => onChange(e.target.value || undefined)} + placeholder={control.placeholder} + className="w-full rounded-sm border border-n-1/30 bg-white px-2 py-1.5 text-xs" + /> + </div> + ) + } +} diff --git a/src/app/(mobile-ui)/dev/ds/_components/PropsTable.tsx b/src/app/(mobile-ui)/dev/ds/_components/PropsTable.tsx new file mode 100644 index 000000000..217a0ca37 --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/_components/PropsTable.tsx @@ -0,0 +1,47 @@ +interface PropsTableRow { + name: string + type: string + default: string + required?: boolean + description?: string +} + +export function PropsTable({ rows }: { rows: PropsTableRow[] }) { + return ( + <div className="overflow-x-auto rounded-sm border border-gray-3 text-sm"> + <table className="w-full"> + <thead> + <tr className="border-b border-gray-3 bg-gray-3/40"> + <th className="px-4 py-2.5 text-left text-xs font-bold uppercase tracking-wider text-gray-1"> + prop + </th> + <th className="px-4 py-2.5 text-left text-xs font-bold uppercase tracking-wider text-gray-1"> + type + </th> + <th className="px-4 py-2.5 text-left text-xs font-bold uppercase tracking-wider text-gray-1"> + default + </th> + <th className="hidden px-4 py-2.5 text-left text-xs font-bold uppercase tracking-wider text-gray-1 sm:table-cell"> + description + </th> + </tr> + </thead> + <tbody> + {rows.map((row) => ( + <tr key={row.name} className="border-b border-gray-3 last:border-0"> + <td className="px-4 py-2.5 font-mono font-bold"> + {row.name} + {row.required && <span className="ml-1 text-error-1">*</span>} + </td> + <td className="px-4 py-2.5 font-mono text-grey-1">{row.type}</td> + <td className="px-4 py-2.5 font-mono text-grey-1">{row.default}</td> + {row.description && ( + <td className="hidden px-4 py-2.5 text-grey-1 sm:table-cell">{row.description}</td> + )} + </tr> + ))} + </tbody> + </table> + </div> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/_components/SectionDivider.tsx b/src/app/(mobile-ui)/dev/ds/_components/SectionDivider.tsx new file mode 100644 index 000000000..255fca580 --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/_components/SectionDivider.tsx @@ -0,0 +1,3 @@ +export function SectionDivider() { + return <hr className="border-t border-gray-3" /> +} diff --git a/src/app/(mobile-ui)/dev/ds/_components/StatusTag.tsx b/src/app/(mobile-ui)/dev/ds/_components/StatusTag.tsx new file mode 100644 index 000000000..1013f4282 --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/_components/StatusTag.tsx @@ -0,0 +1,21 @@ +const styles = { + production: 'bg-green-1/30 text-n-1', + limited: 'bg-yellow-1/30 text-n-1', + unused: 'bg-n-1/10 text-grey-1', + 'needs-refactor': 'bg-error-1/30 text-n-1', +} + +const labels = { + production: 'production', + limited: 'limited use', + unused: 'unused', + 'needs-refactor': 'needs refactor', +} + +export function StatusTag({ status }: { status: 'production' | 'limited' | 'unused' | 'needs-refactor' }) { + return ( + <span className={`inline-block rounded-full px-2 py-0.5 text-[10px] font-bold ${styles[status]}`}> + {labels[status]} + </span> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/_components/TierNav.tsx b/src/app/(mobile-ui)/dev/ds/_components/TierNav.tsx new file mode 100644 index 000000000..1efe60467 --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/_components/TierNav.tsx @@ -0,0 +1,32 @@ +'use client' + +import Link from 'next/link' +import { usePathname } from 'next/navigation' +import { Icon } from '@/components/Global/Icons/Icon' +import { TIERS } from './nav-config' + +export function TierNav() { + const pathname = usePathname() + + return ( + <div className="flex gap-1"> + {TIERS.map((tier) => { + const isActive = pathname?.startsWith(tier.href) + return ( + <Link + key={tier.href} + href={tier.href} + className={`flex items-center gap-1.5 rounded-sm border px-3 py-2 text-xs font-bold transition-colors ${ + isActive + ? 'border-n-1 bg-n-1 text-white' + : 'border-gray-3 text-grey-1 hover:border-gray-4 hover:bg-gray-3/50' + }`} + > + <Icon name={tier.icon} size={14} /> + {tier.label} + </Link> + ) + })} + </div> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/_components/WhenToUse.tsx b/src/app/(mobile-ui)/dev/ds/_components/WhenToUse.tsx new file mode 100644 index 000000000..cb8d605c1 --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/_components/WhenToUse.tsx @@ -0,0 +1,37 @@ +import { Icon } from '@/components/Global/Icons/Icon' + +interface WhenToUseProps { + use: string[] + dontUse?: string[] +} + +export function WhenToUse({ use, dontUse }: WhenToUseProps) { + return ( + <div className="grid grid-cols-1 gap-4 sm:grid-cols-2"> + <div className="rounded-sm border border-gray-3 bg-white p-5"> + <h3 className="text-base font-bold">When to use</h3> + <ul className="mt-3 space-y-2"> + {use.map((item, i) => ( + <li key={i} className="flex items-start gap-2 text-sm text-grey-1"> + <Icon name="check" size={16} className="mt-0.5 shrink-0 text-green-1" /> + {item} + </li> + ))} + </ul> + </div> + {dontUse && ( + <div className="rounded-sm border border-gray-3 bg-white p-5"> + <h3 className="text-base font-bold">When not to use</h3> + <ul className="mt-3 space-y-2"> + {dontUse.map((item, i) => ( + <li key={i} className="flex items-start gap-2 text-sm text-grey-1"> + <Icon name="cancel" size={16} className="mt-0.5 shrink-0 text-error-1" /> + {item} + </li> + ))} + </ul> + </div> + )} + </div> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/_components/nav-config.ts b/src/app/(mobile-ui)/dev/ds/_components/nav-config.ts new file mode 100644 index 000000000..fa64e72cb --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/_components/nav-config.ts @@ -0,0 +1,51 @@ +import type { IconName } from '@/components/Global/Icons/Icon' + +export interface NavItem { + label: string + href: string + icon: IconName +} + +export const TIERS = [ + { label: 'Foundations', href: '/dev/ds/foundations', icon: 'bulb' as IconName }, + { label: 'Primitives', href: '/dev/ds/primitives', icon: 'switch' as IconName }, + { label: 'Patterns', href: '/dev/ds/patterns', icon: 'docs' as IconName }, + { label: 'Playground', href: '/dev/ds/playground', icon: 'bulb' as IconName }, +] + +export const SIDEBAR_CONFIG: Record<string, NavItem[]> = { + foundations: [ + { label: 'Colors', icon: 'bulb', href: '/dev/ds/foundations/colors' }, + { label: 'Typography', icon: 'docs', href: '/dev/ds/foundations/typography' }, + { label: 'Spacing', icon: 'switch', href: '/dev/ds/foundations/spacing' }, + { label: 'Shadows', icon: 'docs', href: '/dev/ds/foundations/shadows' }, + { label: 'Icons', icon: 'search', href: '/dev/ds/foundations/icons' }, + { label: 'Borders', icon: 'docs', href: '/dev/ds/foundations/borders' }, + ], + primitives: [ + { label: 'Button', icon: 'switch', href: '/dev/ds/primitives/button' }, + { label: 'Card', icon: 'docs', href: '/dev/ds/primitives/card' }, + { label: 'BaseInput', icon: 'clip', href: '/dev/ds/primitives/base-input' }, + { label: 'BaseSelect', icon: 'clip', href: '/dev/ds/primitives/base-select' }, + { label: 'Checkbox', icon: 'check', href: '/dev/ds/primitives/checkbox' }, + { label: 'Toast', icon: 'bell', href: '/dev/ds/primitives/toast' }, + { label: 'Divider', icon: 'minus-circle', href: '/dev/ds/primitives/divider' }, + { label: 'Title', icon: 'docs', href: '/dev/ds/primitives/title' }, + { label: 'PageContainer', icon: 'docs', href: '/dev/ds/primitives/page-container' }, + ], + patterns: [ + { label: 'Modal', icon: 'link', href: '/dev/ds/patterns/modal' }, + { label: 'Drawer', icon: 'link', href: '/dev/ds/patterns/drawer' }, + { label: 'Navigation', icon: 'link', href: '/dev/ds/patterns/navigation' }, + { label: 'Loading', icon: 'processing', href: '/dev/ds/patterns/loading' }, + { label: 'Feedback', icon: 'meter', href: '/dev/ds/patterns/feedback' }, + { label: 'Copy & Share', icon: 'copy', href: '/dev/ds/patterns/copy-share' }, + { label: 'Layouts', icon: 'switch', href: '/dev/ds/patterns/layouts' }, + { label: 'Cards (Global)', icon: 'docs', href: '/dev/ds/patterns/cards-global' }, + { label: 'AmountInput', icon: 'dollar', href: '/dev/ds/patterns/amount-input' }, + ], + playground: [ + { label: 'Shake & Confetti', icon: 'gift', href: '/dev/ds/playground/shake-test' }, + { label: 'Perk Success', icon: 'check-circle', href: '/dev/ds/playground/perk-success' }, + ], +} diff --git a/src/app/(mobile-ui)/dev/ds/_hooks/useHighlightedCode.ts b/src/app/(mobile-ui)/dev/ds/_hooks/useHighlightedCode.ts new file mode 100644 index 000000000..da80e8620 --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/_hooks/useHighlightedCode.ts @@ -0,0 +1,39 @@ +'use client' + +import { useEffect, useState } from 'react' +import type { HighlighterCore } from 'shiki' + +let highlighterPromise: Promise<HighlighterCore> | null = null + +function getHighlighter() { + if (!highlighterPromise) { + highlighterPromise = import('shiki/bundle/web').then((shiki) => + shiki.createHighlighter({ + themes: ['github-light'], + langs: ['tsx'], + }) + ) + } + return highlighterPromise +} + +function escapeHtml(str: string) { + return str.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>') +} + +export function useHighlightedCode(code: string, lang = 'tsx') { + const [html, setHtml] = useState(() => `<pre><code>${escapeHtml(code)}</code></pre>`) + + useEffect(() => { + let cancelled = false + getHighlighter().then((h) => { + if (cancelled) return + setHtml(h.codeToHtml(code, { lang, theme: 'github-light' })) + }) + return () => { + cancelled = true + } + }, [code, lang]) + + return html +} diff --git a/src/app/(mobile-ui)/dev/ds/foundations/borders/page.tsx b/src/app/(mobile-ui)/dev/ds/foundations/borders/page.tsx new file mode 100644 index 000000000..de94424e1 --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/foundations/borders/page.tsx @@ -0,0 +1,87 @@ +'use client' + +import { DocHeader } from '../../_components/DocHeader' +import { DocSection } from '../../_components/DocSection' +import { DocPage } from '../../_components/DocPage' +import { CodeBlock } from '../../_components/CodeBlock' + +export default function BordersPage() { + return ( + <DocPage> + <DocHeader title="Borders" description="Border radius, border styles, and the brutal-border pattern." /> + + {/* Border radius */} + <DocSection title="Border Radius"> + <p className="text-sm text-grey-1"> + Always use <code className="font-mono font-bold text-n-1">rounded-sm</code>. This is the standard + across all components. + </p> + <div className="mt-4 flex gap-4"> + <div className="flex flex-col items-center gap-1"> + <div className="size-16 rounded-sm border border-n-1 bg-primary-3/30" /> + <span className="text-xs font-bold">rounded-sm</span> + <span className="text-xs text-grey-1">standard</span> + </div> + <div className="flex flex-col items-center gap-1"> + <div className="size-16 rounded-full border border-n-1 bg-primary-3/30" /> + <span className="text-xs font-bold">rounded-full</span> + <span className="text-xs text-grey-1">badges, avatars</span> + </div> + </div> + </DocSection> + + {/* Border styles */} + <DocSection title="Border Styles"> + <DocSection.Content> + <div className="space-y-6"> + <div> + <div className="rounded-sm border border-n-1 p-4 text-xs font-bold">border border-n-1</div> + <p className="mt-1 text-xs text-grey-1">Standard 1px black border. Most common.</p> + </div> + <div> + <div className="brutal-border rounded-sm p-4 text-xs font-bold">brutal-border</div> + <p className="mt-1 text-xs text-grey-1">2px solid black. For emphasis.</p> + </div> + <div> + <div className="rounded-sm border border-n-1/20 p-4 text-xs font-bold"> + border border-n-1/20 + </div> + <p className="mt-1 text-xs text-grey-1"> + Subtle border. For code snippets, secondary containers. + </p> + </div> + <div> + <div className="rounded-sm border border-dashed border-n-1/30 p-4 text-xs font-bold"> + border-dashed border-n-1/30 + </div> + <p className="mt-1 text-xs text-grey-1">Dashed border. For drop zones, placeholders.</p> + </div> + </div> + </DocSection.Content> + <DocSection.Code> + <CodeBlock label="border-n-1" code='className="rounded-sm border border-n-1"' /> + <CodeBlock label="brutal-border" code='className="brutal-border rounded-sm"' /> + </DocSection.Code> + </DocSection> + + {/* Labels */} + <DocSection title="Label Classes"> + <DocSection.Content> + <div className="flex flex-wrap gap-2"> + {['label-stroke', 'label-purple', 'label-yellow', 'label-black', 'label-teal'].map((cls) => ( + <span key={cls} className={`${cls} inline-block rounded-full px-3 py-1 text-xs font-bold`}> + {cls.replace('label-', '')} + </span> + ))} + </div> + </DocSection.Content> + <DocSection.Code> + <CodeBlock + label="Label Classes" + code='className="label-purple rounded-full px-3 py-1 text-xs font-bold"' + /> + </DocSection.Code> + </DocSection> + </DocPage> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/foundations/colors/page.tsx b/src/app/(mobile-ui)/dev/ds/foundations/colors/page.tsx new file mode 100644 index 000000000..3452e1d5d --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/foundations/colors/page.tsx @@ -0,0 +1,124 @@ +'use client' + +import { useState } from 'react' +import { Icon } from '@/components/Global/Icons/Icon' +import { DesignNote } from '../../_components/DesignNote' +import { DocHeader } from '../../_components/DocHeader' +import { DocSection } from '../../_components/DocSection' +import { DocPage } from '../../_components/DocPage' + +const COLORS = [ + { name: 'purple-1', bg: 'bg-purple-1', text: 'text-purple-1', hex: '#FF90E8', note: 'PINK not purple!' }, + { name: 'primary-3', bg: 'bg-primary-3', text: 'text-primary-3', hex: '#EFE4FF', note: 'lavender' }, + { name: 'primary-4', bg: 'bg-primary-4', text: 'text-primary-4', hex: '#D8C4F6', note: 'deeper lavender' }, + { name: 'yellow-1', bg: 'bg-yellow-1', text: 'text-yellow-1', hex: '#FFC900', note: 'peanut yellow' }, + { name: 'green-1', bg: 'bg-green-1', text: 'text-green-1', hex: '#98E9AB', note: 'success green' }, + { name: 'n-1', bg: 'bg-n-1', text: 'text-n-1', hex: '#000000', note: 'black / primary text' }, + { name: 'grey-1', bg: 'bg-grey-1', text: 'text-grey-1', hex: '#6B6B6B', note: 'secondary text' }, + { name: 'teal-1', bg: 'bg-teal-1', text: 'text-teal-1', hex: '#C3F5E4', note: 'teal accent' }, + { name: 'violet-1', bg: 'bg-violet-1', text: 'text-violet-1', hex: '#A78BFA', note: 'violet' }, + { name: 'error-1', bg: 'bg-error-1', text: 'text-error-1', hex: '#FF6B6B', note: 'error red' }, + { name: 'success-3', bg: 'bg-success-3', text: 'text-success-3', hex: '#4ADE80', note: 'success bg' }, + { name: 'secondary-1', bg: 'bg-secondary-1', text: 'text-secondary-1', hex: '#FFC900', note: 'same as yellow-1' }, +] + +const BACKGROUNDS = [ + { name: 'bg-peanut-repeat-normal', description: 'Normal peanut repeat pattern' }, + { name: 'bg-peanut-repeat-large', description: 'Large peanut repeat pattern' }, + { name: 'bg-peanut-repeat-small', description: 'Small peanut repeat pattern' }, +] + +export default function ColorsPage() { + const [copiedColor, setCopiedColor] = useState<string | null>(null) + + const copyClass = (cls: string) => { + navigator.clipboard.writeText(cls) + setCopiedColor(cls) + setTimeout(() => setCopiedColor(null), 1500) + } + + return ( + <DocPage> + <DocHeader + title="Colors" + description="Color tokens from tailwind.config.js. Tap any swatch to copy the class name." + /> + + <DesignNote type="warning"> + purple-1 / primary-1 = #FF90E8 — this is PINK, not purple. The naming is misleading but too widely used + to rename. + </DesignNote> + + {/* Color grid */} + <DocSection title="Color Tokens"> + <div className="grid grid-cols-2 gap-2"> + {COLORS.map((color) => ( + <button + key={color.name} + onClick={() => copyClass(color.bg)} + className="flex items-center gap-2 rounded-sm border border-n-1/20 p-2 text-left transition-colors hover:border-n-1/40" + > + <div className={`size-8 shrink-0 rounded-sm border border-n-1 ${color.bg}`} /> + <div className="min-w-0 flex-1"> + <p className="text-xs font-bold">{color.name}</p> + <p className="text-[9px] text-grey-1"> + {color.hex} · {color.note} + </p> + </div> + {copiedColor === color.bg ? ( + <Icon name="check" size={14} className="shrink-0 text-success-3" /> + ) : ( + <Icon + name="copy" + size={12} + className="shrink-0 text-grey-1 opacity-0 group-hover:opacity-100" + /> + )} + </button> + ))} + </div> + </DocSection> + + {/* Text / BG pairs */} + <DocSection title="Text Colors"> + <div className="space-y-2 rounded-sm border border-n-1 p-3 text-xs"> + <div className="flex items-center gap-3"> + <span className="w-20 font-bold text-n-1">text-n-1</span> + <span className="text-n-1">Primary text — headings, labels, body (134 usages)</span> + </div> + <div className="flex items-center gap-3"> + <span className="w-20 font-bold text-grey-1">text-grey-1</span> + <span className="text-grey-1">Secondary text — descriptions, hints, metadata</span> + </div> + <div className="flex items-center gap-3"> + <span className="w-20 font-bold text-error-1">text-error-1</span> + <span className="text-error-1">Error text — validation messages, alerts</span> + </div> + <div className="flex items-center gap-3"> + <span className="w-20 font-bold text-success-3">text-success-3</span> + <span className="text-success-3">Success text — confirmations</span> + </div> + </div> + + <DesignNote type="info"> + Inline links: always use{' '} + <code className="rounded bg-white px-1 font-mono text-[10px]">text-black underline</code> — never + text-purple-1. + </DesignNote> + </DocSection> + + {/* Background patterns */} + <DocSection title="Background Patterns"> + <div className="space-y-2"> + {BACKGROUNDS.map((bg) => ( + <button key={bg.name} onClick={() => copyClass(bg.name)} className="w-full text-left"> + <div className={`${bg.name} h-20 rounded-sm border border-n-1 bg-primary-3 p-2`}> + <span className="font-mono text-[10px]">.{bg.name}</span> + </div> + </button> + ))} + </div> + </DocSection> + </DocPage> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/foundations/icons/page.tsx b/src/app/(mobile-ui)/dev/ds/foundations/icons/page.tsx new file mode 100644 index 000000000..0bf1f13e2 --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/foundations/icons/page.tsx @@ -0,0 +1,148 @@ +'use client' + +import { useState } from 'react' +import { Icon, type IconName } from '@/components/Global/Icons/Icon' +import { DocHeader } from '../../_components/DocHeader' +import { DocSection } from '../../_components/DocSection' +import { DocPage } from '../../_components/DocPage' +import { CodeBlock } from '../../_components/CodeBlock' + +const ALL_ICONS: IconName[] = [ + 'alert', + 'alert-filled', + 'arrow-down', + 'arrow-down-left', + 'arrow-up', + 'arrow-up-right', + 'arrow-exchange', + 'badge', + 'bank', + 'bell', + 'bulb', + 'camera', + 'camera-flip', + 'cancel', + 'check', + 'check-circle', + 'chevron-up', + 'chevron-down', + 'clip', + 'clock', + 'copy', + 'currency', + 'docs', + 'dollar', + 'double-check', + 'download', + 'error', + 'exchange', + 'external-link', + 'eye', + 'eye-slash', + 'failed', + 'fees', + 'gift', + 'globe-lock', + 'history', + 'home', + 'info', + 'info-filled', + 'invite-heart', + 'link', + 'link-slash', + 'lock', + 'logout', + 'meter', + 'minus-circle', + 'mobile-install', + 'paperclip', + 'paste', + 'peanut-support', + 'pending', + 'plus', + 'plus-circle', + 'processing', + 'qr-code', + 'question-mark', + 'retry', + 'search', + 'share', + 'shield', + 'smile', + 'split', + 'star', + 'success', + 'switch', + 'trophy', + 'txn-off', + 'upload-cloud', + 'user', + 'user-id', + 'user-plus', + 'wallet', + 'wallet-cancel', + 'wallet-outline', + 'achievements', +] + +export default function IconsPage() { + const [search, setSearch] = useState('') + const [copiedIcon, setCopiedIcon] = useState<string | null>(null) + + const filtered = search ? ALL_ICONS.filter((name) => name.includes(search.toLowerCase())) : ALL_ICONS + + const copyIcon = (name: string) => { + navigator.clipboard.writeText(name) + setCopiedIcon(name) + setTimeout(() => setCopiedIcon(null), 1500) + } + + return ( + <DocPage> + <DocHeader + title={`Icons (${ALL_ICONS.length})`} + description="Material design icons. Tap any icon to copy its name." + /> + + {/* Search */} + <input + type="text" + value={search} + onChange={(e) => setSearch(e.target.value)} + placeholder="Search icons..." + className="w-full rounded-sm border border-n-1 px-3 py-2 text-sm" + /> + + {/* Grid */} + <div className="grid grid-cols-5 gap-1.5 sm:grid-cols-8"> + {filtered.map((name) => ( + <button + key={name} + onClick={() => copyIcon(name)} + className={`flex flex-col items-center gap-0.5 rounded-sm border p-1.5 transition-colors ${ + copiedIcon === name + ? 'border-success-3 bg-success-3/10' + : 'border-n-1/10 hover:border-n-1/40' + }`} + > + <Icon name={name} size={18} /> + <span className="text-[7px] leading-tight text-grey-1">{name}</span> + </button> + ))} + </div> + + {filtered.length === 0 && ( + <p className="py-8 text-center text-sm text-grey-1">No icons match "{search}"</p> + )} + + <DocSection title="Usage"> + <DocSection.Code> + <CodeBlock + label="Usage" + code={`import { Icon, type IconName } from '@/components/Global/Icons/Icon'\n<Icon name="check" size={20} />`} + /> + </DocSection.Code> + </DocSection> + </DocPage> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/foundations/page.tsx b/src/app/(mobile-ui)/dev/ds/foundations/page.tsx new file mode 100644 index 000000000..1bcc89a44 --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/foundations/page.tsx @@ -0,0 +1,61 @@ +import { CatalogCard, CatalogGrid } from '../_components/CatalogCard' +import { DocPage } from '../_components/DocPage' + +export default function FoundationsPage() { + return ( + <DocPage> + <div> + <h1 className="text-h3">Foundations</h1> + <p className="mt-1 text-sm text-grey-1"> + Design tokens, visual primitives, and systemic building blocks. + </p> + </div> + + <CatalogGrid> + <CatalogCard + title="Colors" + description="Color tokens, palettes, and usage rules. Warning: purple-1 is pink!" + href="/dev/ds/foundations/colors" + icon="bulb" + status="production" + /> + <CatalogCard + title="Typography" + description="Font families, weights, text sizes, and the Knerd display font" + href="/dev/ds/foundations/typography" + icon="docs" + status="production" + /> + <CatalogCard + title="Spacing" + description="Spacing scale, layout utilities (.row, .col), and gap conventions" + href="/dev/ds/foundations/spacing" + icon="switch" + status="production" + /> + <CatalogCard + title="Shadows" + description="Shadow tokens and visual comparison. shadowSize=4 is the standard" + href="/dev/ds/foundations/shadows" + icon="docs" + status="production" + /> + <CatalogCard + title="Icons" + description="85+ material design icons with searchable grid and copy-to-clipboard" + href="/dev/ds/foundations/icons" + icon="search" + status="production" + quality={4} + /> + <CatalogCard + title="Borders" + description="Border radius, border styles, and the brutal-border pattern" + href="/dev/ds/foundations/borders" + icon="docs" + status="production" + /> + </CatalogGrid> + </DocPage> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/foundations/shadows/page.tsx b/src/app/(mobile-ui)/dev/ds/foundations/shadows/page.tsx new file mode 100644 index 000000000..bda11777a --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/foundations/shadows/page.tsx @@ -0,0 +1,78 @@ +'use client' + +import { Button } from '@/components/0_Bruddle/Button' +import { Card } from '@/components/0_Bruddle/Card' +import { DesignNote } from '../../_components/DesignNote' +import { DocHeader } from '../../_components/DocHeader' +import { DocSection } from '../../_components/DocSection' +import { DocPage } from '../../_components/DocPage' +import { CodeBlock } from '../../_components/CodeBlock' + +export default function ShadowsPage() { + return ( + <DocPage> + <DocHeader + title="Shadows" + description="Shadow tokens for buttons and cards. All shadows are solid black (#000)." + /> + + <DesignNote type="info"> + shadowSize="4" has 160+ usages. It is the standard. All others are negligible. + </DesignNote> + + {/* Button shadows */} + <DocSection title="Button Shadows"> + <DocSection.Content> + <div className="flex flex-wrap gap-4"> + {(['3', '4', '6', '8'] as const).map((s) => ( + <div key={s} className="text-center"> + <Button variant="purple" shadowSize={s}> + shadow {s} + </Button> + <p className="mt-1 text-xs text-grey-1"> + {s === '4' + ? '160 usages' + : s === '3' + ? '2 usages' + : s === '6' + ? '1 usage' + : '1 usage'} + </p> + </div> + ))} + </div> + </DocSection.Content> + <DocSection.Code> + <CodeBlock label="Button Shadows" code={`<Button variant="purple" shadowSize="4">Label</Button>`} /> + </DocSection.Code> + </DocSection> + + {/* Card shadows */} + <DocSection title="Card Shadows"> + <DocSection.Content> + <div className="space-y-3"> + {(['4', '6', '8'] as const).map((s) => ( + <Card key={s} shadowSize={s} className="p-4"> + <p className="text-sm font-bold">shadowSize="{s}"</p> + </Card> + ))} + </div> + </DocSection.Content> + <DocSection.Code> + <CodeBlock label="Card Shadows" code={`<Card shadowSize="4" className="p-4">content</Card>`} /> + </DocSection.Code> + </DocSection> + + {/* Tailwind shadow classes */} + <DocSection title="Tailwind Shadow Classes"> + <div className="flex flex-wrap gap-3"> + {['shadow-2', 'shadow-4', 'shadow-sm', 'shadow-lg'].map((cls) => ( + <div key={cls} className={`${cls} rounded-sm border border-n-1 px-3 py-2 text-xs font-bold`}> + .{cls} + </div> + ))} + </div> + </DocSection> + </DocPage> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/foundations/spacing/page.tsx b/src/app/(mobile-ui)/dev/ds/foundations/spacing/page.tsx new file mode 100644 index 000000000..167aba3d0 --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/foundations/spacing/page.tsx @@ -0,0 +1,87 @@ +'use client' + +import { DocHeader } from '../../_components/DocHeader' +import { DocSection } from '../../_components/DocSection' +import { DocPage } from '../../_components/DocPage' +import { CodeBlock } from '../../_components/CodeBlock' + +export default function SpacingPage() { + return ( + <DocPage> + <DocHeader title="Spacing" description="Layout utilities and spacing conventions used across the app." /> + + {/* Custom layout classes */} + <DocSection title="Layout Utilities"> + <DocSection.Content> + <div className="space-y-2 rounded-sm border border-n-1 p-3 text-xs"> + <div className="flex items-center gap-3"> + <code className="w-12 font-mono font-bold">.row</code> + <span className="text-grey-1">flex items-center gap-2</span> + </div> + <div className="flex items-center gap-3"> + <code className="w-12 font-mono font-bold">.col</code> + <span className="text-grey-1">flex flex-col gap-2</span> + </div> + </div> + + <div className="space-y-2"> + <p className="text-xs font-bold">Example: .row</p> + <div className="row rounded-sm border border-n-1 p-3"> + <div className="size-8 rounded-sm bg-purple-1" /> + <div className="size-8 rounded-sm bg-primary-3" /> + <div className="size-8 rounded-sm bg-yellow-1" /> + </div> + + <p className="text-xs font-bold">Example: .col</p> + <div className="col rounded-sm border border-n-1 p-3"> + <div className="h-6 w-full rounded-sm bg-purple-1" /> + <div className="h-6 w-full rounded-sm bg-primary-3" /> + <div className="h-6 w-full rounded-sm bg-yellow-1" /> + </div> + </div> + </DocSection.Content> + <DocSection.Code> + <CodeBlock label="Row Layout" code={`<div className="row">...</div>`} /> + <CodeBlock label="Col Layout" code={`<div className="col">...</div>`} /> + </DocSection.Code> + </DocSection> + + {/* Common gap patterns */} + <DocSection title="Common Gap Values"> + <div className="space-y-2 rounded-sm border border-n-1 p-3 text-xs"> + {[ + ['gap-1', '4px', 'Tight grouping (icon + label)'], + ['gap-2', '8px', 'Default row/col spacing'], + ['gap-3', '12px', 'Card list spacing'], + ['gap-4', '16px', 'Section spacing within a card'], + ['gap-6', '24px', 'Content block spacing'], + ['gap-8', '32px', 'Major section spacing'], + ].map(([cls, px, note]) => ( + <div key={cls} className="flex items-center gap-3"> + <code className="w-12 shrink-0 font-mono font-bold">{cls}</code> + <span className="w-10 shrink-0 text-grey-1">{px}</span> + <span className="text-grey-1">{note}</span> + </div> + ))} + </div> + </DocSection> + + {/* Page padding */} + <DocSection title="Page Padding"> + <div className="space-y-1 text-sm text-grey-1"> + <p> + Standard page content padding: <code className="font-mono font-bold text-n-1">px-4</code> (16px) + </p> + <p> + Card internal padding: <code className="font-mono font-bold text-n-1">p-4</code> (16px) or{' '} + <code className="font-mono font-bold text-n-1">p-6</code> (24px) + </p> + <p> + Section spacing: <code className="font-mono font-bold text-n-1">space-y-6</code> or{' '} + <code className="font-mono font-bold text-n-1">gap-6</code> + </p> + </div> + </DocSection> + </DocPage> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/foundations/typography/page.tsx b/src/app/(mobile-ui)/dev/ds/foundations/typography/page.tsx new file mode 100644 index 000000000..b16cbf5ae --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/foundations/typography/page.tsx @@ -0,0 +1,99 @@ +'use client' + +import Title from '@/components/0_Bruddle/Title' +import { DocHeader } from '../../_components/DocHeader' +import { DocSection } from '../../_components/DocSection' +import { DocPage } from '../../_components/DocPage' +import { CodeBlock } from '../../_components/CodeBlock' + +const WEIGHTS = [ + { class: 'font-light', label: 'Light', usages: 5 }, + { class: 'font-normal', label: 'Normal', usages: 50 }, + { class: 'font-medium', label: 'Medium', usages: 104 }, + { class: 'font-semibold', label: 'Semibold', usages: 66 }, + { class: 'font-bold', label: 'Bold', usages: 304 }, + { class: 'font-extrabold', label: 'Extrabold', usages: 55 }, + { class: 'font-black', label: 'Black', usages: 16 }, +] + +const SIZES = [ + { class: 'text-xs', example: 'Extra small (12px)', note: 'metadata, badges, hints' }, + { class: 'text-sm', example: 'Small (14px)', note: 'body text, descriptions' }, + { class: 'text-base', example: 'Base (16px)', note: 'default' }, + { class: 'text-lg', example: 'Large (18px)', note: 'section headings' }, + { class: 'text-xl', example: 'Extra large (20px)', note: 'page titles' }, + { class: 'text-2xl', example: '2XL (24px)', note: 'hero text' }, +] + +export default function TypographyPage() { + return ( + <DocPage> + <DocHeader title="Typography" description="Font families, weights, and text sizes used across the app." /> + + {/* Font families */} + <DocSection title="Font Families"> + <DocSection.Content> + <div className="space-y-2 rounded-sm border border-n-1 p-3"> + <div> + <p className="text-sm font-bold">System Default</p> + <p className="text-sm text-grey-1">Primary body font. Used everywhere by default.</p> + </div> + <div> + <p className="font-mono text-sm font-bold">font-mono</p> + <p className="text-sm text-grey-1">Monospace for code, addresses, amounts. 21 usages.</p> + </div> + <div> + <p className="font-roboto-flex text-sm font-bold">font-roboto-flex</p> + <p className="text-sm text-grey-1">Roboto Flex for specific UI elements. 16 usages.</p> + </div> + <div className="rounded-sm bg-purple-1 p-3"> + <Title text="KNERD FONT" /> + <p className="mt-1 text-sm text-n-1"> + Display font with filled+outline double-render effect. + </p> + </div> + </div> + </DocSection.Content> + <DocSection.Code> + <CodeBlock label="Font Mono" code='className="font-mono"' /> + <CodeBlock + label="Title Component" + code={`import Title from '@/components/0_Bruddle/Title'\n<Title text="PEANUT" />`} + /> + </DocSection.Code> + </DocSection> + + {/* Font weights */} + <DocSection title="Font Weights"> + <div className="space-y-1 rounded-sm border border-n-1 p-3"> + {WEIGHTS.map((w) => ( + <div key={w.class} className="flex items-baseline justify-between"> + <p className={`text-sm ${w.class}`}> + {w.label} <span className="font-mono text-[10px] text-grey-1">.{w.class}</span> + </p> + <span className="text-xs text-grey-1">{w.usages}</span> + </div> + ))} + </div> + <p className="text-sm text-grey-1"> + font-bold dominates (304 usages). Use font-bold for labels and headings, font-medium for secondary + text. + </p> + </DocSection> + + {/* Text sizes */} + <DocSection title="Text Sizes"> + <div className="space-y-2 rounded-sm border border-n-1 p-3"> + {SIZES.map((s) => ( + <div key={s.class}> + <p className={`${s.class} font-bold`}>{s.example}</p> + <p className="text-xs text-grey-1"> + .{s.class} — {s.note} + </p> + </div> + ))} + </div> + </DocSection> + </DocPage> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/layout.tsx b/src/app/(mobile-ui)/dev/ds/layout.tsx new file mode 100644 index 000000000..fa87ff7bd --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/layout.tsx @@ -0,0 +1,37 @@ +'use client' + +import NavHeader from '@/components/Global/NavHeader' +import { TierNav } from './_components/TierNav' +import { DocSidebar } from './_components/DocSidebar' + +export default function DesignSystemLayout({ children }: { children: React.ReactNode }) { + return ( + <div className="flex w-full flex-col"> + {/* Header */} + <div className="px-4 pt-4"> + <NavHeader title="Design System" href="/dev" /> + </div> + + {/* Tier tabs */} + <div className="sticky top-0 z-10 border-b border-gray-3 bg-white px-6 py-3"> + <div className="flex items-center gap-2"> + <TierNav /> + <div className="ml-auto md:hidden"> + <DocSidebar /> + </div> + </div> + </div> + + {/* Content area */} + <div className="flex flex-1 px-6 py-10 lg:px-10"> + {/* Desktop sidebar */} + <div className="hidden md:block"> + <DocSidebar /> + </div> + + {/* Main content */} + <div className="min-w-0 flex-1 md:pl-10">{children}</div> + </div> + </div> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/page.tsx b/src/app/(mobile-ui)/dev/ds/page.tsx new file mode 100644 index 000000000..b9e5f57ff --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/page.tsx @@ -0,0 +1,115 @@ +'use client' + +import Link from 'next/link' +import { Icon } from '@/components/Global/Icons/Icon' +import { Card } from '@/components/0_Bruddle/Card' +import Title from '@/components/0_Bruddle/Title' +import { DocPage } from './_components/DocPage' + +const sections = [ + { + title: 'Foundations', + description: 'Color tokens, typography, spacing, shadows, icons, and borders', + href: '/dev/ds/foundations', + icon: 'bulb' as const, + count: 6, + }, + { + title: 'Primitives', + description: 'Bruddle base components: Button, Card, Input, Select, Checkbox, Toast', + href: '/dev/ds/primitives', + icon: 'switch' as const, + count: 9, + }, + { + title: 'Patterns', + description: 'Composed components: Modal, Drawer, Navigation, Loading, Feedback, Layouts', + href: '/dev/ds/patterns', + icon: 'docs' as const, + count: 9, + }, + { + title: 'Playground', + description: 'Interactive test harnesses: shake animations, haptics, confetti, perk flows', + href: '/dev/ds/playground', + icon: 'bulb' as const, + count: 2, + }, +] + +export default function DesignSystemPage() { + return ( + <DocPage> + {/* Hero */} + <div className="rounded-sm border border-n-1 bg-purple-1 p-6"> + <Title text="PEANUT" /> + <p className="mt-2 text-base font-bold text-n-1">Design System</p> + <p className="mt-1 text-sm text-n-1/70">Foundations → Primitives → Patterns → Playground</p> + </div> + + {/* Quick stats */} + <div className="grid grid-cols-3 gap-2"> + {[ + { label: 'Primitives', value: '9' }, + { label: 'Global', value: '70+' }, + { label: 'Icons', value: '85+' }, + ].map((stat) => ( + <div key={stat.label} className="rounded-sm border border-n-1 p-3 text-center"> + <p className="text-2xl font-bold">{stat.value}</p> + <p className="text-xs text-grey-1">{stat.label}</p> + </div> + ))} + </div> + + {/* Section cards */} + <div className="space-y-4"> + {sections.map((section) => ( + <Link key={section.href} href={section.href}> + <Card + shadowSize="4" + className="cursor-pointer p-4 transition-all hover:translate-x-[2px] hover:translate-y-[2px] hover:shadow-none" + > + <div className="flex items-center gap-3"> + <div className="flex size-10 items-center justify-center rounded-sm border border-n-1 bg-primary-3"> + <Icon name={section.icon} size={20} /> + </div> + <div className="flex-1"> + <div className="flex items-center gap-2"> + <h3 className="text-base font-bold">{section.title}</h3> + <span className="rounded-full bg-n-1/10 px-2 py-0.5 text-xs font-bold text-grey-1"> + {section.count} + </span> + </div> + <p className="mt-0.5 text-sm text-grey-1">{section.description}</p> + </div> + <Icon name="arrow-up-right" size={16} className="text-grey-1" /> + </div> + </Card> + </Link> + ))} + </div> + + {/* Design rules quick reference */} + <div className="space-y-4 rounded-sm border border-n-1 bg-primary-3/20 p-3"> + <p className="text-sm font-bold">Quick Rules</p> + <ul className="space-y-1 text-sm text-grey-1"> + <li> + Primary CTA:{' '} + <code className="rounded bg-white px-1 font-mono text-[10px]"> + variant="purple" shadowSize="4" w-full + </code> + </li> + <li> + Links: <code className="rounded bg-white px-1 font-mono text-[10px]">text-black underline</code>{' '} + — never text-purple-1 + </li> + <li> + purple-1 is <span className="inline-block size-3 rounded-sm bg-purple-1 align-middle" /> pink + (#FF90E8), not purple + </li> + <li>size="large" is h-10 (shorter than default h-13)</li> + </ul> + </div> + </DocPage> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/patterns/amount-input/page.tsx b/src/app/(mobile-ui)/dev/ds/patterns/amount-input/page.tsx new file mode 100644 index 000000000..3b4727980 --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/patterns/amount-input/page.tsx @@ -0,0 +1,223 @@ +import { PropsTable } from '../../_components/PropsTable' +import { DesignNote } from '../../_components/DesignNote' +import { DocHeader } from '../../_components/DocHeader' +import { DocSection } from '../../_components/DocSection' +import { SectionDivider } from '../../_components/SectionDivider' +import { DocPage } from '../../_components/DocPage' +import { CodeBlock } from '../../_components/CodeBlock' + +export default function AmountInputPage() { + return ( + <DocPage> + <DocHeader + title="AmountInput" + description="Large currency input with denomination switching, conversion display, balance indicator, and optional slider. Reference page only -- no live demo due to complex context dependencies." + status="needs-refactor" + /> + + {/* Refactor Note */} + <DocSection title="Refactor Note"> + <DesignNote type="warning"> + This component needs refactoring. It has 20+ props, mixes display logic with currency conversion + math, and requires multiple setter callbacks. Consider splitting into AmountDisplay (visual) and + useAmountConversion (hook) in a future pass. + </DesignNote> + </DocSection> + + {/* Visual Description */} + <DocSection title="Visual Structure"> + <DocSection.Content> + <div className="rounded-sm border border-n-1 p-4"> + <div className="flex flex-col items-center gap-2 py-4"> + <div className="flex items-center gap-1"> + <span className="text-xl font-bold text-grey-1">$</span> + <span className="text-6xl font-black">0.00</span> + </div> + <span className="text-lg font-bold text-grey-1">≈ ETH 0.00</span> + <span className="text-sm text-grey-1">Balance: $ 42.50</span> + </div> + <div className="absolute right-4 top-1/2 -translate-y-1/2 text-grey-1"></div> + </div> + <p className="text-xs text-grey-1"> + The input uses a transparent background with auto-sizing width. A fake blinking caret (primary-1 + color) shows when the input is empty and not focused. + </p> + </DocSection.Content> + <DocSection.Code> + <CodeBlock label="Import" code={`import AmountInput from '@/components/Global/AmountInput'`} /> + + <CodeBlock + label="Basic (USD only)" + code={`<AmountInput + setPrimaryAmount={setAmount} + primaryDenomination={{ symbol: '$', price: 1, decimals: 2 }} +/>`} + /> + + <CodeBlock + label="With conversion" + code={`<AmountInput + setPrimaryAmount={setUsdAmount} + setSecondaryAmount={setTokenAmount} + primaryDenomination={{ symbol: '$', price: 1, decimals: 2 }} + secondaryDenomination={{ symbol: 'ETH', price: ethPrice, decimals: 8 }} + walletBalance={formattedBalance} +/>`} + /> + + <CodeBlock + label="With slider (Pot contributions)" + code={`<AmountInput + setPrimaryAmount={setAmount} + primaryDenomination={{ symbol: '$', price: 1, decimals: 2 }} + showSlider + maxAmount={potMax} + amountCollected={potCollected} + defaultSliderValue={33} +/>`} + /> + </DocSection.Code> + </DocSection> + + <SectionDivider /> + + {/* Props */} + <DocSection title="Props"> + <PropsTable + rows={[ + { + name: 'setPrimaryAmount', + type: '(value: string) => void', + default: '-', + required: true, + description: 'Callback for the primary denomination amount', + }, + { + name: 'primaryDenomination', + type: '{ symbol, price, decimals }', + default: "{ symbol: '$', price: 1, decimals: 2 }", + description: 'Primary currency config', + }, + { + name: 'secondaryDenomination', + type: '{ symbol, price, decimals }', + default: '(none)', + description: 'Enables currency toggle when provided', + }, + { + name: 'setSecondaryAmount', + type: '(value: string) => void', + default: '(none)', + description: 'Callback for converted amount', + }, + { + name: 'setDisplayedAmount', + type: '(value: string) => void', + default: '(none)', + description: 'Callback for the currently displayed value', + }, + { + name: 'setCurrentDenomination', + type: '(denomination: string) => void', + default: '(none)', + description: 'Reports which denomination is active', + }, + { name: 'initialAmount', type: 'string', default: "''", description: 'Pre-fill amount' }, + { + name: 'initialDenomination', + type: 'string', + default: '(none)', + description: 'Pre-select denomination', + }, + { + name: 'walletBalance', + type: 'string', + default: '(none)', + description: 'Formatted balance to display', + }, + { + name: 'hideBalance', + type: 'boolean', + default: 'false', + description: 'Hide the balance line', + }, + { + name: 'hideCurrencyToggle', + type: 'boolean', + default: 'false', + description: 'Hide the swap icon even with secondary denomination', + }, + { name: 'disabled', type: 'boolean', default: 'false', description: 'Disable input' }, + { name: 'onSubmit', type: '() => void', default: '(none)', description: 'Enter key handler' }, + { name: 'onBlur', type: '() => void', default: '(none)', description: 'Blur handler' }, + { + name: 'showSlider', + type: 'boolean', + default: 'false', + description: 'Show percentage slider below input', + }, + { name: 'maxAmount', type: 'number', default: '(none)', description: 'Slider max value' }, + { + name: 'amountCollected', + type: 'number', + default: '0', + description: 'Already collected (for pot snap logic)', + }, + { + name: 'defaultSliderValue', + type: 'number', + default: '(none)', + description: 'Initial slider percentage', + }, + { + name: 'defaultSliderSuggestedAmount', + type: 'number', + default: '(none)', + description: 'Suggested amount to pre-fill', + }, + { + name: 'infoContent', + type: 'ReactNode', + default: '(none)', + description: 'Content below the input area', + }, + { + name: 'className', + type: 'string', + default: "''", + description: 'Override form container styles', + }, + ]} + /> + </DocSection> + + {/* Architecture Notes */} + <DocSection title="Architecture Notes"> + <DesignNote type="info"> + Internally uses exactValue (scaled by 10^18) for precise integer arithmetic during currency + conversion. Display values are formatted separately from calculation values to avoid precision loss. + </DesignNote> + <DesignNote type="info"> + The component auto-focuses on desktop (DeviceType.WEB) but not on mobile to avoid keyboard popup. + Input width auto-sizes based on character count (ch units). + </DesignNote> + <DesignNote type="warning"> + The slider has a 33.33% "magnetic snap point" that snaps to the remaining pot amount. This + is specific to the pot/group-pay use case and ideally should not be baked into the generic + component. + </DesignNote> + </DocSection> + + {/* Refactoring Ideas */} + <DocSection title="Refactoring Ideas"> + <div className="space-y-1 text-sm text-grey-1"> + <p>1. Extract conversion logic into a useAmountConversion hook</p> + <p>2. Split slider into a separate SliderAmountInput wrapper component</p> + <p>3. Remove pot-specific snap logic from the base component</p> + <p>4. Simplify the 7 callback props into a single onChange object</p> + <p>5. Consider using a controlled-only pattern (value + onChange) instead of internal state</p> + </div> + </DocSection> + </DocPage> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/patterns/cards-global/page.tsx b/src/app/(mobile-ui)/dev/ds/patterns/cards-global/page.tsx new file mode 100644 index 000000000..99be830d4 --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/patterns/cards-global/page.tsx @@ -0,0 +1,201 @@ +'use client' + +import Card from '@/components/Global/Card' +import { PropsTable } from '../../_components/PropsTable' +import { DesignNote } from '../../_components/DesignNote' +import { DocHeader } from '../../_components/DocHeader' +import { DocSection } from '../../_components/DocSection' +import { SectionDivider } from '../../_components/SectionDivider' +import { DocPage } from '../../_components/DocPage' +import { CodeBlock } from '../../_components/CodeBlock' + +export default function CardsGlobalPage() { + return ( + <DocPage> + <DocHeader + title="Card (Global)" + description="Global shared Card component for stacked lists with position-aware border radius. Different from the Bruddle Card primitive (named export from 0_Bruddle)." + status="production" + /> + + {/* Import */} + <DocSection title="Import"> + <DesignNote type="warning"> + This is the default export from Global/Card. The Bruddle Card is a named export: import {'{ Card }'}{' '} + from '@/components/0_Bruddle/Card'. They are different components. + </DesignNote> + </DocSection> + + {/* Single Card */} + <DocSection title="Single Card"> + <DocSection.Content> + <Card position="single"> + <div className="flex items-center justify-between py-1"> + <span className="text-sm font-bold">Single Card</span> + <span className="text-xs text-grey-1">position="single"</span> + </div> + </Card> + </DocSection.Content> + <DocSection.Code> + <CodeBlock label="Import" code={`import Card from '@/components/Global/Card'`} /> + + <CodeBlock + label="Usage" + code={`<Card position="single"> + <div>Content</div> +</Card>`} + /> + </DocSection.Code> + </DocSection> + + {/* Stacked List */} + <DocSection title="Stacked List"> + <DocSection.Content> + <p className="text-sm text-grey-1"> + Cards stack seamlessly by using position props: first, middle, last. Only the first card has top + border-radius, only the last has bottom, and middle cards have no border-radius. Border-top is + removed on middle and last to avoid double borders. + </p> + + <div> + {(['first', 'middle', 'middle', 'middle', 'last'] as const).map((pos, i) => ( + <Card key={i} position={pos}> + <div className="flex items-center justify-between py-1"> + <span className="text-sm">Item {i + 1}</span> + <span className="text-xs text-grey-1">position="{pos}"</span> + </div> + </Card> + ))} + </div> + </DocSection.Content> + <DocSection.Code> + <CodeBlock + label="Usage" + code={`{items.map((item, index) => { + const position = + items.length === 1 ? 'single' : + index === 0 ? 'first' : + index === items.length - 1 ? 'last' : + 'middle' + + return ( + <Card key={item.id} position={position}> + {/* Item content */} + </Card> + ) +})}`} + /> + </DocSection.Code> + </DocSection> + + {/* Clickable */} + <DocSection title="Clickable Cards"> + <DocSection.Content> + <div> + <Card position="first" onClick={() => {}}> + <div className="flex items-center justify-between py-1"> + <span className="text-sm">Clickable item 1</span> + <span className="text-xs text-grey-1">→</span> + </div> + </Card> + <Card position="last" onClick={() => {}}> + <div className="flex items-center justify-between py-1"> + <span className="text-sm">Clickable item 2</span> + <span className="text-xs text-grey-1">→</span> + </div> + </Card> + </div> + </DocSection.Content> + <DocSection.Code> + <CodeBlock + label="Usage" + code={`<Card position="single" onClick={() => router.push('/detail')}> + <div>Clickable card content</div> +</Card>`} + /> + </DocSection.Code> + </DocSection> + + {/* No Border */} + <DocSection title="Without Border"> + <DocSection.Content> + <Card position="single" border={false}> + <div className="py-1"> + <span className="text-sm">No border card</span> + </div> + </Card> + </DocSection.Content> + <DocSection.Code> + <CodeBlock label="Usage" code={`<Card border={false}>Content</Card>`} /> + </DocSection.Code> + </DocSection> + + <SectionDivider /> + + {/* Props */} + <DocSection title="Props"> + <PropsTable + rows={[ + { + name: 'position', + type: "'single' | 'first' | 'middle' | 'last'", + default: "'single'", + description: 'Controls border-radius for stacking', + }, + { name: 'border', type: 'boolean', default: 'true', description: 'Show/hide border' }, + { name: 'onClick', type: '() => void', default: '(none)', description: 'Makes card clickable' }, + { + name: 'className', + type: 'string', + default: "''", + description: 'Override styles (base: w-full bg-white px-4 py-2)', + }, + { name: 'children', type: 'ReactNode', default: '-', required: true }, + { name: 'ref', type: 'Ref<HTMLDivElement>', default: '(none)' }, + ]} + /> + </DocSection> + + {/* Position behavior table */} + <DocSection title="Position Behavior"> + <div className="overflow-x-auto rounded-sm border border-n-1 text-xs"> + <table className="w-full"> + <thead> + <tr className="border-b border-n-1 bg-primary-3/20"> + <th className="px-3 py-1.5 text-left font-bold">Position</th> + <th className="px-3 py-1.5 text-left font-bold">Border Radius</th> + <th className="px-3 py-1.5 text-left font-bold">Border</th> + </tr> + </thead> + <tbody> + {[ + ['single', 'rounded-sm (all)', 'border border-black'], + ['first', 'rounded-t-sm (top only)', 'border border-black'], + ['middle', 'none', 'border border-black border-t-0'], + ['last', 'rounded-b-sm (bottom only)', 'border border-black border-t-0'], + ].map(([pos, radius, border]) => ( + <tr key={pos} className="border-b border-n-1 last:border-0"> + <td className="px-3 py-1.5 font-mono font-bold">{pos}</td> + <td className="px-3 py-1.5 font-mono">{radius}</td> + <td className="px-3 py-1.5 font-mono">{border}</td> + </tr> + ))} + </tbody> + </table> + </div> + </DocSection> + + {/* Design Notes */} + <DocSection title="Design Rules"> + <DesignNote type="info"> + Use Global Card for stacked lists (transaction history, settings, token lists). Use Bruddle Card for + standalone content cards with shadows and variants. + </DesignNote> + <DesignNote type="info"> + The base styles are: w-full bg-white px-4 py-2. Override with className for custom padding or + background. + </DesignNote> + </DocSection> + </DocPage> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/patterns/copy-share/page.tsx b/src/app/(mobile-ui)/dev/ds/patterns/copy-share/page.tsx new file mode 100644 index 000000000..970bf8caf --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/patterns/copy-share/page.tsx @@ -0,0 +1,286 @@ +'use client' + +import CopyField from '@/components/Global/CopyField' +import CopyToClipboard from '@/components/Global/CopyToClipboard' +import MoreInfo from '@/components/Global/MoreInfo' +import { PropsTable } from '../../_components/PropsTable' +import { DesignNote } from '../../_components/DesignNote' +import { DocHeader } from '../../_components/DocHeader' +import { DocSection } from '../../_components/DocSection' +import { SectionDivider } from '../../_components/SectionDivider' +import { DocPage } from '../../_components/DocPage' +import { CodeBlock } from '../../_components/CodeBlock' + +export default function CopySharePage() { + return ( + <DocPage> + <DocHeader + title="Copy & Share" + description="Components for copying text to clipboard, sharing links, displaying addresses, and showing tooltips." + status="production" + /> + + {/* CopyField */} + <DocSection title="CopyField"> + <DocSection.Content> + <p className="text-sm text-grey-1"> + Input field + Copy button combo. The input is disabled (read-only display). Button shows + "Copied" feedback for 3 seconds. + </p> + + <div className="space-y-3"> + <CopyField text="https://peanut.to/claim/abc123" /> + <CopyField text="0x1234...abcd" variant="purple" shadowSize="4" /> + </div> + + <PropsTable + rows={[ + { + name: 'text', + type: 'string', + default: '-', + required: true, + description: 'Text to display and copy', + }, + { + name: 'variant', + type: 'ButtonVariant', + default: "'stroke'", + description: 'Copy button variant', + }, + { + name: 'shadowSize', + type: "'4' | '6' | '8'", + default: '(none)', + description: 'Copy button shadow', + }, + { name: 'disabled', type: 'boolean', default: 'false', description: 'Disables copying' }, + { + name: 'onDisabledClick', + type: '() => void', + default: '(none)', + description: 'Handler when clicking disabled button', + }, + ]} + /> + </DocSection.Content> + <DocSection.Code> + <CodeBlock label="Import" code={`import CopyField from '@/components/Global/CopyField'`} /> + + <CodeBlock + label="Usage" + code={`<CopyField text="https://peanut.to/claim/abc123" /> +<CopyField text={linkUrl} variant="purple" shadowSize="4" />`} + /> + </DocSection.Code> + </DocSection> + + {/* CopyToClipboard */} + <DocSection title="CopyToClipboard"> + <DocSection.Content> + <p className="text-sm text-grey-1"> + Icon-only or button-style copy trigger. Shows check icon for 2 seconds after copying. Supports + imperative copy via ref. + </p> + + <div className="space-y-4"> + <div className="flex items-center gap-4"> + <div className="flex items-center gap-2"> + <span className="text-xs">Icon mode:</span> + <CopyToClipboard textToCopy="Hello from Peanut!" /> + </div> + <div className="flex items-center gap-2"> + <span className="text-xs">Different sizes:</span> + <CopyToClipboard textToCopy="small" iconSize="3" /> + <CopyToClipboard textToCopy="medium" iconSize="4" /> + <CopyToClipboard textToCopy="large" iconSize="6" /> + </div> + </div> + <div> + <CopyToClipboard textToCopy="Button mode text" type="button" /> + </div> + </div> + + <PropsTable + rows={[ + { + name: 'textToCopy', + type: 'string', + default: '-', + required: true, + description: 'Text to copy to clipboard', + }, + { + name: 'type', + type: "'icon' | 'button'", + default: "'icon'", + description: 'Render as icon or Button component', + }, + { + name: 'iconSize', + type: "'2' | '3' | '4' | '6' | '8'", + default: "'6'", + description: 'Icon size (Tailwind scale)', + }, + { name: 'fill', type: 'string', default: "'black'", description: 'Icon fill color' }, + { + name: 'buttonSize', + type: 'ButtonSize', + default: '(none)', + description: 'Button size when type="button"', + }, + { name: 'className', type: 'string', default: "''", description: 'Override styles' }, + ]} + /> + </DocSection.Content> + <DocSection.Code> + <CodeBlock + label="Import" + code={`import CopyToClipboard from '@/components/Global/CopyToClipboard'`} + /> + + <CodeBlock + label="Usage" + code={`{/* Icon (default) */} +<CopyToClipboard textToCopy={address} /> + +{/* Button */} +<CopyToClipboard textToCopy={code} type="button" /> + +{/* Imperative */} +const copyRef = useRef<CopyToClipboardRef>(null) +<CopyToClipboard ref={copyRef} textToCopy={text} /> +copyRef.current?.copy()`} + /> + </DocSection.Code> + </DocSection> + + {/* ShareButton */} + <DocSection title="ShareButton"> + <DocSection.Content> + <p className="text-sm text-grey-1"> + Reference only. Uses the Web Share API (navigator.share) with clipboard fallback. Typically + composed inline rather than imported as a standalone component. + </p> + </DocSection.Content> + <DocSection.Code> + <CodeBlock + label="Pattern" + code={`<Button + variant="purple" + icon="share" + onClick={() => { + if (navigator.share) { + navigator.share({ url, title }) + } else { + navigator.clipboard.writeText(url) + } + }} +> + Share +</Button>`} + /> + </DocSection.Code> + </DocSection> + + {/* AddressLink */} + <DocSection title="AddressLink"> + <DocSection.Content> + <p className="text-sm text-grey-1"> + Displays a shortened crypto address as a link. Resolves ENS names for Ethereum addresses. Links + to the user profile page. + </p> + + <DesignNote type="warning"> + AddressLink uses usePrimaryName hook (ENS resolution) which requires JustAName provider context. + Cannot demo in isolation. Showing code example only. + </DesignNote> + + <PropsTable + rows={[ + { + name: 'address', + type: 'string', + default: '-', + required: true, + description: 'Crypto address or ENS name', + }, + { + name: 'isLink', + type: 'boolean', + default: 'true', + description: 'Render as link or plain text', + }, + { name: 'className', type: 'string', default: "''", description: 'Override styles' }, + ]} + /> + </DocSection.Content> + <DocSection.Code> + <CodeBlock label="Import" code={`import AddressLink from '@/components/Global/AddressLink'`} /> + + <CodeBlock + label="Usage" + code={`<AddressLink address="0x742d35Cc6634C0532925a3b844Bc9e7595f2bD18" /> +<AddressLink address={senderAddress} isLink={false} />`} + /> + </DocSection.Code> + </DocSection> + + {/* MoreInfo */} + <DocSection title="MoreInfo"> + <DocSection.Content> + <p className="text-sm text-grey-1"> + Info icon that toggles a positioned tooltip on click. Uses HeadlessUI Menu and createPortal for + correct z-indexing. + </p> + + <div className="flex items-center gap-2 rounded-sm border border-n-1 p-3"> + <span className="text-sm">Network fee</span> + <MoreInfo text="This is the gas fee required to process your transaction on the blockchain. It varies based on network congestion." /> + </div> + + <PropsTable + rows={[ + { + name: 'text', + type: 'string | ReactNode', + default: '-', + required: true, + description: 'Tooltip content', + }, + { + name: 'html', + type: 'boolean', + default: 'false', + description: 'Render text as HTML (dangerouslySetInnerHTML)', + }, + ]} + /> + </DocSection.Content> + <DocSection.Code> + <CodeBlock label="Import" code={`import MoreInfo from '@/components/Global/MoreInfo'`} /> + + <CodeBlock + label="Usage" + code={`<span>Network fee</span> +<MoreInfo text="Gas fee for processing the transaction." />`} + /> + </DocSection.Code> + </DocSection> + + <SectionDivider /> + + {/* Design Notes */} + <DocSection title="Design Rules"> + <DesignNote type="info"> + CopyField for displaying + copying full strings (links, codes). CopyToClipboard for inline copy + icons next to existing text. + </DesignNote> + <DesignNote type="info"> + MoreInfo tooltip is portaled to document.body and auto-positions to avoid viewport edges. Preferred + over native title attributes. + </DesignNote> + </DocSection> + </DocPage> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/patterns/drawer/page.tsx b/src/app/(mobile-ui)/dev/ds/patterns/drawer/page.tsx new file mode 100644 index 000000000..b2eeb3a1d --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/patterns/drawer/page.tsx @@ -0,0 +1,178 @@ +'use client' + +import { Button } from '@/components/0_Bruddle/Button' +import { + Drawer, + DrawerContent, + DrawerTitle, + DrawerTrigger, + DrawerHeader, + DrawerFooter, + DrawerDescription, + DrawerClose, +} from '@/components/Global/Drawer' +import { PropsTable } from '../../_components/PropsTable' +import { DesignNote } from '../../_components/DesignNote' +import { DocHeader } from '../../_components/DocHeader' +import { DocSection } from '../../_components/DocSection' +import { SectionDivider } from '../../_components/SectionDivider' +import { DocPage } from '../../_components/DocPage' +import { CodeBlock } from '../../_components/CodeBlock' + +export default function DrawerPage() { + return ( + <DocPage> + <DocHeader + title="Drawer" + description="Vaul-based bottom sheet with compound component API. Swipe-to-dismiss, snap points, and overlay." + status="production" + /> + + {/* Live Demo + Usage */} + <DocSection title="Live Example"> + <DocSection.Content> + <Drawer> + <DrawerTrigger asChild> + <Button variant="stroke">Open Drawer</Button> + </DrawerTrigger> + <DrawerContent> + <DrawerHeader> + <DrawerTitle>Example Drawer</DrawerTitle> + <DrawerDescription> + This is a vaul-based bottom sheet. Swipe down to dismiss. + </DrawerDescription> + </DrawerHeader> + <div className="px-4 pb-4"> + <p className="text-sm text-grey-1"> + The Drawer component wraps vaul and provides a consistent bottom-sheet experience. + It includes an overlay, drag handle, and max-height constraint (80vh). + </p> + <div className="mt-4"> + <DrawerClose asChild> + <Button variant="purple" shadowSize="4" className="w-full"> + Close Drawer + </Button> + </DrawerClose> + </div> + </div> + </DrawerContent> + </Drawer> + </DocSection.Content> + <DocSection.Code> + <CodeBlock + label="Import" + code={`import { + Drawer, + DrawerContent, + DrawerTitle, + DrawerTrigger, + DrawerHeader, + DrawerFooter, + DrawerDescription, + DrawerClose, +} from '@/components/Global/Drawer'`} + /> + + <CodeBlock + label="Basic Usage" + code={`<Drawer> + <DrawerTrigger asChild> + <Button variant="stroke">Open</Button> + </DrawerTrigger> + <DrawerContent> + <DrawerHeader> + <DrawerTitle>Title</DrawerTitle> + <DrawerDescription>Description</DrawerDescription> + </DrawerHeader> + <div className="px-4 pb-4"> + {/* Content */} + </div> + <DrawerFooter> + <DrawerClose asChild> + <Button variant="purple" shadowSize="4" className="w-full"> + Done + </Button> + </DrawerClose> + </DrawerFooter> + </DrawerContent> +</Drawer>`} + /> + + <CodeBlock + label="Controlled" + code={`const [open, setOpen] = useState(false) + +<Drawer open={open} onOpenChange={setOpen}> + <DrawerContent> + {/* Content */} + </DrawerContent> +</Drawer>`} + /> + </DocSection.Code> + </DocSection> + + <SectionDivider /> + + {/* Compound Components */} + <DocSection title="Compound Components"> + <PropsTable + rows={[ + { + name: 'Drawer', + type: 'Root', + default: '-', + description: 'Vaul root. Accepts open, onOpenChange, snapPoints, etc.', + }, + { + name: 'DrawerTrigger', + type: 'Trigger', + default: '-', + description: 'Element that opens the drawer. Use asChild.', + }, + { + name: 'DrawerContent', + type: 'Content', + default: '-', + description: 'Panel with overlay, drag handle, max-h-[80vh]', + }, + { + name: 'DrawerHeader', + type: 'Header', + default: '-', + description: 'Grid layout for title area', + }, + { + name: 'DrawerTitle', + type: 'Title', + default: '-', + description: 'Accessible title (required for a11y)', + }, + { name: 'DrawerDescription', type: 'Description', default: '-', description: 'Subtitle text' }, + { name: 'DrawerFooter', type: 'Footer', default: '-', description: 'Bottom area for CTAs' }, + { + name: 'DrawerClose', + type: 'Close', + default: '-', + description: 'Closes the drawer. Use asChild.', + }, + ]} + /> + </DocSection> + + {/* Design Notes */} + <DocSection title="Design Rules"> + <DesignNote type="info"> + Always include a DrawerTitle inside DrawerContent for accessibility (screen readers). + </DesignNote> + <DesignNote type="info"> + Drawer scales the background by default (shouldScaleBackground=true). The drag handle is a 40px wide + rounded bar at the top. + </DesignNote> + <DesignNote type="warning"> + Content is capped at max-h-[80vh] with overflow-auto. For long lists, scrolling works inside the + drawer. + </DesignNote> + </DocSection> + </DocPage> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/patterns/feedback/page.tsx b/src/app/(mobile-ui)/dev/ds/patterns/feedback/page.tsx new file mode 100644 index 000000000..2a1f73973 --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/patterns/feedback/page.tsx @@ -0,0 +1,312 @@ +'use client' + +import StatusBadge, { type StatusType } from '@/components/Global/Badges/StatusBadge' +import StatusPill, { type StatusPillType } from '@/components/Global/StatusPill' +import ErrorAlert from '@/components/Global/ErrorAlert' +import EmptyState from '@/components/Global/EmptyStates/EmptyState' +import NoDataEmptyState from '@/components/Global/EmptyStates/NoDataEmptyState' +import { Button } from '@/components/0_Bruddle/Button' +import { PropsTable } from '../../_components/PropsTable' +import { DesignNote } from '../../_components/DesignNote' +import { DocHeader } from '../../_components/DocHeader' +import { DocSection } from '../../_components/DocSection' +import { SectionDivider } from '../../_components/SectionDivider' +import { DocPage } from '../../_components/DocPage' +import { CodeBlock } from '../../_components/CodeBlock' + +const allStatuses: StatusType[] = [ + 'completed', + 'pending', + 'processing', + 'failed', + 'cancelled', + 'refunded', + 'soon', + 'closed', +] + +export default function FeedbackPage() { + return ( + <DocPage> + <DocHeader + title="Feedback" + description="Status indicators (StatusBadge, StatusPill), error messaging (ErrorAlert), and empty states (EmptyState, NoDataEmptyState)." + status="production" + /> + + {/* StatusBadge */} + <DocSection title="StatusBadge"> + <DocSection.Content> + <p className="text-sm text-grey-1"> + Rounded pill badge with text label. Three size variants. Shared StatusType across the codebase. + </p> + + {/* All statuses */} + <div className="space-y-4"> + <p className="text-xs font-bold uppercase tracking-wider text-grey-1">All Status Types</p> + <div className="flex flex-wrap gap-2"> + {allStatuses.map((status) => ( + <StatusBadge key={status} status={status} /> + ))} + </div> + </div> + + {/* Sizes */} + <div className="space-y-4"> + <p className="text-xs font-bold uppercase tracking-wider text-grey-1">Sizes</p> + <div className="flex items-center gap-3"> + {(['small', 'medium', 'large'] as const).map((size) => ( + <div key={size} className="text-center"> + <StatusBadge status="completed" size={size} /> + <p className="mt-1 text-xs text-grey-1">{size}</p> + </div> + ))} + </div> + </div> + + <PropsTable + rows={[ + { + name: 'status', + type: 'StatusType', + default: '-', + required: true, + description: + 'completed | pending | processing | failed | cancelled | refunded | soon | closed | custom', + }, + { name: 'size', type: "'small' | 'medium' | 'large'", default: "'small'" }, + { + name: 'customText', + type: 'string', + default: '(none)', + description: 'Text when status="custom"', + }, + { name: 'className', type: 'string', default: "''", description: 'Override styles' }, + ]} + /> + </DocSection.Content> + <DocSection.Code> + <CodeBlock + label="Import" + code={`import StatusBadge from '@/components/Global/Badges/StatusBadge'`} + /> + + <CodeBlock + label="Usage" + code={`<StatusBadge status="completed" /> +<StatusBadge status="pending" size="medium" /> +<StatusBadge status="custom" customText="Active" />`} + /> + </DocSection.Code> + </DocSection> + + {/* StatusPill */} + <DocSection title="StatusPill"> + <DocSection.Content> + <p className="text-sm text-grey-1"> + Tiny 14px circular icon indicator. Uses the same StatusType as StatusBadge (minus + "custom"). Pairs well with list items. + </p> + + <div className="space-y-4"> + <p className="text-xs font-bold uppercase tracking-wider text-grey-1">All Status Types</p> + <div className="flex flex-wrap items-center gap-4"> + {allStatuses + .filter((s): s is StatusPillType => s !== 'custom') + .map((status) => ( + <div key={status} className="flex items-center gap-1.5"> + <StatusPill status={status} /> + <span className="text-xs">{status}</span> + </div> + ))} + </div> + </div> + + <PropsTable + rows={[ + { + name: 'status', + type: 'StatusPillType', + default: '-', + required: true, + description: 'Same as StatusType but excludes "custom"', + }, + ]} + /> + </DocSection.Content> + <DocSection.Code> + <CodeBlock label="Import" code={`import StatusPill from '@/components/Global/StatusPill'`} /> + + <CodeBlock label="Usage" code={`<StatusPill status="completed" />`} /> + </DocSection.Code> + </DocSection> + + {/* ErrorAlert */} + <DocSection title="ErrorAlert"> + <DocSection.Content> + <p className="text-sm text-grey-1"> + Inline error message with icon. Red text, left-aligned icon + description. + </p> + + <div className="space-y-2 rounded-sm border border-n-1 p-3"> + <ErrorAlert description="Insufficient balance to complete this transaction." /> + </div> + + <PropsTable + rows={[ + { + name: 'description', + type: 'string', + default: '-', + required: true, + description: 'Error message text', + }, + { + name: 'className', + type: 'string', + default: "''", + description: 'Override container styles', + }, + { name: 'iconSize', type: 'number', default: '16' }, + { + name: 'iconClassName', + type: 'string', + default: "''", + description: 'Override icon styles', + }, + ]} + /> + </DocSection.Content> + <DocSection.Code> + <CodeBlock label="Import" code={`import ErrorAlert from '@/components/Global/ErrorAlert'`} /> + + <CodeBlock + label="Usage" + code={`<ErrorAlert description="Something went wrong. Please try again." />`} + /> + </DocSection.Code> + </DocSection> + + {/* EmptyState */} + <DocSection title="EmptyState"> + <DocSection.Content> + <p className="text-sm text-grey-1"> + Card-based empty state with icon, title, description, and optional CTA. Uses Global Card + internally. + </p> + + <div className="space-y-4"> + <EmptyState + icon="wallet" + title="No transactions yet" + description="Your transaction history will appear here." + cta={ + <Button variant="purple" shadowSize="4" size="small" className="mt-2"> + Send Money + </Button> + } + /> + + <EmptyState icon="search" title="No results found" description="Try a different search term." /> + </div> + + <PropsTable + rows={[ + { + name: 'icon', + type: 'IconName', + default: '-', + required: true, + description: 'Icon shown in pink circle', + }, + { name: 'title', type: 'string | ReactNode', default: '-', required: true }, + { name: 'description', type: 'string', default: '(none)' }, + { + name: 'cta', + type: 'ReactNode', + default: '(none)', + description: 'Action button below text', + }, + { + name: 'containerClassName', + type: 'string', + default: "''", + description: 'Override Card container', + }, + ]} + /> + </DocSection.Content> + <DocSection.Code> + <CodeBlock + label="Import" + code={`import EmptyState from '@/components/Global/EmptyStates/EmptyState'`} + /> + + <CodeBlock + label="Usage" + code={`<EmptyState + icon="wallet" + title="No transactions yet" + description="Your history will appear here." + cta={<Button variant="purple" size="small">Send Money</Button>} +/>`} + /> + </DocSection.Code> + </DocSection> + + {/* NoDataEmptyState */} + <DocSection title="NoDataEmptyState"> + <DocSection.Content> + <p className="text-sm text-grey-1"> + Branded empty state with crying Peanutman GIF animation. For "no data" scenarios. + </p> + + <div className="rounded-sm border border-n-1 p-4"> + <NoDataEmptyState message="Nothing to show here" /> + </div> + + <PropsTable + rows={[ + { + name: 'message', + type: 'string', + default: '-', + required: true, + description: 'Text below the animation', + }, + { name: 'cta', type: 'ReactNode', default: '(none)', description: 'Action below message' }, + { + name: 'animSize', + type: "'sm' | 'md' | 'lg' | 'xl'", + default: "'sm'", + description: '96 / 128 / 192 / 256 px', + }, + ]} + /> + </DocSection.Content> + <DocSection.Code> + <CodeBlock + label="Import" + code={`import NoDataEmptyState from '@/components/Global/EmptyStates/NoDataEmptyState'`} + /> + + <CodeBlock label="Usage" code={`<NoDataEmptyState message="No links found" animSize="md" />`} /> + </DocSection.Code> + </DocSection> + + <SectionDivider /> + + {/* Design Notes */} + <DocSection title="Design Rules"> + <DesignNote type="info"> + StatusBadge for text labels in tables/lists. StatusPill for compact icon-only indicators next to + items. + </DesignNote> + <DesignNote type="info"> + Use EmptyState (card-based, icon) for structured empty states inside content areas. Use + NoDataEmptyState (Peanutman GIF) for full-section "no data" states. + </DesignNote> + </DocSection> + </DocPage> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/patterns/layouts/page.tsx b/src/app/(mobile-ui)/dev/ds/patterns/layouts/page.tsx new file mode 100644 index 000000000..32e70b78b --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/patterns/layouts/page.tsx @@ -0,0 +1,289 @@ +'use client' + +import { Icon } from '@/components/Global/Icons/Icon' +import { DesignNote } from '../../_components/DesignNote' +import { DocHeader } from '../../_components/DocHeader' +import { DocSection } from '../../_components/DocSection' +import { SectionDivider } from '../../_components/SectionDivider' +import { DocPage } from '../../_components/DocPage' +import { CodeBlock } from '../../_components/CodeBlock' + +export default function LayoutsPage() { + return ( + <DocPage> + <DocHeader + title="Layouts" + description="Three page layout recipes used across the app. Every screen follows one of these patterns." + status="production" + /> + + {/* Recipe 1: Centered Content + CTA */} + <DocSection title="1. Centered Content + CTA (Most Common)"> + <DocSection.Content> + <p className="text-sm text-grey-1"> + Content vertically centered in viewport, CTA button pinned to the bottom. Used for: claim pages, + success states, amount input, confirmations. + </p> + + {/* Wireframe */} + <div className="rounded-sm border border-n-1"> + <div className="flex h-80 flex-col p-3"> + <div className="rounded-sm bg-grey-2/30 px-3 py-1.5"> + <div className="flex items-center gap-1"> + <Icon name="chevron-up" size={12} className="-rotate-90" /> + <span className="text-xs text-grey-1">FlowHeader</span> + </div> + </div> + <div className="flex flex-1 items-center justify-center"> + <div className="space-y-2 text-center"> + <div className="mx-auto h-8 w-8 rounded-full bg-primary-1/30" /> + <div className="text-xs font-bold">Main Content</div> + <div className="text-xs text-grey-1">flex-1 + items-center</div> + </div> + </div> + <div className="rounded-sm bg-purple-1/20 px-3 py-2 text-center"> + <span className="text-xs font-bold">CTA Button</span> + </div> + </div> + </div> + </DocSection.Content> + <DocSection.Code> + <CodeBlock + label="Pattern 1: Centered Content + CTA" + code={`<div className="flex h-full flex-col"> + <FlowHeader onPrev={handleBack} /> + + {/* Centered content */} + <div className="flex flex-1 items-center justify-center"> + <div className="text-center"> + {/* Icon, title, description */} + </div> + </div> + + {/* Bottom CTA */} + <Button variant="purple" shadowSize="4" className="w-full"> + Continue + </Button> +</div>`} + /> + </DocSection.Code> + </DocSection> + + {/* Recipe 2: Pinned Footer CTA */} + <DocSection title="2. Pinned Footer CTA"> + <DocSection.Content> + <p className="text-sm text-grey-1"> + Content flows naturally from top, CTA stays at the very bottom regardless of content height. + Used for: forms, settings, token selection. + </p> + + {/* Wireframe */} + <div className="rounded-sm border border-n-1"> + <div className="flex h-80 flex-col p-3"> + <div className="rounded-sm bg-grey-2/30 px-3 py-1.5"> + <span className="text-xs text-grey-1">NavHeader</span> + </div> + <div className="mt-2 space-y-1.5"> + <div className="rounded-sm bg-primary-3/20 px-3 py-2"> + <span className="text-xs">Form Field 1</span> + </div> + <div className="rounded-sm bg-primary-3/20 px-3 py-2"> + <span className="text-xs">Form Field 2</span> + </div> + <div className="rounded-sm bg-primary-3/20 px-3 py-2"> + <span className="text-xs">Form Field 3</span> + </div> + </div> + <div className="flex-1" /> + <div className="rounded-sm bg-purple-1/20 px-3 py-2 text-center"> + <span className="text-xs font-bold">Submit Button</span> + </div> + </div> + </div> + </DocSection.Content> + <DocSection.Code> + <CodeBlock + label="Pattern 2: Pinned Footer CTA" + code={`<div className="flex h-full flex-col"> + <NavHeader title="Settings" /> + + {/* Top-aligned content */} + <div className="space-y-3 py-4"> + <BaseInput label="Name" ... /> + <BaseInput label="Email" ... /> + </div> + + {/* Spacer pushes CTA to bottom */} + <div className="flex-1" /> + + {/* Pinned CTA */} + <Button variant="purple" shadowSize="4" className="w-full"> + Save Changes + </Button> +</div>`} + /> + </DocSection.Code> + </DocSection> + + {/* Recipe 3: Scrollable List */} + <DocSection title="3. Scrollable List"> + <DocSection.Content> + <p className="text-sm text-grey-1"> + Header + scrollable list area + optional footer. The list scrolls independently while header and + footer remain fixed. Used for: transaction history, token lists, contact lists. + </p> + + {/* Wireframe */} + <div className="rounded-sm border border-n-1"> + <div className="flex h-80 flex-col p-3"> + <div className="rounded-sm bg-grey-2/30 px-3 py-1.5"> + <span className="text-xs text-grey-1">NavHeader + Search/Filter</span> + </div> + <div className="mt-2 flex-1 space-y-1 overflow-hidden"> + {[1, 2, 3, 4, 5, 6].map((i) => ( + <div key={i} className="rounded-sm border border-n-1/20 bg-white px-3 py-2"> + <div className="flex items-center justify-between"> + <span className="text-xs">List Item {i}</span> + <span className="text-xs text-grey-1">detail</span> + </div> + </div> + ))} + <div className="text-center text-xs text-grey-1">overflow-y-auto</div> + </div> + </div> + </div> + </DocSection.Content> + <DocSection.Code> + <CodeBlock + label="Pattern 3: Scrollable List" + code={`<div className="flex h-full flex-col"> + <NavHeader title="History" /> + + {/* Fixed search bar */} + <div className="py-2"> + <BaseInput placeholder="Search..." /> + </div> + + {/* Scrollable list */} + <div className="flex-1 overflow-y-auto"> + {items.map(item => ( + <Card key={item.id} position={getPosition(index, items.length)}> + {/* Item content */} + </Card> + ))} + </div> +</div>`} + /> + </DocSection.Code> + </DocSection> + + <SectionDivider /> + + {/* Common Mistakes */} + <DocSection title="Common Mistakes"> + <DocSection.Content> + {/* Error callout */} + <div className="space-y-2 rounded-sm border border-error-2 bg-error-1/10 p-3"> + <div className="flex items-center gap-1.5"> + <Icon name="cancel" size={14} className="text-error" /> + <span className="text-xs font-bold text-error">Wrong</span> + </div> + <p className="text-xs text-grey-1"> + Without h-full the flex container collapses to content height. The CTA sits right below + content instead of at the bottom. + </p> + </div> + + {/* Success callout */} + <div className="space-y-2 rounded-sm border border-success-5 bg-success-2/10 p-3"> + <div className="flex items-center gap-1.5"> + <Icon name="success" size={14} className="text-success-4" /> + <span className="text-xs font-bold text-success-4">Correct</span> + </div> + <p className="text-xs text-grey-1"> + h-full ensures the flex column fills the available height from PageContainer. flex-1 on the + content area pushes the CTA to the bottom. + </p> + </div> + + {/* Error callout 2 */} + <div className="space-y-2 rounded-sm border border-error-2 bg-error-1/10 p-3"> + <div className="flex items-center gap-1.5"> + <Icon name="cancel" size={14} className="text-error" /> + <span className="text-xs font-bold text-error">Wrong</span> + </div> + <p className="text-xs text-grey-1"> + overflow-y-auto alone does nothing unless the element has a bounded height. Use flex-1 + inside a flex-col container, or set an explicit max-height. + </p> + </div> + + {/* Success callout 2 */} + <div className="space-y-2 rounded-sm border border-success-5 bg-success-2/10 p-3"> + <div className="flex items-center gap-1.5"> + <Icon name="success" size={14} className="text-success-4" /> + <span className="text-xs font-bold text-success-4">Correct</span> + </div> + <p className="text-xs text-grey-1"> + Inside a flex column with h-full, flex-1 fills remaining space and provides the bounded + height that overflow-y-auto needs to actually scroll. + </p> + </div> + </DocSection.Content> + <DocSection.Code> + <CodeBlock + label="Wrong: Missing h-full" + code={`{/* Missing h-full on container - CTA won't pin to bottom */} +<div className="flex flex-col"> + <div className="flex-1">Content</div> + <Button>Submit</Button> +</div>`} + /> + + <CodeBlock + label="Correct: With h-full" + code={`{/* h-full makes container fill PageContainer */} +<div className="flex h-full flex-col"> + <div className="flex-1">Content</div> + <Button>Submit</Button> +</div>`} + /> + + <CodeBlock + label="Wrong: Scrollable without bounded height" + code={`{/* Scrollable area without bounded height */} +<div className="overflow-y-auto"> + {items.map(...)} +</div>`} + /> + + <CodeBlock + label="Correct: flex-1 provides bounded height" + code={`{/* flex-1 gives the scroll area a bounded height */} +<div className="flex h-full flex-col"> + <div className="flex-1 overflow-y-auto"> + {items.map(...)} + </div> +</div>`} + /> + </DocSection.Code> + </DocSection> + + {/* Design Notes */} + <DocSection title="Design Rules"> + <DesignNote type="info"> + Every page is wrapped in PageContainer which provides padding and max-width. Your layout div needs + h-full to fill it. + </DesignNote> + <DesignNote type="info"> + The key pattern is always: flex flex-col h-full. Then use flex-1 on the expanding section and let + the CTA sit naturally at the bottom. + </DesignNote> + <DesignNote type="warning"> + Never use absolute/fixed positioning for bottom CTAs. The flex approach handles keyboard open, safe + areas, and content overflow correctly. + </DesignNote> + </DocSection> + </DocPage> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/patterns/loading/page.tsx b/src/app/(mobile-ui)/dev/ds/patterns/loading/page.tsx new file mode 100644 index 000000000..3929ad9ef --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/patterns/loading/page.tsx @@ -0,0 +1,145 @@ +'use client' + +import Loading from '@/components/Global/Loading' +import PeanutLoading from '@/components/Global/PeanutLoading' +import { PropsTable } from '../../_components/PropsTable' +import { DesignNote } from '../../_components/DesignNote' +import { DocHeader } from '../../_components/DocHeader' +import { DocSection } from '../../_components/DocSection' +import { SectionDivider } from '../../_components/SectionDivider' +import { DocPage } from '../../_components/DocPage' +import { CodeBlock } from '../../_components/CodeBlock' + +export default function LoadingPage() { + return ( + <DocPage> + <DocHeader + title="Loading" + description="CSS spinner (Loading) for inline/button use, and branded Peanut logo spinner (PeanutLoading) for full-page or section loading states." + status="production" + /> + + {/* Loading (CSS Spinner) */} + <DocSection title="Loading (CSS Spinner)"> + <DocSection.Content> + <p className="text-sm text-grey-1"> + Minimal CSS-only spinner. Uses border animation. Size controlled via className. + </p> + + <div className="space-y-4"> + <p className="text-xs font-bold uppercase tracking-wider text-grey-1">Sizes</p> + <div className="flex items-end gap-6"> + <div className="text-center"> + <Loading className="h-3 w-3" /> + <p className="mt-2 text-xs text-grey-1">h-3 w-3</p> + </div> + <div className="text-center"> + <Loading /> + <p className="mt-2 text-xs text-grey-1">h-4 w-4 (default)</p> + </div> + <div className="text-center"> + <Loading className="h-6 w-6" /> + <p className="mt-2 text-xs text-grey-1">h-6 w-6</p> + </div> + <div className="text-center"> + <Loading className="h-8 w-8" /> + <p className="mt-2 text-xs text-grey-1">h-8 w-8</p> + </div> + <div className="text-center"> + <Loading className="h-12 w-12" /> + <p className="mt-2 text-xs text-grey-1">h-12 w-12</p> + </div> + </div> + </div> + + <PropsTable + rows={[ + { + name: 'className', + type: 'string', + default: "'h-4 w-4'", + description: 'Controls size via Tailwind width/height', + }, + ]} + /> + </DocSection.Content> + <DocSection.Code> + <CodeBlock label="Import" code={`import Loading from '@/components/Global/Loading'`} /> + + <CodeBlock + label="Usage" + code={`<Loading /> {/* default 16px */} +<Loading className="h-8 w-8" /> {/* 32px */}`} + /> + </DocSection.Code> + </DocSection> + + {/* PeanutLoading */} + <DocSection title="PeanutLoading (Branded)"> + <DocSection.Content> + <p className="text-sm text-grey-1"> + Spinning Peanut logo with optional message. Can cover the full screen as an overlay. + </p> + + {/* Inline demo */} + <div className="space-y-4"> + <p className="text-xs font-bold uppercase tracking-wider text-grey-1">Inline</p> + <div className="rounded-sm border border-n-1 p-4"> + <PeanutLoading message="Processing your transaction..." /> + </div> + </div> + + <div className="space-y-4"> + <p className="text-xs font-bold uppercase tracking-wider text-grey-1">Without message</p> + <div className="rounded-sm border border-n-1 p-4"> + <PeanutLoading /> + </div> + </div> + + <PropsTable + rows={[ + { + name: 'coverFullScreen', + type: 'boolean', + default: 'false', + description: 'Fixed overlay covering entire viewport', + }, + { + name: 'message', + type: 'string', + default: '(none)', + description: 'Text shown below the spinner', + }, + ]} + /> + </DocSection.Content> + <DocSection.Code> + <CodeBlock label="Import" code={`import PeanutLoading from '@/components/Global/PeanutLoading'`} /> + + <CodeBlock + label="Usage" + code={`{/* Inline */} +<PeanutLoading message="Loading your wallet..." /> + +{/* Full screen overlay */} +<PeanutLoading coverFullScreen message="Please wait..." />`} + /> + </DocSection.Code> + </DocSection> + + <SectionDivider /> + + {/* Design Notes */} + <DocSection title="Design Rules"> + <DesignNote type="info"> + Use Loading (CSS spinner) inside buttons, inline indicators, and small containers. Use PeanutLoading + for page-level or section-level loading states where brand presence matters. + </DesignNote> + <DesignNote type="warning"> + PeanutLoading with coverFullScreen renders a fixed z-50 overlay. Make sure to conditionally render + it only when loading is active to avoid blocking the UI. + </DesignNote> + </DocSection> + </DocPage> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/patterns/modal/page.tsx b/src/app/(mobile-ui)/dev/ds/patterns/modal/page.tsx new file mode 100644 index 000000000..e16c79855 --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/patterns/modal/page.tsx @@ -0,0 +1,327 @@ +'use client' + +import { useState } from 'react' +import { Button } from '@/components/0_Bruddle/Button' +import Modal from '@/components/Global/Modal' +import ActionModal from '@/components/Global/ActionModal' +import { PropsTable } from '../../_components/PropsTable' +import { DesignNote } from '../../_components/DesignNote' +import { DocHeader } from '../../_components/DocHeader' +import { DocSection } from '../../_components/DocSection' +import { SectionDivider } from '../../_components/SectionDivider' +import { DocPage } from '../../_components/DocPage' +import { CodeBlock } from '../../_components/CodeBlock' + +export default function ModalPage() { + const [showModal, setShowModal] = useState(false) + const [showActionModal, setShowActionModal] = useState(false) + const [actionCheckbox, setActionCheckbox] = useState(false) + + return ( + <DocPage> + <DocHeader + title="Modal" + description="Base Modal for custom dialog content, and ActionModal for standardized confirmation/action dialogs with icon, title, description, CTAs, and optional checkbox." + status="production" + /> + + {/* Base Modal */} + <DocSection title="Base Modal"> + <DocSection.Content> + <p className="text-sm text-grey-1"> + HeadlessUI Dialog wrapper with animated overlay and panel. Use for custom modal content. + </p> + + <div> + <Button variant="stroke" onClick={() => setShowModal(true)}> + Open Base Modal + </Button> + <Modal visible={showModal} onClose={() => setShowModal(false)} title="Example Modal"> + <div className="p-5"> + <p className="text-sm text-grey-1"> + This is the base Modal. It provides the overlay, panel animation, close button, and + optional title bar. You supply the children. + </p> + <div className="mt-4"> + <Button + variant="purple" + shadowSize="4" + className="w-full" + onClick={() => setShowModal(false)} + > + Got it + </Button> + </div> + </div> + </Modal> + </div> + + <PropsTable + rows={[ + { + name: 'visible', + type: 'boolean', + default: '-', + required: true, + description: 'Controls modal visibility', + }, + { + name: 'onClose', + type: '() => void', + default: '-', + required: true, + description: 'Called when overlay or close button clicked', + }, + { + name: 'title', + type: 'string', + default: '(none)', + description: 'Renders title bar with border', + }, + { + name: 'className', + type: 'string', + default: "''", + description: 'Class for the Dialog root', + }, + { name: 'classWrap', type: 'string', default: "''", description: 'Class for Dialog.Panel' }, + { + name: 'classOverlay', + type: 'string', + default: "''", + description: 'Class for the backdrop overlay', + }, + { + name: 'classButtonClose', + type: 'string', + default: "''", + description: 'Class for the close button', + }, + { + name: 'preventClose', + type: 'boolean', + default: 'false', + description: 'Disables closing via overlay click', + }, + { + name: 'hideOverlay', + type: 'boolean', + default: 'false', + description: 'Hides close button and title, renders children directly', + }, + { + name: 'video', + type: 'boolean', + default: 'false', + description: 'Aspect-ratio video mode', + }, + { name: 'children', type: 'ReactNode', default: '-', required: true }, + ]} + /> + </DocSection.Content> + <DocSection.Code> + <CodeBlock label="Import" code={`import Modal from '@/components/Global/Modal'`} /> + + <CodeBlock + label="Usage" + code={`<Modal visible={visible} onClose={() => setVisible(false)} title="Example"> + <div className="p-5"> + {/* Your content */} + </div> +</Modal>`} + /> + </DocSection.Code> + </DocSection> + + {/* ActionModal */} + <DocSection title="ActionModal"> + <DocSection.Content> + <p className="text-sm text-grey-1"> + Pre-composed modal with icon, title, description, CTA buttons, and optional checkbox. Built on + top of Base Modal. + </p> + + <div> + <Button variant="stroke" onClick={() => setShowActionModal(true)}> + Open ActionModal + </Button> + <ActionModal + visible={showActionModal} + onClose={() => { + setShowActionModal(false) + setActionCheckbox(false) + }} + title="Confirm Action" + description="Are you sure you want to proceed? This action cannot be undone." + icon="alert" + checkbox={{ + text: 'I understand the consequences', + checked: actionCheckbox, + onChange: setActionCheckbox, + }} + ctas={[ + { + text: 'Cancel', + variant: 'stroke', + onClick: () => { + setShowActionModal(false) + setActionCheckbox(false) + }, + }, + { + text: 'Confirm', + variant: 'purple', + disabled: !actionCheckbox, + onClick: () => { + setShowActionModal(false) + setActionCheckbox(false) + }, + }, + ]} + /> + </div> + + <PropsTable + rows={[ + { name: 'visible', type: 'boolean', default: '-', required: true }, + { name: 'onClose', type: '() => void', default: '-', required: true }, + { name: 'title', type: 'string | ReactNode', default: '-', required: true }, + { + name: 'description', + type: 'string | ReactNode', + default: '(none)', + description: 'Subtitle text', + }, + { + name: 'icon', + type: 'IconName | ReactNode', + default: '(none)', + description: 'Displayed in pink circle above title', + }, + { + name: 'iconProps', + type: 'Partial<IconProps>', + default: '(none)', + description: 'Override icon size/color', + }, + { + name: 'isLoadingIcon', + type: 'boolean', + default: 'false', + description: 'Replace icon with spinner', + }, + { + name: 'ctas', + type: 'ActionModalButtonProps[]', + default: '[]', + description: 'Array of {text, variant, onClick, ...ButtonProps}', + }, + { + name: 'checkbox', + type: 'ActionModalCheckboxProps', + default: '(none)', + description: '{text, checked, onChange}', + }, + { + name: 'preventClose', + type: 'boolean', + default: 'false', + description: 'Block overlay-click dismiss', + }, + { + name: 'hideModalCloseButton', + type: 'boolean', + default: 'false', + description: 'Hides the X button', + }, + { + name: 'content', + type: 'ReactNode', + default: '(none)', + description: 'Custom content between description and CTAs', + }, + { name: 'footer', type: 'ReactNode', default: '(none)', description: 'Content below CTAs' }, + ]} + /> + </DocSection.Content> + <DocSection.Code> + <CodeBlock label="Import" code={`import ActionModal from '@/components/Global/ActionModal'`} /> + + <CodeBlock + label="Usage" + code={`<ActionModal + visible={visible} + onClose={() => setVisible(false)} + title="Confirm Action" + description="Are you sure?" + icon="alert" + checkbox={{ + text: 'I understand', + checked: checked, + onChange: setChecked, + }} + ctas={[ + { text: 'Cancel', variant: 'stroke', onClick: handleCancel }, + { text: 'Confirm', variant: 'purple', onClick: handleConfirm }, + ]} +/>`} + /> + </DocSection.Code> + </DocSection> + + <SectionDivider /> + + {/* Design Notes */} + <DocSection title="Design Rules"> + <DesignNote type="info"> + ActionModal is the preferred pattern for confirmations and simple actions. Use Base Modal only when + you need fully custom content. + </DesignNote> + <DesignNote type="warning"> + ActionModal icon renders in a pink (primary-1) circle by default. Override with + iconContainerClassName if needed. + </DesignNote> + </DocSection> + + {/* Specialized Modals Reference */} + <DocSection title="Specialized Modals (14)"> + <p className="text-sm text-grey-1"> + These are pre-built modals for specific flows. They compose ActionModal or Modal internally. + </p> + <div className="overflow-x-auto rounded-sm border border-n-1 text-xs"> + <table className="w-full"> + <thead> + <tr className="border-b border-n-1 bg-primary-3/20"> + <th className="px-3 py-1.5 text-left font-bold">Component</th> + <th className="px-3 py-1.5 text-left font-bold">Purpose</th> + </tr> + </thead> + <tbody> + {[ + ['InviteFriendsModal', 'Share referral link with copy + social buttons'], + ['ConfirmInviteModal', 'Confirm invitation before sending'], + ['GuestLoginModal', 'Prompt guest users to log in or register'], + ['KycVerifiedOrReviewModal', 'KYC verification status feedback'], + ['BalanceWarningModal', 'Warn about insufficient balance'], + ['TokenAndNetworkConfirmationModal', 'Confirm token + chain before transfer'], + ['TokenSelectorModal', 'Pick token from a list'], + ['ChainSelectorModal', 'Pick blockchain network'], + ['RecipientSelectorModal', 'Pick or enter recipient address'], + ['QRCodeModal', 'Display QR code for sharing'], + ['TransactionStatusModal', 'Show tx pending/success/failed state'], + ['WalletConnectModal', 'Wallet connection flow'], + ['ExportPrivateKeyModal', 'Reveal and copy private key'], + ['ConfirmTransactionModal', 'Final review before transaction submit'], + ].map(([name, purpose]) => ( + <tr key={name} className="border-b border-n-1 last:border-0"> + <td className="px-3 py-1.5 font-mono font-bold">{name}</td> + <td className="px-3 py-1.5">{purpose}</td> + </tr> + ))} + </tbody> + </table> + </div> + </DocSection> + </DocPage> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/patterns/navigation/page.tsx b/src/app/(mobile-ui)/dev/ds/patterns/navigation/page.tsx new file mode 100644 index 000000000..2905d1f34 --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/patterns/navigation/page.tsx @@ -0,0 +1,188 @@ +'use client' + +import { useState } from 'react' +import FlowHeader from '@/components/Global/FlowHeader' +import { Button } from '@/components/0_Bruddle/Button' +import { PropsTable } from '../../_components/PropsTable' +import { DesignNote } from '../../_components/DesignNote' +import { DocHeader } from '../../_components/DocHeader' +import { DocSection } from '../../_components/DocSection' +import { SectionDivider } from '../../_components/SectionDivider' +import { DocPage } from '../../_components/DocPage' +import { CodeBlock } from '../../_components/CodeBlock' + +export default function NavigationPage() { + const [flowStep, setFlowStep] = useState(1) + + return ( + <DocPage> + <DocHeader + title="Navigation" + description="NavHeader for page-level navigation with title and back button. FlowHeader for multi-step flows with optional right element." + status="production" + /> + + {/* NavHeader */} + <DocSection title="NavHeader"> + <DocSection.Content> + <p className="text-sm text-grey-1"> + Top navigation bar with back button (link or callback), centered title, and optional logout + button. Uses authContext for logout. + </p> + + <DesignNote type="warning"> + NavHeader uses useAuth() internally for the logout button. It cannot be rendered in isolation + outside of the auth provider. Showing code examples only. + </DesignNote> + + <PropsTable + rows={[ + { name: 'title', type: 'string', default: '(none)', description: 'Centered title text' }, + { + name: 'href', + type: 'string', + default: "'/home'", + description: 'Link destination when no onPrev', + }, + { + name: 'onPrev', + type: '() => void', + default: '(none)', + description: 'Callback replaces Link with Button', + }, + { + name: 'icon', + type: 'IconName', + default: "'chevron-up'", + description: 'Back button icon (rotated -90deg)', + }, + { + name: 'disableBackBtn', + type: 'boolean', + default: 'false', + description: 'Disables the back button', + }, + { + name: 'showLogoutBtn', + type: 'boolean', + default: 'false', + description: 'Shows logout icon button on right', + }, + { + name: 'hideLabel', + type: 'boolean', + default: 'false', + description: 'Hides the title text', + }, + { + name: 'titleClassName', + type: 'string', + default: "''", + description: 'Override title styles', + }, + ]} + /> + </DocSection.Content> + <DocSection.Code> + <CodeBlock label="Import" code={`import NavHeader from '@/components/Global/NavHeader'`} /> + + <CodeBlock label="Link-based (default)" code={`<NavHeader title="Settings" href="/home" />`} /> + + <CodeBlock + label="Callback-based" + code={`<NavHeader title="Edit Profile" onPrev={() => router.back()} />`} + /> + + <CodeBlock label="With logout" code={`<NavHeader title="Account" showLogoutBtn />`} /> + </DocSection.Code> + </DocSection> + + {/* FlowHeader */} + <DocSection title="FlowHeader"> + <DocSection.Content> + <p className="text-sm text-grey-1"> + Minimal header for multi-step flows. Back button on the left, optional element on the right. No + title -- the screen content below provides context. + </p> + + {/* Live demo */} + <div className="space-y-2 rounded-sm border border-n-1 p-3"> + <p className="text-xs font-bold uppercase tracking-wider text-grey-1"> + Live Demo (step {flowStep}/3) + </p> + <FlowHeader + onPrev={flowStep > 1 ? () => setFlowStep((s) => s - 1) : undefined} + disableBackBtn={flowStep <= 1} + rightElement={<span className="text-xs text-grey-1">{flowStep}/3</span>} + /> + <div className="flex items-center justify-center rounded-sm bg-primary-3/20 py-8"> + <span className="text-sm font-bold">Step {flowStep} Content</span> + </div> + {flowStep < 3 ? ( + <Button + variant="purple" + shadowSize="4" + className="w-full" + onClick={() => setFlowStep((s) => s + 1)} + > + Next + </Button> + ) : ( + <Button variant="purple" shadowSize="4" className="w-full" onClick={() => setFlowStep(1)}> + Restart + </Button> + )} + </div> + + <PropsTable + rows={[ + { + name: 'onPrev', + type: '() => void', + default: '(none)', + description: 'Back button handler. If omitted, no back button shown.', + }, + { + name: 'disableBackBtn', + type: 'boolean', + default: 'false', + description: 'Grays out the back button', + }, + { + name: 'rightElement', + type: 'ReactNode', + default: '(none)', + description: 'Element rendered on the right (e.g. step indicator)', + }, + ]} + /> + </DocSection.Content> + <DocSection.Code> + <CodeBlock label="Import" code={`import FlowHeader from '@/components/Global/FlowHeader'`} /> + + <CodeBlock + label="Usage" + code={`<FlowHeader + onPrev={() => setStep(step - 1)} + rightElement={<span className="text-xs text-grey-1">2/3</span>} +/>`} + /> + </DocSection.Code> + </DocSection> + + <SectionDivider /> + + {/* Design Notes */} + <DocSection title="Design Rules"> + <DesignNote type="info"> + Use NavHeader for standalone pages (Settings, Profile, etc.). Use FlowHeader for multi-step wizards + (Send, Request, Claim, etc.). + </DesignNote> + <DesignNote type="info"> + Both use a 28px (h-7 w-7) stroke button for the back arrow. This is the standard navigation button + size. + </DesignNote> + </DocSection> + </DocPage> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/patterns/page.tsx b/src/app/(mobile-ui)/dev/ds/patterns/page.tsx new file mode 100644 index 000000000..023c23901 --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/patterns/page.tsx @@ -0,0 +1,90 @@ +import { CatalogCard, CatalogGrid } from '../_components/CatalogCard' +import { DocPage } from '../_components/DocPage' + +export default function PatternsPage() { + return ( + <DocPage> + <div> + <h1 className="text-h3">Patterns</h1> + <p className="mt-1 text-sm text-grey-1"> + Composed components and layout patterns built from primitives and Global shared components. + </p> + </div> + + <CatalogGrid> + <CatalogCard + title="Modal" + description="Base Modal + ActionModal + specialized modals (14 total)" + href="/dev/ds/patterns/modal" + icon="link" + status="production" + quality={4} + /> + <CatalogCard + title="Drawer" + description="Vaul-based bottom sheet with compound component API" + href="/dev/ds/patterns/drawer" + icon="link" + status="production" + quality={5} + /> + <CatalogCard + title="Navigation" + description="NavHeader and FlowHeader for screen navigation" + href="/dev/ds/patterns/navigation" + icon="link" + status="production" + quality={4} + /> + <CatalogCard + title="Loading" + description="CSS spinner (Loading) and branded animation (PeanutLoading)" + href="/dev/ds/patterns/loading" + icon="processing" + status="production" + quality={4} + /> + <CatalogCard + title="Feedback" + description="StatusBadge, StatusPill, ErrorAlert, EmptyState, NoDataEmptyState" + href="/dev/ds/patterns/feedback" + icon="meter" + status="production" + quality={4} + /> + <CatalogCard + title="Copy & Share" + description="CopyField, CopyToClipboard, ShareButton, AddressLink" + href="/dev/ds/patterns/copy-share" + icon="copy" + status="production" + quality={4} + /> + <CatalogCard + title="Layouts" + description="Page layout recipes: centered CTA, pinned footer, scrollable list" + href="/dev/ds/patterns/layouts" + icon="switch" + status="production" + quality={4} + /> + <CatalogCard + title="Cards (Global)" + description="Global Card for stacked lists with position-aware borders" + href="/dev/ds/patterns/cards-global" + icon="docs" + status="production" + quality={4} + /> + <CatalogCard + title="AmountInput" + description="Large currency input with conversion, slider, balance display" + href="/dev/ds/patterns/amount-input" + icon="dollar" + status="needs-refactor" + quality={3} + /> + </CatalogGrid> + </DocPage> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/primitives/base-input/page.tsx b/src/app/(mobile-ui)/dev/ds/primitives/base-input/page.tsx new file mode 100644 index 000000000..28ba2c1ae --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/primitives/base-input/page.tsx @@ -0,0 +1,105 @@ +'use client' + +import { useState } from 'react' +import BaseInput from '@/components/0_Bruddle/BaseInput' +import { Playground } from '../../_components/Playground' +import { PropsTable } from '../../_components/PropsTable' +import { DocHeader } from '../../_components/DocHeader' +import { DocSection } from '../../_components/DocSection' +import { SectionDivider } from '../../_components/SectionDivider' +import { DocPage } from '../../_components/DocPage' +import { CodeBlock } from '../../_components/CodeBlock' + +export default function BaseInputPage() { + const [value, setValue] = useState('') + + return ( + <DocPage> + <DocHeader + title="BaseInput" + description="Text input with sm/md/lg size variants and optional right content slot." + status="production" + /> + + <Playground + name="BaseInput" + importPath={`import BaseInput from '@/components/0_Bruddle/BaseInput'`} + defaults={{ variant: 'md', placeholder: 'Enter text...' }} + controls={[ + { type: 'select', prop: 'variant', label: 'variant', options: ['sm', 'md', 'lg'] }, + { type: 'text', prop: 'placeholder', label: 'placeholder', placeholder: 'Placeholder text' }, + { type: 'boolean', prop: 'disabled', label: 'disabled' }, + ]} + render={(props) => ( + <BaseInput + {...props} + className="w-full max-w-xs" + value={value} + onChange={(e) => setValue(e.target.value)} + /> + )} + codeTemplate={(props) => { + const parts = ['<BaseInput'] + if (props.variant && props.variant !== 'md') parts.push(`variant="${props.variant}"`) + if (props.placeholder) parts.push(`placeholder="${props.placeholder}"`) + if (props.disabled) parts.push('disabled') + parts.push('/>') + return parts.join(' ') + }} + /> + + <SectionDivider /> + + <PropsTable + rows={[ + { + name: 'variant', + type: "'sm' | 'md' | 'lg'", + default: "'md'", + description: 'Height: sm=h-10, md=h-16, lg=h-20', + }, + { + name: 'rightContent', + type: 'ReactNode', + default: '(none)', + description: 'Content in the right side of the input', + }, + { name: 'className', type: 'string', default: '(none)' }, + ]} + /> + + <DocSection title="Sizes"> + <DocSection.Content> + <BaseInput variant="sm" placeholder="small (sm)" /> + <BaseInput variant="md" placeholder="medium (md) — default" /> + <BaseInput variant="lg" placeholder="large (lg)" /> + </DocSection.Content> + <DocSection.Code> + <CodeBlock label="Import" code={`import BaseInput from '@/components/0_Bruddle/BaseInput'`} /> + <CodeBlock label="Basic Usage" code={`<BaseInput placeholder="Enter text..." />`} /> + <CodeBlock + label="Size Variants" + code={`<BaseInput variant="sm" placeholder="Small" /> +<BaseInput variant="md" placeholder="Medium" /> +<BaseInput variant="lg" placeholder="Large" />`} + /> + </DocSection.Code> + </DocSection> + + <DocSection title="With Right Content"> + <DocSection.Content> + <BaseInput placeholder="Amount" rightContent={<span className="text-sm text-grey-1">USD</span>} /> + </DocSection.Content> + <DocSection.Code> + <CodeBlock + label="With Right Content" + code={`<BaseInput + placeholder="Amount" + rightContent={<span className="text-sm text-grey-1">USD</span>} +/>`} + /> + </DocSection.Code> + </DocSection> + </DocPage> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/primitives/base-select/page.tsx b/src/app/(mobile-ui)/dev/ds/primitives/base-select/page.tsx new file mode 100644 index 000000000..5b6b7d5fe --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/primitives/base-select/page.tsx @@ -0,0 +1,83 @@ +'use client' + +import { useState } from 'react' +import BaseSelect from '@/components/0_Bruddle/BaseSelect' +import { PropsTable } from '../../_components/PropsTable' +import { DocHeader } from '../../_components/DocHeader' +import { DocSection } from '../../_components/DocSection' +import { SectionDivider } from '../../_components/SectionDivider' +import { DocPage } from '../../_components/DocPage' +import { CodeBlock } from '../../_components/CodeBlock' + +export default function BaseSelectPage() { + const [value, setValue] = useState('') + + return ( + <DocPage> + <DocHeader + title="BaseSelect" + description="Radix-based dropdown select with error and disabled states." + status="production" + /> + + <SectionDivider /> + + <PropsTable + rows={[ + { name: 'options', type: 'Array<{label, value}>', default: '(required)', required: true }, + { name: 'placeholder', type: 'string', default: "'Select...'" }, + { name: 'value', type: 'string', default: '(none)' }, + { name: 'onValueChange', type: '(value: string) => void', default: '(none)' }, + { name: 'disabled', type: 'boolean', default: 'false' }, + { name: 'error', type: 'boolean', default: 'false' }, + ]} + /> + + <DocSection title="Default"> + <DocSection.Content> + <BaseSelect + options={[ + { label: 'Option 1', value: '1' }, + { label: 'Option 2', value: '2' }, + { label: 'Option 3', value: '3' }, + ]} + placeholder="Select an option" + value={value} + onValueChange={setValue} + /> + </DocSection.Content> + <DocSection.Code> + <CodeBlock label="Import" code={`import BaseSelect from '@/components/0_Bruddle/BaseSelect'`} /> + <CodeBlock + label="Basic Usage" + code={`<BaseSelect + options={[ + { label: 'Option 1', value: '1' }, + { label: 'Option 2', value: '2' }, + { label: 'Option 3', value: '3' }, + ]} + value={value} + onValueChange={setValue} +/>`} + /> + </DocSection.Code> + </DocSection> + + <DocSection title="States"> + <DocSection.Content> + <div className="flex gap-2"> + <BaseSelect options={[{ label: 'Disabled', value: 'd' }]} placeholder="disabled" disabled /> + <BaseSelect options={[{ label: 'Error', value: 'e' }]} placeholder="error" error /> + </div> + </DocSection.Content> + <DocSection.Code> + <CodeBlock + label="States" + code={`<BaseSelect options={[...]} disabled /> +<BaseSelect options={[...]} error />`} + /> + </DocSection.Code> + </DocSection> + </DocPage> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/primitives/button/page.tsx b/src/app/(mobile-ui)/dev/ds/primitives/button/page.tsx new file mode 100644 index 000000000..7044164ec --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/primitives/button/page.tsx @@ -0,0 +1,342 @@ +'use client' + +import { Button } from '@/components/0_Bruddle/Button' +import { DocHeader } from '../../_components/DocHeader' +import { DocSection } from '../../_components/DocSection' +import { WhenToUse } from '../../_components/WhenToUse' +import { DoDont } from '../../_components/DoDont' +import { SectionDivider } from '../../_components/SectionDivider' +import { Playground } from '../../_components/Playground' +import { PropsTable } from '../../_components/PropsTable' +import { DesignNote } from '../../_components/DesignNote' +import { StatusTag } from '../../_components/StatusTag' +import { DocPage } from '../../_components/DocPage' +import { CodeBlock } from '../../_components/CodeBlock' + +export default function ButtonPage() { + return ( + <DocPage> + <DocHeader + title="Button" + description="Primary interaction component. Supports variants, sizes, shadows, icons, loading, and long-press." + status="production" + usages="120+ usages" + /> + + <WhenToUse + use={[ + 'Primary and secondary CTAs in flows', + 'Actions that submit, confirm, or navigate forward', + 'Icon + label combinations for contextual actions (share, copy)', + ]} + dontUse={[ + 'Navigation links — use Next.js Link instead', + 'Toggle states — use Checkbox or Switch', + 'Inline text actions — use underlined text links', + ]} + /> + + <DoDont + doExample={ + <Button variant="purple" shadowSize="4" className="w-full"> + Continue + </Button> + } + doLabel="Default height (no size prop) for primary CTAs" + dontExample={ + <Button variant="purple" size="large" className="w-full"> + Continue + </Button> + } + dontLabel='size="large" is actually shorter (h-10 vs h-13)' + /> + + <SectionDivider /> + + <DocSection title="Interactive Playground"> + <Playground + name="Button" + importPath={`import { Button } from '@/components/0_Bruddle/Button'`} + defaults={{ variant: 'purple', children: 'Continue', shadowSize: '4' }} + controls={[ + { + type: 'select', + prop: 'variant', + label: 'variant', + options: [ + 'purple', + 'stroke', + 'primary-soft', + 'transparent', + 'dark', + 'transparent-dark', + 'transparent-light', + ], + }, + { + type: 'select', + prop: 'size', + label: 'size', + options: ['small', 'medium', 'large'], + }, + { + type: 'select', + prop: 'shadowSize', + label: 'shadowSize', + options: ['3', '4', '6', '8'], + }, + { + type: 'select', + prop: 'icon', + label: 'icon', + options: ['share', 'copy', 'check', 'arrow-up-right', 'plus', 'download'], + }, + { type: 'boolean', prop: 'disabled', label: 'disabled' }, + { type: 'boolean', prop: 'loading', label: 'loading' }, + { type: 'text', prop: 'children', label: 'label', placeholder: 'Button text' }, + ]} + render={(props) => { + const { children, ...rest } = props + return ( + <Button {...rest} className="w-full max-w-xs"> + {children || 'Button'} + </Button> + ) + }} + codeTemplate={(props) => { + const parts = ['<Button'] + if (props.variant && props.variant !== 'purple') parts.push(`variant="${props.variant}"`) + if (props.size) parts.push(`size="${props.size}"`) + if (props.shadowSize) parts.push(`shadowSize="${props.shadowSize}"`) + if (props.icon) parts.push(`icon="${props.icon}"`) + if (props.disabled) parts.push('disabled') + if (props.loading) parts.push('loading') + parts.push(`>${props.children || 'Button'}</Button>`) + return parts.join(' ') + }} + /> + </DocSection> + + <SectionDivider /> + + <DocSection title="Variants" description="Production variants ordered by usage count."> + <DocSection.Content> + <div className="space-y-4"> + {( + [ + ['purple', '59 usages', 'production'], + ['stroke', '27 usages', 'production'], + ['primary-soft', '18 usages', 'production'], + ['transparent', '12 usages', 'production'], + ['dark', '2 usages', 'limited'], + ['transparent-dark', '3 usages', 'limited'], + ] as const + ).map(([variant, count, status]) => ( + <div key={variant}> + <div className="mb-2 flex items-center gap-2"> + <span className="text-sm font-bold">{variant}</span> + <span className="text-xs text-grey-1">{count}</span> + <StatusTag status={status} /> + </div> + <Button variant={variant}>{variant}</Button> + </div> + ))} + <div> + <div className="mb-2 flex items-center gap-2"> + <span className="text-sm font-bold">transparent-light</span> + <span className="text-xs text-grey-1">2 usages</span> + <StatusTag status="limited" /> + </div> + <div className="rounded-sm bg-n-1 p-3"> + <Button variant="transparent-light">transparent-light</Button> + </div> + </div> + </div> + </DocSection.Content> + <DocSection.Code> + <CodeBlock + label="Variants" + code={`<Button variant="purple">Primary</Button> +<Button variant="stroke">Stroke</Button> +<Button variant="primary-soft">Soft</Button> +<Button variant="transparent">Transparent</Button>`} + /> + </DocSection.Code> + </DocSection> + + <DocSection title="Sizes"> + <DocSection.Content> + <div className="flex flex-wrap items-end gap-4"> + <div className="text-center"> + <Button variant="stroke">default</Button> + <p className="mt-2 text-xs text-grey-1">h-13 (52px)</p> + </div> + <div className="text-center"> + <Button variant="stroke" size="small"> + small + </Button> + <p className="mt-2 text-xs text-grey-1">h-8 · 29 usages</p> + </div> + <div className="text-center"> + <Button variant="stroke" size="medium"> + medium + </Button> + <p className="mt-2 text-xs text-grey-1">h-9 · 10 usages</p> + </div> + <div className="text-center"> + <Button variant="stroke" size="large"> + large + </Button> + <p className="mt-2 text-xs text-grey-1">h-10 · 5 usages</p> + </div> + </div> + </DocSection.Content> + <DocSection.Code> + <CodeBlock + label="Sizes" + code={`{/* Default: h-13 (tallest) */} +<Button>Default</Button> + +{/* Named sizes are SHORTER */} +<Button size="small">Small (h-8)</Button> +<Button size="medium">Medium (h-9)</Button> +<Button size="large">Large (h-10)</Button>`} + /> + </DocSection.Code> + </DocSection> + + <SectionDivider /> + + <DocSection title="Props"> + <PropsTable + rows={[ + { name: 'variant', type: 'ButtonVariant', default: "'purple'", description: 'Visual style' }, + { + name: 'size', + type: "'small' | 'medium' | 'large'", + default: '(none = h-13)', + description: 'Height override. Default is tallest.', + }, + { name: 'shape', type: "'default' | 'square'", default: "'default'" }, + { + name: 'shadowSize', + type: "'3' | '4' | '6' | '8'", + default: '(none)', + description: "'4' is standard (160+ usages)", + }, + { name: 'shadowType', type: "'primary' | 'secondary'", default: "'primary'" }, + { + name: 'loading', + type: 'boolean', + default: 'false', + description: 'Shows spinner, hides icon', + }, + { name: 'icon', type: 'IconName | ReactNode', default: '(none)' }, + { name: 'iconPosition', type: "'left' | 'right'", default: "'left'" }, + { name: 'iconSize', type: 'number', default: '(auto)' }, + { + name: 'longPress', + type: '{ duration, onLongPress, ... }', + default: '(none)', + description: 'Hold-to-confirm with progress bar', + }, + { name: 'disableHaptics', type: 'boolean', default: 'false' }, + ]} + /> + </DocSection> + + <SectionDivider /> + + <DocSection title="Design Rules"> + <div className="space-y-4"> + <DesignNote type="warning"> + size="large" is h-10 — SHORTER than default h-13. Default is the tallest button. + Primary CTAs should use NO size prop. + </DesignNote> + <DesignNote type="info"> + Primary CTA pattern: variant="purple" shadowSize="4" + className="w-full" — no size prop. + </DesignNote> + </div> + </DocSection> + + <DocSection title="Canonical Patterns"> + <DocSection.Content> + <div className="space-y-6"> + <div> + <p className="text-sm font-bold">Primary CTA (most common)</p> + <Button variant="purple" shadowSize="4" className="mt-2 w-full"> + Continue + </Button> + </div> + <div> + <p className="text-sm font-bold">Secondary CTA</p> + <Button variant="stroke" className="mt-2 w-full"> + Go Back + </Button> + </div> + <div> + <p className="text-sm font-bold">With icon</p> + <div className="mt-2 flex flex-wrap gap-2"> + <Button variant="purple" icon="share"> + Share + </Button> + <Button variant="stroke" icon="copy"> + Copy + </Button> + </div> + </div> + <div> + <p className="text-sm font-bold">States</p> + <div className="mt-2 flex flex-wrap gap-2"> + <Button variant="purple" disabled> + Disabled + </Button> + <Button variant="purple" loading> + Loading + </Button> + </div> + </div> + </div> + </DocSection.Content> + <DocSection.Code> + <CodeBlock label="Import" code={`import { Button } from '@/components/0_Bruddle/Button'`} /> + <CodeBlock + label="Primary CTA" + code={`<Button variant="purple" shadowSize="4" className="w-full"> + Continue +</Button>`} + /> + <CodeBlock + label="Secondary CTA" + code={`<Button variant="stroke" className="w-full"> + Go Back +</Button>`} + /> + <CodeBlock + label="With icon" + code={`<Button variant="purple" icon="share"> + Share +</Button>`} + /> + <CodeBlock + label="Loading & Disabled" + code={`<Button loading>Loading...</Button> +<Button disabled>Disabled</Button>`} + /> + <CodeBlock + label="Long Press" + code={`<Button + longPress={{ + duration: 2000, + onLongPress: () => handleConfirm(), + }} +> + Hold to confirm +</Button>`} + /> + </DocSection.Code> + </DocSection> + </DocPage> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/primitives/card/page.tsx b/src/app/(mobile-ui)/dev/ds/primitives/card/page.tsx new file mode 100644 index 000000000..0676a85ec --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/primitives/card/page.tsx @@ -0,0 +1,111 @@ +'use client' + +import { Card } from '@/components/0_Bruddle/Card' +import { Playground } from '../../_components/Playground' +import { PropsTable } from '../../_components/PropsTable' +import { DocHeader } from '../../_components/DocHeader' +import { DocSection } from '../../_components/DocSection' +import { SectionDivider } from '../../_components/SectionDivider' +import { DocPage } from '../../_components/DocPage' +import { CodeBlock } from '../../_components/CodeBlock' + +export default function CardPage() { + return ( + <DocPage> + <DocHeader + title="Card" + description="Standalone container with optional shadow. Compound component with Header, Title, Description, Content sub-components." + status="production" + /> + + <Playground + name="Card" + importPath={`import { Card } from '@/components/0_Bruddle/Card'`} + defaults={{ shadowSize: '4' }} + controls={[ + { type: 'select', prop: 'shadowSize', label: 'shadowSize', options: ['4', '6', '8'] }, + { type: 'select', prop: 'color', label: 'color', options: ['primary', 'secondary'] }, + ]} + render={(props) => ( + <Card {...props} className="w-full max-w-xs p-4"> + <Card.Header> + <Card.Title>Card Title</Card.Title> + <Card.Description>A description of the card content</Card.Description> + </Card.Header> + <Card.Content> + <p className="text-sm">Body content goes here</p> + </Card.Content> + </Card> + )} + codeTemplate={(props) => { + const parts = ['<Card'] + if (props.shadowSize) parts.push(`shadowSize="${props.shadowSize}"`) + if (props.color && props.color !== 'primary') parts.push(`color="${props.color}"`) + parts.push('className="p-4">') + return ( + parts.join(' ') + + '\n <Card.Header>\n <Card.Title>Title</Card.Title>\n <Card.Description>Description</Card.Description>\n </Card.Header>\n <Card.Content>Content</Card.Content>\n</Card>' + ) + }} + /> + + <SectionDivider /> + + <PropsTable + rows={[ + { name: 'shadowSize', type: "'4' | '6' | '8'", default: '(none)' }, + { name: 'color', type: "'primary' | 'secondary'", default: "'primary'" }, + { name: 'className', type: 'string', default: '(none)' }, + ]} + /> + + <DocSection title="Shadow Variants"> + <DocSection.Content> + <div className="space-y-3"> + <Card className="p-4"> + <p className="text-sm">No shadow</p> + </Card> + <Card shadowSize="4" className="p-4"> + <p className="text-sm">shadowSize="4"</p> + </Card> + <Card shadowSize="6" className="p-4"> + <p className="text-sm">shadowSize="6"</p> + </Card> + <Card shadowSize="8" className="p-4"> + <p className="text-sm">shadowSize="8"</p> + </Card> + </div> + </DocSection.Content> + <DocSection.Code> + <CodeBlock label="Import" code={`import { Card } from '@/components/0_Bruddle/Card'`} /> + </DocSection.Code> + </DocSection> + + <DocSection title="With Sub-components"> + <DocSection.Content> + <Card shadowSize="4" className="p-4"> + <Card.Header> + <Card.Title>Card Title</Card.Title> + <Card.Description>description text</Card.Description> + </Card.Header> + <Card.Content> + <p className="text-sm">body content</p> + </Card.Content> + </Card> + </DocSection.Content> + <DocSection.Code> + <CodeBlock + label="Sub-components Example" + code={`<Card shadowSize="4" className="p-4"> + <Card.Header> + <Card.Title>Title</Card.Title> + <Card.Description>Description</Card.Description> + </Card.Header> + <Card.Content>Content</Card.Content> +</Card>`} + /> + </DocSection.Code> + </DocSection> + </DocPage> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/primitives/checkbox/page.tsx b/src/app/(mobile-ui)/dev/ds/primitives/checkbox/page.tsx new file mode 100644 index 000000000..07ca12c08 --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/primitives/checkbox/page.tsx @@ -0,0 +1,57 @@ +'use client' + +import { useState } from 'react' +import Checkbox from '@/components/0_Bruddle/Checkbox' +import { PropsTable } from '../../_components/PropsTable' +import { DocHeader } from '../../_components/DocHeader' +import { DocSection } from '../../_components/DocSection' +import { SectionDivider } from '../../_components/SectionDivider' +import { DocPage } from '../../_components/DocPage' +import { CodeBlock } from '../../_components/CodeBlock' + +export default function CheckboxPage() { + const [checked, setChecked] = useState(false) + + return ( + <DocPage> + <DocHeader title="Checkbox" description="Simple checkbox with optional label." status="production" /> + + <SectionDivider /> + + <PropsTable + rows={[ + { name: 'value', type: 'boolean', default: '(required)', required: true }, + { name: 'onChange', type: '(e: ChangeEvent) => void', default: '(required)', required: true }, + { name: 'label', type: 'string', default: '(none)' }, + ]} + /> + + <DocSection title="Examples"> + <DocSection.Content> + <Checkbox + label="I agree to the terms" + value={checked} + onChange={(e) => setChecked(e.target.checked)} + /> + + <div> + <Checkbox value={!checked} onChange={() => {}} /> + <p className="text-xs text-grey-1">Without label</p> + </div> + </DocSection.Content> + <DocSection.Code> + <CodeBlock label="Import" code={`import Checkbox from '@/components/0_Bruddle/Checkbox'`} /> + <CodeBlock + label="With Label" + code={`<Checkbox + label="I agree to the terms" + value={checked} + onChange={(e) => setChecked(e.target.checked)} +/>`} + /> + <CodeBlock label="Without Label" code={`<Checkbox value={checked} onChange={() => {}} />`} /> + </DocSection.Code> + </DocSection> + </DocPage> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/primitives/divider/page.tsx b/src/app/(mobile-ui)/dev/ds/primitives/divider/page.tsx new file mode 100644 index 000000000..fd1c7b495 --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/primitives/divider/page.tsx @@ -0,0 +1,47 @@ +'use client' + +import Divider from '@/components/0_Bruddle/Divider' +import { PropsTable } from '../../_components/PropsTable' +import { DocHeader } from '../../_components/DocHeader' +import { DocSection } from '../../_components/DocSection' +import { SectionDivider } from '../../_components/SectionDivider' +import { DocPage } from '../../_components/DocPage' +import { CodeBlock } from '../../_components/CodeBlock' + +export default function DividerPage() { + return ( + <DocPage> + <DocHeader title="Divider" description="Horizontal divider with optional text label." status="production" /> + + <SectionDivider /> + + <PropsTable + rows={[ + { name: 'text', type: 'string', default: '(none)', description: 'Center text label' }, + { name: 'dividerClassname', type: 'string', default: '(none)' }, + { name: 'textClassname', type: 'string', default: '(none)' }, + ]} + /> + + <DocSection title="Examples"> + <DocSection.Content> + <div className="space-y-6"> + <div> + <p className="mb-2 text-sm text-grey-1">Default</p> + <Divider /> + </div> + <div> + <p className="mb-2 text-sm text-grey-1">With text</p> + <Divider text="or" /> + </div> + </div> + </DocSection.Content> + <DocSection.Code> + <CodeBlock label="Import" code={`import Divider from '@/components/0_Bruddle/Divider'`} /> + <CodeBlock label="Default" code={`<Divider />`} /> + <CodeBlock label="With Text" code={`<Divider text="or" />`} /> + </DocSection.Code> + </DocSection> + </DocPage> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/primitives/page-container/page.tsx b/src/app/(mobile-ui)/dev/ds/primitives/page-container/page.tsx new file mode 100644 index 000000000..669fe696d --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/primitives/page-container/page.tsx @@ -0,0 +1,52 @@ +'use client' + +import { PropsTable } from '../../_components/PropsTable' +import { DocHeader } from '../../_components/DocHeader' +import { DocSection } from '../../_components/DocSection' +import { SectionDivider } from '../../_components/SectionDivider' +import { DocPage } from '../../_components/DocPage' +import { CodeBlock } from '../../_components/CodeBlock' + +export default function PageContainerPage() { + return ( + <DocPage> + <DocHeader + title="PageContainer" + description="Responsive page wrapper with max-width centering. On desktop, applies left padding for sidebar offset." + status="production" + /> + + <SectionDivider /> + + <PropsTable rows={[{ name: 'alignItems', type: "'start' | 'center'", default: "'start'" }]} /> + + <DocSection title="Usage"> + <DocSection.Content> + <p className="text-sm text-grey-1"> + Wraps mobile screens with responsive width constraints. Children inherit full width via the{' '} + <code className="font-mono">*:w-full</code> selector. On desktop (md+), content is offset with{' '} + <code className="font-mono">md:pl-24</code> and capped at{' '} + <code className="font-mono">md:*:max-w-xl</code>. + </p> + </DocSection.Content> + <DocSection.Code> + <CodeBlock + label="Import" + code={`import PageContainer from '@/components/0_Bruddle/PageContainer'`} + /> + <CodeBlock + label="Usage" + code={`<PageContainer> + <div className="flex min-h-[inherit] flex-col gap-8"> + <NavHeader title="Title" /> + <div className="my-auto flex flex-col gap-6"> + {/* content */} + </div> + </div> +</PageContainer>`} + /> + </DocSection.Code> + </DocSection> + </DocPage> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/primitives/page.tsx b/src/app/(mobile-ui)/dev/ds/primitives/page.tsx new file mode 100644 index 000000000..224b1c9c3 --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/primitives/page.tsx @@ -0,0 +1,89 @@ +import { CatalogCard, CatalogGrid } from '../_components/CatalogCard' +import { DocPage } from '../_components/DocPage' + +export default function PrimitivesPage() { + return ( + <DocPage> + <div> + <h1 className="text-h3">Primitives</h1> + <p className="mt-1 text-sm text-grey-1"> + Bruddle base components. The lowest-level building blocks of the UI. + </p> + </div> + + <CatalogGrid> + <CatalogCard + title="Button" + description="Primary interaction component. 7 variants, 3 sizes, shadow options, long-press support" + href="/dev/ds/primitives/button" + icon="switch" + status="production" + quality={4} + usages={120} + /> + <CatalogCard + title="Card" + description="Container with optional shadow. Compound component with Header, Title, Description, Content" + href="/dev/ds/primitives/card" + icon="docs" + status="production" + quality={4} + /> + <CatalogCard + title="BaseInput" + description="Text input with sm/md/lg variants and optional right content slot" + href="/dev/ds/primitives/base-input" + icon="clip" + status="production" + quality={3} + /> + <CatalogCard + title="BaseSelect" + description="Radix-based dropdown select with error and disabled states" + href="/dev/ds/primitives/base-select" + icon="clip" + status="production" + quality={4} + /> + <CatalogCard + title="Checkbox" + description="Simple checkbox with optional label" + href="/dev/ds/primitives/checkbox" + icon="check" + status="production" + quality={3} + /> + <CatalogCard + title="Toast" + description="Context-based toast notification system. 4 types, auto-dismiss" + href="/dev/ds/primitives/toast" + icon="bell" + status="production" + quality={5} + /> + <CatalogCard + title="Divider" + description="Horizontal divider with optional text label" + href="/dev/ds/primitives/divider" + icon="minus-circle" + status="production" + /> + <CatalogCard + title="Title" + description="Knerd display font with filled/outline double-render effect" + href="/dev/ds/primitives/title" + icon="docs" + status="production" + quality={3} + /> + <CatalogCard + title="PageContainer" + description="Responsive page wrapper with max-width and alignment options" + href="/dev/ds/primitives/page-container" + icon="docs" + status="production" + /> + </CatalogGrid> + </DocPage> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/primitives/title/page.tsx b/src/app/(mobile-ui)/dev/ds/primitives/title/page.tsx new file mode 100644 index 000000000..c891baf94 --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/primitives/title/page.tsx @@ -0,0 +1,56 @@ +'use client' + +import Title from '@/components/0_Bruddle/Title' +import { PropsTable } from '../../_components/PropsTable' +import { DocHeader } from '../../_components/DocHeader' +import { DocSection } from '../../_components/DocSection' +import { SectionDivider } from '../../_components/SectionDivider' +import { DocPage } from '../../_components/DocPage' +import { CodeBlock } from '../../_components/CodeBlock' + +export default function TitlePage() { + return ( + <DocPage> + <DocHeader + title="Title" + description="Knerd display font with filled + outline double-render for drop shadow effect." + status="production" + /> + + <SectionDivider /> + + <PropsTable + rows={[ + { name: 'text', type: 'string', default: '(required)', required: true }, + { + name: 'offset', + type: 'boolean', + default: 'true', + description: 'Horizontal offset for shadow effect', + }, + ]} + /> + + <DocSection title="Examples"> + <DocSection.Content> + <div className="rounded-sm bg-purple-1 p-4"> + <Title text="PEANUT" /> + </div> + + <div className="rounded-sm bg-purple-1 p-4"> + <Title text="NO OFFSET" offset={false} /> + </div> + + <div className="rounded-sm bg-yellow-1 p-4"> + <Title text="ON YELLOW" /> + </div> + </DocSection.Content> + <DocSection.Code> + <CodeBlock label="Import" code={`import Title from '@/components/0_Bruddle/Title'`} /> + <CodeBlock label="Default" code={`<Title text="PEANUT" />`} /> + <CodeBlock label="Without Offset" code={`<Title text="NO OFFSET" offset={false} />`} /> + </DocSection.Code> + </DocSection> + </DocPage> + ) +} diff --git a/src/app/(mobile-ui)/dev/ds/primitives/toast/page.tsx b/src/app/(mobile-ui)/dev/ds/primitives/toast/page.tsx new file mode 100644 index 000000000..dc280dc89 --- /dev/null +++ b/src/app/(mobile-ui)/dev/ds/primitives/toast/page.tsx @@ -0,0 +1,75 @@ +'use client' + +import { Button } from '@/components/0_Bruddle/Button' +import { useToast } from '@/components/0_Bruddle/Toast' +import { PropsTable } from '../../_components/PropsTable' +import { DocHeader } from '../../_components/DocHeader' +import { DocSection } from '../../_components/DocSection' +import { SectionDivider } from '../../_components/SectionDivider' +import { DocPage } from '../../_components/DocPage' +import { CodeBlock } from '../../_components/CodeBlock' + +export default function ToastPage() { + const { success, error, info, warning } = useToast() + + return ( + <DocPage> + <DocHeader + title="Toast" + description="Context-based toast notification system. 4 types, auto-dismiss, clean API." + status="production" + /> + + <DocSection title="Interactive Demo" description="Tap each button to trigger a toast notification."> + <DocSection.Content> + <div className="flex flex-wrap gap-2"> + <Button variant="stroke" size="small" onClick={() => success('Operation successful!')}> + success + </Button> + <Button variant="stroke" size="small" onClick={() => error('Something went wrong')}> + error + </Button> + <Button variant="stroke" size="small" onClick={() => info('Did you know?')}> + info + </Button> + <Button variant="stroke" size="small" onClick={() => warning('Check this out')}> + warning + </Button> + </div> + </DocSection.Content> + <DocSection.Code> + <CodeBlock label="Import" code={`import { useToast } from '@/components/0_Bruddle/Toast'`} /> + <CodeBlock label="Hook Usage" code={`const { success, error, info, warning } = useToast()`} /> + <CodeBlock + label="Trigger Toasts" + code={`success('Done!') +error('Failed!') +info('FYI...') +warning('Be careful!')`} + /> + </DocSection.Code> + </DocSection> + + <SectionDivider /> + + <PropsTable + rows={[ + { + name: 'message', + type: 'string', + default: '(required)', + required: true, + description: 'Toast message text', + }, + { + name: 'type', + type: "'success' | 'error' | 'info' | 'warning'", + default: '(method)', + description: 'Determined by which method you call', + }, + { name: 'duration', type: 'number', default: '3000', description: 'Auto-dismiss duration in ms' }, + ]} + /> + </DocPage> + ) +} diff --git a/src/app/(mobile-ui)/dev/layout.tsx b/src/app/(mobile-ui)/dev/layout.tsx index 087150b36..ee6026ff9 100644 --- a/src/app/(mobile-ui)/dev/layout.tsx +++ b/src/app/(mobile-ui)/dev/layout.tsx @@ -2,17 +2,20 @@ import { usePathname } from 'next/navigation' import { notFound } from 'next/navigation' -import { IS_DEV } from '@/constants/general.consts' +import { BASE_URL } from '@/constants/general.consts' -// Routes that are allowed in production (protected by API key / user check) +// Routes allowed on peanut.me (production). All /dev routes are available elsewhere +// (localhost, staging, Vercel preview deploys). const PRODUCTION_ALLOWED_ROUTES = ['/dev/full-graph', '/dev/payment-graph'] +const IS_PROD_DOMAIN = BASE_URL === 'https://peanut.me' + export default function DevLayout({ children }: { children: React.ReactNode }) { const pathname = usePathname() - // In production, only allow specific routes (full-graph, payment-graph) - // Other dev tools (leaderboard, shake-test, dev index) are dev-only - if (!IS_DEV) { + // On peanut.me, only allow specific routes (full-graph, payment-graph) + // On staging, Vercel previews, and localhost, all /dev routes are accessible + if (IS_PROD_DOMAIN) { const isAllowedInProd = PRODUCTION_ALLOWED_ROUTES.some((route) => pathname?.startsWith(route)) if (!isAllowedInProd) { notFound() diff --git a/src/app/(mobile-ui)/dev/page.tsx b/src/app/(mobile-ui)/dev/page.tsx index 90088522b..e2f74bb67 100644 --- a/src/app/(mobile-ui)/dev/page.tsx +++ b/src/app/(mobile-ui)/dev/page.tsx @@ -3,86 +3,80 @@ import Card from '@/components/Global/Card' import NavHeader from '@/components/Global/NavHeader' import Link from 'next/link' -import { Icon } from '@/components/Global/Icons/Icon' +import { Icon, type IconName } from '@/components/Global/Icons/Icon' export default function DevToolsPage() { - const tools = [ + const tools: { name: string; description: string; path: string; icon: IconName }[] = [ { name: 'Points Leaderboard', description: 'Real-time leaderboard with customizable time filters for event competitions', path: '/dev/leaderboard', - icon: '🏆', - status: 'active', + icon: 'trophy', }, { name: 'Full Graph', description: 'Interactive force-directed graph visualization of all users, invites, and P2P activity (admin only)', path: '/dev/full-graph', - icon: '🕸️', - status: 'active', + icon: 'globe-lock', }, { name: 'Payment Graph', description: 'P2P payment flow visualization', path: '/dev/payment-graph', - icon: '💸', - status: 'active', + icon: 'dollar', }, { - name: 'Shake Test', - description: 'Test progressive shake animation and confetti for perk claiming', - path: '/dev/shake-test', - icon: '🧪', - status: 'active', + name: 'Design System', + description: 'Foundations, primitives, patterns, and interactive playground', + path: '/dev/ds', + icon: 'docs', }, - // Add more dev tools here in the future ] return ( - <div className="flex min-h-[inherit] flex-col gap-8"> - <NavHeader title="🛠️ Dev Tools" /> + <div className="flex w-full flex-col gap-6"> + <div className="px-4 pt-4"> + <NavHeader title="Dev Tools" /> + </div> - <div className="flex h-full flex-col space-y-6 px-4 pb-8"> - <Card className="p-6"> - <h1 className="mb-2 text-2xl font-bold">Developer Tools</h1> - <p className="text-sm text-gray-600"> - Internal testing tools and components. Publicly accessible for multi-device testing. - </p> - </Card> + <div className="flex h-full flex-col space-y-4 px-4 pb-8"> + <p className="text-sm text-grey-1"> + Internal testing tools and components. Publicly accessible for multi-device testing. + </p> - <div className="space-y-4"> + <div className="space-y-2"> {tools.map((tool) => ( <Link key={tool.path} href={tool.path}> - <Card className="cursor-pointer p-4 transition-all hover:shadow-lg"> + <Card className="cursor-pointer p-4"> <div className="flex items-center justify-between"> - <div className="flex items-center gap-4"> - <div className="text-3xl">{tool.icon}</div> + <div className="flex items-center gap-3"> + <div className="flex size-10 items-center justify-center rounded-sm border border-n-1 bg-primary-3"> + <Icon name={tool.icon} size={20} /> + </div> <div> - <h3 className="font-bold">{tool.name}</h3> - <p className="text-sm text-gray-600">{tool.description}</p> - {tool.status === 'active' && ( - <span className="mt-1 inline-block rounded-full bg-green-100 px-2 py-0.5 text-xs font-medium text-green-800"> - Active - </span> - )} + <h3 className="text-sm font-bold">{tool.name}</h3> + <p className="text-xs text-grey-1">{tool.description}</p> </div> </div> - <Icon name="arrow-up-right" size={20} className="text-gray-400" /> + <Icon name="arrow-up-right" size={16} className="text-grey-1" /> </div> </Card> </Link> ))} </div> - <Card className="space-y-2 bg-blue-50 p-4"> - <h3 className="font-bold text-blue-900">ℹ️ Info</h3> - <ul className="space-y-1 text-sm text-blue-800"> - <li>• These tools are only available in development mode</li> - <li>• Perfect for testing on multiple devices</li> - <li>• Share the URL with team members for testing</li> + <div className="rounded-sm border border-n-1 bg-primary-3/20 p-3"> + <div className="mb-1 flex items-center gap-2"> + <Icon name="info" size={14} /> + <span className="text-xs font-bold">Info</span> + </div> + <ul className="space-y-0.5 text-xs text-grey-1"> + <li>These tools are only available in development mode</li> + <li>Perfect for testing on multiple devices</li> + <li>Share the URL with team members for testing</li> </ul> - </Card> + </div> </div> </div> ) diff --git a/src/app/(mobile-ui)/dev/perk-success-test/page.tsx b/src/app/(mobile-ui)/dev/perk-success-test/page.tsx new file mode 100644 index 000000000..0df4e22a9 --- /dev/null +++ b/src/app/(mobile-ui)/dev/perk-success-test/page.tsx @@ -0,0 +1,190 @@ +'use client' + +import { useState, useEffect } from 'react' +import { Card } from '@/components/0_Bruddle/Card' +import { Button } from '@/components/0_Bruddle/Button' +import NavHeader from '@/components/Global/NavHeader' +import GlobalCard from '@/components/Global/Card' +import { Icon } from '@/components/Global/Icons/Icon' +import { SoundPlayer } from '@/components/Global/SoundPlayer' +import { useHaptic } from 'use-haptic' +import { shootDoubleStarConfetti } from '@/utils/confetti' +import { extractInviteeName } from '@/utils/general.utils' + +type MockPerk = { + id: string + name: string + amountUsd: number + reason: string +} + +const MOCK_PERKS: MockPerk[] = [ + { + id: 'mock-1', + name: 'Card Pioneer Inviter Reward', + amountUsd: 5, + reason: 'Alice became a Card Pioneer', + }, + { + id: 'mock-2', + name: 'Card Pioneer Inviter Reward', + amountUsd: 5, + reason: 'Bob became a Card Pioneer', + }, + { + id: 'mock-3', + name: 'Card Pioneer Inviter Reward', + amountUsd: 5, + reason: 'Charlie became a Card Pioneer', + }, + { + id: 'mock-4', + name: 'Card Pioneer Inviter Reward', + amountUsd: 10, + reason: 'Diana became a Card Pioneer (bonus!)', + }, + { + id: 'mock-5', + name: 'Card Pioneer Inviter Reward', + amountUsd: 5, + reason: 'Eve became a Card Pioneer', + }, +] + +export default function PerkSuccessTestPage() { + const [currentPerkIndex, setCurrentPerkIndex] = useState(0) + const [showSuccess, setShowSuccess] = useState(false) + const [canDismiss, setCanDismiss] = useState(false) + const [isExiting, setIsExiting] = useState(false) + const [playSound, setPlaySound] = useState(false) + const { triggerHaptic } = useHaptic() + + const currentPerk = MOCK_PERKS[currentPerkIndex] + + const handleShowSuccess = () => { + setShowSuccess(true) + setCanDismiss(false) + setIsExiting(false) + setPlaySound(true) + triggerHaptic() + shootDoubleStarConfetti({ origin: { x: 0.5, y: 0.4 } }) + + // Enable dismiss after 2 seconds + setTimeout(() => setCanDismiss(true), 2000) + } + + const handleDismiss = () => { + if (!canDismiss) return + + setIsExiting(true) + setTimeout(() => { + setShowSuccess(false) + setPlaySound(false) + // Move to next perk + setCurrentPerkIndex((prev) => (prev + 1) % MOCK_PERKS.length) + }, 400) + } + + const inviteeName = extractInviteeName(currentPerk.reason) + + return ( + <div className="flex min-h-[inherit] flex-col gap-4 pb-8"> + <NavHeader title="Perk Success Test" /> + + <div className="space-y-4 px-4"> + {/* Instructions */} + <Card className="bg-blue-50 p-4"> + <p className="text-sm font-bold text-blue-900">Test the perk claim success screen</p> + <ul className="mt-1 space-y-1 text-sm text-blue-800"> + <li>1. Click "Trigger Success" to show the success screen</li> + <li>2. Wait 2 seconds before you can dismiss (debounce)</li> + <li>3. Tap to dismiss and load next mock perk</li> + </ul> + </Card> + + {/* Current Perk Info */} + <Card className="p-4"> + <p className="text-sm font-bold"> + Current Mock Perk ({currentPerkIndex + 1}/{MOCK_PERKS.length}) + </p> + <p className="mt-1 text-xs text-grey-1">ID: {currentPerk.id}</p> + <p className="text-xs text-grey-1">Amount: ${currentPerk.amountUsd}</p> + <p className="text-xs text-grey-1">Reason: {currentPerk.reason}</p> + </Card> + + {/* Trigger Button */} + {!showSuccess && ( + <Button onClick={handleShowSuccess} shadowSize="4" className="w-full"> + Trigger Success + </Button> + )} + + {/* Success Screen Preview */} + {showSuccess && ( + <div className="rounded-lg border-2 border-dashed border-grey-1/30 p-4"> + <p className="mb-4 text-center text-xs font-bold text-grey-1"> + SUCCESS SCREEN PREVIEW (tap to dismiss when ready) + </p> + + <div + className={`flex flex-col items-center ${canDismiss ? 'cursor-pointer' : ''}`} + onClick={handleDismiss} + > + {playSound && <SoundPlayer sound="success" />} + + {/* Success card - full width, matches PaymentSuccessView */} + <GlobalCard + className={`flex w-full items-center gap-4 p-4 ${isExiting ? 'animate-gift-exit' : 'animate-gift-revealed'}`} + > + {/* Check icon */} + <div className="flex h-14 w-14 shrink-0 items-center justify-center rounded-full bg-success-3"> + <Icon name="check" size={28} className="text-white" /> + </div> + + {/* Text content */} + <div> + <p className="text-sm text-grey-1">You received</p> + <p className="text-3xl font-extrabold">+${currentPerk.amountUsd}</p> + <p className="mt-1 flex items-center gap-1 text-sm text-grey-1"> + <Icon name="invite-heart" size={14} /> + <span className="font-medium">{inviteeName}</span> + <span>joined Pioneers</span> + </p> + </div> + </GlobalCard> + + {/* Tap to continue - fades in when ready */} + <p + className={`mt-4 text-sm text-grey-1 transition-opacity duration-300 ${canDismiss ? 'opacity-100' : 'opacity-0'}`} + > + Tap to continue + </p> + </div> + </div> + )} + + {/* Quick Actions */} + <div className="flex gap-2"> + <Button + variant="stroke" + onClick={() => setCurrentPerkIndex((prev) => (prev + 1) % MOCK_PERKS.length)} + className="flex-1" + > + Next Perk + </Button> + <Button + variant="stroke" + onClick={() => { + setShowSuccess(false) + setPlaySound(false) + setCurrentPerkIndex(0) + }} + className="flex-1" + > + Reset + </Button> + </div> + </div> + </div> + ) +} diff --git a/src/app/(mobile-ui)/home/page.tsx b/src/app/(mobile-ui)/home/page.tsx index f3a542d54..e4ed39a98 100644 --- a/src/app/(mobile-ui)/home/page.tsx +++ b/src/app/(mobile-ui)/home/page.tsx @@ -27,12 +27,14 @@ import { useClaimBankFlow } from '@/context/ClaimBankFlowContext' import { useDeviceType, DeviceType } from '@/hooks/useGetDeviceType' import { useNotifications } from '@/hooks/useNotifications' import useKycStatus from '@/hooks/useKycStatus' +import { useCardPioneerInfo } from '@/hooks/useCardPioneerInfo' import HomeCarouselCTA from '@/components/Home/HomeCarouselCTA' import InvitesIcon from '@/components/Home/InvitesIcon' import NavigationArrow from '@/components/Global/NavigationArrow' import { updateUserById } from '@/app/actions/users' import { useHaptic } from 'use-haptic' import LazyLoadErrorBoundary from '@/components/Global/LazyLoadErrorBoundary' +import underMaintenanceConfig from '@/config/underMaintenance.config' // Lazy load heavy modal components (~20-30KB each) to reduce initial bundle size // Components are only loaded when user triggers them @@ -43,6 +45,7 @@ const NoMoreJailModal = lazy(() => import('@/components/Global/NoMoreJailModal') const EarlyUserModal = lazy(() => import('@/components/Global/EarlyUserModal')) const KycCompletedModal = lazy(() => import('@/components/Home/KycCompletedModal')) const IosPwaInstallModal = lazy(() => import('@/components/Global/IosPwaInstallModal')) +const CardPioneerModal = lazy(() => import('@/components/Card/CardPioneerModal')) const BALANCE_WARNING_THRESHOLD = parseInt(process.env.NEXT_PUBLIC_BALANCE_WARNING_THRESHOLD ?? '500') const BALANCE_WARNING_EXPIRY = parseInt(process.env.NEXT_PUBLIC_BALANCE_WARNING_EXPIRY ?? '1814400') // 21 days in seconds @@ -64,6 +67,11 @@ export default function Home() { const { isFetchingUser, fetchUser } = useAuth() const { isUserKycApproved } = useKycStatus() + const { + hasPurchased: hasCardPioneerPurchased, + isLoading: isCardInfoLoading, + error: cardInfoError, + } = useCardPioneerInfo() const username = user?.user.username const [showBalanceWarningModal, setShowBalanceWarningModal] = useState(false) @@ -71,6 +79,13 @@ export default function Home() { const [isPostSignupActionModalVisible, setIsPostSignupActionModalVisible] = useState(false) const [showKycModal, setShowKycModal] = useState(user?.user.showKycCompletedModal ?? false) + // Track if this is a fresh signup session - captured once on mount so it persists + // even after NoMoreJailModal clears the sessionStorage key + const [isPostSignupSession] = useState(() => { + if (typeof window === 'undefined') return false + return sessionStorage.getItem('showNoMoreJailModal') === 'true' + }) + // sync modal state with user data when it changes useEffect(() => { if (user?.user.showKycCompletedModal !== undefined) { @@ -260,6 +275,25 @@ export default function Home() { </Suspense> </LazyLoadErrorBoundary> + {/* Card Pioneer Modal - Show to all users who haven't purchased */} + {/* Eligibility check happens during the flow (geo screen), not here */} + {/* Only shows if no higher-priority modals are active and card info loaded successfully */} + {!underMaintenanceConfig.disableCardPioneers && + !isCardInfoLoading && + !cardInfoError && + !showBalanceWarningModal && + !showPermissionModal && + !showKycModal && + !isPostSignupActionModalVisible && + !user?.showEarlyUserModal && + !isPostSignupSession && ( + <LazyLoadErrorBoundary> + <Suspense fallback={null}> + <CardPioneerModal hasPurchased={hasCardPioneerPurchased ?? false} /> + </Suspense> + </LazyLoadErrorBoundary> + )} + {/* Referral Campaign Modal - DISABLED FOR NOW */} {/* <ReferralCampaignModal visible={showReferralCampaignModal} diff --git a/src/app/(mobile-ui)/layout.tsx b/src/app/(mobile-ui)/layout.tsx index 4b458be20..1ed28dcaf 100644 --- a/src/app/(mobile-ui)/layout.tsx +++ b/src/app/(mobile-ui)/layout.tsx @@ -5,6 +5,7 @@ import PeanutLoading from '@/components/Global/PeanutLoading' import TopNavbar from '@/components/Global/TopNavbar' import WalletNavigation from '@/components/Global/WalletNavigation' import OfflineScreen from '@/components/Global/OfflineScreen' +import BackendErrorScreen from '@/components/Global/BackendErrorScreen' import { ThemeProvider } from '@/config' import { useAuth } from '@/context/authContext' import classNames from 'classnames' @@ -18,7 +19,8 @@ import { useRouter } from 'next/navigation' import { Banner } from '@/components/Global/Banner' import { useSetupStore } from '@/redux/hooks' import ForceIOSPWAInstall from '@/components/ForceIOSPWAInstall' -import { PUBLIC_ROUTES_REGEX } from '@/constants/routes' +import { isPublicRoute } from '@/constants/routes' +import { IS_DEV } from '@/constants/general.consts' import { usePullToRefresh } from '@/hooks/usePullToRefresh' import { useNetworkStatus } from '@/hooks/useNetworkStatus' import { useAccountSetupRedirect } from '@/hooks/useAccountSetupRedirect' @@ -27,14 +29,16 @@ const Layout = ({ children }: { children: React.ReactNode }) => { const pathName = usePathname() // Allow access to public paths without authentication - const isPublicPath = PUBLIC_ROUTES_REGEX.test(pathName) + // Dev test pages (gift-test, shake-test) are only public in dev mode + const isPublicPath = isPublicRoute(pathName, IS_DEV) - const { isFetchingUser, user } = useAuth() + const { isFetchingUser, user, userFetchError } = useAuth() const [isReady, setIsReady] = useState(false) const isUserLoggedIn = !!user?.user.userId || false const isHome = pathName === '/home' const isHistory = pathName === '/history' const isSupport = pathName === '/support' + const isDev = pathName?.startsWith('/dev') ?? false const alignStart = isHome || isHistory || isSupport const router = useRouter() const { showIosPwaInstallScreen } = useSetupStore() @@ -99,6 +103,12 @@ const Layout = ({ children }: { children: React.ReactNode }) => { return <OfflineScreen /> } + // show backend error screen when user fetch fails after retries + // user can retry or force logout to clear stale state + if (userFetchError && !isFetchingUser && !isPublicPath) { + return <BackendErrorScreen /> + } + // For public paths, skip user loading and just show content when ready if (isPublicPath) { if (!isReady) { @@ -135,22 +145,26 @@ const Layout = ({ children }: { children: React.ReactNode }) => { <div className="flex w-full"> {/* Sidebar - Fixed on desktop */} - <div className="hidden md:block"> - <div className="fixed left-0 top-0 z-20 h-screen w-64"> - <WalletNavigation /> + {!isDev && ( + <div className="hidden md:block"> + <div className="fixed left-0 top-0 z-20 h-screen w-64"> + <WalletNavigation /> + </div> </div> - </div> + )} {/* Main content area */} <div className="flex w-full flex-1 flex-col"> {/* Banner component handles maintenance and feedback banners */} - <Banner /> + {!isDev && <Banner />} {/* Fixed top navbar */} - <div className="sticky top-0 z-10 w-full"> - <TopNavbar /> - </div> + {!isDev && ( + <div className="sticky top-0 z-10 w-full"> + <TopNavbar /> + </div> + )} {/* Scrollable content area */} <div @@ -160,7 +174,8 @@ const Layout = ({ children }: { children: React.ReactNode }) => { 'relative flex-1 overflow-y-auto bg-background p-6 pb-24 md:pb-6', !!isSupport && 'p-0 pb-20 md:p-6', !!isHome && 'p-0 md:p-6 md:pr-0', - isUserLoggedIn ? 'pb-24' : 'pb-4' + isUserLoggedIn ? 'pb-24' : 'pb-4', + isDev && 'p-0 pb-0' ) )} > @@ -170,7 +185,8 @@ const Layout = ({ children }: { children: React.ReactNode }) => { 'flex w-full items-center justify-center md:ml-auto md:w-[calc(100%-160px)]', alignStart && 'items-start', isSupport && 'h-full', - isUserLoggedIn ? 'min-h-[calc(100dvh-160px)]' : 'min-h-[calc(100dvh-64px)]' + isUserLoggedIn ? 'min-h-[calc(100dvh-160px)]' : 'min-h-[calc(100dvh-64px)]', + isDev && 'min-h-[100dvh] items-start justify-start md:ml-0 md:w-full' )} > {children} @@ -179,9 +195,11 @@ const Layout = ({ children }: { children: React.ReactNode }) => { </div> {/* Mobile navigation */} - <div className="fixed bottom-0 left-0 right-0 z-10 bg-background md:hidden"> - <WalletNavigation /> - </div> + {!isDev && ( + <div className="fixed bottom-0 left-0 right-0 z-10 bg-background md:hidden"> + <WalletNavigation /> + </div> + )} </div> </div> diff --git a/src/app/(mobile-ui)/points/invites/page.tsx b/src/app/(mobile-ui)/points/invites/page.tsx index 949777c86..3a543e76f 100644 --- a/src/app/(mobile-ui)/points/invites/page.tsx +++ b/src/app/(mobile-ui)/points/invites/page.tsx @@ -16,10 +16,17 @@ import Image from 'next/image' import EmptyState from '@/components/Global/EmptyStates/EmptyState' import { getInitialsFromName } from '@/utils/general.utils' import { type PointsInvite } from '@/services/services.types' +import { formatPoints } from '@/utils/format.utils' +import { useCountUp } from '@/hooks/useCountUp' +import { useInView } from 'framer-motion' +import { useRef } from 'react' +import InviteePointsBadge from '@/components/Points/InviteePointsBadge' const InvitesPage = () => { const router = useRouter() const { user } = useAuth() + const listRef = useRef(null) + const listInView = useInView(listRef, { once: true, margin: '-50px' }) const { data: invites, @@ -32,6 +39,17 @@ const InvitesPage = () => { enabled: !!user?.user.userId, }) + const totalPointsEarned = + invites?.invitees?.reduce((sum: number, invite: PointsInvite) => { + return sum + (invite.contributedPoints ?? 0) + }, 0) || 0 + + const animatedTotal = useCountUp(totalPointsEarned, { + storageKey: 'invites_total', + duration: 1.8, + enabled: !isLoading && !isError, + }) + if (isLoading) { return <PeanutLoading /> } @@ -45,12 +63,6 @@ const InvitesPage = () => { ) } - // Calculate total points earned (20% of each invitee's points) - const totalPointsEarned = - invites?.invitees?.reduce((sum: number, invite: PointsInvite) => { - return sum + Math.floor(invite.totalPoints * 0.2) - }, 0) || 0 - return ( <PageContainer className="flex flex-col"> <NavHeader title="Points" onPrev={() => router.back()} /> @@ -62,7 +74,7 @@ const InvitesPage = () => { <span className="flex items-center gap-2"> <Image src={STAR_STRAIGHT_ICON} alt="star" width={20} height={20} /> <span className="text-3xl font-extrabold text-black"> - {totalPointsEarned} {totalPointsEarned === 1 ? 'Point' : 'Points'} + {formatPoints(animatedTotal)} {totalPointsEarned === 1 ? 'Point' : 'Points'} </span> </span> </Card> @@ -70,12 +82,12 @@ const InvitesPage = () => { <h2 className="font-bold">People you invited</h2> {/* Full list */} - <div> + <div ref={listRef}> {invites?.invitees?.map((invite: PointsInvite, i: number) => { const username = invite.username const fullName = invite.fullName const isVerified = invite.kycStatus === 'approved' - const pointsEarned = Math.floor(invite.totalPoints * 0.2) + const pointsEarned = invite.contributedPoints ?? 0 // respect user's showFullName preference for avatar and display name const displayName = invite.showFullName && fullName ? fullName : username return ( @@ -103,9 +115,7 @@ const InvitesPage = () => { isVerified={isVerified} /> </div> - <p className="text-grey-1"> - +{pointsEarned} {pointsEarned === 1 ? 'pt' : 'pts'} - </p> + <InviteePointsBadge points={pointsEarned} inView={listInView} /> </div> </Card> ) diff --git a/src/app/(mobile-ui)/points/page.tsx b/src/app/(mobile-ui)/points/page.tsx index 6f6ec33ec..7690531a5 100644 --- a/src/app/(mobile-ui)/points/page.tsx +++ b/src/app/(mobile-ui)/points/page.tsx @@ -3,17 +3,15 @@ import PageContainer from '@/components/0_Bruddle/PageContainer' import Card from '@/components/Global/Card' import { getCardPosition } from '@/components/Global/Card/card.utils' -import CopyToClipboard from '@/components/Global/CopyToClipboard' import { Icon } from '@/components/Global/Icons/Icon' import NavHeader from '@/components/Global/NavHeader' import NavigationArrow from '@/components/Global/NavigationArrow' import PeanutLoading from '@/components/Global/PeanutLoading' -import ShareButton from '@/components/Global/ShareButton' import TransactionAvatarBadge from '@/components/TransactionDetails/TransactionAvatarBadge' import { VerifiedUserLabel } from '@/components/UserHeader' import { useAuth } from '@/context/authContext' import { invitesApi } from '@/services/invites' -import { generateInviteCodeLink, generateInvitesShareText, getInitialsFromName } from '@/utils/general.utils' +import { getInitialsFromName } from '@/utils/general.utils' import { useQuery } from '@tanstack/react-query' import { useRouter } from 'next/navigation' import { STAR_STRAIGHT_ICON, TIER_0_BADGE, TIER_1_BADGE, TIER_2_BADGE, TIER_3_BADGE } from '@/assets' @@ -21,13 +19,22 @@ import Image from 'next/image' import { pointsApi } from '@/services/points' import EmptyState from '@/components/Global/EmptyStates/EmptyState' import { type PointsInvite } from '@/services/services.types' -import { useEffect } from 'react' +import { useEffect, useRef, useState } from 'react' import InvitesGraph from '@/components/Global/InvitesGraph' -import { IS_DEV } from '@/constants/general.consts' +import { CashCard } from '@/components/Points/CashCard' +import InviteFriendsModal from '@/components/Global/InviteFriendsModal' +import { formatPoints, shortenPoints } from '@/utils/format.utils' +import { Button } from '@/components/0_Bruddle/Button' +import { useCountUp } from '@/hooks/useCountUp' +import { useInView } from 'framer-motion' +import InviteePointsBadge from '@/components/Points/InviteePointsBadge' const PointsPage = () => { const router = useRouter() const { user, fetchUser } = useAuth() + const [isInviteModalOpen, setIsInviteModalOpen] = useState(false) + const inviteesRef = useRef(null) + const inviteesInView = useInView(inviteesRef, { once: true, margin: '-50px' }) const getTierBadge = (tier: number) => { const badges = [TIER_0_BADGE, TIER_1_BADGE, TIER_2_BADGE, TIER_3_BADGE] @@ -55,18 +62,31 @@ const PointsPage = () => { enabled: !!user?.user.userId, }) - // In dev mode, show graph for all users. In production, only for Seedling badge holders. - const hasSeedlingBadge = user?.user?.badges?.some((badge) => badge.code === 'SEEDLING_DEVCONNECT_BA_2025') + // Referral graph is now available for all users const { data: myGraphResult } = useQuery({ queryKey: ['myInviteGraph', user?.user.userId], queryFn: () => pointsApi.getUserInvitesGraph(), - enabled: !!user?.user.userId && (IS_DEV || hasSeedlingBadge), + enabled: !!user?.user.userId, + }) + + // Cash status (comprehensive earnings tracking) + const { data: cashStatus } = useQuery({ + queryKey: ['cashStatus', user?.user.userId], + queryFn: () => pointsApi.getCashStatus(), + enabled: !!user?.user.userId, }) + const username = user?.user.username - const { inviteCode, inviteLink } = generateInviteCodeLink(username ?? '') + + // animated hero points — remembers last-seen value across visits + const animatedTotal = useCountUp(tierInfo?.data?.totalPoints ?? 0, { + storageKey: 'hero_total', + duration: 1.8, + enabled: !!tierInfo?.data, + }) useEffect(() => { - // Re-fetch user to get the latest invitees list for showing heart Icon + // re-fetch user to get the latest invitees list for showing heart icon fetchUser() }, []) @@ -89,95 +109,85 @@ const PointsPage = () => { <NavHeader title="Points" onPrev={() => router.back()} /> <section className="mx-auto mb-auto mt-10 w-full space-y-4"> - <Card className="flex flex-col items-center justify-center gap-3 p-6"> - <div className="flex items-center gap-2"> + {/* consolidated points and cash card */} + <Card className="flex flex-col gap-4 p-6"> + {/* points section */} + <div className="flex items-center justify-center gap-2"> <Image src={STAR_STRAIGHT_ICON} alt="star" width={24} height={24} /> <h2 className="text-4xl font-black text-black"> - {tierInfo.data.totalPoints} {tierInfo.data.totalPoints === 1 ? 'Point' : 'Points'} + {(() => { + const { number, suffix } = shortenPoints(animatedTotal) + return ( + <> + {number} + {suffix && <span className="text-primary-1">{suffix}</span>} + </> + ) + })()}{' '} + {tierInfo.data.totalPoints === 1 ? 'Point' : 'Points'} </h2> </div> - {/* Progressive progress bar */} - <div className="flex w-full items-center gap-3"> - <Image - src={getTierBadge(tierInfo?.data.currentTier)} - alt={`Tier ${tierInfo?.data.currentTier}`} - width={32} - height={32} - /> - <div className="relative h-2 w-full overflow-hidden rounded-full bg-grey-2"> - <div - className="h-full rounded-full bg-gradient-to-r from-primary-1 to-primary-2 transition-all duration-500" - style={{ - width: `${ - tierInfo?.data.currentTier >= 2 - ? 100 - : Math.pow( - Math.min( - 1, - tierInfo.data.nextTierThreshold > 0 - ? tierInfo.data.totalPoints / tierInfo.data.nextTierThreshold - : 0 - ), - 0.6 - ) * 100 - }%`, - }} + {/* de-emphasized tier progress - smaller and flatter */} + <div className="flex flex-col gap-0.5 pb-1"> + <div className="flex items-center gap-2"> + <Image + src={getTierBadge(tierInfo?.data.currentTier)} + alt={`Tier ${tierInfo?.data.currentTier}`} + width={24} + height={24} /> + <div className="relative h-1 flex-1 overflow-hidden rounded-full bg-grey-2"> + <div + className="h-full rounded-full bg-gradient-to-r from-primary-1 to-primary-2 transition-all duration-500" + style={{ + width: `${ + tierInfo?.data.currentTier >= 2 + ? 100 + : Math.pow( + Math.min( + 1, + tierInfo.data.nextTierThreshold > 0 + ? tierInfo.data.totalPoints / + tierInfo.data.nextTierThreshold + : 0 + ), + 0.6 + ) * 100 + }%`, + }} + /> + </div> + {tierInfo?.data.currentTier < 2 && ( + <Image + src={getTierBadge(tierInfo?.data.currentTier + 1)} + alt={`Tier ${tierInfo?.data.currentTier + 1}`} + width={24} + height={24} + /> + )} </div> {tierInfo?.data.currentTier < 2 && ( - <Image - src={getTierBadge(tierInfo?.data.currentTier + 1)} - alt={`Tier ${tierInfo?.data.currentTier + 1}`} - width={32} - height={32} - /> - )} - </div> - - <div className="text-center"> - <p className="text-base text-grey-1">You're at tier {tierInfo?.data.currentTier}.</p> - {tierInfo?.data.currentTier < 2 ? ( - <p className="text-sm text-grey-1"> - {tierInfo.data.pointsToNextTier}{' '} - {tierInfo.data.pointsToNextTier === 1 ? 'point' : 'points'} needed to level up + <p className="text-center text-sm text-grey-1"> + {formatPoints(tierInfo.data.pointsToNextTier)}{' '} + {tierInfo.data.pointsToNextTier === 1 ? 'point' : 'points'} to next tier </p> - ) : ( - <p className="text-sm text-grey-1">You've reached the max tier!</p> )} </div> - </Card> - {user?.invitedBy ? ( - <p className="text-center text-sm"> - <span - onClick={() => router.push(`/${user.invitedBy}`)} - className="inline-flex cursor-pointer items-center gap-1 font-bold" - > - {user.invitedBy} <Icon name="invite-heart" size={14} /> - </span>{' '} - invited you and earned points. Now it's your turn! Invite friends and get 20% of their points. - </p> - ) : ( - <div className="mx-3 flex items-center gap-2"> - <Icon name="info" className="size-4 flex-shrink-0 text-black" /> - <p className="text-sm text-black"> - Do stuff on Peanut and get points. Invite friends and pocket 20% of their points, too. - </p> - </div> - )} - <h1 className="font-bold">Invite friends with your code</h1> - <div className="flex w-full items-center justify-between gap-3"> - <Card className="flex w-full items-center justify-between py-3.5"> - <p className="overflow-hidden text-ellipsis whitespace-nowrap text-sm font-bold md:text-base">{`${inviteCode}`}</p> - <CopyToClipboard textToCopy={inviteCode} iconSize="4" /> - </Card> - </div> + {/* cash section */} + {cashStatus?.success && cashStatus.data && ( + <CashCard + hasCashbackLeft={cashStatus.data.hasCashbackLeft} + lifetimeEarned={cashStatus.data.lifetimeEarned} + /> + )} + </Card> - {/* User Graph - shows user, their inviter, and points flow regardless of invites */} + {/* invite graph with consolidated explanation */} {myGraphResult?.data && ( <> - <Card className="overflow-hidden p-0"> + <Card className="!mt-8 overflow-hidden p-0"> <InvitesGraph minimal data={myGraphResult.data} @@ -186,45 +196,56 @@ const PointsPage = () => { showUsernames /> </Card> - <div className="flex items-center gap-2"> - <Icon name="info" className="size-4 flex-shrink-0 text-black" /> - <p className="text-sm text-black"> - {IS_DEV - ? 'Experimental. Enabled for all users in dev mode.' - : 'Experimental. Only available for Seedlings badge holders.'} - </p> - </div> + <p className="text-center text-sm"> + {user?.invitedBy && ( + <> + <span + onClick={() => router.push(`/${user.invitedBy}`)} + className="inline-flex cursor-pointer items-center gap-1 font-bold" + > + {user.invitedBy} <Icon name="invite-heart" size={14} /> + </span>{' '} + invited you.{' '} + </> + )} + <br></br>You earn rewards whenever your friends use Peanut! + </p> </> )} - {invites && invites?.invitees && invites.invitees.length > 0 && ( + {/* if user has invites: show button above people list */} + {invites && invites?.invitees && invites.invitees.length > 0 ? ( <> - <ShareButton - generateText={() => Promise.resolve(generateInvitesShareText(inviteLink))} - title="Share your invite link" + <Button + variant="purple" + shadowSize="4" + onClick={() => setIsInviteModalOpen(true)} + className="!mt-8 w-full" > Share Invite link - </ShareButton> + </Button> + + {/* people you invited */} <div - className="!mt-8 flex cursor-pointer items-center justify-between" + className="flex cursor-pointer items-center justify-between" onClick={() => router.push('/points/invites')} > <h2 className="font-bold">People you invited</h2> <NavigationArrow className="text-black" /> </div> - <div> - {invites.invitees?.map((invite: PointsInvite, i: number) => { + <div ref={inviteesRef}> + {invites.invitees?.slice(0, 5).map((invite: PointsInvite, i: number) => { const username = invite.username const fullName = invite.fullName const isVerified = invite.kycStatus === 'approved' - const pointsEarned = Math.floor(invite.totalPoints * 0.2) + const pointsEarned = invite.contributedPoints ?? 0 // respect user's showFullName preference for avatar and display name const displayName = invite.showFullName && fullName ? fullName : username return ( <Card key={invite.inviteeId} - position={getCardPosition(i, invites.invitees.length)} + position={getCardPosition(i, Math.min(5, invites.invitees.length))} onClick={() => router.push(`/${username}`)} className="cursor-pointer" > @@ -246,35 +267,43 @@ const PointsPage = () => { isVerified={isVerified} /> </div> - <p className="text-grey-1"> - +{pointsEarned} {pointsEarned === 1 ? 'pt' : 'pts'} - </p> + <InviteePointsBadge points={pointsEarned} inView={inviteesInView} /> </div> </Card> ) })} </div> </> - )} - - {invites?.invitees?.length === 0 && ( - <Card className="flex flex-col items-center justify-center gap-4 py-4"> - <div className="flex items-center justify-center rounded-full bg-primary-1 p-2"> - <Icon name="trophy" /> - </div> - <h2 className="font-medium">No invites yet</h2> + ) : ( + <> + {/* if user has no invites: show empty state with modal button */} + <Card className="!mt-8 flex flex-col items-center justify-center gap-4 py-4"> + <div className="flex items-center justify-center rounded-full bg-primary-1 p-2"> + <Icon name="trophy" /> + </div> + <h2 className="font-medium">No invites yet</h2> - <p className="text-center text-sm text-grey-1"> - Send your invite link to start earning more rewards - </p> - <ShareButton - generateText={() => Promise.resolve(generateInvitesShareText(inviteLink))} - title="Share your invite link" - > - Share Invite link - </ShareButton> - </Card> + <p className="text-center text-sm text-grey-1"> + Send your invite link to start earning more rewards + </p> + <Button + variant="purple" + shadowSize="4" + onClick={() => setIsInviteModalOpen(true)} + className="w-full" + > + Share Invite link + </Button> + </Card> + </> )} + + {/* Invite Modal */} + <InviteFriendsModal + visible={isInviteModalOpen} + onClose={() => setIsInviteModalOpen(false)} + username={username ?? ''} + /> </section> </PageContainer> ) diff --git a/src/app/(mobile-ui)/profile/exchange-rate/page.tsx b/src/app/(mobile-ui)/profile/exchange-rate/page.tsx index 6f1b7a965..4e194b62a 100644 --- a/src/app/(mobile-ui)/profile/exchange-rate/page.tsx +++ b/src/app/(mobile-ui)/profile/exchange-rate/page.tsx @@ -7,11 +7,10 @@ import { useWallet } from '@/hooks/wallet/useWallet' import { printableUsdc } from '@/utils/balance.utils' import { getExchangeRateWidgetRedirectRoute } from '@/utils/exchangeRateWidget.utils' import { useRouter } from 'next/navigation' -import { useEffect } from 'react' export default function ExchangeRatePage() { const router = useRouter() - const { fetchBalance, balance } = useWallet() + const { balance } = useWallet() const handleCtaAction = (sourceCurrency: string, destinationCurrency: string) => { const formattedBalance = parseFloat(printableUsdc(balance ?? 0n)) @@ -20,11 +19,6 @@ export default function ExchangeRatePage() { router.push(redirectRoute) } - useEffect(() => { - // Fetch latest balance - fetchBalance() - }, []) - return ( <PageContainer className="flex flex-col"> <NavHeader title="Exchange rate & fees" onPrev={() => router.replace('/profile')} /> diff --git a/src/app/(mobile-ui)/withdraw/[country]/bank/page.tsx b/src/app/(mobile-ui)/withdraw/[country]/bank/page.tsx index 07c05ca46..295994292 100644 --- a/src/app/(mobile-ui)/withdraw/[country]/bank/page.tsx +++ b/src/app/(mobile-ui)/withdraw/[country]/bank/page.tsx @@ -77,6 +77,9 @@ export default function WithdrawBankPage() { ) useEffect(() => { + // Skip redirects when on success view — clearing state during navigation + // would race with router.push('/home') and redirect back to /withdraw + if (view === 'SUCCESS') return if (!amountToWithdraw) { // If no amount, go back to main page router.replace('/withdraw') @@ -84,7 +87,7 @@ export default function WithdrawBankPage() { // If amount is set but no bank account, go to country method selection router.replace(`/withdraw/${country}`) } - }, [bankAccount, router, amountToWithdraw, country]) + }, [bankAccount, router, amountToWithdraw, country, view]) const destinationDetails = (account: Account) => { let countryId: string @@ -100,6 +103,9 @@ export default function WithdrawBankPage() { case AccountType.CLABE: countryId = 'MX' break + case AccountType.GB: + countryId = 'GB' + break default: return { currency: '', @@ -124,6 +130,8 @@ export default function WithdrawBankPage() { return bankAccount.routingNumber?.toUpperCase() ?? 'N/A' } else if (bankAccount && bankAccount.type === AccountType.CLABE) { return bankAccount.identifier?.toUpperCase() ?? 'N/A' + } else if (bankAccount && bankAccount.type === AccountType.GB) { + return bankAccount.sortCode ?? 'N/A' } return 'N/A' @@ -259,11 +267,15 @@ export default function WithdrawBankPage() { title={fromSendFlow ? 'Send' : 'Withdraw'} icon={view === 'SUCCESS' ? 'cancel' : undefined} onPrev={() => { - setAmountToWithdraw('') - setSelectedMethod(null) if (view === 'SUCCESS') { + // Navigate first, then reset — otherwise clearing amountToWithdraw + // triggers the useEffect redirect to /withdraw, overriding /home router.push('/home') + setAmountToWithdraw('') + setSelectedMethod(null) } else { + setAmountToWithdraw('') + setSelectedMethod(null) router.back() } }} @@ -281,8 +293,8 @@ export default function WithdrawBankPage() { tokenSymbol={PEANUT_WALLET_TOKEN_SYMBOL} /> - {/* Warning for non-EUR SEPA countries */} - {isNonEuroSepa && ( + {/* Warning for non-EUR SEPA countries (not UK — UK uses Faster Payments with GBP) */} + {isNonEuroSepa && bankAccount?.type !== AccountType.GB && ( <InfoCard variant="info" icon="info" @@ -314,6 +326,11 @@ export default function WithdrawBankPage() { <> <PaymentInfoRow label={'CLABE'} value={bankAccount?.identifier.toUpperCase()} /> </> + ) : bankAccount?.type === AccountType.GB ? ( + <> + <PaymentInfoRow label={'Account Number'} value={bankAccount?.identifier} /> + <PaymentInfoRow label={'Sort Code'} value={getBicAndRoutingNumber()} /> + </> ) : ( <> <PaymentInfoRow label={'Account Number'} value={bankAccount?.identifier} /> @@ -364,6 +381,10 @@ export default function WithdrawBankPage() { currencyAmount={`$${amountToWithdraw}`} message={bankAccount ? shortenStringLong(bankAccount.identifier.toUpperCase()) : ''} points={pointsData?.estimatedPoints} + onComplete={() => { + setAmountToWithdraw('') + setSelectedMethod(null) + }} /> )} </div> diff --git a/src/app/(mobile-ui)/withdraw/crypto/page.tsx b/src/app/(mobile-ui)/withdraw/crypto/page.tsx index 5af73db77..d97db5f86 100644 --- a/src/app/(mobile-ui)/withdraw/crypto/page.tsx +++ b/src/app/(mobile-ui)/withdraw/crypto/page.tsx @@ -274,6 +274,7 @@ export default function WithdrawCryptoPage() { txHash: finalTxHash, tokenAddress: PEANUT_WALLET_TOKEN, payerAddress: address as Address, + squidQuoteId: xChainRoute?.rawResponse?.route?.quoteId, }) setTransactionHash(finalTxHash) @@ -381,8 +382,10 @@ export default function WithdrawCryptoPage() { return 0 }, [xChainRoute]) - if (!amountToWithdraw) { + if (!amountToWithdraw && currentView !== 'STATUS') { // Redirect to main withdraw page for amount input + // Guard against STATUS view: resetWithdrawFlow() clears amountToWithdraw, + // which would override the router.push('/home') in handleDone router.push('/withdraw') return <PeanutLoading /> } diff --git a/src/app/(mobile-ui)/withdraw/page.tsx b/src/app/(mobile-ui)/withdraw/page.tsx index f808f8de6..2732fee92 100644 --- a/src/app/(mobile-ui)/withdraw/page.tsx +++ b/src/app/(mobile-ui)/withdraw/page.tsx @@ -10,7 +10,9 @@ import { useWithdrawFlow } from '@/context/WithdrawFlowContext' import { useWallet } from '@/hooks/wallet/useWallet' import { tokenSelectorContext } from '@/context/tokenSelector.context' import { formatAmount } from '@/utils/general.utils' -import { getCountryFromAccount } from '@/utils/bridge.utils' +import { getCountryFromAccount, getCountryFromPath, getMinimumAmount } from '@/utils/bridge.utils' +import useGetExchangeRate from '@/hooks/useGetExchangeRate' +import { AccountType } from '@/interfaces' import { useRouter, useSearchParams } from 'next/navigation' import { useCallback, useEffect, useMemo, useState, useRef, useContext } from 'react' import { formatUnits } from 'viem' @@ -82,6 +84,43 @@ export default function WithdrawPage() { return balance !== undefined ? formatAmount(formatUnits(balance, PEANUT_WALLET_TOKEN_DECIMALS)) : '' }, [balance]) + // derive country and account type for minimum amount validation + const { countryIso2, rateAccountType } = useMemo(() => { + if (selectedBankAccount) { + const country = getCountryFromAccount(selectedBankAccount) + return { countryIso2: country?.iso2 || '', rateAccountType: selectedBankAccount.type as AccountType } + } + if (selectedMethod?.countryPath) { + const country = getCountryFromPath(selectedMethod.countryPath) + const iso2 = country?.iso2 || '' + let accountType: AccountType = AccountType.IBAN + if (iso2 === 'US') accountType = AccountType.US + else if (iso2 === 'GB') accountType = AccountType.GB + else if (iso2 === 'MX') accountType = AccountType.CLABE + return { countryIso2: iso2, rateAccountType: accountType } + } + return { countryIso2: '', rateAccountType: AccountType.US } + }, [selectedBankAccount, selectedMethod]) + + // fetch exchange rate for non-USD countries to convert local minimum to USD + const { exchangeRate } = useGetExchangeRate({ + accountType: rateAccountType, + enabled: rateAccountType !== AccountType.US && countryIso2 !== '', + }) + + // compute minimum withdrawal in USD using the exchange rate + const minUsdAmount = useMemo(() => { + const localMin = getMinimumAmount(countryIso2) + // for US or unknown, minimum is already in USD + if (!countryIso2 || countryIso2 === 'US') return localMin + // for EUR countries, €1 ≈ $1 + if (localMin === 1) return 1 + // convert local minimum to USD: sellRate = local currency per 1 USD + const rate = parseFloat(exchangeRate || '0') + if (rate <= 0) return 1 // fallback while rate is loading + return Math.ceil(localMin / rate) + }, [countryIso2, exchangeRate]) + // validate against user's limits for bank withdrawals // note: crypto withdrawals don't have fiat limits const limitsValidation = useLimitsValidation({ @@ -136,19 +175,22 @@ export default function WithdrawPage() { return false } - // convert the entered token amount to USD to enforce the $1 min rule + // convert the entered token amount to USD const price = selectedTokenData?.price ?? 0 // 0 for safety; will fail below const usdEquivalent = price ? amount * price : amount // if no price assume token pegged 1 USD - if (usdEquivalent >= 1 && amount <= maxDecimalAmount) { + if (usdEquivalent >= minUsdAmount && amount <= maxDecimalAmount) { setError({ showError: false, errorMessage: '' }) return true } // determine message let message = '' - if (usdEquivalent < 1) { - message = isFromSendFlow ? 'Minimum send amount is $1.' : 'Minimum withdrawal is $1.' + if (usdEquivalent < minUsdAmount) { + const minDisplay = minUsdAmount % 1 === 0 ? `$${minUsdAmount}` : `$${minUsdAmount.toFixed(2)}` + message = isFromSendFlow + ? `Minimum send amount is ${minDisplay}.` + : `Minimum withdrawal is ${minDisplay}.` } else if (amount > maxDecimalAmount) { message = 'Amount exceeds your wallet balance.' } else { @@ -157,7 +199,7 @@ export default function WithdrawPage() { setError({ showError: true, errorMessage: message }) return false }, - [maxDecimalAmount, setError, selectedTokenData?.price, isFromSendFlow] + [maxDecimalAmount, setError, selectedTokenData?.price, isFromSendFlow, minUsdAmount] ) const handleTokenAmountChange = useCallback( @@ -252,10 +294,10 @@ export default function WithdrawPage() { if (!Number.isFinite(numericAmount) || numericAmount <= 0) return true const usdEq = (selectedTokenData?.price ?? 1) * numericAmount - if (usdEq < 1) return true // below $1 min + if (usdEq < minUsdAmount) return true // below country-specific minimum return numericAmount > maxDecimalAmount || error.showError - }, [rawTokenAmount, maxDecimalAmount, error.showError, selectedTokenData?.price]) + }, [rawTokenAmount, maxDecimalAmount, error.showError, selectedTokenData?.price, minUsdAmount]) if (step === 'inputAmount') { // only show limits card for bank/manteca withdrawals, not crypto diff --git a/src/app/[locale]/(marketing)/[country]/page.tsx b/src/app/[locale]/(marketing)/[country]/page.tsx new file mode 100644 index 000000000..a2daeda93 --- /dev/null +++ b/src/app/[locale]/(marketing)/[country]/page.tsx @@ -0,0 +1,70 @@ +import { notFound } from 'next/navigation' +import { type Metadata } from 'next' +import { generateMetadata as metadataHelper } from '@/app/metadata' +import { COUNTRIES_SEO, getCountryName } from '@/data/seo' +import { SUPPORTED_LOCALES, isValidLocale, getBareAlternates } from '@/i18n/config' +import { getTranslations } from '@/i18n' +import { ContentPage } from '@/components/Marketing/ContentPage' +import { readPageContentLocalized } from '@/lib/content' +import { renderContent } from '@/lib/mdx' + +interface PageProps { + params: Promise<{ locale: string; country: string }> +} + +export async function generateStaticParams() { + const countries = Object.keys(COUNTRIES_SEO) + return SUPPORTED_LOCALES.flatMap((locale) => countries.map((country) => ({ locale, country }))) +} +export const dynamicParams = false + +export async function generateMetadata({ params }: PageProps): Promise<Metadata> { + const { locale, country } = await params + if (!isValidLocale(locale)) return {} + + const seo = COUNTRIES_SEO[country] + if (!seo) return {} + + const mdxContent = readPageContentLocalized<{ title: string; description: string; published?: boolean }>( + 'countries', + country, + locale + ) + if (!mdxContent || mdxContent.frontmatter.published === false) return {} + + return { + ...metadataHelper({ + title: mdxContent.frontmatter.title, + description: mdxContent.frontmatter.description, + canonical: `/${locale}/${country}`, + }), + alternates: { + canonical: `/${locale}/${country}`, + languages: getBareAlternates(country), + }, + } +} + +export default async function CountryHubPage({ params }: PageProps) { + const { locale, country } = await params + if (!isValidLocale(locale)) notFound() + if (!COUNTRIES_SEO[country]) notFound() + + const mdxSource = readPageContentLocalized('countries', country, locale) + if (!mdxSource || mdxSource.frontmatter.published === false) notFound() + + const { content } = await renderContent(mdxSource.body) + const i18n = getTranslations(locale) + const countryName = getCountryName(country, locale) + + return ( + <ContentPage + breadcrumbs={[ + { name: i18n.home, href: '/' }, + { name: countryName, href: `/${locale}/${country}` }, + ]} + > + {content} + </ContentPage> + ) +} diff --git a/src/app/[locale]/(marketing)/blog/[slug]/page.tsx b/src/app/[locale]/(marketing)/blog/[slug]/page.tsx new file mode 100644 index 000000000..418455970 --- /dev/null +++ b/src/app/[locale]/(marketing)/blog/[slug]/page.tsx @@ -0,0 +1,147 @@ +import { notFound } from 'next/navigation' +import Link from 'next/link' +import { type Metadata } from 'next' +import { generateMetadata as metadataHelper } from '@/app/metadata' +import { getAllPosts, getPostBySlug } from '@/lib/blog' +import { MarketingShell } from '@/components/Marketing/MarketingShell' +import { JsonLd } from '@/components/Marketing/JsonLd' +import { SUPPORTED_LOCALES, getAlternates, isValidLocale } from '@/i18n/config' +import type { Locale } from '@/i18n/types' +import { getTranslations } from '@/i18n' + +interface PageProps { + params: Promise<{ locale: string; slug: string }> +} + +export async function generateStaticParams() { + if (process.env.NODE_ENV === 'production') return [] + // Generate params for locales that have blog content (fall back to en slugs) + return SUPPORTED_LOCALES.flatMap((locale) => { + let posts = getAllPosts(locale as Locale) + if (posts.length === 0) posts = getAllPosts('en') + return posts.map((post) => ({ locale, slug: post.slug })) + }) +} +// TODO: when blog content is added to src/content/blog/, either remove the +// production guard in generateStaticParams above, or set dynamicParams = true. +// Currently no blog posts exist so this has no effect, but with content present +// the combination of returning [] in prod + dynamicParams = false would 404 all +// blog pages. +export const dynamicParams = false + +export async function generateMetadata({ params }: PageProps): Promise<Metadata> { + const { locale, slug } = await params + if (!isValidLocale(locale)) return {} + + // Try locale-specific post first, fall back to English + const post = (await getPostBySlug(slug, locale as Locale)) ?? (await getPostBySlug(slug, 'en')) + if (!post) return {} + + return { + ...metadataHelper({ + title: `${post.frontmatter.title} | Peanut`, + description: post.frontmatter.description, + canonical: `/${locale}/blog/${slug}`, + }), + alternates: { + canonical: `/${locale}/blog/${slug}`, + languages: getAlternates('blog', slug), + }, + } +} + +export default async function BlogPostPageLocalized({ params }: PageProps) { + const { locale, slug } = await params + if (!isValidLocale(locale)) notFound() + + const post = (await getPostBySlug(slug, locale as Locale)) ?? (await getPostBySlug(slug, 'en')) + if (!post) notFound() + + const i18n = getTranslations(locale) + + const blogPostSchema = { + '@context': 'https://schema.org', + '@type': 'BlogPosting', + headline: post.frontmatter.title, + description: post.frontmatter.description, + datePublished: post.frontmatter.date, + inLanguage: locale, + author: { '@type': 'Organization', name: post.frontmatter.author ?? 'Peanut' }, + publisher: { '@type': 'Organization', name: 'Peanut', url: 'https://peanut.me' }, + mainEntityOfPage: `https://peanut.me/${locale}/blog/${slug}`, + } + + // FAQ schema from frontmatter (optional) + const faqs = post.frontmatter.faqs + const faqSchema = faqs?.length + ? { + '@context': 'https://schema.org', + '@type': 'FAQPage', + mainEntity: faqs.map((faq) => ({ + '@type': 'Question', + name: faq.question, + acceptedAnswer: { '@type': 'Answer', text: faq.answer }, + })), + } + : null + + const breadcrumbs = [ + { name: i18n.home, href: '/' }, + { name: i18n.blog, href: `/${locale}/blog` }, + { name: post.frontmatter.title, href: `/${locale}/blog/${slug}` }, + ] + + const breadcrumbSchema = { + '@context': 'https://schema.org', + '@type': 'BreadcrumbList', + itemListElement: breadcrumbs.map((crumb, i) => ({ + '@type': 'ListItem', + position: i + 1, + name: crumb.name, + item: crumb.href.startsWith('http') ? crumb.href : `https://peanut.me${crumb.href}`, + })), + } + + return ( + <> + <JsonLd data={blogPostSchema} /> + <JsonLd data={breadcrumbSchema} /> + {faqSchema && <JsonLd data={faqSchema} />} + <MarketingShell className="max-w-2xl"> + <nav aria-label="Breadcrumb" className="-mt-2 mb-4"> + <ol className="flex flex-wrap items-center gap-1 text-xs text-grey-1"> + {breadcrumbs.map((crumb, i) => ( + <li key={crumb.href} className="flex items-center gap-1"> + {i > 0 && <span aria-hidden>/</span>} + {i < breadcrumbs.length - 1 ? ( + <Link + href={crumb.href} + className="underline decoration-n-1/30 underline-offset-2 hover:text-n-1" + > + {crumb.name} + </Link> + ) : ( + <span className="max-w-[200px] truncate font-medium text-n-1">{crumb.name}</span> + )} + </li> + ))} + </ol> + </nav> + <header className="mb-8 border-b border-n-1 pb-6"> + {post.frontmatter.category && ( + <span className="mb-2 inline-block rounded-sm bg-primary-1/20 px-2 py-0.5 text-xs font-semibold"> + {post.frontmatter.category} + </span> + )} + <h1 className="text-3xl font-bold md:text-4xl">{post.frontmatter.title}</h1> + <p className="mt-2 text-gray-600">{post.frontmatter.description}</p> + <time className="mt-3 block text-sm text-gray-400">{post.frontmatter.date}</time> + </header> + <article + className="prose prose-lg prose-headings:font-bold prose-a:text-black prose-a:underline prose-pre:border prose-pre:border-n-1 prose-pre:bg-white max-w-none" + dangerouslySetInnerHTML={{ __html: post.html }} + /> + </MarketingShell> + </> + ) +} diff --git a/src/app/[locale]/(marketing)/blog/category/[cat]/page.tsx b/src/app/[locale]/(marketing)/blog/category/[cat]/page.tsx new file mode 100644 index 000000000..71a911f53 --- /dev/null +++ b/src/app/[locale]/(marketing)/blog/category/[cat]/page.tsx @@ -0,0 +1,101 @@ +import { notFound } from 'next/navigation' +import { type Metadata } from 'next' +import { generateMetadata as metadataHelper } from '@/app/metadata' +import { getAllCategories, getPostsByCategory } from '@/lib/blog' +import { MarketingHero } from '@/components/Marketing/MarketingHero' +import { MarketingShell } from '@/components/Marketing/MarketingShell' +import { BlogCard } from '@/components/Marketing/BlogCard' +import Link from 'next/link' +import { SUPPORTED_LOCALES, isValidLocale, getAlternates } from '@/i18n/config' +import type { Locale } from '@/i18n/types' +import { getTranslations } from '@/i18n' + +interface PageProps { + params: Promise<{ locale: string; cat: string }> +} + +export async function generateStaticParams() { + if (process.env.NODE_ENV === 'production') return [] + return SUPPORTED_LOCALES.flatMap((locale) => { + // Use English categories as fallback + const cats = getAllCategories(locale as Locale) + const fallbackCats = cats.length > 0 ? cats : getAllCategories('en') + return fallbackCats.map((cat) => ({ locale, cat })) + }) +} +export const dynamicParams = false + +export async function generateMetadata({ params }: PageProps): Promise<Metadata> { + const { locale, cat } = await params + if (!isValidLocale(locale)) return {} + + const label = cat.replace(/-/g, ' ').replace(/\b\w/g, (c) => c.toUpperCase()) + + return { + ...metadataHelper({ + title: `${label} — Blog | Peanut`, + description: label, + canonical: `/${locale}/blog/category/${cat}`, + }), + alternates: { + canonical: `/${locale}/blog/category/${cat}`, + languages: getAlternates('blog', `category/${cat}`), + }, + } +} + +export default async function BlogCategoryPageLocalized({ params }: PageProps) { + const { locale, cat } = await params + if (!isValidLocale(locale)) notFound() + + const typedLocale = locale as Locale + const i18n = getTranslations(typedLocale) + + let posts = getPostsByCategory(cat, typedLocale) + if (posts.length === 0) posts = getPostsByCategory(cat, 'en') + if (posts.length === 0) notFound() + + const label = cat.replace(/-/g, ' ').replace(/\b\w/g, (c) => c.toUpperCase()) + const categories = getAllCategories(typedLocale).length > 0 ? getAllCategories(typedLocale) : getAllCategories('en') + + return ( + <> + <MarketingHero title={label} subtitle={i18n.allArticles} ctaText="" /> + <MarketingShell> + <div className="mb-8 flex flex-wrap gap-2"> + <Link + href={`/${locale}/blog`} + className="rounded-sm border border-n-1 px-3 py-1 text-sm hover:bg-primary-3/30" + > + {i18n.allArticles} + </Link> + {categories.map((c) => ( + <Link + key={c} + href={`/${locale}/blog/category/${c}`} + className={`rounded-sm border border-n-1 px-3 py-1 text-sm ${ + c === cat ? 'bg-primary-1/20 font-semibold' : 'hover:bg-primary-3/30' + }`} + > + {c} + </Link> + ))} + </div> + + <div className="grid gap-4 md:grid-cols-2"> + {posts.map((post) => ( + <BlogCard + key={post.slug} + slug={post.slug} + title={post.frontmatter.title} + excerpt={post.frontmatter.description} + date={post.frontmatter.date} + category={post.frontmatter.category} + hrefPrefix={`/${locale}/blog`} + /> + ))} + </div> + </MarketingShell> + </> + ) +} diff --git a/src/app/[locale]/(marketing)/blog/page.tsx b/src/app/[locale]/(marketing)/blog/page.tsx new file mode 100644 index 000000000..e30220e20 --- /dev/null +++ b/src/app/[locale]/(marketing)/blog/page.tsx @@ -0,0 +1,98 @@ +import { notFound } from 'next/navigation' +import { type Metadata } from 'next' +import { generateMetadata as metadataHelper } from '@/app/metadata' +import { getAllPosts, getAllCategories } from '@/lib/blog' +import { MarketingHero } from '@/components/Marketing/MarketingHero' +import { MarketingShell } from '@/components/Marketing/MarketingShell' +import { BlogCard } from '@/components/Marketing/BlogCard' +import Link from 'next/link' +import { SUPPORTED_LOCALES, getAlternates, isValidLocale } from '@/i18n/config' +import type { Locale } from '@/i18n/types' +import { getTranslations } from '@/i18n' + +interface PageProps { + params: Promise<{ locale: string }> +} + +export async function generateStaticParams() { + if (process.env.NODE_ENV === 'production') return [] + return SUPPORTED_LOCALES.map((locale) => ({ locale })) +} + +export async function generateMetadata({ params }: PageProps): Promise<Metadata> { + const { locale } = await params + if (!isValidLocale(locale)) return {} + + const i18n = getTranslations(locale as Locale) + + return { + ...metadataHelper({ + title: `${i18n.blog} | Peanut`, + description: i18n.allArticles, + canonical: `/${locale}/blog`, + }), + alternates: { + canonical: `/${locale}/blog`, + languages: getAlternates('blog'), + }, + } +} + +export default async function BlogIndexPageLocalized({ params }: PageProps) { + const { locale } = await params + if (!isValidLocale(locale)) notFound() + + const typedLocale = locale as Locale + const i18n = getTranslations(typedLocale) + + // Try locale-specific posts first, fall back to English + let posts = getAllPosts(typedLocale) + if (posts.length === 0) posts = getAllPosts('en') + + const categories = getAllCategories(typedLocale) + + return ( + <> + <MarketingHero title={i18n.blog} subtitle={i18n.allArticles} ctaText="" /> + <MarketingShell> + {categories.length > 0 && ( + <div className="mb-8 flex flex-wrap gap-2"> + <Link + href={`/${locale}/blog`} + className="rounded-sm border border-n-1 bg-primary-1/20 px-3 py-1 text-sm font-semibold" + > + {i18n.allArticles} + </Link> + {categories.map((cat) => ( + <Link + key={cat} + href={`/${locale}/blog/category/${cat}`} + className="rounded-sm border border-n-1 px-3 py-1 text-sm hover:bg-primary-3/30" + > + {cat} + </Link> + ))} + </div> + )} + + {posts.length > 0 ? ( + <div className="grid gap-4 md:grid-cols-2"> + {posts.map((post) => ( + <BlogCard + key={post.slug} + slug={post.slug} + title={post.frontmatter.title} + excerpt={post.frontmatter.description} + date={post.frontmatter.date} + category={post.frontmatter.category} + hrefPrefix={`/${locale}/blog`} + /> + ))} + </div> + ) : ( + <p className="py-12 text-center text-gray-500">Blog posts coming soon.</p> + )} + </MarketingShell> + </> + ) +} diff --git a/src/app/[locale]/(marketing)/compare/[slug]/page.tsx b/src/app/[locale]/(marketing)/compare/[slug]/page.tsx new file mode 100644 index 000000000..b595c1199 --- /dev/null +++ b/src/app/[locale]/(marketing)/compare/[slug]/page.tsx @@ -0,0 +1,164 @@ +import { notFound } from 'next/navigation' +import { type Metadata } from 'next' +import { generateMetadata as metadataHelper } from '@/app/metadata' +import { COMPETITORS } from '@/data/seo' +import { MarketingHero } from '@/components/Marketing/MarketingHero' +import { MarketingShell } from '@/components/Marketing/MarketingShell' +import { Section } from '@/components/Marketing/Section' +import { ComparisonTable } from '@/components/Marketing/ComparisonTable' +import { FAQSection } from '@/components/Marketing/FAQSection' +import { JsonLd } from '@/components/Marketing/JsonLd' +import { SUPPORTED_LOCALES, getAlternates, isValidLocale } from '@/i18n/config' +import type { Locale } from '@/i18n/types' +import { getTranslations, t, localizedPath } from '@/i18n' +import { RelatedPages } from '@/components/Marketing/RelatedPages' +import { ContentPage } from '@/components/Marketing/ContentPage' +import { readPageContentLocalized } from '@/lib/content' +import { renderContent } from '@/lib/mdx' + +interface PageProps { + params: Promise<{ locale: string; slug: string }> +} + +export async function generateStaticParams() { + const slugs = Object.keys(COMPETITORS) + return SUPPORTED_LOCALES.flatMap((locale) => slugs.map((slug) => ({ locale, slug: `peanut-vs-${slug}` }))) +} +export const dynamicParams = false + +/** Strip the "peanut-vs-" URL prefix to get the data key. Returns null if prefix missing. */ +function parseSlug(raw: string): string | null { + if (!raw.startsWith('peanut-vs-')) return null + return raw.slice('peanut-vs-'.length) +} + +export async function generateMetadata({ params }: PageProps): Promise<Metadata> { + const { locale, slug: rawSlug } = await params + if (!isValidLocale(locale)) return {} + + const slug = parseSlug(rawSlug) + if (!slug) return {} + const competitor = COMPETITORS[slug] + if (!competitor) return {} + + // Try MDX content frontmatter first + const mdxContent = readPageContentLocalized<{ title: string; description: string; published?: boolean }>( + 'compare', + slug, + locale + ) + if (mdxContent && mdxContent.frontmatter.published !== false) { + return { + ...metadataHelper({ + title: mdxContent.frontmatter.title, + description: mdxContent.frontmatter.description, + canonical: `/${locale}/compare/peanut-vs-${slug}`, + }), + alternates: { + canonical: `/${locale}/compare/peanut-vs-${slug}`, + languages: getAlternates('compare', `peanut-vs-${slug}`), + }, + } + } + + // Fallback: i18n-based metadata + const year = new Date().getFullYear() + + return { + ...metadataHelper({ + title: `Peanut vs ${competitor.name} ${year} | Peanut`, + description: `Peanut vs ${competitor.name}: ${competitor.tagline}`, + canonical: `/${locale}/compare/peanut-vs-${slug}`, + }), + alternates: { + canonical: `/${locale}/compare/peanut-vs-${slug}`, + languages: getAlternates('compare', `peanut-vs-${slug}`), + }, + } +} + +export default async function ComparisonPageLocalized({ params }: PageProps) { + const { locale, slug: rawSlug } = await params + if (!isValidLocale(locale)) notFound() + + const slug = parseSlug(rawSlug) + if (!slug) notFound() + const competitor = COMPETITORS[slug] + if (!competitor) notFound() + + // Try MDX content first + const mdxSource = readPageContentLocalized('compare', slug, locale) + if (mdxSource && mdxSource.frontmatter.published !== false) { + const { content } = await renderContent(mdxSource.body) + const i18n = getTranslations(locale) + return ( + <ContentPage + breadcrumbs={[ + { name: i18n.home, href: '/' }, + { name: `Peanut vs ${competitor.name}`, href: `/${locale}/compare/peanut-vs-${slug}` }, + ]} + > + {content} + </ContentPage> + ) + } + + // Fallback: old React-driven page + const i18n = getTranslations(locale as Locale) + const year = new Date().getFullYear() + + const breadcrumbSchema = { + '@context': 'https://schema.org', + '@type': 'BreadcrumbList', + itemListElement: [ + { '@type': 'ListItem', position: 1, name: i18n.home, item: 'https://peanut.me' }, + { + '@type': 'ListItem', + position: 2, + name: `Peanut vs ${competitor.name}`, + item: `https://peanut.me/${locale}/compare/peanut-vs-${slug}`, + }, + ], + } + + return ( + <> + <JsonLd data={breadcrumbSchema} /> + + <MarketingHero + title={`Peanut vs ${competitor.name} [${year}]`} + subtitle={`${competitor.tagline} — ${year}`} + image={competitor.image} + /> + + <MarketingShell> + <Section title={i18n.feature}> + <ComparisonTable competitorName={competitor.name} rows={competitor.rows} /> + </Section> + + <Section title={i18n.verdict}> + <p className="text-gray-700">{competitor.verdict}</p> + </Section> + + <FAQSection faqs={competitor.faqs} /> + + {/* Related comparisons */} + <RelatedPages + title={i18n.relatedPages} + pages={Object.entries(COMPETITORS) + .filter(([s]) => s !== slug) + .slice(0, 5) + .map(([s, c]) => ({ + title: `Peanut vs ${c.name} [${year}]`, + href: localizedPath('compare', locale, `peanut-vs-${s}`), + }))} + /> + + {/* Last updated */} + <p className="py-4 text-xs text-gray-400"> + {t(i18n.lastUpdated, { date: new Date().toISOString().split('T')[0] })} + </p> + </MarketingShell> + </> + ) +} diff --git a/src/app/[locale]/(marketing)/deposit/[exchange]/page.tsx b/src/app/[locale]/(marketing)/deposit/[exchange]/page.tsx new file mode 100644 index 000000000..36d004e36 --- /dev/null +++ b/src/app/[locale]/(marketing)/deposit/[exchange]/page.tsx @@ -0,0 +1,194 @@ +import { notFound } from 'next/navigation' +import { type Metadata } from 'next' +import { generateMetadata as metadataHelper } from '@/app/metadata' +import { EXCHANGES } from '@/data/seo' +import { MarketingHero } from '@/components/Marketing/MarketingHero' +import { MarketingShell } from '@/components/Marketing/MarketingShell' +import { Section } from '@/components/Marketing/Section' +import { Steps } from '@/components/Marketing/Steps' +import { FAQSection } from '@/components/Marketing/FAQSection' +import { JsonLd } from '@/components/Marketing/JsonLd' +import { Card } from '@/components/0_Bruddle/Card' +import { SUPPORTED_LOCALES, getAlternates, isValidLocale } from '@/i18n/config' +import type { Locale } from '@/i18n/types' +import { getTranslations, t, localizedPath } from '@/i18n' +import { RelatedPages } from '@/components/Marketing/RelatedPages' +import { ContentPage } from '@/components/Marketing/ContentPage' +import { readPageContentLocalized } from '@/lib/content' +import { renderContent } from '@/lib/mdx' + +interface PageProps { + params: Promise<{ locale: string; exchange: string }> +} + +export async function generateStaticParams() { + const exchanges = Object.keys(EXCHANGES) + return SUPPORTED_LOCALES.flatMap((locale) => + exchanges.map((exchange) => ({ locale, exchange: `from-${exchange}` })) + ) +} +export const dynamicParams = false + +/** Strip the "from-" URL prefix to get the data key. Returns null if prefix missing. */ +function parseExchange(raw: string): string | null { + if (!raw.startsWith('from-')) return null + return raw.slice('from-'.length) +} + +export async function generateMetadata({ params }: PageProps): Promise<Metadata> { + const { locale, exchange: rawExchange } = await params + if (!isValidLocale(locale)) return {} + + const exchange = parseExchange(rawExchange) + if (!exchange) return {} + const ex = EXCHANGES[exchange] + if (!ex) return {} + + // Try MDX content frontmatter first + const mdxContent = readPageContentLocalized<{ title: string; description: string; published?: boolean }>( + 'deposit', + exchange, + locale + ) + if (mdxContent && mdxContent.frontmatter.published !== false) { + return { + ...metadataHelper({ + title: mdxContent.frontmatter.title, + description: mdxContent.frontmatter.description, + canonical: `/${locale}/deposit/from-${exchange}`, + }), + alternates: { + canonical: `/${locale}/deposit/from-${exchange}`, + languages: getAlternates('deposit', `from-${exchange}`), + }, + } + } + + // Fallback: i18n-based metadata + const i18n = getTranslations(locale as Locale) + + return { + ...metadataHelper({ + title: `${t(i18n.depositFrom, { exchange: ex.name })} | Peanut`, + description: `${t(i18n.depositFrom, { exchange: ex.name })}. ${i18n.recommendedNetwork}: ${ex.recommendedNetwork}.`, + canonical: `/${locale}/deposit/from-${exchange}`, + }), + alternates: { + canonical: `/${locale}/deposit/from-${exchange}`, + languages: getAlternates('deposit', `from-${exchange}`), + }, + } +} + +export default async function DepositPageLocalized({ params }: PageProps) { + const { locale, exchange: rawExchange } = await params + if (!isValidLocale(locale)) notFound() + + const exchange = parseExchange(rawExchange) + if (!exchange) notFound() + const ex = EXCHANGES[exchange] + if (!ex) notFound() + + // Try MDX content first + const mdxSource = readPageContentLocalized('deposit', exchange, locale) + if (mdxSource && mdxSource.frontmatter.published !== false) { + const { content } = await renderContent(mdxSource.body) + const i18n = getTranslations(locale) + return ( + <ContentPage + breadcrumbs={[ + { name: i18n.home, href: '/' }, + { name: ex.name, href: `/${locale}/deposit/from-${exchange}` }, + ]} + > + {content} + </ContentPage> + ) + } + + // Fallback: old React-driven page + const i18n = getTranslations(locale as Locale) + + const steps = ex.steps.map((step, i) => ({ + title: `${i + 1}`, + description: step, + })) + + const howToSchema = { + '@context': 'https://schema.org', + '@type': 'HowTo', + name: t(i18n.depositFrom, { exchange: ex.name }), + inLanguage: locale, + step: steps.map((step, i) => ({ + '@type': 'HowToStep', + position: i + 1, + name: step.title, + text: step.description, + })), + } + + return ( + <> + <JsonLd data={howToSchema} /> + + <MarketingHero + title={t(i18n.depositFrom, { exchange: ex.name })} + subtitle={`${ex.processingTime} · ${ex.recommendedNetwork}`} + image={ex.image} + /> + + <MarketingShell> + <Section title={i18n.howItWorks}> + <div className="grid grid-cols-2 gap-3 md:grid-cols-4"> + {[ + { label: i18n.recommendedNetwork, value: ex.recommendedNetwork }, + { label: i18n.withdrawalFee, value: ex.withdrawalFee }, + { label: i18n.processingTime, value: ex.processingTime }, + ].map((item) => ( + <Card key={item.label} className="p-3 text-center"> + <span className="text-xs text-gray-500">{item.label}</span> + <span className="mt-1 block text-sm font-bold">{item.value}</span> + </Card> + ))} + </div> + </Section> + + <Section title={t(i18n.depositFrom, { exchange: ex.name })}> + <Steps steps={steps} /> + </Section> + + {ex.troubleshooting.length > 0 && ( + <Section title={i18n.troubleshooting}> + <div className="flex flex-col gap-3"> + {ex.troubleshooting.map((item, i) => ( + <Card key={i} className="p-4"> + <h3 className="text-red-700 font-semibold">{item.issue}</h3> + <p className="mt-1 text-sm text-gray-600">{item.fix}</p> + </Card> + ))} + </div> + </Section> + )} + + <FAQSection faqs={ex.faqs} /> + + {/* Related deposit guides */} + <RelatedPages + title={i18n.relatedPages} + pages={Object.entries(EXCHANGES) + .filter(([slug]) => slug !== exchange) + .slice(0, 5) + .map(([slug, e]) => ({ + title: t(i18n.depositFrom, { exchange: e.name }), + href: localizedPath('deposit', locale, `from-${slug}`), + }))} + /> + + {/* Last updated */} + <p className="py-4 text-xs text-gray-400"> + {t(i18n.lastUpdated, { date: new Date().toISOString().split('T')[0] })} + </p> + </MarketingShell> + </> + ) +} diff --git a/src/app/[locale]/(marketing)/error.tsx b/src/app/[locale]/(marketing)/error.tsx new file mode 100644 index 000000000..938173d6a --- /dev/null +++ b/src/app/[locale]/(marketing)/error.tsx @@ -0,0 +1,33 @@ +'use client' + +import { useEffect } from 'react' +import Link from 'next/link' + +export default function MarketingError({ error, reset }: { error: Error & { digest?: string }; reset: () => void }) { + useEffect(() => { + console.error(error) + }, [error]) + + return ( + <div className="flex min-h-[60vh] flex-col items-center justify-center px-4 text-center"> + <h1 className="text-2xl font-bold">Something went wrong</h1> + <p className="mt-2 max-w-md text-gray-600"> + We had trouble loading this page. Please try again or go back to the homepage. + </p> + <div className="mt-6 flex gap-3"> + <button + onClick={reset} + className="rounded-md bg-black px-4 py-2 text-sm font-medium text-white hover:bg-gray-800" + > + Try again + </button> + <Link + href="/" + className="rounded-md border border-gray-300 px-4 py-2 text-sm font-medium hover:bg-gray-50" + > + Go home + </Link> + </div> + </div> + ) +} diff --git a/src/app/[locale]/(marketing)/layout.tsx b/src/app/[locale]/(marketing)/layout.tsx new file mode 100644 index 000000000..a232087b7 --- /dev/null +++ b/src/app/[locale]/(marketing)/layout.tsx @@ -0,0 +1,29 @@ +import { notFound } from 'next/navigation' +import { SUPPORTED_LOCALES } from '@/i18n/types' +import { isValidLocale } from '@/i18n/config' +import Footer from '@/components/LandingPage/Footer' + +interface LayoutProps { + children: React.ReactNode + params: Promise<{ locale: string }> +} + +export async function generateStaticParams() { + return SUPPORTED_LOCALES.map((locale) => ({ locale })) +} +export const dynamicParams = false + +export default async function LocalizedMarketingLayout({ children, params }: LayoutProps) { + const { locale } = await params + + if (!isValidLocale(locale)) { + notFound() + } + + return ( + <main className="flex min-h-dvh flex-col bg-white" lang={locale}> + <div className="flex-1">{children}</div> + <Footer /> + </main> + ) +} diff --git a/src/app/[locale]/(marketing)/pay-with/[method]/page.tsx b/src/app/[locale]/(marketing)/pay-with/[method]/page.tsx new file mode 100644 index 000000000..9fec9dd8a --- /dev/null +++ b/src/app/[locale]/(marketing)/pay-with/[method]/page.tsx @@ -0,0 +1,70 @@ +import { notFound } from 'next/navigation' +import { type Metadata } from 'next' +import { generateMetadata as metadataHelper } from '@/app/metadata' +import { PAYMENT_METHODS, PAYMENT_METHOD_SLUGS } from '@/data/seo' +import { SUPPORTED_LOCALES, getAlternates, isValidLocale } from '@/i18n/config' +import { getTranslations } from '@/i18n' +import { ContentPage } from '@/components/Marketing/ContentPage' +import { readPageContentLocalized } from '@/lib/content' +import { renderContent } from '@/lib/mdx' + +interface PageProps { + params: Promise<{ locale: string; method: string }> +} + +export async function generateStaticParams() { + return SUPPORTED_LOCALES.flatMap((locale) => PAYMENT_METHOD_SLUGS.map((method) => ({ locale, method }))) +} +export const dynamicParams = false + +export async function generateMetadata({ params }: PageProps): Promise<Metadata> { + const { locale, method } = await params + if (!isValidLocale(locale)) return {} + + const pm = PAYMENT_METHODS[method] + if (!pm) return {} + + const mdxContent = readPageContentLocalized<{ title: string; description: string; published?: boolean }>( + 'pay-with', + method, + locale + ) + if (!mdxContent || mdxContent.frontmatter.published === false) return {} + + return { + ...metadataHelper({ + title: mdxContent.frontmatter.title, + description: mdxContent.frontmatter.description, + canonical: `/${locale}/pay-with/${method}`, + }), + alternates: { + canonical: `/${locale}/pay-with/${method}`, + languages: getAlternates('pay-with', method), + }, + } +} + +export default async function PayWithPage({ params }: PageProps) { + const { locale, method } = await params + if (!isValidLocale(locale)) notFound() + + const pm = PAYMENT_METHODS[method] + if (!pm) notFound() + + const mdxSource = readPageContentLocalized('pay-with', method, locale) + if (!mdxSource || mdxSource.frontmatter.published === false) notFound() + + const { content } = await renderContent(mdxSource.body) + const i18n = getTranslations(locale) + + return ( + <ContentPage + breadcrumbs={[ + { name: i18n.home, href: '/' }, + { name: pm.name, href: `/${locale}/pay-with/${method}` }, + ]} + > + {content} + </ContentPage> + ) +} diff --git a/src/app/[locale]/(marketing)/receive-money-from/[country]/page.tsx b/src/app/[locale]/(marketing)/receive-money-from/[country]/page.tsx new file mode 100644 index 000000000..e650c1652 --- /dev/null +++ b/src/app/[locale]/(marketing)/receive-money-from/[country]/page.tsx @@ -0,0 +1,74 @@ +import { notFound } from 'next/navigation' +import { type Metadata } from 'next' +import { generateMetadata as metadataHelper } from '@/app/metadata' +import { CORRIDORS, getCountryName } from '@/data/seo' +import { SUPPORTED_LOCALES, getAlternates, isValidLocale } from '@/i18n/config' +import type { Locale } from '@/i18n/types' +import { getTranslations, t } from '@/i18n' +import { ReceiveMoneyContent } from '@/components/Marketing/pages/ReceiveMoneyContent' +import { ContentPage } from '@/components/Marketing/ContentPage' +import { readPageContentLocalized } from '@/lib/content' +import { renderContent } from '@/lib/mdx' + +interface PageProps { + params: Promise<{ locale: string; country: string }> +} + +/** Unique sending countries */ +function getReceiveSources(): string[] { + return [...new Set(CORRIDORS.map((c) => c.from))] +} + +export async function generateStaticParams() { + const sources = getReceiveSources() + return SUPPORTED_LOCALES.flatMap((locale) => sources.map((country) => ({ locale, country }))) +} +export const dynamicParams = false + +export async function generateMetadata({ params }: PageProps): Promise<Metadata> { + const { locale, country } = await params + if (!isValidLocale(locale)) return {} + if (!getReceiveSources().includes(country)) return {} + + const i18n = getTranslations(locale as Locale) + const countryName = getCountryName(country, locale as Locale) + + return { + ...metadataHelper({ + title: `${t(i18n.receiveMoneyFrom, { country: countryName })} | Peanut`, + description: t(i18n.receiveMoneyFromDesc, { country: countryName }), + canonical: `/${locale}/receive-money-from/${country}`, + }), + alternates: { + canonical: `/${locale}/receive-money-from/${country}`, + languages: getAlternates('receive-money-from', country), + }, + } +} + +export default async function ReceiveMoneyPage({ params }: PageProps) { + const { locale, country } = await params + if (!isValidLocale(locale)) notFound() + if (!getReceiveSources().includes(country)) notFound() + + // Try MDX content first (future-proofing — no content files exist yet) + const mdxSource = readPageContentLocalized('receive-from', country, locale) + if (mdxSource && mdxSource.frontmatter.published !== false) { + const { content } = await renderContent(mdxSource.body) + const i18n = getTranslations(locale) + const countryName = getCountryName(country, locale) + return ( + <ContentPage + breadcrumbs={[ + { name: i18n.home, href: '/' }, + { name: countryName, href: `/${locale}/receive-money-from/${country}` }, + ]} + > + {content} + </ContentPage> + ) + } + + // Fallback: old React-driven page + return <ReceiveMoneyContent sourceCountry={country} locale={locale as Locale} /> +} diff --git a/src/app/[locale]/(marketing)/send-money-from/[from]/to/[to]/page.tsx b/src/app/[locale]/(marketing)/send-money-from/[from]/to/[to]/page.tsx new file mode 100644 index 000000000..0ec5bf995 --- /dev/null +++ b/src/app/[locale]/(marketing)/send-money-from/[from]/to/[to]/page.tsx @@ -0,0 +1,68 @@ +import { notFound } from 'next/navigation' +import { type Metadata } from 'next' +import { generateMetadata as metadataHelper } from '@/app/metadata' +import { CORRIDORS, getCountryName } from '@/data/seo' +import { SUPPORTED_LOCALES, getAlternates, isValidLocale } from '@/i18n/config' +import { getTranslations } from '@/i18n' +import { ContentPage } from '@/components/Marketing/ContentPage' +import { readCorridorContentLocalized } from '@/lib/content' +import { renderContent } from '@/lib/mdx' + +interface PageProps { + params: Promise<{ locale: string; from: string; to: string }> +} + +export async function generateStaticParams() { + return SUPPORTED_LOCALES.flatMap((locale) => CORRIDORS.map((c) => ({ locale, from: c.from, to: c.to }))) +} +export const dynamicParams = false + +export async function generateMetadata({ params }: PageProps): Promise<Metadata> { + const { locale, from, to } = await params + if (!isValidLocale(locale)) return {} + + if (!CORRIDORS.some((c) => c.from === from && c.to === to)) return {} + + const mdxContent = readCorridorContentLocalized(to, from, locale) + if (!mdxContent || mdxContent.frontmatter.published === false) return {} + + const fm = mdxContent.frontmatter as { title?: string; description?: string } + if (!fm.title || !fm.description) return {} + + return { + ...metadataHelper({ + title: fm.title, + description: fm.description, + canonical: `/${locale}/send-money-from/${from}/to/${to}`, + }), + alternates: { + canonical: `/${locale}/send-money-from/${from}/to/${to}`, + languages: getAlternates('send-money-from', `${from}/to/${to}`), + }, + } +} + +export default async function FromToCorridorPage({ params }: PageProps) { + const { locale, from, to } = await params + if (!isValidLocale(locale)) notFound() + if (!CORRIDORS.some((c) => c.from === from && c.to === to)) notFound() + + const mdxSource = readCorridorContentLocalized(to, from, locale) + if (!mdxSource || mdxSource.frontmatter.published === false) notFound() + + const { content } = await renderContent(mdxSource.body) + const i18n = getTranslations(locale) + const fromName = getCountryName(from, locale) + const toName = getCountryName(to, locale) + + return ( + <ContentPage + breadcrumbs={[ + { name: i18n.home, href: '/' }, + { name: `${fromName} → ${toName}`, href: `/${locale}/send-money-from/${from}/to/${to}` }, + ]} + > + {content} + </ContentPage> + ) +} diff --git a/src/app/[locale]/(marketing)/send-money-to/[country]/page.tsx b/src/app/[locale]/(marketing)/send-money-to/[country]/page.tsx new file mode 100644 index 000000000..3e09b2f79 --- /dev/null +++ b/src/app/[locale]/(marketing)/send-money-to/[country]/page.tsx @@ -0,0 +1,70 @@ +import { notFound } from 'next/navigation' +import { type Metadata } from 'next' +import { generateMetadata as metadataHelper } from '@/app/metadata' +import { COUNTRIES_SEO, getCountryName } from '@/data/seo' +import { SUPPORTED_LOCALES, getAlternates, isValidLocale, localizedPath } from '@/i18n/config' +import type { Locale } from '@/i18n/types' +import { getTranslations } from '@/i18n' +import { ContentPage } from '@/components/Marketing/ContentPage' +import { readPageContentLocalized } from '@/lib/content' +import { renderContent } from '@/lib/mdx' + +interface PageProps { + params: Promise<{ locale: string; country: string }> +} + +export async function generateStaticParams() { + const countries = Object.keys(COUNTRIES_SEO) + return SUPPORTED_LOCALES.flatMap((locale) => countries.map((country) => ({ locale, country }))) +} +export const dynamicParams = false + +export async function generateMetadata({ params }: PageProps): Promise<Metadata> { + const { locale, country } = await params + if (!isValidLocale(locale)) return {} + + const seo = COUNTRIES_SEO[country] + if (!seo) return {} + + const mdxContent = readPageContentLocalized<{ title: string; description: string; published?: boolean }>( + 'send-to', + country, + locale + ) + if (!mdxContent || mdxContent.frontmatter.published === false) return {} + + return { + ...metadataHelper({ + title: mdxContent.frontmatter.title, + description: mdxContent.frontmatter.description, + canonical: `/${locale}/send-money-to/${country}`, + }), + alternates: { + canonical: `/${locale}/send-money-to/${country}`, + languages: getAlternates('send-money-to', country), + }, + } +} + +export default async function SendMoneyToCountryPageLocalized({ params }: PageProps) { + const { locale, country } = await params + if (!isValidLocale(locale)) notFound() + + const mdxSource = readPageContentLocalized('send-to', country, locale) + if (!mdxSource || mdxSource.frontmatter.published === false) notFound() + + const { content } = await renderContent(mdxSource.body) + const i18n = getTranslations(locale) + const countryName = getCountryName(country, locale) + + return ( + <ContentPage + breadcrumbs={[ + { name: i18n.home, href: '/' }, + { name: countryName, href: localizedPath('send-money-to', locale, country) }, + ]} + > + {content} + </ContentPage> + ) +} diff --git a/src/app/[locale]/(marketing)/team/page.tsx b/src/app/[locale]/(marketing)/team/page.tsx new file mode 100644 index 000000000..5f523c846 --- /dev/null +++ b/src/app/[locale]/(marketing)/team/page.tsx @@ -0,0 +1,128 @@ +import { notFound } from 'next/navigation' +import { type Metadata } from 'next' +import { generateMetadata as metadataHelper } from '@/app/metadata' +import { TEAM_MEMBERS } from '@/data/team' +import { MarketingHero } from '@/components/Marketing/MarketingHero' +import { MarketingShell } from '@/components/Marketing/MarketingShell' +import { JsonLd } from '@/components/Marketing/JsonLd' +import { Card } from '@/components/0_Bruddle/Card' +import { SUPPORTED_LOCALES, getAlternates, isValidLocale } from '@/i18n/config' +import type { Locale } from '@/i18n/types' +import { getTranslations } from '@/i18n' + +interface PageProps { + params: Promise<{ locale: string }> +} + +export async function generateStaticParams() { + if (process.env.NODE_ENV === 'production') return [] + return SUPPORTED_LOCALES.map((locale) => ({ locale })) +} + +export async function generateMetadata({ params }: PageProps): Promise<Metadata> { + const { locale } = await params + if (!isValidLocale(locale)) return {} + + const i18n = getTranslations(locale as Locale) + + return { + ...metadataHelper({ + title: `${i18n.teamTitle} | Peanut`, + description: i18n.teamSubtitle, + canonical: `/${locale}/team`, + }), + alternates: { + canonical: `/${locale}/team`, + languages: getAlternates('team'), + }, + } +} + +export default async function TeamPage({ params }: PageProps) { + const { locale } = await params + if (!isValidLocale(locale)) notFound() + + const i18n = getTranslations(locale as Locale) + + const orgSchema = { + '@context': 'https://schema.org', + '@type': 'Organization', + name: 'Peanut', + url: 'https://peanut.me', + member: TEAM_MEMBERS.map((m) => ({ + '@type': 'Person', + name: m.name, + jobTitle: m.role, + ...(m.social?.linkedin ? { sameAs: [m.social.linkedin] } : {}), + })), + } + + return ( + <> + <JsonLd data={orgSchema} /> + + <MarketingHero title={i18n.teamTitle} subtitle={i18n.teamSubtitle} ctaText="" /> + + <MarketingShell> + <div className="grid gap-6 md:grid-cols-2"> + {TEAM_MEMBERS.map((member) => ( + <Card key={member.slug} className="gap-3 p-6"> + {member.image ? ( + <img + src={member.image} + alt={member.name} + width={80} + height={80} + className="rounded-full border border-n-1" + /> + ) : ( + <div className="flex size-20 items-center justify-center rounded-full bg-primary-1/30 text-2xl font-bold"> + {member.name.charAt(0)} + </div> + )} + <div> + <h2 className="text-lg font-bold">{member.name}</h2> + <p className="text-sm font-medium text-gray-500">{member.role}</p> + </div> + <p className="text-sm text-gray-700">{member.bio}</p> + {member.social && ( + <div className="flex gap-3"> + {member.social.linkedin && ( + <a + href={member.social.linkedin} + className="text-sm text-black underline" + target="_blank" + rel="noopener noreferrer" + > + LinkedIn + </a> + )} + {member.social.twitter && ( + <a + href={member.social.twitter} + className="text-sm text-black underline" + target="_blank" + rel="noopener noreferrer" + > + X / Twitter + </a> + )} + {member.social.github && ( + <a + href={member.social.github} + className="text-sm text-black underline" + target="_blank" + rel="noopener noreferrer" + > + GitHub + </a> + )} + </div> + )} + </Card> + ))} + </div> + </MarketingShell> + </> + ) +} diff --git a/src/app/actions/card.ts b/src/app/actions/card.ts new file mode 100644 index 000000000..b6436ea3d --- /dev/null +++ b/src/app/actions/card.ts @@ -0,0 +1,105 @@ +'use server' + +import { PEANUT_API_URL } from '@/constants/general.consts' +import { fetchWithSentry } from '@/utils/sentry.utils' +import { getJWTCookie } from '@/utils/cookie-migration.utils' + +const API_KEY = process.env.PEANUT_API_KEY +if (!API_KEY) { + throw new Error('PEANUT_API_KEY environment variable is not set') +} + +export interface CardInfoResponse { + hasPurchased: boolean + chargeStatus?: string + chargeUuid?: string + paymentUrl?: string + isEligible: boolean + eligibilityReason?: string + price: number + currentTier: number + slotsRemaining?: number + recentPurchases?: number +} + +export interface CardPurchaseResponse { + chargeUuid: string + paymentUrl: string + price: number + // Semantic URL components for direct navigation (avoids extra API call) + recipientAddress: string + chainId: string + tokenAmount: string + tokenSymbol: string +} + +export interface CardErrorResponse { + error: string + message: string + chargeUuid?: string +} + +/** + * Get card pioneer info for the authenticated user + */ +export const getCardInfo = async (): Promise<{ data?: CardInfoResponse; error?: string }> => { + const jwtToken = (await getJWTCookie())?.value + if (!jwtToken) { + return { error: 'Authentication required' } + } + + try { + const response = await fetchWithSentry(`${PEANUT_API_URL}/card`, { + method: 'GET', + headers: { + Authorization: `Bearer ${jwtToken}`, + 'api-key': API_KEY, + }, + }) + + if (!response.ok) { + const errorData = await response.json() + return { error: errorData.message || 'Failed to get card info' } + } + + const data = await response.json() + return { data } + } catch (e: any) { + return { error: e.message || 'An unexpected error occurred' } + } +} + +/** + * Initiate card pioneer purchase + */ +export const purchaseCard = async (): Promise<{ data?: CardPurchaseResponse; error?: string; errorCode?: string }> => { + const jwtToken = (await getJWTCookie())?.value + if (!jwtToken) { + return { error: 'Authentication required', errorCode: 'NOT_AUTHENTICATED' } + } + + try { + const response = await fetchWithSentry(`${PEANUT_API_URL}/card/purchase`, { + method: 'POST', + headers: { + Authorization: `Bearer ${jwtToken}`, + 'api-key': API_KEY, + 'Content-Type': 'application/json', + }, + body: JSON.stringify({}), + }) + + if (!response.ok) { + const errorData: CardErrorResponse = await response.json() + return { + error: errorData.message || 'Failed to initiate purchase', + errorCode: errorData.error, + } + } + + const data = await response.json() + return { data } + } catch (e: any) { + return { error: e.message || 'An unexpected error occurred' } + } +} diff --git a/src/app/actions/currency.ts b/src/app/actions/currency.ts index 7be1c2a88..39a1d84be 100644 --- a/src/app/actions/currency.ts +++ b/src/app/actions/currency.ts @@ -12,12 +12,14 @@ export const getCurrencyPrice = async (currencyCode: string): Promise<{ buy: num if (currencyCode === 'USD') { buy = 1 sell = 1 - } else if (['EUR', 'MXN'].includes(currencyCode)) { + } else if (['EUR', 'MXN', 'GBP'].includes(currencyCode)) { let accountType: AccountType if (currencyCode === 'EUR') { accountType = AccountType.IBAN } else if (currencyCode === 'MXN') { accountType = AccountType.CLABE + } else if (currencyCode === 'GBP') { + accountType = AccountType.GB } else { throw new Error('Invalid currency code') } diff --git a/src/app/actions/types/users.types.ts b/src/app/actions/types/users.types.ts index 79811164a..63ca3b0f8 100644 --- a/src/app/actions/types/users.types.ts +++ b/src/app/actions/types/users.types.ts @@ -3,6 +3,8 @@ export enum BridgeEndorsementType { BASE = 'base', SEPA = 'sepa', SPEI = 'spei', + PIX = 'pix', + FASTER_PAYMENTS = 'faster_payments', } // this type represents the detailed response from our initiate-kyc endpoint @@ -24,6 +26,7 @@ export enum BridgeAccountType { IBAN = 'iban', US = 'us', CLABE = 'clabe', + GB = 'gb', // uk bank accounts (sort code + account number) } // matches the BridgeAccountOwnerType enum on the backend @@ -53,4 +56,5 @@ export interface AddBankAccountPayload { } bic?: string routingNumber?: string + sortCode?: string // uk bank accounts } diff --git a/src/app/api/exchange-rate/route.ts b/src/app/api/exchange-rate/route.ts index 8131a2493..3c061ba43 100644 --- a/src/app/api/exchange-rate/route.ts +++ b/src/app/api/exchange-rate/route.ts @@ -42,8 +42,8 @@ export async function GET(request: NextRequest) { if ( MANTECA_CURRENCIES.has(fromUc) || MANTECA_CURRENCIES.has(toUc) || - ['EUR', 'MXN'].includes(fromUc) || - ['EUR', 'MXN'].includes(toUc) + ['EUR', 'MXN', 'GBP'].includes(fromUc) || + ['EUR', 'MXN', 'GBP'].includes(toUc) ) { const currencyPriceRate = await fetchFromCurrencyPrice(fromUc, toUc) if (currencyPriceRate !== null) { @@ -105,8 +105,8 @@ async function getExchangeRate(from: string, to: string): Promise<number | null> if ( MANTECA_CURRENCIES.has(from) || MANTECA_CURRENCIES.has(to) || - ['EUR', 'MXN'].includes(from) || - ['EUR', 'MXN'].includes(to) + ['EUR', 'MXN', 'GBP'].includes(from) || + ['EUR', 'MXN', 'GBP'].includes(to) ) { return await fetchFromCurrencyPrice(from, to) } @@ -122,7 +122,7 @@ async function getExchangeRate(from: string, to: string): Promise<number | null> async function fetchFromCurrencyPrice(from: string, to: string): Promise<number | null> { console.log('Fetching from getCurrencyPrice') try { - if (from === 'USD' && (MANTECA_CURRENCIES.has(to) || ['EUR', 'MXN'].includes(to))) { + if (from === 'USD' && (MANTECA_CURRENCIES.has(to) || ['EUR', 'MXN', 'GBP'].includes(to))) { // USD → other currency: use sell rate (selling USD to get other currency) const { sell } = await getCurrencyPrice(to) if (!isFinite(sell) || sell <= 0) { @@ -130,7 +130,7 @@ async function fetchFromCurrencyPrice(from: string, to: string): Promise<number return null } return sell - } else if ((MANTECA_CURRENCIES.has(from) || ['EUR', 'MXN'].includes(from)) && to === 'USD') { + } else if ((MANTECA_CURRENCIES.has(from) || ['EUR', 'MXN', 'GBP'].includes(from)) && to === 'USD') { // Other currency → USD: use buy rate (buying USD with other currency) const { buy } = await getCurrencyPrice(from) if (!isFinite(buy) || buy <= 0) { @@ -139,8 +139,8 @@ async function fetchFromCurrencyPrice(from: string, to: string): Promise<number } return 1 / buy } else if ( - (MANTECA_CURRENCIES.has(from) || ['EUR', 'MXN'].includes(from)) && - (MANTECA_CURRENCIES.has(to) || ['EUR', 'MXN'].includes(to)) + (MANTECA_CURRENCIES.has(from) || ['EUR', 'MXN', 'GBP'].includes(from)) && + (MANTECA_CURRENCIES.has(to) || ['EUR', 'MXN', 'GBP'].includes(to)) ) { // Other currency → Other currency: convert through USD const fromPrices = await getCurrencyPrice(from) diff --git a/src/app/api/peanut/user/get-jwt-token/route.ts b/src/app/api/peanut/user/get-jwt-token/route.ts index 158178ea0..4f8a1c187 100644 --- a/src/app/api/peanut/user/get-jwt-token/route.ts +++ b/src/app/api/peanut/user/get-jwt-token/route.ts @@ -43,6 +43,7 @@ export async function POST(request: NextRequest) { secure: process.env.NODE_ENV === 'production', path: '/', sameSite: 'lax', + maxAge: 30 * 24 * 60 * 60, // 30 days }) return new NextResponse(JSON.stringify(data), { diff --git a/src/app/api/peanut/user/get-user-from-cookie/__tests__/route.test.ts b/src/app/api/peanut/user/get-user-from-cookie/__tests__/route.test.ts new file mode 100644 index 000000000..1747a237a --- /dev/null +++ b/src/app/api/peanut/user/get-user-from-cookie/__tests__/route.test.ts @@ -0,0 +1,124 @@ +/** + * @jest-environment node + */ +import { NextRequest } from 'next/server' + +// --- Mocks --- + +const mockCookieGet = jest.fn() +const mockCookieSet = jest.fn() +jest.mock('next/headers', () => ({ + cookies: jest.fn(async () => ({ + get: mockCookieGet, + set: mockCookieSet, + })), +})) + +// Mock getJWTCookie to use our mock cookie store +jest.mock('@/utils/cookie-migration.utils', () => ({ + getJWTCookie: jest.fn(async () => mockCookieGet('jwt-token')), +})) + +const mockFetch = jest.fn() +jest.mock('@/utils/sentry.utils', () => ({ + fetchWithSentry: (...args: unknown[]) => mockFetch(...args), +})) + +jest.mock('@/constants/general.consts', () => ({ + PEANUT_API_URL: 'https://api.test', +})) + +// --- Tests --- + +import { GET } from '../route' + +function makeRequest() { + return new NextRequest('http://localhost/api/peanut/user/get-user-from-cookie') +} + +beforeEach(() => { + jest.clearAllMocks() + process.env.PEANUT_API_KEY = 'test-api-key' +}) + +describe('GET /api/peanut/user/get-user-from-cookie', () => { + it('returns 400 when no JWT cookie exists', async () => { + mockCookieGet.mockReturnValue(undefined) + + const res = await GET(makeRequest()) + + expect(res.status).toBe(400) + expect(mockFetch).not.toHaveBeenCalled() + }) + + it('returns user data and refreshes cookie on successful auth (200)', async () => { + mockCookieGet.mockReturnValue({ name: 'jwt-token', value: 'valid-token' }) + mockFetch.mockResolvedValue({ + status: 200, + json: async () => ({ user: { userId: '123', email: 'test@test.com' } }), + }) + + const res = await GET(makeRequest()) + const body = await res.json() + + expect(res.status).toBe(200) + expect(body.user.userId).toBe('123') + + // Cookie should be refreshed with 30-day maxAge + expect(mockCookieSet).toHaveBeenCalledWith('jwt-token', 'valid-token', { + httpOnly: false, + secure: false, // NODE_ENV !== 'production' in tests + path: '/', + sameSite: 'lax', + maxAge: 30 * 24 * 60 * 60, + }) + }) + + it('clears cookie and sets Clear-Site-Data on 401 (expired JWT)', async () => { + mockCookieGet.mockReturnValue({ name: 'jwt-token', value: 'expired-token' }) + mockFetch.mockResolvedValue({ + status: 401, + }) + + const res = await GET(makeRequest()) + + expect(res.status).toBe(401) + + // Cookie should be cleared + expect(res.headers.get('Set-Cookie')).toBe('jwt-token=; Path=/; Max-Age=0; SameSite=Lax') + expect(res.headers.get('Clear-Site-Data')).toBe('"cache"') + + // Cookie should NOT be refreshed + expect(mockCookieSet).not.toHaveBeenCalled() + }) + + it('does NOT refresh cookie on non-200 responses', async () => { + mockCookieGet.mockReturnValue({ name: 'jwt-token', value: 'some-token' }) + mockFetch.mockResolvedValue({ + status: 500, + }) + + const res = await GET(makeRequest()) + + expect(res.status).toBe(500) + expect(mockCookieSet).not.toHaveBeenCalled() + }) + + it('still returns 200 if cookie refresh fails', async () => { + mockCookieGet.mockReturnValue({ name: 'jwt-token', value: 'valid-token' }) + mockFetch.mockResolvedValue({ + status: 200, + json: async () => ({ user: { userId: '123' } }), + }) + mockCookieSet.mockImplementation(() => { + throw new Error('cookies() can only be used in server components') + }) + + const res = await GET(makeRequest()) + + // Should still succeed — cookie refresh is best-effort + expect(res.status).toBe(200) + const body = await res.json() + expect(body.user.userId).toBe('123') + }) +}) diff --git a/src/app/api/peanut/user/get-user-from-cookie/route.ts b/src/app/api/peanut/user/get-user-from-cookie/route.ts index 5e4814ccc..29e7b172c 100644 --- a/src/app/api/peanut/user/get-user-from-cookie/route.ts +++ b/src/app/api/peanut/user/get-user-from-cookie/route.ts @@ -1,6 +1,7 @@ import { PEANUT_API_URL } from '@/constants/general.consts' import { fetchWithSentry } from '@/utils/sentry.utils' import { NextRequest, NextResponse } from 'next/server' +import { cookies } from 'next/headers' import { getJWTCookie } from '@/utils/cookie-migration.utils' export async function GET(_request: NextRequest) { @@ -39,6 +40,23 @@ export async function GET(_request: NextRequest) { } const data = await response.json() + + // Refresh cookie expiry only when backend confirms JWT is valid. + // This keeps active users logged in indefinitely without refreshing + // expired JWTs (which caused infinite loading loops). + try { + const cookieStore = await cookies() + cookieStore.set('jwt-token', token.value, { + httpOnly: false, + secure: process.env.NODE_ENV === 'production', + path: '/', + sameSite: 'lax', + maxAge: 30 * 24 * 60 * 60, // 30 days + }) + } catch { + // cookie refresh is best-effort + } + return new NextResponse(JSON.stringify(data), { status: 200, headers: { diff --git a/src/app/api/peanut/user/login-user/route.ts b/src/app/api/peanut/user/login-user/route.ts index dcffd05c5..b81446403 100644 --- a/src/app/api/peanut/user/login-user/route.ts +++ b/src/app/api/peanut/user/login-user/route.ts @@ -40,6 +40,7 @@ export async function POST(request: NextRequest) { secure: process.env.NODE_ENV === 'production', path: '/', sameSite: 'lax', + maxAge: 30 * 24 * 60 * 60, // 30 days }) return new NextResponse(JSON.stringify(data), { diff --git a/src/app/api/peanut/user/register-user/route.ts b/src/app/api/peanut/user/register-user/route.ts index 87da22491..0b07fac51 100644 --- a/src/app/api/peanut/user/register-user/route.ts +++ b/src/app/api/peanut/user/register-user/route.ts @@ -46,6 +46,7 @@ export async function POST(request: NextRequest) { secure: process.env.NODE_ENV === 'production', path: '/', sameSite: 'lax', + maxAge: 30 * 24 * 60 * 60, // 30 days }) return new NextResponse(JSON.stringify(data), { status: 200, diff --git a/src/app/api/proxy/[...slug]/route.ts b/src/app/api/proxy/[...slug]/route.ts index 773951e2f..7eeb41e90 100644 --- a/src/app/api/proxy/[...slug]/route.ts +++ b/src/app/api/proxy/[...slug]/route.ts @@ -26,8 +26,6 @@ export async function POST(request: NextRequest) { }) } - jsonToPass.apiKey = process.env.PEANUT_API_KEY! - const userIp = request.headers.get('x-forwarded-for') || request.headers.get('x-real-ip') const headersToPass = { 'Content-Type': 'application/json', diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 73ec69d1c..da454dad8 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -8,6 +8,7 @@ import { PEANUT_API_URL, BASE_URL } from '@/constants/general.consts' import { type Metadata } from 'next' const baseUrl = BASE_URL || 'https://peanut.me' +const IS_PRODUCTION_DOMAIN = baseUrl === 'https://peanut.me' export const metadata: Metadata = { title: 'Peanut - Instant Global P2P Payments in Digital Dollars', @@ -15,8 +16,11 @@ export const metadata: Metadata = { 'Send and receive money instantly with Peanut - a fast, peer-to-peer payments app powered by digital dollars. Easily transfer funds across borders. Enjoy cheap, instant remittances and cash out to local banks without technical hassle.', metadataBase: new URL(baseUrl), icons: { icon: '/favicon.ico' }, + alternates: { canonical: '/' }, keywords: 'peer-to-peer payments, send money instantly, request money, fast global transfers, remittances, digital dollar transfers, Latin America, Argentina, Brazil, P2P payments, crypto payments, stablecoin, digital dollars', + // Block staging/preview deploys from indexing (belt-and-suspenders with robots.ts) + robots: IS_PRODUCTION_DOMAIN ? { index: true, follow: true } : { index: false, follow: false }, openGraph: { type: 'website', title: 'Peanut - Instant Global P2P Payments in Digital Dollars', @@ -38,6 +42,51 @@ export const metadata: Metadata = { applicationName: process.env.NODE_ENV === 'development' ? 'Peanut Dev' : 'Peanut', } +// JSON-LD structured data — site-wide schemas (Organization, WebApplication, WebSite) +// FAQPage schema moved to page.tsx (homepage) where it belongs +const jsonLd = { + '@context': 'https://schema.org', + '@graph': [ + { + '@type': 'Organization', + '@id': `${baseUrl}/#organization`, + name: 'Peanut', + url: baseUrl, + logo: { + '@type': 'ImageObject', + url: `${baseUrl}/metadata-img.png`, + }, + sameAs: [ + 'https://twitter.com/PeanutProtocol', + 'https://github.com/peanutprotocol', + 'https://www.linkedin.com/company/peanut-trade/', + ], + }, + { + '@type': 'WebApplication', + '@id': `${baseUrl}/#app`, + name: 'Peanut', + url: baseUrl, + applicationCategory: 'FinanceApplication', + operatingSystem: 'Web', + offers: { + '@type': 'Offer', + price: '0', + priceCurrency: 'USD', + }, + description: + 'Send and receive money instantly with Peanut — a fast, peer-to-peer payments app powered by digital dollars.', + }, + { + '@type': 'WebSite', + '@id': `${baseUrl}/#website`, + name: 'Peanut', + url: baseUrl, + publisher: { '@id': `${baseUrl}/#organization` }, + }, + ], +} + const roboto = Roboto_Flex({ subsets: ['latin'], display: 'swap', @@ -62,16 +111,19 @@ const sniglet = Sniglet({ const knerdOutline = localFont({ src: '../assets/fonts/knerd-outline.ttf', variable: '--font-knerd-outline', + display: 'swap', }) const knerdFilled = localFont({ src: '../assets/fonts/knerd-filled.ttf', variable: '--font-knerd-filled', + display: 'swap', }) const robotoFlexBold = localFont({ src: '../assets/fonts/roboto-flex-bold.ttf', variable: '--font-roboto-flex-bold', + display: 'swap', }) export const viewport: Viewport = { @@ -91,6 +143,12 @@ export default function RootLayout({ children }: { children: React.ReactNode }) <head> <meta name="color-scheme" content="light" /> + {/* JSON-LD structured data */} + <script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }} /> + + {/* AI-readable product description (llms.txt spec) */} + <link rel="author" type="text/markdown" href="/llms.txt" /> + {/* DNS prefetch for API */} <link rel="dns-prefetch" href={apiHostname} /> <link rel="preconnect" href={apiHostname} crossOrigin="anonymous" /> diff --git a/src/app/lp/card/CardLandingPage.tsx b/src/app/lp/card/CardLandingPage.tsx new file mode 100644 index 000000000..913f9eb40 --- /dev/null +++ b/src/app/lp/card/CardLandingPage.tsx @@ -0,0 +1,865 @@ +'use client' +import { motion } from 'framer-motion' +import Image from 'next/image' +import { Button } from '@/components/0_Bruddle/Button' +import { FAQsPanel } from '@/components/Global/FAQs' +import PioneerCard3D from '@/components/LandingPage/PioneerCard3D' +import { Marquee } from '@/components/LandingPage' +import { useAuth } from '@/context/authContext' +import { useRouter } from 'next/navigation' +import { Star, HandThumbsUp } from '@/assets' +import { useEffect } from 'react' +import underMaintenanceConfig from '@/config/underMaintenance.config' + +const faqQuestions = [ + { + id: '0', + question: 'What is Card Pioneers?', + answer: 'Card Pioneers is the early-access program for the Peanut Card. Reserve a spot, get priority rollout access, and unlock Pioneer perks like $5 for every friend you refer.', + }, + { + id: '1', + question: 'How does it work?', + answer: '1. Reserve your spot by adding $10 in starter card balance. 2. Share your Peanut invite link. 3. When someone joins Card Pioneers through your invite, you earn $5 instantly, plus rewards every time they spend - forever.', + }, + { + id: '2', + question: 'Is the $10 refundable?', + answer: "Your $10 becomes starter balance when your card launches. If you're found not eligible at launch (for example: your region isn't supported, or you can't complete required verification), you can request a refund.", + }, + { + id: '3', + question: 'Where is the card available?', + answer: "We're rolling out by region in stages: US, Latin America, and Africa. You'll see eligibility details during signup.", + }, + { + id: '4', + question: "Do I earn from my invites' invites too?", + answer: 'Yes! You earn a smaller part for your entire invite tree. So if you invite someone who becomes a power-referrer, you earn from everyone they bring in too.', + }, +] + +const CardLandingPage = () => { + const { user } = useAuth() + const router = useRouter() + // feature flag: redirect to landing if card pioneers is disabled + useEffect(() => { + if (underMaintenanceConfig.disableCardPioneers) { + router.replace('/') + } + }, [router]) + + if (underMaintenanceConfig.disableCardPioneers) { + return null + } + + const handleCTA = () => { + if (user) { + router.push('/card') + } else { + router.push('/setup?redirect_uri=/card') + } + } + + // Marquee copy from CARD_coremessaging.md + const marqueeProps = { + visible: true, + message: ['EARLY = EARN', 'BUILD YOUR TREE', 'ONE LINK', 'LIFETIME UPSIDE', '$5 PER INVITE', 'EARN FOREVER'], + } + + return ( + <> + {/* Hero Section - Yellow with card */} + <section id="hero" className="relative overflow-hidden bg-yellow-1 py-16 md:py-24"> + <FloatingStars /> + + <div className="relative mx-auto max-w-6xl px-4"> + <div className="flex flex-col items-center text-center"> + <motion.h1 + className="font-roboto-flex-extrabold text-[3rem] font-extraBlack leading-[0.95] md:text-7xl lg:text-8xl" + initial={{ opacity: 0, y: 30 }} + animate={{ opacity: 1, y: 0 }} + transition={{ duration: 0.6 }} + > + YOUR DOLLARS. + <br /> + EVERYWHERE. + </motion.h1> + + <motion.p + className="font-roboto-flex mt-6 max-w-xl text-xl md:text-2xl" + initial={{ opacity: 0 }} + animate={{ opacity: 1 }} + transition={{ duration: 0.5, delay: 0.2 }} + > + Pay with the peanut card. Earn with every purchase, yours or your friends. + <br /> + <br /> + <strong>Self-custodial. Best rates. No hidden fees.</strong> + </motion.p> + + <motion.div + className="my-10 w-full max-w-96" + initial={{ opacity: 0, scale: 0.9, rotateY: -15 }} + animate={{ opacity: 1, scale: 1, rotateY: 0 }} + transition={{ duration: 0.8, delay: 0.3 }} + > + <PioneerCard3D /> + </motion.div> + + <motion.div + initial={{ opacity: 0, y: 20 }} + animate={{ opacity: 1, y: 0 }} + transition={{ duration: 0.5, delay: 0.5 }} + > + <Button + shadowSize="4" + onClick={handleCTA} + className="bg-white px-14 py-5 text-xl font-extrabold hover:bg-white/90" + > + JOIN PIONEERS + </Button> + <p className="font-roboto-flex mt-3 text-sm opacity-70"> + $10 starter balance = your spot secured + </p> + </motion.div> + </div> + </div> + </section> + + <Marquee {...marqueeProps} /> + + {/* How it works - Cream */} + <section + id="how-it-works" + className="relative overflow-hidden py-20" + style={{ backgroundColor: '#F9F4F0' }} + > + <FloatingStars /> + + <div className="relative mx-auto max-w-5xl px-4"> + <motion.h2 + className="font-roboto-flex-extrabold text-center text-4xl font-extraBlack md:text-6xl" + initial={{ opacity: 0, y: 20 }} + whileInView={{ opacity: 1, y: 0 }} + viewport={{ once: true }} + > + HOW IT WORKS + </motion.h2> + + <div className="mt-16 flex flex-col gap-4 md:flex-row"> + <StepCard + num="01" + title="RESERVE" + desc="Add $10 starter balance. It's yours to spend when your card activates." + color="bg-yellow-1" + delay={0} + /> + <StepCard + num="02" + title="INVITE" + desc="Share your link. Earn $5 instantly, and earn more forever for every friend you invite." + color="bg-secondary-3" + delay={0.1} + /> + <StepCard + num="03" + title="SPEND" + desc="When we launch in your region, you're first in line. Spend globally." + color="bg-primary-1" + textLight + delay={0.2} + /> + </div> + </div> + </section> + + <Marquee {...marqueeProps} /> + + {/* Earn Forever - Cream Background */} + <section + id="earn-forever" + className="relative overflow-hidden py-20" + style={{ backgroundColor: '#F9F4F0' }} + > + <FloatingStars /> + <div className="mx-auto max-w-5xl px-4"> + <div className="flex flex-col items-center gap-12 md:flex-row"> + {/* Visual - Simplified Invite Visual */} + <motion.div + className="w-full md:w-1/2" + initial={{ opacity: 0, x: -30 }} + whileInView={{ opacity: 1, x: 0 }} + viewport={{ once: true }} + transition={{ duration: 0.6 }} + > + <div className="relative mx-auto" style={{ width: 340, height: 380 }}> + {/* + LAYOUT - Calculated with Python trigonometry + Container: 340x380 + + L0 (YOU): center (170, 190), 80x80px + L1 nodes: 48x48px, 120px from YOU + - Top: center (170, 70) - outward angle -90° + - Bottom-left: center (70, 310) - outward angle 129.8° + - Bottom-right: center (270, 310) - outward angle 50.2° + + L2 nodes: 32x32px, 55px from parent L1 center, fanning at -45°, 0°, +45° from outward direction + Top L1 (170,70): (131,31), (170,15), (209,31) + Bottom-left L1 (70,310): (75,365), (35,352), (15,315) + Bottom-right L1 (270,310): (325,315), (305,352), (265,365) + */} + + {/* Connection lines */} + <svg width="340" height="380" className="absolute left-0 top-0"> + {/* L0 to L1 edges */} + <line + x1="170" + y1="190" + x2="170" + y2="70" + stroke="#000" + strokeOpacity="0.15" + strokeWidth="2" + /> + <line + x1="170" + y1="190" + x2="70" + y2="310" + stroke="#000" + strokeOpacity="0.15" + strokeWidth="2" + /> + <line + x1="170" + y1="190" + x2="270" + y2="310" + stroke="#000" + strokeOpacity="0.15" + strokeWidth="2" + /> + + {/* Top L1 (170,70) to L2 */} + <line + x1="170" + y1="70" + x2="131" + y2="31" + stroke="#000" + strokeOpacity="0.1" + strokeWidth="1" + /> + <line + x1="170" + y1="70" + x2="170" + y2="15" + stroke="#000" + strokeOpacity="0.1" + strokeWidth="1" + /> + <line + x1="170" + y1="70" + x2="209" + y2="31" + stroke="#000" + strokeOpacity="0.1" + strokeWidth="1" + /> + + {/* Bottom-left L1 (70,310) to L2 */} + <line + x1="70" + y1="310" + x2="75" + y2="365" + stroke="#000" + strokeOpacity="0.1" + strokeWidth="1" + /> + <line + x1="70" + y1="310" + x2="35" + y2="352" + stroke="#000" + strokeOpacity="0.1" + strokeWidth="1" + /> + <line + x1="70" + y1="310" + x2="15" + y2="315" + stroke="#000" + strokeOpacity="0.1" + strokeWidth="1" + /> + + {/* Bottom-right L1 (270,310) to L2 */} + <line + x1="270" + y1="310" + x2="325" + y2="315" + stroke="#000" + strokeOpacity="0.1" + strokeWidth="1" + /> + <line + x1="270" + y1="310" + x2="305" + y2="352" + stroke="#000" + strokeOpacity="0.1" + strokeWidth="1" + /> + <line + x1="270" + y1="310" + x2="265" + y2="365" + stroke="#000" + strokeOpacity="0.1" + strokeWidth="1" + /> + </svg> + + {/* L0: YOU node - center (170,190), top-left (130,150) */} + <div + className="absolute flex items-center justify-center rounded-full border-4 border-n-1 bg-yellow-1 text-xl font-black" + style={{ width: 80, height: 80, top: 150, left: 130 }} + > + YOU + </div> + + {/* +$5 BADGES - at visual midpoint between node edges + Top edge: YOU bottom (y=150) to L1 top (y=94) -> visual mid = (150+94)/2 = 122, badge top = 114 + Bottom edges: at midpoint of line between centers + */} + <span + className="absolute rounded-full bg-primary-1 px-2 py-0.5 text-[10px] font-bold text-white" + style={{ top: 114, left: 155 }} + > + +$5 + </span> + <span + className="absolute rounded-full bg-primary-1 px-2 py-0.5 text-[10px] font-bold text-white" + style={{ top: 242, left: 103 }} + > + +$5 + </span> + <span + className="absolute rounded-full bg-primary-1 px-2 py-0.5 text-[10px] font-bold text-white" + style={{ top: 242, left: 207 }} + > + +$5 + </span> + + {/* L1: Top primary - center (170,70), top-left (146,46) */} + <div + className="absolute flex h-12 w-12 items-center justify-center rounded-full border-2 border-n-1 bg-secondary-3" + style={{ top: 46, left: 146 }} + > + <motion.img + src={HandThumbsUp.src} + alt="" + className="h-6 w-6" + animate={{ rotate: [0, 10, -10, 0] }} + transition={{ duration: 2, repeat: Infinity, delay: 0 }} + /> + </div> + + {/* L1: Bottom-left primary - center (70,310), top-left (46,286) */} + <div + className="absolute flex h-12 w-12 items-center justify-center rounded-full border-2 border-n-1 bg-secondary-3" + style={{ top: 286, left: 46 }} + > + <motion.img + src={HandThumbsUp.src} + alt="" + className="h-6 w-6" + animate={{ rotate: [0, 10, -10, 0] }} + transition={{ duration: 2, repeat: Infinity, delay: 0.3 }} + /> + </div> + + {/* L1: Bottom-right primary - center (270,310), top-left (246,286) */} + <div + className="absolute flex h-12 w-12 items-center justify-center rounded-full border-2 border-n-1 bg-secondary-3" + style={{ top: 286, left: 246 }} + > + <motion.img + src={HandThumbsUp.src} + alt="" + className="h-6 w-6" + animate={{ rotate: [0, 10, -10, 0] }} + transition={{ duration: 2, repeat: Infinity, delay: 0.6 }} + /> + </div> + + {/* L2 NODES - positioned directly at calculated centers + Each node is 32x32, so top-left = center - 16 + Top L1 (170,70): L2 at (131,31), (170,15), (209,31) + Bottom-left L1 (70,310): L2 at (75,365), (35,352), (15,315) + Bottom-right L1 (270,310): L2 at (325,315), (305,352), (265,365) + */} + + {/* Top L1's children - labels 2px gap from node edge */} + <div + className="absolute flex h-8 w-8 items-center justify-center rounded-full border border-n-1/60 bg-secondary-1" + style={{ top: 15, left: 115 }} + > + <motion.img + src={HandThumbsUp.src} + alt="" + className="h-4 w-4" + animate={{ rotate: [0, 8, -8, 0] }} + transition={{ duration: 2.5, repeat: Infinity, delay: 0.1 }} + /> + </div> + <span + className="absolute text-[8px] font-medium text-n-1/60" + style={{ top: 26, left: 98 }} + > + +% + </span> + + <div + className="absolute flex h-8 w-8 items-center justify-center rounded-full border border-n-1/60 bg-secondary-1" + style={{ top: -1, left: 154 }} + > + <motion.img + src={HandThumbsUp.src} + alt="" + className="h-4 w-4" + animate={{ rotate: [0, 8, -8, 0] }} + transition={{ duration: 2.5, repeat: Infinity, delay: 0.2 }} + /> + </div> + <span + className="absolute text-[8px] font-medium text-n-1/60" + style={{ top: -18, left: 163 }} + > + +% + </span> + + <div + className="absolute flex h-8 w-8 items-center justify-center rounded-full border border-n-1/60 bg-secondary-1" + style={{ top: 15, left: 193 }} + > + <motion.img + src={HandThumbsUp.src} + alt="" + className="h-4 w-4" + animate={{ rotate: [0, 8, -8, 0] }} + transition={{ duration: 2.5, repeat: Infinity, delay: 0.3 }} + /> + </div> + <span + className="absolute text-[8px] font-medium text-n-1/60" + style={{ top: 26, left: 227 }} + > + +% + </span> + + {/* Bottom-left L1's children */} + <div + className="absolute flex h-8 w-8 items-center justify-center rounded-full border border-n-1/60 bg-secondary-1" + style={{ top: 349, left: 59 }} + > + <motion.img + src={HandThumbsUp.src} + alt="" + className="h-4 w-4" + animate={{ rotate: [0, 8, -8, 0] }} + transition={{ duration: 2.5, repeat: Infinity, delay: 0.4 }} + /> + </div> + <span + className="absolute text-[8px] font-medium text-n-1/60" + style={{ top: 379, left: 68 }} + > + +% + </span> + + <div + className="absolute flex h-8 w-8 items-center justify-center rounded-full border border-n-1/60 bg-secondary-1" + style={{ top: 336, left: 19 }} + > + <motion.img + src={HandThumbsUp.src} + alt="" + className="h-4 w-4" + animate={{ rotate: [0, 8, -8, 0] }} + transition={{ duration: 2.5, repeat: Infinity, delay: 0.5 }} + /> + </div> + <span + className="absolute text-[8px] font-medium text-n-1/60" + style={{ top: 347, left: 2 }} + > + +% + </span> + + <div + className="absolute flex h-8 w-8 items-center justify-center rounded-full border border-n-1/60 bg-secondary-1" + style={{ top: 299, left: 0 }} + > + <motion.img + src={HandThumbsUp.src} + alt="" + className="h-4 w-4" + animate={{ rotate: [0, 8, -8, 0] }} + transition={{ duration: 2.5, repeat: Infinity, delay: 0.6 }} + /> + </div> + <span + className="absolute text-[8px] font-medium text-n-1/60" + style={{ top: 310, left: -13 }} + > + +% + </span> + + {/* Bottom-right L1's children */} + <div + className="absolute flex h-8 w-8 items-center justify-center rounded-full border border-n-1/60 bg-secondary-1" + style={{ top: 299, left: 309 }} + > + <motion.img + src={HandThumbsUp.src} + alt="" + className="h-4 w-4" + animate={{ rotate: [0, 8, -8, 0] }} + transition={{ duration: 2.5, repeat: Infinity, delay: 0.7 }} + /> + </div> + <span + className="absolute text-[8px] font-medium text-n-1/60" + style={{ top: 310, left: 343 }} + > + +% + </span> + + <div + className="absolute flex h-8 w-8 items-center justify-center rounded-full border border-n-1/60 bg-secondary-1" + style={{ top: 336, left: 289 }} + > + <motion.img + src={HandThumbsUp.src} + alt="" + className="h-4 w-4" + animate={{ rotate: [0, 8, -8, 0] }} + transition={{ duration: 2.5, repeat: Infinity, delay: 0.8 }} + /> + </div> + <span + className="absolute text-[8px] font-medium text-n-1/60" + style={{ top: 347, left: 323 }} + > + +% + </span> + + <div + className="absolute flex h-8 w-8 items-center justify-center rounded-full border border-n-1/60 bg-secondary-1" + style={{ top: 349, left: 249 }} + > + <motion.img + src={HandThumbsUp.src} + alt="" + className="h-4 w-4" + animate={{ rotate: [0, 8, -8, 0] }} + transition={{ duration: 2.5, repeat: Infinity, delay: 0.9 }} + /> + </div> + <span + className="absolute text-[8px] font-medium text-n-1/60" + style={{ top: 379, left: 258 }} + > + +% + </span> + </div> + </motion.div> + + {/* Copy */} + <motion.div + className="w-full text-center md:w-1/2 md:text-left" + initial={{ opacity: 0, x: 30 }} + whileInView={{ opacity: 1, x: 0 }} + viewport={{ once: true }} + transition={{ duration: 0.6 }} + > + <h2 className="font-roboto-flex-extrabold text-4xl font-extraBlack md:text-5xl"> + INVITE ONCE. + <br /> + EARN FOREVER. + </h2> + + <div className="mx-auto mt-8 w-fit space-y-4 md:mx-0"> + <RewardItem amount="$5" label="per Pioneer signup" /> + <RewardItem amount="%" label="from their card spending" /> + <RewardItem amount="+" label="from their invites too" /> + </div> + + <Button + shadowSize="4" + onClick={handleCTA} + className="mx-auto mt-8 bg-white px-10 py-4 text-lg font-extrabold hover:bg-white/90 md:mx-0" + > + START EARNING + </Button> + </motion.div> + </div> + </div> + </section> + + <Marquee {...marqueeProps} /> + + {/* Coverage - Yellow */} + <section id="coverage" className="relative overflow-hidden bg-yellow-1 py-20"> + <FloatingStars /> + + <div className="relative mx-auto max-w-4xl px-4 text-center"> + <motion.h2 + className="font-roboto-flex-extrabold text-4xl font-extraBlack md:text-6xl" + initial={{ opacity: 0, y: 20 }} + whileInView={{ opacity: 1, y: 0 }} + viewport={{ once: true }} + > + ROLLING OUT + <br /> + GLOBALLY + </motion.h2> + + <p className="font-roboto-flex mt-6 text-xl"> + Starting with <strong>US</strong>, <strong>Latin America</strong>, and <strong>Africa</strong> + </p> + + <motion.div + className="mt-10 flex flex-wrap justify-center gap-3" + initial={{ opacity: 0 }} + whileInView={{ opacity: 1 }} + viewport={{ once: true }} + transition={{ delay: 0.2 }} + > + {/* Individual country flags */} + {[ + { name: 'United States', code: 'us' }, + { name: 'Brazil', code: 'br' }, + { name: 'Argentina', code: 'ar' }, + { name: 'Mexico', code: 'mx' }, + { name: 'Nigeria', code: 'ng' }, + { name: 'Kenya', code: 'ke' }, + { name: 'South Africa', code: 'za' }, + ].map((country, i) => ( + <motion.div + key={country.code} + className="flex items-center gap-2 rounded-full border-2 border-n-1 bg-white px-4 py-2 shadow-sm" + initial={{ opacity: 0, scale: 0.8 }} + whileInView={{ opacity: 1, scale: 1 }} + viewport={{ once: true }} + transition={{ delay: 0.1 * i }} + > + <Image + src={`https://flagcdn.com/w160/${country.code}.png`} + alt={`${country.name} flag`} + width={24} + height={24} + className="h-6 w-6 rounded-full object-cover" + /> + <span className="text-sm font-bold">{country.name}</span> + </motion.div> + ))} + + {/* Region pills without flags */} + <motion.span + className="rounded-full border-2 border-n-1 bg-white px-5 py-2 text-sm font-bold shadow-sm" + initial={{ opacity: 0, scale: 0.8 }} + whileInView={{ opacity: 1, scale: 1 }} + viewport={{ once: true }} + transition={{ delay: 0.7 }} + > + Latin America + </motion.span> + <motion.span + className="rounded-full border-2 border-n-1 bg-white px-5 py-2 text-sm font-bold shadow-sm" + initial={{ opacity: 0, scale: 0.8 }} + whileInView={{ opacity: 1, scale: 1 }} + viewport={{ once: true }} + transition={{ delay: 0.8 }} + > + Africa + </motion.span> + <motion.span + className="rounded-full border-2 border-n-1 bg-white px-5 py-2 text-sm font-bold shadow-sm" + initial={{ opacity: 0, scale: 0.8 }} + whileInView={{ opacity: 1, scale: 1 }} + viewport={{ once: true }} + transition={{ delay: 0.9 }} + > + + more + </motion.span> + </motion.div> + </div> + </section> + + <Marquee {...marqueeProps} /> + + {/* FAQ - Cream */} + <section id="faq" className="relative overflow-hidden py-12" style={{ backgroundColor: '#F9F4F0' }}> + <FloatingStars /> + + <div className="relative mx-auto max-w-3xl px-4"> + <FAQsPanel heading="FAQ" questions={faqQuestions} /> + <motion.p + className="font-roboto-flex mt-8 text-center text-sm opacity-60" + initial={{ opacity: 0 }} + whileInView={{ opacity: 0.6 }} + viewport={{ once: true }} + > + More questions? Visit our{' '} + <a href="https://peanut.me/support" className="underline hover:text-primary-1"> + support page + </a> + </motion.p> + </div> + </section> + + <Marquee {...marqueeProps} /> + + {/* Final CTA - Secondary Yellow */} + <section id="join" className="relative overflow-hidden bg-secondary-1 py-24 text-center text-n-1"> + <FloatingStars /> + + <div className="relative mx-auto max-w-2xl px-4"> + <motion.div + initial={{ opacity: 0, scale: 0.9 }} + whileInView={{ opacity: 1, scale: 1 }} + viewport={{ once: true }} + > + <span className="font-roboto-flex mb-4 inline-block rounded-full border-2 border-n-1 bg-white px-4 py-1 text-sm font-bold"> + Early access is open + </span> + </motion.div> + <motion.h2 + className="font-roboto-flex-extrabold text-4xl font-extraBlack md:text-6xl" + initial={{ opacity: 0, y: 20 }} + whileInView={{ opacity: 1, y: 0 }} + viewport={{ once: true }} + > + READY TO + <br /> + JOIN? + </motion.h2> + <motion.p + className="font-roboto-flex mt-4 text-xl" + initial={{ opacity: 0 }} + whileInView={{ opacity: 1 }} + viewport={{ once: true }} + transition={{ delay: 0.1 }} + > + $10 reserves your spot. And for every friend you invite, earn forever. + </motion.p> + <motion.div + initial={{ opacity: 0, y: 20 }} + whileInView={{ opacity: 1, y: 0 }} + viewport={{ once: true }} + transition={{ delay: 0.2 }} + > + <Button + shadowSize="4" + onClick={handleCTA} + className="mt-8 bg-white px-14 py-5 text-xl font-extrabold hover:bg-white/90" + > + BECOME A PIONEER + </Button> + </motion.div> + </div> + </section> + + <Marquee {...marqueeProps} /> + </> + ) +} + +// Floating stars component +const FloatingStars = () => { + const starConfigs = [ + { className: 'absolute left-12 top-10', delay: 0.2 }, + { className: 'absolute left-56 top-1/2', delay: 0.2 }, + { className: 'absolute bottom-20 left-20', delay: 0.2 }, + { className: 'absolute -top-16 right-20 md:top-10', delay: 0.6 }, + { className: 'absolute bottom-20 right-44', delay: 0.6 }, + ] + + return ( + <> + {starConfigs.map((config, index) => ( + <motion.img + key={index} + src={Star.src} + alt="" + width={50} + height={50} + className={`${config.className} hidden md:block`} + initial={{ opacity: 0, translateY: 20, translateX: 5, rotate: 22 }} + whileInView={{ opacity: 1, translateY: 0, translateX: 0, rotate: 22 }} + transition={{ type: 'spring', damping: 5, delay: config.delay }} + /> + ))} + </> + ) +} + +// Step card component +const StepCard = ({ + num, + title, + desc, + color, + textLight, + delay, +}: { + num: string + title: string + desc: string + color: string + textLight?: boolean + delay: number +}) => ( + <motion.div + className={`flex-1 rounded-2xl border-2 border-n-1 p-6 shadow-md ${color} ${textLight ? 'text-white' : ''}`} + initial={{ opacity: 0, y: 30 }} + whileInView={{ opacity: 1, y: 0 }} + viewport={{ once: true }} + transition={{ duration: 0.5, delay }} + whileHover={{ y: -4, transition: { duration: 0.2 } }} + > + <span className={`font-roboto-flex text-5xl font-black ${textLight ? 'text-white/30' : 'opacity-20'}`}> + {num} + </span> + <h3 className="font-roboto-flex-extrabold mt-2 text-2xl font-bold">{title}</h3> + <p className={`font-roboto-flex mt-2 ${textLight ? 'text-white/80' : 'opacity-70'}`}>{desc}</p> + </motion.div> +) + +// Reward item component +const RewardItem = ({ amount, label }: { amount: string; label: string }) => ( + <motion.div + className="flex items-center gap-4" + initial={{ opacity: 0, x: -20 }} + whileInView={{ opacity: 1, x: 0 }} + viewport={{ once: true }} + > + <span className="flex h-12 w-12 items-center justify-center rounded-full bg-yellow-1 text-lg font-black text-n-1"> + {amount} + </span> + <span className="font-roboto-flex text-lg">{label}</span> + </motion.div> +) + +export default CardLandingPage diff --git a/src/app/lp/card/page.tsx b/src/app/lp/card/page.tsx new file mode 100644 index 000000000..5446cf17c --- /dev/null +++ b/src/app/lp/card/page.tsx @@ -0,0 +1,21 @@ +import { generateMetadata as generateMeta } from '@/app/metadata' +import { LandingPageShell } from '@/components/LandingPage/LandingPageShell' +import Footer from '@/components/LandingPage/Footer' +import CardLandingPage from './CardLandingPage' + +export const metadata = generateMeta({ + title: 'Card Pioneers | Get Early Access to Peanut Card', + description: + 'Join Card Pioneers for early access to the Peanut Card. Reserve your spot with $10, earn $5 for every friend who joins, and spend your dollars globally.', + keywords: + 'peanut card, card pioneers, crypto card, digital dollars, global spending, early access, referral rewards, international card', +}) + +export default function CardLPPage() { + return ( + <LandingPageShell> + <CardLandingPage /> + <Footer /> + </LandingPageShell> + ) +} diff --git a/src/app/lp/layout.tsx b/src/app/lp/layout.tsx new file mode 100644 index 000000000..60b9e0126 --- /dev/null +++ b/src/app/lp/layout.tsx @@ -0,0 +1,10 @@ +import { type Metadata } from 'next' + +// /lp is an alias for the root landing page — canonical points to / +export const metadata: Metadata = { + alternates: { canonical: '/' }, +} + +export default function LpLayout({ children }: { children: React.ReactNode }) { + return children +} diff --git a/src/app/lp/page.tsx b/src/app/lp/page.tsx new file mode 100644 index 000000000..fe98c7c1e --- /dev/null +++ b/src/app/lp/page.tsx @@ -0,0 +1,35 @@ +'use client' + +/** + * /lp route - Landing page that is ALWAYS accessible regardless of auth state. + * This allows logged-in users to view the marketing landing page. + * Uses Layout (client) instead of LandingPageShell since SSR doesn't matter here. + */ + +import Layout from '@/components/Global/Layout' +import { LandingPageClient } from '@/components/LandingPage/LandingPageClient' +import Manteca from '@/components/LandingPage/Manteca' +import { RegulatedRails } from '@/components/LandingPage/RegulatedRails' +import { YourMoney } from '@/components/LandingPage/yourMoney' +import { SecurityBuiltIn } from '@/components/LandingPage/securityBuiltIn' +import { SendInSeconds } from '@/components/LandingPage/sendInSeconds' +import Footer from '@/components/LandingPage/Footer' +import { heroConfig, faqData, marqueeMessages } from '@/components/LandingPage/landingPageData' + +export default function LPPage() { + return ( + <Layout className="enable-select !m-0 w-full !p-0"> + <LandingPageClient + heroConfig={heroConfig} + faqData={faqData} + marqueeMessages={marqueeMessages} + mantecaSlot={<Manteca />} + regulatedRailsSlot={<RegulatedRails />} + yourMoneySlot={<YourMoney />} + securitySlot={<SecurityBuiltIn />} + sendInSecondsSlot={<SendInSeconds />} + footerSlot={<Footer />} + /> + </Layout> + ) +} diff --git a/src/app/metadata.ts b/src/app/metadata.ts index c7aeb73c7..64c4cbb50 100644 --- a/src/app/metadata.ts +++ b/src/app/metadata.ts @@ -6,11 +6,14 @@ export function generateMetadata({ description, image = '/metadata-img.png', keywords, + canonical, }: { title: string description: string image?: string keywords?: string + /** Canonical URL path (e.g. '/careers') or full URL. Resolved against metadataBase. */ + canonical?: string }): Metadata { return { title, @@ -22,7 +25,7 @@ export function generateMetadata({ type: 'website', title, description, - url: BASE_URL, + url: canonical ? `${BASE_URL}${canonical}` : BASE_URL, siteName: 'Peanut', images: [{ url: image, width: 1200, height: 630, alt: title }], }, @@ -35,5 +38,6 @@ export function generateMetadata({ site: '@PeanutProtocol', }, applicationName: process.env.NODE_ENV === 'development' ? 'Peanut Dev' : 'Peanut', + ...(canonical ? { alternates: { canonical } } : {}), } } diff --git a/src/app/not-found.tsx b/src/app/not-found.tsx index 7a66bb1ad..b8ba35d04 100644 --- a/src/app/not-found.tsx +++ b/src/app/not-found.tsx @@ -1,19 +1,20 @@ -import Link from 'next/link' import PageContainer from '@/components/0_Bruddle/PageContainer' import PEANUTMAN_CRY from '@/animations/GIF_ALPHA_BACKGORUND/512X512_ALPHA_GIF_konradurban_05.gif' import Image from 'next/image' export default function NotFound() { return ( - <PageContainer className="min-h-[100dvh]"> + <PageContainer className="min-h-[100dvh] p-6"> <div className="my-auto flex h-full flex-col justify-center space-y-4"> <div className="shadow-4 flex w-full flex-col items-center space-y-2 border border-n-1 bg-white p-4"> <h1 className="text-3xl font-extrabold">Not found</h1> <Image src={PEANUTMAN_CRY.src} className="" alt="Peanutman crying 😭" width={96} height={96} /> - <p>Woah there buddy, you're not supposed to be here.</p> - <Link href="/" className="btn btn-purple btn-medium shadow-4"> - Take me home, I'm scared - </Link> + <p>Woah there buddy, you're not supposed to be here.</p> + {/* Use <a> instead of <Link> to force full page load — avoids React error #310 + caused by hook count mismatch between 404 (no mobile-ui layout) and home (with providers) */} + <a href="/" className="btn btn-purple shadow-4"> + Take me home, I'm scared + </a> </div> </div> </PageContainer> diff --git a/src/app/page.tsx b/src/app/page.tsx index f36aa3352..cbdb5e6c6 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,220 +1,34 @@ -'use client' - -import Layout from '@/components/Global/Layout' -import { - DropLink, - FAQs, - Hero, - Marquee, - NoFees, - SecurityBuiltIn, - SendInSeconds, - YourMoney, - RegulatedRails, -} from '@/components/LandingPage' -import Footer from '@/components/LandingPage/Footer' +import { Suspense } from 'react' +import { LandingPageShell } from '@/components/LandingPage/LandingPageShell' +import { LandingPageClient } from '@/components/LandingPage/LandingPageClient' import Manteca from '@/components/LandingPage/Manteca' -import TweetCarousel from '@/components/LandingPage/TweetCarousel' -import { useFooterVisibility } from '@/context/footerVisibility' -import { useEffect, useState, useRef } from 'react' +import { RegulatedRails } from '@/components/LandingPage/RegulatedRails' +import { YourMoney } from '@/components/LandingPage/yourMoney' +import { SecurityBuiltIn } from '@/components/LandingPage/securityBuiltIn' +import { SendInSeconds } from '@/components/LandingPage/sendInSeconds' +import Footer from '@/components/LandingPage/Footer' +import { faqSchema, JsonLd } from '@/lib/seo/schemas' +import { heroConfig, faqData, marqueeMessages } from '@/components/LandingPage/landingPageData' export default function LandingPage() { - const { isFooterVisible } = useFooterVisibility() - const [buttonVisible, setButtonVisible] = useState(true) - const [isScrollFrozen, setIsScrollFrozen] = useState(false) - const [buttonScale, setButtonScale] = useState(1) - const [animationComplete, setAnimationComplete] = useState(false) - const [shrinkingPhase, setShrinkingPhase] = useState(false) - const [hasGrown, setHasGrown] = useState(false) - const sendInSecondsRef = useRef<HTMLDivElement>(null) - const frozenScrollY = useRef(0) - const virtualScrollY = useRef(0) - const previousScrollY = useRef(0) - - const hero = { - heading: 'Peanut', - marquee: { - visible: true, - message: ['No fees', 'Instant', '24/7', 'USD', 'EUR', 'CRYPTO', 'GLOBAL', 'SELF-CUSTODIAL'], - }, - primaryCta: { - label: 'SIGN UP', - href: '/setup', - subtext: 'currently in waitlist', - }, - } - - const faqs = { - heading: 'Faqs', - questions: [ - { - id: '0', - question: 'Why Peanut?', - answer: `It's time to take control of your money. No banks, no borders. Just buttery smooth global money.`, - }, - { - id: '1', - question: 'What is Peanut?', - answer: 'Peanut is the easiest way to send digital dollars to anyone anywhere. Peanut’s tech is powered by cutting-edge cryptography and the security of biometric user authentication as well as a network of modern and fully licensed banking providers.', - }, - { - id: '2', - question: 'Do I have to KYC?', - answer: 'No! You can use core functionalities (like sending and receiving money) without KYC. Bank connections, however, trigger a one‑time check handled by Persona, a SOC2 Type 2 certified and GDPR compliant ISO 27001–certified provider used by brands like Square and Robinhood. Your documents remain locked away with Persona, not Peanut, and Peanut only gets a yes/no response, keeping your privacy intact.', - }, - { - id: '3', - question: 'Could a thief drain my wallet if they stole my phone?', - answer: 'Not without your face or fingerprint. The passkey is sealed in the Secure Enclave of your phone and never exported. It’s secured by NIST‑recommended P‑256 Elliptic Curve cryptography. Defeating that would be tougher than guessing all 10¹⁰¹⁰ combinations of a 30‑character password made of emoji.\n This means your account is yours alone. Neither Peanut nor anyone else can freeze or seize it — because we never hold your keys. Your key never touches our servers; compliance requests only see cryptographic and encrypted signatures. Cracking those signatures would demand more energy than the Sun outputs in a full century.', - }, - { - id: '4', - question: 'What happens to my funds if Peanut’s servers were breached?', - answer: "Nothing. Your funds sit in your self‑custodied smart account (not on Peanut servers). Every transfer still needs a signature from your biometric passkey, so a server‑side attacker has no way to move a cent without the private key sealed in your device's Secure Enclave. Even if Peanut were offline, you could point any ERC‑4337‑compatible wallet at your smart account and recover access independently.", - }, - { - id: '5', - question: 'How does Peanut make money?', - answer: 'We plan to charge merchants for accepting Peanut as a payment method, whilst still being much cheaper than VISA and Mastercard. For users, we only charge minimal amounts!', - }, - { - id: '6', - question: 'My question is not here', - answer: 'Check out our full FAQ page at https://peanutprotocol.notion.site/FAQ-2a4838117579805dad62ff47c9d2eb7a or visit our support page at https://peanut.me/support for more help.', - }, - ], - marquee: { - visible: false, - message: 'Peanut', - }, - } - - useEffect(() => { - if (isFooterVisible) { - setButtonVisible(false) - } else { - setButtonVisible(true) - } - }, [isFooterVisible]) - - useEffect(() => { - const handleScroll = () => { - if (sendInSecondsRef.current) { - const targetElement = document.getElementById('sticky-button-target') - if (!targetElement) return - - const targetRect = targetElement.getBoundingClientRect() - const currentScrollY = window.scrollY - - // Check if the sticky button should "freeze" at the target position - // Calculate where the sticky button currently is (bottom-4 = 16px from bottom) - const stickyButtonTop = window.innerHeight - 16 - 52 // 16px bottom margin, ~52px button height - const stickyButtonBottom = window.innerHeight - 16 - - // Freeze when the target element overlaps with the sticky button position (even lower) - const shouldFreeze = - targetRect.top <= stickyButtonBottom - 60 && - targetRect.bottom >= stickyButtonTop - 60 && - !animationComplete && - !shrinkingPhase && - !hasGrown - - if (shouldFreeze && !isScrollFrozen) { - // Start freeze - prevent normal scrolling - setIsScrollFrozen(true) - frozenScrollY.current = currentScrollY - virtualScrollY.current = 0 - document.body.style.overflow = 'hidden' - window.scrollTo(0, frozenScrollY.current) - } else if (isScrollFrozen && !animationComplete) { - // During freeze - maintain scroll position - window.scrollTo(0, frozenScrollY.current) - } else if (animationComplete && !shrinkingPhase && currentScrollY > frozenScrollY.current + 50) { - // Start shrinking phase when user scrolls further after animation complete - setShrinkingPhase(true) - } else if (shrinkingPhase) { - // Shrink button back to original size based on scroll distance - const shrinkDistance = Math.max(0, currentScrollY - (frozenScrollY.current + 50)) - const maxShrinkDistance = 200 - const shrinkProgress = Math.min(1, shrinkDistance / maxShrinkDistance) - const newScale = 1.5 - shrinkProgress * 0.5 // Scale from 1.5 back to 1 - setButtonScale(Math.max(1, newScale)) - } else if (animationComplete && currentScrollY < frozenScrollY.current - 100) { - // Reset everything when scrolling back up past the SendInSeconds component - setAnimationComplete(false) - setShrinkingPhase(false) - setButtonScale(1) - setHasGrown(false) - } - - // Update previous scroll position for direction tracking - previousScrollY.current = currentScrollY - } - } - - const handleWheel = (event: WheelEvent) => { - if (isScrollFrozen && !animationComplete) { - event.preventDefault() - - // Only increase scale when scrolling down (positive deltaY) - if (event.deltaY > 0) { - virtualScrollY.current += event.deltaY - - // Scale button based on virtual scroll (max scale of 1.5) - requires more scrolling - const maxVirtualScroll = 500 // Increased from 200 to require more scrolling - const newScale = Math.min(1.5, 1 + (virtualScrollY.current / maxVirtualScroll) * 0.5) - setButtonScale(newScale) - - // Complete animation when we reach max scale - if (newScale >= 1.5) { - setAnimationComplete(true) - setHasGrown(true) - document.body.style.overflow = '' - setIsScrollFrozen(false) - } - } - // When scrolling up (negative deltaY), don't change the scale - } - } - - window.addEventListener('scroll', handleScroll) - window.addEventListener('wheel', handleWheel, { passive: false }) - handleScroll() // Check initial state - - return () => { - window.removeEventListener('scroll', handleScroll) - window.removeEventListener('wheel', handleWheel) - document.body.style.overflow = '' // Cleanup - } - }, [isScrollFrozen, animationComplete, shrinkingPhase, hasGrown]) - - const marqueeProps = { visible: hero.marquee.visible, message: hero.marquee.message } + const faqJsonLd = faqSchema(faqData.questions.map((q) => ({ question: q.question, answer: q.answer }))) return ( - <Layout className="enable-select !m-0 w-full !p-0"> - <Hero primaryCta={hero.primaryCta} buttonVisible={buttonVisible} buttonScale={buttonScale} /> - <Marquee {...marqueeProps} /> - <Manteca /> - <Marquee {...marqueeProps} /> - <TweetCarousel /> - <Marquee {...marqueeProps} /> - <RegulatedRails /> - <Marquee {...marqueeProps} /> - <YourMoney /> - <Marquee {...marqueeProps} /> - <DropLink /> - <Marquee {...marqueeProps} /> - <SecurityBuiltIn /> - <Marquee {...marqueeProps} /> - <div ref={sendInSecondsRef}> - <SendInSeconds /> - </div> - <Marquee {...marqueeProps} /> - <NoFees /> - <Marquee {...marqueeProps} /> - <FAQs heading={faqs.heading} questions={faqs.questions} marquee={faqs.marquee} /> - <Marquee {...marqueeProps} /> - <Footer /> - </Layout> + <LandingPageShell> + <JsonLd data={faqJsonLd} /> + <Suspense> + <LandingPageClient + heroConfig={heroConfig} + faqData={faqData} + marqueeMessages={marqueeMessages} + mantecaSlot={<Manteca />} + regulatedRailsSlot={<RegulatedRails />} + yourMoneySlot={<YourMoney />} + securitySlot={<SecurityBuiltIn />} + sendInSecondsSlot={<SendInSeconds />} + footerSlot={<Footer />} + /> + </Suspense> + </LandingPageShell> ) } diff --git a/src/app/robots.ts b/src/app/robots.ts index d9d154d42..9ce741e3f 100644 --- a/src/app/robots.ts +++ b/src/app/robots.ts @@ -1,27 +1,85 @@ import type { MetadataRoute } from 'next' import { BASE_URL } from '@/constants/general.consts' +import { SUPPORTED_LOCALES } from '@/i18n/types' + +const IS_PRODUCTION_DOMAIN = BASE_URL === 'https://peanut.me' export default function robots(): MetadataRoute.Robots { + // Block indexing on staging, preview deploys, and non-production domains + if (!IS_PRODUCTION_DOMAIN) { + return { + rules: [{ userAgent: '*', disallow: ['/'] }], + } + } + return { rules: [ + // Allow Twitterbot to fetch OG images for link previews { userAgent: 'Twitterbot', allow: ['/api/og'], disallow: [], }, + + // AI search engine crawlers — explicitly welcome { - userAgent: '*', - allow: ['/', '/about', '/send', '/request/create', '/cashout', '/jobs'], - disallow: ['/api/', '/sdk/', '/*dashboard', '/*profile'], - }, - { - userAgent: 'AhrefsBot', - crawlDelay: 10, + userAgent: [ + 'GPTBot', + 'ChatGPT-User', + 'PerplexityBot', + 'ClaudeBot', + 'Google-Extended', + 'Applebot-Extended', + ], + allow: ['/'], + disallow: ['/api/', '/home', '/profile', '/settings', '/setup', '/dev/'], }, + + // Default rules for all crawlers { - userAgent: 'SemrushBot', - crawlDelay: 10, + userAgent: '*', + allow: [ + '/', + '/careers', + '/privacy', + '/terms', + '/exchange', + '/lp/card', + // SEO routes (all locale-prefixed) + ...SUPPORTED_LOCALES.map((l) => `/${l}/`), + ], + disallow: [ + '/api/', + '/sdk/', + // Auth-gated app routes + '/home', + '/profile', + '/settings', + '/send', + '/request', + '/setup', + '/claim', + '/pay', + '/dev/', + '/qr', + '/history', + '/points', + '/invite', + '/kyc', + '/maintenance', + '/quests', + '/receipt', + '/crisp-proxy', + '/card-payment', + '/add-money', + '/withdraw', + ], }, + + // Rate-limit aggressive SEO crawlers + { userAgent: 'AhrefsBot', crawlDelay: 10 }, + { userAgent: 'SemrushBot', crawlDelay: 10 }, + { userAgent: 'MJ12bot', crawlDelay: 10 }, ], sitemap: `${BASE_URL}/sitemap.xml`, } diff --git a/src/app/sitemap.ts b/src/app/sitemap.ts index 22b241b80..5da5b172c 100644 --- a/src/app/sitemap.ts +++ b/src/app/sitemap.ts @@ -1,19 +1,115 @@ import { type MetadataRoute } from 'next' +import { BASE_URL } from '@/constants/general.consts' +import { COUNTRIES_SEO, CORRIDORS, COMPETITORS, EXCHANGES, PAYMENT_METHOD_SLUGS } from '@/data/seo' +import { SUPPORTED_LOCALES } from '@/i18n/config' + +// TODO (infra): Set up 301 redirect peanut.to/* → peanut.me/ at Vercel/Cloudflare level +// TODO (infra): Set up 301 redirect docs.peanut.to/* → peanut.me/help +// TODO (infra): Update GitHub org, Twitter bio, LinkedIn, npm package.json → peanut.me +// TODO (infra): Add peanut.me to Google Search Console and submit this sitemap +// TODO (GA4): Create data filter to exclude trafficheap.com referral traffic + +/** Build date used for non-content pages that don't have their own date. */ +const BUILD_DATE = new Date() async function generateSitemap(): Promise<MetadataRoute.Sitemap> { - const baseUrl = process.env.NEXT_PUBLIC_BASE_URL || 'https://peanut.me' + type SitemapEntry = { + path: string + priority: number + changeFrequency: MetadataRoute.Sitemap[number]['changeFrequency'] + lastModified?: Date + } - const staticPages = ['', '/about', '/jobs'] + const pages: SitemapEntry[] = [ + // Homepage + { path: '', priority: 1.0, changeFrequency: 'weekly' }, - // generate entries for static pages - const staticEntries = staticPages.map((page) => ({ - url: `${baseUrl}${page}`, - lastModified: new Date(), - changeFrequency: 'weekly' as const, - priority: 1.0, - })) + // Product pages + { path: '/lp/card', priority: 0.9, changeFrequency: 'weekly' }, + + // Public pages + { path: '/careers', priority: 0.7, changeFrequency: 'monthly' }, + { path: '/exchange', priority: 0.7, changeFrequency: 'weekly' }, + + // Legal + { path: '/privacy', priority: 0.5, changeFrequency: 'yearly' }, + { path: '/terms', priority: 0.5, changeFrequency: 'yearly' }, + ] + + // --- Programmatic SEO pages (all locales with /{locale}/ prefix) --- + for (const locale of SUPPORTED_LOCALES) { + const isDefault = locale === 'en' + const basePriority = isDefault ? 1.0 : 0.9 // EN gets slightly higher priority + + // Country hub pages + for (const country of Object.keys(COUNTRIES_SEO)) { + pages.push({ path: `/${locale}/${country}`, priority: 0.9 * basePriority, changeFrequency: 'weekly' }) + } + + // Send-money-to country pages + for (const country of Object.keys(COUNTRIES_SEO)) { + pages.push({ + path: `/${locale}/send-money-to/${country}`, + priority: 0.8 * basePriority, + changeFrequency: 'weekly', + }) + } - return staticEntries + // From-to corridor pages + for (const corridor of CORRIDORS) { + pages.push({ + path: `/${locale}/send-money-from/${corridor.from}/to/${corridor.to}`, + priority: 0.85 * basePriority, + changeFrequency: 'weekly', + }) + } + + // Receive money pages (unique sending countries from corridors) + const receiveSources = [...new Set(CORRIDORS.map((c) => c.from))] + for (const source of receiveSources) { + pages.push({ + path: `/${locale}/receive-money-from/${source}`, + priority: 0.7 * basePriority, + changeFrequency: 'weekly', + }) + } + + // Comparison pages + for (const slug of Object.keys(COMPETITORS)) { + pages.push({ + path: `/${locale}/compare/peanut-vs-${slug}`, + priority: 0.7 * basePriority, + changeFrequency: 'monthly', + }) + } + + // Deposit pages + for (const exchange of Object.keys(EXCHANGES)) { + pages.push({ + path: `/${locale}/deposit/from-${exchange}`, + priority: 0.7 * basePriority, + changeFrequency: 'monthly', + }) + } + + // Pay-with pages + for (const method of PAYMENT_METHOD_SLUGS) { + pages.push({ + path: `/${locale}/pay-with/${method}`, + priority: 0.7 * basePriority, + changeFrequency: 'monthly', + }) + } + + // Blog and team pages excluded from production sitemap (not yet launched) + } + + return pages.map((page) => ({ + url: `${BASE_URL}${page.path}`, + lastModified: page.lastModified ?? BUILD_DATE, + changeFrequency: page.changeFrequency, + priority: page.priority, + })) } export default generateSitemap diff --git a/src/app/sw.ts b/src/app/sw.ts index 22a34cf60..910994044 100644 --- a/src/app/sw.ts +++ b/src/app/sw.ts @@ -1,6 +1,6 @@ import { defaultCache } from '@serwist/next/worker' import type { PrecacheEntry, SerwistGlobalConfig } from 'serwist' -import { Serwist } from 'serwist' +import { NetworkOnly, Serwist } from 'serwist' // This declares the value of `injectionPoint` to TypeScript. // `injectionPoint` is the string that will be replaced by the @@ -20,7 +20,15 @@ const serwist = new Serwist({ skipWaiting: true, clientsClaim: true, navigationPreload: true, - runtimeCaching: defaultCache, + runtimeCaching: [ + // Never cache auth/user API responses — stale 401s cause infinite loading loops + { + matcher: ({ sameOrigin, url: { pathname } }: { sameOrigin: boolean; url: URL }) => + sameOrigin && pathname.startsWith('/api/peanut/user/'), + handler: new NetworkOnly(), + }, + ...defaultCache, + ], disableDevLogs: false, }) diff --git a/src/assets/badges/index.ts b/src/assets/badges/index.ts index 3c9667660..f75d53628 100644 --- a/src/assets/badges/index.ts +++ b/src/assets/badges/index.ts @@ -1,3 +1,5 @@ +// TODO: consolidate these with public/badges - we have duplicate badge systems +// These tier badges should probably move to public/badges and use CODE_TO_PATH in badge.utils.ts export { default as TIER_0_BADGE } from './tier0.svg' export { default as TIER_1_BADGE } from './tier1.svg' export { default as TIER_2_BADGE } from './tier2.svg' diff --git a/src/assets/cards/Cart Gradient 10.svg b/src/assets/cards/Cart Gradient 10.svg new file mode 100644 index 000000000..c4c030cb6 --- /dev/null +++ b/src/assets/cards/Cart Gradient 10.svg @@ -0,0 +1,66 @@ +<svg width="1208" height="765" viewBox="0 0 1208 765" fill="none" xmlns="http://www.w3.org/2000/svg"> +<rect x="2.1533" y="2.1533" width="1203.69" height="760.114" rx="62.4456" fill="#FF90E8" stroke="url(#paint0_linear_17007_6901)" stroke-width="4.3066"/> +<mask id="mask0_17007_6901" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="1208" height="765"> +<rect width="1208" height="764.421" rx="64.5989" fill="#FF90E8"/> +</mask> +<g mask="url(#mask0_17007_6901)"> +<path d="M870.408 367.248C860.33 355.55 855.558 339.496 857.599 324.213C859.212 310.018 866.931 297.003 877.809 287.986L900 277.484C908.848 275.879 917.878 276.139 926.832 276.414C972.69 278.348 1018.03 289.395 1060.48 306.973C1113.05 328.776 1160.97 361.528 1201.37 401.757C1230.92 431.151 1256.53 464.441 1278.23 500.032C1282.56 506.983 1286.46 514.204 1290.74 521.196L1311.36 564.772C1315.58 582.575 1310.39 602.267 1297.79 615.409C1286.37 627.593 1269.19 634.059 1252.56 632.186C1238.18 630.799 1224.5 623.381 1215.37 612.098C1209.57 605.196 1206.5 596.603 1202.24 588.76C1174.96 535.631 1137.97 486.665 1090.35 450.302C1062.7 429.145 1031.66 412.446 998.75 401.308C970.337 392.004 940.541 385.906 910.591 386.669C895.309 386.269 880.308 379.009 870.408 367.248ZM888.351 347.128C894.029 355.964 904.741 360.973 915.087 359.988C940.483 359.84 965.789 364.194 990.272 370.941C1050.18 387.509 1104.92 421.467 1148.04 466.369C1181.46 500.842 1208.36 541.298 1229.65 584.264C1232.06 589.312 1234.42 594.614 1238.75 598.334C1247.92 606.962 1262.91 608.334 1273.32 601.328C1284.79 594.215 1289.52 578.334 1283.86 565.979C1255.4 506.525 1217.13 451.173 1168.2 406.814C1128.41 370.613 1081.65 342.053 1031.06 324.07C992.967 310.775 952.8 302.468 912.431 302.912C901.189 302.688 890.196 309.714 885.965 320.192C882.189 328.801 883.154 339.266 888.351 347.128Z" fill="black"/> +<path d="M888.351 347.128C883.154 339.266 882.189 328.801 885.965 320.192C890.196 309.714 901.189 302.688 912.431 302.912C952.8 302.468 992.967 310.775 1031.06 324.07C1081.65 342.053 1128.41 370.613 1168.2 406.814C1217.13 451.173 1255.4 506.525 1283.86 565.979C1289.52 578.334 1284.79 594.215 1273.32 601.328C1262.91 608.334 1247.92 606.962 1238.75 598.334C1234.42 594.614 1232.06 589.312 1229.65 584.264C1208.36 541.298 1181.46 500.842 1148.04 466.369C1104.92 421.467 1050.18 387.509 990.272 370.941C965.789 364.194 940.483 359.84 915.087 359.988C904.741 360.973 894.029 355.964 888.351 347.128Z" fill="#FFCA05"/> +<path d="M678.748 49.2551C656.687 33.5671 624.41 34.4112 603.049 50.9612C591.981 59.3984 584.456 72.003 581.568 85.5185C577.784 102.757 580.528 120.742 585.906 137.341C591.289 153.882 599.273 169.472 608.374 184.272C602.349 185.836 596.381 187.657 590.606 189.99C578.275 194.957 566.287 202.057 558.262 212.867C553.442 219.189 550.933 226.871 549.104 234.499C546.421 245.851 546.372 258.029 550.286 269.11C552.357 275.326 555.816 280.973 559.829 286.127C552.563 290.823 546.359 297.256 542.244 304.867C539.468 309.976 537.857 315.628 537 321.355L537 332.875C538.24 345.084 544.275 356.512 552.933 365.136C555.508 367.815 558.369 370.196 561.31 372.457C556.004 377.136 551.286 382.556 548.006 388.848C542.699 398.715 541.284 410.449 543.565 421.374C545.6 431.54 550.269 441.012 556.066 449.56C563.778 460.877 574.847 469.918 587.598 475.045C596.279 478.671 605.589 480.523 614.926 481.403L634.47 481.403C652.286 479.848 669.831 475.587 686.509 469.185C700.131 474.365 715.047 475.401 729.458 473.917C745.512 472.215 761.168 467.039 775.084 458.9C786.385 452.36 796.422 443.78 804.987 433.975C813.516 438.724 823.134 441.648 832.917 442.056C842.633 442.487 852.457 440.492 861.218 436.285C868.305 432.966 874.679 428.265 880.289 422.845C890.719 412.582 898.387 399.799 903.756 386.275C911.066 367.815 914.338 347.928 914.57 328.13C914.748 307.919 911.66 287.655 905.26 268.461C898.538 248.632 888.206 229.63 873.063 214.911C863.021 205.225 850.658 197.521 836.854 194.633C823.397 191.754 809.026 193.842 796.846 200.169C774.352 180.802 747.502 167.624 721.946 152.856C718.599 151.039 715.497 148.595 713.444 145.347C711.11 141.589 710.155 137.194 709.535 132.876C708.401 124.07 708.343 115.171 707.307 106.356C705.964 94.0445 702.737 81.8219 696.761 70.9056C692.253 62.6328 686.585 54.7155 678.748 49.2551ZM651.742 63.0416C658.579 64.5789 665.176 67.9599 669.706 73.3803C672.669 77.0902 675.16 81.1688 677.173 85.4607C681.283 94.08 682.961 103.61 683.76 113.051C684.711 123.617 684.653 134.36 687.362 144.69C689.388 152.567 693.325 160.058 699.229 165.736C704.549 171.152 711.498 174.44 717.974 178.23C735.18 187.982 752.782 197.183 768.881 208.73C782.1 218.181 794.298 229.439 803.055 243.203C808.705 251.947 812.829 261.615 815.587 271.625C816.493 274.757 818.796 277.418 821.701 278.898C826.464 281.395 832.792 280.111 836.238 276.01C838.751 273.122 839.768 268.999 838.795 265.294C836.492 256.799 833.337 248.526 829.324 240.684C825.375 232.856 820.425 225.574 815.034 218.669C822.826 216.408 831.333 217.123 838.773 220.269C848.739 224.37 856.933 231.82 863.548 240.155C869.805 248.024 874.683 256.896 878.642 266.098C887.019 286.082 890.862 307.861 890.456 329.485C890.014 349.67 885.988 370.107 876.437 388.057C872.911 394.561 868.627 400.724 863.262 405.868C856.969 412.026 848.909 416.709 840.058 417.842C832.917 418.829 825.593 417.318 819.117 414.27C821.862 409.392 824.509 404.451 826.767 399.328C827.923 396.587 829.494 393.833 829.338 390.758C829.329 385.746 825.834 380.984 821.01 379.517C815.44 377.567 808.767 380.464 806.384 385.831C802.872 394.29 798.556 402.439 793.267 409.934C785.224 421.459 774.781 431.38 762.561 438.426C748.77 446.402 732.828 450.729 716.863 450.573C708.99 450.414 700.992 449.352 693.722 446.188C691.441 445.233 689.397 443.785 687.094 442.883C674.749 448.583 661.677 452.679 648.327 455.305C636.746 457.5 624.825 458.549 613.078 457.091C603.433 455.878 593.855 452.675 586.107 446.708C579.43 441.696 574.476 434.748 570.884 427.297C568.456 422.285 566.644 416.838 566.617 411.222C566.532 406.642 567.853 402.043 570.37 398.2C574.084 392.38 579.716 388.021 585.741 384.756C603.313 389.963 622.035 390.114 640.089 387.692C643.423 387.097 647.042 387.004 649.943 385.062C654.237 382.401 656.415 376.887 655.107 372.027C653.75 366.335 647.756 362.225 641.923 363.096C630.154 365.238 618.059 365.855 606.156 364.522C597.078 363.443 587.915 361.119 580.18 356.099C571.848 351.269 564.309 343.898 561.725 334.404C559.971 327.877 560.659 320.564 564.305 314.779C568.183 308.559 574.7 304.551 581.345 301.792C591.57 306.311 602.732 308.337 613.841 309.097C623.99 309.745 634.206 309.43 644.306 308.235C647.051 307.879 649.97 307.688 652.335 306.111C656.178 303.823 658.463 299.255 658.012 294.83C657.62 289.725 653.598 285.176 648.546 284.189C645.721 283.479 642.874 284.38 640.048 284.594C627.824 285.86 615.367 285.94 603.263 283.599C595.699 282.092 588.049 279.467 582.269 274.184C579.069 272.256 576.971 269.03 575.092 265.898C570.464 257.674 570.513 247.682 572.843 238.76C573.936 234.882 574.967 230.852 577.346 227.515C580.698 222.797 585.509 219.34 590.503 216.519C599.144 211.769 608.624 208.748 618.219 206.589C624.24 205.269 630.346 204.172 636.531 204.185C653.393 203.901 670.29 204.812 687 207.086C690.098 207.406 693.209 208.504 696.324 207.717C701.501 206.669 705.607 201.893 705.759 196.619C706.165 190.981 701.97 185.463 696.409 184.33C687.331 182.699 678.137 181.802 668.938 181.117C657.423 180.327 645.873 179.944 634.331 180.251C629.797 173.378 625.508 166.34 621.585 159.107C613.738 144.419 607.039 128.811 604.62 112.243C603.183 101.913 603.585 90.8856 608.356 81.4043C611.949 74.0779 618.393 68.2887 625.941 65.192C634.032 61.7976 643.195 61.1089 651.742 63.0416Z" fill="black"/> +<path d="M651.742 63.0416C643.195 61.1089 634.032 61.7976 625.941 65.192C618.393 68.2887 611.949 74.0779 608.356 81.4043C603.585 90.8856 603.183 101.913 604.62 112.243C607.039 128.811 613.738 144.419 621.585 159.107C625.508 166.34 629.797 173.378 634.331 180.251C645.873 179.944 657.423 180.327 668.938 181.117C678.137 181.802 687.331 182.699 696.409 184.33C701.97 185.463 706.165 190.981 705.759 196.619C705.607 201.893 701.501 206.669 696.324 207.717C693.209 208.504 690.098 207.406 687 207.086C670.29 204.812 653.393 203.901 636.531 204.185C630.346 204.172 624.24 205.269 618.219 206.589C608.624 208.748 599.144 211.769 590.503 216.519C585.509 219.34 580.698 222.797 577.346 227.515C574.967 230.852 573.936 234.882 572.843 238.76C570.513 247.682 570.464 257.674 575.092 265.898C576.971 269.03 579.069 272.256 582.269 274.184C588.049 279.467 595.699 282.092 603.263 283.599C615.367 285.94 627.824 285.86 640.048 284.594C642.874 284.38 645.721 283.479 648.546 284.189C653.598 285.176 657.62 289.725 658.012 294.83C658.463 299.255 656.178 303.823 652.335 306.111C649.97 307.688 647.051 307.879 644.306 308.235C634.206 309.43 623.99 309.745 613.841 309.097C602.732 308.337 591.57 306.311 581.345 301.792C574.7 304.551 568.183 308.559 564.305 314.779C560.659 320.564 559.971 327.877 561.725 334.404C564.309 343.898 571.848 351.269 580.18 356.099C587.915 361.119 597.078 363.443 606.156 364.522C618.059 365.855 630.154 365.238 641.923 363.096C647.756 362.225 653.75 366.335 655.107 372.027C656.415 376.887 654.237 382.401 649.943 385.062C647.042 387.004 643.423 387.097 640.089 387.692C622.035 390.114 603.313 389.963 585.741 384.756C579.716 388.021 574.084 392.38 570.37 398.2C567.853 402.043 566.532 406.642 566.617 411.222C566.644 416.838 568.456 422.285 570.884 427.297C574.476 434.748 579.43 441.696 586.107 446.708C593.855 452.675 603.433 455.878 613.078 457.091C624.825 458.549 636.746 457.5 648.327 455.305C661.677 452.679 674.749 448.583 687.094 442.883C689.397 443.785 691.441 445.233 693.722 446.188C700.992 449.352 708.99 450.414 716.863 450.573C732.828 450.729 748.77 446.402 762.561 438.426C774.781 431.38 785.224 421.459 793.267 409.934C798.556 402.439 802.872 394.29 806.384 385.831C808.767 380.464 815.44 377.567 821.01 379.517C825.834 380.984 829.329 385.746 829.338 390.758C829.494 393.833 827.923 396.587 826.767 399.328C824.509 404.451 821.862 409.392 819.117 414.27C825.593 417.318 832.917 418.829 840.058 417.842C848.909 416.709 856.969 412.026 863.262 405.868C868.627 400.724 872.911 394.561 876.437 388.057C885.988 370.107 890.014 349.67 890.456 329.485C890.862 307.861 887.019 286.082 878.642 266.098C874.683 256.896 869.805 248.024 863.548 240.155C856.933 231.82 848.739 224.37 838.773 220.269C831.333 217.123 822.826 216.408 815.034 218.669C820.425 225.574 825.375 232.856 829.324 240.684C833.337 248.526 836.492 256.799 838.795 265.294C839.768 268.999 838.751 273.122 836.238 276.01C832.792 280.111 826.464 281.395 821.701 278.898C818.796 277.418 816.493 274.757 815.587 271.625C812.829 261.615 808.705 251.947 803.055 243.203C794.298 229.439 782.1 218.181 768.881 208.73C752.782 197.183 735.18 187.982 717.974 178.23C711.498 174.44 704.549 171.152 699.229 165.736C693.325 160.058 689.388 152.567 687.362 144.69C684.653 134.36 684.711 123.617 683.76 113.051C682.961 103.61 681.283 94.08 677.173 85.4607C675.16 81.1688 672.669 77.0902 669.706 73.3803C665.176 67.9599 658.579 64.5789 651.742 63.0416Z" fill="white"/> +<mask id="path-5-outside-1_17007_6901" maskUnits="userSpaceOnUse" x="96" y="670.175" width="223" height="35" fill="black"> +<rect fill="white" x="96" y="670.175" width="223" height="35"/> +<path d="M97.4393 703.175L97.4393 672.558L104.652 672.558L113.757 690.243C113.968 690.691 114.157 691.147 114.325 691.609C114.507 692.058 114.668 692.507 114.809 692.955L114.935 692.955C114.921 692.479 114.907 692.002 114.893 691.525C114.893 691.049 114.893 690.572 114.893 690.095L114.893 672.558L120.907 672.558L120.907 703.175L113.757 703.175L104.526 685.448C104.316 685.028 104.126 684.593 103.958 684.144C103.79 683.696 103.643 683.247 103.516 682.799L103.369 682.799C103.397 683.275 103.411 683.745 103.411 684.208C103.425 684.656 103.432 685.126 103.432 685.616L103.432 703.175L97.4393 703.175ZM125.617 691.988L125.617 672.558L132.62 672.558L132.62 692.724C132.62 694.897 133.026 696.432 133.839 697.329C134.652 698.212 135.781 698.654 137.225 698.654C138.627 698.654 139.734 698.212 140.547 697.329C141.374 696.432 141.788 694.897 141.788 692.724L141.788 672.558L148.727 672.558L148.727 691.988C148.727 695.997 147.676 698.948 145.573 700.841C143.484 702.733 140.709 703.68 137.246 703.68C133.727 703.68 130.909 702.733 128.792 700.841C126.676 698.948 125.617 695.997 125.617 691.988ZM151.335 678.046L151.335 672.558L175.37 672.558L175.37 678.046L166.896 678.046L166.896 703.175L159.83 703.175L159.83 678.046L151.335 678.046ZM176.274 678.046L176.274 672.558L200.31 672.558L200.31 678.046L191.835 678.046L191.835 703.175L184.77 703.175L184.77 678.046L176.274 678.046ZM210.487 703.175L210.487 691.736L200.499 672.558L208.174 672.558L213.494 683.072C213.663 683.422 213.817 683.759 213.957 684.081C214.097 684.39 214.23 684.712 214.357 685.049L214.462 685.049C214.588 684.712 214.714 684.39 214.84 684.081C214.98 683.773 215.142 683.436 215.324 683.072L220.644 672.558L227.436 672.558L217.574 691.567L217.574 703.175L210.487 703.175ZM246.95 703.175L246.95 691.736L236.962 672.558L244.637 672.558L249.958 683.072C250.126 683.422 250.28 683.759 250.42 684.081C250.56 684.39 250.694 684.712 250.82 685.049L250.925 685.049C251.051 684.712 251.177 684.39 251.303 684.081C251.444 683.773 251.605 683.436 251.787 683.072L257.107 672.558L263.899 672.558L254.037 691.567L254.037 703.175L246.95 703.175ZM263.92 688.75L263.92 686.983C263.92 681.908 265.133 678.151 267.558 675.712C269.998 673.273 273.138 672.053 276.979 672.053C280.806 672.053 283.939 673.273 286.379 675.712C288.832 678.151 290.058 681.908 290.058 686.983L290.058 688.75C290.058 693.824 288.832 697.582 286.379 700.021C283.939 702.46 280.806 703.68 276.979 703.68C273.138 703.68 269.998 702.46 267.558 700.021C265.133 697.582 263.92 693.824 263.92 688.75ZM271.175 690.243C271.175 693.187 271.694 695.331 272.731 696.677C273.769 698.009 275.184 698.675 276.979 698.675C278.773 698.675 280.189 698.009 281.227 696.677C282.278 695.331 282.804 693.187 282.804 690.243L282.804 685.511C282.804 682.567 282.278 680.436 281.227 679.119C280.189 677.787 278.773 677.121 276.979 677.121C275.184 677.121 273.769 677.787 272.731 679.119C271.694 680.436 271.175 682.567 271.175 685.511L271.175 690.243ZM293.928 691.988L293.928 672.558L300.93 672.558L300.93 692.724C300.93 694.897 301.337 696.432 302.15 697.329C302.963 698.212 304.091 698.654 305.535 698.654C306.937 698.654 308.045 698.212 308.858 697.329C309.685 696.432 310.098 694.897 310.098 692.724L310.098 672.558L317.038 672.558L317.038 691.988C317.038 695.997 315.986 698.948 313.884 700.841C311.795 702.733 309.019 703.68 305.556 703.68C302.038 703.68 299.22 702.733 297.103 700.841C294.986 698.948 293.928 695.997 293.928 691.988Z"/> +</mask> +<path d="M97.4393 703.175L97.4393 672.558L104.652 672.558L113.757 690.243C113.968 690.691 114.157 691.147 114.325 691.609C114.507 692.058 114.668 692.507 114.809 692.955L114.935 692.955C114.921 692.479 114.907 692.002 114.893 691.525C114.893 691.049 114.893 690.572 114.893 690.095L114.893 672.558L120.907 672.558L120.907 703.175L113.757 703.175L104.526 685.448C104.316 685.028 104.126 684.593 103.958 684.144C103.79 683.696 103.643 683.247 103.516 682.799L103.369 682.799C103.397 683.275 103.411 683.745 103.411 684.208C103.425 684.656 103.432 685.126 103.432 685.616L103.432 703.175L97.4393 703.175ZM125.617 691.988L125.617 672.558L132.62 672.558L132.62 692.724C132.62 694.897 133.026 696.432 133.839 697.329C134.652 698.212 135.781 698.654 137.225 698.654C138.627 698.654 139.734 698.212 140.547 697.329C141.374 696.432 141.788 694.897 141.788 692.724L141.788 672.558L148.727 672.558L148.727 691.988C148.727 695.997 147.676 698.948 145.573 700.841C143.484 702.733 140.709 703.68 137.246 703.68C133.727 703.68 130.909 702.733 128.792 700.841C126.676 698.948 125.617 695.997 125.617 691.988ZM151.335 678.046L151.335 672.558L175.37 672.558L175.37 678.046L166.896 678.046L166.896 703.175L159.83 703.175L159.83 678.046L151.335 678.046ZM176.274 678.046L176.274 672.558L200.31 672.558L200.31 678.046L191.835 678.046L191.835 703.175L184.77 703.175L184.77 678.046L176.274 678.046ZM210.487 703.175L210.487 691.736L200.499 672.558L208.174 672.558L213.494 683.072C213.663 683.422 213.817 683.759 213.957 684.081C214.097 684.39 214.23 684.712 214.357 685.049L214.462 685.049C214.588 684.712 214.714 684.39 214.84 684.081C214.98 683.773 215.142 683.436 215.324 683.072L220.644 672.558L227.436 672.558L217.574 691.567L217.574 703.175L210.487 703.175ZM246.95 703.175L246.95 691.736L236.962 672.558L244.637 672.558L249.958 683.072C250.126 683.422 250.28 683.759 250.42 684.081C250.56 684.39 250.694 684.712 250.82 685.049L250.925 685.049C251.051 684.712 251.177 684.39 251.303 684.081C251.444 683.773 251.605 683.436 251.787 683.072L257.107 672.558L263.899 672.558L254.037 691.567L254.037 703.175L246.95 703.175ZM263.92 688.75L263.92 686.983C263.92 681.908 265.133 678.151 267.558 675.712C269.998 673.273 273.138 672.053 276.979 672.053C280.806 672.053 283.939 673.273 286.379 675.712C288.832 678.151 290.058 681.908 290.058 686.983L290.058 688.75C290.058 693.824 288.832 697.582 286.379 700.021C283.939 702.46 280.806 703.68 276.979 703.68C273.138 703.68 269.998 702.46 267.558 700.021C265.133 697.582 263.92 693.824 263.92 688.75ZM271.175 690.243C271.175 693.187 271.694 695.331 272.731 696.677C273.769 698.009 275.184 698.675 276.979 698.675C278.773 698.675 280.189 698.009 281.227 696.677C282.278 695.331 282.804 693.187 282.804 690.243L282.804 685.511C282.804 682.567 282.278 680.436 281.227 679.119C280.189 677.787 278.773 677.121 276.979 677.121C275.184 677.121 273.769 677.787 272.731 679.119C271.694 680.436 271.175 682.567 271.175 685.511L271.175 690.243ZM293.928 691.988L293.928 672.558L300.93 672.558L300.93 692.724C300.93 694.897 301.337 696.432 302.15 697.329C302.963 698.212 304.091 698.654 305.535 698.654C306.937 698.654 308.045 698.212 308.858 697.329C309.685 696.432 310.098 694.897 310.098 692.724L310.098 672.558L317.038 672.558L317.038 691.988C317.038 695.997 315.986 698.948 313.884 700.841C311.795 702.733 309.019 703.68 305.556 703.68C302.038 703.68 299.22 702.733 297.103 700.841C294.986 698.948 293.928 695.997 293.928 691.988Z" fill="white"/> +<path d="M97.4393 703.175L96.4393 703.175L96.4393 704.175L97.4393 704.175L97.4393 703.175ZM97.4393 672.558L97.4393 671.558L96.4393 671.558L96.4393 672.558L97.4393 672.558ZM104.652 672.558L105.541 672.1L105.262 671.558L104.652 671.558L104.652 672.558ZM113.757 690.243L114.663 689.818L114.655 689.801L114.646 689.785L113.757 690.243ZM114.325 691.609L113.385 691.951L113.392 691.969L113.399 691.986L114.325 691.609ZM114.809 692.955L113.854 693.254L114.073 693.955L114.809 693.955L114.809 692.955ZM114.935 692.955L114.935 693.955L115.965 693.955L115.934 692.926L114.935 692.955ZM114.893 691.525L113.893 691.525L113.893 691.54L113.893 691.555L114.893 691.525ZM114.893 672.558L114.893 671.558L113.893 671.558L113.893 672.558L114.893 672.558ZM120.907 672.558L121.907 672.558L121.907 671.558L120.907 671.558L120.907 672.558ZM120.907 703.175L120.907 704.175L121.907 704.175L121.907 703.175L120.907 703.175ZM113.757 703.175L112.87 703.637L113.151 704.175L113.757 704.175L113.757 703.175ZM104.526 685.448L103.631 685.895L103.635 685.903L103.639 685.91L104.526 685.448ZM103.516 682.799L104.479 682.528L104.274 681.799L103.516 681.799L103.516 682.799ZM103.369 682.799L103.369 681.799L102.309 681.799L102.371 682.857L103.369 682.799ZM103.411 684.208L102.411 684.208L102.411 684.223L102.412 684.239L103.411 684.208ZM103.432 703.175L103.432 704.175L104.432 704.175L104.432 703.175L103.432 703.175ZM97.4393 703.175L98.4393 703.175L98.4393 672.558L97.4393 672.558L96.4393 672.558L96.4393 703.175L97.4393 703.175ZM97.4393 672.558L97.4393 673.558L104.652 673.558L104.652 672.558L104.652 671.558L97.4393 671.558L97.4393 672.558ZM104.652 672.558L103.763 673.016L112.868 690.7L113.757 690.243L114.646 689.785L105.541 672.1L104.652 672.558ZM113.757 690.243L112.852 690.667C113.049 691.089 113.227 691.517 113.385 691.951L114.325 691.609L115.265 691.268C115.086 690.777 114.886 690.294 114.663 689.818L113.757 690.243ZM114.325 691.609L113.399 691.986C113.571 692.41 113.722 692.832 113.854 693.254L114.809 692.955L115.763 692.657C115.614 692.181 115.444 691.707 115.251 691.233L114.325 691.609ZM114.809 692.955L114.809 693.955L114.935 693.955L114.935 692.955L114.935 691.955L114.809 691.955L114.809 692.955ZM114.935 692.955L115.934 692.926C115.933 692.868 115.931 692.805 115.929 692.747C115.927 692.69 115.926 692.626 115.924 692.568C115.922 692.511 115.92 692.447 115.919 692.39C115.917 692.332 115.915 692.269 115.913 692.211C115.909 692.071 115.907 691.993 115.903 691.853C115.899 691.714 115.896 691.636 115.892 691.496L114.893 691.525L113.893 691.555C113.895 691.615 113.897 691.673 113.898 691.734C113.9 691.794 113.902 691.852 113.904 691.912C113.905 691.973 113.907 692.031 113.909 692.091C113.911 692.151 113.912 692.209 113.914 692.27C113.918 692.406 113.921 692.491 113.925 692.627C113.929 692.763 113.931 692.849 113.935 692.985L114.935 692.955ZM114.893 691.525L115.893 691.525C115.893 691.524 115.893 691.524 115.893 691.523C115.893 691.522 115.893 691.521 115.893 691.52C115.893 691.519 115.893 691.518 115.893 691.517C115.893 691.516 115.893 691.515 115.893 691.514C115.893 691.513 115.893 691.512 115.893 691.511C115.893 691.51 115.893 691.51 115.893 691.509C115.893 691.508 115.893 691.507 115.893 691.506C115.893 691.505 115.893 691.504 115.893 691.503C115.893 691.502 115.893 691.501 115.893 691.5C115.893 691.499 115.893 691.498 115.893 691.497C115.893 691.497 115.893 691.496 115.893 691.495C115.893 691.494 115.893 691.493 115.893 691.492C115.893 691.491 115.893 691.49 115.893 691.489C115.893 691.488 115.893 691.487 115.893 691.486C115.893 691.485 115.893 691.484 115.893 691.483C115.893 691.483 115.893 691.482 115.893 691.481C115.893 691.48 115.893 691.479 115.893 691.478C115.893 691.477 115.893 691.476 115.893 691.475C115.893 691.474 115.893 691.473 115.893 691.472C115.893 691.471 115.893 691.47 115.893 691.47C115.893 691.469 115.893 691.468 115.893 691.467C115.893 691.466 115.893 691.465 115.893 691.464C115.893 691.463 115.893 691.462 115.893 691.461C115.893 691.46 115.893 691.459 115.893 691.458C115.893 691.457 115.893 691.456 115.893 691.456C115.893 691.455 115.893 691.454 115.893 691.453C115.893 691.452 115.893 691.451 115.893 691.45C115.893 691.449 115.893 691.448 115.893 691.447C115.893 691.446 115.893 691.445 115.893 691.444C115.893 691.443 115.893 691.443 115.893 691.442C115.893 691.441 115.893 691.44 115.893 691.439C115.893 691.438 115.893 691.437 115.893 691.436C115.893 691.435 115.893 691.434 115.893 691.433C115.893 691.432 115.893 691.431 115.893 691.43C115.893 691.429 115.893 691.429 115.893 691.428C115.893 691.427 115.893 691.426 115.893 691.425C115.893 691.424 115.893 691.423 115.893 691.422C115.893 691.421 115.893 691.42 115.893 691.419C115.893 691.418 115.893 691.417 115.893 691.416C115.893 691.416 115.893 691.415 115.893 691.414C115.893 691.413 115.893 691.412 115.893 691.411C115.893 691.41 115.893 691.409 115.893 691.408C115.893 691.407 115.893 691.406 115.893 691.405C115.893 691.404 115.893 691.403 115.893 691.402C115.893 691.402 115.893 691.401 115.893 691.4C115.893 691.399 115.893 691.398 115.893 691.397C115.893 691.396 115.893 691.395 115.893 691.394C115.893 691.393 115.893 691.392 115.893 691.391C115.893 691.39 115.893 691.389 115.893 691.389C115.893 691.388 115.893 691.387 115.893 691.386C115.893 691.385 115.893 691.384 115.893 691.383C115.893 691.382 115.893 691.381 115.893 691.38C115.893 691.379 115.893 691.378 115.893 691.377C115.893 691.376 115.893 691.375 115.893 691.375C115.893 691.374 115.893 691.373 115.893 691.372C115.893 691.371 115.893 691.37 115.893 691.369C115.893 691.368 115.893 691.367 115.893 691.366C115.893 691.365 115.893 691.364 115.893 691.363C115.893 691.362 115.893 691.362 115.893 691.361C115.893 691.36 115.893 691.359 115.893 691.358C115.893 691.357 115.893 691.356 115.893 691.355C115.893 691.354 115.893 691.353 115.893 691.352C115.893 691.351 115.893 691.35 115.893 691.349C115.893 691.348 115.893 691.348 115.893 691.347C115.893 691.346 115.893 691.345 115.893 691.344C115.893 691.343 115.893 691.342 115.893 691.341C115.893 691.34 115.893 691.339 115.893 691.338C115.893 691.337 115.893 691.336 115.893 691.335C115.893 691.335 115.893 691.334 115.893 691.333C115.893 691.332 115.893 691.331 115.893 691.33C115.893 691.329 115.893 691.328 115.893 691.327C115.893 691.326 115.893 691.325 115.893 691.324C115.893 691.323 115.893 691.322 115.893 691.321C115.893 691.321 115.893 691.32 115.893 691.319C115.893 691.318 115.893 691.317 115.893 691.316C115.893 691.315 115.893 691.314 115.893 691.313C115.893 691.312 115.893 691.311 115.893 691.31C115.893 691.309 115.893 691.308 115.893 691.308C115.893 691.307 115.893 691.306 115.893 691.305C115.893 691.304 115.893 691.303 115.893 691.302C115.893 691.301 115.893 691.3 115.893 691.299C115.893 691.298 115.893 691.297 115.893 691.296C115.893 691.295 115.893 691.294 115.893 691.294C115.893 691.293 115.893 691.292 115.893 691.291C115.893 691.29 115.893 691.289 115.893 691.288C115.893 691.287 115.893 691.286 115.893 691.285C115.893 691.284 115.893 691.283 115.893 691.282C115.893 691.281 115.893 691.281 115.893 691.28C115.893 691.279 115.893 691.278 115.893 691.277C115.893 691.276 115.893 691.275 115.893 691.274C115.893 691.273 115.893 691.272 115.893 691.271C115.893 691.27 115.893 691.269 115.893 691.268C115.893 691.268 115.893 691.267 115.893 691.266C115.893 691.265 115.893 691.264 115.893 691.263C115.893 691.262 115.893 691.261 115.893 691.26C115.893 691.259 115.893 691.258 115.893 691.257C115.893 691.256 115.893 691.255 115.893 691.254C115.893 691.254 115.893 691.253 115.893 691.252C115.893 691.251 115.893 691.25 115.893 691.249C115.893 691.248 115.893 691.247 115.893 691.246C115.893 691.245 115.893 691.244 115.893 691.243C115.893 691.242 115.893 691.241 115.893 691.241C115.893 691.24 115.893 691.239 115.893 691.238C115.893 691.237 115.893 691.236 115.893 691.235C115.893 691.234 115.893 691.233 115.893 691.232C115.893 691.231 115.893 691.23 115.893 691.229C115.893 691.228 115.893 691.227 115.893 691.227C115.893 691.226 115.893 691.225 115.893 691.224C115.893 691.223 115.893 691.222 115.893 691.221C115.893 691.22 115.893 691.219 115.893 691.218C115.893 691.217 115.893 691.216 115.893 691.215C115.893 691.214 115.893 691.214 115.893 691.213C115.893 691.212 115.893 691.211 115.893 691.21C115.893 691.209 115.893 691.208 115.893 691.207C115.893 691.206 115.893 691.205 115.893 691.204C115.893 691.203 115.893 691.202 115.893 691.201C115.893 691.2 115.893 691.2 115.893 691.199C115.893 691.198 115.893 691.197 115.893 691.196C115.893 691.195 115.893 691.194 115.893 691.193C115.893 691.192 115.893 691.191 115.893 691.19C115.893 691.189 115.893 691.188 115.893 691.187C115.893 691.187 115.893 691.186 115.893 691.185C115.893 691.184 115.893 691.183 115.893 691.182C115.893 691.181 115.893 691.18 115.893 691.179C115.893 691.178 115.893 691.177 115.893 691.176C115.893 691.175 115.893 691.174 115.893 691.173C115.893 691.173 115.893 691.172 115.893 691.171C115.893 691.17 115.893 691.169 115.893 691.168C115.893 691.167 115.893 691.166 115.893 691.165C115.893 691.164 115.893 691.163 115.893 691.162C115.893 691.161 115.893 691.16 115.893 691.16C115.893 691.159 115.893 691.158 115.893 691.157C115.893 691.156 115.893 691.155 115.893 691.154C115.893 691.153 115.893 691.152 115.893 691.151C115.893 691.15 115.893 691.149 115.893 691.148C115.893 691.147 115.893 691.146 115.893 691.146C115.893 691.145 115.893 691.144 115.893 691.143C115.893 691.142 115.893 691.141 115.893 691.14C115.893 691.139 115.893 691.138 115.893 691.137C115.893 691.136 115.893 691.135 115.893 691.134C115.893 691.133 115.893 691.133 115.893 691.132C115.893 691.131 115.893 691.13 115.893 691.129C115.893 691.128 115.893 691.127 115.893 691.126C115.893 691.125 115.893 691.124 115.893 691.123C115.893 691.122 115.893 691.121 115.893 691.12C115.893 691.119 115.893 691.119 115.893 691.118C115.893 691.117 115.893 691.116 115.893 691.115C115.893 691.114 115.893 691.113 115.893 691.112C115.893 691.111 115.893 691.11 115.893 691.109C115.893 691.108 115.893 691.107 115.893 691.106C115.893 691.106 115.893 691.105 115.893 691.104C115.893 691.103 115.893 691.102 115.893 691.101C115.893 691.1 115.893 691.099 115.893 691.098C115.893 691.097 115.893 691.096 115.893 691.095C115.893 691.094 115.893 691.093 115.893 691.092C115.893 691.092 115.893 691.091 115.893 691.09C115.893 691.089 115.893 691.088 115.893 691.087C115.893 691.086 115.893 691.085 115.893 691.084C115.893 691.083 115.893 691.082 115.893 691.081C115.893 691.08 115.893 691.079 115.893 691.079C115.893 691.078 115.893 691.077 115.893 691.076C115.893 691.075 115.893 691.074 115.893 691.073C115.893 691.072 115.893 691.071 115.893 691.07C115.893 691.069 115.893 691.068 115.893 691.067C115.893 691.066 115.893 691.065 115.893 691.065C115.893 691.064 115.893 691.063 115.893 691.062C115.893 691.061 115.893 691.06 115.893 691.059C115.893 691.058 115.893 691.057 115.893 691.056C115.893 691.055 115.893 691.054 115.893 691.053C115.893 691.052 115.893 691.052 115.893 691.051C115.893 691.05 115.893 691.049 115.893 691.048C115.893 691.047 115.893 691.046 115.893 691.045C115.893 691.044 115.893 691.043 115.893 691.042C115.893 691.041 115.893 691.04 115.893 691.039C115.893 691.038 115.893 691.038 115.893 691.037C115.893 691.036 115.893 691.035 115.893 691.034C115.893 691.033 115.893 691.032 115.893 691.031C115.893 691.03 115.893 691.029 115.893 691.028C115.893 691.027 115.893 691.026 115.893 691.025C115.893 691.025 115.893 691.024 115.893 691.023C115.893 691.022 115.893 691.021 115.893 691.02C115.893 691.019 115.893 691.018 115.893 691.017C115.893 691.016 115.893 691.015 115.893 691.014C115.893 691.013 115.893 691.012 115.893 691.011C115.893 691.011 115.893 691.01 115.893 691.009C115.893 691.008 115.893 691.007 115.893 691.006C115.893 691.005 115.893 691.004 115.893 691.003C115.893 691.002 115.893 691.001 115.893 691C115.893 690.999 115.893 690.998 115.893 690.998C115.893 690.997 115.893 690.996 115.893 690.995C115.893 690.994 115.893 690.993 115.893 690.992C115.893 690.991 115.893 690.99 115.893 690.989C115.893 690.988 115.893 690.987 115.893 690.986C115.893 690.985 115.893 690.984 115.893 690.984C115.893 690.983 115.893 690.982 115.893 690.981C115.893 690.98 115.893 690.979 115.893 690.978C115.893 690.977 115.893 690.976 115.893 690.975C115.893 690.974 115.893 690.973 115.893 690.972C115.893 690.971 115.893 690.971 115.893 690.97C115.893 690.969 115.893 690.968 115.893 690.967C115.893 690.966 115.893 690.965 115.893 690.964C115.893 690.963 115.893 690.962 115.893 690.961C115.893 690.96 115.893 690.959 115.893 690.958C115.893 690.957 115.893 690.957 115.893 690.956C115.893 690.955 115.893 690.954 115.893 690.953C115.893 690.952 115.893 690.951 115.893 690.95C115.893 690.949 115.893 690.948 115.893 690.947C115.893 690.946 115.893 690.945 115.893 690.944C115.893 690.944 115.893 690.943 115.893 690.942C115.893 690.941 115.893 690.94 115.893 690.939C115.893 690.938 115.893 690.937 115.893 690.936C115.893 690.935 115.893 690.934 115.893 690.933C115.893 690.932 115.893 690.931 115.893 690.931C115.893 690.93 115.893 690.929 115.893 690.928C115.893 690.927 115.893 690.926 115.893 690.925C115.893 690.924 115.893 690.923 115.893 690.922C115.893 690.921 115.893 690.92 115.893 690.919C115.893 690.918 115.893 690.917 115.893 690.917C115.893 690.916 115.893 690.915 115.893 690.914C115.893 690.913 115.893 690.912 115.893 690.911C115.893 690.91 115.893 690.909 115.893 690.908C115.893 690.907 115.893 690.906 115.893 690.905C115.893 690.904 115.893 690.904 115.893 690.903C115.893 690.902 115.893 690.901 115.893 690.9C115.893 690.899 115.893 690.898 115.893 690.897C115.893 690.896 115.893 690.895 115.893 690.894C115.893 690.893 115.893 690.892 115.893 690.891C115.893 690.89 115.893 690.89 115.893 690.889C115.893 690.888 115.893 690.887 115.893 690.886C115.893 690.885 115.893 690.884 115.893 690.883C115.893 690.882 115.893 690.881 115.893 690.88C115.893 690.879 115.893 690.878 115.893 690.877C115.893 690.877 115.893 690.876 115.893 690.875C115.893 690.874 115.893 690.873 115.893 690.872C115.893 690.871 115.893 690.87 115.893 690.869C115.893 690.868 115.893 690.867 115.893 690.866C115.893 690.865 115.893 690.864 115.893 690.863C115.893 690.863 115.893 690.862 115.893 690.861C115.893 690.86 115.893 690.859 115.893 690.858C115.893 690.857 115.893 690.856 115.893 690.855C115.893 690.854 115.893 690.853 115.893 690.852C115.893 690.851 115.893 690.85 115.893 690.85C115.893 690.849 115.893 690.848 115.893 690.847C115.893 690.846 115.893 690.845 115.893 690.844C115.893 690.843 115.893 690.842 115.893 690.841C115.893 690.84 115.893 690.839 115.893 690.838C115.893 690.837 115.893 690.836 115.893 690.836C115.893 690.835 115.893 690.834 115.893 690.833C115.893 690.832 115.893 690.831 115.893 690.83C115.893 690.829 115.893 690.828 115.893 690.827C115.893 690.826 115.893 690.825 115.893 690.824C115.893 690.823 115.893 690.823 115.893 690.822C115.893 690.821 115.893 690.82 115.893 690.819C115.893 690.818 115.893 690.817 115.893 690.816C115.893 690.815 115.893 690.814 115.893 690.813C115.893 690.812 115.893 690.811 115.893 690.81C115.893 690.809 115.893 690.809 115.893 690.808C115.893 690.807 115.893 690.806 115.893 690.805C115.893 690.804 115.893 690.803 115.893 690.802C115.893 690.801 115.893 690.8 115.893 690.799C115.893 690.798 115.893 690.797 115.893 690.796C115.893 690.796 115.893 690.795 115.893 690.794C115.893 690.793 115.893 690.792 115.893 690.791C115.893 690.79 115.893 690.789 115.893 690.788C115.893 690.787 115.893 690.786 115.893 690.785C115.893 690.784 115.893 690.783 115.893 690.782C115.893 690.782 115.893 690.781 115.893 690.78C115.893 690.779 115.893 690.778 115.893 690.777C115.893 690.776 115.893 690.775 115.893 690.774C115.893 690.773 115.893 690.772 115.893 690.771C115.893 690.77 115.893 690.769 115.893 690.769C115.893 690.768 115.893 690.767 115.893 690.766C115.893 690.765 115.893 690.764 115.893 690.763C115.893 690.762 115.893 690.761 115.893 690.76C115.893 690.759 115.893 690.758 115.893 690.757C115.893 690.756 115.893 690.755 115.893 690.755C115.893 690.754 115.893 690.753 115.893 690.752C115.893 690.751 115.893 690.75 115.893 690.749C115.893 690.748 115.893 690.747 115.893 690.746C115.893 690.745 115.893 690.744 115.893 690.743C115.893 690.742 115.893 690.742 115.893 690.741C115.893 690.74 115.893 690.739 115.893 690.738C115.893 690.737 115.893 690.736 115.893 690.735C115.893 690.734 115.893 690.733 115.893 690.732C115.893 690.731 115.893 690.73 115.893 690.729C115.893 690.728 115.893 690.728 115.893 690.727C115.893 690.726 115.893 690.725 115.893 690.724C115.893 690.723 115.893 690.722 115.893 690.721C115.893 690.72 115.893 690.719 115.893 690.718C115.893 690.717 115.893 690.716 115.893 690.715C115.893 690.715 115.893 690.714 115.893 690.713C115.893 690.712 115.893 690.711 115.893 690.71C115.893 690.709 115.893 690.708 115.893 690.707C115.893 690.706 115.893 690.705 115.893 690.704C115.893 690.703 115.893 690.702 115.893 690.701C115.893 690.701 115.893 690.7 115.893 690.699C115.893 690.698 115.893 690.697 115.893 690.696C115.893 690.695 115.893 690.694 115.893 690.693C115.893 690.692 115.893 690.691 115.893 690.69C115.893 690.689 115.893 690.688 115.893 690.688C115.893 690.687 115.893 690.686 115.893 690.685C115.893 690.684 115.893 690.683 115.893 690.682C115.893 690.681 115.893 690.68 115.893 690.679C115.893 690.678 115.893 690.677 115.893 690.676C115.893 690.675 115.893 690.674 115.893 690.674C115.893 690.673 115.893 690.672 115.893 690.671C115.893 690.67 115.893 690.669 115.893 690.668C115.893 690.667 115.893 690.666 115.893 690.665C115.893 690.664 115.893 690.663 115.893 690.662C115.893 690.661 115.893 690.661 115.893 690.66C115.893 690.659 115.893 690.658 115.893 690.657C115.893 690.656 115.893 690.655 115.893 690.654C115.893 690.653 115.893 690.652 115.893 690.651C115.893 690.65 115.893 690.649 115.893 690.648C115.893 690.647 115.893 690.647 115.893 690.646C115.893 690.645 115.893 690.644 115.893 690.643C115.893 690.642 115.893 690.641 115.893 690.64C115.893 690.639 115.893 690.638 115.893 690.637C115.893 690.636 115.893 690.635 115.893 690.634C115.893 690.634 115.893 690.633 115.893 690.632C115.893 690.631 115.893 690.63 115.893 690.629C115.893 690.628 115.893 690.627 115.893 690.626C115.893 690.625 115.893 690.624 115.893 690.623C115.893 690.622 115.893 690.621 115.893 690.62C115.893 690.62 115.893 690.619 115.893 690.618C115.893 690.617 115.893 690.616 115.893 690.615C115.893 690.614 115.893 690.613 115.893 690.612C115.893 690.611 115.893 690.61 115.893 690.609C115.893 690.608 115.893 690.607 115.893 690.607C115.893 690.606 115.893 690.605 115.893 690.604C115.893 690.603 115.893 690.602 115.893 690.601C115.893 690.6 115.893 690.599 115.893 690.598C115.893 690.597 115.893 690.596 115.893 690.595C115.893 690.594 115.893 690.594 115.893 690.593C115.893 690.592 115.893 690.591 115.893 690.59C115.893 690.589 115.893 690.588 115.893 690.587C115.893 690.586 115.893 690.585 115.893 690.584C115.893 690.583 115.893 690.582 115.893 690.581C115.893 690.58 115.893 690.58 115.893 690.579C115.893 690.578 115.893 690.577 115.893 690.576C115.893 690.575 115.893 690.574 115.893 690.573C115.893 690.572 115.893 690.571 115.893 690.57C115.893 690.569 115.893 690.568 115.893 690.567C115.893 690.567 115.893 690.566 115.893 690.565C115.893 690.564 115.893 690.563 115.893 690.562C115.893 690.561 115.893 690.56 115.893 690.559C115.893 690.558 115.893 690.557 115.893 690.556C115.893 690.555 115.893 690.554 115.893 690.553C115.893 690.553 115.893 690.552 115.893 690.551C115.893 690.55 115.893 690.549 115.893 690.548C115.893 690.547 115.893 690.546 115.893 690.545C115.893 690.544 115.893 690.543 115.893 690.542C115.893 690.541 115.893 690.54 115.893 690.54C115.893 690.539 115.893 690.538 115.893 690.537C115.893 690.536 115.893 690.535 115.893 690.534C115.893 690.533 115.893 690.532 115.893 690.531C115.893 690.53 115.893 690.529 115.893 690.528C115.893 690.527 115.893 690.526 115.893 690.526C115.893 690.525 115.893 690.524 115.893 690.523C115.893 690.522 115.893 690.521 115.893 690.52C115.893 690.519 115.893 690.518 115.893 690.517C115.893 690.516 115.893 690.515 115.893 690.514C115.893 690.513 115.893 690.513 115.893 690.512C115.893 690.511 115.893 690.51 115.893 690.509C115.893 690.508 115.893 690.507 115.893 690.506C115.893 690.505 115.893 690.504 115.893 690.503C115.893 690.502 115.893 690.501 115.893 690.5C115.893 690.499 115.893 690.499 115.893 690.498C115.893 690.497 115.893 690.496 115.893 690.495C115.893 690.494 115.893 690.493 115.893 690.492C115.893 690.491 115.893 690.49 115.893 690.489C115.893 690.488 115.893 690.487 115.893 690.486C115.893 690.486 115.893 690.485 115.893 690.484C115.893 690.483 115.893 690.482 115.893 690.481C115.893 690.48 115.893 690.479 115.893 690.478C115.893 690.477 115.893 690.476 115.893 690.475C115.893 690.474 115.893 690.473 115.893 690.472C115.893 690.472 115.893 690.471 115.893 690.47C115.893 690.469 115.893 690.468 115.893 690.467C115.893 690.466 115.893 690.465 115.893 690.464C115.893 690.463 115.893 690.462 115.893 690.461C115.893 690.46 115.893 690.459 115.893 690.459C115.893 690.458 115.893 690.457 115.893 690.456C115.893 690.455 115.893 690.454 115.893 690.453C115.893 690.452 115.893 690.451 115.893 690.45C115.893 690.449 115.893 690.448 115.893 690.447C115.893 690.446 115.893 690.445 115.893 690.445C115.893 690.444 115.893 690.443 115.893 690.442C115.893 690.441 115.893 690.44 115.893 690.439C115.893 690.438 115.893 690.437 115.893 690.436C115.893 690.435 115.893 690.434 115.893 690.433C115.893 690.432 115.893 690.432 115.893 690.431C115.893 690.43 115.893 690.429 115.893 690.428C115.893 690.427 115.893 690.426 115.893 690.425C115.893 690.424 115.893 690.423 115.893 690.422C115.893 690.421 115.893 690.42 115.893 690.419C115.893 690.418 115.893 690.418 115.893 690.417C115.893 690.416 115.893 690.415 115.893 690.414C115.893 690.413 115.893 690.412 115.893 690.411C115.893 690.41 115.893 690.409 115.893 690.408C115.893 690.407 115.893 690.406 115.893 690.405C115.893 690.405 115.893 690.404 115.893 690.403C115.893 690.402 115.893 690.401 115.893 690.4C115.893 690.399 115.893 690.398 115.893 690.397C115.893 690.396 115.893 690.395 115.893 690.394C115.893 690.393 115.893 690.392 115.893 690.391C115.893 690.391 115.893 690.39 115.893 690.389C115.893 690.388 115.893 690.387 115.893 690.386C115.893 690.385 115.893 690.384 115.893 690.383C115.893 690.382 115.893 690.381 115.893 690.38C115.893 690.379 115.893 690.378 115.893 690.378C115.893 690.377 115.893 690.376 115.893 690.375C115.893 690.374 115.893 690.373 115.893 690.372C115.893 690.371 115.893 690.37 115.893 690.369C115.893 690.368 115.893 690.367 115.893 690.366C115.893 690.365 115.893 690.364 115.893 690.364C115.893 690.363 115.893 690.362 115.893 690.361C115.893 690.36 115.893 690.359 115.893 690.358C115.893 690.357 115.893 690.356 115.893 690.355C115.893 690.354 115.893 690.353 115.893 690.352C115.893 690.351 115.893 690.351 115.893 690.35C115.893 690.349 115.893 690.348 115.893 690.347C115.893 690.346 115.893 690.345 115.893 690.344C115.893 690.343 115.893 690.342 115.893 690.341C115.893 690.34 115.893 690.339 115.893 690.338C115.893 690.337 115.893 690.337 115.893 690.336C115.893 690.335 115.893 690.334 115.893 690.333C115.893 690.332 115.893 690.331 115.893 690.33C115.893 690.329 115.893 690.328 115.893 690.327C115.893 690.326 115.893 690.325 115.893 690.324C115.893 690.324 115.893 690.323 115.893 690.322C115.893 690.321 115.893 690.32 115.893 690.319C115.893 690.318 115.893 690.317 115.893 690.316C115.893 690.315 115.893 690.314 115.893 690.313C115.893 690.312 115.893 690.311 115.893 690.31C115.893 690.31 115.893 690.309 115.893 690.308C115.893 690.307 115.893 690.306 115.893 690.305C115.893 690.304 115.893 690.303 115.893 690.302C115.893 690.301 115.893 690.3 115.893 690.299C115.893 690.298 115.893 690.297 115.893 690.297C115.893 690.296 115.893 690.295 115.893 690.294C115.893 690.293 115.893 690.292 115.893 690.291C115.893 690.29 115.893 690.289 115.893 690.288C115.893 690.287 115.893 690.286 115.893 690.285C115.893 690.284 115.893 690.283 115.893 690.283C115.893 690.282 115.893 690.281 115.893 690.28C115.893 690.279 115.893 690.278 115.893 690.277C115.893 690.276 115.893 690.275 115.893 690.274C115.893 690.273 115.893 690.272 115.893 690.271C115.893 690.27 115.893 690.27 115.893 690.269C115.893 690.268 115.893 690.267 115.893 690.266C115.893 690.265 115.893 690.264 115.893 690.263C115.893 690.262 115.893 690.261 115.893 690.26C115.893 690.259 115.893 690.258 115.893 690.257C115.893 690.257 115.893 690.256 115.893 690.255C115.893 690.254 115.893 690.253 115.893 690.252C115.893 690.251 115.893 690.25 115.893 690.249C115.893 690.248 115.893 690.247 115.893 690.246C115.893 690.245 115.893 690.244 115.893 690.243C115.893 690.243 115.893 690.242 115.893 690.241C115.893 690.24 115.893 690.239 115.893 690.238C115.893 690.237 115.893 690.236 115.893 690.235C115.893 690.234 115.893 690.233 115.893 690.232C115.893 690.231 115.893 690.23 115.893 690.23C115.893 690.229 115.893 690.228 115.893 690.227C115.893 690.226 115.893 690.225 115.893 690.224C115.893 690.223 115.893 690.222 115.893 690.221C115.893 690.22 115.893 690.219 115.893 690.218C115.893 690.217 115.893 690.216 115.893 690.216C115.893 690.215 115.893 690.214 115.893 690.213C115.893 690.212 115.893 690.211 115.893 690.21C115.893 690.209 115.893 690.208 115.893 690.207C115.893 690.206 115.893 690.205 115.893 690.204C115.893 690.203 115.893 690.203 115.893 690.202C115.893 690.201 115.893 690.2 115.893 690.199C115.893 690.198 115.893 690.197 115.893 690.196C115.893 690.195 115.893 690.194 115.893 690.193C115.893 690.192 115.893 690.191 115.893 690.19C115.893 690.189 115.893 690.189 115.893 690.188C115.893 690.187 115.893 690.186 115.893 690.185C115.893 690.184 115.893 690.183 115.893 690.182C115.893 690.181 115.893 690.18 115.893 690.179C115.893 690.178 115.893 690.177 115.893 690.176C115.893 690.176 115.893 690.175 115.893 690.174C115.893 690.173 115.893 690.172 115.893 690.171C115.893 690.17 115.893 690.169 115.893 690.168C115.893 690.167 115.893 690.166 115.893 690.165C115.893 690.164 115.893 690.163 115.893 690.162C115.893 690.162 115.893 690.161 115.893 690.16C115.893 690.159 115.893 690.158 115.893 690.157C115.893 690.156 115.893 690.155 115.893 690.154C115.893 690.153 115.893 690.152 115.893 690.151C115.893 690.15 115.893 690.149 115.893 690.149C115.893 690.148 115.893 690.147 115.893 690.146C115.893 690.145 115.893 690.144 115.893 690.143C115.893 690.142 115.893 690.141 115.893 690.14C115.893 690.139 115.893 690.138 115.893 690.137C115.893 690.136 115.893 690.135 115.893 690.135C115.893 690.134 115.893 690.133 115.893 690.132C115.893 690.131 115.893 690.13 115.893 690.129C115.893 690.128 115.893 690.127 115.893 690.126C115.893 690.125 115.893 690.124 115.893 690.123C115.893 690.122 115.893 690.122 115.893 690.121C115.893 690.12 115.893 690.119 115.893 690.118C115.893 690.117 115.893 690.116 115.893 690.115C115.893 690.114 115.893 690.113 115.893 690.112C115.893 690.111 115.893 690.11 115.893 690.109C115.893 690.108 115.893 690.108 115.893 690.107C115.893 690.106 115.893 690.105 115.893 690.104C115.893 690.103 115.893 690.102 115.893 690.101C115.893 690.1 115.893 690.099 115.893 690.098C115.893 690.097 115.893 690.096 115.893 690.095L114.893 690.095L113.893 690.095C113.893 690.096 113.893 690.097 113.893 690.098C113.893 690.099 113.893 690.1 113.893 690.101C113.893 690.102 113.893 690.103 113.893 690.104C113.893 690.105 113.893 690.106 113.893 690.107C113.893 690.108 113.893 690.108 113.893 690.109C113.893 690.11 113.893 690.111 113.893 690.112C113.893 690.113 113.893 690.114 113.893 690.115C113.893 690.116 113.893 690.117 113.893 690.118C113.893 690.119 113.893 690.12 113.893 690.121C113.893 690.122 113.893 690.122 113.893 690.123C113.893 690.124 113.893 690.125 113.893 690.126C113.893 690.127 113.893 690.128 113.893 690.129C113.893 690.13 113.893 690.131 113.893 690.132C113.893 690.133 113.893 690.134 113.893 690.135C113.893 690.135 113.893 690.136 113.893 690.137C113.893 690.138 113.893 690.139 113.893 690.14C113.893 690.141 113.893 690.142 113.893 690.143C113.893 690.144 113.893 690.145 113.893 690.146C113.893 690.147 113.893 690.148 113.893 690.149C113.893 690.149 113.893 690.15 113.893 690.151C113.893 690.152 113.893 690.153 113.893 690.154C113.893 690.155 113.893 690.156 113.893 690.157C113.893 690.158 113.893 690.159 113.893 690.16C113.893 690.161 113.893 690.162 113.893 690.162C113.893 690.163 113.893 690.164 113.893 690.165C113.893 690.166 113.893 690.167 113.893 690.168C113.893 690.169 113.893 690.17 113.893 690.171C113.893 690.172 113.893 690.173 113.893 690.174C113.893 690.175 113.893 690.176 113.893 690.176C113.893 690.177 113.893 690.178 113.893 690.179C113.893 690.18 113.893 690.181 113.893 690.182C113.893 690.183 113.893 690.184 113.893 690.185C113.893 690.186 113.893 690.187 113.893 690.188C113.893 690.189 113.893 690.189 113.893 690.19C113.893 690.191 113.893 690.192 113.893 690.193C113.893 690.194 113.893 690.195 113.893 690.196C113.893 690.197 113.893 690.198 113.893 690.199C113.893 690.2 113.893 690.201 113.893 690.202C113.893 690.203 113.893 690.203 113.893 690.204C113.893 690.205 113.893 690.206 113.893 690.207C113.893 690.208 113.893 690.209 113.893 690.21C113.893 690.211 113.893 690.212 113.893 690.213C113.893 690.214 113.893 690.215 113.893 690.216C113.893 690.216 113.893 690.217 113.893 690.218C113.893 690.219 113.893 690.22 113.893 690.221C113.893 690.222 113.893 690.223 113.893 690.224C113.893 690.225 113.893 690.226 113.893 690.227C113.893 690.228 113.893 690.229 113.893 690.23C113.893 690.23 113.893 690.231 113.893 690.232C113.893 690.233 113.893 690.234 113.893 690.235C113.893 690.236 113.893 690.237 113.893 690.238C113.893 690.239 113.893 690.24 113.893 690.241C113.893 690.242 113.893 690.243 113.893 690.243C113.893 690.244 113.893 690.245 113.893 690.246C113.893 690.247 113.893 690.248 113.893 690.249C113.893 690.25 113.893 690.251 113.893 690.252C113.893 690.253 113.893 690.254 113.893 690.255C113.893 690.256 113.893 690.257 113.893 690.257C113.893 690.258 113.893 690.259 113.893 690.26C113.893 690.261 113.893 690.262 113.893 690.263C113.893 690.264 113.893 690.265 113.893 690.266C113.893 690.267 113.893 690.268 113.893 690.269C113.893 690.27 113.893 690.27 113.893 690.271C113.893 690.272 113.893 690.273 113.893 690.274C113.893 690.275 113.893 690.276 113.893 690.277C113.893 690.278 113.893 690.279 113.893 690.28C113.893 690.281 113.893 690.282 113.893 690.283C113.893 690.283 113.893 690.284 113.893 690.285C113.893 690.286 113.893 690.287 113.893 690.288C113.893 690.289 113.893 690.29 113.893 690.291C113.893 690.292 113.893 690.293 113.893 690.294C113.893 690.295 113.893 690.296 113.893 690.297C113.893 690.297 113.893 690.298 113.893 690.299C113.893 690.3 113.893 690.301 113.893 690.302C113.893 690.303 113.893 690.304 113.893 690.305C113.893 690.306 113.893 690.307 113.893 690.308C113.893 690.309 113.893 690.31 113.893 690.31C113.893 690.311 113.893 690.312 113.893 690.313C113.893 690.314 113.893 690.315 113.893 690.316C113.893 690.317 113.893 690.318 113.893 690.319C113.893 690.32 113.893 690.321 113.893 690.322C113.893 690.323 113.893 690.324 113.893 690.324C113.893 690.325 113.893 690.326 113.893 690.327C113.893 690.328 113.893 690.329 113.893 690.33C113.893 690.331 113.893 690.332 113.893 690.333C113.893 690.334 113.893 690.335 113.893 690.336C113.893 690.337 113.893 690.337 113.893 690.338C113.893 690.339 113.893 690.34 113.893 690.341C113.893 690.342 113.893 690.343 113.893 690.344C113.893 690.345 113.893 690.346 113.893 690.347C113.893 690.348 113.893 690.349 113.893 690.35C113.893 690.351 113.893 690.351 113.893 690.352C113.893 690.353 113.893 690.354 113.893 690.355C113.893 690.356 113.893 690.357 113.893 690.358C113.893 690.359 113.893 690.36 113.893 690.361C113.893 690.362 113.893 690.363 113.893 690.364C113.893 690.364 113.893 690.365 113.893 690.366C113.893 690.367 113.893 690.368 113.893 690.369C113.893 690.37 113.893 690.371 113.893 690.372C113.893 690.373 113.893 690.374 113.893 690.375C113.893 690.376 113.893 690.377 113.893 690.378C113.893 690.378 113.893 690.379 113.893 690.38C113.893 690.381 113.893 690.382 113.893 690.383C113.893 690.384 113.893 690.385 113.893 690.386C113.893 690.387 113.893 690.388 113.893 690.389C113.893 690.39 113.893 690.391 113.893 690.391C113.893 690.392 113.893 690.393 113.893 690.394C113.893 690.395 113.893 690.396 113.893 690.397C113.893 690.398 113.893 690.399 113.893 690.4C113.893 690.401 113.893 690.402 113.893 690.403C113.893 690.404 113.893 690.405 113.893 690.405C113.893 690.406 113.893 690.407 113.893 690.408C113.893 690.409 113.893 690.41 113.893 690.411C113.893 690.412 113.893 690.413 113.893 690.414C113.893 690.415 113.893 690.416 113.893 690.417C113.893 690.418 113.893 690.418 113.893 690.419C113.893 690.42 113.893 690.421 113.893 690.422C113.893 690.423 113.893 690.424 113.893 690.425C113.893 690.426 113.893 690.427 113.893 690.428C113.893 690.429 113.893 690.43 113.893 690.431C113.893 690.432 113.893 690.432 113.893 690.433C113.893 690.434 113.893 690.435 113.893 690.436C113.893 690.437 113.893 690.438 113.893 690.439C113.893 690.44 113.893 690.441 113.893 690.442C113.893 690.443 113.893 690.444 113.893 690.445C113.893 690.445 113.893 690.446 113.893 690.447C113.893 690.448 113.893 690.449 113.893 690.45C113.893 690.451 113.893 690.452 113.893 690.453C113.893 690.454 113.893 690.455 113.893 690.456C113.893 690.457 113.893 690.458 113.893 690.459C113.893 690.459 113.893 690.46 113.893 690.461C113.893 690.462 113.893 690.463 113.893 690.464C113.893 690.465 113.893 690.466 113.893 690.467C113.893 690.468 113.893 690.469 113.893 690.47C113.893 690.471 113.893 690.472 113.893 690.472C113.893 690.473 113.893 690.474 113.893 690.475C113.893 690.476 113.893 690.477 113.893 690.478C113.893 690.479 113.893 690.48 113.893 690.481C113.893 690.482 113.893 690.483 113.893 690.484C113.893 690.485 113.893 690.486 113.893 690.486C113.893 690.487 113.893 690.488 113.893 690.489C113.893 690.49 113.893 690.491 113.893 690.492C113.893 690.493 113.893 690.494 113.893 690.495C113.893 690.496 113.893 690.497 113.893 690.498C113.893 690.499 113.893 690.499 113.893 690.5C113.893 690.501 113.893 690.502 113.893 690.503C113.893 690.504 113.893 690.505 113.893 690.506C113.893 690.507 113.893 690.508 113.893 690.509C113.893 690.51 113.893 690.511 113.893 690.512C113.893 690.513 113.893 690.513 113.893 690.514C113.893 690.515 113.893 690.516 113.893 690.517C113.893 690.518 113.893 690.519 113.893 690.52C113.893 690.521 113.893 690.522 113.893 690.523C113.893 690.524 113.893 690.525 113.893 690.526C113.893 690.526 113.893 690.527 113.893 690.528C113.893 690.529 113.893 690.53 113.893 690.531C113.893 690.532 113.893 690.533 113.893 690.534C113.893 690.535 113.893 690.536 113.893 690.537C113.893 690.538 113.893 690.539 113.893 690.54C113.893 690.54 113.893 690.541 113.893 690.542C113.893 690.543 113.893 690.544 113.893 690.545C113.893 690.546 113.893 690.547 113.893 690.548C113.893 690.549 113.893 690.55 113.893 690.551C113.893 690.552 113.893 690.553 113.893 690.553C113.893 690.554 113.893 690.555 113.893 690.556C113.893 690.557 113.893 690.558 113.893 690.559C113.893 690.56 113.893 690.561 113.893 690.562C113.893 690.563 113.893 690.564 113.893 690.565C113.893 690.566 113.893 690.567 113.893 690.567C113.893 690.568 113.893 690.569 113.893 690.57C113.893 690.571 113.893 690.572 113.893 690.573C113.893 690.574 113.893 690.575 113.893 690.576C113.893 690.577 113.893 690.578 113.893 690.579C113.893 690.58 113.893 690.58 113.893 690.581C113.893 690.582 113.893 690.583 113.893 690.584C113.893 690.585 113.893 690.586 113.893 690.587C113.893 690.588 113.893 690.589 113.893 690.59C113.893 690.591 113.893 690.592 113.893 690.593C113.893 690.594 113.893 690.594 113.893 690.595C113.893 690.596 113.893 690.597 113.893 690.598C113.893 690.599 113.893 690.6 113.893 690.601C113.893 690.602 113.893 690.603 113.893 690.604C113.893 690.605 113.893 690.606 113.893 690.607C113.893 690.607 113.893 690.608 113.893 690.609C113.893 690.61 113.893 690.611 113.893 690.612C113.893 690.613 113.893 690.614 113.893 690.615C113.893 690.616 113.893 690.617 113.893 690.618C113.893 690.619 113.893 690.62 113.893 690.62C113.893 690.621 113.893 690.622 113.893 690.623C113.893 690.624 113.893 690.625 113.893 690.626C113.893 690.627 113.893 690.628 113.893 690.629C113.893 690.63 113.893 690.631 113.893 690.632C113.893 690.633 113.893 690.634 113.893 690.634C113.893 690.635 113.893 690.636 113.893 690.637C113.893 690.638 113.893 690.639 113.893 690.64C113.893 690.641 113.893 690.642 113.893 690.643C113.893 690.644 113.893 690.645 113.893 690.646C113.893 690.647 113.893 690.647 113.893 690.648C113.893 690.649 113.893 690.65 113.893 690.651C113.893 690.652 113.893 690.653 113.893 690.654C113.893 690.655 113.893 690.656 113.893 690.657C113.893 690.658 113.893 690.659 113.893 690.66C113.893 690.661 113.893 690.661 113.893 690.662C113.893 690.663 113.893 690.664 113.893 690.665C113.893 690.666 113.893 690.667 113.893 690.668C113.893 690.669 113.893 690.67 113.893 690.671C113.893 690.672 113.893 690.673 113.893 690.674C113.893 690.674 113.893 690.675 113.893 690.676C113.893 690.677 113.893 690.678 113.893 690.679C113.893 690.68 113.893 690.681 113.893 690.682C113.893 690.683 113.893 690.684 113.893 690.685C113.893 690.686 113.893 690.687 113.893 690.688C113.893 690.688 113.893 690.689 113.893 690.69C113.893 690.691 113.893 690.692 113.893 690.693C113.893 690.694 113.893 690.695 113.893 690.696C113.893 690.697 113.893 690.698 113.893 690.699C113.893 690.7 113.893 690.701 113.893 690.701C113.893 690.702 113.893 690.703 113.893 690.704C113.893 690.705 113.893 690.706 113.893 690.707C113.893 690.708 113.893 690.709 113.893 690.71C113.893 690.711 113.893 690.712 113.893 690.713C113.893 690.714 113.893 690.715 113.893 690.715C113.893 690.716 113.893 690.717 113.893 690.718C113.893 690.719 113.893 690.72 113.893 690.721C113.893 690.722 113.893 690.723 113.893 690.724C113.893 690.725 113.893 690.726 113.893 690.727C113.893 690.728 113.893 690.728 113.893 690.729C113.893 690.73 113.893 690.731 113.893 690.732C113.893 690.733 113.893 690.734 113.893 690.735C113.893 690.736 113.893 690.737 113.893 690.738C113.893 690.739 113.893 690.74 113.893 690.741C113.893 690.742 113.893 690.742 113.893 690.743C113.893 690.744 113.893 690.745 113.893 690.746C113.893 690.747 113.893 690.748 113.893 690.749C113.893 690.75 113.893 690.751 113.893 690.752C113.893 690.753 113.893 690.754 113.893 690.755C113.893 690.755 113.893 690.756 113.893 690.757C113.893 690.758 113.893 690.759 113.893 690.76C113.893 690.761 113.893 690.762 113.893 690.763C113.893 690.764 113.893 690.765 113.893 690.766C113.893 690.767 113.893 690.768 113.893 690.769C113.893 690.769 113.893 690.77 113.893 690.771C113.893 690.772 113.893 690.773 113.893 690.774C113.893 690.775 113.893 690.776 113.893 690.777C113.893 690.778 113.893 690.779 113.893 690.78C113.893 690.781 113.893 690.782 113.893 690.782C113.893 690.783 113.893 690.784 113.893 690.785C113.893 690.786 113.893 690.787 113.893 690.788C113.893 690.789 113.893 690.79 113.893 690.791C113.893 690.792 113.893 690.793 113.893 690.794C113.893 690.795 113.893 690.796 113.893 690.796C113.893 690.797 113.893 690.798 113.893 690.799C113.893 690.8 113.893 690.801 113.893 690.802C113.893 690.803 113.893 690.804 113.893 690.805C113.893 690.806 113.893 690.807 113.893 690.808C113.893 690.809 113.893 690.809 113.893 690.81C113.893 690.811 113.893 690.812 113.893 690.813C113.893 690.814 113.893 690.815 113.893 690.816C113.893 690.817 113.893 690.818 113.893 690.819C113.893 690.82 113.893 690.821 113.893 690.822C113.893 690.823 113.893 690.823 113.893 690.824C113.893 690.825 113.893 690.826 113.893 690.827C113.893 690.828 113.893 690.829 113.893 690.83C113.893 690.831 113.893 690.832 113.893 690.833C113.893 690.834 113.893 690.835 113.893 690.836C113.893 690.836 113.893 690.837 113.893 690.838C113.893 690.839 113.893 690.84 113.893 690.841C113.893 690.842 113.893 690.843 113.893 690.844C113.893 690.845 113.893 690.846 113.893 690.847C113.893 690.848 113.893 690.849 113.893 690.85C113.893 690.85 113.893 690.851 113.893 690.852C113.893 690.853 113.893 690.854 113.893 690.855C113.893 690.856 113.893 690.857 113.893 690.858C113.893 690.859 113.893 690.86 113.893 690.861C113.893 690.862 113.893 690.863 113.893 690.863C113.893 690.864 113.893 690.865 113.893 690.866C113.893 690.867 113.893 690.868 113.893 690.869C113.893 690.87 113.893 690.871 113.893 690.872C113.893 690.873 113.893 690.874 113.893 690.875C113.893 690.876 113.893 690.877 113.893 690.877C113.893 690.878 113.893 690.879 113.893 690.88C113.893 690.881 113.893 690.882 113.893 690.883C113.893 690.884 113.893 690.885 113.893 690.886C113.893 690.887 113.893 690.888 113.893 690.889C113.893 690.89 113.893 690.89 113.893 690.891C113.893 690.892 113.893 690.893 113.893 690.894C113.893 690.895 113.893 690.896 113.893 690.897C113.893 690.898 113.893 690.899 113.893 690.9C113.893 690.901 113.893 690.902 113.893 690.903C113.893 690.904 113.893 690.904 113.893 690.905C113.893 690.906 113.893 690.907 113.893 690.908C113.893 690.909 113.893 690.91 113.893 690.911C113.893 690.912 113.893 690.913 113.893 690.914C113.893 690.915 113.893 690.916 113.893 690.917C113.893 690.917 113.893 690.918 113.893 690.919C113.893 690.92 113.893 690.921 113.893 690.922C113.893 690.923 113.893 690.924 113.893 690.925C113.893 690.926 113.893 690.927 113.893 690.928C113.893 690.929 113.893 690.93 113.893 690.931C113.893 690.931 113.893 690.932 113.893 690.933C113.893 690.934 113.893 690.935 113.893 690.936C113.893 690.937 113.893 690.938 113.893 690.939C113.893 690.94 113.893 690.941 113.893 690.942C113.893 690.943 113.893 690.944 113.893 690.944C113.893 690.945 113.893 690.946 113.893 690.947C113.893 690.948 113.893 690.949 113.893 690.95C113.893 690.951 113.893 690.952 113.893 690.953C113.893 690.954 113.893 690.955 113.893 690.956C113.893 690.957 113.893 690.957 113.893 690.958C113.893 690.959 113.893 690.96 113.893 690.961C113.893 690.962 113.893 690.963 113.893 690.964C113.893 690.965 113.893 690.966 113.893 690.967C113.893 690.968 113.893 690.969 113.893 690.97C113.893 690.971 113.893 690.971 113.893 690.972C113.893 690.973 113.893 690.974 113.893 690.975C113.893 690.976 113.893 690.977 113.893 690.978C113.893 690.979 113.893 690.98 113.893 690.981C113.893 690.982 113.893 690.983 113.893 690.984C113.893 690.984 113.893 690.985 113.893 690.986C113.893 690.987 113.893 690.988 113.893 690.989C113.893 690.99 113.893 690.991 113.893 690.992C113.893 690.993 113.893 690.994 113.893 690.995C113.893 690.996 113.893 690.997 113.893 690.998C113.893 690.998 113.893 690.999 113.893 691C113.893 691.001 113.893 691.002 113.893 691.003C113.893 691.004 113.893 691.005 113.893 691.006C113.893 691.007 113.893 691.008 113.893 691.009C113.893 691.01 113.893 691.011 113.893 691.011C113.893 691.012 113.893 691.013 113.893 691.014C113.893 691.015 113.893 691.016 113.893 691.017C113.893 691.018 113.893 691.019 113.893 691.02C113.893 691.021 113.893 691.022 113.893 691.023C113.893 691.024 113.893 691.025 113.893 691.025C113.893 691.026 113.893 691.027 113.893 691.028C113.893 691.029 113.893 691.03 113.893 691.031C113.893 691.032 113.893 691.033 113.893 691.034C113.893 691.035 113.893 691.036 113.893 691.037C113.893 691.038 113.893 691.038 113.893 691.039C113.893 691.04 113.893 691.041 113.893 691.042C113.893 691.043 113.893 691.044 113.893 691.045C113.893 691.046 113.893 691.047 113.893 691.048C113.893 691.049 113.893 691.05 113.893 691.051C113.893 691.052 113.893 691.052 113.893 691.053C113.893 691.054 113.893 691.055 113.893 691.056C113.893 691.057 113.893 691.058 113.893 691.059C113.893 691.06 113.893 691.061 113.893 691.062C113.893 691.063 113.893 691.064 113.893 691.065C113.893 691.065 113.893 691.066 113.893 691.067C113.893 691.068 113.893 691.069 113.893 691.07C113.893 691.071 113.893 691.072 113.893 691.073C113.893 691.074 113.893 691.075 113.893 691.076C113.893 691.077 113.893 691.078 113.893 691.079C113.893 691.079 113.893 691.08 113.893 691.081C113.893 691.082 113.893 691.083 113.893 691.084C113.893 691.085 113.893 691.086 113.893 691.087C113.893 691.088 113.893 691.089 113.893 691.09C113.893 691.091 113.893 691.092 113.893 691.092C113.893 691.093 113.893 691.094 113.893 691.095C113.893 691.096 113.893 691.097 113.893 691.098C113.893 691.099 113.893 691.1 113.893 691.101C113.893 691.102 113.893 691.103 113.893 691.104C113.893 691.105 113.893 691.106 113.893 691.106C113.893 691.107 113.893 691.108 113.893 691.109C113.893 691.11 113.893 691.111 113.893 691.112C113.893 691.113 113.893 691.114 113.893 691.115C113.893 691.116 113.893 691.117 113.893 691.118C113.893 691.119 113.893 691.119 113.893 691.12C113.893 691.121 113.893 691.122 113.893 691.123C113.893 691.124 113.893 691.125 113.893 691.126C113.893 691.127 113.893 691.128 113.893 691.129C113.893 691.13 113.893 691.131 113.893 691.132C113.893 691.133 113.893 691.133 113.893 691.134C113.893 691.135 113.893 691.136 113.893 691.137C113.893 691.138 113.893 691.139 113.893 691.14C113.893 691.141 113.893 691.142 113.893 691.143C113.893 691.144 113.893 691.145 113.893 691.146C113.893 691.146 113.893 691.147 113.893 691.148C113.893 691.149 113.893 691.15 113.893 691.151C113.893 691.152 113.893 691.153 113.893 691.154C113.893 691.155 113.893 691.156 113.893 691.157C113.893 691.158 113.893 691.159 113.893 691.16C113.893 691.16 113.893 691.161 113.893 691.162C113.893 691.163 113.893 691.164 113.893 691.165C113.893 691.166 113.893 691.167 113.893 691.168C113.893 691.169 113.893 691.17 113.893 691.171C113.893 691.172 113.893 691.173 113.893 691.173C113.893 691.174 113.893 691.175 113.893 691.176C113.893 691.177 113.893 691.178 113.893 691.179C113.893 691.18 113.893 691.181 113.893 691.182C113.893 691.183 113.893 691.184 113.893 691.185C113.893 691.186 113.893 691.187 113.893 691.187C113.893 691.188 113.893 691.189 113.893 691.19C113.893 691.191 113.893 691.192 113.893 691.193C113.893 691.194 113.893 691.195 113.893 691.196C113.893 691.197 113.893 691.198 113.893 691.199C113.893 691.2 113.893 691.2 113.893 691.201C113.893 691.202 113.893 691.203 113.893 691.204C113.893 691.205 113.893 691.206 113.893 691.207C113.893 691.208 113.893 691.209 113.893 691.21C113.893 691.211 113.893 691.212 113.893 691.213C113.893 691.214 113.893 691.214 113.893 691.215C113.893 691.216 113.893 691.217 113.893 691.218C113.893 691.219 113.893 691.22 113.893 691.221C113.893 691.222 113.893 691.223 113.893 691.224C113.893 691.225 113.893 691.226 113.893 691.227C113.893 691.227 113.893 691.228 113.893 691.229C113.893 691.23 113.893 691.231 113.893 691.232C113.893 691.233 113.893 691.234 113.893 691.235C113.893 691.236 113.893 691.237 113.893 691.238C113.893 691.239 113.893 691.24 113.893 691.241C113.893 691.241 113.893 691.242 113.893 691.243C113.893 691.244 113.893 691.245 113.893 691.246C113.893 691.247 113.893 691.248 113.893 691.249C113.893 691.25 113.893 691.251 113.893 691.252C113.893 691.253 113.893 691.254 113.893 691.254C113.893 691.255 113.893 691.256 113.893 691.257C113.893 691.258 113.893 691.259 113.893 691.26C113.893 691.261 113.893 691.262 113.893 691.263C113.893 691.264 113.893 691.265 113.893 691.266C113.893 691.267 113.893 691.268 113.893 691.268C113.893 691.269 113.893 691.27 113.893 691.271C113.893 691.272 113.893 691.273 113.893 691.274C113.893 691.275 113.893 691.276 113.893 691.277C113.893 691.278 113.893 691.279 113.893 691.28C113.893 691.281 113.893 691.281 113.893 691.282C113.893 691.283 113.893 691.284 113.893 691.285C113.893 691.286 113.893 691.287 113.893 691.288C113.893 691.289 113.893 691.29 113.893 691.291C113.893 691.292 113.893 691.293 113.893 691.294C113.893 691.294 113.893 691.295 113.893 691.296C113.893 691.297 113.893 691.298 113.893 691.299C113.893 691.3 113.893 691.301 113.893 691.302C113.893 691.303 113.893 691.304 113.893 691.305C113.893 691.306 113.893 691.307 113.893 691.308C113.893 691.308 113.893 691.309 113.893 691.31C113.893 691.311 113.893 691.312 113.893 691.313C113.893 691.314 113.893 691.315 113.893 691.316C113.893 691.317 113.893 691.318 113.893 691.319C113.893 691.32 113.893 691.321 113.893 691.321C113.893 691.322 113.893 691.323 113.893 691.324C113.893 691.325 113.893 691.326 113.893 691.327C113.893 691.328 113.893 691.329 113.893 691.33C113.893 691.331 113.893 691.332 113.893 691.333C113.893 691.334 113.893 691.335 113.893 691.335C113.893 691.336 113.893 691.337 113.893 691.338C113.893 691.339 113.893 691.34 113.893 691.341C113.893 691.342 113.893 691.343 113.893 691.344C113.893 691.345 113.893 691.346 113.893 691.347C113.893 691.348 113.893 691.348 113.893 691.349C113.893 691.35 113.893 691.351 113.893 691.352C113.893 691.353 113.893 691.354 113.893 691.355C113.893 691.356 113.893 691.357 113.893 691.358C113.893 691.359 113.893 691.36 113.893 691.361C113.893 691.362 113.893 691.362 113.893 691.363C113.893 691.364 113.893 691.365 113.893 691.366C113.893 691.367 113.893 691.368 113.893 691.369C113.893 691.37 113.893 691.371 113.893 691.372C113.893 691.373 113.893 691.374 113.893 691.375C113.893 691.375 113.893 691.376 113.893 691.377C113.893 691.378 113.893 691.379 113.893 691.38C113.893 691.381 113.893 691.382 113.893 691.383C113.893 691.384 113.893 691.385 113.893 691.386C113.893 691.387 113.893 691.388 113.893 691.389C113.893 691.389 113.893 691.39 113.893 691.391C113.893 691.392 113.893 691.393 113.893 691.394C113.893 691.395 113.893 691.396 113.893 691.397C113.893 691.398 113.893 691.399 113.893 691.4C113.893 691.401 113.893 691.402 113.893 691.402C113.893 691.403 113.893 691.404 113.893 691.405C113.893 691.406 113.893 691.407 113.893 691.408C113.893 691.409 113.893 691.41 113.893 691.411C113.893 691.412 113.893 691.413 113.893 691.414C113.893 691.415 113.893 691.416 113.893 691.416C113.893 691.417 113.893 691.418 113.893 691.419C113.893 691.42 113.893 691.421 113.893 691.422C113.893 691.423 113.893 691.424 113.893 691.425C113.893 691.426 113.893 691.427 113.893 691.428C113.893 691.429 113.893 691.429 113.893 691.43C113.893 691.431 113.893 691.432 113.893 691.433C113.893 691.434 113.893 691.435 113.893 691.436C113.893 691.437 113.893 691.438 113.893 691.439C113.893 691.44 113.893 691.441 113.893 691.442C113.893 691.443 113.893 691.443 113.893 691.444C113.893 691.445 113.893 691.446 113.893 691.447C113.893 691.448 113.893 691.449 113.893 691.45C113.893 691.451 113.893 691.452 113.893 691.453C113.893 691.454 113.893 691.455 113.893 691.456C113.893 691.456 113.893 691.457 113.893 691.458C113.893 691.459 113.893 691.46 113.893 691.461C113.893 691.462 113.893 691.463 113.893 691.464C113.893 691.465 113.893 691.466 113.893 691.467C113.893 691.468 113.893 691.469 113.893 691.47C113.893 691.47 113.893 691.471 113.893 691.472C113.893 691.473 113.893 691.474 113.893 691.475C113.893 691.476 113.893 691.477 113.893 691.478C113.893 691.479 113.893 691.48 113.893 691.481C113.893 691.482 113.893 691.483 113.893 691.483C113.893 691.484 113.893 691.485 113.893 691.486C113.893 691.487 113.893 691.488 113.893 691.489C113.893 691.49 113.893 691.491 113.893 691.492C113.893 691.493 113.893 691.494 113.893 691.495C113.893 691.496 113.893 691.497 113.893 691.497C113.893 691.498 113.893 691.499 113.893 691.5C113.893 691.501 113.893 691.502 113.893 691.503C113.893 691.504 113.893 691.505 113.893 691.506C113.893 691.507 113.893 691.508 113.893 691.509C113.893 691.51 113.893 691.51 113.893 691.511C113.893 691.512 113.893 691.513 113.893 691.514C113.893 691.515 113.893 691.516 113.893 691.517C113.893 691.518 113.893 691.519 113.893 691.52C113.893 691.521 113.893 691.522 113.893 691.523C113.893 691.524 113.893 691.524 113.893 691.525L114.893 691.525ZM114.893 690.095L115.893 690.095L115.893 672.558L114.893 672.558L113.893 672.558L113.893 690.095L114.893 690.095ZM114.893 672.558L114.893 673.558L120.907 673.558L120.907 672.558L120.907 671.558L114.893 671.558L114.893 672.558ZM120.907 672.558L119.907 672.558L119.907 703.175L120.907 703.175L121.907 703.175L121.907 672.558L120.907 672.558ZM120.907 703.175L120.907 702.175L113.757 702.175L113.757 703.175L113.757 704.175L120.907 704.175L120.907 703.175ZM113.757 703.175L114.644 702.713L105.413 684.986L104.526 685.448L103.639 685.91L112.87 703.637L113.757 703.175ZM104.526 685.448L105.42 685.001C105.226 684.612 105.051 684.21 104.894 683.793L103.958 684.144L103.022 684.496C103.202 684.976 103.405 685.443 103.631 685.895L104.526 685.448ZM103.958 684.144L104.894 683.793C104.736 683.37 104.597 682.949 104.479 682.528L103.516 682.799L102.554 683.069C102.688 683.546 102.844 684.021 103.022 684.496L103.958 684.144ZM103.516 682.799L103.516 681.799L103.369 681.799L103.369 682.799L103.369 683.799L103.516 683.799L103.516 682.799ZM103.369 682.799L102.371 682.857C102.398 683.315 102.411 683.765 102.411 684.208L103.411 684.208L104.411 684.208C104.411 683.725 104.397 683.235 104.368 682.74L103.369 682.799ZM103.411 684.208L102.412 684.239C102.425 684.676 102.432 685.135 102.432 685.616L103.432 685.616L104.432 685.616C104.432 685.116 104.425 684.636 104.411 684.176L103.411 684.208ZM103.432 685.616L102.432 685.616L102.432 703.175L103.432 703.175L104.432 703.175L104.432 685.616L103.432 685.616ZM103.432 703.175L103.432 702.175L97.4393 702.175L97.4393 703.175L97.4393 704.175L103.432 704.175L103.432 703.175ZM125.617 672.558L125.617 671.558L124.617 671.558L124.617 672.558L125.617 672.558ZM132.62 672.558L133.62 672.558L133.62 671.558L132.62 671.558L132.62 672.558ZM133.839 697.329L133.098 698.001L133.104 698.006L133.839 697.329ZM140.547 697.329L139.812 696.651L139.812 696.652L140.547 697.329ZM141.788 672.558L141.788 671.558L140.788 671.558L140.788 672.558L141.788 672.558ZM148.727 672.558L149.727 672.558L149.727 671.558L148.727 671.558L148.727 672.558ZM145.573 700.841L144.904 700.098L144.902 700.1L145.573 700.841ZM125.617 691.988L126.617 691.988L126.617 672.558L125.617 672.558L124.617 672.558L124.617 691.988L125.617 691.988ZM125.617 672.558L125.617 673.558L132.62 673.558L132.62 672.558L132.62 671.558L125.617 671.558L125.617 672.558ZM132.62 672.558L131.62 672.558L131.62 692.724L132.62 692.724L133.62 692.724L133.62 672.558L132.62 672.558ZM132.62 692.724L131.62 692.724C131.62 694.967 132.029 696.82 133.098 698.001L133.839 697.329L134.58 696.658C134.024 696.043 133.62 694.827 133.62 692.724L132.62 692.724ZM133.839 697.329L133.104 698.006C134.144 699.137 135.563 699.654 137.225 699.654L137.225 698.654L137.225 697.654C135.999 697.654 135.161 697.288 134.575 696.652L133.839 697.329ZM137.225 698.654L137.225 699.654C138.855 699.654 140.248 699.13 141.283 698.006L140.547 697.329L139.812 696.652C139.22 697.294 138.398 697.654 137.225 697.654L137.225 698.654ZM140.547 697.329L141.283 698.007C142.371 696.826 142.788 694.97 142.788 692.724L141.788 692.724L140.788 692.724C140.788 694.824 140.378 696.038 139.812 696.651L140.547 697.329ZM141.788 692.724L142.788 692.724L142.788 672.558L141.788 672.558L140.788 672.558L140.788 692.724L141.788 692.724ZM141.788 672.558L141.788 673.558L148.727 673.558L148.727 672.558L148.727 671.558L141.788 671.558L141.788 672.558ZM148.727 672.558L147.727 672.558L147.727 691.988L148.727 691.988L149.727 691.988L149.727 672.558L148.727 672.558ZM148.727 691.988L147.727 691.988C147.727 695.835 146.72 698.463 144.904 700.098L145.573 700.841L146.242 701.584C148.632 699.434 149.727 696.159 149.727 691.988L148.727 691.988ZM145.573 700.841L144.902 700.1C143.036 701.79 140.52 702.68 137.246 702.68L137.246 703.68L137.246 704.68C140.897 704.68 143.932 703.677 146.244 701.582L145.573 700.841ZM137.246 703.68L137.246 702.68C133.912 702.68 131.351 701.787 129.459 700.095L128.792 700.841L128.126 701.586C130.467 703.68 133.542 704.68 137.246 704.68L137.246 703.68ZM128.792 700.841L129.459 700.095C127.63 698.46 126.617 695.834 126.617 691.988L125.617 691.988L124.617 691.988C124.617 696.161 125.721 699.436 128.126 701.586L128.792 700.841ZM151.335 678.046L150.335 678.046L150.335 679.046L151.335 679.046L151.335 678.046ZM151.335 672.558L151.335 671.558L150.335 671.558L150.335 672.558L151.335 672.558ZM175.37 672.558L176.37 672.558L176.37 671.558L175.37 671.558L175.37 672.558ZM175.37 678.046L175.37 679.046L176.37 679.046L176.37 678.046L175.37 678.046ZM166.896 678.046L166.896 677.046L165.896 677.046L165.896 678.046L166.896 678.046ZM166.896 703.175L166.896 704.175L167.896 704.175L167.896 703.175L166.896 703.175ZM159.83 703.175L158.83 703.175L158.83 704.175L159.83 704.175L159.83 703.175ZM159.83 678.046L160.83 678.046L160.83 677.046L159.83 677.046L159.83 678.046ZM151.335 678.046L152.335 678.046L152.335 672.558L151.335 672.558L150.335 672.558L150.335 678.046L151.335 678.046ZM151.335 672.558L151.335 673.558L175.37 673.558L175.37 672.558L175.37 671.558L151.335 671.558L151.335 672.558ZM175.37 672.558L174.37 672.558L174.37 678.046L175.37 678.046L176.37 678.046L176.37 672.558L175.37 672.558ZM175.37 678.046L175.37 677.046L166.896 677.046L166.896 678.046L166.896 679.046L175.37 679.046L175.37 678.046ZM166.896 678.046L165.896 678.046L165.896 703.175L166.896 703.175L167.896 703.175L167.896 678.046L166.896 678.046ZM166.896 703.175L166.896 702.175L159.83 702.175L159.83 703.175L159.83 704.175L166.896 704.175L166.896 703.175ZM159.83 703.175L160.83 703.175L160.83 678.046L159.83 678.046L158.83 678.046L158.83 703.175L159.83 703.175ZM159.83 678.046L159.83 677.046L151.335 677.046L151.335 678.046L151.335 679.046L159.83 679.046L159.83 678.046ZM176.274 678.046L175.274 678.046L175.274 679.046L176.274 679.046L176.274 678.046ZM176.274 672.558L176.274 671.558L175.274 671.558L175.274 672.558L176.274 672.558ZM200.31 672.558L201.31 672.558L201.31 671.558L200.31 671.558L200.31 672.558ZM200.31 678.046L200.31 679.046L201.31 679.046L201.31 678.046L200.31 678.046ZM191.835 678.046L191.835 677.046L190.835 677.046L190.835 678.046L191.835 678.046ZM191.835 703.175L191.835 704.175L192.835 704.175L192.835 703.175L191.835 703.175ZM184.77 703.175L183.77 703.175L183.77 704.175L184.77 704.175L184.77 703.175ZM184.77 678.046L185.77 678.046L185.77 677.046L184.77 677.046L184.77 678.046ZM176.274 678.046L177.274 678.046L177.274 672.558L176.274 672.558L175.274 672.558L175.274 678.046L176.274 678.046ZM176.274 672.558L176.274 673.558L200.31 673.558L200.31 672.558L200.31 671.558L176.274 671.558L176.274 672.558ZM200.31 672.558L199.31 672.558L199.31 678.046L200.31 678.046L201.31 678.046L201.31 672.558L200.31 672.558ZM200.31 678.046L200.31 677.046L191.835 677.046L191.835 678.046L191.835 679.046L200.31 679.046L200.31 678.046ZM191.835 678.046L190.835 678.046L190.835 703.175L191.835 703.175L192.835 703.175L192.835 678.046L191.835 678.046ZM191.835 703.175L191.835 702.175L184.77 702.175L184.77 703.175L184.77 704.175L191.835 704.175L191.835 703.175ZM184.77 703.175L185.77 703.175L185.77 678.046L184.77 678.046L183.77 678.046L183.77 703.175L184.77 703.175ZM184.77 678.046L184.77 677.046L176.274 677.046L176.274 678.046L176.274 679.046L184.77 679.046L184.77 678.046ZM210.487 703.175L209.487 703.175L209.487 704.175L210.487 704.175L210.487 703.175ZM210.487 691.736L211.487 691.736L211.487 691.491L211.374 691.274L210.487 691.736ZM200.499 672.558L200.499 671.558L198.851 671.558L199.612 673.02L200.499 672.558ZM208.174 672.558L209.067 672.106L208.789 671.558L208.174 671.558L208.174 672.558ZM213.494 683.072L214.396 682.639L214.391 682.63L214.387 682.621L213.494 683.072ZM213.957 684.081L213.04 684.48L213.043 684.488L213.047 684.495L213.957 684.081ZM214.357 685.049L213.42 685.4L213.664 686.049L214.357 686.049L214.357 685.049ZM214.462 685.049L214.462 686.049L215.155 686.049L215.398 685.4L214.462 685.049ZM214.84 684.081L213.93 683.668L213.922 683.685L213.915 683.703L214.84 684.081ZM215.324 683.072L214.432 682.621L214.429 682.625L215.324 683.072ZM220.644 672.558L220.644 671.558L220.029 671.558L219.752 672.106L220.644 672.558ZM227.436 672.558L228.324 673.018L229.082 671.558L227.436 671.558L227.436 672.558ZM217.574 691.567L216.686 691.107L216.574 691.323L216.574 691.567L217.574 691.567ZM217.574 703.175L217.574 704.175L218.574 704.175L218.574 703.175L217.574 703.175ZM210.487 703.175L211.487 703.175L211.487 691.736L210.487 691.736L209.487 691.736L209.487 703.175L210.487 703.175ZM210.487 691.736L211.374 691.274L201.386 672.096L200.499 672.558L199.612 673.02L209.601 692.198L210.487 691.736ZM200.499 672.558L200.499 673.558L208.174 673.558L208.174 672.558L208.174 671.558L200.499 671.558L200.499 672.558ZM208.174 672.558L207.282 673.009L212.602 683.523L213.494 683.072L214.387 682.621L209.067 672.106L208.174 672.558ZM213.494 683.072L212.593 683.505C212.756 683.845 212.905 684.17 213.04 684.48L213.957 684.081L214.874 683.683C214.729 683.348 214.569 683 214.396 682.639L213.494 683.072ZM213.957 684.081L213.047 684.495C213.177 684.782 213.302 685.083 213.42 685.4L214.357 685.049L215.293 684.698C215.159 684.341 215.018 683.998 214.867 683.668L213.957 684.081ZM214.357 685.049L214.357 686.049L214.462 686.049L214.462 685.049L214.462 684.049L214.357 684.049L214.357 685.049ZM214.462 685.049L215.398 685.4C215.521 685.072 215.644 684.759 215.766 684.46L214.84 684.081L213.915 683.703C213.785 684.021 213.655 684.353 213.525 684.698L214.462 685.049ZM214.84 684.081L215.751 684.495C215.885 684.2 216.041 683.875 216.218 683.519L215.324 683.072L214.429 682.625C214.243 682.998 214.076 683.346 213.93 683.668L214.84 684.081ZM215.324 683.072L216.216 683.523L221.536 673.009L220.644 672.558L219.752 672.106L214.432 682.621L215.324 683.072ZM220.644 672.558L220.644 673.558L227.436 673.558L227.436 672.558L227.436 671.558L220.644 671.558L220.644 672.558ZM227.436 672.558L226.549 672.097L216.686 691.107L217.574 691.567L218.462 692.028L228.324 673.018L227.436 672.558ZM217.574 691.567L216.574 691.567L216.574 703.175L217.574 703.175L218.574 703.175L218.574 691.567L217.574 691.567ZM217.574 703.175L217.574 702.175L210.487 702.175L210.487 703.175L210.487 704.175L217.574 704.175L217.574 703.175ZM246.95 703.175L245.95 703.175L245.95 704.175L246.95 704.175L246.95 703.175ZM246.95 691.736L247.95 691.736L247.95 691.491L247.837 691.274L246.95 691.736ZM236.962 672.558L236.962 671.558L235.314 671.558L236.075 673.02L236.962 672.558ZM244.637 672.558L245.53 672.106L245.252 671.558L244.637 671.558L244.637 672.558ZM249.958 683.072L250.859 682.639L250.855 682.63L250.85 682.621L249.958 683.072ZM250.42 684.081L249.503 684.48L249.506 684.488L249.51 684.495L250.42 684.081ZM250.82 685.049L249.883 685.4L250.127 686.049L250.82 686.049L250.82 685.049ZM250.925 685.049L250.925 686.049L251.618 686.049L251.861 685.4L250.925 685.049ZM251.303 684.081L250.393 683.668L250.385 683.685L250.378 683.703L251.303 684.081ZM251.787 683.072L250.895 682.621L250.893 682.625L251.787 683.072ZM257.107 672.558L257.107 671.558L256.492 671.558L256.215 672.106L257.107 672.558ZM263.899 672.558L264.787 673.018L265.545 671.558L263.899 671.558L263.899 672.558ZM254.037 691.567L253.149 691.107L253.037 691.323L253.037 691.567L254.037 691.567ZM254.037 703.175L254.037 704.175L255.037 704.175L255.037 703.175L254.037 703.175ZM246.95 703.175L247.95 703.175L247.95 691.736L246.95 691.736L245.95 691.736L245.95 703.175L246.95 703.175ZM246.95 691.736L247.837 691.274L237.849 672.096L236.962 672.558L236.075 673.02L246.064 692.198L246.95 691.736ZM236.962 672.558L236.962 673.558L244.637 673.558L244.637 672.558L244.637 671.558L236.962 671.558L236.962 672.558ZM244.637 672.558L243.745 673.009L249.065 683.523L249.958 683.072L250.85 682.621L245.53 672.106L244.637 672.558ZM249.958 683.072L249.056 683.505C249.219 683.845 249.368 684.17 249.503 684.48L250.42 684.081L251.337 683.683C251.192 683.348 251.032 683 250.859 682.639L249.958 683.072ZM250.42 684.081L249.51 684.495C249.64 684.782 249.765 685.083 249.883 685.4L250.82 685.049L251.756 684.698C251.622 684.341 251.481 683.998 251.331 683.668L250.42 684.081ZM250.82 685.049L250.82 686.049L250.925 686.049L250.925 685.049L250.925 684.049L250.82 684.049L250.82 685.049ZM250.925 685.049L251.861 685.4C251.984 685.072 252.107 684.759 252.229 684.46L251.303 684.081L250.378 683.703C250.248 684.021 250.118 684.353 249.989 684.698L250.925 685.049ZM251.303 684.081L252.214 684.495C252.348 684.2 252.504 683.875 252.681 683.519L251.787 683.072L250.893 682.625C250.706 682.998 250.539 683.346 250.393 683.668L251.303 684.081ZM251.787 683.072L252.679 683.523L257.999 673.009L257.107 672.558L256.215 672.106L250.895 682.621L251.787 683.072ZM257.107 672.558L257.107 673.558L263.899 673.558L263.899 672.558L263.899 671.558L257.107 671.558L257.107 672.558ZM263.899 672.558L263.012 672.097L253.149 691.107L254.037 691.567L254.925 692.028L264.787 673.018L263.899 672.558ZM254.037 691.567L253.037 691.567L253.037 703.175L254.037 703.175L255.037 703.175L255.037 691.567L254.037 691.567ZM254.037 703.175L254.037 702.175L246.95 702.175L246.95 703.175L246.95 704.175L254.037 704.175L254.037 703.175ZM267.558 675.712L266.851 675.005L266.849 675.007L267.558 675.712ZM286.379 675.712L285.671 676.419L285.673 676.421L286.379 675.712ZM286.379 700.021L285.673 699.312L285.671 699.314L286.379 700.021ZM267.558 700.021L266.849 700.726L266.851 700.728L267.558 700.021ZM272.731 696.677L271.939 697.288L271.942 697.292L272.731 696.677ZM281.227 696.677L280.439 696.062L280.438 696.063L281.227 696.677ZM281.227 679.119L280.438 679.733L280.445 679.742L281.227 679.119ZM272.731 679.119L273.517 679.737L273.52 679.733L272.731 679.119ZM263.92 688.75L264.92 688.75L264.92 686.983L263.92 686.983L262.92 686.983L262.92 688.75L263.92 688.75ZM263.92 686.983L264.92 686.983C264.92 682.048 266.101 678.596 268.267 676.417L267.558 675.712L266.849 675.007C264.165 677.707 262.92 681.769 262.92 686.983L263.92 686.983ZM267.558 675.712L268.265 676.419C270.495 674.19 273.37 673.053 276.979 673.053L276.979 672.053L276.979 671.053C272.905 671.053 269.5 672.356 266.851 675.005L267.558 675.712ZM276.979 672.053L276.979 673.053C280.573 673.053 283.441 674.189 285.671 676.419L286.379 675.712L287.086 675.005C284.437 672.357 281.039 671.053 276.979 671.053L276.979 672.053ZM286.379 675.712L285.673 676.421C287.865 678.6 289.059 682.051 289.059 686.983L290.059 686.983L291.059 686.983C291.059 681.766 289.798 677.702 287.084 675.003L286.379 675.712ZM290.059 686.983L289.059 686.983L289.059 688.75L290.059 688.75L291.059 688.75L291.059 686.983L290.059 686.983ZM290.059 688.75L289.059 688.75C289.059 693.682 287.865 697.132 285.673 699.312L286.379 700.021L287.084 700.73C289.798 698.031 291.059 693.967 291.059 688.75L290.059 688.75ZM286.379 700.021L285.671 699.314C283.441 701.544 280.573 702.68 276.979 702.68L276.979 703.68L276.979 704.68C281.039 704.68 284.437 703.376 287.086 700.728L286.379 700.021ZM276.979 703.68L276.979 702.68C273.37 702.68 270.495 701.543 268.265 699.314L267.558 700.021L266.851 700.728C269.5 703.377 272.905 704.68 276.979 704.68L276.979 703.68ZM267.558 700.021L268.267 699.316C266.101 697.137 264.92 693.685 264.92 688.75L263.92 688.75L262.92 688.75C262.92 693.964 264.165 698.026 266.849 700.726L267.558 700.021ZM271.175 690.243L270.175 690.243C270.175 693.262 270.699 695.679 271.939 697.288L272.731 696.677L273.523 696.067C272.688 694.984 272.175 693.111 272.175 690.243L271.175 690.243ZM272.731 696.677L271.942 697.292C273.183 698.884 274.899 699.675 276.979 699.675L276.979 698.675L276.979 697.675C275.47 697.675 274.355 697.134 273.52 696.063L272.731 696.677ZM276.979 698.675L276.979 699.675C279.059 699.675 280.775 698.884 282.016 697.292L281.227 696.677L280.438 696.063C279.603 697.134 278.487 697.675 276.979 697.675L276.979 698.675ZM281.227 696.677L282.015 697.293C283.272 695.683 283.804 693.264 283.804 690.243L282.804 690.243L281.804 690.243C281.804 693.109 281.284 694.98 280.439 696.062L281.227 696.677ZM282.804 690.243L283.804 690.243L283.804 685.511L282.804 685.511L281.804 685.511L281.804 690.243L282.804 690.243ZM282.804 685.511L283.804 685.511C283.804 682.493 283.273 680.08 282.008 678.495L281.227 679.119L280.445 679.742C281.283 680.793 281.804 682.642 281.804 685.511L282.804 685.511ZM281.227 679.119L282.016 678.504C280.775 676.912 279.059 676.121 276.979 676.121L276.979 677.121L276.979 678.121C278.487 678.121 279.603 678.662 280.438 679.733L281.227 679.119ZM276.979 677.121L276.979 676.121C274.899 676.121 273.183 676.912 271.942 678.504L272.731 679.119L273.52 679.733C274.355 678.662 275.47 678.121 276.979 678.121L276.979 677.121ZM272.731 679.119L271.945 678.5C270.698 680.085 270.175 682.495 270.175 685.511L271.175 685.511L272.175 685.511C272.175 682.64 272.69 680.788 273.517 679.737L272.731 679.119ZM271.175 685.511L270.175 685.511L270.175 690.243L271.175 690.243L272.175 690.243L272.175 685.511L271.175 685.511ZM293.928 672.558L293.928 671.558L292.928 671.558L292.928 672.558L293.928 672.558ZM300.93 672.558L301.93 672.558L301.93 671.558L300.93 671.558L300.93 672.558ZM302.15 697.329L301.409 698.001L301.414 698.006L302.15 697.329ZM308.858 697.329L308.123 696.651L308.122 696.652L308.858 697.329ZM310.098 672.558L310.098 671.558L309.098 671.558L309.098 672.558L310.098 672.558ZM317.038 672.558L318.038 672.558L318.038 671.558L317.038 671.558L317.038 672.558ZM313.884 700.841L313.215 700.098L313.212 700.1L313.884 700.841ZM293.928 691.988L294.928 691.988L294.928 672.558L293.928 672.558L292.928 672.558L292.928 691.988L293.928 691.988ZM293.928 672.558L293.928 673.558L300.93 673.558L300.93 672.558L300.93 671.558L293.928 671.558L293.928 672.558ZM300.93 672.558L299.93 672.558L299.93 692.724L300.93 692.724L301.93 692.724L301.93 672.558L300.93 672.558ZM300.93 692.724L299.93 692.724C299.93 694.967 300.339 696.82 301.409 698.001L302.15 697.329L302.891 696.658C302.334 696.043 301.93 694.827 301.93 692.724L300.93 692.724ZM302.15 697.329L301.414 698.006C302.454 699.137 303.873 699.654 305.535 699.654L305.535 698.654L305.535 697.654C304.309 697.654 303.471 697.288 302.885 696.652L302.15 697.329ZM305.535 698.654L305.535 699.654C307.165 699.654 308.559 699.13 309.593 698.006L308.858 697.329L308.122 696.652C307.531 697.294 306.709 697.654 305.535 697.654L305.535 698.654ZM308.858 697.329L309.593 698.007C310.681 696.826 311.098 694.97 311.098 692.724L310.098 692.724L309.098 692.724C309.098 694.824 308.688 696.038 308.123 696.651L308.858 697.329ZM310.098 692.724L311.098 692.724L311.098 672.558L310.098 672.558L309.098 672.558L309.098 692.724L310.098 692.724ZM310.098 672.558L310.098 673.558L317.038 673.558L317.038 672.558L317.038 671.558L310.098 671.558L310.098 672.558ZM317.038 672.558L316.038 672.558L316.038 691.988L317.038 691.988L318.038 691.988L318.038 672.558L317.038 672.558ZM317.038 691.988L316.038 691.988C316.038 695.835 315.031 698.463 313.215 700.098L313.884 700.841L314.553 701.584C316.942 699.434 318.038 696.159 318.038 691.988L317.038 691.988ZM313.884 700.841L313.212 700.1C311.347 701.79 308.83 702.68 305.556 702.68L305.556 703.68L305.556 704.68C309.208 704.68 312.243 703.677 314.555 701.582L313.884 700.841ZM305.556 703.68L305.556 702.68C302.222 702.68 299.662 701.787 297.769 700.095L297.103 700.841L296.436 701.586C298.778 703.68 301.853 704.68 305.556 704.68L305.556 703.68ZM297.103 700.841L297.769 700.095C295.941 698.46 294.928 695.834 294.928 691.988L293.928 691.988L292.928 691.988C292.928 696.161 294.032 699.436 296.436 701.586L297.103 700.841Z" fill="black" mask="url(#path-5-outside-1_17007_6901)"/> +<mask id="path-7-outside-2_17007_6901" maskUnits="userSpaceOnUse" x="96" y="615.343" width="261" height="31" fill="black"> +<rect fill="white" x="96" y="615.343" width="261" height="31"/> +<path d="M97.208 644.343L97.208 617.327L108.081 617.327C111.013 617.327 113.258 618.137 114.816 619.758C116.375 621.366 117.154 623.562 117.154 626.345C117.154 629.116 116.381 631.317 114.835 632.95C113.301 634.571 111.025 635.381 108.007 635.381L103.368 635.381L103.368 644.343L97.208 644.343ZM103.368 631.039L106.949 631.039C108.471 631.039 109.528 630.612 110.122 629.759C110.716 628.893 111.013 627.78 111.013 626.419C111.013 625.071 110.716 623.976 110.122 623.135C109.528 622.281 108.471 621.854 106.949 621.854L103.368 621.854L103.368 631.039ZM118.62 635.474L118.62 634.88C118.62 632.06 119.505 629.802 121.273 628.107C123.042 626.413 125.362 625.565 128.231 625.565C131.076 625.565 133.291 626.369 134.874 627.978C136.457 629.586 137.249 631.806 137.249 634.639L137.249 636.457L122.164 636.457L122.164 633.191L131.441 633.191L131.441 632.932C131.441 632.016 131.169 631.256 130.625 630.649C130.081 630.043 129.271 629.74 128.194 629.74C127.007 629.74 126.098 630.173 125.467 631.039C124.848 631.905 124.539 633.024 124.539 634.397L124.539 635.641C124.539 637.199 124.873 638.418 125.541 639.296C126.221 640.174 127.205 640.613 128.491 640.613C129.407 640.613 130.186 640.403 130.829 639.982C131.472 639.562 131.986 639.049 132.369 638.442L137.008 640.354C136.426 641.714 135.424 642.803 134.002 643.619C132.592 644.436 130.78 644.844 128.565 644.844C125.436 644.844 122.993 644.003 121.236 642.32C119.492 640.626 118.62 638.343 118.62 635.474ZM139.197 639.036C139.197 637.106 139.952 635.616 141.461 634.564C142.982 633.513 144.949 632.981 147.361 632.969L151.443 632.969L151.443 631.874C151.443 631.058 151.239 630.414 150.831 629.944C150.423 629.474 149.73 629.239 148.753 629.239C147.776 629.239 147.058 629.437 146.601 629.833C146.143 630.229 145.914 630.755 145.914 631.41L145.914 631.744L140.292 631.726L140.292 631.354C140.292 629.66 141.09 628.281 142.686 627.217C144.294 626.141 146.434 625.603 149.105 625.603C151.802 625.603 153.855 626.116 155.266 627.143C156.688 628.169 157.399 629.802 157.399 632.041L157.399 640.205C157.399 640.947 157.461 641.659 157.585 642.339C157.721 643.007 157.913 643.582 158.16 644.064L158.16 644.343L152.297 644.343C152.136 644.046 151.994 643.681 151.87 643.248C151.759 642.815 151.685 642.376 151.647 641.931C151.239 642.623 150.509 643.248 149.458 643.805C148.419 644.361 147.108 644.64 145.524 644.64C143.644 644.64 142.117 644.17 140.941 643.229C139.779 642.289 139.197 640.892 139.197 639.036ZM145.116 638.572C145.116 639.352 145.339 639.964 145.784 640.409C146.229 640.842 146.91 641.059 147.825 641.059C148.815 641.059 149.662 640.731 150.367 640.075C151.085 639.407 151.443 638.634 151.443 637.756L151.443 636.197L148.809 636.197C147.547 636.197 146.613 636.389 146.007 636.772C145.413 637.156 145.116 637.756 145.116 638.572ZM161.37 644.343L161.37 626.104L167.159 626.104L167.215 628.386L167.289 628.386C167.759 627.582 168.477 626.932 169.441 626.438C170.419 625.93 171.563 625.677 172.874 625.677C174.754 625.677 176.282 626.202 177.457 627.254C178.632 628.305 179.22 630.093 179.22 632.616L179.22 644.343L173.264 644.343L173.264 633.136C173.264 632.047 173.029 631.28 172.559 630.835C172.101 630.377 171.451 630.148 170.61 630.148C169.893 630.148 169.243 630.359 168.662 630.779C168.081 631.2 167.635 631.763 167.326 632.468L167.326 644.343L161.37 644.343ZM182.801 637.7L182.801 626.104L188.775 626.104L188.775 637.273C188.775 638.424 189.01 639.228 189.48 639.686C189.951 640.131 190.6 640.354 191.429 640.354C192.159 640.354 192.808 640.131 193.377 639.686C193.946 639.24 194.385 638.684 194.694 638.016L194.694 626.104L200.65 626.104L200.65 644.343L194.88 644.343L194.806 642.042L194.75 642.042C194.23 642.871 193.482 643.533 192.505 644.027C191.54 644.522 190.396 644.77 189.072 644.77C187.217 644.77 185.708 644.225 184.545 643.137C183.382 642.036 182.801 640.224 182.801 637.7ZM202.691 630.408L202.691 626.104L215.03 626.104L215.03 630.408L202.691 630.408ZM205.475 638.758L205.475 627.532L205.586 627.161L205.586 620.927L211.356 620.927L211.356 637.867C211.356 638.931 211.517 639.636 211.839 639.982C212.16 640.329 212.643 640.502 213.286 640.502C213.595 640.502 213.892 640.477 214.177 640.428C214.461 640.366 214.74 640.279 215.012 640.168L215.012 644.287C214.69 644.411 214.214 644.528 213.583 644.64C212.952 644.751 212.204 644.807 211.338 644.807C209.495 644.807 208.054 644.33 207.015 643.378C205.988 642.413 205.475 640.873 205.475 638.758ZM226.979 644.343L226.979 617.327L237.853 617.327C240.784 617.327 243.029 618.137 244.588 619.758C246.146 621.366 246.926 623.562 246.926 626.345C246.926 629.116 246.153 631.317 244.606 632.95C243.073 634.571 240.797 635.381 237.778 635.381L233.14 635.381L233.14 644.343L226.979 644.343ZM233.14 631.039L236.721 631.039C238.242 631.039 239.3 630.612 239.894 629.759C240.487 628.893 240.784 627.78 240.784 626.419C240.784 625.071 240.487 623.976 239.894 623.135C239.3 622.281 238.242 621.854 236.721 621.854L233.14 621.854L233.14 631.039ZM249.635 644.343L249.635 626.104L255.665 626.104L255.665 644.343L249.635 644.343ZM249.245 620.37C249.245 619.504 249.542 618.774 250.136 618.181C250.729 617.575 251.577 617.271 252.678 617.271C253.766 617.271 254.601 617.568 255.183 618.162C255.764 618.756 256.055 619.492 256.055 620.37C256.055 621.236 255.758 621.972 255.164 622.578C254.57 623.184 253.729 623.487 252.641 623.487C251.54 623.487 250.699 623.184 250.117 622.578C249.536 621.972 249.245 621.236 249.245 620.37ZM258.708 635.492L258.708 634.898C258.708 632.066 259.617 629.802 261.436 628.107C263.254 626.4 265.647 625.547 268.616 625.547C271.585 625.547 273.972 626.4 275.778 628.107C277.597 629.802 278.506 632.066 278.506 634.898L278.506 635.492C278.506 638.325 277.597 640.595 275.778 642.302C273.972 643.996 271.585 644.844 268.616 644.844C265.635 644.844 263.235 643.996 261.417 642.302C259.611 640.595 258.708 638.325 258.708 635.492ZM264.757 634.639L264.757 635.733C264.757 637.243 265.085 638.424 265.74 639.277C266.408 640.118 267.361 640.539 268.598 640.539C269.847 640.539 270.799 640.118 271.455 639.277C272.123 638.424 272.457 637.243 272.457 635.733L272.457 634.639C272.457 633.142 272.123 631.979 271.455 631.15C270.787 630.309 269.835 629.889 268.598 629.889C267.373 629.889 266.427 630.309 265.759 631.15C265.091 631.979 264.757 633.142 264.757 634.639ZM281.493 644.343L281.493 626.104L287.282 626.104L287.338 628.386L287.412 628.386C287.882 627.582 288.6 626.932 289.564 626.438C290.542 625.93 291.686 625.677 292.997 625.677C294.877 625.677 296.405 626.202 297.58 627.254C298.755 628.305 299.343 630.093 299.343 632.616L299.343 644.343L293.387 644.343L293.387 633.136C293.387 632.047 293.152 631.28 292.682 630.835C292.224 630.377 291.575 630.148 290.733 630.148C290.016 630.148 289.367 630.359 288.785 630.779C288.204 631.2 287.758 631.763 287.449 632.468L287.449 644.343L281.493 644.343ZM302.163 635.474L302.163 634.88C302.163 632.06 303.048 629.802 304.816 628.107C306.585 626.413 308.905 625.565 311.774 625.565C314.619 625.565 316.834 626.369 318.417 627.978C320 629.586 320.792 631.806 320.792 634.639L320.792 636.457L305.707 636.457L305.707 633.191L314.984 633.191L314.984 632.932C314.984 632.016 314.712 631.256 314.168 630.649C313.624 630.043 312.813 629.74 311.737 629.74C310.55 629.74 309.641 630.173 309.01 631.039C308.391 631.905 308.082 633.024 308.082 634.397L308.082 635.641C308.082 637.199 308.416 638.418 309.084 639.296C309.764 640.174 310.748 640.613 312.034 640.613C312.95 640.613 313.729 640.403 314.372 639.982C315.015 639.562 315.529 639.049 315.912 638.442L320.551 640.354C319.969 641.714 318.967 642.803 317.545 643.619C316.135 644.436 314.323 644.844 312.108 644.844C308.979 644.844 306.536 644.003 304.779 642.32C303.035 640.626 302.163 638.343 302.163 635.474ZM322.685 635.474L322.685 634.88C322.685 632.06 323.569 629.802 325.338 628.107C327.107 626.413 329.426 625.565 332.296 625.565C335.141 625.565 337.355 626.369 338.938 627.978C340.522 629.586 341.313 631.806 341.313 634.639L341.313 636.457L326.229 636.457L326.229 633.191L335.506 633.191L335.506 632.932C335.506 632.016 335.234 631.256 334.689 630.649C334.145 630.043 333.335 629.74 332.259 629.74C331.071 629.74 330.162 630.173 329.531 631.039C328.913 631.905 328.604 633.024 328.604 634.397L328.604 635.641C328.604 637.199 328.937 638.418 329.605 639.296C330.286 640.174 331.269 640.613 332.556 640.613C333.471 640.613 334.25 640.403 334.894 639.982C335.537 639.562 336.05 639.049 336.434 638.442L341.072 640.354C340.491 641.714 339.489 642.803 338.066 643.619C336.656 644.436 334.844 644.844 332.63 644.844C329.5 644.844 327.057 644.003 325.301 642.32C323.557 640.626 322.685 638.343 322.685 635.474ZM344.134 644.343L344.134 626.104L349.997 626.104L350.071 628.367L350.127 628.367C350.56 627.6 351.147 626.963 351.89 626.456C352.632 625.949 353.467 625.695 354.395 625.695C354.716 625.695 355.025 625.72 355.322 625.77C355.619 625.819 355.829 625.868 355.953 625.918L355.953 630.612C355.73 630.538 355.471 630.482 355.174 630.445C354.889 630.408 354.568 630.39 354.209 630.39C353.38 630.39 352.601 630.643 351.871 631.15C351.141 631.658 350.578 632.319 350.183 633.136L350.183 644.343L344.134 644.343Z"/> +</mask> +<path d="M97.208 644.343L97.208 617.327L108.081 617.327C111.013 617.327 113.258 618.137 114.816 619.758C116.375 621.366 117.154 623.562 117.154 626.345C117.154 629.116 116.381 631.317 114.835 632.95C113.301 634.571 111.025 635.381 108.007 635.381L103.368 635.381L103.368 644.343L97.208 644.343ZM103.368 631.039L106.949 631.039C108.471 631.039 109.528 630.612 110.122 629.759C110.716 628.893 111.013 627.78 111.013 626.419C111.013 625.071 110.716 623.976 110.122 623.135C109.528 622.281 108.471 621.854 106.949 621.854L103.368 621.854L103.368 631.039ZM118.62 635.474L118.62 634.88C118.62 632.06 119.505 629.802 121.273 628.107C123.042 626.413 125.362 625.565 128.231 625.565C131.076 625.565 133.291 626.369 134.874 627.978C136.457 629.586 137.249 631.806 137.249 634.639L137.249 636.457L122.164 636.457L122.164 633.191L131.441 633.191L131.441 632.932C131.441 632.016 131.169 631.256 130.625 630.649C130.081 630.043 129.271 629.74 128.194 629.74C127.007 629.74 126.098 630.173 125.467 631.039C124.848 631.905 124.539 633.024 124.539 634.397L124.539 635.641C124.539 637.199 124.873 638.418 125.541 639.296C126.221 640.174 127.205 640.613 128.491 640.613C129.407 640.613 130.186 640.403 130.829 639.982C131.472 639.562 131.986 639.049 132.369 638.442L137.008 640.354C136.426 641.714 135.424 642.803 134.002 643.619C132.592 644.436 130.78 644.844 128.565 644.844C125.436 644.844 122.993 644.003 121.236 642.32C119.492 640.626 118.62 638.343 118.62 635.474ZM139.197 639.036C139.197 637.106 139.952 635.616 141.461 634.564C142.982 633.513 144.949 632.981 147.361 632.969L151.443 632.969L151.443 631.874C151.443 631.058 151.239 630.414 150.831 629.944C150.423 629.474 149.73 629.239 148.753 629.239C147.776 629.239 147.058 629.437 146.601 629.833C146.143 630.229 145.914 630.755 145.914 631.41L145.914 631.744L140.292 631.726L140.292 631.354C140.292 629.66 141.09 628.281 142.686 627.217C144.294 626.141 146.434 625.603 149.105 625.603C151.802 625.603 153.855 626.116 155.266 627.143C156.688 628.169 157.399 629.802 157.399 632.041L157.399 640.205C157.399 640.947 157.461 641.659 157.585 642.339C157.721 643.007 157.913 643.582 158.16 644.064L158.16 644.343L152.297 644.343C152.136 644.046 151.994 643.681 151.87 643.248C151.759 642.815 151.685 642.376 151.647 641.931C151.239 642.623 150.509 643.248 149.458 643.805C148.419 644.361 147.108 644.64 145.524 644.64C143.644 644.64 142.117 644.17 140.941 643.229C139.779 642.289 139.197 640.892 139.197 639.036ZM145.116 638.572C145.116 639.352 145.339 639.964 145.784 640.409C146.229 640.842 146.91 641.059 147.825 641.059C148.815 641.059 149.662 640.731 150.367 640.075C151.085 639.407 151.443 638.634 151.443 637.756L151.443 636.197L148.809 636.197C147.547 636.197 146.613 636.389 146.007 636.772C145.413 637.156 145.116 637.756 145.116 638.572ZM161.37 644.343L161.37 626.104L167.159 626.104L167.215 628.386L167.289 628.386C167.759 627.582 168.477 626.932 169.441 626.438C170.419 625.93 171.563 625.677 172.874 625.677C174.754 625.677 176.282 626.202 177.457 627.254C178.632 628.305 179.22 630.093 179.22 632.616L179.22 644.343L173.264 644.343L173.264 633.136C173.264 632.047 173.029 631.28 172.559 630.835C172.101 630.377 171.451 630.148 170.61 630.148C169.893 630.148 169.243 630.359 168.662 630.779C168.081 631.2 167.635 631.763 167.326 632.468L167.326 644.343L161.37 644.343ZM182.801 637.7L182.801 626.104L188.775 626.104L188.775 637.273C188.775 638.424 189.01 639.228 189.48 639.686C189.951 640.131 190.6 640.354 191.429 640.354C192.159 640.354 192.808 640.131 193.377 639.686C193.946 639.24 194.385 638.684 194.694 638.016L194.694 626.104L200.65 626.104L200.65 644.343L194.88 644.343L194.806 642.042L194.75 642.042C194.23 642.871 193.482 643.533 192.505 644.027C191.54 644.522 190.396 644.77 189.072 644.77C187.217 644.77 185.708 644.225 184.545 643.137C183.382 642.036 182.801 640.224 182.801 637.7ZM202.691 630.408L202.691 626.104L215.03 626.104L215.03 630.408L202.691 630.408ZM205.475 638.758L205.475 627.532L205.586 627.161L205.586 620.927L211.356 620.927L211.356 637.867C211.356 638.931 211.517 639.636 211.839 639.982C212.16 640.329 212.643 640.502 213.286 640.502C213.595 640.502 213.892 640.477 214.177 640.428C214.461 640.366 214.74 640.279 215.012 640.168L215.012 644.287C214.69 644.411 214.214 644.528 213.583 644.64C212.952 644.751 212.204 644.807 211.338 644.807C209.495 644.807 208.054 644.33 207.015 643.378C205.988 642.413 205.475 640.873 205.475 638.758ZM226.979 644.343L226.979 617.327L237.853 617.327C240.784 617.327 243.029 618.137 244.588 619.758C246.146 621.366 246.926 623.562 246.926 626.345C246.926 629.116 246.153 631.317 244.606 632.95C243.073 634.571 240.797 635.381 237.778 635.381L233.14 635.381L233.14 644.343L226.979 644.343ZM233.14 631.039L236.721 631.039C238.242 631.039 239.3 630.612 239.894 629.759C240.487 628.893 240.784 627.78 240.784 626.419C240.784 625.071 240.487 623.976 239.894 623.135C239.3 622.281 238.242 621.854 236.721 621.854L233.14 621.854L233.14 631.039ZM249.635 644.343L249.635 626.104L255.665 626.104L255.665 644.343L249.635 644.343ZM249.245 620.37C249.245 619.504 249.542 618.774 250.136 618.181C250.729 617.575 251.577 617.271 252.678 617.271C253.766 617.271 254.601 617.568 255.183 618.162C255.764 618.756 256.055 619.492 256.055 620.37C256.055 621.236 255.758 621.972 255.164 622.578C254.57 623.184 253.729 623.487 252.641 623.487C251.54 623.487 250.699 623.184 250.117 622.578C249.536 621.972 249.245 621.236 249.245 620.37ZM258.708 635.492L258.708 634.898C258.708 632.066 259.617 629.802 261.436 628.107C263.254 626.4 265.647 625.547 268.616 625.547C271.585 625.547 273.972 626.4 275.778 628.107C277.597 629.802 278.506 632.066 278.506 634.898L278.506 635.492C278.506 638.325 277.597 640.595 275.778 642.302C273.972 643.996 271.585 644.844 268.616 644.844C265.635 644.844 263.235 643.996 261.417 642.302C259.611 640.595 258.708 638.325 258.708 635.492ZM264.757 634.639L264.757 635.733C264.757 637.243 265.085 638.424 265.74 639.277C266.408 640.118 267.361 640.539 268.598 640.539C269.847 640.539 270.799 640.118 271.455 639.277C272.123 638.424 272.457 637.243 272.457 635.733L272.457 634.639C272.457 633.142 272.123 631.979 271.455 631.15C270.787 630.309 269.835 629.889 268.598 629.889C267.373 629.889 266.427 630.309 265.759 631.15C265.091 631.979 264.757 633.142 264.757 634.639ZM281.493 644.343L281.493 626.104L287.282 626.104L287.338 628.386L287.412 628.386C287.882 627.582 288.6 626.932 289.564 626.438C290.542 625.93 291.686 625.677 292.997 625.677C294.877 625.677 296.405 626.202 297.58 627.254C298.755 628.305 299.343 630.093 299.343 632.616L299.343 644.343L293.387 644.343L293.387 633.136C293.387 632.047 293.152 631.28 292.682 630.835C292.224 630.377 291.575 630.148 290.733 630.148C290.016 630.148 289.367 630.359 288.785 630.779C288.204 631.2 287.758 631.763 287.449 632.468L287.449 644.343L281.493 644.343ZM302.163 635.474L302.163 634.88C302.163 632.06 303.048 629.802 304.816 628.107C306.585 626.413 308.905 625.565 311.774 625.565C314.619 625.565 316.834 626.369 318.417 627.978C320 629.586 320.792 631.806 320.792 634.639L320.792 636.457L305.707 636.457L305.707 633.191L314.984 633.191L314.984 632.932C314.984 632.016 314.712 631.256 314.168 630.649C313.624 630.043 312.813 629.74 311.737 629.74C310.55 629.74 309.641 630.173 309.01 631.039C308.391 631.905 308.082 633.024 308.082 634.397L308.082 635.641C308.082 637.199 308.416 638.418 309.084 639.296C309.764 640.174 310.748 640.613 312.034 640.613C312.95 640.613 313.729 640.403 314.372 639.982C315.015 639.562 315.529 639.049 315.912 638.442L320.551 640.354C319.969 641.714 318.967 642.803 317.545 643.619C316.135 644.436 314.323 644.844 312.108 644.844C308.979 644.844 306.536 644.003 304.779 642.32C303.035 640.626 302.163 638.343 302.163 635.474ZM322.685 635.474L322.685 634.88C322.685 632.06 323.569 629.802 325.338 628.107C327.107 626.413 329.426 625.565 332.296 625.565C335.141 625.565 337.355 626.369 338.938 627.978C340.522 629.586 341.313 631.806 341.313 634.639L341.313 636.457L326.229 636.457L326.229 633.191L335.506 633.191L335.506 632.932C335.506 632.016 335.234 631.256 334.689 630.649C334.145 630.043 333.335 629.74 332.259 629.74C331.071 629.74 330.162 630.173 329.531 631.039C328.913 631.905 328.604 633.024 328.604 634.397L328.604 635.641C328.604 637.199 328.937 638.418 329.605 639.296C330.286 640.174 331.269 640.613 332.556 640.613C333.471 640.613 334.25 640.403 334.894 639.982C335.537 639.562 336.05 639.049 336.434 638.442L341.072 640.354C340.491 641.714 339.489 642.803 338.066 643.619C336.656 644.436 334.844 644.844 332.63 644.844C329.5 644.844 327.057 644.003 325.301 642.32C323.557 640.626 322.685 638.343 322.685 635.474ZM344.134 644.343L344.134 626.104L349.997 626.104L350.071 628.367L350.127 628.367C350.56 627.6 351.147 626.963 351.89 626.456C352.632 625.949 353.467 625.695 354.395 625.695C354.716 625.695 355.025 625.72 355.322 625.77C355.619 625.819 355.829 625.868 355.953 625.918L355.953 630.612C355.73 630.538 355.471 630.482 355.174 630.445C354.889 630.408 354.568 630.39 354.209 630.39C353.38 630.39 352.601 630.643 351.871 631.15C351.141 631.658 350.578 632.319 350.183 633.136L350.183 644.343L344.134 644.343Z" fill="white"/> +<path d="M97.208 644.343L96.208 644.343L96.208 645.343L97.208 645.343L97.208 644.343ZM97.208 617.327L97.208 616.327L96.208 616.327L96.208 617.327L97.208 617.327ZM114.816 619.758L114.096 620.451L114.098 620.454L114.816 619.758ZM114.835 632.95L114.109 632.263L114.109 632.263L114.835 632.95ZM103.368 635.381L103.368 634.381L102.368 634.381L102.368 635.381L103.368 635.381ZM103.368 644.343L103.368 645.343L104.368 645.343L104.368 644.343L103.368 644.343ZM103.368 631.039L102.368 631.039L102.368 632.039L103.368 632.039L103.368 631.039ZM110.122 629.759L110.943 630.33L110.947 630.324L110.122 629.759ZM110.122 623.135L109.301 623.706L109.305 623.711L110.122 623.135ZM103.368 621.854L103.368 620.854L102.368 620.854L102.368 621.854L103.368 621.854ZM97.208 644.343L98.208 644.343L98.208 617.327L97.208 617.327L96.208 617.327L96.208 644.343L97.208 644.343ZM97.208 617.327L97.208 618.327L108.081 618.327L108.081 617.327L108.081 616.327L97.208 616.327L97.208 617.327ZM108.081 617.327L108.081 618.327C110.827 618.327 112.778 619.081 114.096 620.451L114.816 619.758L115.537 619.065C113.737 617.193 111.198 616.327 108.081 616.327L108.081 617.327ZM114.816 619.758L114.098 620.454C115.435 621.832 116.154 623.755 116.154 626.345L117.154 626.345L118.154 626.345C118.154 623.368 117.315 620.899 115.534 619.062L114.816 619.758ZM117.154 626.345L116.154 626.345C116.154 628.922 115.44 630.856 114.109 632.263L114.835 632.95L115.561 633.638C117.322 631.778 118.154 629.309 118.154 626.345L117.154 626.345ZM114.835 632.95L114.109 632.263C112.823 633.621 110.851 634.381 108.007 634.381L108.007 635.381L108.007 636.381C111.199 636.381 113.779 635.52 115.561 633.638L114.835 632.95ZM108.007 635.381L108.007 634.381L103.368 634.381L103.368 635.381L103.368 636.381L108.007 636.381L108.007 635.381ZM103.368 635.381L102.368 635.381L102.368 644.343L103.368 644.343L104.368 644.343L104.368 635.381L103.368 635.381ZM103.368 644.343L103.368 643.343L97.208 643.343L97.208 644.343L97.208 645.343L103.368 645.343L103.368 644.343ZM103.368 631.039L103.368 632.039L106.949 632.039L106.949 631.039L106.949 630.039L103.368 630.039L103.368 631.039ZM106.949 631.039L106.949 632.039C108.637 632.039 110.086 631.562 110.943 630.33L110.122 629.759L109.301 629.188C108.97 629.663 108.304 630.039 106.949 630.039L106.949 631.039ZM110.122 629.759L110.947 630.324C111.684 629.249 112.013 627.922 112.013 626.419L111.013 626.419L110.013 626.419C110.013 627.637 109.747 628.537 109.297 629.193L110.122 629.759ZM111.013 626.419L112.013 626.419C112.013 624.928 111.684 623.613 110.939 622.558L110.122 623.135L109.305 623.711C109.748 624.339 110.013 625.214 110.013 626.419L111.013 626.419ZM110.122 623.135L110.943 622.564C110.086 621.332 108.637 620.854 106.949 620.854L106.949 621.854L106.949 622.854C108.304 622.854 108.97 623.23 109.301 623.706L110.122 623.135ZM106.949 621.854L106.949 620.854L103.368 620.854L103.368 621.854L103.368 622.854L106.949 622.854L106.949 621.854ZM103.368 621.854L102.368 621.854L102.368 631.039L103.368 631.039L104.368 631.039L104.368 621.854L103.368 621.854ZM121.273 628.107L121.965 628.83L121.273 628.107ZM137.249 636.457L137.249 637.457L138.249 637.457L138.249 636.457L137.249 636.457ZM122.164 636.457L121.164 636.457L121.164 637.457L122.164 637.457L122.164 636.457ZM122.164 633.191L122.164 632.191L121.164 632.191L121.164 633.191L122.164 633.191ZM131.441 633.191L131.441 634.191L132.441 634.191L132.441 633.191L131.441 633.191ZM125.467 631.039L124.659 630.45L124.653 630.458L125.467 631.039ZM125.541 639.296L124.745 639.901L124.75 639.908L125.541 639.296ZM132.369 638.442L132.75 637.518L131.973 637.198L131.524 637.908L132.369 638.442ZM137.008 640.354L137.927 640.746L138.325 639.815L137.389 639.429L137.008 640.354ZM134.002 643.619L133.504 642.752L133.501 642.754L134.002 643.619ZM121.236 642.32L120.539 643.038L120.545 643.043L121.236 642.32ZM118.62 635.474L119.62 635.474L119.62 634.88L118.62 634.88L117.62 634.88L117.62 635.474L118.62 635.474ZM118.62 634.88L119.62 634.88C119.62 632.287 120.424 630.307 121.965 628.83L121.273 628.107L120.582 627.385C118.586 629.298 117.62 631.832 117.62 634.88L118.62 634.88ZM121.273 628.107L121.965 628.83C123.516 627.343 125.572 626.565 128.231 626.565L128.231 625.565L128.231 624.565C125.151 624.565 122.568 625.482 120.582 627.385L121.273 628.107ZM128.231 625.565L128.231 626.565C130.882 626.565 132.812 627.309 134.161 628.679L134.874 627.978L135.587 627.276C133.769 625.43 131.271 624.565 128.231 624.565L128.231 625.565ZM134.874 627.978L134.161 628.679C135.516 630.055 136.249 631.998 136.249 634.639L137.249 634.639L138.249 634.639C138.249 631.614 137.398 629.116 135.587 627.276L134.874 627.978ZM137.249 634.639L136.249 634.639L136.249 636.457L137.249 636.457L138.249 636.457L138.249 634.639L137.249 634.639ZM137.249 636.457L137.249 635.457L122.164 635.457L122.164 636.457L122.164 637.457L137.249 637.457L137.249 636.457ZM122.164 636.457L123.164 636.457L123.164 633.191L122.164 633.191L121.164 633.191L121.164 636.457L122.164 636.457ZM122.164 633.191L122.164 634.191L131.441 634.191L131.441 633.191L131.441 632.191L122.164 632.191L122.164 633.191ZM131.441 633.191L132.441 633.191L132.441 632.932L131.441 632.932L130.441 632.932L130.441 633.191L131.441 633.191ZM131.441 632.932L132.441 632.932C132.441 631.802 132.099 630.794 131.369 629.981L130.625 630.649L129.881 631.318C130.24 631.717 130.441 632.23 130.441 632.932L131.441 632.932ZM130.625 630.649L131.369 629.981C130.579 629.102 129.458 628.74 128.194 628.74L128.194 629.74L128.194 630.74C129.083 630.74 129.582 630.985 129.881 631.318L130.625 630.649ZM128.194 629.74L128.194 628.74C126.727 628.74 125.5 629.295 124.659 630.45L125.467 631.039L126.275 631.628C126.695 631.051 127.286 630.74 128.194 630.74L128.194 629.74ZM125.467 631.039L124.653 630.458C123.882 631.537 123.539 632.876 123.539 634.397L124.539 634.397L125.539 634.397C125.539 633.172 125.814 632.273 126.281 631.62L125.467 631.039ZM124.539 634.397L123.539 634.397L123.539 635.641L124.539 635.641L125.539 635.641L125.539 634.397L124.539 634.397ZM124.539 635.641L123.539 635.641C123.539 637.33 123.9 638.79 124.745 639.901L125.541 639.296L126.337 638.691C125.846 638.045 125.539 637.068 125.539 635.641L124.539 635.641ZM125.541 639.296L124.75 639.908C125.652 641.072 126.951 641.613 128.491 641.613L128.491 640.613L128.491 639.613C127.459 639.613 126.791 639.277 126.332 638.684L125.541 639.296ZM128.491 640.613L128.491 641.613C129.563 641.613 130.542 641.365 131.376 640.819L130.829 639.982L130.282 639.145C129.83 639.441 129.25 639.613 128.491 639.613L128.491 640.613ZM130.829 639.982L131.376 640.819C132.131 640.326 132.749 639.713 133.214 638.977L132.369 638.442L131.524 637.908C131.222 638.384 130.814 638.797 130.282 639.145L130.829 639.982ZM132.369 638.442L131.988 639.367L136.627 641.278L137.008 640.354L137.389 639.429L132.75 637.518L132.369 638.442ZM137.008 640.354L136.088 639.961C135.601 641.1 134.76 642.031 133.504 642.752L134.002 643.619L134.5 644.486C136.089 643.574 137.251 642.329 137.927 640.746L137.008 640.354ZM134.002 643.619L133.501 642.754C132.288 643.456 130.664 643.844 128.565 643.844L128.565 644.844L128.565 645.844C130.895 645.844 132.895 645.415 134.503 644.485L134.002 643.619ZM128.565 644.844L128.565 643.844C125.617 643.844 123.449 643.055 121.928 641.598L121.236 642.32L120.545 643.043C122.536 644.95 125.255 645.844 128.565 645.844L128.565 644.844ZM121.236 642.32L121.933 641.603C120.418 640.13 119.62 638.126 119.62 635.474L118.62 635.474L117.62 635.474C117.62 638.561 118.567 641.121 120.539 643.038L121.236 642.32ZM141.461 634.564L140.892 633.742L140.889 633.744L141.461 634.564ZM147.361 632.969L147.361 631.969L147.356 631.969L147.361 632.969ZM151.443 632.969L151.443 633.969L152.443 633.969L152.443 632.969L151.443 632.969ZM145.914 631.744L145.911 632.744L146.914 632.747L146.914 631.744L145.914 631.744ZM140.292 631.726L139.292 631.726L139.292 632.722L140.289 632.726L140.292 631.726ZM142.686 627.217L143.24 628.049L143.242 628.048L142.686 627.217ZM155.266 627.143L154.677 627.951L154.68 627.953L155.266 627.143ZM157.585 642.339L156.601 642.518L156.603 642.528L156.605 642.538L157.585 642.339ZM158.16 644.064L159.16 644.064L159.16 643.823L159.05 643.608L158.16 644.064ZM158.16 644.343L158.16 645.343L159.16 645.343L159.16 644.343L158.16 644.343ZM152.297 644.343L151.418 644.819L151.701 645.343L152.297 645.343L152.297 644.343ZM151.87 643.248L150.902 643.497L150.905 643.51L150.909 643.523L151.87 643.248ZM151.647 641.931L152.644 641.848L152.383 638.713L150.786 641.423L151.647 641.931ZM149.458 643.805L148.99 642.921L148.986 642.923L149.458 643.805ZM140.941 643.229L140.313 644.007L140.317 644.01L140.941 643.229ZM145.784 640.409L145.077 641.116L145.087 641.126L145.784 640.409ZM150.367 640.075L151.048 640.808L151.049 640.807L150.367 640.075ZM151.443 636.197L152.443 636.197L152.443 635.197L151.443 635.197L151.443 636.197ZM146.007 636.772L145.472 635.927L145.464 635.932L146.007 636.772ZM139.197 639.036L140.197 639.036C140.197 637.414 140.807 636.239 142.033 635.385L141.461 634.564L140.889 633.744C139.097 634.993 138.197 636.798 138.197 639.036L139.197 639.036ZM141.461 634.564L142.029 635.387C143.342 634.48 145.095 633.98 147.366 633.969L147.361 632.969L147.356 631.969C144.803 631.982 142.623 632.546 140.892 633.742L141.461 634.564ZM147.361 632.969L147.361 633.969L151.443 633.969L151.443 632.969L151.443 631.969L147.361 631.969L147.361 632.969ZM151.443 632.969L152.443 632.969L152.443 631.874L151.443 631.874L150.443 631.874L150.443 632.969L151.443 632.969ZM151.443 631.874L152.443 631.874C152.443 630.893 152.196 629.991 151.586 629.289L150.831 629.944L150.076 630.6C150.282 630.838 150.443 631.222 150.443 631.874L151.443 631.874ZM150.831 629.944L151.586 629.289C150.902 628.501 149.856 628.239 148.753 628.239L148.753 629.239L148.753 630.239C149.604 630.239 149.944 630.448 150.076 630.6L150.831 629.944ZM148.753 629.239L148.753 628.239C147.674 628.239 146.669 628.452 145.946 629.077L146.601 629.833L147.255 630.589C147.448 630.422 147.877 630.239 148.753 630.239L148.753 629.239ZM146.601 629.833L145.946 629.077C145.249 629.68 144.914 630.492 144.914 631.41L145.914 631.41L146.914 631.41C146.914 631.018 147.037 630.778 147.255 630.589L146.601 629.833ZM145.914 631.41L144.914 631.41L144.914 631.744L145.914 631.744L146.914 631.744L146.914 631.41L145.914 631.41ZM145.914 631.744L145.917 630.744L140.295 630.726L140.292 631.726L140.289 632.726L145.911 632.744L145.914 631.744ZM140.292 631.726L141.292 631.726L141.292 631.354L140.292 631.354L139.292 631.354L139.292 631.726L140.292 631.726ZM140.292 631.354L141.292 631.354C141.292 630.043 141.88 628.956 143.24 628.049L142.686 627.217L142.131 626.385C140.3 627.605 139.292 629.277 139.292 631.354L140.292 631.354ZM142.686 627.217L143.242 628.048C144.634 627.116 146.559 626.603 149.105 626.603L149.105 625.603L149.105 624.603C146.309 624.603 143.954 625.165 142.129 626.386L142.686 627.217ZM149.105 625.603L149.105 626.603C151.699 626.603 153.508 627.1 154.677 627.951L155.266 627.143L155.854 626.334C154.203 625.132 151.906 624.603 149.105 624.603L149.105 625.603ZM155.266 627.143L154.68 627.953C155.772 628.741 156.399 630.025 156.399 632.041L157.399 632.041L158.399 632.041C158.399 629.579 157.605 627.597 155.851 626.332L155.266 627.143ZM157.399 632.041L156.399 632.041L156.399 640.205L157.399 640.205L158.399 640.205L158.399 632.041L157.399 632.041ZM157.399 640.205L156.399 640.205C156.399 641.003 156.466 641.774 156.601 642.518L157.585 642.339L158.569 642.16C158.457 641.543 158.399 640.892 158.399 640.205L157.399 640.205ZM157.585 642.339L156.605 642.538C156.755 643.274 156.972 643.94 157.27 644.521L158.16 644.064L159.05 643.608C158.853 643.224 158.687 642.74 158.565 642.139L157.585 642.339ZM158.16 644.064L157.16 644.064L157.16 644.343L158.16 644.343L159.16 644.343L159.16 644.064L158.16 644.064ZM158.16 644.343L158.16 643.343L152.297 643.343L152.297 644.343L152.297 645.343L158.16 645.343L158.16 644.343ZM152.297 644.343L153.176 643.866C153.059 643.651 152.942 643.358 152.832 642.973L151.87 643.248L150.909 643.523C151.046 644.004 151.213 644.441 151.418 644.819L152.297 644.343ZM151.87 643.248L152.839 642.999C152.741 642.62 152.676 642.237 152.644 641.848L151.647 641.931L150.651 642.014C150.693 642.515 150.776 643.01 150.902 643.497L151.87 643.248ZM151.647 641.931L150.786 641.423C150.506 641.897 149.951 642.412 148.99 642.921L149.458 643.805L149.926 644.688C151.067 644.084 151.972 643.349 152.509 642.438L151.647 641.931ZM149.458 643.805L148.986 642.923C148.133 643.38 146.997 643.64 145.524 643.64L145.524 644.64L145.524 645.64C147.218 645.64 148.705 645.343 149.93 644.686L149.458 643.805ZM145.524 644.64L145.524 643.64C143.813 643.64 142.523 643.214 141.566 642.449L140.941 643.229L140.317 644.01C141.71 645.125 143.475 645.64 145.524 645.64L145.524 644.64ZM140.941 643.229L141.57 642.452C140.698 641.747 140.197 640.669 140.197 639.036L139.197 639.036L138.197 639.036C138.197 641.114 138.859 642.832 140.313 644.007L140.941 643.229ZM145.116 638.572L144.116 638.572C144.116 639.55 144.402 640.441 145.077 641.116L145.784 640.409L146.491 639.702C146.276 639.487 146.116 639.153 146.116 638.572L145.116 638.572ZM145.784 640.409L145.087 641.126C145.791 641.811 146.772 642.059 147.825 642.059L147.825 641.059L147.825 640.059C147.048 640.059 146.668 639.873 146.481 639.692L145.784 640.409ZM147.825 641.059L147.825 642.059C149.06 642.059 150.152 641.64 151.048 640.808L150.367 640.075L149.686 639.343C149.172 639.821 148.57 640.059 147.825 640.059L147.825 641.059ZM150.367 640.075L151.049 640.807C151.943 639.974 152.443 638.946 152.443 637.756L151.443 637.756L150.443 637.756C150.443 638.323 150.226 638.84 149.686 639.343L150.367 640.075ZM151.443 637.756L152.443 637.756L152.443 636.197L151.443 636.197L150.443 636.197L150.443 637.756L151.443 637.756ZM151.443 636.197L151.443 635.197L148.809 635.197L148.809 636.197L148.809 637.197L151.443 637.197L151.443 636.197ZM148.809 636.197L148.809 635.197C147.483 635.197 146.319 635.392 145.472 635.927L146.007 636.772L146.541 637.618C146.907 637.386 147.611 637.197 148.809 637.197L148.809 636.197ZM146.007 636.772L145.464 635.932C144.537 636.531 144.116 637.478 144.116 638.572L145.116 638.572L146.116 638.572C146.116 638.034 146.289 637.781 146.549 637.613L146.007 636.772ZM161.37 644.343L160.37 644.343L160.37 645.343L161.37 645.343L161.37 644.343ZM161.37 626.104L161.37 625.104L160.37 625.104L160.37 626.104L161.37 626.104ZM167.159 626.104L168.159 626.079L168.135 625.104L167.159 625.104L167.159 626.104ZM167.215 628.386L166.215 628.41L166.239 629.386L167.215 629.386L167.215 628.386ZM167.289 628.386L167.289 629.386L167.863 629.386L168.152 628.89L167.289 628.386ZM169.441 626.438L169.898 627.327L169.902 627.325L169.441 626.438ZM177.457 627.254L178.124 626.509L177.457 627.254ZM179.22 644.343L179.22 645.343L180.22 645.343L180.22 644.343L179.22 644.343ZM173.264 644.343L172.264 644.343L172.264 645.343L173.264 645.343L173.264 644.343ZM172.559 630.835L171.851 631.542L171.861 631.552L171.871 631.561L172.559 630.835ZM168.662 630.779L168.076 629.969L168.662 630.779ZM167.326 632.468L166.41 632.066L166.326 632.258L166.326 632.468L167.326 632.468ZM167.326 644.343L167.326 645.343L168.326 645.343L168.326 644.343L167.326 644.343ZM161.37 644.343L162.37 644.343L162.37 626.104L161.37 626.104L160.37 626.104L160.37 644.343L161.37 644.343ZM161.37 626.104L161.37 627.104L167.159 627.104L167.159 626.104L167.159 625.104L161.37 625.104L161.37 626.104ZM167.159 626.104L166.159 626.128L166.215 628.41L167.215 628.386L168.215 628.361L168.159 626.079L167.159 626.104ZM167.215 628.386L167.215 629.386L167.289 629.386L167.289 628.386L167.289 627.386L167.215 627.386L167.215 628.386ZM167.289 628.386L168.152 628.89C168.511 628.276 169.074 627.75 169.898 627.327L169.441 626.438L168.985 625.548C167.879 626.115 167.007 626.887 166.426 627.881L167.289 628.386ZM169.441 626.438L169.902 627.325C170.712 626.905 171.693 626.677 172.874 626.677L172.874 625.677L172.874 624.677C171.433 624.677 170.125 624.956 168.981 625.55L169.441 626.438ZM172.874 625.677L172.874 626.677C174.558 626.677 175.833 627.142 176.79 627.999L177.457 627.254L178.124 626.509C176.731 625.263 174.95 624.677 172.874 624.677L172.874 625.677ZM177.457 627.254L176.79 627.999C177.654 628.772 178.22 630.21 178.22 632.616L179.22 632.616L180.22 632.616C180.22 629.975 179.61 627.838 178.124 626.509L177.457 627.254ZM179.22 632.616L178.22 632.616L178.22 644.343L179.22 644.343L180.22 644.343L180.22 632.616L179.22 632.616ZM179.22 644.343L179.22 643.343L173.264 643.343L173.264 644.343L173.264 645.343L179.22 645.343L179.22 644.343ZM173.264 644.343L174.264 644.343L174.264 633.136L173.264 633.136L172.264 633.136L172.264 644.343L173.264 644.343ZM173.264 633.136L174.264 633.136C174.264 631.95 174.016 630.838 173.246 630.109L172.559 630.835L171.871 631.561C172.042 631.723 172.264 632.144 172.264 633.136L173.264 633.136ZM172.559 630.835L173.266 630.128C172.569 629.431 171.634 629.148 170.61 629.148L170.61 630.148L170.61 631.148C171.269 631.148 171.633 631.323 171.851 631.542L172.559 630.835ZM170.61 630.148L170.61 629.148C169.682 629.148 168.828 629.425 168.076 629.969L168.662 630.779L169.248 631.59C169.659 631.292 170.103 631.148 170.61 631.148L170.61 630.148ZM168.662 630.779L168.076 629.969C167.34 630.502 166.786 631.21 166.41 632.066L167.326 632.468L168.242 632.869C168.485 632.315 168.822 631.898 169.248 631.59L168.662 630.779ZM167.326 632.468L166.326 632.468L166.326 644.343L167.326 644.343L168.326 644.343L168.326 632.468L167.326 632.468ZM167.326 644.343L167.326 643.343L161.37 643.343L161.37 644.343L161.37 645.343L167.326 645.343L167.326 644.343ZM182.801 626.104L182.801 625.104L181.801 625.104L181.801 626.104L182.801 626.104ZM188.775 626.104L189.775 626.104L189.775 625.104L188.775 625.104L188.775 626.104ZM189.48 639.686L188.783 640.402L188.793 640.412L189.48 639.686ZM194.694 638.016L195.602 638.436L195.694 638.236L195.694 638.016L194.694 638.016ZM194.694 626.104L194.694 625.104L193.694 625.104L193.694 626.104L194.694 626.104ZM200.65 626.104L201.65 626.104L201.65 625.104L200.65 625.104L200.65 626.104ZM200.65 644.343L200.65 645.343L201.65 645.343L201.65 644.343L200.65 644.343ZM194.88 644.343L193.88 644.375L193.912 645.343L194.88 645.343L194.88 644.343ZM194.806 642.042L195.805 642.01L195.774 641.042L194.806 641.042L194.806 642.042ZM194.75 642.042L194.75 641.042L194.197 641.042L193.903 641.511L194.75 642.042ZM192.505 644.027L192.053 643.135L192.049 643.138L192.505 644.027ZM184.545 643.137L183.857 643.863L183.861 643.867L184.545 643.137ZM182.801 637.7L183.801 637.7L183.801 626.104L182.801 626.104L181.801 626.104L181.801 637.7L182.801 637.7ZM182.801 626.104L182.801 627.104L188.775 627.104L188.775 626.104L188.775 625.104L182.801 625.104L182.801 626.104ZM188.775 626.104L187.775 626.104L187.775 637.273L188.775 637.273L189.775 637.273L189.775 626.104L188.775 626.104ZM188.775 637.273L187.775 637.273C187.775 638.505 188.017 639.656 188.783 640.402L189.48 639.686L190.178 638.969C190.004 638.8 189.775 638.343 189.775 637.273L188.775 637.273ZM189.48 639.686L188.793 640.412C189.496 641.078 190.419 641.354 191.429 641.354L191.429 640.354L191.429 639.354C190.781 639.354 190.405 639.184 190.168 638.96L189.48 639.686ZM191.429 640.354L191.429 641.354C192.379 641.354 193.246 641.058 193.993 640.473L193.377 639.686L192.761 638.898C192.369 639.204 191.938 639.354 191.429 639.354L191.429 640.354ZM193.377 639.686L193.993 640.473C194.689 639.928 195.227 639.245 195.602 638.436L194.694 638.016L193.787 637.596C193.543 638.122 193.202 638.552 192.761 638.898L193.377 639.686ZM194.694 638.016L195.694 638.016L195.694 626.104L194.694 626.104L193.694 626.104L193.694 638.016L194.694 638.016ZM194.694 626.104L194.694 627.104L200.65 627.104L200.65 626.104L200.65 625.104L194.694 625.104L194.694 626.104ZM200.65 626.104L199.65 626.104L199.65 644.343L200.65 644.343L201.65 644.343L201.65 626.104L200.65 626.104ZM200.65 644.343L200.65 643.343L194.88 643.343L194.88 644.343L194.88 645.343L200.65 645.343L200.65 644.343ZM194.88 644.343L195.879 644.311L195.805 642.01L194.806 642.042L193.806 642.074L193.88 644.375L194.88 644.343ZM194.806 642.042L194.806 641.042L194.75 641.042L194.75 642.042L194.75 643.042L194.806 643.042L194.806 642.042ZM194.75 642.042L193.903 641.511C193.491 642.168 192.888 642.712 192.053 643.135L192.505 644.027L192.957 644.92C194.076 644.353 194.97 643.574 195.597 642.573L194.75 642.042ZM192.505 644.027L192.049 643.138C191.253 643.546 190.272 643.77 189.072 643.77L189.072 644.77L189.072 645.77C190.52 645.77 191.827 645.499 192.961 644.917L192.505 644.027ZM189.072 644.77L189.072 643.77C187.426 643.77 186.176 643.293 185.228 642.407L184.545 643.137L183.861 643.867C185.24 645.157 187.008 645.77 189.072 645.77L189.072 644.77ZM184.545 643.137L185.232 642.411C184.359 641.583 183.801 640.103 183.801 637.7L182.801 637.7L181.801 637.7C181.801 640.344 182.405 642.488 183.857 643.863L184.545 643.137ZM202.691 630.408L201.691 630.408L201.691 631.408L202.691 631.408L202.691 630.408ZM202.691 626.104L202.691 625.104L201.691 625.104L201.691 626.104L202.691 626.104ZM215.03 626.104L216.03 626.104L216.03 625.104L215.03 625.104L215.03 626.104ZM215.03 630.408L215.03 631.408L216.03 631.408L216.03 630.408L215.03 630.408ZM205.475 627.532L204.517 627.245L204.475 627.385L204.475 627.532L205.475 627.532ZM205.586 627.161L206.544 627.448L206.586 627.308L206.586 627.161L205.586 627.161ZM205.586 620.927L205.586 619.927L204.586 619.927L204.586 620.927L205.586 620.927ZM211.356 620.927L212.356 620.927L212.356 619.927L211.356 619.927L211.356 620.927ZM211.839 639.982L211.106 640.663L211.839 639.982ZM214.177 640.428L214.348 641.413L214.369 641.409L214.389 641.405L214.177 640.428ZM215.012 640.168L216.012 640.168L216.012 638.678L214.633 639.242L215.012 640.168ZM215.012 644.287L215.371 645.22L216.012 644.974L216.012 644.287L215.012 644.287ZM207.015 643.378L206.33 644.107L206.339 644.115L207.015 643.378ZM202.691 630.408L203.691 630.408L203.691 626.104L202.691 626.104L201.691 626.104L201.691 630.408L202.691 630.408ZM202.691 626.104L202.691 627.104L215.03 627.104L215.03 626.104L215.03 625.104L202.691 625.104L202.691 626.104ZM215.03 626.104L214.03 626.104L214.03 630.408L215.03 630.408L216.03 630.408L216.03 626.104L215.03 626.104ZM215.03 630.408L215.03 629.408L202.691 629.408L202.691 630.408L202.691 631.408L215.03 631.408L215.03 630.408ZM205.475 638.758L206.475 638.758L206.475 627.532L205.475 627.532L204.475 627.532L204.475 638.758L205.475 638.758ZM205.475 627.532L206.432 627.82L206.544 627.448L205.586 627.161L204.628 626.874L204.517 627.245L205.475 627.532ZM205.586 627.161L206.586 627.161L206.586 620.927L205.586 620.927L204.586 620.927L204.586 627.161L205.586 627.161ZM205.586 620.927L205.586 621.927L211.356 621.927L211.356 620.927L211.356 619.927L205.586 619.927L205.586 620.927ZM211.356 620.927L210.356 620.927L210.356 637.867L211.356 637.867L212.356 637.867L212.356 620.927L211.356 620.927ZM211.356 637.867L210.356 637.867C210.356 638.442 210.399 638.965 210.502 639.416C210.603 639.857 210.779 640.31 211.106 640.663L211.839 639.982L212.572 639.302C212.578 639.308 212.512 639.236 212.452 638.971C212.394 638.717 212.356 638.356 212.356 637.867L211.356 637.867ZM211.839 639.982L211.106 640.663C211.678 641.278 212.469 641.502 213.286 641.502L213.286 640.502L213.286 639.502C212.817 639.502 212.643 639.379 212.572 639.302L211.839 639.982ZM213.286 640.502L213.286 641.502C213.649 641.502 214.003 641.473 214.348 641.413L214.177 640.428L214.005 639.443C213.781 639.481 213.542 639.502 213.286 639.502L213.286 640.502ZM214.177 640.428L214.389 641.405C214.731 641.331 215.065 641.227 215.39 641.094L215.012 640.168L214.633 639.242C214.414 639.332 214.191 639.401 213.964 639.451L214.177 640.428ZM215.012 640.168L214.012 640.168L214.012 644.287L215.012 644.287L216.012 644.287L216.012 640.168L215.012 640.168ZM215.012 644.287L214.653 643.354C214.422 643.443 214.021 643.547 213.409 643.655L213.583 644.64L213.757 645.624C214.407 645.51 214.958 645.379 215.371 645.22L215.012 644.287ZM213.583 644.64L213.409 643.655C212.852 643.753 212.164 643.807 211.338 643.807L211.338 644.807L211.338 645.807C212.243 645.807 213.053 645.749 213.757 645.624L213.583 644.64ZM211.338 644.807L211.338 643.807C209.666 643.807 208.494 643.377 207.69 642.641L207.015 643.378L206.339 644.115C207.613 645.283 209.324 645.807 211.338 645.807L211.338 644.807ZM207.015 643.378L207.699 642.649C206.956 641.951 206.475 640.735 206.475 638.758L205.475 638.758L204.475 638.758C204.475 641.011 205.02 642.875 206.33 644.107L207.015 643.378ZM226.979 644.343L225.979 644.343L225.979 645.343L226.979 645.343L226.979 644.343ZM226.979 617.327L226.979 616.327L225.979 616.327L225.979 617.327L226.979 617.327ZM244.588 619.758L243.867 620.451L243.87 620.454L244.588 619.758ZM244.606 632.95L243.88 632.263L243.88 632.263L244.606 632.95ZM233.14 635.381L233.14 634.381L232.14 634.381L232.14 635.381L233.14 635.381ZM233.14 644.343L233.14 645.343L234.14 645.343L234.14 644.343L233.14 644.343ZM233.14 631.039L232.14 631.039L232.14 632.039L233.14 632.039L233.14 631.039ZM239.894 629.759L240.714 630.33L240.718 630.324L239.894 629.759ZM239.894 623.135L239.073 623.706L239.077 623.711L239.894 623.135ZM233.14 621.854L233.14 620.854L232.14 620.854L232.14 621.854L233.14 621.854ZM226.979 644.343L227.979 644.343L227.979 617.327L226.979 617.327L225.979 617.327L225.979 644.343L226.979 644.343ZM226.979 617.327L226.979 618.327L237.853 618.327L237.853 617.327L237.853 616.327L226.979 616.327L226.979 617.327ZM237.853 617.327L237.853 618.327C240.599 618.327 242.55 619.081 243.867 620.451L244.588 619.758L245.309 619.065C243.509 617.193 240.97 616.327 237.853 616.327L237.853 617.327ZM244.588 619.758L243.87 620.454C245.206 621.832 245.926 623.755 245.926 626.345L246.926 626.345L247.926 626.345C247.926 623.368 247.087 620.899 245.306 619.062L244.588 619.758ZM246.926 626.345L245.926 626.345C245.926 628.922 245.212 630.856 243.88 632.263L244.606 632.95L245.333 633.638C247.093 631.778 247.926 629.309 247.926 626.345L246.926 626.345ZM244.606 632.95L243.88 632.263C242.595 633.621 240.622 634.381 237.778 634.381L237.778 635.381L237.778 636.381C240.971 636.381 243.551 635.52 245.333 633.638L244.606 632.95ZM237.778 635.381L237.778 634.381L233.14 634.381L233.14 635.381L233.14 636.381L237.778 636.381L237.778 635.381ZM233.14 635.381L232.14 635.381L232.14 644.343L233.14 644.343L234.14 644.343L234.14 635.381L233.14 635.381ZM233.14 644.343L233.14 643.343L226.979 643.343L226.979 644.343L226.979 645.343L233.14 645.343L233.14 644.343ZM233.14 631.039L233.14 632.039L236.721 632.039L236.721 631.039L236.721 630.039L233.14 630.039L233.14 631.039ZM236.721 631.039L236.721 632.039C238.409 632.039 239.858 631.562 240.714 630.33L239.894 629.759L239.073 629.188C238.742 629.663 238.076 630.039 236.721 630.039L236.721 631.039ZM239.894 629.759L240.718 630.324C241.456 629.249 241.784 627.922 241.784 626.419L240.784 626.419L239.784 626.419C239.784 627.637 239.519 628.537 239.069 629.193L239.894 629.759ZM240.784 626.419L241.784 626.419C241.784 624.928 241.455 623.613 240.711 622.558L239.894 623.135L239.077 623.711C239.519 624.339 239.784 625.214 239.784 626.419L240.784 626.419ZM239.894 623.135L240.714 622.564C239.858 621.332 238.409 620.854 236.721 620.854L236.721 621.854L236.721 622.854C238.076 622.854 238.742 623.231 239.073 623.706L239.894 623.135ZM236.721 621.854L236.721 620.854L233.14 620.854L233.14 621.854L233.14 622.854L236.721 622.854L236.721 621.854ZM233.14 621.854L232.14 621.854L232.14 631.039L233.14 631.039L234.14 631.039L234.14 621.854L233.14 621.854ZM249.635 644.343L248.635 644.343L248.635 645.343L249.635 645.343L249.635 644.343ZM249.635 626.104L249.635 625.104L248.635 625.104L248.635 626.104L249.635 626.104ZM255.665 626.104L256.665 626.104L256.665 625.104L255.665 625.104L255.665 626.104ZM255.665 644.343L255.665 645.343L256.665 645.343L256.665 644.343L255.665 644.343ZM250.136 618.181L250.843 618.888L250.85 618.88L250.136 618.181ZM255.183 618.162L255.897 617.462L255.183 618.162ZM249.635 644.343L250.635 644.343L250.635 626.104L249.635 626.104L248.635 626.104L248.635 644.343L249.635 644.343ZM249.635 626.104L249.635 627.104L255.665 627.104L255.665 626.104L255.665 625.104L249.635 625.104L249.635 626.104ZM255.665 626.104L254.665 626.104L254.665 644.343L255.665 644.343L256.665 644.343L256.665 626.104L255.665 626.104ZM255.665 644.343L255.665 643.343L249.635 643.343L249.635 644.343L249.635 645.343L255.665 645.343L255.665 644.343ZM249.245 620.37L250.245 620.37C250.245 619.76 250.443 619.288 250.843 618.888L250.136 618.181L249.429 617.474C248.641 618.261 248.245 619.248 248.245 620.37L249.245 620.37ZM250.136 618.181L250.85 618.88C251.204 618.519 251.762 618.271 252.678 618.271L252.678 617.271L252.678 616.271C251.392 616.271 250.255 616.63 249.421 617.481L250.136 618.181ZM252.678 617.271L252.678 618.271C253.584 618.271 254.128 618.514 254.468 618.862L255.183 618.162L255.897 617.462C255.074 616.622 253.948 616.271 252.678 616.271L252.678 617.271ZM255.183 618.162L254.468 618.862C254.855 619.257 255.055 619.737 255.055 620.37L256.055 620.37L257.055 620.37C257.055 619.247 256.673 618.255 255.897 617.462L255.183 618.162ZM256.055 620.37L255.055 620.37C255.055 620.98 254.856 621.463 254.45 621.878L255.164 622.578L255.878 623.278C256.659 622.481 257.055 621.492 257.055 620.37L256.055 620.37ZM255.164 622.578L254.45 621.878C254.093 622.242 253.54 622.487 252.641 622.487L252.641 623.487L252.641 624.487C253.918 624.487 255.047 624.126 255.878 623.278L255.164 622.578ZM252.641 623.487L252.641 622.487C251.724 622.487 251.178 622.24 250.839 621.886L250.117 622.578L249.396 623.27C250.219 624.129 251.356 624.487 252.641 624.487L252.641 623.487ZM250.117 622.578L250.839 621.886C250.442 621.472 250.245 620.987 250.245 620.37L249.245 620.37L248.245 620.37C248.245 621.485 248.629 622.472 249.396 623.27L250.117 622.578ZM261.436 628.107L262.117 628.839L262.12 628.836L261.436 628.107ZM275.778 628.107L275.091 628.834L275.097 628.839L275.778 628.107ZM275.778 642.302L276.463 643.031L276.463 643.031L275.778 642.302ZM261.417 642.302L260.73 643.029L260.735 643.033L261.417 642.302ZM265.74 639.277L264.947 639.887L264.952 639.893L264.957 639.899L265.74 639.277ZM271.455 639.277L270.668 638.661L270.666 638.663L271.455 639.277ZM271.455 631.15L270.672 631.772L270.676 631.778L271.455 631.15ZM265.759 631.15L266.537 631.778L266.542 631.772L265.759 631.15ZM258.708 635.492L259.708 635.492L259.708 634.898L258.708 634.898L257.708 634.898L257.708 635.492L258.708 635.492ZM258.708 634.898L259.708 634.898C259.708 632.301 260.531 630.317 262.117 628.839L261.436 628.107L260.754 627.376C258.703 629.287 257.708 631.831 257.708 634.898L258.708 634.898ZM261.436 628.107L262.12 628.836C263.719 627.336 265.85 626.547 268.616 626.547L268.616 625.547L268.616 624.547C265.445 624.547 262.789 625.465 260.751 627.378L261.436 628.107ZM268.616 625.547L268.616 626.547C271.382 626.547 273.506 627.336 275.091 628.834L275.778 628.107L276.465 627.381C274.438 625.465 271.788 624.547 268.616 624.547L268.616 625.547ZM275.778 628.107L275.097 628.839C276.683 630.317 277.506 632.301 277.506 634.898L278.506 634.898L279.506 634.898C279.506 631.831 278.511 629.287 276.46 627.376L275.778 628.107ZM278.506 634.898L277.506 634.898L277.506 635.492L278.506 635.492L279.506 635.492L279.506 634.898L278.506 634.898ZM278.506 635.492L277.506 635.492C277.506 638.09 276.683 640.081 275.094 641.573L275.778 642.302L276.463 643.031C278.511 641.108 279.506 638.56 279.506 635.492L278.506 635.492ZM275.778 642.302L275.094 641.573C273.509 643.06 271.384 643.844 268.616 643.844L268.616 644.844L268.616 645.844C271.786 645.844 274.436 644.933 276.463 643.031L275.778 642.302ZM268.616 644.844L268.616 643.844C265.835 643.844 263.696 643.059 262.099 641.57L261.417 642.302L260.735 643.033C262.774 644.934 265.435 645.844 268.616 645.844L268.616 644.844ZM261.417 642.302L262.104 641.575C260.526 640.084 259.708 638.092 259.708 635.492L258.708 635.492L257.708 635.492C257.708 638.558 258.696 641.105 260.73 643.029L261.417 642.302ZM264.757 634.639L263.757 634.639L263.757 635.733L264.757 635.733L265.757 635.733L265.757 634.639L264.757 634.639ZM264.757 635.733L263.757 635.733C263.757 637.376 264.113 638.8 264.947 639.887L265.74 639.277L266.533 638.668C266.057 638.048 265.757 637.109 265.757 635.733L264.757 635.733ZM265.74 639.277L264.957 639.899C265.845 641.017 267.108 641.539 268.598 641.539L268.598 640.539L268.598 639.539C267.614 639.539 266.971 639.22 266.523 638.655L265.74 639.277ZM268.598 640.539L268.598 641.539C270.096 641.539 271.365 641.02 272.244 639.892L271.455 639.277L270.666 638.663C270.234 639.217 269.598 639.539 268.598 639.539L268.598 640.539ZM271.455 639.277L272.243 639.894C273.093 638.807 273.457 637.38 273.457 635.733L272.457 635.733L271.457 635.733C271.457 637.105 271.153 638.041 270.668 638.661L271.455 639.277ZM272.457 635.733L273.457 635.733L273.457 634.639L272.457 634.639L271.457 634.639L271.457 635.733L272.457 635.733ZM272.457 634.639L273.457 634.639C273.457 633.005 273.093 631.589 272.234 630.523L271.455 631.15L270.676 631.778C271.153 632.369 271.457 633.279 271.457 634.639L272.457 634.639ZM271.455 631.15L272.238 630.529C271.35 629.41 270.088 628.889 268.598 628.889L268.598 629.889L268.598 630.889C269.582 630.889 270.224 631.208 270.672 631.772L271.455 631.15ZM268.598 629.889L268.598 628.889C267.116 628.889 265.861 629.413 264.976 630.529L265.759 631.15L266.542 631.772C266.992 631.205 267.63 630.889 268.598 630.889L268.598 629.889ZM265.759 631.15L264.98 630.523C264.121 631.589 263.757 633.005 263.757 634.639L264.757 634.639L265.757 634.639C265.757 633.279 266.061 632.369 266.537 631.778L265.759 631.15ZM281.493 644.343L280.493 644.343L280.493 645.343L281.493 645.343L281.493 644.343ZM281.493 626.104L281.493 625.104L280.493 625.104L280.493 626.104L281.493 626.104ZM287.282 626.104L288.282 626.079L288.258 625.104L287.282 625.104L287.282 626.104ZM287.338 628.386L286.338 628.41L286.362 629.386L287.338 629.386L287.338 628.386ZM287.412 628.386L287.412 629.386L287.986 629.386L288.275 628.89L287.412 628.386ZM289.564 626.438L290.021 627.327L290.025 627.325L289.564 626.438ZM297.58 627.254L298.247 626.509L297.58 627.254ZM299.343 644.343L299.343 645.343L300.343 645.343L300.343 644.343L299.343 644.343ZM293.387 644.343L292.387 644.343L292.387 645.343L293.387 645.343L293.387 644.343ZM292.682 630.835L291.975 631.542L291.984 631.552L291.994 631.561L292.682 630.835ZM288.785 630.779L288.199 629.969L288.785 630.779ZM287.449 632.468L286.533 632.066L286.449 632.258L286.449 632.468L287.449 632.468ZM287.449 644.343L287.449 645.343L288.449 645.343L288.449 644.343L287.449 644.343ZM281.493 644.343L282.493 644.343L282.493 626.104L281.493 626.104L280.493 626.104L280.493 644.343L281.493 644.343ZM281.493 626.104L281.493 627.104L287.282 627.104L287.282 626.104L287.282 625.104L281.493 625.104L281.493 626.104ZM287.282 626.104L286.283 626.128L286.338 628.41L287.338 628.386L288.338 628.361L288.282 626.079L287.282 626.104ZM287.338 628.386L287.338 629.386L287.412 629.386L287.412 628.386L287.412 627.386L287.338 627.386L287.338 628.386ZM287.412 628.386L288.275 628.89C288.634 628.276 289.197 627.75 290.021 627.327L289.564 626.438L289.108 625.548C288.002 626.115 287.13 626.887 286.549 627.881L287.412 628.386ZM289.564 626.438L290.025 627.325C290.835 626.905 291.816 626.677 292.997 626.677L292.997 625.677L292.997 624.677C291.556 624.677 290.248 624.956 289.104 625.55L289.564 626.438ZM292.997 625.677L292.997 626.677C294.681 626.677 295.956 627.142 296.913 627.999L297.58 627.254L298.247 626.509C296.854 625.263 295.073 624.677 292.997 624.677L292.997 625.677ZM297.58 627.254L296.913 627.999C297.777 628.772 298.343 630.21 298.343 632.616L299.343 632.616L300.343 632.616C300.343 629.976 299.733 627.838 298.247 626.509L297.58 627.254ZM299.343 632.616L298.343 632.616L298.343 644.343L299.343 644.343L300.343 644.343L300.343 632.616L299.343 632.616ZM299.343 644.343L299.343 643.343L293.387 643.343L293.387 644.343L293.387 645.343L299.343 645.343L299.343 644.343ZM293.387 644.343L294.387 644.343L294.387 633.136L293.387 633.136L292.387 633.136L292.387 644.343L293.387 644.343ZM293.387 633.136L294.387 633.136C294.387 631.95 294.139 630.838 293.369 630.109L292.682 630.835L291.994 631.561C292.165 631.723 292.387 632.144 292.387 633.136L293.387 633.136ZM292.682 630.835L293.389 630.128C292.692 629.431 291.757 629.148 290.733 629.148L290.733 630.148L290.733 631.148C291.392 631.148 291.756 631.323 291.975 631.542L292.682 630.835ZM290.733 630.148L290.733 629.148C289.805 629.148 288.951 629.425 288.199 629.969L288.785 630.779L289.371 631.59C289.782 631.292 290.226 631.148 290.733 631.148L290.733 630.148ZM288.785 630.779L288.199 629.969C287.463 630.502 286.909 631.21 286.533 632.066L287.449 632.468L288.365 632.869C288.608 632.315 288.945 631.898 289.371 631.59L288.785 630.779ZM287.449 632.468L286.449 632.468L286.449 644.343L287.449 644.343L288.449 644.343L288.449 632.468L287.449 632.468ZM287.449 644.343L287.449 643.343L281.493 643.343L281.493 644.343L281.493 645.343L287.449 645.343L287.449 644.343ZM304.816 628.107L305.508 628.83L304.816 628.107ZM320.792 636.457L320.792 637.457L321.792 637.457L321.792 636.457L320.792 636.457ZM305.707 636.457L304.707 636.457L304.707 637.457L305.707 637.457L305.707 636.457ZM305.707 633.191L305.707 632.191L304.707 632.191L304.707 633.191L305.707 633.191ZM314.984 633.191L314.984 634.191L315.984 634.191L315.984 633.191L314.984 633.191ZM309.01 631.039L308.201 630.45L308.196 630.458L309.01 631.039ZM309.084 639.296L308.288 639.901L308.293 639.908L309.084 639.296ZM315.912 638.442L316.293 637.518L315.516 637.198L315.067 637.908L315.912 638.442ZM320.551 640.354L321.47 640.746L321.868 639.815L320.932 639.429L320.551 640.354ZM317.545 643.619L317.047 642.752L317.044 642.754L317.545 643.619ZM304.779 642.32L304.082 643.038L304.088 643.043L304.779 642.32ZM302.163 635.474L303.163 635.474L303.163 634.88L302.163 634.88L301.163 634.88L301.163 635.474L302.163 635.474ZM302.163 634.88L303.163 634.88C303.163 632.287 303.967 630.307 305.508 628.83L304.816 628.107L304.125 627.385C302.129 629.298 301.163 631.832 301.163 634.88L302.163 634.88ZM304.816 628.107L305.508 628.83C307.059 627.343 309.115 626.565 311.774 626.565L311.774 625.565L311.774 624.565C308.694 624.565 306.111 625.482 304.125 627.385L304.816 628.107ZM311.774 625.565L311.774 626.565C314.425 626.565 316.355 627.309 317.704 628.679L318.417 627.978L319.13 627.276C317.312 625.43 314.814 624.565 311.774 624.565L311.774 625.565ZM318.417 627.978L317.704 628.679C319.059 630.055 319.792 631.998 319.792 634.639L320.792 634.639L321.792 634.639C321.792 631.614 320.941 629.116 319.13 627.276L318.417 627.978ZM320.792 634.639L319.792 634.639L319.792 636.457L320.792 636.457L321.792 636.457L321.792 634.639L320.792 634.639ZM320.792 636.457L320.792 635.457L305.707 635.457L305.707 636.457L305.707 637.457L320.792 637.457L320.792 636.457ZM305.707 636.457L306.707 636.457L306.707 633.191L305.707 633.191L304.707 633.191L304.707 636.457L305.707 636.457ZM305.707 633.191L305.707 634.191L314.984 634.191L314.984 633.191L314.984 632.191L305.707 632.191L305.707 633.191ZM314.984 633.191L315.984 633.191L315.984 632.932L314.984 632.932L313.984 632.932L313.984 633.191L314.984 633.191ZM314.984 632.932L315.984 632.932C315.984 631.802 315.642 630.794 314.912 629.981L314.168 630.649L313.424 631.318C313.783 631.717 313.984 632.23 313.984 632.932L314.984 632.932ZM314.168 630.649L314.912 629.981C314.122 629.102 313.001 628.74 311.737 628.74L311.737 629.74L311.737 630.74C312.626 630.74 313.125 630.985 313.424 631.318L314.168 630.649ZM311.737 629.74L311.737 628.74C310.27 628.74 309.043 629.295 308.202 630.45L309.01 631.039L309.818 631.628C310.238 631.051 310.829 630.74 311.737 630.74L311.737 629.74ZM309.01 631.039L308.196 630.458C307.425 631.537 307.082 632.876 307.082 634.397L308.082 634.397L309.082 634.397C309.082 633.172 309.357 632.273 309.824 631.62L309.01 631.039ZM308.082 634.397L307.082 634.397L307.082 635.641L308.082 635.641L309.082 635.641L309.082 634.397L308.082 634.397ZM308.082 635.641L307.082 635.641C307.082 637.33 307.443 638.79 308.288 639.901L309.084 639.296L309.88 638.691C309.389 638.045 309.082 637.068 309.082 635.641L308.082 635.641ZM309.084 639.296L308.293 639.908C309.195 641.072 310.494 641.613 312.034 641.613L312.034 640.613L312.034 639.613C311.002 639.613 310.334 639.277 309.875 638.684L309.084 639.296ZM312.034 640.613L312.034 641.613C313.106 641.613 314.084 641.365 314.919 640.819L314.372 639.982L313.825 639.145C313.373 639.441 312.793 639.613 312.034 639.613L312.034 640.613ZM314.372 639.982L314.919 640.819C315.674 640.326 316.292 639.713 316.757 638.977L315.912 638.442L315.067 637.908C314.765 638.384 314.357 638.798 313.825 639.145L314.372 639.982ZM315.912 638.442L315.531 639.367L320.17 641.278L320.551 640.354L320.932 639.429L316.293 637.518L315.912 638.442ZM320.551 640.354L319.631 639.961C319.144 641.1 318.303 642.031 317.047 642.752L317.545 643.619L318.043 644.486C319.632 643.574 320.794 642.329 321.47 640.746L320.551 640.354ZM317.545 643.619L317.044 642.754C315.831 643.456 314.207 643.844 312.108 643.844L312.108 644.844L312.108 645.844C314.438 645.844 316.438 645.415 318.046 644.485L317.545 643.619ZM312.108 644.844L312.108 643.844C309.16 643.844 306.992 643.055 305.471 641.598L304.779 642.32L304.088 643.043C306.079 644.95 308.798 645.844 312.108 645.844L312.108 644.844ZM304.779 642.32L305.476 641.603C303.961 640.13 303.163 638.126 303.163 635.474L302.163 635.474L301.163 635.474C301.163 638.561 302.11 641.121 304.082 643.038L304.779 642.32ZM325.338 628.107L326.03 628.83L325.338 628.107ZM341.313 636.457L341.313 637.457L342.313 637.457L342.313 636.457L341.313 636.457ZM326.229 636.457L325.229 636.457L325.229 637.457L326.229 637.457L326.229 636.457ZM326.229 633.191L326.229 632.191L325.229 632.191L325.229 633.191L326.229 633.191ZM335.506 633.191L335.506 634.191L336.506 634.191L336.506 633.191L335.506 633.191ZM329.531 631.039L328.723 630.45L328.718 630.458L329.531 631.039ZM329.605 639.296L328.809 639.901L328.815 639.908L329.605 639.296ZM336.434 638.442L336.815 637.518L336.038 637.198L335.589 637.908L336.434 638.442ZM341.072 640.354L341.992 640.746L342.39 639.815L341.453 639.429L341.072 640.354ZM338.066 643.619L337.569 642.752L337.565 642.754L338.066 643.619ZM325.301 642.32L324.604 643.038L324.609 643.043L325.301 642.32ZM322.685 635.474L323.685 635.474L323.685 634.88L322.685 634.88L321.685 634.88L321.685 635.474L322.685 635.474ZM322.685 634.88L323.685 634.88C323.685 632.287 324.488 630.307 326.03 628.83L325.338 628.107L324.646 627.385C322.65 629.298 321.685 631.832 321.685 634.88L322.685 634.88ZM325.338 628.107L326.03 628.83C327.581 627.343 329.637 626.565 332.296 626.565L332.296 625.565L332.296 624.565C329.216 624.565 326.633 625.482 324.646 627.385L325.338 628.107ZM332.296 625.565L332.296 626.565C334.947 626.565 336.877 627.309 338.226 628.679L338.938 627.978L339.651 627.276C337.834 625.43 335.335 624.565 332.296 624.565L332.296 625.565ZM338.938 627.978L338.226 628.679C339.581 630.055 340.313 631.998 340.313 634.639L341.313 634.639L342.313 634.639C342.313 631.614 341.463 629.116 339.651 627.276L338.938 627.978ZM341.313 634.639L340.313 634.639L340.313 636.457L341.313 636.457L342.313 636.457L342.313 634.639L341.313 634.639ZM341.313 636.457L341.313 635.457L326.229 635.457L326.229 636.457L326.229 637.457L341.313 637.457L341.313 636.457ZM326.229 636.457L327.229 636.457L327.229 633.191L326.229 633.191L325.229 633.191L325.229 636.457L326.229 636.457ZM326.229 633.191L326.229 634.191L335.506 634.191L335.506 633.191L335.506 632.191L326.229 632.191L326.229 633.191ZM335.506 633.191L336.506 633.191L336.506 632.932L335.506 632.932L334.506 632.932L334.506 633.191L335.506 633.191ZM335.506 632.932L336.506 632.932C336.506 631.802 336.163 630.794 335.434 629.981L334.689 630.649L333.945 631.318C334.304 631.717 334.506 632.23 334.506 632.932L335.506 632.932ZM334.689 630.649L335.434 629.981C334.644 629.102 333.523 628.74 332.259 628.74L332.259 629.74L332.259 630.74C333.147 630.74 333.647 630.985 333.945 631.318L334.689 630.649ZM332.259 629.74L332.259 628.74C330.792 628.74 329.565 629.295 328.723 630.45L329.531 631.039L330.339 631.628C330.76 631.051 331.351 630.74 332.259 630.74L332.259 629.74ZM329.531 631.039L328.718 630.458C327.947 631.537 327.604 632.876 327.604 634.397L328.604 634.397L329.604 634.397C329.604 633.172 329.879 632.273 330.345 631.62L329.531 631.039ZM328.604 634.397L327.604 634.397L327.604 635.641L328.604 635.641L329.604 635.641L329.604 634.397L328.604 634.397ZM328.604 635.641L327.604 635.641C327.604 637.33 327.964 638.79 328.81 639.901L329.605 639.296L330.401 638.691C329.911 638.045 329.604 637.068 329.604 635.641L328.604 635.641ZM329.605 639.296L328.815 639.908C329.716 641.072 331.015 641.613 332.556 641.613L332.556 640.613L332.556 639.613C331.523 639.613 330.856 639.277 330.396 638.684L329.605 639.296ZM332.556 640.613L332.556 641.613C333.628 641.613 334.606 641.365 335.441 640.819L334.894 639.982L334.346 639.145C333.895 639.441 333.314 639.613 332.556 639.613L332.556 640.613ZM334.894 639.982L335.441 640.819C336.195 640.326 336.813 639.713 337.279 638.977L336.434 638.442L335.589 637.908C335.287 638.384 334.878 638.798 334.346 639.145L334.894 639.982ZM336.434 638.442L336.053 639.367L340.691 641.278L341.072 640.354L341.453 639.429L336.815 637.518L336.434 638.442ZM341.072 640.354L340.153 639.961C339.666 641.1 338.824 642.031 337.569 642.752L338.066 643.619L338.564 644.486C340.154 643.574 341.316 642.329 341.992 640.746L341.072 640.354ZM338.066 643.619L337.565 642.754C336.353 643.456 334.729 643.844 332.63 643.844L332.63 644.844L332.63 645.844C334.959 645.844 336.96 645.415 338.567 644.485L338.066 643.619ZM332.63 644.844L332.63 643.844C329.681 643.844 327.514 643.055 325.992 641.598L325.301 642.32L324.609 643.043C326.601 644.95 329.319 645.844 332.63 645.844L332.63 644.844ZM325.301 642.32L325.998 641.603C324.482 640.13 323.685 638.126 323.685 635.474L322.685 635.474L321.685 635.474C321.685 638.561 322.631 641.121 324.604 643.038L325.301 642.32ZM344.134 644.343L343.134 644.343L343.134 645.343L344.134 645.343L344.134 644.343ZM344.134 626.104L344.134 625.104L343.134 625.104L343.134 626.104L344.134 626.104ZM349.997 626.104L350.997 626.071L350.965 625.104L349.997 625.104L349.997 626.104ZM350.071 628.367L349.072 628.4L349.104 629.367L350.071 629.367L350.071 628.367ZM350.127 628.367L350.127 629.367L350.711 629.367L350.998 628.859L350.127 628.367ZM355.953 625.918L356.953 625.918L356.953 625.241L356.325 624.99L355.953 625.918ZM355.953 630.612L355.637 631.561L356.953 632L356.953 630.612L355.953 630.612ZM355.174 630.445L355.044 631.437L355.05 631.438L355.174 630.445ZM351.871 631.15L351.3 630.329L351.871 631.15ZM350.183 633.136L349.283 632.699L349.183 632.906L349.183 633.136L350.183 633.136ZM350.183 644.343L350.183 645.343L351.183 645.343L351.183 644.343L350.183 644.343ZM344.134 644.343L345.134 644.343L345.134 626.104L344.134 626.104L343.134 626.104L343.134 644.343L344.134 644.343ZM344.134 626.104L344.134 627.104L349.997 627.104L349.997 626.104L349.997 625.104L344.134 625.104L344.134 626.104ZM349.997 626.104L348.998 626.136L349.072 628.4L350.071 628.367L351.071 628.334L350.997 626.071L349.997 626.104ZM350.071 628.367L350.071 629.367L350.127 629.367L350.127 628.367L350.127 627.367L350.071 627.367L350.071 628.367ZM350.127 628.367L350.998 628.859C351.354 628.228 351.835 627.704 352.454 627.282L351.89 626.456L351.325 625.63C350.46 626.222 349.766 626.972 349.256 627.876L350.127 628.367ZM351.89 626.456L352.454 627.282C353.024 626.892 353.661 626.695 354.395 626.695L354.395 625.695L354.395 624.695C353.272 624.695 352.239 625.006 351.325 625.63L351.89 626.456ZM354.395 625.695L354.395 626.695C354.665 626.695 354.919 626.716 355.158 626.756L355.322 625.77L355.487 624.783C355.132 624.724 354.767 624.695 354.395 624.695L354.395 625.695ZM355.322 625.77L355.158 626.756C355.292 626.778 355.396 626.799 355.474 626.817C355.556 626.837 355.586 626.848 355.582 626.846L355.953 625.918L356.325 624.99C356.092 624.897 355.789 624.833 355.487 624.783L355.322 625.77ZM355.953 625.918L354.953 625.918L354.953 630.612L355.953 630.612L356.953 630.612L356.953 625.918L355.953 625.918ZM355.953 630.612L356.269 629.664C355.97 629.564 355.643 629.496 355.298 629.453L355.174 630.445L355.05 631.438C355.298 631.469 355.491 631.512 355.637 631.561L355.953 630.612ZM355.174 630.445L355.303 629.454C354.967 629.41 354.601 629.39 354.209 629.39L354.209 630.39L354.209 631.39C354.535 631.39 354.812 631.407 355.044 631.437L355.174 630.445ZM354.209 630.39L354.209 629.39C353.161 629.39 352.185 629.715 351.3 630.329L351.871 631.15L352.442 631.972C353.017 631.572 353.599 631.39 354.209 631.39L354.209 630.39ZM351.871 631.15L351.3 630.329C350.427 630.936 349.752 631.732 349.283 632.699L350.183 633.136L351.082 633.572C351.405 632.907 351.856 632.379 352.442 631.972L351.871 631.15ZM350.183 633.136L349.183 633.136L349.183 644.343L350.183 644.343L351.183 644.343L351.183 633.136L350.183 633.136ZM350.183 644.343L350.183 643.343L344.134 643.343L344.134 644.343L344.134 645.343L350.183 645.343L350.183 644.343Z" fill="black" mask="url(#path-7-outside-2_17007_6901)"/> +<mask id="path-9-outside-3_17007_6901" maskUnits="userSpaceOnUse" x="575.669" y="608.883" width="88" height="31" fill="black"> +<rect fill="white" x="575.669" y="608.883" width="88" height="31"/> +<path d="M577.094 610.867L583.532 610.867L589.247 628.624C589.358 628.909 589.445 629.193 589.507 629.478C589.581 629.762 589.655 630.059 589.729 630.368L589.841 630.368C589.915 630.059 589.989 629.756 590.063 629.459C590.15 629.162 590.237 628.884 590.323 628.624L596.094 610.867L602.031 610.867L592.939 637.994L586.186 637.994L577.094 610.867ZM601.753 632.576C601.753 630.647 602.507 629.156 604.017 628.105C605.538 627.053 607.505 626.521 609.917 626.509L613.999 626.509L613.999 625.414C613.999 624.598 613.795 623.955 613.387 623.485C612.979 623.015 612.286 622.78 611.309 622.78C610.331 622.78 609.614 622.977 609.156 623.373C608.699 623.769 608.47 624.295 608.47 624.95L608.47 625.284L602.848 625.266L602.848 624.895C602.848 623.2 603.646 621.821 605.241 620.757C606.849 619.681 608.989 619.143 611.661 619.143C614.358 619.143 616.411 619.656 617.821 620.683C619.244 621.71 619.955 623.342 619.955 625.581L619.955 633.745C619.955 634.488 620.017 635.199 620.141 635.879C620.277 636.547 620.468 637.122 620.716 637.605L620.716 637.883L614.853 637.883C614.692 637.586 614.549 637.221 614.426 636.788C614.314 636.355 614.24 635.916 614.203 635.471C613.795 636.164 613.065 636.788 612.014 637.345C610.975 637.902 609.663 638.18 608.08 638.18C606.2 638.18 604.672 637.71 603.497 636.77C602.334 635.83 601.753 634.432 601.753 632.576ZM607.672 632.113C607.672 632.892 607.895 633.504 608.34 633.949C608.785 634.382 609.465 634.599 610.381 634.599C611.37 634.599 612.218 634.271 612.923 633.615C613.64 632.948 613.999 632.174 613.999 631.296L613.999 629.738L611.364 629.738C610.103 629.738 609.169 629.929 608.562 630.313C607.969 630.696 607.672 631.296 607.672 632.113ZM623.944 637.883L623.944 610.181L629.937 610.181L629.937 637.883L623.944 637.883ZM633.927 637.883L633.927 619.644L639.957 619.644L639.957 637.883L633.927 637.883ZM633.537 613.91C633.537 613.045 633.834 612.315 634.428 611.721C635.021 611.115 635.869 610.812 636.97 610.812C638.058 610.812 638.893 611.109 639.475 611.702C640.056 612.296 640.347 613.032 640.347 613.91C640.347 614.776 640.05 615.512 639.456 616.118C638.862 616.725 638.021 617.028 636.933 617.028C635.832 617.028 634.991 616.725 634.409 616.118C633.828 615.512 633.537 614.776 633.537 613.91ZM643 629.051L643 628.457C643 625.761 643.724 623.559 645.171 621.852C646.618 620.132 648.511 619.273 650.849 619.273C652.123 619.273 653.211 619.489 654.114 619.922C655.017 620.343 655.722 620.906 656.229 621.611L656.229 610.181L662.074 610.181L662.074 637.883L656.396 637.883L656.322 635.527L656.285 635.527C655.815 636.294 655.11 636.943 654.17 637.475C653.23 637.994 652.123 638.254 650.849 638.254C648.424 638.254 646.507 637.394 645.097 635.675C643.699 633.943 643 631.735 643 629.051ZM649.049 629.144C649.049 630.591 649.352 631.766 649.958 632.669C650.564 633.572 651.479 634.024 652.704 634.024C653.545 634.024 654.263 633.789 654.856 633.319C655.45 632.849 655.877 632.292 656.137 631.649L656.137 625.804C655.877 625.161 655.456 624.616 654.875 624.171C654.306 623.726 653.589 623.503 652.723 623.503C651.486 623.503 650.564 623.961 649.958 624.876C649.352 625.779 649.049 626.948 649.049 628.383L649.049 629.144Z"/> +</mask> +<path d="M577.094 610.867L583.532 610.867L589.247 628.624C589.358 628.909 589.445 629.193 589.507 629.478C589.581 629.762 589.655 630.059 589.729 630.368L589.841 630.368C589.915 630.059 589.989 629.756 590.063 629.459C590.15 629.162 590.237 628.884 590.323 628.624L596.094 610.867L602.031 610.867L592.939 637.994L586.186 637.994L577.094 610.867ZM601.753 632.576C601.753 630.647 602.507 629.156 604.017 628.105C605.538 627.053 607.505 626.521 609.917 626.509L613.999 626.509L613.999 625.414C613.999 624.598 613.795 623.955 613.387 623.485C612.979 623.015 612.286 622.78 611.309 622.78C610.331 622.78 609.614 622.977 609.156 623.373C608.699 623.769 608.47 624.295 608.47 624.95L608.47 625.284L602.848 625.266L602.848 624.895C602.848 623.2 603.646 621.821 605.241 620.757C606.849 619.681 608.989 619.143 611.661 619.143C614.358 619.143 616.411 619.656 617.821 620.683C619.244 621.71 619.955 623.342 619.955 625.581L619.955 633.745C619.955 634.488 620.017 635.199 620.141 635.879C620.277 636.547 620.468 637.122 620.716 637.605L620.716 637.883L614.853 637.883C614.692 637.586 614.549 637.221 614.426 636.788C614.314 636.355 614.24 635.916 614.203 635.471C613.795 636.164 613.065 636.788 612.014 637.345C610.975 637.902 609.663 638.18 608.08 638.18C606.2 638.18 604.672 637.71 603.497 636.77C602.334 635.83 601.753 634.432 601.753 632.576ZM607.672 632.113C607.672 632.892 607.895 633.504 608.34 633.949C608.785 634.382 609.465 634.599 610.381 634.599C611.37 634.599 612.218 634.271 612.923 633.615C613.64 632.948 613.999 632.174 613.999 631.296L613.999 629.738L611.364 629.738C610.103 629.738 609.169 629.929 608.562 630.313C607.969 630.696 607.672 631.296 607.672 632.113ZM623.944 637.883L623.944 610.181L629.937 610.181L629.937 637.883L623.944 637.883ZM633.927 637.883L633.927 619.644L639.957 619.644L639.957 637.883L633.927 637.883ZM633.537 613.91C633.537 613.045 633.834 612.315 634.428 611.721C635.021 611.115 635.869 610.812 636.97 610.812C638.058 610.812 638.893 611.109 639.475 611.702C640.056 612.296 640.347 613.032 640.347 613.91C640.347 614.776 640.05 615.512 639.456 616.118C638.862 616.725 638.021 617.028 636.933 617.028C635.832 617.028 634.991 616.725 634.409 616.118C633.828 615.512 633.537 614.776 633.537 613.91ZM643 629.051L643 628.457C643 625.761 643.724 623.559 645.171 621.852C646.618 620.132 648.511 619.273 650.849 619.273C652.123 619.273 653.211 619.489 654.114 619.922C655.017 620.343 655.722 620.906 656.229 621.611L656.229 610.181L662.074 610.181L662.074 637.883L656.396 637.883L656.322 635.527L656.285 635.527C655.815 636.294 655.11 636.943 654.17 637.475C653.23 637.994 652.123 638.254 650.849 638.254C648.424 638.254 646.507 637.394 645.097 635.675C643.699 633.943 643 631.735 643 629.051ZM649.049 629.144C649.049 630.591 649.352 631.766 649.958 632.669C650.564 633.572 651.479 634.024 652.704 634.024C653.545 634.024 654.263 633.789 654.856 633.319C655.45 632.849 655.877 632.292 656.137 631.649L656.137 625.804C655.877 625.161 655.456 624.616 654.875 624.171C654.306 623.726 653.589 623.503 652.723 623.503C651.486 623.503 650.564 623.961 649.958 624.876C649.352 625.779 649.049 626.948 649.049 628.383L649.049 629.144Z" fill="white"/> +<path d="M577.094 610.867L577.094 609.867L575.704 609.867L576.146 611.185L577.094 610.867ZM583.532 610.867L584.484 610.561L584.261 609.867L583.532 609.867L583.532 610.867ZM589.247 628.624L588.295 628.931L588.305 628.96L588.316 628.989L589.247 628.624ZM589.507 629.478L588.53 629.69L588.534 629.71L588.539 629.73L589.507 629.478ZM589.729 630.368L588.757 630.602L588.941 631.368L589.729 631.368L589.729 630.368ZM589.841 630.368L589.841 631.368L590.629 631.368L590.813 630.602L589.841 630.368ZM590.063 629.459L589.103 629.179L589.098 629.198L589.093 629.217L590.063 629.459ZM590.323 628.624L591.272 628.941L591.274 628.933L590.323 628.624ZM596.094 610.867L596.094 609.867L595.367 609.867L595.143 610.558L596.094 610.867ZM602.031 610.867L602.979 611.185L603.421 609.867L602.031 609.867L602.031 610.867ZM592.939 637.994L592.939 638.994L593.659 638.994L593.888 638.312L592.939 637.994ZM586.186 637.994L585.237 638.312L585.466 638.994L586.186 638.994L586.186 637.994ZM577.094 610.867L577.094 611.867L583.532 611.867L583.532 610.867L583.532 609.867L577.094 609.867L577.094 610.867ZM583.532 610.867L582.58 611.174L588.295 628.931L589.247 628.624L590.199 628.318L584.484 610.561L583.532 610.867ZM589.247 628.624L588.316 628.989C588.409 629.226 588.48 629.46 588.53 629.69L589.507 629.478L590.484 629.265C590.41 628.927 590.308 628.591 590.178 628.26L589.247 628.624ZM589.507 629.478L588.539 629.73C588.612 630.008 588.684 630.298 588.757 630.602L589.729 630.368L590.702 630.135C590.626 629.82 590.55 629.517 590.474 629.225L589.507 629.478ZM589.729 630.368L589.729 631.368L589.841 631.368L589.841 630.368L589.841 629.368L589.729 629.368L589.729 630.368ZM589.841 630.368L590.813 630.602C590.887 630.295 590.96 629.995 591.034 629.702L590.063 629.459L589.093 629.217C589.018 629.517 588.943 629.823 588.868 630.135L589.841 630.368ZM590.063 629.459L591.023 629.739C591.107 629.453 591.19 629.187 591.272 628.94L590.323 628.624L589.375 628.308C589.283 628.581 589.193 628.872 589.103 629.179L590.063 629.459ZM590.323 628.624L591.274 628.933L597.045 611.176L596.094 610.867L595.143 610.558L589.372 628.315L590.323 628.624ZM596.094 610.867L596.094 611.867L602.031 611.867L602.031 610.867L602.031 609.867L596.094 609.867L596.094 610.867ZM602.031 610.867L601.083 610.55L591.991 637.677L592.939 637.994L593.888 638.312L602.979 611.185L602.031 610.867ZM592.939 637.994L592.939 636.994L586.186 636.994L586.186 637.994L586.186 638.994L592.939 638.994L592.939 637.994ZM586.186 637.994L587.134 637.677L578.042 610.55L577.094 610.867L576.146 611.185L585.237 638.312L586.186 637.994ZM604.017 628.105L603.448 627.282L603.445 627.284L604.017 628.105ZM609.917 626.509L609.917 625.509L609.912 625.509L609.917 626.509ZM613.999 626.509L613.999 627.509L614.999 627.509L614.999 626.509L613.999 626.509ZM608.47 625.284L608.466 626.284L609.47 626.288L609.47 625.284L608.47 625.284ZM602.848 625.266L601.848 625.266L601.848 626.263L602.844 626.266L602.848 625.266ZM605.241 620.757L605.796 621.589L605.797 621.588L605.241 620.757ZM617.821 620.683L617.233 621.491L617.236 621.494L617.821 620.683ZM620.141 635.879L619.157 636.058L619.159 636.068L619.161 636.079L620.141 635.879ZM620.716 637.605L621.716 637.605L621.716 637.363L621.606 637.148L620.716 637.605ZM620.716 637.883L620.716 638.883L621.716 638.883L621.716 637.883L620.716 637.883ZM614.853 637.883L613.973 638.359L614.257 638.883L614.853 638.883L614.853 637.883ZM614.426 636.788L613.457 637.037L613.461 637.05L613.464 637.063L614.426 636.788ZM614.203 635.471L615.2 635.388L614.938 632.253L613.342 634.963L614.203 635.471ZM612.014 637.345L611.546 636.461L611.541 636.463L612.014 637.345ZM603.497 636.77L602.868 637.547L602.872 637.551L603.497 636.77ZM608.34 633.949L607.633 634.657L607.643 634.666L608.34 633.949ZM612.923 633.615L613.604 634.348L613.604 634.347L612.923 633.615ZM613.999 629.738L614.999 629.738L614.999 628.738L613.999 628.738L613.999 629.738ZM608.562 630.313L608.028 629.468L608.02 629.473L608.562 630.313ZM601.753 632.576L602.753 632.576C602.753 630.955 603.363 629.779 604.588 628.925L604.017 628.105L603.445 627.284C601.652 628.533 600.753 630.339 600.753 632.576L601.753 632.576ZM604.017 628.105L604.585 628.927C605.897 628.021 607.651 627.521 609.922 627.509L609.917 626.509L609.912 625.509C607.359 625.522 605.179 626.086 603.448 627.282L604.017 628.105ZM609.917 626.509L609.917 627.509L613.999 627.509L613.999 626.509L613.999 625.509L609.917 625.509L609.917 626.509ZM613.999 626.509L614.999 626.509L614.999 625.414L613.999 625.414L612.999 625.414L612.999 626.509L613.999 626.509ZM613.999 625.414L614.999 625.414C614.999 624.433 614.752 623.531 614.142 622.829L613.387 623.485L612.632 624.14C612.838 624.378 612.999 624.762 612.999 625.414L613.999 625.414ZM613.387 623.485L614.142 622.829C613.458 622.041 612.412 621.78 611.309 621.78L611.309 622.78L611.309 623.78C612.16 623.78 612.499 623.988 612.632 624.14L613.387 623.485ZM611.309 622.78L611.309 621.78C610.23 621.78 609.224 621.992 608.502 622.617L609.156 623.373L609.81 624.13C610.004 623.963 610.433 623.78 611.309 623.78L611.309 622.78ZM609.156 623.373L608.502 622.617C607.805 623.22 607.47 624.032 607.47 624.95L608.47 624.95L609.47 624.95C609.47 624.558 609.592 624.318 609.81 624.13L609.156 623.373ZM608.47 624.95L607.47 624.95L607.47 625.284L608.47 625.284L609.47 625.284L609.47 624.95L608.47 624.95ZM608.47 625.284L608.473 624.284L602.851 624.266L602.848 625.266L602.844 626.266L608.466 626.284L608.47 625.284ZM602.848 625.266L603.848 625.266L603.848 624.895L602.848 624.895L601.848 624.895L601.848 625.266L602.848 625.266ZM602.848 624.895L603.848 624.895C603.848 623.583 604.436 622.496 605.796 621.589L605.241 620.757L604.687 619.925C602.855 621.146 601.848 622.817 601.848 624.895L602.848 624.895ZM605.241 620.757L605.797 621.588C607.189 620.657 609.114 620.143 611.661 620.143L611.661 619.143L611.661 618.143C608.864 618.143 606.509 618.705 604.685 619.926L605.241 620.757ZM611.661 619.143L611.661 620.143C614.254 620.143 616.064 620.64 617.233 621.491L617.821 620.683L618.41 619.874C616.758 618.672 614.461 618.143 611.661 618.143L611.661 619.143ZM617.821 620.683L617.236 621.494C618.327 622.281 618.955 623.565 618.955 625.581L619.955 625.581L620.955 625.581C620.955 623.12 620.16 621.138 618.407 619.872L617.821 620.683ZM619.955 625.581L618.955 625.581L618.955 633.745L619.955 633.745L620.955 633.745L620.955 625.581L619.955 625.581ZM619.955 633.745L618.955 633.745C618.955 634.543 619.022 635.315 619.157 636.058L620.141 635.879L621.124 635.7C621.012 635.083 620.955 634.432 620.955 633.745L619.955 633.745ZM620.141 635.879L619.161 636.079C619.311 636.814 619.528 637.48 619.826 638.061L620.716 637.605L621.606 637.148C621.409 636.765 621.243 636.28 621.121 635.68L620.141 635.879ZM620.716 637.605L619.716 637.605L619.716 637.883L620.716 637.883L621.716 637.883L621.716 637.605L620.716 637.605ZM620.716 637.883L620.716 636.883L614.853 636.883L614.853 637.883L614.853 638.883L620.716 638.883L620.716 637.883ZM614.853 637.883L615.732 637.407C615.615 637.191 615.497 636.898 615.387 636.514L614.426 636.788L613.464 637.063C613.602 637.544 613.768 637.981 613.973 638.359L614.853 637.883ZM614.426 636.788L615.394 636.539C615.297 636.161 615.232 635.777 615.2 635.388L614.203 635.471L613.207 635.554C613.248 636.055 613.332 636.55 613.457 637.037L614.426 636.788ZM614.203 635.471L613.342 634.963C613.062 635.438 612.507 635.952 611.546 636.461L612.014 637.345L612.482 638.229C613.623 637.624 614.528 636.89 615.065 635.979L614.203 635.471ZM612.014 637.345L611.541 636.463C610.689 636.92 609.553 637.18 608.08 637.18L608.08 638.18L608.08 639.18C609.774 639.18 611.26 638.883 612.486 638.226L612.014 637.345ZM608.08 638.18L608.08 637.18C606.369 637.18 605.079 636.755 604.122 635.989L603.497 636.77L602.872 637.551C604.265 638.665 606.031 639.18 608.08 639.18L608.08 638.18ZM603.497 636.77L604.126 635.992C603.254 635.287 602.753 634.21 602.753 632.576L601.753 632.576L600.753 632.576C600.753 634.654 601.415 636.372 602.868 637.547L603.497 636.77ZM607.672 632.113L606.672 632.113C606.672 633.09 606.957 633.981 607.633 634.657L608.34 633.949L609.047 633.242C608.832 633.027 608.672 632.693 608.672 632.113L607.672 632.113ZM608.34 633.949L607.643 634.666C608.347 635.351 609.327 635.599 610.381 635.599L610.381 634.599L610.381 633.599C609.604 633.599 609.223 633.414 609.037 633.232L608.34 633.949ZM610.381 634.599L610.381 635.599C611.615 635.599 612.708 635.181 613.604 634.348L612.923 633.615L612.242 632.883C611.727 633.361 611.126 633.599 610.381 633.599L610.381 634.599ZM612.923 633.615L613.604 634.347C614.499 633.515 614.999 632.486 614.999 631.296L613.999 631.296L612.999 631.296C612.999 631.863 612.782 632.38 612.241 632.884L612.923 633.615ZM613.999 631.296L614.999 631.296L614.999 629.738L613.999 629.738L612.999 629.738L612.999 631.296L613.999 631.296ZM613.999 629.738L613.999 628.738L611.364 628.738L611.364 629.738L611.364 630.738L613.999 630.738L613.999 629.738ZM611.364 629.738L611.364 628.738C610.039 628.738 608.874 628.932 608.028 629.468L608.562 630.313L609.097 631.158C609.463 630.926 610.166 630.738 611.364 630.738L611.364 629.738ZM608.562 630.313L608.02 629.473C607.093 630.071 606.672 631.018 606.672 632.113L607.672 632.113L608.672 632.113C608.672 631.574 608.845 631.321 609.105 631.153L608.562 630.313ZM623.944 637.883L622.944 637.883L622.944 638.883L623.944 638.883L623.944 637.883ZM623.944 610.181L623.944 609.181L622.944 609.181L622.944 610.181L623.944 610.181ZM629.937 610.181L630.937 610.181L630.937 609.181L629.937 609.181L629.937 610.181ZM629.937 637.883L629.937 638.883L630.937 638.883L630.937 637.883L629.937 637.883ZM623.944 637.883L624.944 637.883L624.944 610.181L623.944 610.181L622.944 610.181L622.944 637.883L623.944 637.883ZM623.944 610.181L623.944 611.181L629.937 611.181L629.937 610.181L629.937 609.181L623.944 609.181L623.944 610.181ZM629.937 610.181L628.937 610.181L628.937 637.883L629.937 637.883L630.937 637.883L630.937 610.181L629.937 610.181ZM629.937 637.883L629.937 636.883L623.944 636.883L623.944 637.883L623.944 638.883L629.937 638.883L629.937 637.883ZM633.927 637.883L632.927 637.883L632.927 638.883L633.927 638.883L633.927 637.883ZM633.927 619.644L633.927 618.644L632.927 618.644L632.927 619.644L633.927 619.644ZM639.957 619.644L640.957 619.644L640.957 618.644L639.957 618.644L639.957 619.644ZM639.957 637.883L639.957 638.883L640.957 638.883L640.957 637.883L639.957 637.883ZM634.428 611.721L635.135 612.428L635.142 612.421L634.428 611.721ZM639.475 611.702L640.189 611.003L639.475 611.702ZM633.927 637.883L634.927 637.883L634.927 619.644L633.927 619.644L632.927 619.644L632.927 637.883L633.927 637.883ZM633.927 619.644L633.927 620.644L639.957 620.644L639.957 619.644L639.957 618.644L633.927 618.644L633.927 619.644ZM639.957 619.644L638.957 619.644L638.957 637.883L639.957 637.883L640.957 637.883L640.957 619.644L639.957 619.644ZM639.957 637.883L639.957 636.883L633.927 636.883L633.927 637.883L633.927 638.883L639.957 638.883L639.957 637.883ZM633.537 613.91L634.537 613.91C634.537 613.3 634.735 612.828 635.135 612.428L634.428 611.721L633.721 611.014C632.933 611.802 632.537 612.789 632.537 613.91L633.537 613.91ZM634.428 611.721L635.142 612.421C635.496 612.059 636.054 611.812 636.97 611.812L636.97 610.812L636.97 609.812C635.684 609.812 634.547 610.171 633.713 611.021L634.428 611.721ZM636.97 610.812L636.97 611.812C637.876 611.812 638.42 612.055 638.76 612.402L639.475 611.702L640.189 611.003C639.366 610.163 638.24 609.812 636.97 609.812L636.97 610.812ZM639.475 611.702L638.76 612.402C639.147 612.797 639.347 613.277 639.347 613.91L640.347 613.91L641.347 613.91C641.347 612.787 640.965 611.795 640.189 611.003L639.475 611.702ZM640.347 613.91L639.347 613.91C639.347 614.521 639.148 615.004 638.742 615.419L639.456 616.118L640.17 616.818C640.951 616.021 641.347 615.032 641.347 613.91L640.347 613.91ZM639.456 616.118L638.742 615.419C638.385 615.782 637.832 616.028 636.933 616.028L636.933 617.028L636.933 618.028C638.21 618.028 639.339 617.667 640.17 616.818L639.456 616.118ZM636.933 617.028L636.933 616.028C636.016 616.028 635.47 615.78 635.131 615.426L634.409 616.118L633.687 616.811C634.511 617.669 635.648 618.028 636.933 618.028L636.933 617.028ZM634.409 616.118L635.131 615.426C634.734 615.013 634.537 614.527 634.537 613.91L633.537 613.91L632.537 613.91C632.537 615.025 632.921 616.012 633.687 616.811L634.409 616.118ZM645.171 621.852L645.934 622.498L645.936 622.496L645.171 621.852ZM654.114 619.922L653.682 620.824L653.692 620.829L654.114 619.922ZM656.229 621.611L655.418 622.195L657.229 624.713L657.229 621.611L656.229 621.611ZM656.229 610.181L656.229 609.181L655.229 609.181L655.229 610.181L656.229 610.181ZM662.074 610.181L663.074 610.181L663.074 609.181L662.074 609.181L662.074 610.181ZM662.074 637.883L662.074 638.883L663.074 638.883L663.074 637.883L662.074 637.883ZM656.396 637.883L655.397 637.915L655.427 638.883L656.396 638.883L656.396 637.883ZM656.322 635.527L657.322 635.495L657.291 634.527L656.322 634.527L656.322 635.527ZM656.285 635.527L656.285 634.527L655.725 634.527L655.433 635.004L656.285 635.527ZM654.17 637.475L654.654 638.35L654.662 638.345L654.17 637.475ZM645.097 635.675L644.319 636.303L644.323 636.309L645.097 635.675ZM649.958 632.669L649.128 633.227L649.958 632.669ZM654.856 633.319L654.236 632.535L654.856 633.319ZM656.137 631.649L657.064 632.023L657.137 631.843L657.137 631.649L656.137 631.649ZM656.137 625.804L657.137 625.804L657.137 625.61L657.064 625.429L656.137 625.804ZM654.875 624.171L654.259 624.959L654.267 624.965L654.875 624.171ZM649.958 624.876L650.788 625.434L650.792 625.428L649.958 624.876ZM643 629.051L644 629.051L644 628.457L643 628.457L642 628.457L642 629.051L643 629.051ZM643 628.457L644 628.457C644 625.947 644.669 623.99 645.934 622.498L645.171 621.852L644.408 621.205C642.778 623.128 642 625.574 642 628.457L643 628.457ZM645.171 621.852L645.936 622.496C647.185 621.012 648.792 620.273 650.849 620.273L650.849 619.273L650.849 618.273C648.229 618.273 646.052 619.252 644.406 621.208L645.171 621.852ZM650.849 619.273L650.849 620.273C652.013 620.273 652.945 620.471 653.682 620.824L654.114 619.922L654.547 619.02C653.477 618.508 652.233 618.273 650.849 618.273L650.849 619.273ZM654.114 619.922L653.692 620.829C654.463 621.188 655.025 621.648 655.418 622.195L656.229 621.611L657.041 621.027C656.42 620.163 655.572 619.498 654.536 619.016L654.114 619.922ZM656.229 621.611L657.229 621.611L657.229 610.181L656.229 610.181L655.229 610.181L655.229 621.611L656.229 621.611ZM656.229 610.181L656.229 611.181L662.074 611.181L662.074 610.181L662.074 609.181L656.229 609.181L656.229 610.181ZM662.074 610.181L661.074 610.181L661.074 637.883L662.074 637.883L663.074 637.883L663.074 610.181L662.074 610.181ZM662.074 637.883L662.074 636.883L656.396 636.883L656.396 637.883L656.396 638.883L662.074 638.883L662.074 637.883ZM656.396 637.883L657.396 637.852L657.322 635.495L656.322 635.527L655.323 635.558L655.397 637.915L656.396 637.883ZM656.322 635.527L656.322 634.527L656.285 634.527L656.285 635.527L656.285 636.527L656.322 636.527L656.322 635.527ZM656.285 635.527L655.433 635.004C655.067 635.6 654.5 636.139 653.677 636.605L654.17 637.475L654.662 638.345C655.721 637.747 656.563 636.987 657.138 636.049L656.285 635.527ZM654.17 637.475L653.686 636.6C652.92 637.023 651.985 637.254 650.849 637.254L650.849 638.254L650.849 639.254C652.26 639.254 653.54 638.965 654.654 638.35L654.17 637.475ZM650.849 638.254L650.849 637.254C648.693 637.254 647.071 636.506 645.87 635.041L645.097 635.675L644.323 636.309C645.942 638.283 648.155 639.254 650.849 639.254L650.849 638.254ZM645.097 635.675L645.875 635.047C644.649 633.528 644 631.556 644 629.051L643 629.051L642 629.051C642 631.915 642.749 634.359 644.319 636.303L645.097 635.675ZM649.049 629.144L648.049 629.144C648.049 630.725 648.38 632.112 649.128 633.227L649.958 632.669L650.788 632.112C650.324 631.42 650.049 630.457 650.049 629.144L649.049 629.144ZM649.958 632.669L649.128 633.227C649.945 634.445 651.195 635.024 652.704 635.024L652.704 634.024L652.704 633.024C651.764 633.024 651.183 632.7 650.788 632.112L649.958 632.669ZM652.704 634.024L652.704 635.024C653.744 635.024 654.687 634.728 655.477 634.103L654.856 633.319L654.236 632.535C653.838 632.849 653.346 633.024 652.704 633.024L652.704 634.024ZM654.856 633.319L655.477 634.103C656.194 633.535 656.733 632.842 657.064 632.023L656.137 631.649L655.209 631.274C655.021 631.742 654.706 632.162 654.236 632.535L654.856 633.319ZM656.137 631.649L657.137 631.649L657.137 625.804L656.137 625.804L655.137 625.804L655.137 631.649L656.137 631.649ZM656.137 625.804L657.064 625.429C656.733 624.611 656.198 623.925 655.483 623.377L654.875 624.171L654.267 624.965C654.715 625.308 655.02 625.71 655.209 626.178L656.137 625.804ZM654.875 624.171L655.491 623.384C654.713 622.775 653.766 622.503 652.723 622.503L652.723 623.503L652.723 624.503C653.411 624.503 653.899 624.677 654.259 624.959L654.875 624.171ZM652.723 623.503L652.723 622.503C651.2 622.503 649.941 623.09 649.124 624.324L649.958 624.876L650.792 625.428C651.187 624.832 651.771 624.503 652.723 624.503L652.723 623.503ZM649.958 624.876L649.128 624.319C648.381 625.432 648.049 626.812 648.049 628.383L649.049 628.383L650.049 628.383C650.049 627.084 650.323 626.127 650.788 625.434L649.958 624.876ZM649.049 628.383L648.049 628.383L648.049 629.144L649.049 629.144L650.049 629.144L650.049 628.383L649.049 628.383Z" fill="black" mask="url(#path-9-outside-3_17007_6901)"/> +<mask id="path-11-outside-4_17007_6901" maskUnits="userSpaceOnUse" x="577.339" y="669.25" width="110" height="37" fill="black"> +<rect fill="white" x="577.339" y="669.25" width="110" height="37"/> +<path d="M578.601 691.651L578.601 682.231C578.601 678.782 579.533 676.07 581.397 674.093C583.262 672.116 585.876 671.128 589.241 671.128C592.605 671.128 595.227 672.109 597.105 674.072C598.984 676.02 599.923 678.74 599.923 682.231L599.923 691.651C599.923 695.184 598.956 697.925 597.021 699.874C595.087 701.808 592.493 702.768 589.241 702.754C585.862 702.754 583.241 701.787 581.376 699.853C579.526 697.904 578.601 695.17 578.601 691.651ZM585.666 692.787C585.666 694.343 585.953 695.57 586.528 696.467C587.117 697.35 588.028 697.792 589.262 697.792C590.496 697.792 591.4 697.35 591.975 696.467C592.563 695.57 592.858 694.343 592.858 692.787L592.858 681.2C592.858 679.616 592.563 678.383 591.975 677.499C591.4 676.602 590.496 676.154 589.262 676.154C588.028 676.154 587.117 676.602 586.528 677.499C585.953 678.383 585.666 679.616 585.666 681.2L585.666 692.787ZM602.194 689.591L602.194 688.35C602.194 683.079 603.694 678.915 606.694 675.859C609.694 672.789 613.998 671.254 619.606 671.254L620.888 671.254L620.888 676.784L619.774 676.784C616.325 676.784 613.655 677.717 611.762 679.581C609.884 681.432 608.944 684.67 608.944 689.296L609.134 689.969C609.134 693.081 609.519 695.177 610.29 696.257C611.075 697.322 612.106 697.855 613.381 697.855C614.629 697.855 615.582 697.427 616.241 696.572C616.914 695.703 617.251 694.189 617.251 692.03C617.251 690.306 616.928 688.988 616.283 688.077C615.638 687.151 614.664 686.689 613.36 686.689C612.169 686.689 611.159 687.144 610.332 688.056C609.519 688.953 609.113 690.144 609.113 691.63L607.536 691.63C607.536 688.827 608.3 686.577 609.828 684.88C611.356 683.17 613.304 682.315 615.673 682.315C618.323 682.315 620.419 683.184 621.961 684.922C623.503 686.647 624.274 689.044 624.274 692.114C624.274 695.366 623.272 697.953 621.267 699.874C619.262 701.794 616.627 702.754 613.36 702.754C610.01 702.754 607.311 701.71 605.264 699.621C603.218 697.532 602.194 694.189 602.194 689.591ZM622.907 704.878L634.767 671.633L640.634 671.633L628.753 704.878L622.907 704.878ZM639.877 689.591L639.877 688.35C639.877 683.079 641.377 678.915 644.377 675.859C647.377 672.789 651.681 671.254 657.288 671.254L658.571 671.254L658.571 676.784L657.457 676.784C654.008 676.784 651.337 677.717 649.445 679.581C647.566 681.432 646.627 684.67 646.627 689.296L646.816 689.969C646.816 693.081 647.202 695.177 647.973 696.257C648.758 697.322 649.788 697.855 651.064 697.855C652.312 697.855 653.265 697.427 653.924 696.572C654.597 695.703 654.933 694.189 654.933 692.03C654.933 690.306 654.611 688.988 653.966 688.077C653.321 687.151 652.347 686.689 651.043 686.689C649.851 686.689 648.842 687.144 648.015 688.056C647.202 688.953 646.795 690.144 646.795 691.63L645.218 691.63C645.218 688.827 645.982 686.577 647.51 684.88C649.038 683.17 650.987 682.315 653.356 682.315C656.006 682.315 658.102 683.184 659.644 684.922C661.186 686.647 661.957 689.044 661.957 692.114C661.957 695.366 660.954 697.953 658.95 699.874C656.945 701.794 654.309 702.754 651.043 702.754C647.693 702.754 644.994 701.71 642.947 699.621C640.9 697.532 639.877 694.189 639.877 689.591ZM663.513 681.726C663.513 678.488 664.515 675.915 666.52 674.009C668.539 672.088 671.181 671.128 674.448 671.128C677.784 671.128 680.476 672.172 682.522 674.261C684.583 676.35 685.614 679.693 685.614 684.292L685.614 685.532C685.614 690.719 684.114 694.834 681.114 697.876C678.113 700.904 673.81 702.439 668.202 702.481L666.898 702.481L666.898 697.035L668.034 697.035C671.469 697.035 674.118 696.109 675.983 694.259C677.861 692.409 678.8 689.212 678.8 684.67L678.674 683.913C678.674 680.927 678.296 678.88 677.539 677.773C676.782 676.665 675.73 676.112 674.384 676.112C673.151 676.112 672.198 676.539 671.525 677.394C670.866 678.235 670.536 679.707 670.536 681.81C670.536 683.605 670.859 684.943 671.504 685.827C672.148 686.71 673.116 687.151 674.405 687.151C675.625 687.151 676.642 686.717 677.455 685.848C678.282 684.964 678.695 683.78 678.695 682.294L680.167 682.294C680.167 685 679.431 687.215 677.959 688.939C676.501 690.663 674.56 691.525 672.134 691.525C669.485 691.525 667.382 690.656 665.826 688.918C664.284 687.179 663.513 684.782 663.513 681.726Z"/> +</mask> +<path d="M578.601 691.651L578.601 682.231C578.601 678.782 579.533 676.07 581.397 674.093C583.262 672.116 585.876 671.128 589.241 671.128C592.605 671.128 595.227 672.109 597.105 674.072C598.984 676.02 599.923 678.74 599.923 682.231L599.923 691.651C599.923 695.184 598.956 697.925 597.021 699.874C595.087 701.808 592.493 702.768 589.241 702.754C585.862 702.754 583.241 701.787 581.376 699.853C579.526 697.904 578.601 695.17 578.601 691.651ZM585.666 692.787C585.666 694.343 585.953 695.57 586.528 696.467C587.117 697.35 588.028 697.792 589.262 697.792C590.496 697.792 591.4 697.35 591.975 696.467C592.563 695.57 592.858 694.343 592.858 692.787L592.858 681.2C592.858 679.616 592.563 678.383 591.975 677.499C591.4 676.602 590.496 676.154 589.262 676.154C588.028 676.154 587.117 676.602 586.528 677.499C585.953 678.383 585.666 679.616 585.666 681.2L585.666 692.787ZM602.194 689.591L602.194 688.35C602.194 683.079 603.694 678.915 606.694 675.859C609.694 672.789 613.998 671.254 619.606 671.254L620.888 671.254L620.888 676.784L619.774 676.784C616.325 676.784 613.655 677.717 611.762 679.581C609.884 681.432 608.944 684.67 608.944 689.296L609.134 689.969C609.134 693.081 609.519 695.177 610.29 696.257C611.075 697.322 612.106 697.855 613.381 697.855C614.629 697.855 615.582 697.427 616.241 696.572C616.914 695.703 617.251 694.189 617.251 692.03C617.251 690.306 616.928 688.988 616.283 688.077C615.638 687.151 614.664 686.689 613.36 686.689C612.169 686.689 611.159 687.144 610.332 688.056C609.519 688.953 609.113 690.144 609.113 691.63L607.536 691.63C607.536 688.827 608.3 686.577 609.828 684.88C611.356 683.17 613.304 682.315 615.673 682.315C618.323 682.315 620.419 683.184 621.961 684.922C623.503 686.647 624.274 689.044 624.274 692.114C624.274 695.366 623.272 697.953 621.267 699.874C619.262 701.794 616.627 702.754 613.36 702.754C610.01 702.754 607.311 701.71 605.264 699.621C603.218 697.532 602.194 694.189 602.194 689.591ZM622.907 704.878L634.767 671.633L640.634 671.633L628.753 704.878L622.907 704.878ZM639.877 689.591L639.877 688.35C639.877 683.079 641.377 678.915 644.377 675.859C647.377 672.789 651.681 671.254 657.288 671.254L658.571 671.254L658.571 676.784L657.457 676.784C654.008 676.784 651.337 677.717 649.445 679.581C647.566 681.432 646.627 684.67 646.627 689.296L646.816 689.969C646.816 693.081 647.202 695.177 647.973 696.257C648.758 697.322 649.788 697.855 651.064 697.855C652.312 697.855 653.265 697.427 653.924 696.572C654.597 695.703 654.933 694.189 654.933 692.03C654.933 690.306 654.611 688.988 653.966 688.077C653.321 687.151 652.347 686.689 651.043 686.689C649.851 686.689 648.842 687.144 648.015 688.056C647.202 688.953 646.795 690.144 646.795 691.63L645.218 691.63C645.218 688.827 645.982 686.577 647.51 684.88C649.038 683.17 650.987 682.315 653.356 682.315C656.006 682.315 658.102 683.184 659.644 684.922C661.186 686.647 661.957 689.044 661.957 692.114C661.957 695.366 660.954 697.953 658.95 699.874C656.945 701.794 654.309 702.754 651.043 702.754C647.693 702.754 644.994 701.71 642.947 699.621C640.9 697.532 639.877 694.189 639.877 689.591ZM663.513 681.726C663.513 678.488 664.515 675.915 666.52 674.009C668.539 672.088 671.181 671.128 674.448 671.128C677.784 671.128 680.476 672.172 682.522 674.261C684.583 676.35 685.614 679.693 685.614 684.292L685.614 685.532C685.614 690.719 684.114 694.834 681.114 697.876C678.113 700.904 673.81 702.439 668.202 702.481L666.898 702.481L666.898 697.035L668.034 697.035C671.469 697.035 674.118 696.109 675.983 694.259C677.861 692.409 678.8 689.212 678.8 684.67L678.674 683.913C678.674 680.927 678.296 678.88 677.539 677.773C676.782 676.665 675.73 676.112 674.384 676.112C673.151 676.112 672.198 676.539 671.525 677.394C670.866 678.235 670.536 679.707 670.536 681.81C670.536 683.605 670.859 684.943 671.504 685.827C672.148 686.71 673.116 687.151 674.405 687.151C675.625 687.151 676.642 686.717 677.455 685.848C678.282 684.964 678.695 683.78 678.695 682.294L680.167 682.294C680.167 685 679.431 687.215 677.959 688.939C676.501 690.663 674.56 691.525 672.134 691.525C669.485 691.525 667.382 690.656 665.826 688.918C664.284 687.179 663.513 684.782 663.513 681.726Z" fill="white"/> +<path d="M597.105 674.072L596.383 674.763L596.386 674.766L597.105 674.072ZM597.021 699.874L597.728 700.581L597.731 700.578L597.021 699.874ZM589.241 702.754L589.245 701.754L589.241 701.754L589.241 702.754ZM581.376 699.853L580.651 700.541L580.656 700.546L581.376 699.853ZM586.528 696.467L585.686 697.006L585.691 697.014L585.696 697.022L586.528 696.467ZM591.975 696.467L591.139 695.918L591.136 695.922L591.975 696.467ZM591.975 677.499L591.133 678.039L591.137 678.047L591.143 678.054L591.975 677.499ZM586.528 677.499L585.692 676.951L585.69 676.954L586.528 677.499ZM578.601 691.651L579.601 691.651L579.601 682.231L578.601 682.231L577.601 682.231L577.601 691.651L578.601 691.651ZM578.601 682.231L579.601 682.231C579.601 678.966 580.479 676.524 582.125 674.779L581.397 674.093L580.67 673.407C578.587 675.615 577.601 678.599 577.601 682.231L578.601 682.231ZM581.397 674.093L582.125 674.779C583.757 673.049 586.082 672.128 589.241 672.128L589.241 671.128L589.241 670.128C585.671 670.128 582.767 671.184 580.67 673.407L581.397 674.093ZM589.241 671.128L589.241 672.128C592.402 672.128 594.736 673.043 596.383 674.763L597.105 674.072L597.828 673.38C595.718 671.176 592.809 670.128 589.241 670.128L589.241 671.128ZM597.105 674.072L596.386 674.766C598.037 676.479 598.923 678.921 598.923 682.231L599.923 682.231L600.923 682.231C600.923 678.559 599.931 675.562 597.825 673.378L597.105 674.072ZM599.923 682.231L598.923 682.231L598.923 691.651L599.923 691.651L600.923 691.651L600.923 682.231L599.923 682.231ZM599.923 691.651L598.923 691.651C598.923 694.999 598.011 697.457 596.312 699.169L597.021 699.874L597.731 700.578C599.901 698.393 600.923 695.369 600.923 691.651L599.923 691.651ZM597.021 699.874L596.314 699.166C594.603 700.877 592.285 701.768 589.245 701.754L589.241 702.754L589.237 703.754C592.702 703.769 595.57 702.739 597.728 700.581L597.021 699.874ZM589.241 702.754L589.241 701.754C586.06 701.754 583.726 700.85 582.096 699.159L581.376 699.853L580.656 700.546C582.755 702.724 585.665 703.754 589.241 703.754L589.241 702.754ZM581.376 699.853L582.101 699.164C580.477 697.453 579.601 694.996 579.601 691.651L578.601 691.651L577.601 691.651C577.601 695.345 578.575 698.355 580.651 700.541L581.376 699.853ZM585.666 692.787L584.666 692.787C584.666 694.451 584.971 695.89 585.686 697.006L586.528 696.467L587.37 695.928C586.936 695.249 586.666 694.235 586.666 692.787L585.666 692.787ZM586.528 696.467L585.696 697.022C586.503 698.232 587.757 698.792 589.262 698.792L589.262 697.792L589.262 696.792C588.3 696.792 587.731 696.469 587.36 695.912L586.528 696.467ZM589.262 697.792L589.262 698.792C590.767 698.792 592.02 698.231 592.813 697.012L591.975 696.467L591.136 695.922C590.78 696.469 590.224 696.792 589.262 696.792L589.262 697.792ZM591.975 696.467L592.811 697.016C593.544 695.898 593.858 694.455 593.858 692.787L592.858 692.787L591.858 692.787C591.858 694.231 591.582 695.242 591.139 695.918L591.975 696.467ZM592.858 692.787L593.858 692.787L593.858 681.2L592.858 681.2L591.858 681.2L591.858 692.787L592.858 692.787ZM592.858 681.2L593.858 681.2C593.858 679.51 593.547 678.055 592.807 676.945L591.975 677.499L591.143 678.054C591.58 678.711 591.858 679.722 591.858 681.2L592.858 681.2ZM591.975 677.499L592.817 676.96C592.026 675.727 590.773 675.154 589.262 675.154L589.262 676.154L589.262 677.154C590.218 677.154 590.773 677.478 591.133 678.039L591.975 677.499ZM589.262 676.154L589.262 675.154C587.75 675.154 586.496 675.726 585.692 676.951L586.528 677.499L587.364 678.048C587.738 677.478 588.306 677.154 589.262 677.154L589.262 676.154ZM586.528 677.499L585.69 676.954C584.969 678.062 584.666 679.514 584.666 681.2L585.666 681.2L586.666 681.2C586.666 679.719 586.938 678.703 587.366 678.045L586.528 677.499ZM585.666 681.2L584.666 681.2L584.666 692.787L585.666 692.787L586.666 692.787L586.666 681.2L585.666 681.2ZM606.694 675.859L607.408 676.56L607.41 676.558L606.694 675.859ZM620.888 671.254L621.888 671.254L621.888 670.254L620.888 670.254L620.888 671.254ZM620.888 676.784L620.888 677.784L621.888 677.784L621.888 676.784L620.888 676.784ZM611.762 679.581L612.464 680.294L612.464 680.294L611.762 679.581ZM608.944 689.296L607.944 689.296L607.944 689.434L607.982 689.567L608.944 689.296ZM609.134 689.969L610.134 689.969L610.134 689.831L610.096 689.698L609.134 689.969ZM610.29 696.257L609.476 696.838L609.481 696.844L609.485 696.85L610.29 696.257ZM616.241 696.572L615.45 695.96L615.449 695.962L616.241 696.572ZM616.283 688.077L615.463 688.648L615.467 688.654L616.283 688.077ZM610.332 688.056L609.592 687.384L609.591 687.384L610.332 688.056ZM609.113 691.63L609.113 692.63L610.113 692.63L610.113 691.63L609.113 691.63ZM607.536 691.63L606.536 691.63L606.536 692.63L607.536 692.63L607.536 691.63ZM609.828 684.88L610.571 685.55L610.573 685.547L609.828 684.88ZM621.961 684.922L621.213 685.586L621.216 685.589L621.961 684.922ZM602.194 689.591L603.194 689.591L603.194 688.35L602.194 688.35L601.194 688.35L601.194 689.591L602.194 689.591ZM602.194 688.35L603.194 688.35C603.194 683.277 604.632 679.388 607.408 676.56L606.694 675.859L605.981 675.159C602.757 678.443 601.194 682.881 601.194 688.35L602.194 688.35ZM606.694 675.859L607.41 676.558C610.169 673.734 614.181 672.254 619.606 672.254L619.606 671.254L619.606 670.254C613.815 670.254 609.22 671.844 605.979 675.16L606.694 675.859ZM619.606 671.254L619.606 672.254L620.888 672.254L620.888 671.254L620.888 670.254L619.606 670.254L619.606 671.254ZM620.888 671.254L619.888 671.254L619.888 676.784L620.888 676.784L621.888 676.784L621.888 671.254L620.888 671.254ZM620.888 676.784L620.888 675.784L619.774 675.784L619.774 676.784L619.774 677.784L620.888 677.784L620.888 676.784ZM619.774 676.784L619.774 675.784C616.144 675.784 613.191 676.77 611.06 678.869L611.762 679.581L612.464 680.294C614.118 678.664 616.507 677.784 619.774 677.784L619.774 676.784ZM611.762 679.581L611.06 678.869C608.89 681.007 607.944 684.589 607.944 689.296L608.944 689.296L609.944 689.296C609.944 684.751 610.878 681.856 612.464 680.294L611.762 679.581ZM608.944 689.296L607.982 689.567L608.171 690.24L609.134 689.969L610.096 689.698L609.907 689.026L608.944 689.296ZM609.134 689.969L608.134 689.969C608.134 691.561 608.232 692.928 608.439 694.056C608.644 695.171 608.969 696.128 609.476 696.838L610.29 696.257L611.104 695.675C610.84 695.306 610.587 694.676 610.406 693.694C610.228 692.726 610.134 691.49 610.134 689.969L609.134 689.969ZM610.29 696.257L609.485 696.85C610.45 698.16 611.774 698.855 613.381 698.855L613.381 697.855L613.381 696.855C612.437 696.855 611.7 696.484 611.095 695.663L610.29 696.257ZM613.381 697.855L613.381 698.855C614.885 698.855 616.154 698.324 617.033 697.182L616.241 696.572L615.449 695.962C615.011 696.531 614.374 696.855 613.381 696.855L613.381 697.855ZM616.241 696.572L617.032 697.184C617.92 696.037 618.251 694.23 618.251 692.03L617.251 692.03L616.251 692.03C616.251 694.148 615.908 695.369 615.45 695.96L616.241 696.572ZM617.251 692.03L618.251 692.03C618.251 690.204 617.913 688.648 617.1 687.499L616.283 688.077L615.467 688.654C615.943 689.327 616.251 690.407 616.251 692.03L617.251 692.03ZM616.283 688.077L617.104 687.505C616.241 686.266 614.932 685.689 613.36 685.689L613.36 686.689L613.36 687.689C614.396 687.689 615.036 688.036 615.463 688.648L616.283 688.077ZM613.36 686.689L613.36 685.689C611.876 685.689 610.601 686.271 609.592 687.384L610.332 688.056L611.073 688.728C611.717 688.018 612.461 687.689 613.36 687.689L613.36 686.689ZM610.332 688.056L609.591 687.384C608.576 688.505 608.113 689.955 608.113 691.63L609.113 691.63L610.113 691.63C610.113 690.334 610.463 689.401 611.073 688.727L610.332 688.056ZM609.113 691.63L609.113 690.63L607.536 690.63L607.536 691.63L607.536 692.63L609.113 692.63L609.113 691.63ZM607.536 691.63L608.536 691.63C608.536 689.015 609.244 687.023 610.571 685.55L609.828 684.88L609.085 684.211C607.355 686.131 606.536 688.638 606.536 691.63L607.536 691.63ZM609.828 684.88L610.573 685.547C611.905 684.057 613.578 683.315 615.673 683.315L615.673 682.315L615.673 681.315C613.03 681.315 610.807 682.284 609.082 684.214L609.828 684.88ZM615.673 682.315L615.673 683.315C618.081 683.315 619.888 684.093 621.213 685.586L621.961 684.922L622.709 684.259C620.95 682.275 618.565 681.315 615.673 681.315L615.673 682.315ZM621.961 684.922L621.216 685.589C622.546 687.077 623.274 689.208 623.274 692.114L624.274 692.114L625.274 692.114C625.274 688.88 624.46 686.217 622.706 684.256L621.961 684.922ZM624.274 692.114L623.274 692.114C623.274 695.145 622.349 697.452 620.575 699.151L621.267 699.874L621.959 700.596C624.194 698.454 625.274 695.588 625.274 692.114L624.274 692.114ZM621.267 699.874L620.575 699.151C618.789 700.863 616.418 701.754 613.36 701.754L613.36 702.754L613.36 703.754C616.836 703.754 619.736 702.726 621.959 700.596L621.267 699.874ZM613.36 702.754L613.36 701.754C610.236 701.754 607.809 700.79 605.979 698.921L605.264 699.621L604.55 700.321C606.813 702.63 609.784 703.754 613.36 703.754L613.36 702.754ZM605.264 699.621L605.979 698.921C604.196 697.102 603.194 694.072 603.194 689.591L602.194 689.591L601.194 689.591C601.194 694.306 602.239 697.963 604.55 700.321L605.264 699.621ZM622.907 704.878L621.965 704.542L621.489 705.878L622.907 705.878L622.907 704.878ZM634.767 671.633L634.767 670.633L634.062 670.633L633.825 671.297L634.767 671.633ZM640.634 671.633L641.576 671.969L642.053 670.633L640.634 670.633L640.634 671.633ZM628.753 704.878L628.753 705.878L629.458 705.878L629.695 705.215L628.753 704.878ZM622.907 704.878L623.849 705.214L635.709 671.969L634.767 671.633L633.825 671.297L621.965 704.542L622.907 704.878ZM634.767 671.633L634.767 672.633L640.634 672.633L640.634 671.633L640.634 670.633L634.767 670.633L634.767 671.633ZM640.634 671.633L639.692 671.296L627.811 704.542L628.753 704.878L629.695 705.215L641.576 671.969L640.634 671.633ZM628.753 704.878L628.753 703.878L622.907 703.878L622.907 704.878L622.907 705.878L628.753 705.878L628.753 704.878ZM644.377 675.859L645.091 676.56L645.092 676.558L644.377 675.859ZM658.571 671.254L659.571 671.254L659.571 670.254L658.571 670.254L658.571 671.254ZM658.571 676.784L658.571 677.784L659.571 677.784L659.571 676.784L658.571 676.784ZM649.445 679.581L650.147 680.294L650.147 680.294L649.445 679.581ZM646.627 689.296L645.627 689.296L645.627 689.434L645.664 689.567L646.627 689.296ZM646.816 689.969L647.816 689.969L647.816 689.831L647.779 689.698L646.816 689.969ZM647.973 696.257L647.159 696.838L647.163 696.844L647.168 696.85L647.973 696.257ZM653.924 696.572L653.133 695.96L653.132 695.962L653.924 696.572ZM653.966 688.077L653.146 688.648L653.15 688.654L653.966 688.077ZM648.015 688.056L647.275 687.384L647.274 687.384L648.015 688.056ZM646.795 691.63L646.795 692.63L647.795 692.63L647.795 691.63L646.795 691.63ZM645.218 691.63L644.218 691.63L644.218 692.63L645.218 692.63L645.218 691.63ZM647.51 684.88L648.253 685.55L648.256 685.547L647.51 684.88ZM659.644 684.922L658.896 685.586L658.898 685.589L659.644 684.922ZM639.877 689.591L640.877 689.591L640.877 688.35L639.877 688.35L638.877 688.35L638.877 689.591L639.877 689.591ZM639.877 688.35L640.877 688.35C640.877 683.277 642.315 679.388 645.091 676.56L644.377 675.859L643.663 675.159C640.439 678.443 638.877 682.881 638.877 688.35L639.877 688.35ZM644.377 675.859L645.092 676.558C647.851 673.734 651.864 672.254 657.288 672.254L657.288 671.254L657.288 670.254C651.498 670.254 646.903 671.844 643.662 675.16L644.377 675.859ZM657.288 671.254L657.288 672.254L658.571 672.254L658.571 671.254L658.571 670.254L657.288 670.254L657.288 671.254ZM658.571 671.254L657.571 671.254L657.571 676.784L658.571 676.784L659.571 676.784L659.571 671.254L658.571 671.254ZM658.571 676.784L658.571 675.784L657.457 675.784L657.457 676.784L657.457 677.784L658.571 677.784L658.571 676.784ZM657.457 676.784L657.457 675.784C653.827 675.784 650.874 676.77 648.743 678.869L649.445 679.581L650.147 680.294C651.801 678.664 654.189 677.784 657.457 677.784L657.457 676.784ZM649.445 679.581L648.743 678.869C646.573 681.007 645.627 684.589 645.627 689.296L646.627 689.296L647.627 689.296C647.627 684.751 648.56 681.856 650.147 680.294L649.445 679.581ZM646.627 689.296L645.664 689.567L645.854 690.24L646.816 689.969L647.779 689.698L647.59 689.026L646.627 689.296ZM646.816 689.969L645.816 689.969C645.816 691.561 645.915 692.928 646.122 694.056C646.327 695.171 646.652 696.128 647.159 696.838L647.973 696.257L648.787 695.675C648.523 695.306 648.269 694.676 648.089 693.694C647.911 692.726 647.816 691.49 647.816 689.969L646.816 689.969ZM647.973 696.257L647.168 696.85C648.133 698.16 649.457 698.855 651.064 698.855L651.064 697.855L651.064 696.855C650.12 696.855 649.383 696.484 648.778 695.663L647.973 696.257ZM651.064 697.855L651.064 698.855C652.567 698.855 653.837 698.324 654.716 697.182L653.924 696.572L653.132 695.962C652.693 696.531 652.056 696.855 651.064 696.855L651.064 697.855ZM653.924 696.572L654.715 697.184C655.603 696.037 655.933 694.23 655.933 692.03L654.933 692.03L653.933 692.03C653.933 694.148 653.591 695.369 653.133 695.96L653.924 696.572ZM654.933 692.03L655.933 692.03C655.933 690.204 655.596 688.648 654.782 687.499L653.966 688.077L653.15 688.654C653.626 689.327 653.933 690.407 653.933 692.03L654.933 692.03ZM653.966 688.077L654.786 687.505C653.923 686.266 652.615 685.689 651.043 685.689L651.043 686.689L651.043 687.689C652.079 687.689 652.719 688.036 653.146 688.648L653.966 688.077ZM651.043 686.689L651.043 685.689C649.559 685.689 648.284 686.271 647.275 687.384L648.015 688.056L648.755 688.728C649.4 688.018 650.144 687.689 651.043 687.689L651.043 686.689ZM648.015 688.056L647.274 687.384C646.258 688.505 645.795 689.955 645.795 691.63L646.795 691.63L647.795 691.63C647.795 690.334 648.145 689.401 648.756 688.727L648.015 688.056ZM646.795 691.63L646.795 690.63L645.218 690.63L645.218 691.63L645.218 692.63L646.795 692.63L646.795 691.63ZM645.218 691.63L646.218 691.63C646.218 689.015 646.926 687.023 648.253 685.55L647.51 684.88L646.767 684.211C645.038 686.131 644.218 688.638 644.218 691.63L645.218 691.63ZM647.51 684.88L648.256 685.547C649.587 684.057 651.261 683.315 653.356 683.315L653.356 682.315L653.356 681.315C650.713 681.315 648.489 682.284 646.765 684.214L647.51 684.88ZM653.356 682.315L653.356 683.315C655.764 683.315 657.571 684.093 658.896 685.586L659.644 684.922L660.392 684.259C658.632 682.275 656.247 681.315 653.356 681.315L653.356 682.315ZM659.644 684.922L658.898 685.589C660.229 687.077 660.957 689.208 660.957 692.114L661.957 692.114L662.957 692.114C662.957 688.88 662.142 686.217 660.389 684.256L659.644 684.922ZM661.957 692.114L660.957 692.114C660.957 695.145 660.032 697.452 658.258 699.151L658.95 699.874L659.641 700.596C661.877 698.454 662.957 695.588 662.957 692.114L661.957 692.114ZM658.95 699.874L658.258 699.151C656.472 700.863 654.1 701.754 651.043 701.754L651.043 702.754L651.043 703.754C654.519 703.754 657.418 702.726 659.641 700.596L658.95 699.874ZM651.043 702.754L651.043 701.754C647.919 701.754 645.492 700.79 643.661 698.921L642.947 699.621L642.233 700.321C644.496 702.63 647.466 703.754 651.043 703.754L651.043 702.754ZM642.947 699.621L643.661 698.921C641.879 697.102 640.877 694.072 640.877 689.591L639.877 689.591L638.877 689.591C638.877 694.306 639.922 697.963 642.233 700.321L642.947 699.621ZM666.52 674.009L667.209 674.733L667.209 674.733L666.52 674.009ZM682.522 674.261L681.808 674.961L681.811 674.963L682.522 674.261ZM681.114 697.876L681.824 698.58L681.826 698.578L681.114 697.876ZM668.202 702.481L668.202 703.481L668.21 703.481L668.202 702.481ZM666.898 702.481L665.898 702.481L665.898 703.481L666.898 703.481L666.898 702.481ZM666.898 697.035L666.898 696.035L665.898 696.035L665.898 697.035L666.898 697.035ZM675.983 694.259L675.281 693.547L675.278 693.549L675.983 694.259ZM678.8 684.67L679.8 684.67L679.8 684.587L679.787 684.506L678.8 684.67ZM678.674 683.913L677.674 683.913L677.674 683.996L677.688 684.077L678.674 683.913ZM671.525 677.394L670.739 676.776L670.737 676.778L671.525 677.394ZM677.455 685.848L676.725 685.164L676.724 685.165L677.455 685.848ZM678.695 682.294L678.695 681.294L677.695 681.294L677.695 682.294L678.695 682.294ZM680.167 682.294L681.167 682.294L681.167 681.294L680.167 681.294L680.167 682.294ZM677.959 688.939L677.199 688.29L677.196 688.293L677.959 688.939ZM665.826 688.918L665.078 689.581L665.081 689.585L665.826 688.918ZM663.513 681.726L664.513 681.726C664.513 678.711 665.437 676.419 667.209 674.733L666.52 674.009L665.831 673.284C663.594 675.412 662.513 678.265 662.513 681.726L663.513 681.726ZM666.52 674.009L667.209 674.733C669.01 673.02 671.39 672.128 674.448 672.128L674.448 671.128L674.448 670.128C670.972 670.128 668.067 671.157 665.831 673.284L666.52 674.009ZM674.448 671.128L674.448 672.128C677.557 672.128 679.977 673.092 681.808 674.961L682.522 674.261L683.237 673.561C680.975 671.253 678.011 670.128 674.448 670.128L674.448 671.128ZM682.522 674.261L681.811 674.963C683.605 676.783 684.614 679.812 684.614 684.292L685.614 684.292L686.614 684.292C686.614 679.575 685.561 675.917 683.234 673.559L682.522 674.261ZM685.614 684.292L684.614 684.292L684.614 685.532L685.614 685.532L686.614 685.532L686.614 684.292L685.614 684.292ZM685.614 685.532L684.614 685.532C684.614 690.516 683.179 694.357 680.402 697.174L681.114 697.876L681.826 698.578C685.048 695.31 686.614 690.922 686.614 685.532L685.614 685.532ZM681.114 697.876L680.403 697.172C677.642 699.959 673.624 701.44 668.195 701.481L668.202 702.481L668.21 703.481C673.995 703.438 678.585 701.849 681.824 698.58L681.114 697.876ZM668.202 702.481L668.202 701.481L666.898 701.481L666.898 702.481L666.898 703.481L668.202 703.481L668.202 702.481ZM666.898 702.481L667.898 702.481L667.898 697.035L666.898 697.035L665.898 697.035L665.898 702.481L666.898 702.481ZM666.898 697.035L666.898 698.035L668.034 698.035L668.034 697.035L668.034 696.035L666.898 696.035L666.898 697.035ZM668.034 697.035L668.034 698.035C671.648 698.035 674.583 697.057 676.687 694.969L675.983 694.259L675.278 693.549C673.653 695.162 671.289 696.035 668.034 696.035L668.034 697.035ZM675.983 694.259L676.684 694.971C678.852 692.836 679.8 689.299 679.8 684.67L678.8 684.67L677.8 684.67C677.8 689.125 676.87 691.981 675.281 693.547L675.983 694.259ZM678.8 684.67L679.787 684.506L679.661 683.749L678.674 683.913L677.688 684.077L677.814 684.835L678.8 684.67ZM678.674 683.913L679.674 683.913C679.674 682.383 679.578 681.06 679.374 679.957C679.172 678.864 678.853 677.923 678.364 677.209L677.539 677.773L676.713 678.337C676.982 678.73 677.231 679.366 677.407 680.32C677.582 681.264 677.674 682.457 677.674 683.913L678.674 683.913ZM677.539 677.773L678.364 677.209C677.42 675.827 676.059 675.112 674.384 675.112L674.384 676.112L674.384 677.112C675.401 677.112 676.143 677.503 676.713 678.337L677.539 677.773ZM674.384 676.112L674.384 675.112C672.891 675.112 671.628 675.645 670.739 676.776L671.525 677.394L672.31 678.013C672.767 677.433 673.411 677.112 674.384 677.112L674.384 676.112ZM671.525 677.394L670.737 676.778C669.859 677.899 669.536 679.667 669.536 681.81L670.536 681.81L671.536 681.81C671.536 679.748 671.872 678.572 672.312 678.011L671.525 677.394ZM670.536 681.81L669.536 681.81C669.536 683.693 669.869 685.283 670.696 686.416L671.504 685.827L672.311 685.237C671.849 684.604 671.536 683.517 671.536 681.81L670.536 681.81ZM671.504 685.827L670.696 686.416C671.564 687.606 672.862 688.151 674.405 688.151L674.405 687.151L674.405 686.151C673.37 686.151 672.732 685.814 672.311 685.237L671.504 685.827ZM674.405 687.151L674.405 688.151C675.894 688.151 677.177 687.608 678.185 686.531L677.455 685.848L676.724 685.165C676.106 685.826 675.356 686.151 674.405 686.151L674.405 687.151ZM677.455 685.848L678.184 686.531C679.223 685.423 679.695 683.973 679.695 682.294L678.695 682.294L677.695 682.294C677.695 683.587 677.341 684.506 676.725 685.164L677.455 685.848ZM678.695 682.294L678.695 683.294L680.167 683.294L680.167 682.294L680.167 681.294L678.695 681.294L678.695 682.294ZM680.167 682.294L679.167 682.294C679.167 684.81 678.487 686.78 677.199 688.29L677.959 688.939L678.72 689.588C680.375 687.649 681.167 685.189 681.167 682.294L680.167 682.294ZM677.959 688.939L677.196 688.293C675.943 689.775 674.29 690.525 672.134 690.525L672.134 691.525L672.134 692.525C674.829 692.525 677.059 691.552 678.723 689.585L677.959 688.939ZM672.134 691.525L672.134 690.525C669.727 690.525 667.911 689.747 666.571 688.251L665.826 688.918L665.081 689.585C666.853 691.565 669.243 692.525 672.134 692.525L672.134 691.525ZM665.826 688.918L666.574 688.254C665.24 686.75 664.513 684.616 664.513 681.726L663.513 681.726L662.513 681.726C662.513 684.948 663.328 687.609 665.078 689.581L665.826 688.918Z" fill="black" mask="url(#path-11-outside-4_17007_6901)"/> +<mask id="path-13-outside-5_17007_6901" maskUnits="userSpaceOnUse" x="93" y="497" width="836" height="67" fill="black"> +<rect fill="white" x="93" y="497" width="836" height="67"/> +<path d="M96.6781 536.108L96.6781 533.111C96.6781 523.149 99.4881 515.318 105.108 509.618C110.728 503.892 118.599 501.028 128.721 501.028L132.077 501.028L132.077 512.175L129.2 512.175C123.154 512.175 118.519 513.933 115.297 517.449C112.074 520.939 110.462 527.198 110.462 536.228L110.502 537.106C110.502 542.807 111.168 546.602 112.5 548.493C113.858 550.384 115.616 551.33 117.774 551.33C119.798 551.33 121.423 550.598 122.648 549.133C123.873 547.641 124.486 544.671 124.486 540.223C124.486 537 123.913 534.603 122.768 533.031C121.649 531.433 119.998 530.634 117.814 530.634C115.789 530.634 114.071 531.406 112.66 532.951C111.248 534.47 110.542 536.547 110.542 539.184L108.145 539.184C108.145 533.99 109.623 529.955 112.58 527.078C115.536 524.175 119.052 522.723 123.127 522.723C127.789 522.723 131.504 524.268 134.275 527.358C137.045 530.421 138.43 534.842 138.43 540.622C138.43 546.935 136.459 551.889 132.517 555.485C128.574 559.054 123.62 560.839 117.654 560.839C111.155 560.839 106.027 558.855 102.272 554.886C98.5426 550.891 96.6781 544.631 96.6781 536.108ZM144.5 521.205C144.5 514.919 146.471 509.991 150.413 506.422C154.355 502.826 159.322 501.028 165.315 501.028C171.788 501.028 176.889 503.013 180.618 506.981C184.373 510.95 186.251 517.21 186.251 525.76L186.251 528.716C186.251 538.651 183.441 546.469 177.821 552.169C172.227 557.869 164.357 560.732 154.208 560.759L150.852 560.759L150.852 549.812L153.729 549.812C159.775 549.838 164.41 548.107 167.633 544.618C170.856 541.129 172.467 534.882 172.467 525.879L172.427 524.761C172.427 519.194 171.761 515.465 170.43 513.574C169.098 511.656 167.34 510.697 165.156 510.697C163.131 510.697 161.507 511.443 160.281 512.934C159.056 514.399 158.443 517.289 158.443 521.604C158.443 524.987 159.003 527.464 160.121 529.036C161.267 530.581 162.932 531.353 165.116 531.353C167.14 531.353 168.858 530.607 170.27 529.116C171.708 527.597 172.427 525.52 172.427 522.883L174.745 522.883C174.745 528.05 173.28 532.072 170.35 534.949C167.42 537.799 163.904 539.224 159.802 539.224C155.141 539.224 151.425 537.666 148.655 534.549C145.885 531.433 144.5 526.985 144.5 521.205ZM192.721 536.108L192.721 533.111C192.721 523.149 195.531 515.318 201.151 509.618C206.771 503.892 214.642 501.028 224.763 501.028L228.12 501.028L228.12 512.175L225.243 512.175C219.197 512.175 214.562 513.933 211.339 517.449C208.116 520.939 206.505 527.198 206.505 536.228L206.545 537.106C206.545 542.807 207.21 546.602 208.542 548.493C209.901 550.384 211.659 551.33 213.816 551.33C215.84 551.33 217.465 550.598 218.69 549.133C219.916 547.641 220.528 544.671 220.528 540.223C220.528 537 219.956 534.603 218.81 533.031C217.692 531.433 216.04 530.634 213.856 530.634C211.832 530.634 210.114 531.406 208.702 532.951C207.29 534.47 206.584 536.547 206.584 539.184L204.187 539.184C204.187 533.99 205.666 529.955 208.622 527.078C211.579 524.175 215.095 522.723 219.17 522.723C223.831 522.723 227.547 524.268 230.317 527.358C233.087 530.421 234.472 534.842 234.472 540.622C234.472 546.935 232.501 551.889 228.559 555.485C224.617 559.054 219.663 560.839 213.696 560.839C207.197 560.839 202.07 558.855 198.314 554.886C194.585 550.891 192.721 544.631 192.721 536.108ZM240.542 521.205C240.542 514.919 242.513 509.991 246.455 506.422C250.397 502.826 255.365 501.028 261.358 501.028C267.83 501.028 272.931 503.013 276.66 506.981C280.416 510.95 282.294 517.21 282.294 525.76L282.294 528.716C282.294 538.651 279.484 546.469 273.863 552.169C268.27 557.869 260.399 560.732 250.251 560.759L246.895 560.759L246.895 549.812L249.771 549.812C255.818 549.838 260.452 548.107 263.675 544.618C266.898 541.129 268.51 534.882 268.51 525.879L268.47 524.761C268.47 519.194 267.804 515.465 266.472 513.574C265.14 511.656 263.382 510.697 261.198 510.697C259.174 510.697 257.549 511.443 256.324 512.934C255.099 514.399 254.486 517.289 254.486 521.604C254.486 524.987 255.045 527.464 256.164 529.036C257.309 530.581 258.974 531.353 261.158 531.353C263.182 531.353 264.9 530.607 266.312 529.116C267.751 527.597 268.47 525.52 268.47 522.883L270.787 522.883C270.787 528.05 269.322 532.072 266.392 534.949C263.462 537.799 259.946 539.224 255.844 539.224C251.183 539.224 247.467 537.666 244.697 534.549C241.927 531.433 240.542 526.985 240.542 521.205ZM311.733 539.863L311.733 521.964C311.733 515.278 313.531 510.111 317.127 506.462C320.723 502.813 325.664 500.988 331.95 500.988C338.236 500.988 343.177 502.786 346.773 506.382C350.395 509.951 352.206 515.145 352.206 521.964L352.206 539.863C352.206 546.789 350.315 552.023 346.533 555.565C342.777 559.108 337.916 560.866 331.95 560.839C325.611 560.812 320.656 559.041 317.087 555.525C313.518 551.983 311.733 546.762 311.733 539.863ZM325.637 542.7C325.637 545.47 326.157 547.601 327.195 549.093C328.261 550.584 329.846 551.33 331.95 551.33C334.054 551.33 335.639 550.584 336.704 549.093C337.77 547.601 338.302 545.47 338.302 542.7L338.302 519.407C338.302 516.584 337.77 514.426 336.704 512.934C335.639 511.443 334.054 510.697 331.95 510.697C329.846 510.697 328.261 511.443 327.195 512.934C326.157 514.426 325.637 516.584 325.637 519.407L325.637 542.7ZM381.969 560L381.969 545.297L382.408 544.618L382.408 519.487L382.089 519.487L371.021 538.105L387.402 538.105L388.601 537.746L401.426 537.746L401.426 548.533L358.156 548.533L358.156 538.625L383.487 501.827L394.754 501.827L394.754 560L381.969 560ZM407.136 560L407.136 551.33L428.152 529.515C429.75 527.651 431.122 525.746 432.267 523.802C433.413 521.857 433.985 519.846 433.985 517.769C433.985 515.238 433.413 513.427 432.267 512.335C431.122 511.243 429.617 510.697 427.753 510.697C425.808 510.697 424.237 511.336 423.038 512.615C421.839 513.867 421.24 516.331 421.24 520.006L421.24 521.644L407.136 521.644L407.136 518.208C407.136 513.227 409.054 509.112 412.89 505.863C416.725 502.613 421.76 500.988 427.992 500.988C434.518 500.988 439.472 502.44 442.855 505.343C446.238 508.22 447.943 512.135 447.969 517.09C447.969 520.765 447.183 524.055 445.612 526.958C444.067 529.862 441.856 532.818 438.98 535.828L427.952 548.853L449.328 548.853L449.328 560L407.136 560ZM455.797 539.863L455.797 521.964C455.797 515.278 457.595 510.111 461.191 506.462C464.787 502.813 469.728 500.988 476.014 500.988C482.3 500.988 487.241 502.786 490.836 506.382C494.459 509.951 496.27 515.145 496.27 521.964L496.27 539.863C496.27 546.789 494.379 552.023 490.597 555.565C486.841 559.108 481.98 560.866 476.014 560.839C469.674 560.812 464.72 559.041 461.151 555.525C457.582 551.983 455.797 546.762 455.797 539.863ZM469.701 542.7C469.701 545.47 470.22 547.601 471.259 549.093C472.325 550.584 473.909 551.33 476.014 551.33C478.118 551.33 479.703 550.584 480.768 549.093C481.834 547.601 482.366 545.47 482.366 542.7L482.366 519.407C482.366 516.584 481.834 514.426 480.768 512.934C479.703 511.443 478.118 510.697 476.014 510.697C473.909 510.697 472.325 511.443 471.259 512.934C470.22 514.426 469.701 516.584 469.701 519.407L469.701 542.7ZM525.39 544.178C525.39 540.369 526.402 537.2 528.427 534.669C530.477 532.139 532.675 530.527 535.019 529.835L535.019 529.675C532.648 528.61 530.717 526.998 529.226 524.841C527.761 522.657 527.028 519.913 527.028 516.61C527.028 511.842 528.733 508.047 532.142 505.223C535.578 502.4 540.359 500.988 546.486 500.988C552.612 500.988 557.366 502.44 560.749 505.343C564.159 508.22 565.863 511.976 565.863 516.61C565.863 520.02 565.091 522.83 563.546 525.04C562.028 527.225 560.097 528.756 557.753 529.635L557.753 529.795C560.176 530.461 562.401 532.072 564.425 534.629C566.476 537.16 567.501 540.343 567.501 544.178C567.501 549.319 565.557 553.381 561.668 556.364C557.806 559.347 552.745 560.839 546.486 560.839C540.2 560.839 535.112 559.347 531.223 556.364C527.334 553.381 525.39 549.319 525.39 544.178ZM539.414 542.66C539.414 545.776 540.026 548.041 541.252 549.452C542.504 550.837 544.235 551.53 546.446 551.53C548.63 551.53 550.335 550.824 551.56 549.412C552.785 548.001 553.398 545.75 553.398 542.66C553.398 539.437 552.745 537.173 551.44 535.868C550.161 534.536 548.497 533.87 546.446 533.87C544.395 533.87 542.703 534.536 541.372 535.868C540.066 537.173 539.414 539.437 539.414 542.66ZM540.333 518.448C540.333 521.138 540.905 523.189 542.051 524.601C543.196 525.986 544.661 526.679 546.446 526.679C548.204 526.679 549.655 525.986 550.801 524.601C551.973 523.189 552.559 521.138 552.559 518.448C552.559 515.731 552.039 513.734 551 512.455C549.988 511.15 548.47 510.497 546.446 510.497C544.421 510.497 542.89 511.123 541.851 512.375C540.839 513.627 540.333 515.651 540.333 518.448ZM573.411 544.178C573.411 540.369 574.423 537.2 576.448 534.669C578.499 532.139 580.696 530.527 583.04 529.835L583.04 529.675C580.67 528.61 578.738 526.998 577.247 524.841C575.782 522.657 575.049 519.913 575.049 516.61C575.049 511.842 576.754 508.047 580.163 505.223C583.599 502.4 588.381 500.988 594.507 500.988C600.633 500.988 605.388 502.44 608.77 505.343C612.18 508.22 613.884 511.976 613.884 516.61C613.884 520.02 613.112 522.83 611.567 525.04C610.049 527.225 608.118 528.756 605.774 529.635L605.774 529.795C608.198 530.461 610.422 532.072 612.446 534.629C614.497 537.16 615.523 540.343 615.523 544.178C615.523 549.319 613.578 553.381 609.689 556.364C605.827 559.347 600.766 560.839 594.507 560.839C588.221 560.839 583.133 559.347 579.245 556.364C575.356 553.381 573.411 549.319 573.411 544.178ZM587.435 542.66C587.435 545.776 588.048 548.041 589.273 549.452C590.525 550.837 592.256 551.53 594.467 551.53C596.651 551.53 598.356 550.824 599.581 549.412C600.806 548.001 601.419 545.75 601.419 542.66C601.419 539.437 600.766 537.173 599.461 535.868C598.183 534.536 596.518 533.87 594.467 533.87C592.416 533.87 590.725 534.536 589.393 535.868C588.088 537.173 587.435 539.437 587.435 542.66ZM588.354 518.448C588.354 521.138 588.927 523.189 590.072 524.601C591.217 525.986 592.682 526.679 594.467 526.679C596.225 526.679 597.677 525.986 598.822 524.601C599.994 523.189 600.58 521.138 600.58 518.448C600.58 515.731 600.06 513.734 599.022 512.455C598.009 511.15 596.491 510.497 594.467 510.497C592.443 510.497 590.911 511.123 589.872 512.375C588.86 513.627 588.354 515.651 588.354 518.448ZM621.433 544.178C621.433 540.369 622.445 537.2 624.469 534.669C626.52 532.139 628.717 530.527 631.061 529.835L631.061 529.675C628.691 528.61 626.76 526.998 625.268 524.841C623.803 522.657 623.071 519.913 623.071 516.61C623.071 511.842 624.775 508.047 628.185 505.223C631.621 502.4 636.402 500.988 642.528 500.988C648.654 500.988 653.409 502.44 656.792 505.343C660.201 508.22 661.906 511.976 661.906 516.61C661.906 520.02 661.133 522.83 659.588 525.04C658.07 527.225 656.139 528.756 653.795 529.635L653.795 529.795C656.219 530.461 658.443 532.072 660.467 534.629C662.518 537.16 663.544 540.343 663.544 544.178C663.544 549.319 661.599 553.381 657.711 556.364C653.848 559.347 648.788 560.839 642.528 560.839C636.242 560.839 631.155 559.347 627.266 556.364C623.377 553.381 621.433 549.319 621.433 544.178ZM635.456 542.66C635.456 545.776 636.069 548.041 637.294 549.452C638.546 550.837 640.277 551.53 642.488 551.53C644.672 551.53 646.377 550.824 647.602 549.412C648.827 548.001 649.44 545.75 649.44 542.66C649.44 539.437 648.788 537.173 647.482 535.868C646.204 534.536 644.539 533.87 642.488 533.87C640.437 533.87 638.746 534.536 637.414 535.868C636.109 537.173 635.456 539.437 635.456 542.66ZM636.375 518.448C636.375 521.138 636.948 523.189 638.093 524.601C639.239 525.986 640.704 526.679 642.488 526.679C644.246 526.679 645.698 525.986 646.843 524.601C648.015 523.189 648.601 521.138 648.601 518.448C648.601 515.731 648.082 513.734 647.043 512.455C646.031 511.15 644.512 510.497 642.488 510.497C640.464 510.497 638.932 511.123 637.893 512.375C636.881 513.627 636.375 515.651 636.375 518.448ZM670.413 539.863L670.413 521.964C670.413 515.278 672.211 510.111 675.806 506.462C679.402 502.813 684.343 500.988 690.629 500.988C696.915 500.988 701.856 502.786 705.452 506.382C709.075 509.951 710.886 515.145 710.886 521.964L710.886 539.863C710.886 546.789 708.995 552.023 705.212 555.565C701.457 559.108 696.596 560.866 690.629 560.839C684.29 560.812 679.336 559.041 675.766 555.525C672.197 551.983 670.413 546.762 670.413 539.863ZM684.317 542.7C684.317 545.47 684.836 547.601 685.875 549.093C686.94 550.584 688.525 551.33 690.629 551.33C692.733 551.33 694.318 550.584 695.384 549.093C696.449 547.601 696.982 545.47 696.982 542.7L696.982 519.407C696.982 516.584 696.449 514.426 695.384 512.934C694.318 511.443 692.733 510.697 690.629 510.697C688.525 510.697 686.94 511.443 685.875 512.934C684.836 514.426 684.317 516.584 684.317 519.407L684.317 542.7ZM740.965 539.863L740.965 521.964C740.965 515.278 742.763 510.111 746.358 506.462C749.954 502.813 754.895 500.988 761.181 500.988C767.467 500.988 772.408 502.786 776.004 506.382C779.627 509.951 781.438 515.145 781.438 521.964L781.438 539.863C781.438 546.789 779.547 552.023 775.764 555.565C772.009 559.108 767.148 560.866 761.181 560.839C754.842 560.812 749.888 559.041 746.318 555.525C742.749 551.983 740.965 546.762 740.965 539.863ZM754.869 542.7C754.869 545.47 755.388 547.601 756.427 549.093C757.492 550.584 759.077 551.33 761.181 551.33C763.285 551.33 764.87 550.584 765.936 549.093C767.001 547.601 767.534 545.47 767.534 542.7L767.534 519.407C767.534 516.584 767.001 514.426 765.936 512.934C764.87 511.443 763.285 510.697 761.181 510.697C759.077 510.697 757.492 511.443 756.427 512.934C755.388 514.426 754.869 516.584 754.869 519.407L754.869 542.7ZM811.2 560L811.2 545.297L811.64 544.618L811.64 519.487L811.32 519.487L800.253 538.105L816.634 538.105L817.832 537.746L830.658 537.746L830.658 548.533L787.388 548.533L787.388 538.625L812.718 501.827L823.985 501.827L823.985 560L811.2 560ZM836.368 560L836.368 551.33L857.383 529.515C858.982 527.651 860.353 525.746 861.499 523.802C862.644 521.857 863.217 519.846 863.217 517.769C863.217 515.238 862.644 513.427 861.499 512.335C860.353 511.243 858.848 510.697 856.984 510.697C855.04 510.697 853.468 511.336 852.269 512.615C851.071 513.867 850.471 516.331 850.471 520.006L850.471 521.644L836.368 521.644L836.368 518.208C836.368 513.227 838.286 509.112 842.121 505.863C845.957 502.613 850.991 500.988 857.224 500.988C863.749 500.988 868.704 502.44 872.086 505.343C875.469 508.22 877.174 512.135 877.201 517.09C877.201 520.765 876.415 524.055 874.843 526.958C873.298 529.862 871.088 532.818 868.211 535.828L857.184 548.853L878.559 548.853L878.559 560L836.368 560ZM885.028 539.863L885.028 521.964C885.028 515.278 886.826 510.111 890.422 506.462C894.018 502.813 898.959 500.988 905.245 500.988C911.531 500.988 916.472 502.786 920.068 506.382C923.69 509.951 925.501 515.145 925.501 521.964L925.501 539.863C925.501 546.789 923.61 552.023 919.828 555.565C916.072 559.108 911.211 560.866 905.245 560.839C898.906 560.812 893.951 559.041 890.382 555.525C886.813 551.983 885.028 546.762 885.028 539.863ZM898.932 542.7C898.932 545.47 899.452 547.601 900.49 549.093C901.556 550.584 903.141 551.33 905.245 551.33C907.349 551.33 908.934 550.584 909.999 549.093C911.065 547.601 911.598 545.47 911.598 542.7L911.598 519.407C911.598 516.584 911.065 514.426 909.999 512.934C908.934 511.443 907.349 510.697 905.245 510.697C903.141 510.697 901.556 511.443 900.49 512.934C899.452 514.426 898.932 516.584 898.932 519.407L898.932 542.7Z"/> +</mask> +<path d="M96.6781 536.108L96.6781 533.111C96.6781 523.149 99.4881 515.318 105.108 509.618C110.728 503.892 118.599 501.028 128.721 501.028L132.077 501.028L132.077 512.175L129.2 512.175C123.154 512.175 118.519 513.933 115.297 517.449C112.074 520.939 110.462 527.198 110.462 536.228L110.502 537.106C110.502 542.807 111.168 546.602 112.5 548.493C113.858 550.384 115.616 551.33 117.774 551.33C119.798 551.33 121.423 550.598 122.648 549.133C123.873 547.641 124.486 544.671 124.486 540.223C124.486 537 123.913 534.603 122.768 533.031C121.649 531.433 119.998 530.634 117.814 530.634C115.789 530.634 114.071 531.406 112.66 532.951C111.248 534.47 110.542 536.547 110.542 539.184L108.145 539.184C108.145 533.99 109.623 529.955 112.58 527.078C115.536 524.175 119.052 522.723 123.127 522.723C127.789 522.723 131.504 524.268 134.275 527.358C137.045 530.421 138.43 534.842 138.43 540.622C138.43 546.935 136.459 551.889 132.517 555.485C128.574 559.054 123.62 560.839 117.654 560.839C111.155 560.839 106.027 558.855 102.272 554.886C98.5426 550.891 96.6781 544.631 96.6781 536.108ZM144.5 521.205C144.5 514.919 146.471 509.991 150.413 506.422C154.355 502.826 159.322 501.028 165.315 501.028C171.788 501.028 176.889 503.013 180.618 506.981C184.373 510.95 186.251 517.21 186.251 525.76L186.251 528.716C186.251 538.651 183.441 546.469 177.821 552.169C172.227 557.869 164.357 560.732 154.208 560.759L150.852 560.759L150.852 549.812L153.729 549.812C159.775 549.838 164.41 548.107 167.633 544.618C170.856 541.129 172.467 534.882 172.467 525.879L172.427 524.761C172.427 519.194 171.761 515.465 170.43 513.574C169.098 511.656 167.34 510.697 165.156 510.697C163.131 510.697 161.507 511.443 160.281 512.934C159.056 514.399 158.443 517.289 158.443 521.604C158.443 524.987 159.003 527.464 160.121 529.036C161.267 530.581 162.932 531.353 165.116 531.353C167.14 531.353 168.858 530.607 170.27 529.116C171.708 527.597 172.427 525.52 172.427 522.883L174.745 522.883C174.745 528.05 173.28 532.072 170.35 534.949C167.42 537.799 163.904 539.224 159.802 539.224C155.141 539.224 151.425 537.666 148.655 534.549C145.885 531.433 144.5 526.985 144.5 521.205ZM192.721 536.108L192.721 533.111C192.721 523.149 195.531 515.318 201.151 509.618C206.771 503.892 214.642 501.028 224.763 501.028L228.12 501.028L228.12 512.175L225.243 512.175C219.197 512.175 214.562 513.933 211.339 517.449C208.116 520.939 206.505 527.198 206.505 536.228L206.545 537.106C206.545 542.807 207.21 546.602 208.542 548.493C209.901 550.384 211.659 551.33 213.816 551.33C215.84 551.33 217.465 550.598 218.69 549.133C219.916 547.641 220.528 544.671 220.528 540.223C220.528 537 219.956 534.603 218.81 533.031C217.692 531.433 216.04 530.634 213.856 530.634C211.832 530.634 210.114 531.406 208.702 532.951C207.29 534.47 206.584 536.547 206.584 539.184L204.187 539.184C204.187 533.99 205.666 529.955 208.622 527.078C211.579 524.175 215.095 522.723 219.17 522.723C223.831 522.723 227.547 524.268 230.317 527.358C233.087 530.421 234.472 534.842 234.472 540.622C234.472 546.935 232.501 551.889 228.559 555.485C224.617 559.054 219.663 560.839 213.696 560.839C207.197 560.839 202.07 558.855 198.314 554.886C194.585 550.891 192.721 544.631 192.721 536.108ZM240.542 521.205C240.542 514.919 242.513 509.991 246.455 506.422C250.397 502.826 255.365 501.028 261.358 501.028C267.83 501.028 272.931 503.013 276.66 506.981C280.416 510.95 282.294 517.21 282.294 525.76L282.294 528.716C282.294 538.651 279.484 546.469 273.863 552.169C268.27 557.869 260.399 560.732 250.251 560.759L246.895 560.759L246.895 549.812L249.771 549.812C255.818 549.838 260.452 548.107 263.675 544.618C266.898 541.129 268.51 534.882 268.51 525.879L268.47 524.761C268.47 519.194 267.804 515.465 266.472 513.574C265.14 511.656 263.382 510.697 261.198 510.697C259.174 510.697 257.549 511.443 256.324 512.934C255.099 514.399 254.486 517.289 254.486 521.604C254.486 524.987 255.045 527.464 256.164 529.036C257.309 530.581 258.974 531.353 261.158 531.353C263.182 531.353 264.9 530.607 266.312 529.116C267.751 527.597 268.47 525.52 268.47 522.883L270.787 522.883C270.787 528.05 269.322 532.072 266.392 534.949C263.462 537.799 259.946 539.224 255.844 539.224C251.183 539.224 247.467 537.666 244.697 534.549C241.927 531.433 240.542 526.985 240.542 521.205ZM311.733 539.863L311.733 521.964C311.733 515.278 313.531 510.111 317.127 506.462C320.723 502.813 325.664 500.988 331.95 500.988C338.236 500.988 343.177 502.786 346.773 506.382C350.395 509.951 352.206 515.145 352.206 521.964L352.206 539.863C352.206 546.789 350.315 552.023 346.533 555.565C342.777 559.108 337.916 560.866 331.95 560.839C325.611 560.812 320.656 559.041 317.087 555.525C313.518 551.983 311.733 546.762 311.733 539.863ZM325.637 542.7C325.637 545.47 326.157 547.601 327.195 549.093C328.261 550.584 329.846 551.33 331.95 551.33C334.054 551.33 335.639 550.584 336.704 549.093C337.77 547.601 338.302 545.47 338.302 542.7L338.302 519.407C338.302 516.584 337.77 514.426 336.704 512.934C335.639 511.443 334.054 510.697 331.95 510.697C329.846 510.697 328.261 511.443 327.195 512.934C326.157 514.426 325.637 516.584 325.637 519.407L325.637 542.7ZM381.969 560L381.969 545.297L382.408 544.618L382.408 519.487L382.089 519.487L371.021 538.105L387.402 538.105L388.601 537.746L401.426 537.746L401.426 548.533L358.156 548.533L358.156 538.625L383.487 501.827L394.754 501.827L394.754 560L381.969 560ZM407.136 560L407.136 551.33L428.152 529.515C429.75 527.651 431.122 525.746 432.267 523.802C433.413 521.857 433.985 519.846 433.985 517.769C433.985 515.238 433.413 513.427 432.267 512.335C431.122 511.243 429.617 510.697 427.753 510.697C425.808 510.697 424.237 511.336 423.038 512.615C421.839 513.867 421.24 516.331 421.24 520.006L421.24 521.644L407.136 521.644L407.136 518.208C407.136 513.227 409.054 509.112 412.89 505.863C416.725 502.613 421.76 500.988 427.992 500.988C434.518 500.988 439.472 502.44 442.855 505.343C446.238 508.22 447.943 512.135 447.969 517.09C447.969 520.765 447.183 524.055 445.612 526.958C444.067 529.862 441.856 532.818 438.98 535.828L427.952 548.853L449.328 548.853L449.328 560L407.136 560ZM455.797 539.863L455.797 521.964C455.797 515.278 457.595 510.111 461.191 506.462C464.787 502.813 469.728 500.988 476.014 500.988C482.3 500.988 487.241 502.786 490.836 506.382C494.459 509.951 496.27 515.145 496.27 521.964L496.27 539.863C496.27 546.789 494.379 552.023 490.597 555.565C486.841 559.108 481.98 560.866 476.014 560.839C469.674 560.812 464.72 559.041 461.151 555.525C457.582 551.983 455.797 546.762 455.797 539.863ZM469.701 542.7C469.701 545.47 470.22 547.601 471.259 549.093C472.325 550.584 473.909 551.33 476.014 551.33C478.118 551.33 479.703 550.584 480.768 549.093C481.834 547.601 482.366 545.47 482.366 542.7L482.366 519.407C482.366 516.584 481.834 514.426 480.768 512.934C479.703 511.443 478.118 510.697 476.014 510.697C473.909 510.697 472.325 511.443 471.259 512.934C470.22 514.426 469.701 516.584 469.701 519.407L469.701 542.7ZM525.39 544.178C525.39 540.369 526.402 537.2 528.427 534.669C530.477 532.139 532.675 530.527 535.019 529.835L535.019 529.675C532.648 528.61 530.717 526.998 529.226 524.841C527.761 522.657 527.028 519.913 527.028 516.61C527.028 511.842 528.733 508.047 532.142 505.223C535.578 502.4 540.359 500.988 546.486 500.988C552.612 500.988 557.366 502.44 560.749 505.343C564.159 508.22 565.863 511.976 565.863 516.61C565.863 520.02 565.091 522.83 563.546 525.04C562.028 527.225 560.097 528.756 557.753 529.635L557.753 529.795C560.176 530.461 562.401 532.072 564.425 534.629C566.476 537.16 567.501 540.343 567.501 544.178C567.501 549.319 565.557 553.381 561.668 556.364C557.806 559.347 552.745 560.839 546.486 560.839C540.2 560.839 535.112 559.347 531.223 556.364C527.334 553.381 525.39 549.319 525.39 544.178ZM539.414 542.66C539.414 545.776 540.026 548.041 541.252 549.452C542.504 550.837 544.235 551.53 546.446 551.53C548.63 551.53 550.335 550.824 551.56 549.412C552.785 548.001 553.398 545.75 553.398 542.66C553.398 539.437 552.745 537.173 551.44 535.868C550.161 534.536 548.497 533.87 546.446 533.87C544.395 533.87 542.703 534.536 541.372 535.868C540.066 537.173 539.414 539.437 539.414 542.66ZM540.333 518.448C540.333 521.138 540.905 523.189 542.051 524.601C543.196 525.986 544.661 526.679 546.446 526.679C548.204 526.679 549.655 525.986 550.801 524.601C551.973 523.189 552.559 521.138 552.559 518.448C552.559 515.731 552.039 513.734 551 512.455C549.988 511.15 548.47 510.497 546.446 510.497C544.421 510.497 542.89 511.123 541.851 512.375C540.839 513.627 540.333 515.651 540.333 518.448ZM573.411 544.178C573.411 540.369 574.423 537.2 576.448 534.669C578.499 532.139 580.696 530.527 583.04 529.835L583.04 529.675C580.67 528.61 578.738 526.998 577.247 524.841C575.782 522.657 575.049 519.913 575.049 516.61C575.049 511.842 576.754 508.047 580.163 505.223C583.599 502.4 588.381 500.988 594.507 500.988C600.633 500.988 605.388 502.44 608.77 505.343C612.18 508.22 613.884 511.976 613.884 516.61C613.884 520.02 613.112 522.83 611.567 525.04C610.049 527.225 608.118 528.756 605.774 529.635L605.774 529.795C608.198 530.461 610.422 532.072 612.446 534.629C614.497 537.16 615.523 540.343 615.523 544.178C615.523 549.319 613.578 553.381 609.689 556.364C605.827 559.347 600.766 560.839 594.507 560.839C588.221 560.839 583.133 559.347 579.245 556.364C575.356 553.381 573.411 549.319 573.411 544.178ZM587.435 542.66C587.435 545.776 588.048 548.041 589.273 549.452C590.525 550.837 592.256 551.53 594.467 551.53C596.651 551.53 598.356 550.824 599.581 549.412C600.806 548.001 601.419 545.75 601.419 542.66C601.419 539.437 600.766 537.173 599.461 535.868C598.183 534.536 596.518 533.87 594.467 533.87C592.416 533.87 590.725 534.536 589.393 535.868C588.088 537.173 587.435 539.437 587.435 542.66ZM588.354 518.448C588.354 521.138 588.927 523.189 590.072 524.601C591.217 525.986 592.682 526.679 594.467 526.679C596.225 526.679 597.677 525.986 598.822 524.601C599.994 523.189 600.58 521.138 600.58 518.448C600.58 515.731 600.06 513.734 599.022 512.455C598.009 511.15 596.491 510.497 594.467 510.497C592.443 510.497 590.911 511.123 589.872 512.375C588.86 513.627 588.354 515.651 588.354 518.448ZM621.433 544.178C621.433 540.369 622.445 537.2 624.469 534.669C626.52 532.139 628.717 530.527 631.061 529.835L631.061 529.675C628.691 528.61 626.76 526.998 625.268 524.841C623.803 522.657 623.071 519.913 623.071 516.61C623.071 511.842 624.775 508.047 628.185 505.223C631.621 502.4 636.402 500.988 642.528 500.988C648.654 500.988 653.409 502.44 656.792 505.343C660.201 508.22 661.906 511.976 661.906 516.61C661.906 520.02 661.133 522.83 659.588 525.04C658.07 527.225 656.139 528.756 653.795 529.635L653.795 529.795C656.219 530.461 658.443 532.072 660.467 534.629C662.518 537.16 663.544 540.343 663.544 544.178C663.544 549.319 661.599 553.381 657.711 556.364C653.848 559.347 648.788 560.839 642.528 560.839C636.242 560.839 631.155 559.347 627.266 556.364C623.377 553.381 621.433 549.319 621.433 544.178ZM635.456 542.66C635.456 545.776 636.069 548.041 637.294 549.452C638.546 550.837 640.277 551.53 642.488 551.53C644.672 551.53 646.377 550.824 647.602 549.412C648.827 548.001 649.44 545.75 649.44 542.66C649.44 539.437 648.788 537.173 647.482 535.868C646.204 534.536 644.539 533.87 642.488 533.87C640.437 533.87 638.746 534.536 637.414 535.868C636.109 537.173 635.456 539.437 635.456 542.66ZM636.375 518.448C636.375 521.138 636.948 523.189 638.093 524.601C639.239 525.986 640.704 526.679 642.488 526.679C644.246 526.679 645.698 525.986 646.843 524.601C648.015 523.189 648.601 521.138 648.601 518.448C648.601 515.731 648.082 513.734 647.043 512.455C646.031 511.15 644.512 510.497 642.488 510.497C640.464 510.497 638.932 511.123 637.893 512.375C636.881 513.627 636.375 515.651 636.375 518.448ZM670.413 539.863L670.413 521.964C670.413 515.278 672.211 510.111 675.806 506.462C679.402 502.813 684.343 500.988 690.629 500.988C696.915 500.988 701.856 502.786 705.452 506.382C709.075 509.951 710.886 515.145 710.886 521.964L710.886 539.863C710.886 546.789 708.995 552.023 705.212 555.565C701.457 559.108 696.596 560.866 690.629 560.839C684.29 560.812 679.336 559.041 675.766 555.525C672.197 551.983 670.413 546.762 670.413 539.863ZM684.317 542.7C684.317 545.47 684.836 547.601 685.875 549.093C686.94 550.584 688.525 551.33 690.629 551.33C692.733 551.33 694.318 550.584 695.384 549.093C696.449 547.601 696.982 545.47 696.982 542.7L696.982 519.407C696.982 516.584 696.449 514.426 695.384 512.934C694.318 511.443 692.733 510.697 690.629 510.697C688.525 510.697 686.94 511.443 685.875 512.934C684.836 514.426 684.317 516.584 684.317 519.407L684.317 542.7ZM740.965 539.863L740.965 521.964C740.965 515.278 742.763 510.111 746.358 506.462C749.954 502.813 754.895 500.988 761.181 500.988C767.467 500.988 772.408 502.786 776.004 506.382C779.627 509.951 781.438 515.145 781.438 521.964L781.438 539.863C781.438 546.789 779.547 552.023 775.764 555.565C772.009 559.108 767.148 560.866 761.181 560.839C754.842 560.812 749.888 559.041 746.318 555.525C742.749 551.983 740.965 546.762 740.965 539.863ZM754.869 542.7C754.869 545.47 755.388 547.601 756.427 549.093C757.492 550.584 759.077 551.33 761.181 551.33C763.285 551.33 764.87 550.584 765.936 549.093C767.001 547.601 767.534 545.47 767.534 542.7L767.534 519.407C767.534 516.584 767.001 514.426 765.936 512.934C764.87 511.443 763.285 510.697 761.181 510.697C759.077 510.697 757.492 511.443 756.427 512.934C755.388 514.426 754.869 516.584 754.869 519.407L754.869 542.7ZM811.2 560L811.2 545.297L811.64 544.618L811.64 519.487L811.32 519.487L800.253 538.105L816.634 538.105L817.832 537.746L830.658 537.746L830.658 548.533L787.388 548.533L787.388 538.625L812.718 501.827L823.985 501.827L823.985 560L811.2 560ZM836.368 560L836.368 551.33L857.383 529.515C858.982 527.651 860.353 525.746 861.499 523.802C862.644 521.857 863.217 519.846 863.217 517.769C863.217 515.238 862.644 513.427 861.499 512.335C860.353 511.243 858.848 510.697 856.984 510.697C855.04 510.697 853.468 511.336 852.269 512.615C851.071 513.867 850.471 516.331 850.471 520.006L850.471 521.644L836.368 521.644L836.368 518.208C836.368 513.227 838.286 509.112 842.121 505.863C845.957 502.613 850.991 500.988 857.224 500.988C863.749 500.988 868.704 502.44 872.086 505.343C875.469 508.22 877.174 512.135 877.201 517.09C877.201 520.765 876.415 524.055 874.843 526.958C873.298 529.862 871.088 532.818 868.211 535.828L857.184 548.853L878.559 548.853L878.559 560L836.368 560ZM885.028 539.863L885.028 521.964C885.028 515.278 886.826 510.111 890.422 506.462C894.018 502.813 898.959 500.988 905.245 500.988C911.531 500.988 916.472 502.786 920.068 506.382C923.69 509.951 925.501 515.145 925.501 521.964L925.501 539.863C925.501 546.789 923.61 552.023 919.828 555.565C916.072 559.108 911.211 560.866 905.245 560.839C898.906 560.812 893.951 559.041 890.382 555.525C886.813 551.983 885.028 546.762 885.028 539.863ZM898.932 542.7C898.932 545.47 899.452 547.601 900.49 549.093C901.556 550.584 903.141 551.33 905.245 551.33C907.349 551.33 908.934 550.584 909.999 549.093C911.065 547.601 911.598 545.47 911.598 542.7L911.598 519.407C911.598 516.584 911.065 514.426 909.999 512.934C908.934 511.443 907.349 510.697 905.245 510.697C903.141 510.697 901.556 511.443 900.49 512.934C899.452 514.426 898.932 516.584 898.932 519.407L898.932 542.7Z" fill="white"/> +<path d="M105.108 509.618L107.245 511.725L107.249 511.72L105.108 509.618ZM132.077 501.028L135.077 501.028L135.077 498.028L132.077 498.028L132.077 501.028ZM132.077 512.175L132.077 515.175L135.077 515.175L135.077 512.175L132.077 512.175ZM115.297 517.449L117.5 519.485L117.508 519.476L115.297 517.449ZM110.462 536.228L107.462 536.228L107.462 536.296L107.465 536.364L110.462 536.228ZM110.502 537.106L113.502 537.106L113.502 537.038L113.499 536.97L110.502 537.106ZM112.5 548.493L110.047 550.221L110.055 550.232L110.063 550.244L112.5 548.493ZM122.648 549.133L124.949 551.057L124.958 551.047L124.966 551.037L122.648 549.133ZM122.768 533.031L120.31 534.752L120.327 534.775L120.343 534.798L122.768 533.031ZM112.66 532.951L114.857 534.994L114.865 534.985L114.874 534.975L112.66 532.951ZM110.542 539.184L110.542 542.184L113.542 542.184L113.542 539.184L110.542 539.184ZM108.145 539.184L105.145 539.184L105.145 542.184L108.145 542.184L108.145 539.184ZM112.58 527.078L114.672 529.228L114.682 529.219L112.58 527.078ZM134.275 527.358L132.041 529.36L132.049 529.37L134.275 527.358ZM132.517 555.485L134.53 557.709L134.538 557.702L132.517 555.485ZM102.272 554.886L100.078 556.933L100.085 556.94L100.093 556.948L102.272 554.886ZM96.6781 536.108L99.6781 536.108L99.6781 533.111L96.6781 533.111L93.6781 533.111L93.6781 536.108L96.6781 536.108ZM96.6781 533.111L99.6781 533.111C99.6781 523.734 102.306 516.733 107.245 511.725L105.108 509.618L102.972 507.512C96.6703 513.903 93.6781 522.564 93.6781 533.111L96.6781 533.111ZM105.108 509.618L107.249 511.72C112.167 506.709 119.182 504.028 128.721 504.028L128.721 501.028L128.721 498.028C118.016 498.028 109.29 501.074 102.967 507.517L105.108 509.618ZM128.721 501.028L128.721 504.028L132.077 504.028L132.077 501.028L132.077 498.028L128.721 498.028L128.721 501.028ZM132.077 501.028L129.077 501.028L129.077 512.175L132.077 512.175L135.077 512.175L135.077 501.028L132.077 501.028ZM132.077 512.175L132.077 509.175L129.2 509.175L129.2 512.175L129.2 515.175L132.077 515.175L132.077 512.175ZM129.2 512.175L129.2 509.175C122.553 509.175 117.02 511.129 113.085 515.422L115.297 517.449L117.508 519.476C120.019 516.738 123.755 515.175 129.2 515.175L129.2 512.175ZM115.297 517.449L113.093 515.414C109.061 519.779 107.462 527.042 107.462 536.228L110.462 536.228L113.462 536.228C113.462 527.354 115.086 522.098 117.5 519.485L115.297 517.449ZM110.462 536.228L107.465 536.364L107.505 537.243L110.502 537.106L113.499 536.97L113.459 536.091L110.462 536.228ZM110.502 537.106L107.502 537.106C107.502 540.056 107.673 542.618 108.047 544.747C108.411 546.826 109.012 548.75 110.047 550.221L112.5 548.493L114.953 546.766C114.656 546.345 114.257 545.426 113.956 543.71C113.664 542.043 113.502 539.857 113.502 537.106L110.502 537.106ZM112.5 548.493L110.063 550.244C111.933 552.847 114.564 554.33 117.774 554.33L117.774 551.33L117.774 548.33C116.668 548.33 115.783 547.922 114.936 546.743L112.5 548.493ZM117.774 551.33L117.774 554.33C120.626 554.33 123.116 553.249 124.949 551.057L122.648 549.133L120.347 547.208C119.729 547.946 118.97 548.33 117.774 548.33L117.774 551.33ZM122.648 549.133L124.966 551.037C126.015 549.76 126.611 548.109 126.965 546.393C127.326 544.639 127.486 542.566 127.486 540.223L124.486 540.223L121.486 540.223C121.486 542.328 121.339 543.964 121.088 545.18C120.83 546.434 120.506 547.014 120.33 547.228L122.648 549.133ZM124.486 540.223L127.486 540.223C127.486 536.745 126.886 533.588 125.192 531.264L122.768 533.031L120.343 534.798C120.94 535.617 121.486 537.255 121.486 540.223L124.486 540.223ZM122.768 533.031L125.226 531.311C123.472 528.805 120.84 527.634 117.814 527.634L117.814 530.634L117.814 533.634C119.155 533.634 119.827 534.061 120.31 534.752L122.768 533.031ZM117.814 530.634L117.814 527.634C114.915 527.634 112.403 528.785 110.445 530.928L112.66 532.951L114.874 534.975C115.739 534.028 116.664 533.634 117.814 533.634L117.814 530.634ZM112.66 532.951L110.463 530.908C108.405 533.121 107.542 536.003 107.542 539.184L110.542 539.184L113.542 539.184C113.542 537.091 114.09 535.818 114.857 534.994L112.66 532.951ZM110.542 539.184L110.542 536.184L108.145 536.184L108.145 539.184L108.145 542.184L110.542 542.184L110.542 539.184ZM108.145 539.184L111.145 539.184C111.145 534.578 112.438 531.402 114.672 529.228L112.58 527.078L110.488 524.928C106.809 528.507 105.145 533.402 105.145 539.184L108.145 539.184ZM112.58 527.078L114.682 529.219C117.088 526.856 119.853 525.723 123.127 525.723L123.127 522.723L123.127 519.723C118.251 519.723 113.985 521.494 110.478 524.938L112.58 527.078ZM123.127 522.723L123.127 525.723C127.053 525.723 129.913 526.987 132.041 529.36L134.275 527.358L136.508 525.355C133.096 521.549 128.524 519.723 123.127 519.723L123.127 522.723ZM134.275 527.358L132.049 529.37C134.152 531.695 135.43 535.289 135.43 540.622L138.43 540.622L141.43 540.622C141.43 534.396 139.937 529.147 136.5 525.346L134.275 527.358ZM138.43 540.622L135.43 540.622C135.43 546.26 133.699 550.346 130.495 553.269L132.517 555.485L134.538 557.702C139.218 553.433 141.43 547.61 141.43 540.622L138.43 540.622ZM132.517 555.485L130.503 553.261C127.181 556.269 122.974 557.839 117.654 557.839L117.654 560.839L117.654 563.839C124.267 563.839 129.968 561.84 134.53 557.709L132.517 555.485ZM117.654 560.839L117.654 557.839C111.81 557.839 107.533 556.081 104.451 552.824L102.272 554.886L100.093 556.948C104.521 561.628 110.499 563.839 117.654 563.839L117.654 560.839ZM102.272 554.886L104.465 552.839C101.479 549.64 99.6781 544.281 99.6781 536.108L96.6781 536.108L93.6781 536.108C93.6781 544.982 95.6065 552.142 100.078 556.933L102.272 554.886ZM150.413 506.422L152.426 508.646L152.434 508.638L150.413 506.422ZM180.618 506.981L178.431 509.036L178.439 509.043L180.618 506.981ZM177.821 552.169L175.685 550.063L175.68 550.068L177.821 552.169ZM154.208 560.759L154.208 563.759L154.216 563.759L154.208 560.759ZM150.852 560.759L147.852 560.759L147.852 563.759L150.852 563.759L150.852 560.759ZM150.852 549.812L150.852 546.812L147.852 546.812L147.852 549.812L150.852 549.812ZM153.729 549.812L153.742 546.812L153.729 546.812L153.729 549.812ZM172.467 525.879L175.467 525.879L175.467 525.826L175.465 525.772L172.467 525.879ZM172.427 524.761L169.427 524.761L169.427 524.814L169.429 524.868L172.427 524.761ZM170.43 513.574L167.965 515.285L167.971 515.293L167.977 515.301L170.43 513.574ZM160.281 512.934L162.583 514.859L162.591 514.849L162.599 514.839L160.281 512.934ZM160.121 529.036L157.677 530.776L157.694 530.799L157.712 530.823L160.121 529.036ZM170.27 529.116L168.092 527.053L168.091 527.054L170.27 529.116ZM172.427 522.883L172.427 519.883L169.427 519.883L169.427 522.883L172.427 522.883ZM174.745 522.883L177.745 522.883L177.745 519.883L174.745 519.883L174.745 522.883ZM170.35 534.949L172.441 537.099L172.451 537.09L170.35 534.949ZM144.5 521.205L147.5 521.205C147.5 515.598 149.227 511.542 152.426 508.646L150.413 506.422L148.399 504.198C143.714 508.44 141.5 514.24 141.5 521.205L144.5 521.205ZM150.413 506.422L152.434 508.638C155.755 505.61 159.971 504.028 165.315 504.028L165.315 501.028L165.315 498.028C158.674 498.028 152.955 500.043 148.391 504.206L150.413 506.422ZM165.315 501.028L165.315 504.028C171.129 504.028 175.376 505.784 178.431 509.036L180.618 506.981L182.804 504.927C178.402 500.242 172.447 498.028 165.315 498.028L165.315 501.028ZM180.618 506.981L178.439 509.043C181.437 512.212 183.251 517.559 183.251 525.76L186.251 525.76L189.251 525.76C189.251 516.86 187.31 509.688 182.797 504.919L180.618 506.981ZM186.251 525.76L183.251 525.76L183.251 528.716L186.251 528.716L189.251 528.716L189.251 525.76L186.251 525.76ZM186.251 528.716L183.251 528.716C183.251 538.064 180.625 545.052 175.685 550.063L177.821 552.169L179.957 554.275C186.257 547.886 189.251 539.239 189.251 528.716L186.251 528.716ZM177.821 552.169L175.68 550.068C170.791 555.05 163.775 557.734 154.2 557.759L154.208 560.759L154.216 563.759C164.938 563.731 173.664 560.688 179.962 554.27L177.821 552.169ZM154.208 560.759L154.208 557.759L150.852 557.759L150.852 560.759L150.852 563.759L154.208 563.759L154.208 560.759ZM150.852 560.759L153.852 560.759L153.852 549.812L150.852 549.812L147.852 549.812L147.852 560.759L150.852 560.759ZM150.852 549.812L150.852 552.812L153.729 552.812L153.729 549.812L153.729 546.812L150.852 546.812L150.852 549.812ZM153.729 549.812L153.716 552.812C160.359 552.841 165.895 550.92 169.837 546.653L167.633 544.618L165.429 542.582C162.924 545.294 159.191 546.836 153.742 546.812L153.729 549.812ZM167.633 544.618L169.837 546.653C173.867 542.289 175.467 535.042 175.467 525.879L172.467 525.879L169.467 525.879C169.467 534.723 167.844 539.968 165.429 542.582L167.633 544.618ZM172.467 525.879L175.465 525.772L175.425 524.654L172.427 524.761L169.429 524.868L169.469 525.987L172.467 525.879ZM172.427 524.761L175.427 524.761C175.427 521.875 175.256 519.36 174.881 517.261C174.514 515.207 173.912 513.308 172.882 511.846L170.43 513.574L167.977 515.301C168.279 515.73 168.675 516.641 168.975 518.316C169.266 519.946 169.427 522.08 169.427 524.761L172.427 524.761ZM170.43 513.574L172.894 511.863C171.047 509.203 168.4 507.697 165.156 507.697L165.156 510.697L165.156 513.697C166.279 513.697 167.149 514.109 167.965 515.285L170.43 513.574ZM165.156 510.697L165.156 507.697C162.284 507.697 159.789 508.807 157.963 511.03L160.281 512.934L162.599 514.839C163.224 514.079 163.979 513.697 165.156 513.697L165.156 510.697ZM160.281 512.934L157.98 511.01C156.927 512.269 156.326 513.892 155.968 515.579C155.604 517.298 155.443 519.324 155.443 521.604L158.443 521.604L161.443 521.604C161.443 519.57 161.59 517.993 161.838 516.823C162.093 515.619 162.41 515.065 162.583 514.859L160.281 512.934ZM158.443 521.604L155.443 521.604C155.443 525.195 156.014 528.439 157.677 530.776L160.121 529.036L162.565 527.296C161.992 526.49 161.443 524.779 161.443 521.604L158.443 521.604ZM160.121 529.036L157.712 530.823C159.505 533.242 162.129 534.353 165.116 534.353L165.116 531.353L165.116 528.353C163.734 528.353 163.028 527.919 162.531 527.249L160.121 529.036ZM165.116 531.353L165.116 534.353C167.978 534.353 170.48 533.258 172.449 531.178L170.27 529.116L168.091 527.054C167.236 527.956 166.302 528.353 165.116 528.353L165.116 531.353ZM170.27 529.116L172.448 531.179C174.542 528.968 175.427 526.078 175.427 522.883L172.427 522.883L169.427 522.883C169.427 524.961 168.874 526.227 168.092 527.053L170.27 529.116ZM172.427 522.883L172.427 525.883L174.745 525.883L174.745 522.883L174.745 519.883L172.427 519.883L172.427 522.883ZM174.745 522.883L171.745 522.883C171.745 527.465 170.463 530.633 168.248 532.808L170.35 534.949L172.451 537.09C176.096 533.511 177.745 528.636 177.745 522.883L174.745 522.883ZM170.35 534.949L168.258 532.799C165.89 535.102 163.126 536.224 159.802 536.224L159.802 539.224L159.802 542.224C164.682 542.224 168.949 540.496 172.441 537.099L170.35 534.949ZM159.802 539.224L159.802 536.224C155.885 536.224 153.027 534.953 150.897 532.556L148.655 534.549L146.412 536.543C149.823 540.379 154.396 542.224 159.802 542.224L159.802 539.224ZM148.655 534.549L150.897 532.556C148.775 530.17 147.5 526.534 147.5 521.205L144.5 521.205L141.5 521.205C141.5 527.436 142.994 532.696 146.412 536.543L148.655 534.549ZM201.151 509.618L203.287 511.725L203.292 511.72L201.151 509.618ZM228.12 501.028L231.12 501.028L231.12 498.028L228.12 498.028L228.12 501.028ZM228.12 512.175L228.12 515.175L231.12 515.175L231.12 512.175L228.12 512.175ZM211.339 517.449L213.543 519.485L213.55 519.476L211.339 517.449ZM206.505 536.228L203.505 536.228L203.505 536.296L203.508 536.364L206.505 536.228ZM206.545 537.106L209.545 537.106L209.545 537.038L209.541 536.97L206.545 537.106ZM208.542 548.493L206.089 550.221L206.097 550.232L206.106 550.244L208.542 548.493ZM218.69 549.133L220.992 551.057L221 551.047L221.009 551.037L218.69 549.133ZM218.81 533.031L216.353 534.752L216.369 534.775L216.386 534.798L218.81 533.031ZM208.702 532.951L210.899 534.994L210.908 534.985L210.917 534.975L208.702 532.951ZM206.584 539.184L206.584 542.184L209.584 542.184L209.584 539.184L206.584 539.184ZM204.187 539.184L201.187 539.184L201.187 542.184L204.187 542.184L204.187 539.184ZM208.622 527.078L210.714 529.228L210.724 529.219L208.622 527.078ZM230.317 527.358L228.083 529.36L228.092 529.37L230.317 527.358ZM228.559 555.485L230.573 557.709L230.581 557.702L228.559 555.485ZM198.314 554.886L196.121 556.933L196.128 556.94L196.135 556.948L198.314 554.886ZM192.721 536.108L195.721 536.108L195.721 533.111L192.721 533.111L189.721 533.111L189.721 536.108L192.721 536.108ZM192.721 533.111L195.721 533.111C195.721 523.734 198.348 516.733 203.287 511.725L201.151 509.618L199.015 507.512C192.713 513.903 189.721 522.564 189.721 533.111L192.721 533.111ZM201.151 509.618L203.292 511.72C208.209 506.709 215.225 504.028 224.763 504.028L224.763 501.028L224.763 498.028C214.059 498.028 205.333 501.074 199.01 507.517L201.151 509.618ZM224.763 501.028L224.763 504.028L228.12 504.028L228.12 501.028L228.12 498.028L224.763 498.028L224.763 501.028ZM228.12 501.028L225.12 501.028L225.12 512.175L228.12 512.175L231.12 512.175L231.12 501.028L228.12 501.028ZM228.12 512.175L228.12 509.175L225.243 509.175L225.243 512.175L225.243 515.175L228.12 515.175L228.12 512.175ZM225.243 512.175L225.243 509.175C218.596 509.175 213.063 511.129 209.128 515.422L211.339 517.449L213.55 519.476C216.061 516.738 219.798 515.175 225.243 515.175L225.243 512.175ZM211.339 517.449L209.135 515.414C205.103 519.779 203.505 527.042 203.505 536.228L206.505 536.228L209.505 536.228C209.505 527.354 211.129 522.098 213.543 519.485L211.339 517.449ZM206.505 536.228L203.508 536.364L203.548 537.243L206.545 537.106L209.541 536.97L209.501 536.091L206.505 536.228ZM206.545 537.106L203.545 537.106C203.545 540.056 203.716 542.618 204.089 544.747C204.454 546.826 205.054 548.75 206.089 550.221L208.542 548.493L210.995 546.766C210.699 546.345 210.3 545.426 209.999 543.71C209.706 542.043 209.545 539.857 209.545 537.106L206.545 537.106ZM208.542 548.493L206.106 550.244C207.975 552.847 210.606 554.33 213.816 554.33L213.816 551.33L213.816 548.33C212.711 548.33 211.826 547.922 210.979 546.743L208.542 548.493ZM213.816 551.33L213.816 554.33C216.668 554.33 219.159 553.249 220.992 551.057L218.69 549.133L216.389 547.208C215.772 547.946 215.013 548.33 213.816 548.33L213.816 551.33ZM218.69 549.133L221.009 551.037C222.058 549.76 222.653 548.109 223.007 546.393C223.369 544.639 223.528 542.566 223.528 540.223L220.528 540.223L217.528 540.223C217.528 542.328 217.382 543.964 217.131 545.18C216.872 546.434 216.549 547.014 216.372 547.228L218.69 549.133ZM220.528 540.223L223.528 540.223C223.528 536.745 222.929 533.588 221.235 531.264L218.81 533.031L216.386 534.798C216.983 535.617 217.528 537.255 217.528 540.223L220.528 540.223ZM218.81 533.031L221.268 531.311C219.514 528.805 216.883 527.634 213.856 527.634L213.856 530.634L213.856 533.634C215.197 533.634 215.869 534.061 216.353 534.752L218.81 533.031ZM213.856 530.634L213.856 527.634C210.957 527.634 208.446 528.785 206.487 530.928L208.702 532.951L210.917 534.975C211.782 534.028 212.706 533.634 213.856 533.634L213.856 530.634ZM208.702 532.951L206.505 530.908C204.448 533.121 203.584 536.003 203.584 539.184L206.584 539.184L209.584 539.184C209.584 537.091 210.133 535.818 210.899 534.994L208.702 532.951ZM206.584 539.184L206.584 536.184L204.187 536.184L204.187 539.184L204.187 542.184L206.584 542.184L206.584 539.184ZM204.187 539.184L207.187 539.184C207.187 534.578 208.48 531.402 210.714 529.228L208.622 527.078L206.53 524.928C202.851 528.507 201.187 533.402 201.187 539.184L204.187 539.184ZM208.622 527.078L210.724 529.219C213.13 526.856 215.896 525.723 219.17 525.723L219.17 522.723L219.17 519.723C214.294 519.723 210.027 521.494 206.52 524.938L208.622 527.078ZM219.17 522.723L219.17 525.723C223.096 525.723 225.956 526.987 228.083 529.36L230.317 527.358L232.551 525.355C229.138 521.549 224.567 519.723 219.17 519.723L219.17 522.723ZM230.317 527.358L228.092 529.37C230.195 531.695 231.472 535.289 231.472 540.622L234.472 540.622L237.472 540.622C237.472 534.396 235.98 529.147 232.542 525.346L230.317 527.358ZM234.472 540.622L231.472 540.622C231.472 546.26 229.742 550.346 226.537 553.269L228.559 555.485L230.581 557.702C235.261 553.433 237.472 547.61 237.472 540.622L234.472 540.622ZM228.559 555.485L226.546 553.261C223.223 556.269 219.016 557.839 213.696 557.839L213.696 560.839L213.696 563.839C220.309 563.839 226.01 561.84 230.573 557.709L228.559 555.485ZM213.696 560.839L213.696 557.839C207.852 557.839 203.576 556.081 200.493 552.824L198.314 554.886L196.135 556.948C200.564 561.628 206.542 563.839 213.696 563.839L213.696 560.839ZM198.314 554.886L200.507 552.839C197.521 549.64 195.721 544.281 195.721 536.108L192.721 536.108L189.721 536.108C189.721 544.982 191.649 552.142 196.121 556.933L198.314 554.886ZM246.455 506.422L248.469 508.646L248.477 508.638L246.455 506.422ZM276.66 506.981L274.474 509.036L274.481 509.043L276.66 506.981ZM273.863 552.169L271.727 550.063L271.722 550.068L273.863 552.169ZM250.251 560.759L250.251 563.759L250.259 563.759L250.251 560.759ZM246.895 560.759L243.895 560.759L243.895 563.759L246.895 563.759L246.895 560.759ZM246.895 549.812L246.895 546.812L243.895 546.812L243.895 549.812L246.895 549.812ZM249.771 549.812L249.785 546.812L249.771 546.812L249.771 549.812ZM268.51 525.879L271.51 525.879L271.51 525.826L271.508 525.772L268.51 525.879ZM268.47 524.761L265.47 524.761L265.47 524.814L265.472 524.868L268.47 524.761ZM266.472 513.574L264.008 515.285L264.014 515.293L264.019 515.301L266.472 513.574ZM256.324 512.934L258.625 514.859L258.633 514.849L258.642 514.839L256.324 512.934ZM256.164 529.036L253.72 530.776L253.737 530.799L253.754 530.823L256.164 529.036ZM266.312 529.116L264.134 527.053L264.133 527.054L266.312 529.116ZM268.47 522.883L268.47 519.883L265.47 519.883L265.47 522.883L268.47 522.883ZM270.787 522.883L273.787 522.883L273.787 519.883L270.787 519.883L270.787 522.883ZM266.392 534.949L268.484 537.099L268.494 537.09L266.392 534.949ZM240.542 521.205L243.542 521.205C243.542 515.598 245.27 511.542 248.469 508.646L246.455 506.422L244.442 504.198C239.756 508.44 237.542 514.24 237.542 521.205L240.542 521.205ZM246.455 506.422L248.477 508.638C251.797 505.61 256.014 504.028 261.358 504.028L261.358 501.028L261.358 498.028C254.716 498.028 248.997 500.043 244.433 504.206L246.455 506.422ZM261.358 501.028L261.358 504.028C267.172 504.028 271.418 505.784 274.474 509.036L276.66 506.981L278.847 504.927C274.444 500.242 268.489 498.028 261.358 498.028L261.358 501.028ZM276.66 506.981L274.481 509.043C277.48 512.212 279.294 517.559 279.294 525.76L282.294 525.76L285.294 525.76C285.294 516.86 283.352 509.688 278.839 504.919L276.66 506.981ZM282.294 525.76L279.294 525.76L279.294 528.716L282.294 528.716L285.294 528.716L285.294 525.76L282.294 525.76ZM282.294 528.716L279.294 528.716C279.294 538.064 276.667 545.052 271.727 550.063L273.863 552.169L276 554.275C282.3 547.886 285.294 539.239 285.294 528.716L282.294 528.716ZM273.863 552.169L271.722 550.068C266.833 555.05 259.817 557.734 250.243 557.759L250.251 560.759L250.259 563.759C260.981 563.731 269.707 560.688 276.005 554.27L273.863 552.169ZM250.251 560.759L250.251 557.759L246.895 557.759L246.895 560.759L246.895 563.759L250.251 563.759L250.251 560.759ZM246.895 560.759L249.895 560.759L249.895 549.812L246.895 549.812L243.895 549.812L243.895 560.759L246.895 560.759ZM246.895 549.812L246.895 552.812L249.771 552.812L249.771 549.812L249.771 546.812L246.895 546.812L246.895 549.812ZM249.771 549.812L249.758 552.812C256.401 552.841 261.938 550.92 265.879 546.653L263.675 544.618L261.471 542.582C258.967 545.294 255.234 546.836 249.785 546.812L249.771 549.812ZM263.675 544.618L265.879 546.653C269.91 542.289 271.51 535.042 271.51 525.879L268.51 525.879L265.51 525.879C265.51 534.723 263.886 539.968 261.471 542.582L263.675 544.618ZM268.51 525.879L271.508 525.772L271.468 524.654L268.47 524.761L265.472 524.868L265.512 525.987L268.51 525.879ZM268.47 524.761L271.47 524.761C271.47 521.875 271.298 519.36 270.924 517.261C270.557 515.207 269.954 513.308 268.925 511.846L266.472 513.574L264.019 515.301C264.321 515.73 264.718 516.641 265.017 518.316C265.308 519.946 265.47 522.08 265.47 524.761L268.47 524.761ZM266.472 513.574L268.936 511.863C267.089 509.203 264.443 507.697 261.198 507.697L261.198 510.697L261.198 513.697C262.322 513.697 263.191 514.109 264.008 515.285L266.472 513.574ZM261.198 510.697L261.198 507.697C258.326 507.697 255.832 508.807 254.006 511.03L256.324 512.934L258.642 514.839C259.266 514.079 260.021 513.697 261.198 513.697L261.198 510.697ZM256.324 512.934L254.023 511.01C252.97 512.269 252.368 513.892 252.011 515.579C251.646 517.298 251.486 519.324 251.486 521.604L254.486 521.604L257.486 521.604C257.486 519.57 257.632 517.993 257.88 516.823C258.135 515.619 258.453 515.065 258.625 514.859L256.324 512.934ZM254.486 521.604L251.486 521.604C251.486 525.195 252.056 528.439 253.72 530.776L256.164 529.036L258.608 527.296C258.034 526.49 257.486 524.779 257.486 521.604L254.486 521.604ZM256.164 529.036L253.754 530.823C255.548 533.242 258.172 534.353 261.158 534.353L261.158 531.353L261.158 528.353C259.776 528.353 259.071 527.919 258.574 527.249L256.164 529.036ZM261.158 531.353L261.158 534.353C264.02 534.353 266.522 533.258 268.491 531.178L266.312 529.116L264.133 527.054C263.279 527.956 262.345 528.353 261.158 528.353L261.158 531.353ZM266.312 529.116L268.49 531.179C270.584 528.968 271.47 526.078 271.47 522.883L268.47 522.883L265.47 522.883C265.47 524.961 264.917 526.227 264.134 527.053L266.312 529.116ZM268.47 522.883L268.47 525.883L270.787 525.883L270.787 522.883L270.787 519.883L268.47 519.883L268.47 522.883ZM270.787 522.883L267.787 522.883C267.787 527.465 266.506 530.633 264.29 532.808L266.392 534.949L268.494 537.09C272.138 533.511 273.787 528.636 273.787 522.883L270.787 522.883ZM266.392 534.949L264.3 532.799C261.933 535.102 259.168 536.224 255.844 536.224L255.844 539.224L255.844 542.224C260.724 542.224 264.992 540.496 268.484 537.099L266.392 534.949ZM255.844 539.224L255.844 536.224C251.927 536.224 249.069 534.953 246.939 532.556L244.697 534.549L242.455 536.543C245.865 540.379 250.439 542.224 255.844 542.224L255.844 539.224ZM244.697 534.549L246.939 532.556C244.818 530.17 243.542 526.534 243.542 521.205L240.542 521.205L237.542 521.205C237.542 527.436 239.036 532.696 242.455 536.543L244.697 534.549ZM346.773 506.382L344.651 508.503L344.659 508.511L344.667 508.519L346.773 506.382ZM346.533 555.565L344.482 553.376L344.474 553.383L346.533 555.565ZM331.95 560.839L331.963 557.839L331.962 557.839L331.95 560.839ZM317.087 555.525L314.974 557.654L314.982 557.662L317.087 555.525ZM327.195 549.093L324.734 550.807L324.744 550.822L324.754 550.836L327.195 549.093ZM327.195 512.934L324.754 511.191L324.744 511.205L324.734 511.22L327.195 512.934ZM311.733 539.863L314.733 539.863L314.733 521.964L311.733 521.964L308.733 521.964L308.733 539.863L311.733 539.863ZM311.733 521.964L314.733 521.964C314.733 515.817 316.375 511.5 319.264 508.568L317.127 506.462L314.99 504.356C310.688 508.722 308.733 514.74 308.733 521.964L311.733 521.964ZM317.127 506.462L319.264 508.568C322.173 505.616 326.273 503.988 331.95 503.988L331.95 500.988L331.95 497.988C325.055 497.988 319.273 500.01 314.99 504.356L317.127 506.462ZM331.95 500.988L331.95 503.988C337.639 503.988 341.745 505.597 344.651 508.503L346.773 506.382L348.894 504.261C344.609 499.976 338.832 497.988 331.95 497.988L331.95 500.988ZM346.773 506.382L344.667 508.519C347.543 511.353 349.206 515.666 349.206 521.964L352.206 521.964L355.206 521.964C355.206 514.625 353.247 508.55 348.878 504.245L346.773 506.382ZM352.206 521.964L349.206 521.964L349.206 539.863L352.206 539.863L355.206 539.863L355.206 521.964L352.206 521.964ZM352.206 539.863L349.206 539.863C349.206 546.25 347.475 550.572 344.482 553.376L346.533 555.565L348.584 557.755C353.156 553.473 355.206 547.327 355.206 539.863L352.206 539.863ZM346.533 555.565L344.474 553.383C341.366 556.315 337.289 557.863 331.963 557.839L331.95 560.839L331.936 563.839C338.544 563.869 344.189 561.901 348.591 557.747L346.533 555.565ZM331.95 560.839L331.962 557.839C326.189 557.815 322.065 556.218 319.192 553.388L317.087 555.525L314.982 557.662C319.247 561.864 325.032 563.81 331.937 563.839L331.95 560.839ZM317.087 555.525L319.2 553.396C316.383 550.6 314.733 546.267 314.733 539.863L311.733 539.863L308.733 539.863C308.733 547.257 310.652 553.365 314.974 557.654L317.087 555.525ZM325.637 542.7L322.637 542.7C322.637 545.782 323.205 548.612 324.734 550.807L327.195 549.093L329.657 547.378C329.108 546.59 328.637 545.158 328.637 542.7L325.637 542.7ZM327.195 549.093L324.754 550.836C326.472 553.242 329.042 554.33 331.95 554.33L331.95 551.33L331.95 548.33C330.65 548.33 330.049 547.927 329.637 547.349L327.195 549.093ZM331.95 551.33L331.95 554.33C334.858 554.33 337.428 553.242 339.146 550.836L336.704 549.093L334.263 547.349C333.85 547.927 333.25 548.33 331.95 548.33L331.95 551.33ZM336.704 549.093L339.146 550.836C340.717 548.636 341.303 545.794 341.303 542.7L338.303 542.7L335.303 542.7C335.303 545.146 334.822 546.566 334.263 547.349L336.704 549.093ZM338.303 542.7L341.303 542.7L341.303 519.407L338.303 519.407L335.303 519.407L335.303 542.7L338.303 542.7ZM338.303 519.407L341.303 519.407C341.303 516.274 340.723 513.399 339.146 511.191L336.704 512.934L334.263 514.678C334.817 515.453 335.303 516.893 335.303 519.407L338.303 519.407ZM336.704 512.934L339.146 511.191C337.428 508.786 334.858 507.697 331.95 507.697L331.95 510.697L331.95 513.697C333.25 513.697 333.85 514.1 334.263 514.678L336.704 512.934ZM331.95 510.697L331.95 507.697C329.042 507.697 326.472 508.786 324.754 511.191L327.195 512.934L329.637 514.678C330.049 514.1 330.65 513.697 331.95 513.697L331.95 510.697ZM327.195 512.934L324.734 511.22C323.199 513.423 322.637 516.286 322.637 519.407L325.637 519.407L328.637 519.407C328.637 516.881 329.114 515.429 329.657 514.649L327.195 512.934ZM325.637 519.407L322.637 519.407L322.637 542.7L325.637 542.7L328.637 542.7L328.637 519.407L325.637 519.407ZM381.969 560L378.969 560L378.969 563L381.969 563L381.969 560ZM381.969 545.297L379.45 543.667L378.969 544.411L378.969 545.297L381.969 545.297ZM382.408 544.618L384.927 546.248L385.408 545.504L385.408 544.618L382.408 544.618ZM382.408 519.487L385.408 519.487L385.408 516.487L382.408 516.487L382.408 519.487ZM382.089 519.487L382.089 516.487L380.382 516.487L379.51 517.954L382.089 519.487ZM371.021 538.105L368.443 536.572L365.748 541.105L371.021 541.105L371.021 538.105ZM387.402 538.105L387.402 541.105L387.843 541.105L388.265 540.979L387.402 538.105ZM388.601 537.746L388.601 534.746L388.161 534.746L387.739 534.872L388.601 537.746ZM401.426 537.746L404.426 537.746L404.426 534.746L401.426 534.746L401.426 537.746ZM401.426 548.533L401.426 551.533L404.426 551.533L404.426 548.533L401.426 548.533ZM358.156 548.533L355.156 548.533L355.156 551.533L358.156 551.533L358.156 548.533ZM358.156 538.625L355.685 536.924L355.156 537.692L355.156 538.625L358.156 538.625ZM383.487 501.827L383.487 498.827L381.91 498.827L381.016 500.126L383.487 501.827ZM394.754 501.827L397.754 501.827L397.754 498.827L394.754 498.827L394.754 501.827ZM394.754 560L394.754 563L397.754 563L397.754 560L394.754 560ZM381.969 560L384.969 560L384.969 545.297L381.969 545.297L378.969 545.297L378.969 560L381.969 560ZM381.969 545.297L384.487 546.927L384.927 546.248L382.408 544.618L379.89 542.988L379.45 543.667L381.969 545.297ZM382.408 544.618L385.408 544.618L385.408 519.487L382.408 519.487L379.408 519.487L379.408 544.618L382.408 544.618ZM382.408 519.487L382.408 516.487L382.089 516.487L382.089 519.487L382.089 522.487L382.408 522.487L382.408 519.487ZM382.089 519.487L379.51 517.954L368.443 536.572L371.021 538.105L373.6 539.638L384.667 521.02L382.089 519.487ZM371.021 538.105L371.021 541.105L387.402 541.105L387.402 538.105L387.402 535.105L371.021 535.105L371.021 538.105ZM387.402 538.105L388.265 540.979L389.463 540.619L388.601 537.746L387.739 534.872L386.54 535.232L387.402 538.105ZM388.601 537.746L388.601 540.746L401.426 540.746L401.426 537.746L401.426 534.746L388.601 534.746L388.601 537.746ZM401.426 537.746L398.426 537.746L398.426 548.533L401.426 548.533L404.426 548.533L404.426 537.746L401.426 537.746ZM401.426 548.533L401.426 545.533L358.156 545.533L358.156 548.533L358.156 551.533L401.426 551.533L401.426 548.533ZM358.156 548.533L361.156 548.533L361.156 538.625L358.156 538.625L355.156 538.625L355.156 548.533L358.156 548.533ZM358.156 538.625L360.627 540.326L385.958 503.528L383.487 501.827L381.016 500.126L355.685 536.924L358.156 538.625ZM383.487 501.827L383.487 504.827L394.754 504.827L394.754 501.827L394.754 498.827L383.487 498.827L383.487 501.827ZM394.754 501.827L391.754 501.827L391.754 560L394.754 560L397.754 560L397.754 501.827L394.754 501.827ZM394.754 560L394.754 557L381.969 557L381.969 560L381.969 563L394.754 563L394.754 560ZM407.136 560L404.136 560L404.136 563L407.136 563L407.136 560ZM407.136 551.33L404.976 549.249L404.136 550.12L404.136 551.33L407.136 551.33ZM428.152 529.515L430.313 531.597L430.373 531.534L430.43 531.468L428.152 529.515ZM423.038 512.615L425.205 514.69L425.216 514.678L425.227 514.667L423.038 512.615ZM421.24 521.644L421.24 524.644L424.24 524.644L424.24 521.644L421.24 521.644ZM407.136 521.644L404.136 521.644L404.136 524.644L407.136 524.644L407.136 521.644ZM442.855 505.343L440.901 507.62L440.912 507.629L442.855 505.343ZM447.969 517.09L450.969 517.09L450.969 517.082L450.969 517.074L447.969 517.09ZM445.612 526.958L442.974 525.53L442.969 525.54L442.964 525.549L445.612 526.958ZM438.98 535.828L436.811 533.755L436.748 533.821L436.69 533.89L438.98 535.828ZM427.952 548.853L425.663 546.914L421.482 551.853L427.952 551.853L427.952 548.853ZM449.328 548.853L452.328 548.853L452.328 545.853L449.328 545.853L449.328 548.853ZM449.328 560L449.328 563L452.328 563L452.328 560L449.328 560ZM407.136 560L410.136 560L410.136 551.33L407.136 551.33L404.136 551.33L404.136 560L407.136 560ZM407.136 551.33L409.297 553.411L430.313 531.597L428.152 529.515L425.992 527.434L404.976 549.249L407.136 551.33ZM428.152 529.515L430.43 531.468C432.133 529.481 433.61 527.434 434.852 525.325L432.267 523.802L429.682 522.279C428.634 524.059 427.368 525.821 425.874 527.563L428.152 529.515ZM432.267 523.802L434.852 525.325C436.245 522.96 436.985 520.428 436.985 517.769L433.985 517.769L430.985 517.769C430.985 519.265 430.58 520.755 429.682 522.279L432.267 523.802ZM433.985 517.769L436.985 517.769C436.985 514.895 436.35 512.083 434.338 510.164L432.267 512.335L430.197 514.506C430.475 514.771 430.985 515.582 430.985 517.769L433.985 517.769ZM432.267 512.335L434.338 510.164C432.536 508.447 430.241 507.697 427.753 507.697L427.753 510.697L427.753 513.697C428.993 513.697 429.708 514.04 430.197 514.506L432.267 512.335ZM427.753 510.697L427.753 507.697C425.08 507.697 422.681 508.61 420.849 510.563L423.038 512.615L425.227 514.667C425.793 514.063 426.537 513.697 427.753 513.697L427.753 510.697ZM423.038 512.615L420.871 510.54C419.776 511.684 419.145 513.17 418.775 514.693C418.399 516.235 418.24 518.026 418.24 520.006L421.24 520.006L424.24 520.006C424.24 518.311 424.38 517.032 424.605 516.111C424.833 515.17 425.102 514.797 425.205 514.69L423.038 512.615ZM421.24 520.006L418.24 520.006L418.24 521.644L421.24 521.644L424.24 521.644L424.24 520.006L421.24 520.006ZM421.24 521.644L421.24 518.644L407.136 518.644L407.136 521.644L407.136 524.644L421.24 524.644L421.24 521.644ZM407.136 521.644L410.136 521.644L410.136 518.208L407.136 518.208L404.136 518.208L404.136 521.644L407.136 521.644ZM407.136 518.208L410.136 518.208C410.136 514.119 411.659 510.837 414.829 508.152L412.89 505.863L410.951 503.574C406.449 507.387 404.136 512.336 404.136 518.208L407.136 518.208ZM412.89 505.863L414.829 508.152C418.002 505.463 422.294 503.988 427.992 503.988L427.992 500.988L427.992 497.988C421.225 497.988 415.449 499.763 410.951 503.574L412.89 505.863ZM427.992 500.988L427.992 503.988C434.126 503.988 438.266 505.358 440.901 507.62L442.855 505.343L444.809 503.067C440.678 499.522 434.91 497.988 427.992 497.988L427.992 500.988ZM442.855 505.343L440.912 507.629C443.547 509.869 444.947 512.912 444.969 517.106L447.969 517.09L450.969 517.074C450.938 511.359 448.929 506.57 444.799 503.058L442.855 505.343ZM447.969 517.09L444.969 517.09C444.969 520.324 444.282 523.113 442.974 525.53L445.612 526.958L448.25 528.386C450.085 524.996 450.969 521.207 450.969 517.09L447.969 517.09ZM445.612 526.958L442.964 525.549C441.576 528.156 439.546 530.894 436.811 533.755L438.98 535.828L441.148 537.901C444.167 534.743 446.558 531.567 448.26 528.367L445.612 526.958ZM438.98 535.828L436.69 533.89L425.663 546.914L427.952 548.853L430.242 550.791L441.269 537.766L438.98 535.828ZM427.952 548.853L427.952 551.853L449.328 551.853L449.328 548.853L449.328 545.853L427.952 545.853L427.952 548.853ZM449.328 548.853L446.328 548.853L446.328 560L449.328 560L452.328 560L452.328 548.853L449.328 548.853ZM449.328 560L449.328 557L407.136 557L407.136 560L407.136 563L449.328 563L449.328 560ZM490.836 506.382L488.715 508.503L488.723 508.511L488.731 508.519L490.836 506.382ZM490.597 555.565L488.546 553.376L488.538 553.383L490.597 555.565ZM476.014 560.839L476.027 557.839L476.026 557.839L476.014 560.839ZM461.151 555.525L459.037 557.654L459.045 557.662L461.151 555.525ZM471.259 549.093L468.797 550.807L468.807 550.822L468.818 550.836L471.259 549.093ZM471.259 512.934L468.818 511.191L468.807 511.205L468.797 511.22L471.259 512.934ZM455.797 539.863L458.797 539.863L458.797 521.964L455.797 521.964L452.797 521.964L452.797 539.863L455.797 539.863ZM455.797 521.964L458.797 521.964C458.797 515.817 460.438 511.5 463.328 508.568L461.191 506.462L459.054 504.356C454.751 508.722 452.797 514.74 452.797 521.964L455.797 521.964ZM461.191 506.462L463.328 508.568C466.236 505.616 470.337 503.988 476.014 503.988L476.014 500.988L476.014 497.988C469.118 497.988 463.337 500.01 459.054 504.356L461.191 506.462ZM476.014 500.988L476.014 503.988C481.703 503.988 485.809 505.597 488.715 508.503L490.836 506.382L492.958 504.261C488.673 499.976 482.896 497.988 476.014 497.988L476.014 500.988ZM490.836 506.382L488.731 508.519C491.607 511.353 493.27 515.666 493.27 521.964L496.27 521.964L499.27 521.964C499.27 514.625 497.311 508.55 492.942 504.245L490.836 506.382ZM496.27 521.964L493.27 521.964L493.27 539.863L496.27 539.863L499.27 539.863L499.27 521.964L496.27 521.964ZM496.27 539.863L493.27 539.863C493.27 546.25 491.539 550.572 488.546 553.376L490.597 555.565L492.647 557.755C497.219 553.473 499.27 547.327 499.27 539.863L496.27 539.863ZM490.597 555.565L488.538 553.383C485.43 556.315 481.352 557.863 476.027 557.839L476.014 560.839L476 563.839C482.608 563.869 488.252 561.901 492.655 557.747L490.597 555.565ZM476.014 560.839L476.026 557.839C470.252 557.815 466.129 556.218 463.256 553.388L461.151 555.525L459.045 557.662C463.311 561.864 469.096 563.81 476.001 563.839L476.014 560.839ZM461.151 555.525L463.264 553.396C460.447 550.6 458.797 546.267 458.797 539.863L455.797 539.863L452.797 539.863C452.797 547.257 454.716 553.365 459.037 557.654L461.151 555.525ZM469.701 542.7L466.701 542.7C466.701 545.782 467.268 548.612 468.797 550.807L471.259 549.093L473.721 547.378C473.172 546.59 472.701 545.158 472.701 542.7L469.701 542.7ZM471.259 549.093L468.818 550.836C470.536 553.242 473.105 554.33 476.014 554.33L476.014 551.33L476.014 548.33C474.713 548.33 474.113 547.927 473.7 547.349L471.259 549.093ZM476.014 551.33L476.014 554.33C478.922 554.33 481.491 553.242 483.209 550.836L480.768 549.093L478.327 547.349C477.914 547.927 477.314 548.33 476.014 548.33L476.014 551.33ZM480.768 549.093L483.209 550.836C484.781 548.636 485.366 545.794 485.366 542.7L482.366 542.7L479.366 542.7C479.366 545.146 478.886 546.566 478.327 547.349L480.768 549.093ZM482.366 542.7L485.366 542.7L485.366 519.407L482.366 519.407L479.366 519.407L479.366 542.7L482.366 542.7ZM482.366 519.407L485.366 519.407C485.366 516.274 484.787 513.399 483.209 511.191L480.768 512.934L478.327 514.678C478.88 515.453 479.366 516.893 479.366 519.407L482.366 519.407ZM480.768 512.934L483.209 511.191C481.491 508.786 478.922 507.697 476.014 507.697L476.014 510.697L476.014 513.697C477.314 513.697 477.914 514.1 478.327 514.678L480.768 512.934ZM476.014 510.697L476.014 507.697C473.105 507.697 470.536 508.786 468.818 511.191L471.259 512.934L473.7 514.678C474.113 514.1 474.713 513.697 476.014 513.697L476.014 510.697ZM471.259 512.934L468.797 511.22C467.263 513.423 466.701 516.286 466.701 519.407L469.701 519.407L472.701 519.407C472.701 516.881 473.177 515.429 473.721 514.649L471.259 512.934ZM469.701 519.407L466.701 519.407L466.701 542.7L469.701 542.7L472.701 542.7L472.701 519.407L469.701 519.407ZM528.427 534.669L526.096 532.78L526.09 532.788L526.084 532.795L528.427 534.669ZM535.019 529.835L535.869 532.712L538.019 532.077L538.019 529.835L535.019 529.835ZM535.019 529.675L538.019 529.675L538.019 527.734L536.249 526.939L535.019 529.675ZM529.226 524.841L526.734 526.512L526.746 526.529L526.758 526.547L529.226 524.841ZM532.142 505.223L530.238 502.906L530.229 502.913L532.142 505.223ZM560.749 505.343L558.795 507.62L558.805 507.628L558.815 507.636L560.749 505.343ZM563.546 525.04L561.087 523.322L561.083 523.328L563.546 525.04ZM557.753 529.635L556.699 526.826L554.753 527.556L554.753 529.635L557.753 529.635ZM557.753 529.795L554.753 529.795L554.753 532.082L556.958 532.688L557.753 529.795ZM564.425 534.629L562.073 536.491L562.083 536.505L562.094 536.518L564.425 534.629ZM561.668 556.364L559.842 553.984L559.834 553.99L561.668 556.364ZM531.223 556.364L529.397 558.745L531.223 556.364ZM541.252 549.452L538.986 551.419L539.006 551.441L539.026 551.464L541.252 549.452ZM551.44 535.868L549.276 537.946L549.297 537.968L549.319 537.989L551.44 535.868ZM542.051 524.601L539.721 526.491L539.73 526.502L539.739 526.513L542.051 524.601ZM550.801 524.601L548.492 522.685L548.489 522.689L550.801 524.601ZM551 512.455L548.63 514.293L548.651 514.32L548.672 514.347L551 512.455ZM541.851 512.375L539.542 510.459L539.53 510.474L539.518 510.489L541.851 512.375ZM525.39 544.178L528.39 544.178C528.39 540.926 529.242 538.452 530.769 536.543L528.427 534.669L526.084 532.795C523.562 535.947 522.39 539.813 522.39 544.178L525.39 544.178ZM528.427 534.669L530.757 536.558C532.551 534.345 534.272 533.184 535.869 532.712L535.019 529.835L534.169 526.958C531.078 527.871 528.404 529.933 526.096 532.78L528.427 534.669ZM535.019 529.835L538.019 529.835L538.019 529.675L535.019 529.675L532.019 529.675L532.019 529.835L535.019 529.835ZM535.019 529.675L536.249 526.939C534.382 526.1 532.877 524.847 531.693 523.135L529.226 524.841L526.758 526.547C528.558 529.15 530.915 531.12 533.789 532.411L535.019 529.675ZM529.226 524.841L531.717 523.17C530.659 521.593 530.028 519.47 530.028 516.61L527.028 516.61L524.028 516.61C524.028 520.356 524.862 523.72 526.734 526.512L529.226 524.841ZM527.028 516.61L530.028 516.61C530.028 512.657 531.393 509.739 534.056 507.534L532.142 505.223L530.229 502.913C526.073 506.354 524.028 511.027 524.028 516.61L527.028 516.61ZM532.142 505.223L534.047 507.541C536.775 505.3 540.794 503.988 546.486 503.988L546.486 500.988L546.486 497.988C539.925 497.988 534.382 499.5 530.238 502.906L532.142 505.223ZM546.486 500.988L546.486 503.988C552.163 503.988 556.13 505.332 558.795 507.62L560.749 505.343L562.703 503.067C558.603 499.547 553.061 497.988 546.486 497.988L546.486 500.988ZM560.749 505.343L558.815 507.636C561.519 509.918 562.863 512.82 562.863 516.61L565.863 516.61L568.863 516.61C568.863 511.131 566.798 506.522 562.684 503.05L560.749 505.343ZM565.863 516.61L562.863 516.61C562.863 519.568 562.197 521.734 561.087 523.322L563.546 525.04L566.005 526.759C567.985 523.925 568.863 520.471 568.863 516.61L565.863 516.61ZM563.546 525.04L561.083 523.328C559.889 525.045 558.436 526.175 556.699 526.826L557.753 529.635L558.806 532.444C561.757 531.338 564.166 529.404 566.009 526.753L563.546 525.04ZM557.753 529.635L554.753 529.635L554.753 529.795L557.753 529.795L560.753 529.795L560.753 529.635L557.753 529.635ZM557.753 529.795L556.958 532.688C558.605 533.14 560.327 534.286 562.073 536.491L564.425 534.629L566.777 532.767C564.474 529.859 561.748 527.781 558.547 526.902L557.753 529.795ZM564.425 534.629L562.094 536.518C563.638 538.423 564.501 540.903 564.501 544.178L567.501 544.178L570.501 544.178C570.501 539.783 569.314 535.896 566.755 532.74L564.425 534.629ZM567.501 544.178L564.501 544.178C564.501 548.439 562.95 551.6 559.842 553.984L561.668 556.364L563.494 558.745C568.164 555.162 570.501 550.199 570.501 544.178L567.501 544.178ZM561.668 556.364L559.834 553.99C556.63 556.465 552.271 557.839 546.486 557.839L546.486 560.839L546.486 563.839C553.219 563.839 558.982 562.23 563.502 558.738L561.668 556.364ZM546.486 560.839L546.486 557.839C540.672 557.839 536.282 556.464 533.049 553.984L531.223 556.364L529.397 558.745C533.942 562.231 539.728 563.839 546.486 563.839L546.486 560.839ZM531.223 556.364L533.049 553.984C529.942 551.6 528.39 548.439 528.39 544.178L525.39 544.178L522.39 544.178C522.39 550.199 524.727 555.162 529.397 558.745L531.223 556.364ZM539.414 542.66L536.414 542.66C536.414 546.052 537.059 549.199 538.986 551.419L541.252 549.452L543.517 547.486C542.993 546.882 542.414 545.501 542.414 542.66L539.414 542.66ZM541.252 549.452L539.026 551.464C540.952 553.595 543.557 554.53 546.446 554.53L546.446 551.53L546.446 548.53C544.913 548.53 544.055 548.08 543.477 547.441L541.252 549.452ZM546.446 551.53L546.446 554.53C549.337 554.53 551.932 553.56 553.825 551.379L551.56 549.412L549.294 547.446C548.737 548.088 547.922 548.53 546.446 548.53L546.446 551.53ZM551.56 549.412L553.825 551.379C555.749 549.162 556.398 546.034 556.398 542.66L553.398 542.66L550.398 542.66C550.398 545.466 549.821 546.839 549.294 547.446L551.56 549.412ZM553.398 542.66L556.398 542.66C556.398 539.191 555.725 535.91 553.561 533.747L551.44 535.868L549.319 537.989C549.765 538.436 550.398 539.683 550.398 542.66L553.398 542.66ZM551.44 535.868L553.604 533.79C551.694 531.801 549.214 530.87 546.446 530.87L546.446 533.87L546.446 536.87C547.78 536.87 548.629 537.271 549.276 537.946L551.44 535.868ZM546.446 533.87L546.446 530.87C543.677 530.87 541.197 531.799 539.25 533.747L541.372 535.868L543.493 537.989C544.209 537.273 545.112 536.87 546.446 536.87L546.446 533.87ZM541.372 535.868L539.25 533.747C537.086 535.91 536.414 539.191 536.414 542.66L539.414 542.66L542.414 542.66C542.414 539.683 543.046 538.436 543.493 537.989L541.372 535.868ZM540.333 518.448L537.333 518.448C537.333 521.508 537.977 524.341 539.721 526.491L542.051 524.601L544.38 522.711C543.834 522.037 543.333 520.769 543.333 518.448L540.333 518.448ZM542.051 524.601L539.739 526.513C541.449 528.581 543.759 529.679 546.446 529.679L546.446 526.679L546.446 523.679C545.563 523.679 544.943 523.391 544.363 522.689L542.051 524.601ZM546.446 526.679L546.446 529.679C549.121 529.679 551.412 528.569 553.113 526.513L550.801 524.601L548.489 522.689C547.899 523.403 547.286 523.679 546.446 523.679L546.446 526.679ZM550.801 524.601L553.109 526.517C554.895 524.365 555.559 521.521 555.559 518.448L552.559 518.448L549.559 518.448C549.559 520.755 549.05 522.013 548.492 522.685L550.801 524.601ZM552.559 518.448L555.559 518.448C555.559 515.455 555.006 512.627 553.329 510.563L551 512.455L548.672 514.347C549.073 514.84 549.559 516.007 549.559 518.448L552.559 518.448ZM551 512.455L553.371 510.617C551.662 508.413 549.165 507.497 546.446 507.497L546.446 510.497L546.446 513.497C547.775 513.497 548.314 513.887 548.63 514.293L551 512.455ZM546.446 510.497L546.446 507.497C543.767 507.497 541.287 508.356 539.542 510.459L541.851 512.375L544.16 514.291C544.492 513.89 545.076 513.497 546.446 513.497L546.446 510.497ZM541.851 512.375L539.518 510.489C537.855 512.546 537.333 515.421 537.333 518.448L540.333 518.448L543.333 518.448C543.333 515.881 543.822 514.708 544.184 514.261L541.851 512.375ZM576.448 534.669L574.117 532.78L574.111 532.788L574.105 532.795L576.448 534.669ZM583.04 529.835L583.89 532.712L586.04 532.077L586.04 529.835L583.04 529.835ZM583.04 529.675L586.04 529.675L586.04 527.734L584.27 526.939L583.04 529.675ZM577.247 524.841L574.755 526.512L574.767 526.529L574.779 526.547L577.247 524.841ZM580.163 505.223L578.259 502.906L578.25 502.913L580.163 505.223ZM608.77 505.343L606.817 507.62L606.826 507.628L606.836 507.636L608.77 505.343ZM611.567 525.04L609.108 523.322L609.104 523.328L611.567 525.04ZM605.774 529.635L604.72 526.826L602.774 527.556L602.774 529.635L605.774 529.635ZM605.774 529.795L602.774 529.795L602.774 532.082L604.979 532.688L605.774 529.795ZM612.446 534.629L610.094 536.491L610.105 536.505L610.116 536.518L612.446 534.629ZM609.689 556.364L607.863 553.984L607.855 553.99L609.689 556.364ZM579.245 556.364L577.419 558.745L579.245 556.364ZM589.273 549.452L587.007 551.419L587.027 551.441L587.047 551.464L589.273 549.452ZM599.461 535.868L597.297 537.946L597.318 537.968L597.34 537.989L599.461 535.868ZM590.072 524.601L587.742 526.491L587.751 526.502L587.76 526.513L590.072 524.601ZM598.822 524.601L596.514 522.685L596.51 522.689L598.822 524.601ZM599.022 512.455L596.651 514.294L596.672 514.32L596.693 514.347L599.022 512.455ZM589.872 512.375L587.564 510.459L587.551 510.474L587.539 510.489L589.872 512.375ZM573.411 544.178L576.411 544.178C576.411 540.926 577.263 538.452 578.79 536.543L576.448 534.669L574.105 532.795C571.583 535.947 570.411 539.813 570.411 544.178L573.411 544.178ZM576.448 534.669L578.778 536.558C580.572 534.345 582.293 533.184 583.89 532.712L583.04 529.835L582.19 526.958C579.099 527.871 576.425 529.933 574.117 532.78L576.448 534.669ZM583.04 529.835L586.04 529.835L586.04 529.675L583.04 529.675L580.04 529.675L580.04 529.835L583.04 529.835ZM583.04 529.675L584.27 526.939C582.403 526.1 580.898 524.847 579.715 523.135L577.247 524.841L574.779 526.547C576.579 529.15 578.936 531.12 581.81 532.411L583.04 529.675ZM577.247 524.841L579.738 523.17C578.681 521.593 578.049 519.47 578.049 516.61L575.049 516.61L572.049 516.61C572.049 520.356 572.883 523.72 574.755 526.512L577.247 524.841ZM575.049 516.61L578.049 516.61C578.049 512.657 579.414 509.739 582.077 507.534L580.163 505.223L578.25 502.913C574.094 506.354 572.049 511.027 572.049 516.61L575.049 516.61ZM580.163 505.223L582.068 507.541C584.796 505.3 588.815 503.988 594.507 503.988L594.507 500.988L594.507 497.988C587.946 497.988 582.403 499.5 578.259 502.906L580.163 505.223ZM594.507 500.988L594.507 503.988C600.184 503.988 604.151 505.332 606.817 507.62L608.77 505.343L610.724 503.067C606.624 499.547 601.082 497.988 594.507 497.988L594.507 500.988ZM608.77 505.343L606.836 507.636C609.54 509.918 610.884 512.82 610.884 516.61L613.884 516.61L616.884 516.61C616.884 511.131 614.82 506.522 610.705 503.05L608.77 505.343ZM613.884 516.61L610.884 516.61C610.884 519.568 610.218 521.734 609.108 523.322L611.567 525.04L614.026 526.759C616.006 523.925 616.884 520.471 616.884 516.61L613.884 516.61ZM611.567 525.04L609.104 523.328C607.91 525.045 606.457 526.175 604.72 526.826L605.774 529.635L606.827 532.444C609.778 531.338 612.187 529.404 614.03 526.753L611.567 525.04ZM605.774 529.635L602.774 529.635L602.774 529.795L605.774 529.795L608.774 529.795L608.774 529.635L605.774 529.635ZM605.774 529.795L604.979 532.688C606.627 533.14 608.348 534.286 610.094 536.491L612.446 534.629L614.798 532.767C612.496 529.859 609.769 527.781 606.569 526.902L605.774 529.795ZM612.446 534.629L610.116 536.518C611.659 538.423 612.523 540.903 612.523 544.178L615.523 544.178L618.523 544.178C618.523 539.783 617.335 535.896 614.777 532.74L612.446 534.629ZM615.523 544.178L612.523 544.178C612.523 548.439 610.971 551.6 607.863 553.984L609.689 556.364L611.515 558.745C616.185 555.162 618.523 550.199 618.523 544.178L615.523 544.178ZM609.689 556.364L607.855 553.99C604.651 556.465 600.292 557.839 594.507 557.839L594.507 560.839L594.507 563.839C601.241 563.839 607.003 562.23 611.523 558.738L609.689 556.364ZM594.507 560.839L594.507 557.839C588.693 557.839 584.303 556.464 581.071 553.984L579.245 556.364L577.419 558.745C581.963 562.231 587.749 563.839 594.507 563.839L594.507 560.839ZM579.245 556.364L581.071 553.984C577.963 551.6 576.411 548.439 576.411 544.178L573.411 544.178L570.411 544.178C570.411 550.199 572.748 555.162 577.419 558.745L579.245 556.364ZM587.435 542.66L584.435 542.66C584.435 546.052 585.081 549.199 587.007 551.419L589.273 549.452L591.539 547.486C591.015 546.882 590.435 545.501 590.435 542.66L587.435 542.66ZM589.273 549.452L587.047 551.464C588.973 553.595 591.579 554.53 594.467 554.53L594.467 551.53L594.467 548.53C592.934 548.53 592.076 548.08 591.499 547.441L589.273 549.452ZM594.467 551.53L594.467 554.53C597.359 554.53 599.954 553.56 601.847 551.379L599.581 549.412L597.315 547.446C596.758 548.088 595.944 548.53 594.467 548.53L594.467 551.53ZM599.581 549.412L601.847 551.379C603.77 549.162 604.419 546.034 604.419 542.66L601.419 542.66L598.419 542.66C598.419 545.466 597.842 546.839 597.315 547.446L599.581 549.412ZM601.419 542.66L604.419 542.66C604.419 539.191 603.746 535.91 601.582 533.747L599.461 535.868L597.34 537.989C597.786 538.436 598.419 539.683 598.419 542.66L601.419 542.66ZM599.461 535.868L601.625 533.79C599.715 531.801 597.235 530.87 594.467 530.87L594.467 533.87L594.467 536.87C595.801 536.87 596.65 537.271 597.297 537.946L599.461 535.868ZM594.467 533.87L594.467 530.87C591.698 530.87 589.219 531.799 587.271 533.747L589.393 535.868L591.514 537.989C592.23 537.273 593.134 536.87 594.467 536.87L594.467 533.87ZM589.393 535.868L587.271 533.747C585.108 535.91 584.435 539.191 584.435 542.66L587.435 542.66L590.435 542.66C590.435 539.683 591.068 538.436 591.514 537.989L589.393 535.868ZM588.354 518.448L585.354 518.448C585.354 521.508 585.998 524.341 587.742 526.491L590.072 524.601L592.402 522.711C591.855 522.037 591.354 520.769 591.354 518.448L588.354 518.448ZM590.072 524.601L587.76 526.513C589.471 528.581 591.781 529.679 594.467 529.679L594.467 526.679L594.467 523.679C593.584 523.679 592.964 523.391 592.384 522.689L590.072 524.601ZM594.467 526.679L594.467 529.679C597.142 529.679 599.433 528.569 601.134 526.513L598.822 524.601L596.51 522.689C595.92 523.403 595.308 523.679 594.467 523.679L594.467 526.679ZM598.822 524.601L601.13 526.517C602.917 524.365 603.58 521.521 603.58 518.448L600.58 518.448L597.58 518.448C597.58 520.755 597.071 522.013 596.514 522.685L598.822 524.601ZM600.58 518.448L603.58 518.448C603.58 515.455 603.027 512.627 601.35 510.563L599.022 512.455L596.693 514.347C597.094 514.84 597.58 516.007 597.58 518.448L600.58 518.448ZM599.022 512.455L601.392 510.617C599.683 508.413 597.186 507.497 594.467 507.497L594.467 510.497L594.467 513.497C595.796 513.497 596.336 513.887 596.651 514.294L599.022 512.455ZM594.467 510.497L594.467 507.497C591.788 507.497 589.309 508.356 587.564 510.459L589.872 512.375L592.181 514.291C592.513 513.89 593.097 513.497 594.467 513.497L594.467 510.497ZM589.872 512.375L587.539 510.489C585.877 512.546 585.354 515.421 585.354 518.448L588.354 518.448L591.354 518.448C591.354 515.881 591.844 514.708 592.205 514.261L589.872 512.375ZM624.469 534.669L622.138 532.78L622.132 532.788L622.126 532.795L624.469 534.669ZM631.061 529.835L631.911 532.712L634.061 532.077L634.061 529.835L631.061 529.835ZM631.061 529.675L634.061 529.675L634.061 527.734L632.291 526.939L631.061 529.675ZM625.268 524.841L622.777 526.512L622.788 526.529L622.8 526.547L625.268 524.841ZM628.185 505.223L626.28 502.906L626.271 502.913L628.185 505.223ZM656.792 505.343L654.838 507.62L654.847 507.628L654.857 507.636L656.792 505.343ZM659.588 525.04L657.129 523.322L657.125 523.328L659.588 525.04ZM653.795 529.635L652.742 526.826L650.795 527.556L650.795 529.635L653.795 529.635ZM653.795 529.795L650.795 529.795L650.795 532.082L653 532.688L653.795 529.795ZM660.467 534.629L658.115 536.491L658.126 536.505L658.137 536.518L660.467 534.629ZM657.711 556.364L655.885 553.984L655.877 553.99L657.711 556.364ZM627.266 556.364L625.44 558.745L627.266 556.364ZM637.294 549.452L635.029 551.419L635.048 551.441L635.069 551.464L637.294 549.452ZM647.482 535.868L645.318 537.946L645.339 537.968L645.361 537.989L647.482 535.868ZM638.093 524.601L635.764 526.491L635.772 526.502L635.781 526.513L638.093 524.601ZM646.843 524.601L644.535 522.685L644.531 522.689L646.843 524.601ZM647.043 512.455L644.672 514.294L644.693 514.32L644.715 514.347L647.043 512.455ZM637.893 512.375L635.585 510.459L635.573 510.474L635.561 510.489L637.893 512.375ZM621.432 544.178L624.432 544.178C624.432 540.926 625.285 538.452 626.812 536.543L624.469 534.669L622.126 532.795C619.605 535.947 618.432 539.813 618.432 544.178L621.432 544.178ZM624.469 534.669L626.8 536.558C628.593 534.345 630.315 533.184 631.911 532.712L631.061 529.835L630.211 526.958C627.12 527.871 624.447 529.933 622.138 532.78L624.469 534.669ZM631.061 529.835L634.061 529.835L634.061 529.675L631.061 529.675L628.061 529.675L628.061 529.835L631.061 529.835ZM631.061 529.675L632.291 526.939C630.424 526.1 628.919 524.847 627.736 523.135L625.268 524.841L622.8 526.547C624.6 529.15 626.957 531.12 629.832 532.411L631.061 529.675ZM625.268 524.841L627.76 523.17C626.702 521.593 626.071 519.47 626.071 516.61L623.071 516.61L620.071 516.61C620.071 520.356 620.904 523.72 622.777 526.512L625.268 524.841ZM623.071 516.61L626.071 516.61C626.071 512.657 627.435 509.739 630.098 507.534L628.185 505.223L626.271 502.913C622.115 506.354 620.071 511.027 620.071 516.61L623.071 516.61ZM628.185 505.223L630.089 507.541C632.817 505.3 636.836 503.988 642.528 503.988L642.528 500.988L642.528 497.988C635.968 497.988 630.424 499.5 626.28 502.906L628.185 505.223ZM642.528 500.988L642.528 503.988C648.206 503.988 652.173 505.332 654.838 507.62L656.792 505.343L658.745 503.067C654.645 499.547 649.103 497.988 642.528 497.988L642.528 500.988ZM656.792 505.343L654.857 507.636C657.561 509.918 658.906 512.82 658.906 516.61L661.906 516.61L664.906 516.61C664.906 511.131 662.841 506.522 658.726 503.05L656.792 505.343ZM661.906 516.61L658.906 516.61C658.906 519.568 658.239 521.734 657.129 523.322L659.588 525.04L662.047 526.759C664.027 523.925 664.906 520.471 664.906 516.61L661.906 516.61ZM659.588 525.04L657.125 523.328C655.932 525.045 654.479 526.175 652.742 526.826L653.795 529.635L654.848 532.444C657.799 531.338 660.209 529.404 662.052 526.753L659.588 525.04ZM653.795 529.635L650.795 529.635L650.795 529.795L653.795 529.795L656.795 529.795L656.795 529.635L653.795 529.635ZM653.795 529.795L653 532.688C654.648 533.14 656.369 534.286 658.115 536.491L660.467 534.629L662.82 532.767C660.517 529.859 657.79 527.781 654.59 526.902L653.795 529.795ZM660.467 534.629L658.137 536.518C659.681 538.423 660.544 540.903 660.544 544.178L663.544 544.178L666.544 544.178C666.544 539.783 665.356 535.896 662.798 532.74L660.467 534.629ZM663.544 544.178L660.544 544.178C660.544 548.439 658.992 551.6 655.885 553.984L657.711 556.364L659.536 558.745C664.207 555.162 666.544 550.199 666.544 544.178L663.544 544.178ZM657.711 556.364L655.877 553.99C652.672 556.465 648.313 557.839 642.528 557.839L642.528 560.839L642.528 563.839C649.262 563.839 655.025 562.23 659.544 558.738L657.711 556.364ZM642.528 560.839L642.528 557.839C636.714 557.839 632.325 556.464 629.092 553.984L627.266 556.364L625.44 558.745C629.984 562.231 635.77 563.839 642.528 563.839L642.528 560.839ZM627.266 556.364L629.092 553.984C625.984 551.6 624.432 548.439 624.432 544.178L621.432 544.178L618.432 544.178C618.432 550.199 620.77 555.162 625.44 558.745L627.266 556.364ZM635.456 542.66L632.456 542.66C632.456 546.052 633.102 549.199 635.029 551.419L637.294 549.452L639.56 547.486C639.036 546.882 638.456 545.501 638.456 542.66L635.456 542.66ZM637.294 549.452L635.069 551.464C636.994 553.595 639.6 554.53 642.488 554.53L642.488 551.53L642.488 548.53C640.955 548.53 640.098 548.08 639.52 547.441L637.294 549.452ZM642.488 551.53L642.488 554.53C645.38 554.53 647.975 553.56 649.868 551.379L647.602 549.412L645.337 547.446C644.779 548.088 643.965 548.53 642.488 548.53L642.488 551.53ZM647.602 549.412L649.868 551.379C651.791 549.162 652.44 546.034 652.44 542.66L649.44 542.66L646.44 542.66C646.44 545.466 645.864 546.839 645.337 547.446L647.602 549.412ZM649.44 542.66L652.44 542.66C652.44 539.191 651.767 535.91 649.604 533.747L647.482 535.868L645.361 537.989C645.808 538.436 646.44 539.683 646.44 542.66L649.44 542.66ZM647.482 535.868L649.647 533.79C647.737 531.801 645.256 530.87 642.488 530.87L642.488 533.87L642.488 536.87C643.822 536.87 644.671 537.271 645.318 537.946L647.482 535.868ZM642.488 533.87L642.488 530.87C639.72 530.87 637.24 531.799 635.293 533.747L637.414 535.868L639.535 537.989C640.252 537.273 641.155 536.87 642.488 536.87L642.488 533.87ZM637.414 535.868L635.293 533.747C633.129 535.91 632.456 539.191 632.456 542.66L635.456 542.66L638.456 542.66C638.456 539.683 639.089 538.436 639.535 537.989L637.414 535.868ZM636.375 518.448L633.375 518.448C633.375 521.508 634.019 524.341 635.764 526.491L638.093 524.601L640.423 522.711C639.877 522.037 639.375 520.769 639.375 518.448L636.375 518.448ZM638.093 524.601L635.781 526.513C637.492 528.581 639.802 529.679 642.488 529.679L642.488 526.679L642.488 523.679C641.605 523.679 640.985 523.391 640.405 522.689L638.093 524.601ZM642.488 526.679L642.488 529.679C645.163 529.679 647.455 528.569 649.155 526.513L646.843 524.601L644.531 522.689C643.941 523.403 643.329 523.679 642.488 523.679L642.488 526.679ZM646.843 524.601L649.151 526.517C650.938 524.365 651.601 521.521 651.601 518.448L648.601 518.448L645.601 518.448C645.601 520.755 645.092 522.013 644.535 522.685L646.843 524.601ZM648.601 518.448L651.601 518.448C651.601 515.455 651.048 512.627 649.371 510.563L647.043 512.455L644.715 514.347C645.115 514.84 645.601 516.007 645.601 518.448L648.601 518.448ZM647.043 512.455L649.414 510.617C647.705 508.413 645.208 507.497 642.488 507.497L642.488 510.497L642.488 513.497C643.817 513.497 644.357 513.887 644.672 514.294L647.043 512.455ZM642.488 510.497L642.488 507.497C639.809 507.497 637.33 508.356 635.585 510.459L637.893 512.375L640.202 514.291C640.535 513.89 641.118 513.497 642.488 513.497L642.488 510.497ZM637.893 512.375L635.561 510.489C633.898 512.546 633.375 515.421 633.375 518.448L636.375 518.448L639.375 518.448C639.375 515.881 639.865 514.708 640.226 514.261L637.893 512.375ZM705.452 506.382L703.331 508.503L703.339 508.511L703.347 508.519L705.452 506.382ZM705.212 555.565L703.162 553.376L703.154 553.383L705.212 555.565ZM690.629 560.839L690.643 557.839L690.642 557.839L690.629 560.839ZM675.766 555.525L673.653 557.654L673.661 557.662L675.766 555.525ZM685.875 549.093L683.413 550.807L683.423 550.822L683.434 550.836L685.875 549.093ZM685.875 512.934L683.434 511.191L683.423 511.205L683.413 511.22L685.875 512.934ZM670.413 539.863L673.413 539.863L673.413 521.964L670.413 521.964L667.413 521.964L667.413 539.863L670.413 539.863ZM670.413 521.964L673.413 521.964C673.413 515.817 675.054 511.5 677.943 508.568L675.806 506.462L673.67 504.356C669.367 508.722 667.413 514.74 667.413 521.964L670.413 521.964ZM675.806 506.462L677.943 508.568C680.852 505.616 684.952 503.988 690.629 503.988L690.629 500.988L690.629 497.988C683.734 497.988 677.952 500.01 673.67 504.356L675.806 506.462ZM690.629 500.988L690.629 503.988C696.319 503.988 700.424 505.597 703.331 508.503L705.452 506.382L707.573 504.261C703.288 499.976 697.512 497.988 690.629 497.988L690.629 500.988ZM705.452 506.382L703.347 508.519C706.223 511.353 707.886 515.666 707.886 521.964L710.886 521.964L713.886 521.964C713.886 514.625 711.927 508.55 707.558 504.245L705.452 506.382ZM710.886 521.964L707.886 521.964L707.886 539.863L710.886 539.863L713.886 539.863L713.886 521.964L710.886 521.964ZM710.886 539.863L707.886 539.863C707.886 546.25 706.154 550.572 703.162 553.376L705.212 555.565L707.263 557.755C711.835 553.473 713.886 547.327 713.886 539.863L710.886 539.863ZM705.212 555.565L703.154 553.383C700.046 556.315 695.968 557.863 690.643 557.839L690.629 560.839L690.616 563.839C697.223 563.869 702.868 561.901 707.271 557.747L705.212 555.565ZM690.629 560.839L690.642 557.839C684.868 557.815 680.745 556.218 677.872 553.388L675.766 555.525L673.661 557.662C677.927 561.864 683.712 563.81 690.617 563.839L690.629 560.839ZM675.766 555.525L677.88 553.396C675.063 550.6 673.413 546.267 673.413 539.863L670.413 539.863L667.413 539.863C667.413 547.257 669.332 553.365 673.653 557.654L675.766 555.525ZM684.317 542.7L681.317 542.7C681.317 545.782 681.884 548.612 683.413 550.807L685.875 549.093L688.337 547.378C687.788 546.59 687.317 545.158 687.317 542.7L684.317 542.7ZM685.875 549.093L683.434 550.836C685.152 553.242 687.721 554.33 690.629 554.33L690.629 551.33L690.629 548.33C689.329 548.33 688.729 547.927 688.316 547.349L685.875 549.093ZM690.629 551.33L690.629 554.33C693.538 554.33 696.107 553.242 697.825 550.836L695.384 549.093L692.943 547.349C692.53 547.927 691.93 548.33 690.629 548.33L690.629 551.33ZM695.384 549.093L697.825 550.836C699.397 548.636 699.982 545.794 699.982 542.7L696.982 542.7L693.982 542.7C693.982 545.146 693.502 546.566 692.943 547.349L695.384 549.093ZM696.982 542.7L699.982 542.7L699.982 519.407L696.982 519.407L693.982 519.407L693.982 542.7L696.982 542.7ZM696.982 519.407L699.982 519.407C699.982 516.274 699.402 513.399 697.825 511.191L695.384 512.934L692.943 514.678C693.496 515.453 693.982 516.893 693.982 519.407L696.982 519.407ZM695.384 512.934L697.825 511.191C696.107 508.786 693.538 507.697 690.629 507.697L690.629 510.697L690.629 513.697C691.93 513.697 692.53 514.1 692.943 514.678L695.384 512.934ZM690.629 510.697L690.629 507.697C687.721 507.697 685.152 508.786 683.434 511.191L685.875 512.934L688.316 514.678C688.729 514.1 689.329 513.697 690.629 513.697L690.629 510.697ZM685.875 512.934L683.413 511.22C681.879 513.423 681.317 516.286 681.317 519.407L684.317 519.407L687.317 519.407C687.317 516.881 687.793 515.429 688.337 514.649L685.875 512.934ZM684.317 519.407L681.317 519.407L681.317 542.7L684.317 542.7L687.317 542.7L687.317 519.407L684.317 519.407ZM776.004 506.382L773.883 508.503L773.891 508.511L773.898 508.519L776.004 506.382ZM775.764 555.565L773.713 553.376L773.706 553.383L775.764 555.565ZM761.181 560.839L761.195 557.839L761.194 557.839L761.181 560.839ZM746.318 555.525L744.205 557.654L744.213 557.662L746.318 555.525ZM756.427 549.093L753.965 550.807L753.975 550.822L753.986 550.836L756.427 549.093ZM756.427 512.934L753.986 511.191L753.975 511.205L753.965 511.22L756.427 512.934ZM740.965 539.863L743.965 539.863L743.965 521.964L740.965 521.964L737.965 521.964L737.965 539.863L740.965 539.863ZM740.965 521.964L743.965 521.964C743.965 515.817 745.606 511.5 748.495 508.568L746.358 506.462L744.221 504.356C739.919 508.722 737.965 514.74 737.965 521.964L740.965 521.964ZM746.358 506.462L748.495 508.568C751.404 505.616 755.504 503.988 761.181 503.988L761.181 500.988L761.181 497.988C754.286 497.988 748.504 500.01 744.221 504.356L746.358 506.462ZM761.181 500.988L761.181 503.988C766.871 503.988 770.976 505.597 773.883 508.503L776.004 506.382L778.125 504.261C773.84 499.976 768.064 497.988 761.181 497.988L761.181 500.988ZM776.004 506.382L773.898 508.519C776.774 511.353 778.438 515.666 778.438 521.964L781.438 521.964L784.438 521.964C784.438 514.625 782.479 508.55 778.11 504.245L776.004 506.382ZM781.438 521.964L778.438 521.964L778.438 539.863L781.438 539.863L784.438 539.863L784.438 521.964L781.438 521.964ZM781.438 539.863L778.438 539.863C778.438 546.25 776.706 550.573 773.714 553.376L775.764 555.565L777.815 557.755C782.387 553.473 784.438 547.327 784.438 539.863L781.438 539.863ZM775.764 555.565L773.706 553.383C770.597 556.315 766.52 557.863 761.195 557.839L761.181 560.839L761.168 563.839C767.775 563.869 773.42 561.901 777.823 557.747L775.764 555.565ZM761.181 560.839L761.194 557.839C755.42 557.815 751.297 556.218 748.424 553.388L746.318 555.525L744.213 557.662C748.479 561.864 754.264 563.81 761.169 563.839L761.181 560.839ZM746.318 555.525L748.432 553.396C745.615 550.6 743.965 546.267 743.965 539.863L740.965 539.863L737.965 539.863C737.965 547.257 739.884 553.365 744.205 557.654L746.318 555.525ZM754.869 542.7L751.869 542.7C751.869 545.782 752.436 548.612 753.965 550.807L756.427 549.093L758.889 547.378C758.34 546.59 757.869 545.158 757.869 542.7L754.869 542.7ZM756.427 549.093L753.986 550.836C755.703 553.242 758.273 554.33 761.181 554.33L761.181 551.33L761.181 548.33C759.881 548.33 759.281 547.927 758.868 547.349L756.427 549.093ZM761.181 551.33L761.181 554.33C764.089 554.33 766.659 553.242 768.377 550.836L765.936 549.093L763.495 547.349C763.082 547.927 762.481 548.33 761.181 548.33L761.181 551.33ZM765.936 549.093L768.377 550.836C769.949 548.636 770.534 545.794 770.534 542.7L767.534 542.7L764.534 542.7C764.534 545.146 764.054 546.566 763.495 547.349L765.936 549.093ZM767.534 542.7L770.534 542.7L770.534 519.407L767.534 519.407L764.534 519.407L764.534 542.7L767.534 542.7ZM767.534 519.407L770.534 519.407C770.534 516.274 769.954 513.399 768.377 511.191L765.936 512.934L763.495 514.678C764.048 515.453 764.534 516.893 764.534 519.407L767.534 519.407ZM765.936 512.934L768.377 511.191C766.659 508.786 764.089 507.697 761.181 507.697L761.181 510.697L761.181 513.697C762.481 513.697 763.082 514.1 763.495 514.678L765.936 512.934ZM761.181 510.697L761.181 507.697C758.273 507.697 755.703 508.786 753.986 511.191L756.427 512.934L758.868 514.678C759.281 514.1 759.881 513.697 761.181 513.697L761.181 510.697ZM756.427 512.934L753.965 511.22C752.431 513.423 751.869 516.286 751.869 519.407L754.869 519.407L757.869 519.407C757.869 516.881 758.345 515.429 758.889 514.649L756.427 512.934ZM754.869 519.407L751.869 519.407L751.869 542.7L754.869 542.7L757.869 542.7L757.869 519.407L754.869 519.407ZM811.2 560L808.2 560L808.2 563L811.2 563L811.2 560ZM811.2 545.297L808.681 543.667L808.2 544.411L808.2 545.297L811.2 545.297ZM811.64 544.618L814.158 546.248L814.64 545.504L814.64 544.618L811.64 544.618ZM811.64 519.487L814.64 519.487L814.64 516.487L811.64 516.487L811.64 519.487ZM811.32 519.487L811.32 516.487L809.613 516.487L808.741 517.954L811.32 519.487ZM800.253 538.105L797.674 536.572L794.98 541.105L800.253 541.105L800.253 538.105ZM816.634 538.105L816.634 541.105L817.074 541.105L817.496 540.979L816.634 538.105ZM817.832 537.746L817.832 534.746L817.392 534.746L816.97 534.872L817.832 537.746ZM830.658 537.746L833.658 537.746L833.658 534.746L830.658 534.746L830.658 537.746ZM830.658 548.533L830.658 551.533L833.658 551.533L833.658 548.533L830.658 548.533ZM787.388 548.533L784.388 548.533L784.388 551.533L787.388 551.533L787.388 548.533ZM787.388 538.625L784.917 536.924L784.388 537.692L784.388 538.625L787.388 538.625ZM812.718 501.827L812.718 498.827L811.141 498.827L810.247 500.126L812.718 501.827ZM823.985 501.827L826.985 501.827L826.985 498.827L823.985 498.827L823.985 501.827ZM823.985 560L823.985 563L826.985 563L826.985 560L823.985 560ZM811.2 560L814.2 560L814.2 545.297L811.2 545.297L808.2 545.297L808.2 560L811.2 560ZM811.2 545.297L813.719 546.927L814.158 546.248L811.64 544.618L809.121 542.988L808.681 543.667L811.2 545.297ZM811.64 544.618L814.64 544.618L814.64 519.487L811.64 519.487L808.64 519.487L808.64 544.618L811.64 544.618ZM811.64 519.487L811.64 516.487L811.32 516.487L811.32 519.487L811.32 522.487L811.64 522.487L811.64 519.487ZM811.32 519.487L808.741 517.954L797.674 536.572L800.253 538.105L802.832 539.638L813.899 521.02L811.32 519.487ZM800.253 538.105L800.253 541.105L816.634 541.105L816.634 538.105L816.634 535.105L800.253 535.105L800.253 538.105ZM816.634 538.105L817.496 540.979L818.695 540.619L817.832 537.746L816.97 534.872L815.772 535.232L816.634 538.105ZM817.832 537.746L817.832 540.746L830.658 540.746L830.658 537.746L830.658 534.746L817.832 534.746L817.832 537.746ZM830.658 537.746L827.658 537.746L827.658 548.533L830.658 548.533L833.658 548.533L833.658 537.746L830.658 537.746ZM830.658 548.533L830.658 545.533L787.388 545.533L787.388 548.533L787.388 551.533L830.658 551.533L830.658 548.533ZM787.388 548.533L790.388 548.533L790.388 538.625L787.388 538.625L784.388 538.625L784.388 548.533L787.388 548.533ZM787.388 538.625L789.859 540.326L815.189 503.528L812.718 501.827L810.247 500.126L784.917 536.924L787.388 538.625ZM812.718 501.827L812.718 504.827L823.985 504.827L823.985 501.827L823.985 498.827L812.718 498.827L812.718 501.827ZM823.985 501.827L820.985 501.827L820.985 560L823.985 560L826.985 560L826.985 501.827L823.985 501.827ZM823.985 560L823.985 557L811.2 557L811.2 560L811.2 563L823.985 563L823.985 560ZM836.368 560L833.368 560L833.368 563L836.368 563L836.368 560ZM836.368 551.33L834.207 549.249L833.368 550.12L833.368 551.33L836.368 551.33ZM857.383 529.515L859.544 531.597L859.604 531.534L859.661 531.468L857.383 529.515ZM852.269 512.615L854.436 514.69L854.447 514.678L854.458 514.667L852.269 512.615ZM850.471 521.644L850.471 524.644L853.471 524.644L853.471 521.644L850.471 521.644ZM836.368 521.644L833.368 521.644L833.368 524.644L836.368 524.644L836.368 521.644ZM872.086 505.343L870.133 507.62L870.143 507.629L872.086 505.343ZM877.201 517.09L880.201 517.09L880.201 517.082L880.2 517.074L877.201 517.09ZM874.843 526.958L872.205 525.53L872.2 525.54L872.195 525.549L874.843 526.958ZM868.211 535.828L866.042 533.755L865.98 533.821L865.921 533.89L868.211 535.828ZM857.184 548.853L854.894 546.914L850.713 551.853L857.184 551.853L857.184 548.853ZM878.559 548.853L881.559 548.853L881.559 545.853L878.559 545.853L878.559 548.853ZM878.559 560L878.559 563L881.559 563L881.559 560L878.559 560ZM836.368 560L839.368 560L839.368 551.33L836.368 551.33L833.368 551.33L833.368 560L836.368 560ZM836.368 551.33L838.528 553.411L859.544 531.597L857.383 529.515L855.223 527.434L834.207 549.249L836.368 551.33ZM857.383 529.515L859.661 531.468C861.364 529.481 862.841 527.434 864.084 525.325L861.499 523.802L858.914 522.279C857.865 524.059 856.599 525.821 855.106 527.563L857.383 529.515ZM861.499 523.802L864.084 525.325C865.477 522.96 866.217 520.428 866.217 517.769L863.217 517.769L860.217 517.769C860.217 519.265 859.812 520.755 858.914 522.279L861.499 523.802ZM863.217 517.769L866.217 517.769C866.217 514.895 865.582 512.083 863.569 510.164L861.499 512.335L859.429 514.506C859.706 514.771 860.217 515.582 860.217 517.769L863.217 517.769ZM861.499 512.335L863.569 510.164C861.768 508.447 859.473 507.697 856.984 507.697L856.984 510.697L856.984 513.697C858.224 513.697 858.939 514.04 859.429 514.506L861.499 512.335ZM856.984 510.697L856.984 507.697C854.311 507.697 851.912 508.61 850.081 510.563L852.269 512.615L854.458 514.667C855.024 514.063 855.768 513.697 856.984 513.697L856.984 510.697ZM852.269 512.615L850.102 510.54C849.007 511.684 848.376 513.17 848.006 514.693C847.631 516.235 847.471 518.026 847.471 520.006L850.471 520.006L853.471 520.006C853.471 518.311 853.612 517.032 853.836 516.111C854.065 515.17 854.333 514.797 854.436 514.69L852.269 512.615ZM850.471 520.006L847.471 520.006L847.471 521.644L850.471 521.644L853.471 521.644L853.471 520.006L850.471 520.006ZM850.471 521.644L850.471 518.644L836.368 518.644L836.368 521.644L836.368 524.644L850.471 524.644L850.471 521.644ZM836.368 521.644L839.368 521.644L839.368 518.208L836.368 518.208L833.368 518.208L833.368 521.644L836.368 521.644ZM836.368 518.208L839.368 518.208C839.368 514.119 840.89 510.837 844.06 508.152L842.121 505.863L840.182 503.574C835.681 507.387 833.368 512.336 833.368 518.208L836.368 518.208ZM842.121 505.863L844.06 508.152C847.233 505.463 851.525 503.988 857.224 503.988L857.224 500.988L857.224 497.988C850.457 497.988 844.68 499.763 840.182 503.574L842.121 505.863ZM857.224 500.988L857.224 503.988C863.357 503.988 867.498 505.358 870.133 507.62L872.086 505.343L874.04 503.067C869.91 499.522 864.142 497.988 857.224 497.988L857.224 500.988ZM872.086 505.343L870.143 507.629C872.778 509.869 874.178 512.912 874.201 517.106L877.201 517.09L880.2 517.074C880.17 511.359 878.161 506.571 874.03 503.058L872.086 505.343ZM877.201 517.09L874.201 517.09C874.201 520.324 873.513 523.113 872.205 525.53L874.843 526.958L877.482 528.386C879.316 524.996 880.201 521.207 880.201 517.09L877.201 517.09ZM874.843 526.958L872.195 525.549C870.808 528.156 868.777 530.894 866.042 533.755L868.211 535.828L870.38 537.901C873.398 534.743 875.789 531.567 877.492 528.367L874.843 526.958ZM868.211 535.828L865.921 533.89L854.894 546.914L857.184 548.853L859.473 550.791L870.501 537.766L868.211 535.828ZM857.184 548.853L857.184 551.853L878.559 551.853L878.559 548.853L878.559 545.853L857.184 545.853L857.184 548.853ZM878.559 548.853L875.559 548.853L875.559 560L878.559 560L881.559 560L881.559 548.853L878.559 548.853ZM878.559 560L878.559 557L836.368 557L836.368 560L836.368 563L878.559 563L878.559 560ZM920.068 506.382L917.946 508.503L917.954 508.511L917.962 508.519L920.068 506.382ZM919.828 555.565L917.777 553.376L917.77 553.383L919.828 555.565ZM905.245 560.839L905.258 557.839L905.258 557.839L905.245 560.839ZM890.382 555.525L888.269 557.654L888.277 557.662L890.382 555.525ZM900.49 549.093L898.029 550.807L898.039 550.822L898.049 550.836L900.49 549.093ZM900.49 512.934L898.049 511.191L898.039 511.205L898.029 511.22L900.49 512.934ZM885.028 539.863L888.028 539.863L888.028 521.964L885.028 521.964L882.028 521.964L882.028 539.863L885.028 539.863ZM885.028 521.964L888.028 521.964C888.028 515.817 889.67 511.5 892.559 508.568L890.422 506.462L888.285 504.356C883.983 508.722 882.028 514.74 882.028 521.964L885.028 521.964ZM890.422 506.462L892.559 508.568C895.468 505.616 899.568 503.988 905.245 503.988L905.245 500.988L905.245 497.988C898.35 497.988 892.568 500.01 888.285 504.356L890.422 506.462ZM905.245 500.988L905.245 503.988C910.935 503.988 915.04 505.597 917.946 508.503L920.068 506.382L922.189 504.261C917.904 499.976 912.127 497.988 905.245 497.988L905.245 500.988ZM920.068 506.382L917.962 508.519C920.838 511.353 922.501 515.666 922.501 521.964L925.501 521.964L928.501 521.964C928.501 514.625 926.542 508.55 922.173 504.245L920.068 506.382ZM925.501 521.964L922.501 521.964L922.501 539.863L925.501 539.863L928.501 539.863L928.501 521.964L925.501 521.964ZM925.501 539.863L922.501 539.863C922.501 546.25 920.77 550.573 917.777 553.376L919.828 555.565L921.879 557.755C926.451 553.473 928.501 547.327 928.501 539.863L925.501 539.863ZM919.828 555.565L917.77 553.383C914.661 556.315 910.584 557.863 905.258 557.839L905.245 560.839L905.232 563.839C911.839 563.869 917.484 561.901 921.887 557.747L919.828 555.565ZM905.245 560.839L905.258 557.839C899.484 557.815 895.36 556.218 892.487 553.388L890.382 555.525L888.277 557.662C892.542 561.864 898.327 563.81 905.232 563.839L905.245 560.839ZM890.382 555.525L892.495 553.396C889.678 550.6 888.028 546.267 888.028 539.863L885.028 539.863L882.028 539.863C882.028 547.257 883.947 553.365 888.269 557.654L890.382 555.525ZM898.932 542.7L895.932 542.7C895.932 545.782 896.5 548.612 898.029 550.807L900.49 549.093L902.952 547.378C902.403 546.59 901.932 545.158 901.932 542.7L898.932 542.7ZM900.49 549.093L898.049 550.836C899.767 553.242 902.337 554.33 905.245 554.33L905.245 551.33L905.245 548.33C903.945 548.33 903.344 547.927 902.932 547.349L900.49 549.093ZM905.245 551.33L905.245 554.33C908.153 554.33 910.723 553.242 912.441 550.836L909.999 549.093L907.558 547.349C907.145 547.927 906.545 548.33 905.245 548.33L905.245 551.33ZM909.999 549.093L912.441 550.836C914.012 548.636 914.598 545.794 914.598 542.7L911.598 542.7L908.598 542.7C908.598 545.146 908.117 546.566 907.558 547.349L909.999 549.093ZM911.598 542.7L914.598 542.7L914.598 519.407L911.598 519.407L908.598 519.407L908.598 542.7L911.598 542.7ZM911.598 519.407L914.598 519.407C914.598 516.274 914.018 513.399 912.441 511.191L909.999 512.934L907.558 514.678C908.112 515.453 908.598 516.893 908.598 519.407L911.598 519.407ZM909.999 512.934L912.441 511.191C910.723 508.786 908.153 507.697 905.245 507.697L905.245 510.697L905.245 513.697C906.545 513.697 907.145 514.1 907.558 514.678L909.999 512.934ZM905.245 510.697L905.245 507.697C902.337 507.697 899.767 508.786 898.049 511.191L900.49 512.934L902.932 514.678C903.344 514.1 903.945 513.697 905.245 513.697L905.245 510.697ZM900.49 512.934L898.029 511.22C896.494 513.423 895.932 516.286 895.932 519.407L898.932 519.407L901.932 519.407C901.932 516.881 902.409 515.429 902.952 514.649L900.49 512.934ZM898.932 519.407L895.932 519.407L895.932 542.7L898.932 542.7L901.932 542.7L901.932 519.407L898.932 519.407Z" fill="black" mask="url(#path-13-outside-5_17007_6901)"/> +</g> +<path d="M1007.71 128.486L1015.98 79.744H1029.2L1020.93 128.486H1007.71ZM1068.64 80.8133C1064.84 79.4323 1060.84 78.7393 1056.8 78.7666C1043.75 78.7666 1034.56 85.3692 1034.48 94.8341C1034.41 101.83 1041.05 105.731 1046.05 108.059C1051.2 110.446 1052.92 111.968 1052.9 114.099C1052.87 117.362 1048.79 118.852 1045 118.852C1039.71 118.852 1036.91 118.106 1032.57 116.298L1030.87 115.524L1029.01 126.422C1032.1 127.78 1037.8 128.958 1043.72 129.018C1057.6 129.018 1066.61 122.492 1066.72 112.386C1066.77 106.848 1063.25 102.633 1055.63 99.1586C1051.01 96.9204 1048.19 95.4035 1048.22 93.1231C1048.22 91.1013 1050.61 88.9378 1055.78 88.9378C1059.17 88.8617 1062.53 89.4969 1065.66 90.803L1066.85 91.3649L1068.64 80.8133ZM1102.6 79.744H1092.43C1089.28 79.744 1086.92 80.6095 1085.54 83.7677L1065.99 128.237H1079.9C1079.9 128.237 1082.13 122.323 1082.64 121.025L1099.32 121.045C1099.71 122.726 1100.9 128.237 1100.9 128.237H1113.26L1102.6 79.744ZM1086.43 111.078C1087.52 108.273 1091.69 97.47 1091.69 97.47C1091.61 97.5993 1092.78 94.65 1093.44 92.8222L1094.33 97.02C1094.33 97.02 1096.86 108.641 1097.39 111.078H1086.43ZM996.495 79.744L983.596 112.866L982.223 106.134C979.822 98.3753 972.341 89.9699 963.976 85.7622L975.771 128.237L989.709 128.222L1010.45 79.744H996.431" fill="white"/> +<path d="M970.977 79.7436H949.775L949.604 80.7557C966.171 84.7868 977.132 94.5253 981.684 106.223L977.053 83.8419C976.254 80.7607 973.937 79.8406 971.069 79.7336" fill="white"/> +<path d="M130.128 161.702C130.328 161.588 130.534 161.458 130.74 161.314C130.883 161.213 131.026 161.099 131.173 160.985C131.226 160.945 131.276 160.905 131.329 160.865C133.927 158.712 136.845 154.22 138.923 148.774C138.933 148.747 138.942 148.72 138.952 148.693C139.101 148.303 139.243 147.909 139.386 147.508C142.46 138.633 143.415 127.306 138.236 118.047C134.979 112.22 130.334 107.339 124.943 103.92C120.321 100.94 117.507 95.9054 117.39 90.4091C117.303 84.0188 115.575 77.507 112.318 71.6803C107.186 62.5109 96.9335 57.3933 87.7015 55.3544C84.4707 54.6407 81.1106 54.201 77.7989 54.3115C75.5044 54.3887 72.9201 54.577 70.8725 55.7241C63.8472 59.6519 53.507 82.8217 62.7646 99.3794C66.0216 105.206 70.6664 110.088 76.0571 113.506C80.6792 116.487 83.4934 121.521 83.6107 127.017C83.6975 133.408 85.4257 139.919 88.6826 145.746C97.9402 162.304 123.099 165.627 130.124 161.699L130.128 161.702Z" fill="#FFC900"/> +<path d="M130.128 161.702C130.328 161.588 130.534 161.458 130.74 161.314C130.883 161.213 131.026 161.099 131.173 160.985C131.226 160.945 131.276 160.905 131.329 160.865C133.927 158.712 136.845 154.22 138.923 148.774C138.933 148.747 138.942 148.72 138.952 148.693C139.101 148.303 139.243 147.909 139.386 147.508C142.46 138.633 143.415 127.306 138.236 118.047C134.979 112.22 130.334 107.339 124.943 103.92C120.321 100.94 117.507 95.9054 117.39 90.4091C117.303 84.0188 115.575 77.507 112.318 71.6803C107.186 62.5109 96.9335 57.3933 87.7015 55.3544C84.4707 54.6407 81.1106 54.201 77.7989 54.3115C75.5044 54.3887 72.9201 54.577 70.8725 55.7241C63.8472 59.6519 53.507 82.8217 62.7646 99.3794C66.0216 105.206 70.6664 110.088 76.0571 113.506C80.6792 116.487 83.4934 121.521 83.6107 127.017C83.6975 133.408 85.4257 139.919 88.6826 145.746C97.9402 162.304 123.099 165.627 130.124 161.699L130.128 161.702ZM92.132 143.821C89.1702 138.52 87.6778 132.745 87.6199 127.038C87.4349 120.185 83.8828 113.832 78.0782 110.291C73.249 107.251 69.0359 102.828 66.1446 97.6577C57.9973 83.0844 67.4378 62.3322 72.7384 59.3704C78.342 56.2376 100.825 59.3156 108.896 73.7557C111.857 79.0562 113.35 84.8317 113.408 90.5383C113.456 97.4657 116.938 103.692 122.813 107.362C127.642 110.402 131.785 114.695 134.746 119.996C142.894 134.569 133.48 155.305 128.066 158.333C122.765 161.295 100.202 158.261 92.132 143.824L92.132 143.821Z" fill="black" stroke="black" stroke-width="0.291534"/> +<path d="M87.495 98.0243L89.5357 94.6391" stroke="black" stroke-width="3.66887" stroke-miterlimit="10" stroke-linecap="round"/> +<path d="M80.1515 91.9765C84.7362 91.9621 88.4412 88.2337 88.4268 83.6489C88.4124 79.0642 84.6841 75.3592 80.0993 75.3736C75.5145 75.388 71.8095 79.1163 71.8239 83.7011C71.8383 88.2859 75.5667 91.9909 80.1515 91.9765Z" fill="white" stroke="black" stroke-width="3.20687" stroke-miterlimit="10"/> +<path d="M94.6993 84.0963C99.2841 84.0819 102.989 80.3536 102.975 75.7688C102.96 71.1841 99.2319 67.479 94.6472 67.4935C90.0624 67.5079 86.3574 71.2362 86.3718 75.821C86.3862 80.4057 90.1145 84.1108 94.6993 84.0963Z" fill="white" stroke="black" stroke-width="3.20687" stroke-miterlimit="10"/> +<path d="M93.908 67.8425C91.9051 70.5039 91.7935 74.2666 93.877 77.0819C95.6557 79.4845 98.5643 80.5594 101.328 80.1105C103.331 77.4491 103.443 73.6864 101.359 70.8711C99.5803 68.4685 96.6717 67.3936 93.908 67.8425Z" fill="black"/> +<path d="M79.8006 75.7013C77.8743 78.3357 77.7891 82.0184 79.8325 84.7804C81.5173 87.0566 84.2224 88.1287 86.8465 87.837C88.7728 85.2026 88.858 81.52 86.8147 78.7579C85.1298 76.4818 82.4247 75.4096 79.8006 75.7013Z" fill="black"/> +<path d="M90.0197 96.739C91.9126 97.2468 94.1103 97.1398 95.9361 96.487C97.7752 95.8274 100.054 93.9891 101.056 92.2849" stroke="black" stroke-width="3.66887" stroke-miterlimit="10" stroke-linecap="round"/> +<path d="M107.899 145.319C107.271 146.008 107.262 147.192 107.947 147.821C110.7 150.327 113.762 152.492 116.673 154.074C117.214 154.442 117.804 154.284 118.317 153.999C118.573 153.854 118.756 153.58 118.945 153.31C119.432 152.364 119.052 151.391 118.307 150.967C115.597 149.444 112.806 147.468 110.327 145.141C109.638 144.52 108.521 144.637 107.899 145.319Z" fill="black" stroke="black" stroke-width="0.583068" stroke-miterlimit="10"/> +<path d="M103.019 141.786L103.149 141.712C103.974 141.079 104.131 140.148 103.628 139.249C102.921 138.294 102.348 137.265 101.774 136.24C100.697 134.312 99.7504 132.314 98.8707 130.445C98.4974 129.472 97.4959 129.192 96.5197 129.565C95.5469 129.939 95.2666 130.94 95.6399 131.916C96.4602 133.985 97.6108 136.043 98.758 138.097C99.402 139.252 99.9789 140.281 100.756 141.366C101.309 142.058 102.24 142.215 103.012 141.786L103.019 141.786Z" fill="black" stroke="black" stroke-width="0.583068" stroke-miterlimit="10"/> +<path d="M94.256 123.439L94.6422 123.224C95.2848 122.865 95.639 121.994 95.5365 121.21C94.8987 118.867 93.9374 116.539 92.7165 114.355C92.1429 113.326 91.5659 112.297 90.8625 111.345C90.2295 110.52 89.1719 110.433 88.4732 110.996C87.648 111.629 87.5613 112.686 88.1238 113.385C88.7568 114.21 89.26 115.109 89.7631 116.012C90.8399 117.939 91.6635 120.008 92.2803 122.021C92.3972 123.135 93.4164 123.745 94.2526 123.439L94.256 123.439Z" fill="black" stroke="black" stroke-width="0.583068" stroke-miterlimit="10"/> +<path d="M128.552 148.619C128.953 148.731 129.206 148.591 129.462 148.446C129.975 148.161 130.347 147.616 130.388 147.086C130.565 143.787 130.326 140.039 129.631 136.379C129.455 135.462 128.565 134.781 127.525 135.028C126.609 135.204 125.928 136.094 126.175 137.133C126.855 140.46 127.08 143.878 126.959 146.983C126.932 147.841 127.565 148.666 128.552 148.623L128.552 148.619Z" fill="black" stroke="black" stroke-width="0.583068" stroke-miterlimit="10"/> +<path d="M108.614 99.8158C107.641 100.189 107.361 101.191 107.66 102.034C108.104 103.136 108.681 104.165 109.251 105.187C110.472 107.371 111.95 109.408 113.616 111.177C114.105 111.746 115.033 111.9 115.802 111.471L116.188 111.256C116.816 110.567 116.897 109.509 116.337 108.814C114.822 107.304 113.612 105.45 112.535 103.523C112.032 102.624 111.532 101.725 111.155 100.748C110.522 99.9232 109.58 99.4358 108.611 99.8125L108.614 99.8158Z" fill="black" stroke="black" stroke-width="0.583068" stroke-miterlimit="10"/> +<path d="M120.914 116.521C120.089 117.154 120.002 118.211 120.435 118.984C121.694 120.637 122.771 122.565 123.851 124.49C124.425 125.519 125.001 126.548 125.442 127.643C125.815 128.616 126.817 128.897 127.793 128.523L127.923 128.45C128.695 128.017 128.979 127.015 128.673 126.172C128.229 125.07 127.582 123.918 126.934 122.759C125.784 120.701 124.507 118.721 123.303 116.867C122.747 116.168 121.616 115.958 120.917 116.521L120.914 116.521Z" fill="black" stroke="black" stroke-width="0.583068" stroke-miterlimit="10"/> +<path d="M109.403 124.925C110.302 124.422 110.585 123.42 110.082 122.525L104.622 112.76C104.119 111.861 103.117 111.577 102.222 112.08C101.326 112.583 101.039 113.585 101.542 114.48L107.003 124.246C107.499 125.148 108.5 125.428 109.403 124.925Z" fill="black" stroke="black" stroke-width="0.583068" stroke-miterlimit="10"/> +<path d="M120.325 144.453C121.224 143.95 121.507 142.948 121.004 142.052L115.544 132.287C115.04 131.388 114.039 131.105 113.143 131.608C112.248 132.111 111.961 133.112 112.464 134.008L117.924 143.773C118.421 144.675 119.422 144.956 120.325 144.453Z" fill="black" stroke="black" stroke-width="0.583068" stroke-miterlimit="10"/> +<defs> +<linearGradient id="paint0_linear_17007_6901" x1="5.71025e-06" y1="330.901" x2="1208" y2="382.21" gradientUnits="userSpaceOnUse"> +<stop stop-color="white" stop-opacity="0.29"/> +<stop offset="1" stop-color="white" stop-opacity="0.12"/> +</linearGradient> +</defs> +</svg> diff --git a/src/assets/cards/Cart Gradient 4.svg b/src/assets/cards/Cart Gradient 4.svg new file mode 100644 index 000000000..605eb3a40 --- /dev/null +++ b/src/assets/cards/Cart Gradient 4.svg @@ -0,0 +1,132 @@ +<svg width="1208" height="765" viewBox="0 0 1208 765" fill="none" xmlns="http://www.w3.org/2000/svg"> +<rect x="2.1533" y="2.1533" width="1203.69" height="760.114" rx="62.4456" fill="#FF90E8" stroke="url(#paint0_linear_17007_2267)" stroke-width="4.3066"/> +<mask id="mask0_17007_2267" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="1208" height="765"> +<rect width="1208" height="764.421" rx="64.5989" fill="#FF90E8"/> +</mask> +<g mask="url(#mask0_17007_2267)"> +<mask id="path-3-outside-1_17007_2267" maskUnits="userSpaceOnUse" x="72" y="660.175" width="223" height="35" fill="black"> +<rect fill="white" x="72" y="660.175" width="223" height="35"/> +<path d="M73.4393 693.175V662.558H80.652L89.7572 680.243C89.9675 680.691 90.1568 681.147 90.325 681.609C90.5073 682.058 90.6685 682.507 90.8087 682.955H90.9348C90.9208 682.479 90.9068 682.002 90.8928 681.525C90.8928 681.049 90.8928 680.572 90.8928 680.095V662.558H96.9069V693.175H89.7572L80.5258 675.448C80.3155 675.028 80.1263 674.593 79.9581 674.144C79.7898 673.696 79.6426 673.247 79.5165 672.799H79.3693C79.3973 673.275 79.4113 673.745 79.4113 674.208C79.4253 674.656 79.4323 675.126 79.4323 675.616V693.175H73.4393ZM101.617 681.988V662.558H108.62V682.724C108.62 684.897 109.026 686.432 109.839 687.329C110.652 688.212 111.781 688.654 113.225 688.654C114.627 688.654 115.734 688.212 116.547 687.329C117.374 686.432 117.788 684.897 117.788 682.724V662.558H124.727V681.988C124.727 685.997 123.676 688.948 121.573 690.841C119.484 692.733 116.709 693.68 113.246 693.68C109.727 693.68 106.909 692.733 104.792 690.841C102.676 688.948 101.617 685.997 101.617 681.988ZM127.335 668.046V662.558H151.37V668.046H142.896V693.175H135.83V668.046H127.335ZM152.274 668.046V662.558H176.31V668.046H167.835V693.175H160.77V668.046H152.274ZM186.487 693.175V681.736L176.499 662.558H184.174L189.494 673.072C189.663 673.422 189.817 673.759 189.957 674.081C190.097 674.39 190.23 674.712 190.357 675.049H190.462C190.588 674.712 190.714 674.39 190.84 674.081C190.98 673.773 191.142 673.436 191.324 673.072L196.644 662.558H203.436L193.574 681.567V693.175H186.487ZM222.95 693.175V681.736L212.962 662.558H220.637L225.958 673.072C226.126 673.422 226.28 673.759 226.42 674.081C226.56 674.39 226.694 674.712 226.82 675.049H226.925C227.051 674.712 227.177 674.39 227.303 674.081C227.444 673.773 227.605 673.436 227.787 673.072L233.107 662.558H239.899L230.037 681.567V693.175H222.95ZM239.92 678.75V676.983C239.92 671.908 241.133 668.151 243.558 665.712C245.998 663.273 249.138 662.053 252.979 662.053C256.806 662.053 259.939 663.273 262.379 665.712C264.832 668.151 266.058 671.908 266.058 676.983V678.75C266.058 683.824 264.832 687.582 262.379 690.021C259.939 692.46 256.806 693.68 252.979 693.68C249.138 693.68 245.998 692.46 243.558 690.021C241.133 687.582 239.92 683.824 239.92 678.75ZM247.175 680.243C247.175 683.187 247.694 685.331 248.731 686.677C249.769 688.009 251.184 688.675 252.979 688.675C254.773 688.675 256.189 688.009 257.227 686.677C258.278 685.331 258.804 683.187 258.804 680.243V675.511C258.804 672.567 258.278 670.436 257.227 669.119C256.189 667.787 254.773 667.121 252.979 667.121C251.184 667.121 249.769 667.787 248.731 669.119C247.694 670.436 247.175 672.567 247.175 675.511V680.243ZM269.928 681.988V662.558H276.93V682.724C276.93 684.897 277.337 686.432 278.15 687.329C278.963 688.212 280.091 688.654 281.535 688.654C282.937 688.654 284.045 688.212 284.858 687.329C285.685 686.432 286.098 684.897 286.098 682.724V662.558H293.038V681.988C293.038 685.997 291.986 688.948 289.884 690.841C287.795 692.733 285.019 693.68 281.556 693.68C278.038 693.68 275.22 692.733 273.103 690.841C270.986 688.948 269.928 685.997 269.928 681.988Z"/> +</mask> +<path d="M73.4393 693.175V662.558H80.652L89.7572 680.243C89.9675 680.691 90.1568 681.147 90.325 681.609C90.5073 682.058 90.6685 682.507 90.8087 682.955H90.9348C90.9208 682.479 90.9068 682.002 90.8928 681.525C90.8928 681.049 90.8928 680.572 90.8928 680.095V662.558H96.9069V693.175H89.7572L80.5258 675.448C80.3155 675.028 80.1263 674.593 79.9581 674.144C79.7898 673.696 79.6426 673.247 79.5165 672.799H79.3693C79.3973 673.275 79.4113 673.745 79.4113 674.208C79.4253 674.656 79.4323 675.126 79.4323 675.616V693.175H73.4393ZM101.617 681.988V662.558H108.62V682.724C108.62 684.897 109.026 686.432 109.839 687.329C110.652 688.212 111.781 688.654 113.225 688.654C114.627 688.654 115.734 688.212 116.547 687.329C117.374 686.432 117.788 684.897 117.788 682.724V662.558H124.727V681.988C124.727 685.997 123.676 688.948 121.573 690.841C119.484 692.733 116.709 693.68 113.246 693.68C109.727 693.68 106.909 692.733 104.792 690.841C102.676 688.948 101.617 685.997 101.617 681.988ZM127.335 668.046V662.558H151.37V668.046H142.896V693.175H135.83V668.046H127.335ZM152.274 668.046V662.558H176.31V668.046H167.835V693.175H160.77V668.046H152.274ZM186.487 693.175V681.736L176.499 662.558H184.174L189.494 673.072C189.663 673.422 189.817 673.759 189.957 674.081C190.097 674.39 190.23 674.712 190.357 675.049H190.462C190.588 674.712 190.714 674.39 190.84 674.081C190.98 673.773 191.142 673.436 191.324 673.072L196.644 662.558H203.436L193.574 681.567V693.175H186.487ZM222.95 693.175V681.736L212.962 662.558H220.637L225.958 673.072C226.126 673.422 226.28 673.759 226.42 674.081C226.56 674.39 226.694 674.712 226.82 675.049H226.925C227.051 674.712 227.177 674.39 227.303 674.081C227.444 673.773 227.605 673.436 227.787 673.072L233.107 662.558H239.899L230.037 681.567V693.175H222.95ZM239.92 678.75V676.983C239.92 671.908 241.133 668.151 243.558 665.712C245.998 663.273 249.138 662.053 252.979 662.053C256.806 662.053 259.939 663.273 262.379 665.712C264.832 668.151 266.058 671.908 266.058 676.983V678.75C266.058 683.824 264.832 687.582 262.379 690.021C259.939 692.46 256.806 693.68 252.979 693.68C249.138 693.68 245.998 692.46 243.558 690.021C241.133 687.582 239.92 683.824 239.92 678.75ZM247.175 680.243C247.175 683.187 247.694 685.331 248.731 686.677C249.769 688.009 251.184 688.675 252.979 688.675C254.773 688.675 256.189 688.009 257.227 686.677C258.278 685.331 258.804 683.187 258.804 680.243V675.511C258.804 672.567 258.278 670.436 257.227 669.119C256.189 667.787 254.773 667.121 252.979 667.121C251.184 667.121 249.769 667.787 248.731 669.119C247.694 670.436 247.175 672.567 247.175 675.511V680.243ZM269.928 681.988V662.558H276.93V682.724C276.93 684.897 277.337 686.432 278.15 687.329C278.963 688.212 280.091 688.654 281.535 688.654C282.937 688.654 284.045 688.212 284.858 687.329C285.685 686.432 286.098 684.897 286.098 682.724V662.558H293.038V681.988C293.038 685.997 291.986 688.948 289.884 690.841C287.795 692.733 285.019 693.68 281.556 693.68C278.038 693.68 275.22 692.733 273.103 690.841C270.986 688.948 269.928 685.997 269.928 681.988Z" fill="white"/> +<path d="M73.4393 693.175H72.4393V694.175H73.4393V693.175ZM73.4393 662.558V661.558H72.4393V662.558H73.4393ZM80.652 662.558L81.5411 662.1L81.2619 661.558H80.652V662.558ZM89.7572 680.243L90.6627 679.818L90.6548 679.801L90.6463 679.785L89.7572 680.243ZM90.325 681.609L89.3852 681.951L89.3916 681.969L89.3985 681.986L90.325 681.609ZM90.8087 682.955L89.8542 683.254L90.0735 683.955H90.8087V682.955ZM90.9348 682.955V683.955H91.9647L91.9344 682.926L90.9348 682.955ZM90.8928 681.525H89.8928V681.54L89.8932 681.555L90.8928 681.525ZM90.8928 662.558V661.558H89.8928V662.558H90.8928ZM96.9069 662.558H97.9069V661.558H96.9069V662.558ZM96.9069 693.175V694.175H97.9069V693.175H96.9069ZM89.7572 693.175L88.8703 693.637L89.1505 694.175H89.7572V693.175ZM80.5258 675.448L79.6314 675.895L79.6351 675.903L79.6389 675.91L80.5258 675.448ZM79.5165 672.799L80.4791 672.528L80.274 671.799H79.5165V672.799ZM79.3693 672.799V671.799H78.3087L78.371 672.857L79.3693 672.799ZM79.4113 674.208H78.4113V674.223L78.4118 674.239L79.4113 674.208ZM79.4323 693.175V694.175H80.4323V693.175H79.4323ZM73.4393 693.175H74.4393V662.558H73.4393H72.4393V693.175H73.4393ZM73.4393 662.558V663.558H80.652V662.558V661.558H73.4393V662.558ZM80.652 662.558L79.7629 663.016L88.8682 680.7L89.7572 680.243L90.6463 679.785L81.5411 662.1L80.652 662.558ZM89.7572 680.243L88.8518 680.667C89.0495 681.089 89.2273 681.517 89.3852 681.951L90.325 681.609L91.2648 681.268C91.0863 680.777 90.8856 680.294 90.6627 679.818L89.7572 680.243ZM90.325 681.609L89.3985 681.986C89.5707 682.41 89.7225 682.832 89.8542 683.254L90.8087 682.955L91.7631 682.657C91.6145 682.181 91.4438 681.707 91.2515 681.233L90.325 681.609ZM90.8087 682.955V683.955H90.9348V682.955V681.955H90.8087V682.955ZM90.9348 682.955L91.9344 682.926C91.9327 682.868 91.9308 682.805 91.9291 682.747C91.9274 682.69 91.9256 682.626 91.9239 682.568C91.9222 682.511 91.9203 682.447 91.9186 682.39C91.9169 682.332 91.9151 682.269 91.9134 682.211C91.9093 682.071 91.907 681.993 91.9029 681.853C91.8987 681.714 91.8965 681.636 91.8923 681.496L90.8928 681.525L89.8932 681.555C89.895 681.615 89.8967 681.673 89.8985 681.734C89.9002 681.794 89.9019 681.852 89.9037 681.912C89.9055 681.973 89.9072 682.031 89.909 682.091C89.9108 682.151 89.9125 682.209 89.9142 682.27C89.9182 682.406 89.9207 682.491 89.9247 682.627C89.9287 682.763 89.9313 682.849 89.9353 682.985L90.9348 682.955ZM90.8928 681.525H91.8928C91.8928 681.524 91.8928 681.524 91.8928 681.523C91.8928 681.522 91.8928 681.521 91.8928 681.52C91.8928 681.519 91.8928 681.518 91.8928 681.517C91.8928 681.516 91.8928 681.515 91.8928 681.514C91.8928 681.513 91.8928 681.512 91.8928 681.511C91.8928 681.51 91.8928 681.51 91.8928 681.509C91.8928 681.508 91.8928 681.507 91.8928 681.506C91.8928 681.505 91.8928 681.504 91.8928 681.503C91.8928 681.502 91.8928 681.501 91.8928 681.5C91.8928 681.499 91.8928 681.498 91.8928 681.497C91.8928 681.497 91.8928 681.496 91.8928 681.495C91.8928 681.494 91.8928 681.493 91.8928 681.492C91.8928 681.491 91.8928 681.49 91.8928 681.489C91.8928 681.488 91.8928 681.487 91.8928 681.486C91.8928 681.485 91.8928 681.484 91.8928 681.483C91.8928 681.483 91.8928 681.482 91.8928 681.481C91.8928 681.48 91.8928 681.479 91.8928 681.478C91.8928 681.477 91.8928 681.476 91.8928 681.475C91.8928 681.474 91.8928 681.473 91.8928 681.472C91.8928 681.471 91.8928 681.47 91.8928 681.47C91.8928 681.469 91.8928 681.468 91.8928 681.467C91.8928 681.466 91.8928 681.465 91.8928 681.464C91.8928 681.463 91.8928 681.462 91.8928 681.461C91.8928 681.46 91.8928 681.459 91.8928 681.458C91.8928 681.457 91.8928 681.456 91.8928 681.456C91.8928 681.455 91.8928 681.454 91.8928 681.453C91.8928 681.452 91.8928 681.451 91.8928 681.45C91.8928 681.449 91.8928 681.448 91.8928 681.447C91.8928 681.446 91.8928 681.445 91.8928 681.444C91.8928 681.443 91.8928 681.443 91.8928 681.442C91.8928 681.441 91.8928 681.44 91.8928 681.439C91.8928 681.438 91.8928 681.437 91.8928 681.436C91.8928 681.435 91.8928 681.434 91.8928 681.433C91.8928 681.432 91.8928 681.431 91.8928 681.43C91.8928 681.429 91.8928 681.429 91.8928 681.428C91.8928 681.427 91.8928 681.426 91.8928 681.425C91.8928 681.424 91.8928 681.423 91.8928 681.422C91.8928 681.421 91.8928 681.42 91.8928 681.419C91.8928 681.418 91.8928 681.417 91.8928 681.416C91.8928 681.416 91.8928 681.415 91.8928 681.414C91.8928 681.413 91.8928 681.412 91.8928 681.411C91.8928 681.41 91.8928 681.409 91.8928 681.408C91.8928 681.407 91.8928 681.406 91.8928 681.405C91.8928 681.404 91.8928 681.403 91.8928 681.402C91.8928 681.402 91.8928 681.401 91.8928 681.4C91.8928 681.399 91.8928 681.398 91.8928 681.397C91.8928 681.396 91.8928 681.395 91.8928 681.394C91.8928 681.393 91.8928 681.392 91.8928 681.391C91.8928 681.39 91.8928 681.389 91.8928 681.389C91.8928 681.388 91.8928 681.387 91.8928 681.386C91.8928 681.385 91.8928 681.384 91.8928 681.383C91.8928 681.382 91.8928 681.381 91.8928 681.38C91.8928 681.379 91.8928 681.378 91.8928 681.377C91.8928 681.376 91.8928 681.375 91.8928 681.375C91.8928 681.374 91.8928 681.373 91.8928 681.372C91.8928 681.371 91.8928 681.37 91.8928 681.369C91.8928 681.368 91.8928 681.367 91.8928 681.366C91.8928 681.365 91.8928 681.364 91.8928 681.363C91.8928 681.362 91.8928 681.362 91.8928 681.361C91.8928 681.36 91.8928 681.359 91.8928 681.358C91.8928 681.357 91.8928 681.356 91.8928 681.355C91.8928 681.354 91.8928 681.353 91.8928 681.352C91.8928 681.351 91.8928 681.35 91.8928 681.349C91.8928 681.348 91.8928 681.348 91.8928 681.347C91.8928 681.346 91.8928 681.345 91.8928 681.344C91.8928 681.343 91.8928 681.342 91.8928 681.341C91.8928 681.34 91.8928 681.339 91.8928 681.338C91.8928 681.337 91.8928 681.336 91.8928 681.335C91.8928 681.335 91.8928 681.334 91.8928 681.333C91.8928 681.332 91.8928 681.331 91.8928 681.33C91.8928 681.329 91.8928 681.328 91.8928 681.327C91.8928 681.326 91.8928 681.325 91.8928 681.324C91.8928 681.323 91.8928 681.322 91.8928 681.321C91.8928 681.321 91.8928 681.32 91.8928 681.319C91.8928 681.318 91.8928 681.317 91.8928 681.316C91.8928 681.315 91.8928 681.314 91.8928 681.313C91.8928 681.312 91.8928 681.311 91.8928 681.31C91.8928 681.309 91.8928 681.308 91.8928 681.308C91.8928 681.307 91.8928 681.306 91.8928 681.305C91.8928 681.304 91.8928 681.303 91.8928 681.302C91.8928 681.301 91.8928 681.3 91.8928 681.299C91.8928 681.298 91.8928 681.297 91.8928 681.296C91.8928 681.295 91.8928 681.294 91.8928 681.294C91.8928 681.293 91.8928 681.292 91.8928 681.291C91.8928 681.29 91.8928 681.289 91.8928 681.288C91.8928 681.287 91.8928 681.286 91.8928 681.285C91.8928 681.284 91.8928 681.283 91.8928 681.282C91.8928 681.281 91.8928 681.281 91.8928 681.28C91.8928 681.279 91.8928 681.278 91.8928 681.277C91.8928 681.276 91.8928 681.275 91.8928 681.274C91.8928 681.273 91.8928 681.272 91.8928 681.271C91.8928 681.27 91.8928 681.269 91.8928 681.268C91.8928 681.268 91.8928 681.267 91.8928 681.266C91.8928 681.265 91.8928 681.264 91.8928 681.263C91.8928 681.262 91.8928 681.261 91.8928 681.26C91.8928 681.259 91.8928 681.258 91.8928 681.257C91.8928 681.256 91.8928 681.255 91.8928 681.254C91.8928 681.254 91.8928 681.253 91.8928 681.252C91.8928 681.251 91.8928 681.25 91.8928 681.249C91.8928 681.248 91.8928 681.247 91.8928 681.246C91.8928 681.245 91.8928 681.244 91.8928 681.243C91.8928 681.242 91.8928 681.241 91.8928 681.241C91.8928 681.24 91.8928 681.239 91.8928 681.238C91.8928 681.237 91.8928 681.236 91.8928 681.235C91.8928 681.234 91.8928 681.233 91.8928 681.232C91.8928 681.231 91.8928 681.23 91.8928 681.229C91.8928 681.228 91.8928 681.227 91.8928 681.227C91.8928 681.226 91.8928 681.225 91.8928 681.224C91.8928 681.223 91.8928 681.222 91.8928 681.221C91.8928 681.22 91.8928 681.219 91.8928 681.218C91.8928 681.217 91.8928 681.216 91.8928 681.215C91.8928 681.214 91.8928 681.214 91.8928 681.213C91.8928 681.212 91.8928 681.211 91.8928 681.21C91.8928 681.209 91.8928 681.208 91.8928 681.207C91.8928 681.206 91.8928 681.205 91.8928 681.204C91.8928 681.203 91.8928 681.202 91.8928 681.201C91.8928 681.2 91.8928 681.2 91.8928 681.199C91.8928 681.198 91.8928 681.197 91.8928 681.196C91.8928 681.195 91.8928 681.194 91.8928 681.193C91.8928 681.192 91.8928 681.191 91.8928 681.19C91.8928 681.189 91.8928 681.188 91.8928 681.187C91.8928 681.187 91.8928 681.186 91.8928 681.185C91.8928 681.184 91.8928 681.183 91.8928 681.182C91.8928 681.181 91.8928 681.18 91.8928 681.179C91.8928 681.178 91.8928 681.177 91.8928 681.176C91.8928 681.175 91.8928 681.174 91.8928 681.173C91.8928 681.173 91.8928 681.172 91.8928 681.171C91.8928 681.17 91.8928 681.169 91.8928 681.168C91.8928 681.167 91.8928 681.166 91.8928 681.165C91.8928 681.164 91.8928 681.163 91.8928 681.162C91.8928 681.161 91.8928 681.16 91.8928 681.16C91.8928 681.159 91.8928 681.158 91.8928 681.157C91.8928 681.156 91.8928 681.155 91.8928 681.154C91.8928 681.153 91.8928 681.152 91.8928 681.151C91.8928 681.15 91.8928 681.149 91.8928 681.148C91.8928 681.147 91.8928 681.146 91.8928 681.146C91.8928 681.145 91.8928 681.144 91.8928 681.143C91.8928 681.142 91.8928 681.141 91.8928 681.14C91.8928 681.139 91.8928 681.138 91.8928 681.137C91.8928 681.136 91.8928 681.135 91.8928 681.134C91.8928 681.133 91.8928 681.133 91.8928 681.132C91.8928 681.131 91.8928 681.13 91.8928 681.129C91.8928 681.128 91.8928 681.127 91.8928 681.126C91.8928 681.125 91.8928 681.124 91.8928 681.123C91.8928 681.122 91.8928 681.121 91.8928 681.12C91.8928 681.119 91.8928 681.119 91.8928 681.118C91.8928 681.117 91.8928 681.116 91.8928 681.115C91.8928 681.114 91.8928 681.113 91.8928 681.112C91.8928 681.111 91.8928 681.11 91.8928 681.109C91.8928 681.108 91.8928 681.107 91.8928 681.106C91.8928 681.106 91.8928 681.105 91.8928 681.104C91.8928 681.103 91.8928 681.102 91.8928 681.101C91.8928 681.1 91.8928 681.099 91.8928 681.098C91.8928 681.097 91.8928 681.096 91.8928 681.095C91.8928 681.094 91.8928 681.093 91.8928 681.092C91.8928 681.092 91.8928 681.091 91.8928 681.09C91.8928 681.089 91.8928 681.088 91.8928 681.087C91.8928 681.086 91.8928 681.085 91.8928 681.084C91.8928 681.083 91.8928 681.082 91.8928 681.081C91.8928 681.08 91.8928 681.079 91.8928 681.079C91.8928 681.078 91.8928 681.077 91.8928 681.076C91.8928 681.075 91.8928 681.074 91.8928 681.073C91.8928 681.072 91.8928 681.071 91.8928 681.07C91.8928 681.069 91.8928 681.068 91.8928 681.067C91.8928 681.066 91.8928 681.065 91.8928 681.065C91.8928 681.064 91.8928 681.063 91.8928 681.062C91.8928 681.061 91.8928 681.06 91.8928 681.059C91.8928 681.058 91.8928 681.057 91.8928 681.056C91.8928 681.055 91.8928 681.054 91.8928 681.053C91.8928 681.052 91.8928 681.052 91.8928 681.051C91.8928 681.05 91.8928 681.049 91.8928 681.048C91.8928 681.047 91.8928 681.046 91.8928 681.045C91.8928 681.044 91.8928 681.043 91.8928 681.042C91.8928 681.041 91.8928 681.04 91.8928 681.039C91.8928 681.038 91.8928 681.038 91.8928 681.037C91.8928 681.036 91.8928 681.035 91.8928 681.034C91.8928 681.033 91.8928 681.032 91.8928 681.031C91.8928 681.03 91.8928 681.029 91.8928 681.028C91.8928 681.027 91.8928 681.026 91.8928 681.025C91.8928 681.025 91.8928 681.024 91.8928 681.023C91.8928 681.022 91.8928 681.021 91.8928 681.02C91.8928 681.019 91.8928 681.018 91.8928 681.017C91.8928 681.016 91.8928 681.015 91.8928 681.014C91.8928 681.013 91.8928 681.012 91.8928 681.011C91.8928 681.011 91.8928 681.01 91.8928 681.009C91.8928 681.008 91.8928 681.007 91.8928 681.006C91.8928 681.005 91.8928 681.004 91.8928 681.003C91.8928 681.002 91.8928 681.001 91.8928 681C91.8928 680.999 91.8928 680.998 91.8928 680.998C91.8928 680.997 91.8928 680.996 91.8928 680.995C91.8928 680.994 91.8928 680.993 91.8928 680.992C91.8928 680.991 91.8928 680.99 91.8928 680.989C91.8928 680.988 91.8928 680.987 91.8928 680.986C91.8928 680.985 91.8928 680.984 91.8928 680.984C91.8928 680.983 91.8928 680.982 91.8928 680.981C91.8928 680.98 91.8928 680.979 91.8928 680.978C91.8928 680.977 91.8928 680.976 91.8928 680.975C91.8928 680.974 91.8928 680.973 91.8928 680.972C91.8928 680.971 91.8928 680.971 91.8928 680.97C91.8928 680.969 91.8928 680.968 91.8928 680.967C91.8928 680.966 91.8928 680.965 91.8928 680.964C91.8928 680.963 91.8928 680.962 91.8928 680.961C91.8928 680.96 91.8928 680.959 91.8928 680.958C91.8928 680.957 91.8928 680.957 91.8928 680.956C91.8928 680.955 91.8928 680.954 91.8928 680.953C91.8928 680.952 91.8928 680.951 91.8928 680.95C91.8928 680.949 91.8928 680.948 91.8928 680.947C91.8928 680.946 91.8928 680.945 91.8928 680.944C91.8928 680.944 91.8928 680.943 91.8928 680.942C91.8928 680.941 91.8928 680.94 91.8928 680.939C91.8928 680.938 91.8928 680.937 91.8928 680.936C91.8928 680.935 91.8928 680.934 91.8928 680.933C91.8928 680.932 91.8928 680.931 91.8928 680.931C91.8928 680.93 91.8928 680.929 91.8928 680.928C91.8928 680.927 91.8928 680.926 91.8928 680.925C91.8928 680.924 91.8928 680.923 91.8928 680.922C91.8928 680.921 91.8928 680.92 91.8928 680.919C91.8928 680.918 91.8928 680.917 91.8928 680.917C91.8928 680.916 91.8928 680.915 91.8928 680.914C91.8928 680.913 91.8928 680.912 91.8928 680.911C91.8928 680.91 91.8928 680.909 91.8928 680.908C91.8928 680.907 91.8928 680.906 91.8928 680.905C91.8928 680.904 91.8928 680.904 91.8928 680.903C91.8928 680.902 91.8928 680.901 91.8928 680.9C91.8928 680.899 91.8928 680.898 91.8928 680.897C91.8928 680.896 91.8928 680.895 91.8928 680.894C91.8928 680.893 91.8928 680.892 91.8928 680.891C91.8928 680.89 91.8928 680.89 91.8928 680.889C91.8928 680.888 91.8928 680.887 91.8928 680.886C91.8928 680.885 91.8928 680.884 91.8928 680.883C91.8928 680.882 91.8928 680.881 91.8928 680.88C91.8928 680.879 91.8928 680.878 91.8928 680.877C91.8928 680.877 91.8928 680.876 91.8928 680.875C91.8928 680.874 91.8928 680.873 91.8928 680.872C91.8928 680.871 91.8928 680.87 91.8928 680.869C91.8928 680.868 91.8928 680.867 91.8928 680.866C91.8928 680.865 91.8928 680.864 91.8928 680.863C91.8928 680.863 91.8928 680.862 91.8928 680.861C91.8928 680.86 91.8928 680.859 91.8928 680.858C91.8928 680.857 91.8928 680.856 91.8928 680.855C91.8928 680.854 91.8928 680.853 91.8928 680.852C91.8928 680.851 91.8928 680.85 91.8928 680.85C91.8928 680.849 91.8928 680.848 91.8928 680.847C91.8928 680.846 91.8928 680.845 91.8928 680.844C91.8928 680.843 91.8928 680.842 91.8928 680.841C91.8928 680.84 91.8928 680.839 91.8928 680.838C91.8928 680.837 91.8928 680.836 91.8928 680.836C91.8928 680.835 91.8928 680.834 91.8928 680.833C91.8928 680.832 91.8928 680.831 91.8928 680.83C91.8928 680.829 91.8928 680.828 91.8928 680.827C91.8928 680.826 91.8928 680.825 91.8928 680.824C91.8928 680.823 91.8928 680.823 91.8928 680.822C91.8928 680.821 91.8928 680.82 91.8928 680.819C91.8928 680.818 91.8928 680.817 91.8928 680.816C91.8928 680.815 91.8928 680.814 91.8928 680.813C91.8928 680.812 91.8928 680.811 91.8928 680.81C91.8928 680.809 91.8928 680.809 91.8928 680.808C91.8928 680.807 91.8928 680.806 91.8928 680.805C91.8928 680.804 91.8928 680.803 91.8928 680.802C91.8928 680.801 91.8928 680.8 91.8928 680.799C91.8928 680.798 91.8928 680.797 91.8928 680.796C91.8928 680.796 91.8928 680.795 91.8928 680.794C91.8928 680.793 91.8928 680.792 91.8928 680.791C91.8928 680.79 91.8928 680.789 91.8928 680.788C91.8928 680.787 91.8928 680.786 91.8928 680.785C91.8928 680.784 91.8928 680.783 91.8928 680.782C91.8928 680.782 91.8928 680.781 91.8928 680.78C91.8928 680.779 91.8928 680.778 91.8928 680.777C91.8928 680.776 91.8928 680.775 91.8928 680.774C91.8928 680.773 91.8928 680.772 91.8928 680.771C91.8928 680.77 91.8928 680.769 91.8928 680.769C91.8928 680.768 91.8928 680.767 91.8928 680.766C91.8928 680.765 91.8928 680.764 91.8928 680.763C91.8928 680.762 91.8928 680.761 91.8928 680.76C91.8928 680.759 91.8928 680.758 91.8928 680.757C91.8928 680.756 91.8928 680.755 91.8928 680.755C91.8928 680.754 91.8928 680.753 91.8928 680.752C91.8928 680.751 91.8928 680.75 91.8928 680.749C91.8928 680.748 91.8928 680.747 91.8928 680.746C91.8928 680.745 91.8928 680.744 91.8928 680.743C91.8928 680.742 91.8928 680.742 91.8928 680.741C91.8928 680.74 91.8928 680.739 91.8928 680.738C91.8928 680.737 91.8928 680.736 91.8928 680.735C91.8928 680.734 91.8928 680.733 91.8928 680.732C91.8928 680.731 91.8928 680.73 91.8928 680.729C91.8928 680.728 91.8928 680.728 91.8928 680.727C91.8928 680.726 91.8928 680.725 91.8928 680.724C91.8928 680.723 91.8928 680.722 91.8928 680.721C91.8928 680.72 91.8928 680.719 91.8928 680.718C91.8928 680.717 91.8928 680.716 91.8928 680.715C91.8928 680.715 91.8928 680.714 91.8928 680.713C91.8928 680.712 91.8928 680.711 91.8928 680.71C91.8928 680.709 91.8928 680.708 91.8928 680.707C91.8928 680.706 91.8928 680.705 91.8928 680.704C91.8928 680.703 91.8928 680.702 91.8928 680.701C91.8928 680.701 91.8928 680.7 91.8928 680.699C91.8928 680.698 91.8928 680.697 91.8928 680.696C91.8928 680.695 91.8928 680.694 91.8928 680.693C91.8928 680.692 91.8928 680.691 91.8928 680.69C91.8928 680.689 91.8928 680.688 91.8928 680.688C91.8928 680.687 91.8928 680.686 91.8928 680.685C91.8928 680.684 91.8928 680.683 91.8928 680.682C91.8928 680.681 91.8928 680.68 91.8928 680.679C91.8928 680.678 91.8928 680.677 91.8928 680.676C91.8928 680.675 91.8928 680.674 91.8928 680.674C91.8928 680.673 91.8928 680.672 91.8928 680.671C91.8928 680.67 91.8928 680.669 91.8928 680.668C91.8928 680.667 91.8928 680.666 91.8928 680.665C91.8928 680.664 91.8928 680.663 91.8928 680.662C91.8928 680.661 91.8928 680.661 91.8928 680.66C91.8928 680.659 91.8928 680.658 91.8928 680.657C91.8928 680.656 91.8928 680.655 91.8928 680.654C91.8928 680.653 91.8928 680.652 91.8928 680.651C91.8928 680.65 91.8928 680.649 91.8928 680.648C91.8928 680.647 91.8928 680.647 91.8928 680.646C91.8928 680.645 91.8928 680.644 91.8928 680.643C91.8928 680.642 91.8928 680.641 91.8928 680.64C91.8928 680.639 91.8928 680.638 91.8928 680.637C91.8928 680.636 91.8928 680.635 91.8928 680.634C91.8928 680.634 91.8928 680.633 91.8928 680.632C91.8928 680.631 91.8928 680.63 91.8928 680.629C91.8928 680.628 91.8928 680.627 91.8928 680.626C91.8928 680.625 91.8928 680.624 91.8928 680.623C91.8928 680.622 91.8928 680.621 91.8928 680.62C91.8928 680.62 91.8928 680.619 91.8928 680.618C91.8928 680.617 91.8928 680.616 91.8928 680.615C91.8928 680.614 91.8928 680.613 91.8928 680.612C91.8928 680.611 91.8928 680.61 91.8928 680.609C91.8928 680.608 91.8928 680.607 91.8928 680.607C91.8928 680.606 91.8928 680.605 91.8928 680.604C91.8928 680.603 91.8928 680.602 91.8928 680.601C91.8928 680.6 91.8928 680.599 91.8928 680.598C91.8928 680.597 91.8928 680.596 91.8928 680.595C91.8928 680.594 91.8928 680.594 91.8928 680.593C91.8928 680.592 91.8928 680.591 91.8928 680.59C91.8928 680.589 91.8928 680.588 91.8928 680.587C91.8928 680.586 91.8928 680.585 91.8928 680.584C91.8928 680.583 91.8928 680.582 91.8928 680.581C91.8928 680.58 91.8928 680.58 91.8928 680.579C91.8928 680.578 91.8928 680.577 91.8928 680.576C91.8928 680.575 91.8928 680.574 91.8928 680.573C91.8928 680.572 91.8928 680.571 91.8928 680.57C91.8928 680.569 91.8928 680.568 91.8928 680.567C91.8928 680.567 91.8928 680.566 91.8928 680.565C91.8928 680.564 91.8928 680.563 91.8928 680.562C91.8928 680.561 91.8928 680.56 91.8928 680.559C91.8928 680.558 91.8928 680.557 91.8928 680.556C91.8928 680.555 91.8928 680.554 91.8928 680.553C91.8928 680.553 91.8928 680.552 91.8928 680.551C91.8928 680.55 91.8928 680.549 91.8928 680.548C91.8928 680.547 91.8928 680.546 91.8928 680.545C91.8928 680.544 91.8928 680.543 91.8928 680.542C91.8928 680.541 91.8928 680.54 91.8928 680.54C91.8928 680.539 91.8928 680.538 91.8928 680.537C91.8928 680.536 91.8928 680.535 91.8928 680.534C91.8928 680.533 91.8928 680.532 91.8928 680.531C91.8928 680.53 91.8928 680.529 91.8928 680.528C91.8928 680.527 91.8928 680.526 91.8928 680.526C91.8928 680.525 91.8928 680.524 91.8928 680.523C91.8928 680.522 91.8928 680.521 91.8928 680.52C91.8928 680.519 91.8928 680.518 91.8928 680.517C91.8928 680.516 91.8928 680.515 91.8928 680.514C91.8928 680.513 91.8928 680.513 91.8928 680.512C91.8928 680.511 91.8928 680.51 91.8928 680.509C91.8928 680.508 91.8928 680.507 91.8928 680.506C91.8928 680.505 91.8928 680.504 91.8928 680.503C91.8928 680.502 91.8928 680.501 91.8928 680.5C91.8928 680.499 91.8928 680.499 91.8928 680.498C91.8928 680.497 91.8928 680.496 91.8928 680.495C91.8928 680.494 91.8928 680.493 91.8928 680.492C91.8928 680.491 91.8928 680.49 91.8928 680.489C91.8928 680.488 91.8928 680.487 91.8928 680.486C91.8928 680.486 91.8928 680.485 91.8928 680.484C91.8928 680.483 91.8928 680.482 91.8928 680.481C91.8928 680.48 91.8928 680.479 91.8928 680.478C91.8928 680.477 91.8928 680.476 91.8928 680.475C91.8928 680.474 91.8928 680.473 91.8928 680.472C91.8928 680.472 91.8928 680.471 91.8928 680.47C91.8928 680.469 91.8928 680.468 91.8928 680.467C91.8928 680.466 91.8928 680.465 91.8928 680.464C91.8928 680.463 91.8928 680.462 91.8928 680.461C91.8928 680.46 91.8928 680.459 91.8928 680.459C91.8928 680.458 91.8928 680.457 91.8928 680.456C91.8928 680.455 91.8928 680.454 91.8928 680.453C91.8928 680.452 91.8928 680.451 91.8928 680.45C91.8928 680.449 91.8928 680.448 91.8928 680.447C91.8928 680.446 91.8928 680.445 91.8928 680.445C91.8928 680.444 91.8928 680.443 91.8928 680.442C91.8928 680.441 91.8928 680.44 91.8928 680.439C91.8928 680.438 91.8928 680.437 91.8928 680.436C91.8928 680.435 91.8928 680.434 91.8928 680.433C91.8928 680.432 91.8928 680.432 91.8928 680.431C91.8928 680.43 91.8928 680.429 91.8928 680.428C91.8928 680.427 91.8928 680.426 91.8928 680.425C91.8928 680.424 91.8928 680.423 91.8928 680.422C91.8928 680.421 91.8928 680.42 91.8928 680.419C91.8928 680.418 91.8928 680.418 91.8928 680.417C91.8928 680.416 91.8928 680.415 91.8928 680.414C91.8928 680.413 91.8928 680.412 91.8928 680.411C91.8928 680.41 91.8928 680.409 91.8928 680.408C91.8928 680.407 91.8928 680.406 91.8928 680.405C91.8928 680.405 91.8928 680.404 91.8928 680.403C91.8928 680.402 91.8928 680.401 91.8928 680.4C91.8928 680.399 91.8928 680.398 91.8928 680.397C91.8928 680.396 91.8928 680.395 91.8928 680.394C91.8928 680.393 91.8928 680.392 91.8928 680.391C91.8928 680.391 91.8928 680.39 91.8928 680.389C91.8928 680.388 91.8928 680.387 91.8928 680.386C91.8928 680.385 91.8928 680.384 91.8928 680.383C91.8928 680.382 91.8928 680.381 91.8928 680.38C91.8928 680.379 91.8928 680.378 91.8928 680.378C91.8928 680.377 91.8928 680.376 91.8928 680.375C91.8928 680.374 91.8928 680.373 91.8928 680.372C91.8928 680.371 91.8928 680.37 91.8928 680.369C91.8928 680.368 91.8928 680.367 91.8928 680.366C91.8928 680.365 91.8928 680.364 91.8928 680.364C91.8928 680.363 91.8928 680.362 91.8928 680.361C91.8928 680.36 91.8928 680.359 91.8928 680.358C91.8928 680.357 91.8928 680.356 91.8928 680.355C91.8928 680.354 91.8928 680.353 91.8928 680.352C91.8928 680.351 91.8928 680.351 91.8928 680.35C91.8928 680.349 91.8928 680.348 91.8928 680.347C91.8928 680.346 91.8928 680.345 91.8928 680.344C91.8928 680.343 91.8928 680.342 91.8928 680.341C91.8928 680.34 91.8928 680.339 91.8928 680.338C91.8928 680.337 91.8928 680.337 91.8928 680.336C91.8928 680.335 91.8928 680.334 91.8928 680.333C91.8928 680.332 91.8928 680.331 91.8928 680.33C91.8928 680.329 91.8928 680.328 91.8928 680.327C91.8928 680.326 91.8928 680.325 91.8928 680.324C91.8928 680.324 91.8928 680.323 91.8928 680.322C91.8928 680.321 91.8928 680.32 91.8928 680.319C91.8928 680.318 91.8928 680.317 91.8928 680.316C91.8928 680.315 91.8928 680.314 91.8928 680.313C91.8928 680.312 91.8928 680.311 91.8928 680.31C91.8928 680.31 91.8928 680.309 91.8928 680.308C91.8928 680.307 91.8928 680.306 91.8928 680.305C91.8928 680.304 91.8928 680.303 91.8928 680.302C91.8928 680.301 91.8928 680.3 91.8928 680.299C91.8928 680.298 91.8928 680.297 91.8928 680.297C91.8928 680.296 91.8928 680.295 91.8928 680.294C91.8928 680.293 91.8928 680.292 91.8928 680.291C91.8928 680.29 91.8928 680.289 91.8928 680.288C91.8928 680.287 91.8928 680.286 91.8928 680.285C91.8928 680.284 91.8928 680.283 91.8928 680.283C91.8928 680.282 91.8928 680.281 91.8928 680.28C91.8928 680.279 91.8928 680.278 91.8928 680.277C91.8928 680.276 91.8928 680.275 91.8928 680.274C91.8928 680.273 91.8928 680.272 91.8928 680.271C91.8928 680.27 91.8928 680.27 91.8928 680.269C91.8928 680.268 91.8928 680.267 91.8928 680.266C91.8928 680.265 91.8928 680.264 91.8928 680.263C91.8928 680.262 91.8928 680.261 91.8928 680.26C91.8928 680.259 91.8928 680.258 91.8928 680.257C91.8928 680.257 91.8928 680.256 91.8928 680.255C91.8928 680.254 91.8928 680.253 91.8928 680.252C91.8928 680.251 91.8928 680.25 91.8928 680.249C91.8928 680.248 91.8928 680.247 91.8928 680.246C91.8928 680.245 91.8928 680.244 91.8928 680.243C91.8928 680.243 91.8928 680.242 91.8928 680.241C91.8928 680.24 91.8928 680.239 91.8928 680.238C91.8928 680.237 91.8928 680.236 91.8928 680.235C91.8928 680.234 91.8928 680.233 91.8928 680.232C91.8928 680.231 91.8928 680.23 91.8928 680.23C91.8928 680.229 91.8928 680.228 91.8928 680.227C91.8928 680.226 91.8928 680.225 91.8928 680.224C91.8928 680.223 91.8928 680.222 91.8928 680.221C91.8928 680.22 91.8928 680.219 91.8928 680.218C91.8928 680.217 91.8928 680.216 91.8928 680.216C91.8928 680.215 91.8928 680.214 91.8928 680.213C91.8928 680.212 91.8928 680.211 91.8928 680.21C91.8928 680.209 91.8928 680.208 91.8928 680.207C91.8928 680.206 91.8928 680.205 91.8928 680.204C91.8928 680.203 91.8928 680.203 91.8928 680.202C91.8928 680.201 91.8928 680.2 91.8928 680.199C91.8928 680.198 91.8928 680.197 91.8928 680.196C91.8928 680.195 91.8928 680.194 91.8928 680.193C91.8928 680.192 91.8928 680.191 91.8928 680.19C91.8928 680.189 91.8928 680.189 91.8928 680.188C91.8928 680.187 91.8928 680.186 91.8928 680.185C91.8928 680.184 91.8928 680.183 91.8928 680.182C91.8928 680.181 91.8928 680.18 91.8928 680.179C91.8928 680.178 91.8928 680.177 91.8928 680.176C91.8928 680.176 91.8928 680.175 91.8928 680.174C91.8928 680.173 91.8928 680.172 91.8928 680.171C91.8928 680.17 91.8928 680.169 91.8928 680.168C91.8928 680.167 91.8928 680.166 91.8928 680.165C91.8928 680.164 91.8928 680.163 91.8928 680.162C91.8928 680.162 91.8928 680.161 91.8928 680.16C91.8928 680.159 91.8928 680.158 91.8928 680.157C91.8928 680.156 91.8928 680.155 91.8928 680.154C91.8928 680.153 91.8928 680.152 91.8928 680.151C91.8928 680.15 91.8928 680.149 91.8928 680.149C91.8928 680.148 91.8928 680.147 91.8928 680.146C91.8928 680.145 91.8928 680.144 91.8928 680.143C91.8928 680.142 91.8928 680.141 91.8928 680.14C91.8928 680.139 91.8928 680.138 91.8928 680.137C91.8928 680.136 91.8928 680.135 91.8928 680.135C91.8928 680.134 91.8928 680.133 91.8928 680.132C91.8928 680.131 91.8928 680.13 91.8928 680.129C91.8928 680.128 91.8928 680.127 91.8928 680.126C91.8928 680.125 91.8928 680.124 91.8928 680.123C91.8928 680.122 91.8928 680.122 91.8928 680.121C91.8928 680.12 91.8928 680.119 91.8928 680.118C91.8928 680.117 91.8928 680.116 91.8928 680.115C91.8928 680.114 91.8928 680.113 91.8928 680.112C91.8928 680.111 91.8928 680.11 91.8928 680.109C91.8928 680.108 91.8928 680.108 91.8928 680.107C91.8928 680.106 91.8928 680.105 91.8928 680.104C91.8928 680.103 91.8928 680.102 91.8928 680.101C91.8928 680.1 91.8928 680.099 91.8928 680.098C91.8928 680.097 91.8928 680.096 91.8928 680.095H90.8928H89.8928C89.8928 680.096 89.8928 680.097 89.8928 680.098C89.8928 680.099 89.8928 680.1 89.8928 680.101C89.8928 680.102 89.8928 680.103 89.8928 680.104C89.8928 680.105 89.8928 680.106 89.8928 680.107C89.8928 680.108 89.8928 680.108 89.8928 680.109C89.8928 680.11 89.8928 680.111 89.8928 680.112C89.8928 680.113 89.8928 680.114 89.8928 680.115C89.8928 680.116 89.8928 680.117 89.8928 680.118C89.8928 680.119 89.8928 680.12 89.8928 680.121C89.8928 680.122 89.8928 680.122 89.8928 680.123C89.8928 680.124 89.8928 680.125 89.8928 680.126C89.8928 680.127 89.8928 680.128 89.8928 680.129C89.8928 680.13 89.8928 680.131 89.8928 680.132C89.8928 680.133 89.8928 680.134 89.8928 680.135C89.8928 680.135 89.8928 680.136 89.8928 680.137C89.8928 680.138 89.8928 680.139 89.8928 680.14C89.8928 680.141 89.8928 680.142 89.8928 680.143C89.8928 680.144 89.8928 680.145 89.8928 680.146C89.8928 680.147 89.8928 680.148 89.8928 680.149C89.8928 680.149 89.8928 680.15 89.8928 680.151C89.8928 680.152 89.8928 680.153 89.8928 680.154C89.8928 680.155 89.8928 680.156 89.8928 680.157C89.8928 680.158 89.8928 680.159 89.8928 680.16C89.8928 680.161 89.8928 680.162 89.8928 680.162C89.8928 680.163 89.8928 680.164 89.8928 680.165C89.8928 680.166 89.8928 680.167 89.8928 680.168C89.8928 680.169 89.8928 680.17 89.8928 680.171C89.8928 680.172 89.8928 680.173 89.8928 680.174C89.8928 680.175 89.8928 680.176 89.8928 680.176C89.8928 680.177 89.8928 680.178 89.8928 680.179C89.8928 680.18 89.8928 680.181 89.8928 680.182C89.8928 680.183 89.8928 680.184 89.8928 680.185C89.8928 680.186 89.8928 680.187 89.8928 680.188C89.8928 680.189 89.8928 680.189 89.8928 680.19C89.8928 680.191 89.8928 680.192 89.8928 680.193C89.8928 680.194 89.8928 680.195 89.8928 680.196C89.8928 680.197 89.8928 680.198 89.8928 680.199C89.8928 680.2 89.8928 680.201 89.8928 680.202C89.8928 680.203 89.8928 680.203 89.8928 680.204C89.8928 680.205 89.8928 680.206 89.8928 680.207C89.8928 680.208 89.8928 680.209 89.8928 680.21C89.8928 680.211 89.8928 680.212 89.8928 680.213C89.8928 680.214 89.8928 680.215 89.8928 680.216C89.8928 680.216 89.8928 680.217 89.8928 680.218C89.8928 680.219 89.8928 680.22 89.8928 680.221C89.8928 680.222 89.8928 680.223 89.8928 680.224C89.8928 680.225 89.8928 680.226 89.8928 680.227C89.8928 680.228 89.8928 680.229 89.8928 680.23C89.8928 680.23 89.8928 680.231 89.8928 680.232C89.8928 680.233 89.8928 680.234 89.8928 680.235C89.8928 680.236 89.8928 680.237 89.8928 680.238C89.8928 680.239 89.8928 680.24 89.8928 680.241C89.8928 680.242 89.8928 680.243 89.8928 680.243C89.8928 680.244 89.8928 680.245 89.8928 680.246C89.8928 680.247 89.8928 680.248 89.8928 680.249C89.8928 680.25 89.8928 680.251 89.8928 680.252C89.8928 680.253 89.8928 680.254 89.8928 680.255C89.8928 680.256 89.8928 680.257 89.8928 680.257C89.8928 680.258 89.8928 680.259 89.8928 680.26C89.8928 680.261 89.8928 680.262 89.8928 680.263C89.8928 680.264 89.8928 680.265 89.8928 680.266C89.8928 680.267 89.8928 680.268 89.8928 680.269C89.8928 680.27 89.8928 680.27 89.8928 680.271C89.8928 680.272 89.8928 680.273 89.8928 680.274C89.8928 680.275 89.8928 680.276 89.8928 680.277C89.8928 680.278 89.8928 680.279 89.8928 680.28C89.8928 680.281 89.8928 680.282 89.8928 680.283C89.8928 680.283 89.8928 680.284 89.8928 680.285C89.8928 680.286 89.8928 680.287 89.8928 680.288C89.8928 680.289 89.8928 680.29 89.8928 680.291C89.8928 680.292 89.8928 680.293 89.8928 680.294C89.8928 680.295 89.8928 680.296 89.8928 680.297C89.8928 680.297 89.8928 680.298 89.8928 680.299C89.8928 680.3 89.8928 680.301 89.8928 680.302C89.8928 680.303 89.8928 680.304 89.8928 680.305C89.8928 680.306 89.8928 680.307 89.8928 680.308C89.8928 680.309 89.8928 680.31 89.8928 680.31C89.8928 680.311 89.8928 680.312 89.8928 680.313C89.8928 680.314 89.8928 680.315 89.8928 680.316C89.8928 680.317 89.8928 680.318 89.8928 680.319C89.8928 680.32 89.8928 680.321 89.8928 680.322C89.8928 680.323 89.8928 680.324 89.8928 680.324C89.8928 680.325 89.8928 680.326 89.8928 680.327C89.8928 680.328 89.8928 680.329 89.8928 680.33C89.8928 680.331 89.8928 680.332 89.8928 680.333C89.8928 680.334 89.8928 680.335 89.8928 680.336C89.8928 680.337 89.8928 680.337 89.8928 680.338C89.8928 680.339 89.8928 680.34 89.8928 680.341C89.8928 680.342 89.8928 680.343 89.8928 680.344C89.8928 680.345 89.8928 680.346 89.8928 680.347C89.8928 680.348 89.8928 680.349 89.8928 680.35C89.8928 680.351 89.8928 680.351 89.8928 680.352C89.8928 680.353 89.8928 680.354 89.8928 680.355C89.8928 680.356 89.8928 680.357 89.8928 680.358C89.8928 680.359 89.8928 680.36 89.8928 680.361C89.8928 680.362 89.8928 680.363 89.8928 680.364C89.8928 680.364 89.8928 680.365 89.8928 680.366C89.8928 680.367 89.8928 680.368 89.8928 680.369C89.8928 680.37 89.8928 680.371 89.8928 680.372C89.8928 680.373 89.8928 680.374 89.8928 680.375C89.8928 680.376 89.8928 680.377 89.8928 680.378C89.8928 680.378 89.8928 680.379 89.8928 680.38C89.8928 680.381 89.8928 680.382 89.8928 680.383C89.8928 680.384 89.8928 680.385 89.8928 680.386C89.8928 680.387 89.8928 680.388 89.8928 680.389C89.8928 680.39 89.8928 680.391 89.8928 680.391C89.8928 680.392 89.8928 680.393 89.8928 680.394C89.8928 680.395 89.8928 680.396 89.8928 680.397C89.8928 680.398 89.8928 680.399 89.8928 680.4C89.8928 680.401 89.8928 680.402 89.8928 680.403C89.8928 680.404 89.8928 680.405 89.8928 680.405C89.8928 680.406 89.8928 680.407 89.8928 680.408C89.8928 680.409 89.8928 680.41 89.8928 680.411C89.8928 680.412 89.8928 680.413 89.8928 680.414C89.8928 680.415 89.8928 680.416 89.8928 680.417C89.8928 680.418 89.8928 680.418 89.8928 680.419C89.8928 680.42 89.8928 680.421 89.8928 680.422C89.8928 680.423 89.8928 680.424 89.8928 680.425C89.8928 680.426 89.8928 680.427 89.8928 680.428C89.8928 680.429 89.8928 680.43 89.8928 680.431C89.8928 680.432 89.8928 680.432 89.8928 680.433C89.8928 680.434 89.8928 680.435 89.8928 680.436C89.8928 680.437 89.8928 680.438 89.8928 680.439C89.8928 680.44 89.8928 680.441 89.8928 680.442C89.8928 680.443 89.8928 680.444 89.8928 680.445C89.8928 680.445 89.8928 680.446 89.8928 680.447C89.8928 680.448 89.8928 680.449 89.8928 680.45C89.8928 680.451 89.8928 680.452 89.8928 680.453C89.8928 680.454 89.8928 680.455 89.8928 680.456C89.8928 680.457 89.8928 680.458 89.8928 680.459C89.8928 680.459 89.8928 680.46 89.8928 680.461C89.8928 680.462 89.8928 680.463 89.8928 680.464C89.8928 680.465 89.8928 680.466 89.8928 680.467C89.8928 680.468 89.8928 680.469 89.8928 680.47C89.8928 680.471 89.8928 680.472 89.8928 680.472C89.8928 680.473 89.8928 680.474 89.8928 680.475C89.8928 680.476 89.8928 680.477 89.8928 680.478C89.8928 680.479 89.8928 680.48 89.8928 680.481C89.8928 680.482 89.8928 680.483 89.8928 680.484C89.8928 680.485 89.8928 680.486 89.8928 680.486C89.8928 680.487 89.8928 680.488 89.8928 680.489C89.8928 680.49 89.8928 680.491 89.8928 680.492C89.8928 680.493 89.8928 680.494 89.8928 680.495C89.8928 680.496 89.8928 680.497 89.8928 680.498C89.8928 680.499 89.8928 680.499 89.8928 680.5C89.8928 680.501 89.8928 680.502 89.8928 680.503C89.8928 680.504 89.8928 680.505 89.8928 680.506C89.8928 680.507 89.8928 680.508 89.8928 680.509C89.8928 680.51 89.8928 680.511 89.8928 680.512C89.8928 680.513 89.8928 680.513 89.8928 680.514C89.8928 680.515 89.8928 680.516 89.8928 680.517C89.8928 680.518 89.8928 680.519 89.8928 680.52C89.8928 680.521 89.8928 680.522 89.8928 680.523C89.8928 680.524 89.8928 680.525 89.8928 680.526C89.8928 680.526 89.8928 680.527 89.8928 680.528C89.8928 680.529 89.8928 680.53 89.8928 680.531C89.8928 680.532 89.8928 680.533 89.8928 680.534C89.8928 680.535 89.8928 680.536 89.8928 680.537C89.8928 680.538 89.8928 680.539 89.8928 680.54C89.8928 680.54 89.8928 680.541 89.8928 680.542C89.8928 680.543 89.8928 680.544 89.8928 680.545C89.8928 680.546 89.8928 680.547 89.8928 680.548C89.8928 680.549 89.8928 680.55 89.8928 680.551C89.8928 680.552 89.8928 680.553 89.8928 680.553C89.8928 680.554 89.8928 680.555 89.8928 680.556C89.8928 680.557 89.8928 680.558 89.8928 680.559C89.8928 680.56 89.8928 680.561 89.8928 680.562C89.8928 680.563 89.8928 680.564 89.8928 680.565C89.8928 680.566 89.8928 680.567 89.8928 680.567C89.8928 680.568 89.8928 680.569 89.8928 680.57C89.8928 680.571 89.8928 680.572 89.8928 680.573C89.8928 680.574 89.8928 680.575 89.8928 680.576C89.8928 680.577 89.8928 680.578 89.8928 680.579C89.8928 680.58 89.8928 680.58 89.8928 680.581C89.8928 680.582 89.8928 680.583 89.8928 680.584C89.8928 680.585 89.8928 680.586 89.8928 680.587C89.8928 680.588 89.8928 680.589 89.8928 680.59C89.8928 680.591 89.8928 680.592 89.8928 680.593C89.8928 680.594 89.8928 680.594 89.8928 680.595C89.8928 680.596 89.8928 680.597 89.8928 680.598C89.8928 680.599 89.8928 680.6 89.8928 680.601C89.8928 680.602 89.8928 680.603 89.8928 680.604C89.8928 680.605 89.8928 680.606 89.8928 680.607C89.8928 680.607 89.8928 680.608 89.8928 680.609C89.8928 680.61 89.8928 680.611 89.8928 680.612C89.8928 680.613 89.8928 680.614 89.8928 680.615C89.8928 680.616 89.8928 680.617 89.8928 680.618C89.8928 680.619 89.8928 680.62 89.8928 680.62C89.8928 680.621 89.8928 680.622 89.8928 680.623C89.8928 680.624 89.8928 680.625 89.8928 680.626C89.8928 680.627 89.8928 680.628 89.8928 680.629C89.8928 680.63 89.8928 680.631 89.8928 680.632C89.8928 680.633 89.8928 680.634 89.8928 680.634C89.8928 680.635 89.8928 680.636 89.8928 680.637C89.8928 680.638 89.8928 680.639 89.8928 680.64C89.8928 680.641 89.8928 680.642 89.8928 680.643C89.8928 680.644 89.8928 680.645 89.8928 680.646C89.8928 680.647 89.8928 680.647 89.8928 680.648C89.8928 680.649 89.8928 680.65 89.8928 680.651C89.8928 680.652 89.8928 680.653 89.8928 680.654C89.8928 680.655 89.8928 680.656 89.8928 680.657C89.8928 680.658 89.8928 680.659 89.8928 680.66C89.8928 680.661 89.8928 680.661 89.8928 680.662C89.8928 680.663 89.8928 680.664 89.8928 680.665C89.8928 680.666 89.8928 680.667 89.8928 680.668C89.8928 680.669 89.8928 680.67 89.8928 680.671C89.8928 680.672 89.8928 680.673 89.8928 680.674C89.8928 680.674 89.8928 680.675 89.8928 680.676C89.8928 680.677 89.8928 680.678 89.8928 680.679C89.8928 680.68 89.8928 680.681 89.8928 680.682C89.8928 680.683 89.8928 680.684 89.8928 680.685C89.8928 680.686 89.8928 680.687 89.8928 680.688C89.8928 680.688 89.8928 680.689 89.8928 680.69C89.8928 680.691 89.8928 680.692 89.8928 680.693C89.8928 680.694 89.8928 680.695 89.8928 680.696C89.8928 680.697 89.8928 680.698 89.8928 680.699C89.8928 680.7 89.8928 680.701 89.8928 680.701C89.8928 680.702 89.8928 680.703 89.8928 680.704C89.8928 680.705 89.8928 680.706 89.8928 680.707C89.8928 680.708 89.8928 680.709 89.8928 680.71C89.8928 680.711 89.8928 680.712 89.8928 680.713C89.8928 680.714 89.8928 680.715 89.8928 680.715C89.8928 680.716 89.8928 680.717 89.8928 680.718C89.8928 680.719 89.8928 680.72 89.8928 680.721C89.8928 680.722 89.8928 680.723 89.8928 680.724C89.8928 680.725 89.8928 680.726 89.8928 680.727C89.8928 680.728 89.8928 680.728 89.8928 680.729C89.8928 680.73 89.8928 680.731 89.8928 680.732C89.8928 680.733 89.8928 680.734 89.8928 680.735C89.8928 680.736 89.8928 680.737 89.8928 680.738C89.8928 680.739 89.8928 680.74 89.8928 680.741C89.8928 680.742 89.8928 680.742 89.8928 680.743C89.8928 680.744 89.8928 680.745 89.8928 680.746C89.8928 680.747 89.8928 680.748 89.8928 680.749C89.8928 680.75 89.8928 680.751 89.8928 680.752C89.8928 680.753 89.8928 680.754 89.8928 680.755C89.8928 680.755 89.8928 680.756 89.8928 680.757C89.8928 680.758 89.8928 680.759 89.8928 680.76C89.8928 680.761 89.8928 680.762 89.8928 680.763C89.8928 680.764 89.8928 680.765 89.8928 680.766C89.8928 680.767 89.8928 680.768 89.8928 680.769C89.8928 680.769 89.8928 680.77 89.8928 680.771C89.8928 680.772 89.8928 680.773 89.8928 680.774C89.8928 680.775 89.8928 680.776 89.8928 680.777C89.8928 680.778 89.8928 680.779 89.8928 680.78C89.8928 680.781 89.8928 680.782 89.8928 680.782C89.8928 680.783 89.8928 680.784 89.8928 680.785C89.8928 680.786 89.8928 680.787 89.8928 680.788C89.8928 680.789 89.8928 680.79 89.8928 680.791C89.8928 680.792 89.8928 680.793 89.8928 680.794C89.8928 680.795 89.8928 680.796 89.8928 680.796C89.8928 680.797 89.8928 680.798 89.8928 680.799C89.8928 680.8 89.8928 680.801 89.8928 680.802C89.8928 680.803 89.8928 680.804 89.8928 680.805C89.8928 680.806 89.8928 680.807 89.8928 680.808C89.8928 680.809 89.8928 680.809 89.8928 680.81C89.8928 680.811 89.8928 680.812 89.8928 680.813C89.8928 680.814 89.8928 680.815 89.8928 680.816C89.8928 680.817 89.8928 680.818 89.8928 680.819C89.8928 680.82 89.8928 680.821 89.8928 680.822C89.8928 680.823 89.8928 680.823 89.8928 680.824C89.8928 680.825 89.8928 680.826 89.8928 680.827C89.8928 680.828 89.8928 680.829 89.8928 680.83C89.8928 680.831 89.8928 680.832 89.8928 680.833C89.8928 680.834 89.8928 680.835 89.8928 680.836C89.8928 680.836 89.8928 680.837 89.8928 680.838C89.8928 680.839 89.8928 680.84 89.8928 680.841C89.8928 680.842 89.8928 680.843 89.8928 680.844C89.8928 680.845 89.8928 680.846 89.8928 680.847C89.8928 680.848 89.8928 680.849 89.8928 680.85C89.8928 680.85 89.8928 680.851 89.8928 680.852C89.8928 680.853 89.8928 680.854 89.8928 680.855C89.8928 680.856 89.8928 680.857 89.8928 680.858C89.8928 680.859 89.8928 680.86 89.8928 680.861C89.8928 680.862 89.8928 680.863 89.8928 680.863C89.8928 680.864 89.8928 680.865 89.8928 680.866C89.8928 680.867 89.8928 680.868 89.8928 680.869C89.8928 680.87 89.8928 680.871 89.8928 680.872C89.8928 680.873 89.8928 680.874 89.8928 680.875C89.8928 680.876 89.8928 680.877 89.8928 680.877C89.8928 680.878 89.8928 680.879 89.8928 680.88C89.8928 680.881 89.8928 680.882 89.8928 680.883C89.8928 680.884 89.8928 680.885 89.8928 680.886C89.8928 680.887 89.8928 680.888 89.8928 680.889C89.8928 680.89 89.8928 680.89 89.8928 680.891C89.8928 680.892 89.8928 680.893 89.8928 680.894C89.8928 680.895 89.8928 680.896 89.8928 680.897C89.8928 680.898 89.8928 680.899 89.8928 680.9C89.8928 680.901 89.8928 680.902 89.8928 680.903C89.8928 680.904 89.8928 680.904 89.8928 680.905C89.8928 680.906 89.8928 680.907 89.8928 680.908C89.8928 680.909 89.8928 680.91 89.8928 680.911C89.8928 680.912 89.8928 680.913 89.8928 680.914C89.8928 680.915 89.8928 680.916 89.8928 680.917C89.8928 680.917 89.8928 680.918 89.8928 680.919C89.8928 680.92 89.8928 680.921 89.8928 680.922C89.8928 680.923 89.8928 680.924 89.8928 680.925C89.8928 680.926 89.8928 680.927 89.8928 680.928C89.8928 680.929 89.8928 680.93 89.8928 680.931C89.8928 680.931 89.8928 680.932 89.8928 680.933C89.8928 680.934 89.8928 680.935 89.8928 680.936C89.8928 680.937 89.8928 680.938 89.8928 680.939C89.8928 680.94 89.8928 680.941 89.8928 680.942C89.8928 680.943 89.8928 680.944 89.8928 680.944C89.8928 680.945 89.8928 680.946 89.8928 680.947C89.8928 680.948 89.8928 680.949 89.8928 680.95C89.8928 680.951 89.8928 680.952 89.8928 680.953C89.8928 680.954 89.8928 680.955 89.8928 680.956C89.8928 680.957 89.8928 680.957 89.8928 680.958C89.8928 680.959 89.8928 680.96 89.8928 680.961C89.8928 680.962 89.8928 680.963 89.8928 680.964C89.8928 680.965 89.8928 680.966 89.8928 680.967C89.8928 680.968 89.8928 680.969 89.8928 680.97C89.8928 680.971 89.8928 680.971 89.8928 680.972C89.8928 680.973 89.8928 680.974 89.8928 680.975C89.8928 680.976 89.8928 680.977 89.8928 680.978C89.8928 680.979 89.8928 680.98 89.8928 680.981C89.8928 680.982 89.8928 680.983 89.8928 680.984C89.8928 680.984 89.8928 680.985 89.8928 680.986C89.8928 680.987 89.8928 680.988 89.8928 680.989C89.8928 680.99 89.8928 680.991 89.8928 680.992C89.8928 680.993 89.8928 680.994 89.8928 680.995C89.8928 680.996 89.8928 680.997 89.8928 680.998C89.8928 680.998 89.8928 680.999 89.8928 681C89.8928 681.001 89.8928 681.002 89.8928 681.003C89.8928 681.004 89.8928 681.005 89.8928 681.006C89.8928 681.007 89.8928 681.008 89.8928 681.009C89.8928 681.01 89.8928 681.011 89.8928 681.011C89.8928 681.012 89.8928 681.013 89.8928 681.014C89.8928 681.015 89.8928 681.016 89.8928 681.017C89.8928 681.018 89.8928 681.019 89.8928 681.02C89.8928 681.021 89.8928 681.022 89.8928 681.023C89.8928 681.024 89.8928 681.025 89.8928 681.025C89.8928 681.026 89.8928 681.027 89.8928 681.028C89.8928 681.029 89.8928 681.03 89.8928 681.031C89.8928 681.032 89.8928 681.033 89.8928 681.034C89.8928 681.035 89.8928 681.036 89.8928 681.037C89.8928 681.038 89.8928 681.038 89.8928 681.039C89.8928 681.04 89.8928 681.041 89.8928 681.042C89.8928 681.043 89.8928 681.044 89.8928 681.045C89.8928 681.046 89.8928 681.047 89.8928 681.048C89.8928 681.049 89.8928 681.05 89.8928 681.051C89.8928 681.052 89.8928 681.052 89.8928 681.053C89.8928 681.054 89.8928 681.055 89.8928 681.056C89.8928 681.057 89.8928 681.058 89.8928 681.059C89.8928 681.06 89.8928 681.061 89.8928 681.062C89.8928 681.063 89.8928 681.064 89.8928 681.065C89.8928 681.065 89.8928 681.066 89.8928 681.067C89.8928 681.068 89.8928 681.069 89.8928 681.07C89.8928 681.071 89.8928 681.072 89.8928 681.073C89.8928 681.074 89.8928 681.075 89.8928 681.076C89.8928 681.077 89.8928 681.078 89.8928 681.079C89.8928 681.079 89.8928 681.08 89.8928 681.081C89.8928 681.082 89.8928 681.083 89.8928 681.084C89.8928 681.085 89.8928 681.086 89.8928 681.087C89.8928 681.088 89.8928 681.089 89.8928 681.09C89.8928 681.091 89.8928 681.092 89.8928 681.092C89.8928 681.093 89.8928 681.094 89.8928 681.095C89.8928 681.096 89.8928 681.097 89.8928 681.098C89.8928 681.099 89.8928 681.1 89.8928 681.101C89.8928 681.102 89.8928 681.103 89.8928 681.104C89.8928 681.105 89.8928 681.106 89.8928 681.106C89.8928 681.107 89.8928 681.108 89.8928 681.109C89.8928 681.11 89.8928 681.111 89.8928 681.112C89.8928 681.113 89.8928 681.114 89.8928 681.115C89.8928 681.116 89.8928 681.117 89.8928 681.118C89.8928 681.119 89.8928 681.119 89.8928 681.12C89.8928 681.121 89.8928 681.122 89.8928 681.123C89.8928 681.124 89.8928 681.125 89.8928 681.126C89.8928 681.127 89.8928 681.128 89.8928 681.129C89.8928 681.13 89.8928 681.131 89.8928 681.132C89.8928 681.133 89.8928 681.133 89.8928 681.134C89.8928 681.135 89.8928 681.136 89.8928 681.137C89.8928 681.138 89.8928 681.139 89.8928 681.14C89.8928 681.141 89.8928 681.142 89.8928 681.143C89.8928 681.144 89.8928 681.145 89.8928 681.146C89.8928 681.146 89.8928 681.147 89.8928 681.148C89.8928 681.149 89.8928 681.15 89.8928 681.151C89.8928 681.152 89.8928 681.153 89.8928 681.154C89.8928 681.155 89.8928 681.156 89.8928 681.157C89.8928 681.158 89.8928 681.159 89.8928 681.16C89.8928 681.16 89.8928 681.161 89.8928 681.162C89.8928 681.163 89.8928 681.164 89.8928 681.165C89.8928 681.166 89.8928 681.167 89.8928 681.168C89.8928 681.169 89.8928 681.17 89.8928 681.171C89.8928 681.172 89.8928 681.173 89.8928 681.173C89.8928 681.174 89.8928 681.175 89.8928 681.176C89.8928 681.177 89.8928 681.178 89.8928 681.179C89.8928 681.18 89.8928 681.181 89.8928 681.182C89.8928 681.183 89.8928 681.184 89.8928 681.185C89.8928 681.186 89.8928 681.187 89.8928 681.187C89.8928 681.188 89.8928 681.189 89.8928 681.19C89.8928 681.191 89.8928 681.192 89.8928 681.193C89.8928 681.194 89.8928 681.195 89.8928 681.196C89.8928 681.197 89.8928 681.198 89.8928 681.199C89.8928 681.2 89.8928 681.2 89.8928 681.201C89.8928 681.202 89.8928 681.203 89.8928 681.204C89.8928 681.205 89.8928 681.206 89.8928 681.207C89.8928 681.208 89.8928 681.209 89.8928 681.21C89.8928 681.211 89.8928 681.212 89.8928 681.213C89.8928 681.214 89.8928 681.214 89.8928 681.215C89.8928 681.216 89.8928 681.217 89.8928 681.218C89.8928 681.219 89.8928 681.22 89.8928 681.221C89.8928 681.222 89.8928 681.223 89.8928 681.224C89.8928 681.225 89.8928 681.226 89.8928 681.227C89.8928 681.227 89.8928 681.228 89.8928 681.229C89.8928 681.23 89.8928 681.231 89.8928 681.232C89.8928 681.233 89.8928 681.234 89.8928 681.235C89.8928 681.236 89.8928 681.237 89.8928 681.238C89.8928 681.239 89.8928 681.24 89.8928 681.241C89.8928 681.241 89.8928 681.242 89.8928 681.243C89.8928 681.244 89.8928 681.245 89.8928 681.246C89.8928 681.247 89.8928 681.248 89.8928 681.249C89.8928 681.25 89.8928 681.251 89.8928 681.252C89.8928 681.253 89.8928 681.254 89.8928 681.254C89.8928 681.255 89.8928 681.256 89.8928 681.257C89.8928 681.258 89.8928 681.259 89.8928 681.26C89.8928 681.261 89.8928 681.262 89.8928 681.263C89.8928 681.264 89.8928 681.265 89.8928 681.266C89.8928 681.267 89.8928 681.268 89.8928 681.268C89.8928 681.269 89.8928 681.27 89.8928 681.271C89.8928 681.272 89.8928 681.273 89.8928 681.274C89.8928 681.275 89.8928 681.276 89.8928 681.277C89.8928 681.278 89.8928 681.279 89.8928 681.28C89.8928 681.281 89.8928 681.281 89.8928 681.282C89.8928 681.283 89.8928 681.284 89.8928 681.285C89.8928 681.286 89.8928 681.287 89.8928 681.288C89.8928 681.289 89.8928 681.29 89.8928 681.291C89.8928 681.292 89.8928 681.293 89.8928 681.294C89.8928 681.294 89.8928 681.295 89.8928 681.296C89.8928 681.297 89.8928 681.298 89.8928 681.299C89.8928 681.3 89.8928 681.301 89.8928 681.302C89.8928 681.303 89.8928 681.304 89.8928 681.305C89.8928 681.306 89.8928 681.307 89.8928 681.308C89.8928 681.308 89.8928 681.309 89.8928 681.31C89.8928 681.311 89.8928 681.312 89.8928 681.313C89.8928 681.314 89.8928 681.315 89.8928 681.316C89.8928 681.317 89.8928 681.318 89.8928 681.319C89.8928 681.32 89.8928 681.321 89.8928 681.321C89.8928 681.322 89.8928 681.323 89.8928 681.324C89.8928 681.325 89.8928 681.326 89.8928 681.327C89.8928 681.328 89.8928 681.329 89.8928 681.33C89.8928 681.331 89.8928 681.332 89.8928 681.333C89.8928 681.334 89.8928 681.335 89.8928 681.335C89.8928 681.336 89.8928 681.337 89.8928 681.338C89.8928 681.339 89.8928 681.34 89.8928 681.341C89.8928 681.342 89.8928 681.343 89.8928 681.344C89.8928 681.345 89.8928 681.346 89.8928 681.347C89.8928 681.348 89.8928 681.348 89.8928 681.349C89.8928 681.35 89.8928 681.351 89.8928 681.352C89.8928 681.353 89.8928 681.354 89.8928 681.355C89.8928 681.356 89.8928 681.357 89.8928 681.358C89.8928 681.359 89.8928 681.36 89.8928 681.361C89.8928 681.362 89.8928 681.362 89.8928 681.363C89.8928 681.364 89.8928 681.365 89.8928 681.366C89.8928 681.367 89.8928 681.368 89.8928 681.369C89.8928 681.37 89.8928 681.371 89.8928 681.372C89.8928 681.373 89.8928 681.374 89.8928 681.375C89.8928 681.375 89.8928 681.376 89.8928 681.377C89.8928 681.378 89.8928 681.379 89.8928 681.38C89.8928 681.381 89.8928 681.382 89.8928 681.383C89.8928 681.384 89.8928 681.385 89.8928 681.386C89.8928 681.387 89.8928 681.388 89.8928 681.389C89.8928 681.389 89.8928 681.39 89.8928 681.391C89.8928 681.392 89.8928 681.393 89.8928 681.394C89.8928 681.395 89.8928 681.396 89.8928 681.397C89.8928 681.398 89.8928 681.399 89.8928 681.4C89.8928 681.401 89.8928 681.402 89.8928 681.402C89.8928 681.403 89.8928 681.404 89.8928 681.405C89.8928 681.406 89.8928 681.407 89.8928 681.408C89.8928 681.409 89.8928 681.41 89.8928 681.411C89.8928 681.412 89.8928 681.413 89.8928 681.414C89.8928 681.415 89.8928 681.416 89.8928 681.416C89.8928 681.417 89.8928 681.418 89.8928 681.419C89.8928 681.42 89.8928 681.421 89.8928 681.422C89.8928 681.423 89.8928 681.424 89.8928 681.425C89.8928 681.426 89.8928 681.427 89.8928 681.428C89.8928 681.429 89.8928 681.429 89.8928 681.43C89.8928 681.431 89.8928 681.432 89.8928 681.433C89.8928 681.434 89.8928 681.435 89.8928 681.436C89.8928 681.437 89.8928 681.438 89.8928 681.439C89.8928 681.44 89.8928 681.441 89.8928 681.442C89.8928 681.443 89.8928 681.443 89.8928 681.444C89.8928 681.445 89.8928 681.446 89.8928 681.447C89.8928 681.448 89.8928 681.449 89.8928 681.45C89.8928 681.451 89.8928 681.452 89.8928 681.453C89.8928 681.454 89.8928 681.455 89.8928 681.456C89.8928 681.456 89.8928 681.457 89.8928 681.458C89.8928 681.459 89.8928 681.46 89.8928 681.461C89.8928 681.462 89.8928 681.463 89.8928 681.464C89.8928 681.465 89.8928 681.466 89.8928 681.467C89.8928 681.468 89.8928 681.469 89.8928 681.47C89.8928 681.47 89.8928 681.471 89.8928 681.472C89.8928 681.473 89.8928 681.474 89.8928 681.475C89.8928 681.476 89.8928 681.477 89.8928 681.478C89.8928 681.479 89.8928 681.48 89.8928 681.481C89.8928 681.482 89.8928 681.483 89.8928 681.483C89.8928 681.484 89.8928 681.485 89.8928 681.486C89.8928 681.487 89.8928 681.488 89.8928 681.489C89.8928 681.49 89.8928 681.491 89.8928 681.492C89.8928 681.493 89.8928 681.494 89.8928 681.495C89.8928 681.496 89.8928 681.497 89.8928 681.497C89.8928 681.498 89.8928 681.499 89.8928 681.5C89.8928 681.501 89.8928 681.502 89.8928 681.503C89.8928 681.504 89.8928 681.505 89.8928 681.506C89.8928 681.507 89.8928 681.508 89.8928 681.509C89.8928 681.51 89.8928 681.51 89.8928 681.511C89.8928 681.512 89.8928 681.513 89.8928 681.514C89.8928 681.515 89.8928 681.516 89.8928 681.517C89.8928 681.518 89.8928 681.519 89.8928 681.52C89.8928 681.521 89.8928 681.522 89.8928 681.523C89.8928 681.524 89.8928 681.524 89.8928 681.525H90.8928ZM90.8928 680.095H91.8928V662.558H90.8928H89.8928V680.095H90.8928ZM90.8928 662.558V663.558H96.9069V662.558V661.558H90.8928V662.558ZM96.9069 662.558H95.9069V693.175H96.9069H97.9069V662.558H96.9069ZM96.9069 693.175V692.175H89.7572V693.175V694.175H96.9069V693.175ZM89.7572 693.175L90.6442 692.713L81.4128 674.986L80.5258 675.448L79.6389 675.91L88.8703 693.637L89.7572 693.175ZM80.5258 675.448L81.4202 675.001C81.2259 674.612 81.0506 674.21 80.8944 673.793L79.9581 674.144L79.0217 674.496C79.202 674.976 79.4052 675.443 79.6314 675.895L80.5258 675.448ZM79.9581 674.144L80.8944 673.793C80.7358 673.37 80.5974 672.949 80.4791 672.528L79.5165 672.799L78.5538 673.069C78.6878 673.546 78.8439 674.021 79.0217 674.496L79.9581 674.144ZM79.5165 672.799V671.799H79.3693V672.799V673.799H79.5165V672.799ZM79.3693 672.799L78.371 672.857C78.3979 673.315 78.4113 673.765 78.4113 674.208H79.4113H80.4113C80.4113 673.725 80.3967 673.235 80.3675 672.74L79.3693 672.799ZM79.4113 674.208L78.4118 674.239C78.4255 674.676 78.4323 675.135 78.4323 675.616H79.4323H80.4323C80.4323 675.116 80.4252 674.636 80.4108 674.176L79.4113 674.208ZM79.4323 675.616H78.4323V693.175H79.4323H80.4323V675.616H79.4323ZM79.4323 693.175V692.175H73.4393V693.175V694.175H79.4323V693.175ZM101.617 662.558V661.558H100.617V662.558H101.617ZM108.62 662.558H109.62V661.558H108.62V662.558ZM109.839 687.329L109.098 688.001L109.104 688.006L109.839 687.329ZM116.547 687.329L115.812 686.651L115.812 686.652L116.547 687.329ZM117.788 662.558V661.558H116.788V662.558H117.788ZM124.727 662.558H125.727V661.558H124.727V662.558ZM121.573 690.841L120.904 690.098L120.902 690.1L121.573 690.841ZM101.617 681.988H102.617V662.558H101.617H100.617V681.988H101.617ZM101.617 662.558V663.558H108.62V662.558V661.558H101.617V662.558ZM108.62 662.558H107.62V682.724H108.62H109.62V662.558H108.62ZM108.62 682.724H107.62C107.62 684.967 108.029 686.82 109.098 688.001L109.839 687.329L110.58 686.658C110.024 686.043 109.62 684.827 109.62 682.724H108.62ZM109.839 687.329L109.104 688.006C110.144 689.137 111.563 689.654 113.225 689.654V688.654V687.654C111.999 687.654 111.161 687.288 110.575 686.652L109.839 687.329ZM113.225 688.654V689.654C114.855 689.654 116.248 689.13 117.283 688.006L116.547 687.329L115.812 686.652C115.22 687.294 114.398 687.654 113.225 687.654V688.654ZM116.547 687.329L117.283 688.007C118.371 686.826 118.788 684.97 118.788 682.724H117.788H116.788C116.788 684.824 116.378 686.038 115.812 686.651L116.547 687.329ZM117.788 682.724H118.788V662.558H117.788H116.788V682.724H117.788ZM117.788 662.558V663.558H124.727V662.558V661.558H117.788V662.558ZM124.727 662.558H123.727V681.988H124.727H125.727V662.558H124.727ZM124.727 681.988H123.727C123.727 685.835 122.72 688.463 120.904 690.098L121.573 690.841L122.242 691.584C124.632 689.434 125.727 686.159 125.727 681.988H124.727ZM121.573 690.841L120.902 690.1C119.036 691.79 116.52 692.68 113.246 692.68V693.68V694.68C116.897 694.68 119.932 693.677 122.244 691.582L121.573 690.841ZM113.246 693.68V692.68C109.912 692.68 107.351 691.787 105.459 690.095L104.792 690.841L104.126 691.586C106.467 693.68 109.542 694.68 113.246 694.68V693.68ZM104.792 690.841L105.459 690.095C103.63 688.46 102.617 685.834 102.617 681.988H101.617H100.617C100.617 686.161 101.721 689.436 104.126 691.586L104.792 690.841ZM127.335 668.046H126.335V669.046H127.335V668.046ZM127.335 662.558V661.558H126.335V662.558H127.335ZM151.37 662.558H152.37V661.558H151.37V662.558ZM151.37 668.046V669.046H152.37V668.046H151.37ZM142.896 668.046V667.046H141.896V668.046H142.896ZM142.896 693.175V694.175H143.896V693.175H142.896ZM135.83 693.175H134.83V694.175H135.83V693.175ZM135.83 668.046H136.83V667.046H135.83V668.046ZM127.335 668.046H128.335V662.558H127.335H126.335V668.046H127.335ZM127.335 662.558V663.558H151.37V662.558V661.558H127.335V662.558ZM151.37 662.558H150.37V668.046H151.37H152.37V662.558H151.37ZM151.37 668.046V667.046H142.896V668.046V669.046H151.37V668.046ZM142.896 668.046H141.896V693.175H142.896H143.896V668.046H142.896ZM142.896 693.175V692.175H135.83V693.175V694.175H142.896V693.175ZM135.83 693.175H136.83V668.046H135.83H134.83V693.175H135.83ZM135.83 668.046V667.046H127.335V668.046V669.046H135.83V668.046ZM152.274 668.046H151.274V669.046H152.274V668.046ZM152.274 662.558V661.558H151.274V662.558H152.274ZM176.31 662.558H177.31V661.558H176.31V662.558ZM176.31 668.046V669.046H177.31V668.046H176.31ZM167.835 668.046V667.046H166.835V668.046H167.835ZM167.835 693.175V694.175H168.835V693.175H167.835ZM160.77 693.175H159.77V694.175H160.77V693.175ZM160.77 668.046H161.77V667.046H160.77V668.046ZM152.274 668.046H153.274V662.558H152.274H151.274V668.046H152.274ZM152.274 662.558V663.558H176.31V662.558V661.558H152.274V662.558ZM176.31 662.558H175.31V668.046H176.31H177.31V662.558H176.31ZM176.31 668.046V667.046H167.835V668.046V669.046H176.31V668.046ZM167.835 668.046H166.835V693.175H167.835H168.835V668.046H167.835ZM167.835 693.175V692.175H160.77V693.175V694.175H167.835V693.175ZM160.77 693.175H161.77V668.046H160.77H159.77V693.175H160.77ZM160.77 668.046V667.046H152.274V668.046V669.046H160.77V668.046ZM186.487 693.175H185.487V694.175H186.487V693.175ZM186.487 681.736H187.487V681.491L187.374 681.274L186.487 681.736ZM176.499 662.558V661.558H174.851L175.612 663.02L176.499 662.558ZM184.174 662.558L185.067 662.106L184.789 661.558H184.174V662.558ZM189.494 673.072L190.396 672.639L190.391 672.63L190.387 672.621L189.494 673.072ZM189.957 674.081L189.04 674.48L189.043 674.488L189.047 674.495L189.957 674.081ZM190.357 675.049L189.42 675.4L189.664 676.049H190.357V675.049ZM190.462 675.049V676.049H191.155L191.398 675.4L190.462 675.049ZM190.84 674.081L189.93 673.668L189.922 673.685L189.915 673.703L190.84 674.081ZM191.324 673.072L190.432 672.62L190.429 672.625L191.324 673.072ZM196.644 662.558V661.558H196.029L195.752 662.106L196.644 662.558ZM203.436 662.558L204.324 663.018L205.082 661.558H203.436V662.558ZM193.574 681.567L192.686 681.107L192.574 681.323V681.567H193.574ZM193.574 693.175V694.175H194.574V693.175H193.574ZM186.487 693.175H187.487V681.736H186.487H185.487V693.175H186.487ZM186.487 681.736L187.374 681.274L177.386 662.096L176.499 662.558L175.612 663.02L185.601 682.198L186.487 681.736ZM176.499 662.558V663.558H184.174V662.558V661.558H176.499V662.558ZM184.174 662.558L183.282 663.009L188.602 673.523L189.494 673.072L190.387 672.621L185.067 662.106L184.174 662.558ZM189.494 673.072L188.593 673.505C188.756 673.845 188.905 674.17 189.04 674.48L189.957 674.081L190.874 673.683C190.729 673.348 190.569 673 190.396 672.639L189.494 673.072ZM189.957 674.081L189.047 674.495C189.177 674.782 189.302 675.083 189.42 675.4L190.357 675.049L191.293 674.698C191.159 674.341 191.018 673.998 190.867 673.668L189.957 674.081ZM190.357 675.049V676.049H190.462V675.049V674.049H190.357V675.049ZM190.462 675.049L191.398 675.4C191.521 675.072 191.644 674.759 191.766 674.46L190.84 674.081L189.915 673.703C189.785 674.021 189.655 674.353 189.525 674.698L190.462 675.049ZM190.84 674.081L191.751 674.495C191.885 674.2 192.041 673.875 192.218 673.519L191.324 673.072L190.429 672.625C190.243 672.998 190.076 673.346 189.93 673.668L190.84 674.081ZM191.324 673.072L192.216 673.523L197.536 663.009L196.644 662.558L195.752 662.106L190.432 672.621L191.324 673.072ZM196.644 662.558V663.558H203.436V662.558V661.558H196.644V662.558ZM203.436 662.558L202.549 662.097L192.686 681.107L193.574 681.567L194.462 682.028L204.324 663.018L203.436 662.558ZM193.574 681.567H192.574V693.175H193.574H194.574V681.567H193.574ZM193.574 693.175V692.175H186.487V693.175V694.175H193.574V693.175ZM222.95 693.175H221.95V694.175H222.95V693.175ZM222.95 681.736H223.95V681.491L223.837 681.274L222.95 681.736ZM212.962 662.558V661.558H211.314L212.075 663.02L212.962 662.558ZM220.637 662.558L221.53 662.106L221.252 661.558H220.637V662.558ZM225.958 673.072L226.859 672.639L226.855 672.63L226.85 672.621L225.958 673.072ZM226.42 674.081L225.503 674.48L225.506 674.488L225.51 674.495L226.42 674.081ZM226.82 675.049L225.883 675.4L226.127 676.049H226.82V675.049ZM226.925 675.049V676.049H227.618L227.861 675.4L226.925 675.049ZM227.303 674.081L226.393 673.668L226.385 673.685L226.378 673.703L227.303 674.081ZM227.787 673.072L226.895 672.62L226.893 672.625L227.787 673.072ZM233.107 662.558V661.558H232.492L232.215 662.106L233.107 662.558ZM239.899 662.558L240.787 663.018L241.545 661.558H239.899V662.558ZM230.037 681.567L229.149 681.107L229.037 681.323V681.567H230.037ZM230.037 693.175V694.175H231.037V693.175H230.037ZM222.95 693.175H223.95V681.736H222.95H221.95V693.175H222.95ZM222.95 681.736L223.837 681.274L213.849 662.096L212.962 662.558L212.075 663.02L222.064 682.198L222.95 681.736ZM212.962 662.558V663.558H220.637V662.558V661.558H212.962V662.558ZM220.637 662.558L219.745 663.009L225.065 673.523L225.958 673.072L226.85 672.621L221.53 662.106L220.637 662.558ZM225.958 673.072L225.056 673.505C225.219 673.845 225.368 674.17 225.503 674.48L226.42 674.081L227.337 673.683C227.192 673.348 227.032 673 226.859 672.639L225.958 673.072ZM226.42 674.081L225.51 674.495C225.64 674.782 225.765 675.083 225.883 675.4L226.82 675.049L227.756 674.698C227.622 674.341 227.481 673.998 227.331 673.668L226.42 674.081ZM226.82 675.049V676.049H226.925V675.049V674.049H226.82V675.049ZM226.925 675.049L227.861 675.4C227.984 675.072 228.107 674.759 228.229 674.46L227.303 674.081L226.378 673.703C226.248 674.021 226.118 674.353 225.989 674.698L226.925 675.049ZM227.303 674.081L228.214 674.495C228.348 674.2 228.504 673.875 228.681 673.519L227.787 673.072L226.893 672.625C226.706 672.998 226.539 673.346 226.393 673.668L227.303 674.081ZM227.787 673.072L228.679 673.523L233.999 663.009L233.107 662.558L232.215 662.106L226.895 672.621L227.787 673.072ZM233.107 662.558V663.558H239.899V662.558V661.558H233.107V662.558ZM239.899 662.558L239.012 662.097L229.149 681.107L230.037 681.567L230.925 682.028L240.787 663.018L239.899 662.558ZM230.037 681.567H229.037V693.175H230.037H231.037V681.567H230.037ZM230.037 693.175V692.175H222.95V693.175V694.175H230.037V693.175ZM243.558 665.712L242.851 665.005L242.849 665.007L243.558 665.712ZM262.379 665.712L261.671 666.419L261.673 666.421L262.379 665.712ZM262.379 690.021L261.673 689.312L261.671 689.314L262.379 690.021ZM243.558 690.021L242.849 690.726L242.851 690.728L243.558 690.021ZM248.731 686.677L247.939 687.288L247.942 687.292L248.731 686.677ZM257.227 686.677L256.439 686.062L256.438 686.063L257.227 686.677ZM257.227 669.119L256.438 669.733L256.445 669.742L257.227 669.119ZM248.731 669.119L249.517 669.737L249.52 669.733L248.731 669.119ZM239.92 678.75H240.92V676.983H239.92H238.92V678.75H239.92ZM239.92 676.983H240.92C240.92 672.048 242.101 668.596 244.267 666.417L243.558 665.712L242.849 665.007C240.165 667.707 238.92 671.769 238.92 676.983H239.92ZM243.558 665.712L244.265 666.419C246.495 664.19 249.37 663.053 252.979 663.053V662.053V661.053C248.905 661.053 245.5 662.356 242.851 665.005L243.558 665.712ZM252.979 662.053V663.053C256.573 663.053 259.441 664.189 261.671 666.419L262.379 665.712L263.086 665.005C260.437 662.357 257.039 661.053 252.979 661.053V662.053ZM262.379 665.712L261.673 666.421C263.865 668.6 265.059 672.051 265.059 676.983H266.059H267.059C267.059 671.766 265.798 667.702 263.084 665.003L262.379 665.712ZM266.059 676.983H265.059V678.75H266.059H267.059V676.983H266.059ZM266.059 678.75H265.059C265.059 683.682 263.865 687.132 261.673 689.312L262.379 690.021L263.084 690.73C265.798 688.031 267.059 683.967 267.059 678.75H266.059ZM262.379 690.021L261.671 689.314C259.441 691.544 256.573 692.68 252.979 692.68V693.68V694.68C257.039 694.68 260.437 693.376 263.086 690.728L262.379 690.021ZM252.979 693.68V692.68C249.37 692.68 246.495 691.543 244.265 689.314L243.558 690.021L242.851 690.728C245.5 693.377 248.905 694.68 252.979 694.68V693.68ZM243.558 690.021L244.267 689.316C242.101 687.137 240.92 683.685 240.92 678.75H239.92H238.92C238.92 683.964 240.165 688.026 242.849 690.726L243.558 690.021ZM247.175 680.243H246.175C246.175 683.262 246.699 685.679 247.939 687.288L248.731 686.677L249.523 686.067C248.688 684.984 248.175 683.111 248.175 680.243H247.175ZM248.731 686.677L247.942 687.292C249.183 688.884 250.899 689.675 252.979 689.675V688.675V687.675C251.47 687.675 250.355 687.134 249.52 686.063L248.731 686.677ZM252.979 688.675V689.675C255.059 689.675 256.775 688.884 258.016 687.292L257.227 686.677L256.438 686.063C255.603 687.134 254.487 687.675 252.979 687.675V688.675ZM257.227 686.677L258.015 687.293C259.272 685.683 259.804 683.264 259.804 680.243H258.804H257.804C257.804 683.109 257.284 684.979 256.439 686.062L257.227 686.677ZM258.804 680.243H259.804V675.511H258.804H257.804V680.243H258.804ZM258.804 675.511H259.804C259.804 672.493 259.273 670.08 258.008 668.495L257.227 669.119L256.445 669.742C257.283 670.793 257.804 672.642 257.804 675.511H258.804ZM257.227 669.119L258.016 668.504C256.775 666.912 255.059 666.121 252.979 666.121V667.121V668.121C254.487 668.121 255.603 668.662 256.438 669.733L257.227 669.119ZM252.979 667.121V666.121C250.899 666.121 249.183 666.912 247.942 668.504L248.731 669.119L249.52 669.733C250.355 668.662 251.47 668.121 252.979 668.121V667.121ZM248.731 669.119L247.945 668.5C246.698 670.085 246.175 672.495 246.175 675.511H247.175H248.175C248.175 672.64 248.69 670.788 249.517 669.737L248.731 669.119ZM247.175 675.511H246.175V680.243H247.175H248.175V675.511H247.175ZM269.928 662.558V661.558H268.928V662.558H269.928ZM276.93 662.558H277.93V661.558H276.93V662.558ZM278.15 687.329L277.409 688.001L277.414 688.006L278.15 687.329ZM284.858 687.329L284.123 686.651L284.122 686.652L284.858 687.329ZM286.098 662.558V661.558H285.098V662.558H286.098ZM293.038 662.558H294.038V661.558H293.038V662.558ZM289.884 690.841L289.215 690.098L289.212 690.1L289.884 690.841ZM269.928 681.988H270.928V662.558H269.928H268.928V681.988H269.928ZM269.928 662.558V663.558H276.93V662.558V661.558H269.928V662.558ZM276.93 662.558H275.93V682.724H276.93H277.93V662.558H276.93ZM276.93 682.724H275.93C275.93 684.967 276.339 686.82 277.409 688.001L278.15 687.329L278.891 686.658C278.334 686.043 277.93 684.827 277.93 682.724H276.93ZM278.15 687.329L277.414 688.006C278.454 689.137 279.873 689.654 281.535 689.654V688.654V687.654C280.309 687.654 279.471 687.288 278.885 686.652L278.15 687.329ZM281.535 688.654V689.654C283.165 689.654 284.559 689.13 285.593 688.006L284.858 687.329L284.122 686.652C283.531 687.294 282.709 687.654 281.535 687.654V688.654ZM284.858 687.329L285.593 688.007C286.681 686.826 287.098 684.97 287.098 682.724H286.098H285.098C285.098 684.824 284.688 686.038 284.123 686.651L284.858 687.329ZM286.098 682.724H287.098V662.558H286.098H285.098V682.724H286.098ZM286.098 662.558V663.558H293.038V662.558V661.558H286.098V662.558ZM293.038 662.558H292.038V681.988H293.038H294.038V662.558H293.038ZM293.038 681.988H292.038C292.038 685.835 291.031 688.463 289.215 690.098L289.884 690.841L290.553 691.584C292.942 689.434 294.038 686.159 294.038 681.988H293.038ZM289.884 690.841L289.212 690.1C287.347 691.79 284.83 692.68 281.556 692.68V693.68V694.68C285.208 694.68 288.243 693.677 290.555 691.582L289.884 690.841ZM281.556 693.68V692.68C278.222 692.68 275.662 691.787 273.769 690.095L273.103 690.841L272.436 691.586C274.778 693.68 277.853 694.68 281.556 694.68V693.68ZM273.103 690.841L273.769 690.095C271.941 688.46 270.928 685.834 270.928 681.988H269.928H268.928C268.928 686.161 270.032 689.436 272.436 691.586L273.103 690.841Z" fill="black" mask="url(#path-3-outside-1_17007_2267)"/> +<mask id="path-5-outside-2_17007_2267" maskUnits="userSpaceOnUse" x="72" y="605.343" width="261" height="31" fill="black"> +<rect fill="white" x="72" y="605.343" width="261" height="31"/> +<path d="M73.208 634.343V607.327H84.0811C87.0127 607.327 89.2578 608.137 90.8164 609.758C92.375 611.366 93.1543 613.562 93.1543 616.345C93.1543 619.116 92.3812 621.317 90.835 622.95C89.3011 624.571 87.0251 625.381 84.0068 625.381H79.3682V634.343H73.208ZM79.3682 621.039H82.9492C84.4707 621.039 85.5283 620.612 86.1221 619.759C86.7158 618.893 87.0127 617.78 87.0127 616.419C87.0127 615.071 86.7158 613.976 86.1221 613.135C85.5283 612.281 84.4707 611.854 82.9492 611.854H79.3682V621.039ZM94.6201 625.474V624.88C94.6201 622.06 95.5046 619.802 97.2734 618.107C99.0423 616.413 101.362 615.565 104.231 615.565C107.076 615.565 109.291 616.369 110.874 617.978C112.457 619.586 113.249 621.806 113.249 624.639V626.457H98.1641V623.191H107.441V622.932C107.441 622.016 107.169 621.256 106.625 620.649C106.081 620.043 105.271 619.74 104.194 619.74C103.007 619.74 102.098 620.173 101.467 621.039C100.848 621.905 100.539 623.024 100.539 624.397V625.641C100.539 627.199 100.873 628.418 101.541 629.296C102.221 630.174 103.205 630.613 104.491 630.613C105.407 630.613 106.186 630.403 106.829 629.982C107.472 629.562 107.986 629.049 108.369 628.442L113.008 630.354C112.426 631.714 111.424 632.803 110.002 633.619C108.592 634.436 106.78 634.844 104.565 634.844C101.436 634.844 98.9928 634.003 97.2363 632.32C95.4922 630.626 94.6201 628.343 94.6201 625.474ZM115.197 629.036C115.197 627.106 115.952 625.616 117.461 624.564C118.982 623.513 120.949 622.981 123.361 622.969H127.443V621.874C127.443 621.058 127.239 620.414 126.831 619.944C126.423 619.474 125.73 619.239 124.753 619.239C123.776 619.239 123.058 619.437 122.601 619.833C122.143 620.229 121.914 620.755 121.914 621.41V621.744L116.292 621.726V621.354C116.292 619.66 117.09 618.281 118.686 617.217C120.294 616.141 122.434 615.603 125.105 615.603C127.802 615.603 129.855 616.116 131.266 617.143C132.688 618.169 133.399 619.802 133.399 622.041V630.205C133.399 630.947 133.461 631.659 133.585 632.339C133.721 633.007 133.913 633.582 134.16 634.064V634.343H128.297C128.136 634.046 127.994 633.681 127.87 633.248C127.759 632.815 127.685 632.376 127.647 631.931C127.239 632.623 126.509 633.248 125.458 633.805C124.419 634.361 123.108 634.64 121.524 634.64C119.644 634.64 118.117 634.17 116.941 633.229C115.779 632.289 115.197 630.892 115.197 629.036ZM121.116 628.572C121.116 629.352 121.339 629.964 121.784 630.409C122.229 630.842 122.91 631.059 123.825 631.059C124.815 631.059 125.662 630.731 126.367 630.075C127.085 629.407 127.443 628.634 127.443 627.756V626.197H124.809C123.547 626.197 122.613 626.389 122.007 626.772C121.413 627.156 121.116 627.756 121.116 628.572ZM137.37 634.343V616.104H143.159L143.215 618.386H143.289C143.759 617.582 144.477 616.932 145.441 616.438C146.419 615.93 147.563 615.677 148.874 615.677C150.754 615.677 152.282 616.202 153.457 617.254C154.632 618.305 155.22 620.093 155.22 622.616V634.343H149.264V623.136C149.264 622.047 149.029 621.28 148.559 620.835C148.101 620.377 147.451 620.148 146.61 620.148C145.893 620.148 145.243 620.359 144.662 620.779C144.081 621.2 143.635 621.763 143.326 622.468V634.343H137.37ZM158.801 627.7V616.104H164.775V627.273C164.775 628.424 165.01 629.228 165.48 629.686C165.951 630.131 166.6 630.354 167.429 630.354C168.159 630.354 168.808 630.131 169.377 629.686C169.946 629.24 170.385 628.684 170.694 628.016V616.104H176.65V634.343H170.88L170.806 632.042H170.75C170.23 632.871 169.482 633.533 168.505 634.027C167.54 634.522 166.396 634.77 165.072 634.77C163.217 634.77 161.708 634.225 160.545 633.137C159.382 632.036 158.801 630.224 158.801 627.7ZM178.691 620.408V616.104H191.03V620.408H178.691ZM181.475 628.758V617.532L181.586 617.161V610.927H187.356V627.867C187.356 628.931 187.517 629.636 187.839 629.982C188.16 630.329 188.643 630.502 189.286 630.502C189.595 630.502 189.892 630.477 190.177 630.428C190.461 630.366 190.74 630.279 191.012 630.168V634.287C190.69 634.411 190.214 634.528 189.583 634.64C188.952 634.751 188.204 634.807 187.338 634.807C185.495 634.807 184.054 634.33 183.015 633.378C181.988 632.413 181.475 630.873 181.475 628.758ZM202.979 634.343V607.327H213.853C216.784 607.327 219.029 608.137 220.588 609.758C222.146 611.366 222.926 613.562 222.926 616.345C222.926 619.116 222.153 621.317 220.606 622.95C219.073 624.571 216.797 625.381 213.778 625.381H209.14V634.343H202.979ZM209.14 621.039H212.721C214.242 621.039 215.3 620.612 215.894 619.759C216.487 618.893 216.784 617.78 216.784 616.419C216.784 615.071 216.487 613.976 215.894 613.135C215.3 612.281 214.242 611.854 212.721 611.854H209.14V621.039ZM225.635 634.343V616.104H231.665V634.343H225.635ZM225.245 610.37C225.245 609.504 225.542 608.774 226.136 608.181C226.729 607.575 227.577 607.271 228.678 607.271C229.766 607.271 230.601 607.568 231.183 608.162C231.764 608.756 232.055 609.492 232.055 610.37C232.055 611.236 231.758 611.972 231.164 612.578C230.57 613.184 229.729 613.487 228.641 613.487C227.54 613.487 226.699 613.184 226.117 612.578C225.536 611.972 225.245 611.236 225.245 610.37ZM234.708 625.492V624.898C234.708 622.066 235.617 619.802 237.436 618.107C239.254 616.4 241.647 615.547 244.616 615.547C247.585 615.547 249.972 616.4 251.778 618.107C253.597 619.802 254.506 622.066 254.506 624.898V625.492C254.506 628.325 253.597 630.595 251.778 632.302C249.972 633.996 247.585 634.844 244.616 634.844C241.635 634.844 239.235 633.996 237.417 632.302C235.611 630.595 234.708 628.325 234.708 625.492ZM240.757 624.639V625.733C240.757 627.243 241.085 628.424 241.74 629.277C242.408 630.118 243.361 630.539 244.598 630.539C245.847 630.539 246.799 630.118 247.455 629.277C248.123 628.424 248.457 627.243 248.457 625.733V624.639C248.457 623.142 248.123 621.979 247.455 621.15C246.787 620.309 245.835 619.889 244.598 619.889C243.373 619.889 242.427 620.309 241.759 621.15C241.091 621.979 240.757 623.142 240.757 624.639ZM257.493 634.343V616.104H263.282L263.338 618.386H263.412C263.882 617.582 264.6 616.932 265.564 616.438C266.542 615.93 267.686 615.677 268.997 615.677C270.877 615.677 272.405 616.202 273.58 617.254C274.755 618.305 275.343 620.093 275.343 622.616V634.343H269.387V623.136C269.387 622.047 269.152 621.28 268.682 620.835C268.224 620.377 267.575 620.148 266.733 620.148C266.016 620.148 265.367 620.359 264.785 620.779C264.204 621.2 263.758 621.763 263.449 622.468V634.343H257.493ZM278.163 625.474V624.88C278.163 622.06 279.048 619.802 280.816 618.107C282.585 616.413 284.905 615.565 287.774 615.565C290.619 615.565 292.834 616.369 294.417 617.978C296 619.586 296.792 621.806 296.792 624.639V626.457H281.707V623.191H290.984V622.932C290.984 622.016 290.712 621.256 290.168 620.649C289.624 620.043 288.813 619.74 287.737 619.74C286.55 619.74 285.641 620.173 285.01 621.039C284.391 621.905 284.082 623.024 284.082 624.397V625.641C284.082 627.199 284.416 628.418 285.084 629.296C285.764 630.174 286.748 630.613 288.034 630.613C288.95 630.613 289.729 630.403 290.372 629.982C291.015 629.562 291.529 629.049 291.912 628.442L296.551 630.354C295.969 631.714 294.967 632.803 293.545 633.619C292.135 634.436 290.323 634.844 288.108 634.844C284.979 634.844 282.536 634.003 280.779 632.32C279.035 630.626 278.163 628.343 278.163 625.474ZM298.685 625.474V624.88C298.685 622.06 299.569 619.802 301.338 618.107C303.107 616.413 305.426 615.565 308.296 615.565C311.141 615.565 313.355 616.369 314.938 617.978C316.522 619.586 317.313 621.806 317.313 624.639V626.457H302.229V623.191H311.506V622.932C311.506 622.016 311.234 621.256 310.689 620.649C310.145 620.043 309.335 619.74 308.259 619.74C307.071 619.74 306.162 620.173 305.531 621.039C304.913 621.905 304.604 623.024 304.604 624.397V625.641C304.604 627.199 304.938 628.418 305.605 629.296C306.286 630.174 307.269 630.613 308.556 630.613C309.471 630.613 310.25 630.403 310.894 629.982C311.537 629.562 312.05 629.049 312.434 628.442L317.072 630.354C316.491 631.714 315.489 632.803 314.066 633.619C312.656 634.436 310.844 634.844 308.63 634.844C305.5 634.844 303.057 634.003 301.301 632.32C299.557 630.626 298.685 628.343 298.685 625.474ZM320.134 634.343V616.104H325.997L326.071 618.367H326.127C326.56 617.6 327.147 616.963 327.89 616.456C328.632 615.949 329.467 615.695 330.395 615.695C330.716 615.695 331.025 615.72 331.322 615.77C331.619 615.819 331.829 615.868 331.953 615.918V620.612C331.73 620.538 331.471 620.482 331.174 620.445C330.889 620.408 330.568 620.39 330.209 620.39C329.38 620.39 328.601 620.643 327.871 621.15C327.141 621.658 326.578 622.319 326.183 623.136V634.343H320.134Z"/> +</mask> +<path d="M73.208 634.343V607.327H84.0811C87.0127 607.327 89.2578 608.137 90.8164 609.758C92.375 611.366 93.1543 613.562 93.1543 616.345C93.1543 619.116 92.3812 621.317 90.835 622.95C89.3011 624.571 87.0251 625.381 84.0068 625.381H79.3682V634.343H73.208ZM79.3682 621.039H82.9492C84.4707 621.039 85.5283 620.612 86.1221 619.759C86.7158 618.893 87.0127 617.78 87.0127 616.419C87.0127 615.071 86.7158 613.976 86.1221 613.135C85.5283 612.281 84.4707 611.854 82.9492 611.854H79.3682V621.039ZM94.6201 625.474V624.88C94.6201 622.06 95.5046 619.802 97.2734 618.107C99.0423 616.413 101.362 615.565 104.231 615.565C107.076 615.565 109.291 616.369 110.874 617.978C112.457 619.586 113.249 621.806 113.249 624.639V626.457H98.1641V623.191H107.441V622.932C107.441 622.016 107.169 621.256 106.625 620.649C106.081 620.043 105.271 619.74 104.194 619.74C103.007 619.74 102.098 620.173 101.467 621.039C100.848 621.905 100.539 623.024 100.539 624.397V625.641C100.539 627.199 100.873 628.418 101.541 629.296C102.221 630.174 103.205 630.613 104.491 630.613C105.407 630.613 106.186 630.403 106.829 629.982C107.472 629.562 107.986 629.049 108.369 628.442L113.008 630.354C112.426 631.714 111.424 632.803 110.002 633.619C108.592 634.436 106.78 634.844 104.565 634.844C101.436 634.844 98.9928 634.003 97.2363 632.32C95.4922 630.626 94.6201 628.343 94.6201 625.474ZM115.197 629.036C115.197 627.106 115.952 625.616 117.461 624.564C118.982 623.513 120.949 622.981 123.361 622.969H127.443V621.874C127.443 621.058 127.239 620.414 126.831 619.944C126.423 619.474 125.73 619.239 124.753 619.239C123.776 619.239 123.058 619.437 122.601 619.833C122.143 620.229 121.914 620.755 121.914 621.41V621.744L116.292 621.726V621.354C116.292 619.66 117.09 618.281 118.686 617.217C120.294 616.141 122.434 615.603 125.105 615.603C127.802 615.603 129.855 616.116 131.266 617.143C132.688 618.169 133.399 619.802 133.399 622.041V630.205C133.399 630.947 133.461 631.659 133.585 632.339C133.721 633.007 133.913 633.582 134.16 634.064V634.343H128.297C128.136 634.046 127.994 633.681 127.87 633.248C127.759 632.815 127.685 632.376 127.647 631.931C127.239 632.623 126.509 633.248 125.458 633.805C124.419 634.361 123.108 634.64 121.524 634.64C119.644 634.64 118.117 634.17 116.941 633.229C115.779 632.289 115.197 630.892 115.197 629.036ZM121.116 628.572C121.116 629.352 121.339 629.964 121.784 630.409C122.229 630.842 122.91 631.059 123.825 631.059C124.815 631.059 125.662 630.731 126.367 630.075C127.085 629.407 127.443 628.634 127.443 627.756V626.197H124.809C123.547 626.197 122.613 626.389 122.007 626.772C121.413 627.156 121.116 627.756 121.116 628.572ZM137.37 634.343V616.104H143.159L143.215 618.386H143.289C143.759 617.582 144.477 616.932 145.441 616.438C146.419 615.93 147.563 615.677 148.874 615.677C150.754 615.677 152.282 616.202 153.457 617.254C154.632 618.305 155.22 620.093 155.22 622.616V634.343H149.264V623.136C149.264 622.047 149.029 621.28 148.559 620.835C148.101 620.377 147.451 620.148 146.61 620.148C145.893 620.148 145.243 620.359 144.662 620.779C144.081 621.2 143.635 621.763 143.326 622.468V634.343H137.37ZM158.801 627.7V616.104H164.775V627.273C164.775 628.424 165.01 629.228 165.48 629.686C165.951 630.131 166.6 630.354 167.429 630.354C168.159 630.354 168.808 630.131 169.377 629.686C169.946 629.24 170.385 628.684 170.694 628.016V616.104H176.65V634.343H170.88L170.806 632.042H170.75C170.23 632.871 169.482 633.533 168.505 634.027C167.54 634.522 166.396 634.77 165.072 634.77C163.217 634.77 161.708 634.225 160.545 633.137C159.382 632.036 158.801 630.224 158.801 627.7ZM178.691 620.408V616.104H191.03V620.408H178.691ZM181.475 628.758V617.532L181.586 617.161V610.927H187.356V627.867C187.356 628.931 187.517 629.636 187.839 629.982C188.16 630.329 188.643 630.502 189.286 630.502C189.595 630.502 189.892 630.477 190.177 630.428C190.461 630.366 190.74 630.279 191.012 630.168V634.287C190.69 634.411 190.214 634.528 189.583 634.64C188.952 634.751 188.204 634.807 187.338 634.807C185.495 634.807 184.054 634.33 183.015 633.378C181.988 632.413 181.475 630.873 181.475 628.758ZM202.979 634.343V607.327H213.853C216.784 607.327 219.029 608.137 220.588 609.758C222.146 611.366 222.926 613.562 222.926 616.345C222.926 619.116 222.153 621.317 220.606 622.95C219.073 624.571 216.797 625.381 213.778 625.381H209.14V634.343H202.979ZM209.14 621.039H212.721C214.242 621.039 215.3 620.612 215.894 619.759C216.487 618.893 216.784 617.78 216.784 616.419C216.784 615.071 216.487 613.976 215.894 613.135C215.3 612.281 214.242 611.854 212.721 611.854H209.14V621.039ZM225.635 634.343V616.104H231.665V634.343H225.635ZM225.245 610.37C225.245 609.504 225.542 608.774 226.136 608.181C226.729 607.575 227.577 607.271 228.678 607.271C229.766 607.271 230.601 607.568 231.183 608.162C231.764 608.756 232.055 609.492 232.055 610.37C232.055 611.236 231.758 611.972 231.164 612.578C230.57 613.184 229.729 613.487 228.641 613.487C227.54 613.487 226.699 613.184 226.117 612.578C225.536 611.972 225.245 611.236 225.245 610.37ZM234.708 625.492V624.898C234.708 622.066 235.617 619.802 237.436 618.107C239.254 616.4 241.647 615.547 244.616 615.547C247.585 615.547 249.972 616.4 251.778 618.107C253.597 619.802 254.506 622.066 254.506 624.898V625.492C254.506 628.325 253.597 630.595 251.778 632.302C249.972 633.996 247.585 634.844 244.616 634.844C241.635 634.844 239.235 633.996 237.417 632.302C235.611 630.595 234.708 628.325 234.708 625.492ZM240.757 624.639V625.733C240.757 627.243 241.085 628.424 241.74 629.277C242.408 630.118 243.361 630.539 244.598 630.539C245.847 630.539 246.799 630.118 247.455 629.277C248.123 628.424 248.457 627.243 248.457 625.733V624.639C248.457 623.142 248.123 621.979 247.455 621.15C246.787 620.309 245.835 619.889 244.598 619.889C243.373 619.889 242.427 620.309 241.759 621.15C241.091 621.979 240.757 623.142 240.757 624.639ZM257.493 634.343V616.104H263.282L263.338 618.386H263.412C263.882 617.582 264.6 616.932 265.564 616.438C266.542 615.93 267.686 615.677 268.997 615.677C270.877 615.677 272.405 616.202 273.58 617.254C274.755 618.305 275.343 620.093 275.343 622.616V634.343H269.387V623.136C269.387 622.047 269.152 621.28 268.682 620.835C268.224 620.377 267.575 620.148 266.733 620.148C266.016 620.148 265.367 620.359 264.785 620.779C264.204 621.2 263.758 621.763 263.449 622.468V634.343H257.493ZM278.163 625.474V624.88C278.163 622.06 279.048 619.802 280.816 618.107C282.585 616.413 284.905 615.565 287.774 615.565C290.619 615.565 292.834 616.369 294.417 617.978C296 619.586 296.792 621.806 296.792 624.639V626.457H281.707V623.191H290.984V622.932C290.984 622.016 290.712 621.256 290.168 620.649C289.624 620.043 288.813 619.74 287.737 619.74C286.55 619.74 285.641 620.173 285.01 621.039C284.391 621.905 284.082 623.024 284.082 624.397V625.641C284.082 627.199 284.416 628.418 285.084 629.296C285.764 630.174 286.748 630.613 288.034 630.613C288.95 630.613 289.729 630.403 290.372 629.982C291.015 629.562 291.529 629.049 291.912 628.442L296.551 630.354C295.969 631.714 294.967 632.803 293.545 633.619C292.135 634.436 290.323 634.844 288.108 634.844C284.979 634.844 282.536 634.003 280.779 632.32C279.035 630.626 278.163 628.343 278.163 625.474ZM298.685 625.474V624.88C298.685 622.06 299.569 619.802 301.338 618.107C303.107 616.413 305.426 615.565 308.296 615.565C311.141 615.565 313.355 616.369 314.938 617.978C316.522 619.586 317.313 621.806 317.313 624.639V626.457H302.229V623.191H311.506V622.932C311.506 622.016 311.234 621.256 310.689 620.649C310.145 620.043 309.335 619.74 308.259 619.74C307.071 619.74 306.162 620.173 305.531 621.039C304.913 621.905 304.604 623.024 304.604 624.397V625.641C304.604 627.199 304.938 628.418 305.605 629.296C306.286 630.174 307.269 630.613 308.556 630.613C309.471 630.613 310.25 630.403 310.894 629.982C311.537 629.562 312.05 629.049 312.434 628.442L317.072 630.354C316.491 631.714 315.489 632.803 314.066 633.619C312.656 634.436 310.844 634.844 308.63 634.844C305.5 634.844 303.057 634.003 301.301 632.32C299.557 630.626 298.685 628.343 298.685 625.474ZM320.134 634.343V616.104H325.997L326.071 618.367H326.127C326.56 617.6 327.147 616.963 327.89 616.456C328.632 615.949 329.467 615.695 330.395 615.695C330.716 615.695 331.025 615.72 331.322 615.77C331.619 615.819 331.829 615.868 331.953 615.918V620.612C331.73 620.538 331.471 620.482 331.174 620.445C330.889 620.408 330.568 620.39 330.209 620.39C329.38 620.39 328.601 620.643 327.871 621.15C327.141 621.658 326.578 622.319 326.183 623.136V634.343H320.134Z" fill="white"/> +<path d="M73.208 634.343H72.208V635.343H73.208V634.343ZM73.208 607.327V606.327H72.208V607.327H73.208ZM90.8164 609.758L90.0957 610.451L90.0983 610.454L90.8164 609.758ZM90.835 622.95L90.1089 622.263L90.1087 622.263L90.835 622.95ZM79.3682 625.381V624.381H78.3682V625.381H79.3682ZM79.3682 634.343V635.343H80.3682V634.343H79.3682ZM79.3682 621.039H78.3682V622.039H79.3682V621.039ZM86.1221 619.759L86.943 620.33L86.9468 620.324L86.1221 619.759ZM86.1221 613.135L85.3011 613.706L85.3051 613.711L86.1221 613.135ZM79.3682 611.854V610.854H78.3682V611.854H79.3682ZM73.208 634.343H74.208V607.327H73.208H72.208V634.343H73.208ZM73.208 607.327V608.327H84.0811V607.327V606.327H73.208V607.327ZM84.0811 607.327V608.327C86.8273 608.327 88.7782 609.081 90.0957 610.451L90.8164 609.758L91.5371 609.065C89.7374 607.193 87.1981 606.327 84.0811 606.327V607.327ZM90.8164 609.758L90.0983 610.454C91.4346 611.832 92.1543 613.755 92.1543 616.345H93.1543H94.1543C94.1543 613.368 93.3154 610.899 91.5345 609.062L90.8164 609.758ZM93.1543 616.345H92.1543C92.1543 618.922 91.4405 620.856 90.1089 622.263L90.835 622.95L91.5611 623.638C93.3219 621.778 94.1543 619.309 94.1543 616.345H93.1543ZM90.835 622.95L90.1087 622.263C88.8232 623.621 86.8508 624.381 84.0068 624.381V625.381V626.381C87.1993 626.381 89.779 625.52 91.5612 623.638L90.835 622.95ZM84.0068 625.381V624.381H79.3682V625.381V626.381H84.0068V625.381ZM79.3682 625.381H78.3682V634.343H79.3682H80.3682V625.381H79.3682ZM79.3682 634.343V633.343H73.208V634.343V635.343H79.3682V634.343ZM79.3682 621.039V622.039H82.9492V621.039V620.039H79.3682V621.039ZM82.9492 621.039V622.039C84.6371 622.039 86.0861 621.562 86.943 620.33L86.1221 619.759L85.3012 619.188C84.9705 619.663 84.3043 620.039 82.9492 620.039V621.039ZM86.1221 619.759L86.9468 620.324C87.6842 619.249 88.0127 617.922 88.0127 616.419H87.0127H86.0127C86.0127 617.637 85.7474 618.537 85.2973 619.193L86.1221 619.759ZM87.0127 616.419H88.0127C88.0127 614.928 87.6839 613.613 86.939 612.558L86.1221 613.135L85.3051 613.711C85.7478 614.339 86.0127 615.214 86.0127 616.419H87.0127ZM86.1221 613.135L86.943 612.564C86.0861 611.332 84.6371 610.854 82.9492 610.854V611.854V612.854C84.3043 612.854 84.9705 613.23 85.3012 613.706L86.1221 613.135ZM82.9492 611.854V610.854H79.3682V611.854V612.854H82.9492V611.854ZM79.3682 611.854H78.3682V621.039H79.3682H80.3682V611.854H79.3682ZM97.2734 618.107L97.9652 618.83L97.2734 618.107ZM113.249 626.457V627.457H114.249V626.457H113.249ZM98.1641 626.457H97.1641V627.457H98.1641V626.457ZM98.1641 623.191V622.191H97.1641V623.191H98.1641ZM107.441 623.191V624.191H108.441V623.191H107.441ZM101.467 621.039L100.659 620.45L100.653 620.458L101.467 621.039ZM101.541 629.296L100.745 629.901L100.75 629.908L101.541 629.296ZM108.369 628.442L108.75 627.518L107.973 627.198L107.524 627.908L108.369 628.442ZM113.008 630.354L113.927 630.746L114.325 629.815L113.389 629.429L113.008 630.354ZM110.002 633.619L109.504 632.752L109.501 632.754L110.002 633.619ZM97.2363 632.32L96.5394 633.038L96.5446 633.043L97.2363 632.32ZM94.6201 625.474H95.6201V624.88H94.6201H93.6201V625.474H94.6201ZM94.6201 624.88H95.6201C95.6201 622.287 96.4235 620.307 97.9652 618.83L97.2734 618.107L96.5816 617.385C94.5856 619.298 93.6201 621.832 93.6201 624.88H94.6201ZM97.2734 618.107L97.9652 618.83C99.5164 617.343 101.572 616.565 104.231 616.565V615.565V614.565C101.151 614.565 98.5683 615.482 96.5816 617.385L97.2734 618.107ZM104.231 615.565V616.565C106.882 616.565 108.812 617.309 110.161 618.679L110.874 617.978L111.587 617.276C109.769 615.43 107.271 614.565 104.231 614.565V615.565ZM110.874 617.978L110.161 618.679C111.516 620.055 112.249 621.998 112.249 624.639H113.249H114.249C114.249 621.614 113.398 619.116 111.587 617.276L110.874 617.978ZM113.249 624.639H112.249V626.457H113.249H114.249V624.639H113.249ZM113.249 626.457V625.457H98.1641V626.457V627.457H113.249V626.457ZM98.1641 626.457H99.1641V623.191H98.1641H97.1641V626.457H98.1641ZM98.1641 623.191V624.191H107.441V623.191V622.191H98.1641V623.191ZM107.441 623.191H108.441V622.932H107.441H106.441V623.191H107.441ZM107.441 622.932H108.441C108.441 621.802 108.099 620.794 107.369 619.981L106.625 620.649L105.881 621.318C106.24 621.717 106.441 622.23 106.441 622.932H107.441ZM106.625 620.649L107.369 619.981C106.579 619.102 105.458 618.74 104.194 618.74V619.74V620.74C105.083 620.74 105.582 620.985 105.881 621.318L106.625 620.649ZM104.194 619.74V618.74C102.727 618.74 101.5 619.295 100.659 620.45L101.467 621.039L102.275 621.628C102.695 621.051 103.286 620.74 104.194 620.74V619.74ZM101.467 621.039L100.653 620.458C99.8825 621.537 99.5391 622.876 99.5391 624.397H100.539H101.539C101.539 623.172 101.814 622.273 102.281 621.62L101.467 621.039ZM100.539 624.397H99.5391V625.641H100.539H101.539V624.397H100.539ZM100.539 625.641H99.5391C99.5391 627.33 99.8999 628.79 100.745 629.901L101.541 629.296L102.337 628.691C101.846 628.045 101.539 627.068 101.539 625.641H100.539ZM101.541 629.296L100.75 629.908C101.652 631.072 102.951 631.613 104.491 631.613V630.613V629.613C103.459 629.613 102.791 629.277 102.332 628.684L101.541 629.296ZM104.491 630.613V631.613C105.563 631.613 106.542 631.365 107.376 630.819L106.829 629.982L106.282 629.145C105.83 629.441 105.25 629.613 104.491 629.613V630.613ZM106.829 629.982L107.376 630.819C108.131 630.326 108.749 629.713 109.214 628.977L108.369 628.442L107.524 627.908C107.222 628.384 106.814 628.797 106.282 629.145L106.829 629.982ZM108.369 628.442L107.988 629.367L112.627 631.278L113.008 630.354L113.389 629.429L108.75 627.518L108.369 628.442ZM113.008 630.354L112.088 629.961C111.601 631.1 110.76 632.031 109.504 632.752L110.002 633.619L110.5 634.486C112.089 633.574 113.251 632.329 113.927 630.746L113.008 630.354ZM110.002 633.619L109.501 632.754C108.288 633.456 106.664 633.844 104.565 633.844V634.844V635.844C106.895 635.844 108.895 635.415 110.503 634.485L110.002 633.619ZM104.565 634.844V633.844C101.617 633.844 99.4495 633.055 97.928 631.598L97.2363 632.32L96.5446 633.043C98.5362 634.95 101.255 635.844 104.565 635.844V634.844ZM97.2363 632.32L97.9332 631.603C96.4176 630.13 95.6201 628.126 95.6201 625.474H94.6201H93.6201C93.6201 628.561 94.5668 631.121 96.5395 633.038L97.2363 632.32ZM117.461 624.564L116.892 623.742L116.889 623.744L117.461 624.564ZM123.361 622.969V621.969L123.356 621.969L123.361 622.969ZM127.443 622.969V623.969H128.443V622.969H127.443ZM121.914 621.744L121.911 622.744L122.914 622.747V621.744H121.914ZM116.292 621.726H115.292V622.722L116.289 622.726L116.292 621.726ZM118.686 617.217L119.24 618.049L119.242 618.048L118.686 617.217ZM131.266 617.143L130.677 617.951L130.68 617.953L131.266 617.143ZM133.585 632.339L132.601 632.518L132.603 632.528L132.605 632.538L133.585 632.339ZM134.16 634.064H135.16V633.823L135.05 633.608L134.16 634.064ZM134.16 634.343V635.343H135.16V634.343H134.16ZM128.297 634.343L127.418 634.819L127.701 635.343H128.297V634.343ZM127.87 633.248L126.902 633.497L126.905 633.51L126.909 633.523L127.87 633.248ZM127.647 631.931L128.644 631.848L128.383 628.713L126.786 631.423L127.647 631.931ZM125.458 633.805L124.99 632.921L124.986 632.923L125.458 633.805ZM116.941 633.229L116.313 634.007L116.317 634.01L116.941 633.229ZM121.784 630.409L121.077 631.116L121.087 631.126L121.784 630.409ZM126.367 630.075L127.048 630.808L127.049 630.807L126.367 630.075ZM127.443 626.197H128.443V625.197H127.443V626.197ZM122.007 626.772L121.472 625.927L121.464 625.932L122.007 626.772ZM115.197 629.036H116.197C116.197 627.414 116.807 626.239 118.033 625.385L117.461 624.564L116.889 623.744C115.097 624.993 114.197 626.798 114.197 629.036H115.197ZM117.461 624.564L118.029 625.387C119.342 624.48 121.095 623.98 123.366 623.969L123.361 622.969L123.356 621.969C120.803 621.982 118.623 622.546 116.892 623.742L117.461 624.564ZM123.361 622.969V623.969H127.443V622.969V621.969H123.361V622.969ZM127.443 622.969H128.443V621.874H127.443H126.443V622.969H127.443ZM127.443 621.874H128.443C128.443 620.893 128.196 619.991 127.586 619.289L126.831 619.944L126.076 620.6C126.282 620.838 126.443 621.222 126.443 621.874H127.443ZM126.831 619.944L127.586 619.289C126.902 618.501 125.856 618.239 124.753 618.239V619.239V620.239C125.604 620.239 125.944 620.448 126.076 620.6L126.831 619.944ZM124.753 619.239V618.239C123.674 618.239 122.669 618.452 121.946 619.077L122.601 619.833L123.255 620.589C123.448 620.422 123.877 620.239 124.753 620.239V619.239ZM122.601 619.833L121.946 619.077C121.249 619.68 120.914 620.492 120.914 621.41H121.914H122.914C122.914 621.018 123.037 620.778 123.255 620.589L122.601 619.833ZM121.914 621.41H120.914V621.744H121.914H122.914V621.41H121.914ZM121.914 621.744L121.917 620.744L116.295 620.726L116.292 621.726L116.289 622.726L121.911 622.744L121.914 621.744ZM116.292 621.726H117.292V621.354H116.292H115.292V621.726H116.292ZM116.292 621.354H117.292C117.292 620.043 117.88 618.956 119.24 618.049L118.686 617.217L118.131 616.385C116.3 617.605 115.292 619.277 115.292 621.354H116.292ZM118.686 617.217L119.242 618.048C120.634 617.116 122.559 616.603 125.105 616.603V615.603V614.603C122.309 614.603 119.954 615.165 118.129 616.386L118.686 617.217ZM125.105 615.603V616.603C127.699 616.603 129.508 617.1 130.677 617.951L131.266 617.143L131.854 616.334C130.203 615.132 127.906 614.603 125.105 614.603V615.603ZM131.266 617.143L130.68 617.953C131.772 618.741 132.399 620.025 132.399 622.041H133.399H134.399C134.399 619.579 133.605 617.597 131.851 616.332L131.266 617.143ZM133.399 622.041H132.399V630.205H133.399H134.399V622.041H133.399ZM133.399 630.205H132.399C132.399 631.003 132.466 631.774 132.601 632.518L133.585 632.339L134.569 632.16C134.457 631.543 134.399 630.892 134.399 630.205H133.399ZM133.585 632.339L132.605 632.538C132.755 633.274 132.972 633.94 133.27 634.521L134.16 634.064L135.05 633.608C134.853 633.224 134.687 632.74 134.565 632.139L133.585 632.339ZM134.16 634.064H133.16V634.343H134.16H135.16V634.064H134.16ZM134.16 634.343V633.343H128.297V634.343V635.343H134.16V634.343ZM128.297 634.343L129.176 633.866C129.059 633.651 128.942 633.358 128.832 632.973L127.87 633.248L126.909 633.523C127.046 634.004 127.213 634.441 127.418 634.819L128.297 634.343ZM127.87 633.248L128.839 632.999C128.741 632.62 128.676 632.237 128.644 631.848L127.647 631.931L126.651 632.014C126.693 632.515 126.776 633.01 126.902 633.497L127.87 633.248ZM127.647 631.931L126.786 631.423C126.506 631.897 125.951 632.412 124.99 632.921L125.458 633.805L125.926 634.688C127.067 634.084 127.972 633.349 128.509 632.438L127.647 631.931ZM125.458 633.805L124.986 632.923C124.133 633.38 122.997 633.64 121.524 633.64V634.64V635.64C123.218 635.64 124.705 635.343 125.93 634.686L125.458 633.805ZM121.524 634.64V633.64C119.813 633.64 118.523 633.214 117.566 632.449L116.941 633.229L116.317 634.01C117.71 635.125 119.475 635.64 121.524 635.64V634.64ZM116.941 633.229L117.57 632.452C116.698 631.747 116.197 630.669 116.197 629.036H115.197H114.197C114.197 631.114 114.859 632.832 116.313 634.007L116.941 633.229ZM121.116 628.572H120.116C120.116 629.55 120.402 630.441 121.077 631.116L121.784 630.409L122.491 629.702C122.276 629.487 122.116 629.153 122.116 628.572H121.116ZM121.784 630.409L121.087 631.126C121.791 631.811 122.772 632.059 123.825 632.059V631.059V630.059C123.048 630.059 122.668 629.873 122.481 629.692L121.784 630.409ZM123.825 631.059V632.059C125.06 632.059 126.152 631.64 127.048 630.808L126.367 630.075L125.686 629.343C125.172 629.821 124.57 630.059 123.825 630.059V631.059ZM126.367 630.075L127.049 630.807C127.943 629.974 128.443 628.946 128.443 627.756H127.443H126.443C126.443 628.323 126.226 628.84 125.686 629.343L126.367 630.075ZM127.443 627.756H128.443V626.197H127.443H126.443V627.756H127.443ZM127.443 626.197V625.197H124.809V626.197V627.197H127.443V626.197ZM124.809 626.197V625.197C123.483 625.197 122.319 625.392 121.472 625.927L122.007 626.772L122.541 627.618C122.907 627.386 123.611 627.197 124.809 627.197V626.197ZM122.007 626.772L121.464 625.932C120.537 626.531 120.116 627.478 120.116 628.572H121.116H122.116C122.116 628.034 122.289 627.781 122.549 627.612L122.007 626.772ZM137.37 634.343H136.37V635.343H137.37V634.343ZM137.37 616.104V615.104H136.37V616.104H137.37ZM143.159 616.104L144.159 616.079L144.135 615.104H143.159V616.104ZM143.215 618.386L142.215 618.41L142.239 619.386H143.215V618.386ZM143.289 618.386V619.386H143.863L144.152 618.89L143.289 618.386ZM145.441 616.438L145.898 617.327L145.902 617.325L145.441 616.438ZM153.457 617.254L154.124 616.509L153.457 617.254ZM155.22 634.343V635.343H156.22V634.343H155.22ZM149.264 634.343H148.264V635.343H149.264V634.343ZM148.559 620.835L147.851 621.542L147.861 621.552L147.871 621.561L148.559 620.835ZM144.662 620.779L144.076 619.969L144.662 620.779ZM143.326 622.468L142.41 622.066L142.326 622.258V622.468H143.326ZM143.326 634.343V635.343H144.326V634.343H143.326ZM137.37 634.343H138.37V616.104H137.37H136.37V634.343H137.37ZM137.37 616.104V617.104H143.159V616.104V615.104H137.37V616.104ZM143.159 616.104L142.159 616.128L142.215 618.41L143.215 618.386L144.215 618.361L144.159 616.079L143.159 616.104ZM143.215 618.386V619.386H143.289V618.386V617.386H143.215V618.386ZM143.289 618.386L144.152 618.89C144.511 618.276 145.074 617.75 145.898 617.327L145.441 616.438L144.985 615.548C143.879 616.115 143.007 616.887 142.426 617.881L143.289 618.386ZM145.441 616.438L145.902 617.325C146.712 616.905 147.693 616.677 148.874 616.677V615.677V614.677C147.433 614.677 146.125 614.956 144.981 615.55L145.441 616.438ZM148.874 615.677V616.677C150.558 616.677 151.833 617.142 152.79 617.999L153.457 617.254L154.124 616.509C152.731 615.263 150.95 614.677 148.874 614.677V615.677ZM153.457 617.254L152.79 617.999C153.654 618.772 154.22 620.21 154.22 622.616H155.22H156.22C156.22 619.975 155.61 617.838 154.124 616.509L153.457 617.254ZM155.22 622.616H154.22V634.343H155.22H156.22V622.616H155.22ZM155.22 634.343V633.343H149.264V634.343V635.343H155.22V634.343ZM149.264 634.343H150.264V623.136H149.264H148.264V634.343H149.264ZM149.264 623.136H150.264C150.264 621.95 150.016 620.838 149.246 620.109L148.559 620.835L147.871 621.561C148.042 621.723 148.264 622.144 148.264 623.136H149.264ZM148.559 620.835L149.266 620.128C148.569 619.431 147.634 619.148 146.61 619.148V620.148V621.148C147.269 621.148 147.633 621.323 147.851 621.542L148.559 620.835ZM146.61 620.148V619.148C145.682 619.148 144.828 619.425 144.076 619.969L144.662 620.779L145.248 621.59C145.659 621.292 146.103 621.148 146.61 621.148V620.148ZM144.662 620.779L144.076 619.969C143.34 620.502 142.786 621.21 142.41 622.066L143.326 622.468L144.242 622.869C144.485 622.315 144.822 621.898 145.248 621.59L144.662 620.779ZM143.326 622.468H142.326V634.343H143.326H144.326V622.468H143.326ZM143.326 634.343V633.343H137.37V634.343V635.343H143.326V634.343ZM158.801 616.104V615.104H157.801V616.104H158.801ZM164.775 616.104H165.775V615.104H164.775V616.104ZM165.48 629.686L164.783 630.402L164.793 630.411L165.48 629.686ZM170.694 628.016L171.602 628.436L171.694 628.236V628.016H170.694ZM170.694 616.104V615.104H169.694V616.104H170.694ZM176.65 616.104H177.65V615.104H176.65V616.104ZM176.65 634.343V635.343H177.65V634.343H176.65ZM170.88 634.343L169.88 634.375L169.912 635.343H170.88V634.343ZM170.806 632.042L171.805 632.01L171.774 631.042H170.806V632.042ZM170.75 632.042V631.042H170.197L169.903 631.511L170.75 632.042ZM168.505 634.027L168.053 633.135L168.049 633.138L168.505 634.027ZM160.545 633.137L159.857 633.863L159.861 633.867L160.545 633.137ZM158.801 627.7H159.801V616.104H158.801H157.801V627.7H158.801ZM158.801 616.104V617.104H164.775V616.104V615.104H158.801V616.104ZM164.775 616.104H163.775V627.273H164.775H165.775V616.104H164.775ZM164.775 627.273H163.775C163.775 628.505 164.017 629.656 164.783 630.402L165.48 629.686L166.178 628.969C166.004 628.8 165.775 628.343 165.775 627.273H164.775ZM165.48 629.686L164.793 630.411C165.496 631.078 166.419 631.354 167.429 631.354V630.354V629.354C166.781 629.354 166.405 629.184 166.168 628.96L165.48 629.686ZM167.429 630.354V631.354C168.379 631.354 169.246 631.058 169.993 630.473L169.377 629.686L168.761 628.898C168.369 629.204 167.938 629.354 167.429 629.354V630.354ZM169.377 629.686L169.993 630.473C170.689 629.928 171.227 629.245 171.602 628.436L170.694 628.016L169.787 627.596C169.543 628.122 169.202 628.552 168.761 628.898L169.377 629.686ZM170.694 628.016H171.694V616.104H170.694H169.694V628.016H170.694ZM170.694 616.104V617.104H176.65V616.104V615.104H170.694V616.104ZM176.65 616.104H175.65V634.343H176.65H177.65V616.104H176.65ZM176.65 634.343V633.343H170.88V634.343V635.343H176.65V634.343ZM170.88 634.343L171.879 634.311L171.805 632.01L170.806 632.042L169.806 632.074L169.88 634.375L170.88 634.343ZM170.806 632.042V631.042H170.75V632.042V633.042H170.806V632.042ZM170.75 632.042L169.903 631.511C169.491 632.168 168.888 632.712 168.053 633.135L168.505 634.027L168.957 634.92C170.076 634.353 170.97 633.574 171.597 632.573L170.75 632.042ZM168.505 634.027L168.049 633.138C167.253 633.546 166.272 633.77 165.072 633.77V634.77V635.77C166.52 635.77 167.827 635.499 168.961 634.917L168.505 634.027ZM165.072 634.77V633.77C163.426 633.77 162.176 633.293 161.228 632.407L160.545 633.137L159.861 633.867C161.24 635.157 163.008 635.77 165.072 635.77V634.77ZM160.545 633.137L161.232 632.411C160.359 631.583 159.801 630.103 159.801 627.7H158.801H157.801C157.801 630.344 158.405 632.488 159.857 633.863L160.545 633.137ZM178.691 620.408H177.691V621.408H178.691V620.408ZM178.691 616.104V615.104H177.691V616.104H178.691ZM191.03 616.104H192.03V615.104H191.03V616.104ZM191.03 620.408V621.408H192.03V620.408H191.03ZM181.475 617.532L180.517 617.245L180.475 617.385V617.532H181.475ZM181.586 617.161L182.544 617.448L182.586 617.308V617.161H181.586ZM181.586 610.927V609.927H180.586V610.927H181.586ZM187.356 610.927H188.356V609.927H187.356V610.927ZM187.839 629.982L187.106 630.663L187.839 629.982ZM190.177 630.428L190.348 631.413L190.369 631.409L190.389 631.405L190.177 630.428ZM191.012 630.168H192.012V628.678L190.633 629.242L191.012 630.168ZM191.012 634.287L191.371 635.22L192.012 634.974V634.287H191.012ZM183.015 633.378L182.33 634.107L182.339 634.115L183.015 633.378ZM178.691 620.408H179.691V616.104H178.691H177.691V620.408H178.691ZM178.691 616.104V617.104H191.03V616.104V615.104H178.691V616.104ZM191.03 616.104H190.03V620.408H191.03H192.03V616.104H191.03ZM191.03 620.408V619.408H178.691V620.408V621.408H191.03V620.408ZM181.475 628.758H182.475V617.532H181.475H180.475V628.758H181.475ZM181.475 617.532L182.432 617.82L182.544 617.448L181.586 617.161L180.628 616.874L180.517 617.245L181.475 617.532ZM181.586 617.161H182.586V610.927H181.586H180.586V617.161H181.586ZM181.586 610.927V611.927H187.356V610.927V609.927H181.586V610.927ZM187.356 610.927H186.356V627.867H187.356H188.356V610.927H187.356ZM187.356 627.867H186.356C186.356 628.442 186.399 628.965 186.502 629.416C186.603 629.857 186.779 630.31 187.106 630.663L187.839 629.982L188.572 629.302C188.578 629.308 188.512 629.236 188.452 628.971C188.394 628.717 188.356 628.356 188.356 627.867H187.356ZM187.839 629.982L187.106 630.663C187.678 631.278 188.469 631.502 189.286 631.502V630.502V629.502C188.817 629.502 188.643 629.379 188.572 629.302L187.839 629.982ZM189.286 630.502V631.502C189.649 631.502 190.003 631.473 190.348 631.413L190.177 630.428L190.005 629.443C189.781 629.481 189.542 629.502 189.286 629.502V630.502ZM190.177 630.428L190.389 631.405C190.731 631.331 191.065 631.227 191.39 631.094L191.012 630.168L190.633 629.242C190.414 629.332 190.191 629.401 189.964 629.451L190.177 630.428ZM191.012 630.168H190.012V634.287H191.012H192.012V630.168H191.012ZM191.012 634.287L190.653 633.354C190.422 633.443 190.021 633.547 189.409 633.655L189.583 634.64L189.757 635.624C190.407 635.51 190.958 635.379 191.371 635.22L191.012 634.287ZM189.583 634.64L189.409 633.655C188.852 633.753 188.164 633.807 187.338 633.807V634.807V635.807C188.243 635.807 189.053 635.749 189.757 635.624L189.583 634.64ZM187.338 634.807V633.807C185.666 633.807 184.494 633.377 183.69 632.641L183.015 633.378L182.339 634.115C183.613 635.283 185.324 635.807 187.338 635.807V634.807ZM183.015 633.378L183.699 632.649C182.956 631.951 182.475 630.735 182.475 628.758H181.475H180.475C180.475 631.011 181.02 632.875 182.33 634.107L183.015 633.378ZM202.979 634.343H201.979V635.343H202.979V634.343ZM202.979 607.327V606.327H201.979V607.327H202.979ZM220.588 609.758L219.867 610.451L219.87 610.454L220.588 609.758ZM220.606 622.95L219.88 622.263L219.88 622.263L220.606 622.95ZM209.14 625.381V624.381H208.14V625.381H209.14ZM209.14 634.343V635.343H210.14V634.343H209.14ZM209.14 621.039H208.14V622.039H209.14V621.039ZM215.894 619.759L216.714 620.33L216.718 620.324L215.894 619.759ZM215.894 613.135L215.073 613.706L215.077 613.711L215.894 613.135ZM209.14 611.854V610.854H208.14V611.854H209.14ZM202.979 634.343H203.979V607.327H202.979H201.979V634.343H202.979ZM202.979 607.327V608.327H213.853V607.327V606.327H202.979V607.327ZM213.853 607.327V608.327C216.599 608.327 218.55 609.081 219.867 610.451L220.588 609.758L221.309 609.065C219.509 607.193 216.97 606.327 213.853 606.327V607.327ZM220.588 609.758L219.87 610.454C221.206 611.832 221.926 613.755 221.926 616.345H222.926H223.926C223.926 613.368 223.087 610.899 221.306 609.062L220.588 609.758ZM222.926 616.345H221.926C221.926 618.922 221.212 620.856 219.88 622.263L220.606 622.95L221.333 623.638C223.093 621.778 223.926 619.309 223.926 616.345H222.926ZM220.606 622.95L219.88 622.263C218.595 623.621 216.622 624.381 213.778 624.381V625.381V626.381C216.971 626.381 219.551 625.52 221.333 623.638L220.606 622.95ZM213.778 625.381V624.381H209.14V625.381V626.381H213.778V625.381ZM209.14 625.381H208.14V634.343H209.14H210.14V625.381H209.14ZM209.14 634.343V633.343H202.979V634.343V635.343H209.14V634.343ZM209.14 621.039V622.039H212.721V621.039V620.039H209.14V621.039ZM212.721 621.039V622.039C214.409 622.039 215.858 621.562 216.714 620.33L215.894 619.759L215.073 619.188C214.742 619.663 214.076 620.039 212.721 620.039V621.039ZM215.894 619.759L216.718 620.324C217.456 619.249 217.784 617.922 217.784 616.419H216.784H215.784C215.784 617.637 215.519 618.537 215.069 619.193L215.894 619.759ZM216.784 616.419H217.784C217.784 614.928 217.455 613.613 216.711 612.558L215.894 613.135L215.077 613.711C215.519 614.339 215.784 615.214 215.784 616.419H216.784ZM215.894 613.135L216.714 612.564C215.858 611.332 214.409 610.854 212.721 610.854V611.854V612.854C214.076 612.854 214.742 613.23 215.073 613.706L215.894 613.135ZM212.721 611.854V610.854H209.14V611.854V612.854H212.721V611.854ZM209.14 611.854H208.14V621.039H209.14H210.14V611.854H209.14ZM225.635 634.343H224.635V635.343H225.635V634.343ZM225.635 616.104V615.104H224.635V616.104H225.635ZM231.665 616.104H232.665V615.104H231.665V616.104ZM231.665 634.343V635.343H232.665V634.343H231.665ZM226.136 608.181L226.843 608.888L226.85 608.88L226.136 608.181ZM231.183 608.162L231.897 607.462L231.183 608.162ZM225.635 634.343H226.635V616.104H225.635H224.635V634.343H225.635ZM225.635 616.104V617.104H231.665V616.104V615.104H225.635V616.104ZM231.665 616.104H230.665V634.343H231.665H232.665V616.104H231.665ZM231.665 634.343V633.343H225.635V634.343V635.343H231.665V634.343ZM225.245 610.37H226.245C226.245 609.76 226.443 609.288 226.843 608.888L226.136 608.181L225.429 607.474C224.641 608.261 224.245 609.248 224.245 610.37H225.245ZM226.136 608.181L226.85 608.88C227.204 608.519 227.762 608.271 228.678 608.271V607.271V606.271C227.392 606.271 226.255 606.63 225.421 607.481L226.136 608.181ZM228.678 607.271V608.271C229.584 608.271 230.128 608.514 230.468 608.862L231.183 608.162L231.897 607.462C231.074 606.622 229.948 606.271 228.678 606.271V607.271ZM231.183 608.162L230.468 608.862C230.855 609.257 231.055 609.737 231.055 610.37H232.055H233.055C233.055 609.247 232.673 608.255 231.897 607.462L231.183 608.162ZM232.055 610.37H231.055C231.055 610.98 230.856 611.463 230.45 611.878L231.164 612.578L231.878 613.278C232.659 612.481 233.055 611.492 233.055 610.37H232.055ZM231.164 612.578L230.45 611.878C230.093 612.242 229.54 612.487 228.641 612.487V613.487V614.487C229.918 614.487 231.047 614.126 231.878 613.278L231.164 612.578ZM228.641 613.487V612.487C227.724 612.487 227.178 612.24 226.839 611.886L226.117 612.578L225.396 613.27C226.219 614.129 227.356 614.487 228.641 614.487V613.487ZM226.117 612.578L226.839 611.886C226.442 611.472 226.245 610.987 226.245 610.37H225.245H224.245C224.245 611.485 224.629 612.472 225.396 613.27L226.117 612.578ZM237.436 618.107L238.117 618.839L238.12 618.836L237.436 618.107ZM251.778 618.107L251.091 618.834L251.097 618.839L251.778 618.107ZM251.778 632.302L252.463 633.031L252.463 633.031L251.778 632.302ZM237.417 632.302L236.73 633.029L236.735 633.033L237.417 632.302ZM241.74 629.277L240.947 629.886L240.952 629.893L240.957 629.899L241.74 629.277ZM247.455 629.277L246.668 628.661L246.666 628.663L247.455 629.277ZM247.455 621.15L246.672 621.772L246.676 621.778L247.455 621.15ZM241.759 621.15L242.537 621.778L242.542 621.772L241.759 621.15ZM234.708 625.492H235.708V624.898H234.708H233.708V625.492H234.708ZM234.708 624.898H235.708C235.708 622.301 236.531 620.317 238.117 618.839L237.436 618.107L236.754 617.376C234.703 619.287 233.708 621.831 233.708 624.898H234.708ZM237.436 618.107L238.12 618.836C239.719 617.336 241.85 616.547 244.616 616.547V615.547V614.547C241.445 614.547 238.789 615.465 236.751 617.378L237.436 618.107ZM244.616 615.547V616.547C247.382 616.547 249.506 617.336 251.091 618.834L251.778 618.107L252.465 617.381C250.438 615.465 247.788 614.547 244.616 614.547V615.547ZM251.778 618.107L251.097 618.839C252.683 620.317 253.506 622.301 253.506 624.898H254.506H255.506C255.506 621.831 254.511 619.287 252.46 617.376L251.778 618.107ZM254.506 624.898H253.506V625.492H254.506H255.506V624.898H254.506ZM254.506 625.492H253.506C253.506 628.09 252.683 630.081 251.094 631.573L251.778 632.302L252.463 633.031C254.511 631.108 255.506 628.56 255.506 625.492H254.506ZM251.778 632.302L251.094 631.573C249.509 633.06 247.384 633.844 244.616 633.844V634.844V635.844C247.786 635.844 250.436 634.933 252.463 633.031L251.778 632.302ZM244.616 634.844V633.844C241.835 633.844 239.696 633.059 238.099 631.57L237.417 632.302L236.735 633.033C238.774 634.934 241.435 635.844 244.616 635.844V634.844ZM237.417 632.302L238.104 631.575C236.526 630.084 235.708 628.092 235.708 625.492H234.708H233.708C233.708 628.558 234.696 631.105 236.73 633.028L237.417 632.302ZM240.757 624.639H239.757V625.733H240.757H241.757V624.639H240.757ZM240.757 625.733H239.757C239.757 627.376 240.113 628.8 240.947 629.886L241.74 629.277L242.533 628.668C242.057 628.048 241.757 627.109 241.757 625.733H240.757ZM241.74 629.277L240.957 629.899C241.845 631.017 243.108 631.539 244.598 631.539V630.539V629.539C243.614 629.539 242.971 629.22 242.523 628.655L241.74 629.277ZM244.598 630.539V631.539C246.096 631.539 247.365 631.02 248.244 629.892L247.455 629.277L246.666 628.663C246.234 629.217 245.598 629.539 244.598 629.539V630.539ZM247.455 629.277L248.243 629.894C249.093 628.807 249.457 627.38 249.457 625.733H248.457H247.457C247.457 627.105 247.153 628.041 246.668 628.661L247.455 629.277ZM248.457 625.733H249.457V624.639H248.457H247.457V625.733H248.457ZM248.457 624.639H249.457C249.457 623.005 249.093 621.589 248.234 620.523L247.455 621.15L246.676 621.778C247.153 622.369 247.457 623.279 247.457 624.639H248.457ZM247.455 621.15L248.238 620.529C247.35 619.41 246.088 618.889 244.598 618.889V619.889V620.889C245.582 620.889 246.224 621.208 246.672 621.772L247.455 621.15ZM244.598 619.889V618.889C243.116 618.889 241.861 619.413 240.976 620.529L241.759 621.15L242.542 621.772C242.992 621.205 243.63 620.889 244.598 620.889V619.889ZM241.759 621.15L240.98 620.523C240.121 621.589 239.757 623.005 239.757 624.639H240.757H241.757C241.757 623.279 242.061 622.369 242.537 621.778L241.759 621.15ZM257.493 634.343H256.493V635.343H257.493V634.343ZM257.493 616.104V615.104H256.493V616.104H257.493ZM263.282 616.104L264.282 616.079L264.258 615.104H263.282V616.104ZM263.338 618.386L262.338 618.41L262.362 619.386H263.338V618.386ZM263.412 618.386V619.386H263.986L264.275 618.89L263.412 618.386ZM265.564 616.438L266.021 617.327L266.025 617.325L265.564 616.438ZM273.58 617.254L274.247 616.509L273.58 617.254ZM275.343 634.343V635.343H276.343V634.343H275.343ZM269.387 634.343H268.387V635.343H269.387V634.343ZM268.682 620.835L267.975 621.542L267.984 621.552L267.994 621.561L268.682 620.835ZM264.785 620.779L264.199 619.969L264.785 620.779ZM263.449 622.468L262.533 622.066L262.449 622.258V622.468H263.449ZM263.449 634.343V635.343H264.449V634.343H263.449ZM257.493 634.343H258.493V616.104H257.493H256.493V634.343H257.493ZM257.493 616.104V617.104H263.282V616.104V615.104H257.493V616.104ZM263.282 616.104L262.283 616.128L262.338 618.41L263.338 618.386L264.338 618.361L264.282 616.079L263.282 616.104ZM263.338 618.386V619.386H263.412V618.386V617.386H263.338V618.386ZM263.412 618.386L264.275 618.89C264.634 618.276 265.197 617.75 266.021 617.327L265.564 616.438L265.108 615.548C264.002 616.115 263.13 616.887 262.549 617.881L263.412 618.386ZM265.564 616.438L266.025 617.325C266.835 616.905 267.816 616.677 268.997 616.677V615.677V614.677C267.556 614.677 266.248 614.956 265.104 615.55L265.564 616.438ZM268.997 615.677V616.677C270.681 616.677 271.956 617.142 272.913 617.999L273.58 617.254L274.247 616.509C272.854 615.263 271.073 614.677 268.997 614.677V615.677ZM273.58 617.254L272.913 617.999C273.777 618.772 274.343 620.21 274.343 622.616H275.343H276.343C276.343 619.975 275.733 617.838 274.247 616.509L273.58 617.254ZM275.343 622.616H274.343V634.343H275.343H276.343V622.616H275.343ZM275.343 634.343V633.343H269.387V634.343V635.343H275.343V634.343ZM269.387 634.343H270.387V623.136H269.387H268.387V634.343H269.387ZM269.387 623.136H270.387C270.387 621.95 270.139 620.838 269.369 620.109L268.682 620.835L267.994 621.561C268.165 621.723 268.387 622.144 268.387 623.136H269.387ZM268.682 620.835L269.389 620.128C268.692 619.431 267.757 619.148 266.733 619.148V620.148V621.148C267.392 621.148 267.756 621.323 267.975 621.542L268.682 620.835ZM266.733 620.148V619.148C265.805 619.148 264.951 619.425 264.199 619.969L264.785 620.779L265.371 621.59C265.782 621.292 266.226 621.148 266.733 621.148V620.148ZM264.785 620.779L264.199 619.969C263.463 620.502 262.909 621.21 262.533 622.066L263.449 622.468L264.365 622.869C264.608 622.315 264.945 621.898 265.371 621.59L264.785 620.779ZM263.449 622.468H262.449V634.343H263.449H264.449V622.468H263.449ZM263.449 634.343V633.343H257.493V634.343V635.343H263.449V634.343ZM280.816 618.107L281.508 618.83L280.816 618.107ZM296.792 626.457V627.457H297.792V626.457H296.792ZM281.707 626.457H280.707V627.457H281.707V626.457ZM281.707 623.191V622.191H280.707V623.191H281.707ZM290.984 623.191V624.191H291.984V623.191H290.984ZM285.01 621.039L284.201 620.45L284.196 620.458L285.01 621.039ZM285.084 629.296L284.288 629.901L284.293 629.908L285.084 629.296ZM291.912 628.442L292.293 627.518L291.516 627.198L291.067 627.908L291.912 628.442ZM296.551 630.354L297.47 630.746L297.868 629.815L296.932 629.429L296.551 630.354ZM293.545 633.619L293.047 632.752L293.044 632.754L293.545 633.619ZM280.779 632.32L280.082 633.038L280.088 633.043L280.779 632.32ZM278.163 625.474H279.163V624.88H278.163H277.163V625.474H278.163ZM278.163 624.88H279.163C279.163 622.287 279.967 620.307 281.508 618.83L280.816 618.107L280.125 617.385C278.129 619.298 277.163 621.832 277.163 624.88H278.163ZM280.816 618.107L281.508 618.83C283.059 617.343 285.115 616.565 287.774 616.565V615.565V614.565C284.694 614.565 282.111 615.482 280.125 617.385L280.816 618.107ZM287.774 615.565V616.565C290.425 616.565 292.355 617.309 293.704 618.679L294.417 617.978L295.13 617.276C293.312 615.43 290.814 614.565 287.774 614.565V615.565ZM294.417 617.978L293.704 618.679C295.059 620.055 295.792 621.998 295.792 624.639H296.792H297.792C297.792 621.614 296.941 619.116 295.13 617.276L294.417 617.978ZM296.792 624.639H295.792V626.457H296.792H297.792V624.639H296.792ZM296.792 626.457V625.457H281.707V626.457V627.457H296.792V626.457ZM281.707 626.457H282.707V623.191H281.707H280.707V626.457H281.707ZM281.707 623.191V624.191H290.984V623.191V622.191H281.707V623.191ZM290.984 623.191H291.984V622.932H290.984H289.984V623.191H290.984ZM290.984 622.932H291.984C291.984 621.802 291.642 620.794 290.912 619.981L290.168 620.649L289.424 621.318C289.783 621.717 289.984 622.23 289.984 622.932H290.984ZM290.168 620.649L290.912 619.981C290.122 619.102 289.001 618.74 287.737 618.74V619.74V620.74C288.626 620.74 289.125 620.985 289.424 621.318L290.168 620.649ZM287.737 619.74V618.74C286.27 618.74 285.043 619.295 284.202 620.45L285.01 621.039L285.818 621.628C286.238 621.051 286.829 620.74 287.737 620.74V619.74ZM285.01 621.039L284.196 620.458C283.425 621.537 283.082 622.876 283.082 624.397H284.082H285.082C285.082 623.172 285.357 622.273 285.824 621.62L285.01 621.039ZM284.082 624.397H283.082V625.641H284.082H285.082V624.397H284.082ZM284.082 625.641H283.082C283.082 627.33 283.443 628.79 284.288 629.901L285.084 629.296L285.88 628.691C285.389 628.045 285.082 627.068 285.082 625.641H284.082ZM285.084 629.296L284.293 629.908C285.195 631.072 286.494 631.613 288.034 631.613V630.613V629.613C287.002 629.613 286.334 629.277 285.875 628.684L285.084 629.296ZM288.034 630.613V631.613C289.106 631.613 290.084 631.365 290.919 630.819L290.372 629.982L289.825 629.145C289.373 629.441 288.793 629.613 288.034 629.613V630.613ZM290.372 629.982L290.919 630.819C291.674 630.326 292.292 629.713 292.757 628.977L291.912 628.442L291.067 627.908C290.765 628.384 290.357 628.797 289.825 629.145L290.372 629.982ZM291.912 628.442L291.531 629.367L296.17 631.278L296.551 630.354L296.932 629.429L292.293 627.518L291.912 628.442ZM296.551 630.354L295.631 629.961C295.144 631.1 294.303 632.031 293.047 632.752L293.545 633.619L294.043 634.486C295.632 633.574 296.794 632.329 297.47 630.746L296.551 630.354ZM293.545 633.619L293.044 632.754C291.831 633.456 290.207 633.844 288.108 633.844V634.844V635.844C290.438 635.844 292.438 635.415 294.046 634.485L293.545 633.619ZM288.108 634.844V633.844C285.16 633.844 282.992 633.055 281.471 631.598L280.779 632.32L280.088 633.043C282.079 634.95 284.798 635.844 288.108 635.844V634.844ZM280.779 632.32L281.476 631.603C279.961 630.13 279.163 628.126 279.163 625.474H278.163H277.163C277.163 628.561 278.11 631.121 280.082 633.038L280.779 632.32ZM301.338 618.107L302.03 618.83L301.338 618.107ZM317.313 626.457V627.457H318.313V626.457H317.313ZM302.229 626.457H301.229V627.457H302.229V626.457ZM302.229 623.191V622.191H301.229V623.191H302.229ZM311.506 623.191V624.191H312.506V623.191H311.506ZM305.531 621.039L304.723 620.45L304.718 620.458L305.531 621.039ZM305.605 629.296L304.809 629.901L304.815 629.908L305.605 629.296ZM312.434 628.442L312.815 627.518L312.038 627.198L311.589 627.908L312.434 628.442ZM317.072 630.354L317.992 630.746L318.39 629.815L317.453 629.429L317.072 630.354ZM314.066 633.619L313.569 632.752L313.565 632.754L314.066 633.619ZM301.301 632.32L300.604 633.038L300.609 633.043L301.301 632.32ZM298.685 625.474H299.685V624.88H298.685H297.685V625.474H298.685ZM298.685 624.88H299.685C299.685 622.287 300.488 620.307 302.03 618.83L301.338 618.107L300.646 617.385C298.65 619.298 297.685 621.832 297.685 624.88H298.685ZM301.338 618.107L302.03 618.83C303.581 617.343 305.637 616.565 308.296 616.565V615.565V614.565C305.216 614.565 302.633 615.482 300.646 617.385L301.338 618.107ZM308.296 615.565V616.565C310.947 616.565 312.877 617.309 314.226 618.679L314.938 617.978L315.651 617.276C313.834 615.43 311.335 614.565 308.296 614.565V615.565ZM314.938 617.978L314.226 618.679C315.581 620.055 316.313 621.998 316.313 624.639H317.313H318.313C318.313 621.614 317.463 619.116 315.651 617.276L314.938 617.978ZM317.313 624.639H316.313V626.457H317.313H318.313V624.639H317.313ZM317.313 626.457V625.457H302.229V626.457V627.457H317.313V626.457ZM302.229 626.457H303.229V623.191H302.229H301.229V626.457H302.229ZM302.229 623.191V624.191H311.506V623.191V622.191H302.229V623.191ZM311.506 623.191H312.506V622.932H311.506H310.506V623.191H311.506ZM311.506 622.932H312.506C312.506 621.802 312.163 620.794 311.434 619.981L310.689 620.649L309.945 621.318C310.304 621.717 310.506 622.23 310.506 622.932H311.506ZM310.689 620.649L311.434 619.981C310.644 619.102 309.523 618.74 308.259 618.74V619.74V620.74C309.147 620.74 309.647 620.985 309.945 621.318L310.689 620.649ZM308.259 619.74V618.74C306.792 618.74 305.565 619.295 304.723 620.45L305.531 621.039L306.339 621.628C306.76 621.051 307.351 620.74 308.259 620.74V619.74ZM305.531 621.039L304.718 620.458C303.947 621.537 303.604 622.876 303.604 624.397H304.604H305.604C305.604 623.172 305.879 622.273 306.345 621.62L305.531 621.039ZM304.604 624.397H303.604V625.641H304.604H305.604V624.397H304.604ZM304.604 625.641H303.604C303.604 627.33 303.964 628.79 304.81 629.901L305.605 629.296L306.401 628.691C305.911 628.045 305.604 627.068 305.604 625.641H304.604ZM305.605 629.296L304.815 629.908C305.716 631.072 307.015 631.613 308.556 631.613V630.613V629.613C307.523 629.613 306.856 629.277 306.396 628.684L305.605 629.296ZM308.556 630.613V631.613C309.628 631.613 310.606 631.365 311.441 630.819L310.894 629.982L310.346 629.145C309.895 629.441 309.314 629.613 308.556 629.613V630.613ZM310.894 629.982L311.441 630.819C312.195 630.326 312.813 629.713 313.279 628.977L312.434 628.442L311.589 627.908C311.287 628.384 310.878 628.797 310.346 629.145L310.894 629.982ZM312.434 628.442L312.053 629.367L316.691 631.278L317.072 630.354L317.453 629.429L312.815 627.518L312.434 628.442ZM317.072 630.354L316.153 629.961C315.666 631.1 314.824 632.031 313.569 632.752L314.066 633.619L314.564 634.486C316.154 633.574 317.316 632.329 317.992 630.746L317.072 630.354ZM314.066 633.619L313.565 632.754C312.353 633.456 310.729 633.844 308.63 633.844V634.844V635.844C310.959 635.844 312.96 635.415 314.567 634.485L314.066 633.619ZM308.63 634.844V633.844C305.681 633.844 303.514 633.055 301.992 631.598L301.301 632.32L300.609 633.043C302.601 634.95 305.319 635.844 308.63 635.844V634.844ZM301.301 632.32L301.998 631.603C300.482 630.13 299.685 628.126 299.685 625.474H298.685H297.685C297.685 628.561 298.631 631.121 300.604 633.038L301.301 632.32ZM320.134 634.343H319.134V635.343H320.134V634.343ZM320.134 616.104V615.104H319.134V616.104H320.134ZM325.997 616.104L326.997 616.071L326.965 615.104H325.997V616.104ZM326.071 618.367L325.072 618.4L325.104 619.367H326.071V618.367ZM326.127 618.367V619.367H326.711L326.998 618.859L326.127 618.367ZM331.953 615.918H332.953V615.241L332.325 614.989L331.953 615.918ZM331.953 620.612L331.637 621.561L332.953 622V620.612H331.953ZM331.174 620.445L331.044 621.437L331.05 621.438L331.174 620.445ZM327.871 621.15L327.3 620.329L327.871 621.15ZM326.183 623.136L325.283 622.699L325.183 622.906V623.136H326.183ZM326.183 634.343V635.343H327.183V634.343H326.183ZM320.134 634.343H321.134V616.104H320.134H319.134V634.343H320.134ZM320.134 616.104V617.104H325.997V616.104V615.104H320.134V616.104ZM325.997 616.104L324.998 616.136L325.072 618.4L326.071 618.367L327.071 618.334L326.997 616.071L325.997 616.104ZM326.071 618.367V619.367H326.127V618.367V617.367H326.071V618.367ZM326.127 618.367L326.998 618.859C327.354 618.228 327.835 617.704 328.454 617.282L327.89 616.456L327.325 615.63C326.46 616.222 325.766 616.972 325.256 617.876L326.127 618.367ZM327.89 616.456L328.454 617.282C329.024 616.892 329.661 616.695 330.395 616.695V615.695V614.695C329.272 614.695 328.239 615.006 327.325 615.63L327.89 616.456ZM330.395 615.695V616.695C330.665 616.695 330.919 616.716 331.158 616.756L331.322 615.77L331.487 614.783C331.132 614.724 330.767 614.695 330.395 614.695V615.695ZM331.322 615.77L331.158 616.756C331.292 616.778 331.396 616.799 331.474 616.817C331.556 616.837 331.586 616.848 331.582 616.846L331.953 615.918L332.325 614.989C332.092 614.897 331.789 614.833 331.487 614.783L331.322 615.77ZM331.953 615.918H330.953V620.612H331.953H332.953V615.918H331.953ZM331.953 620.612L332.269 619.664C331.97 619.564 331.643 619.496 331.298 619.453L331.174 620.445L331.05 621.438C331.298 621.469 331.491 621.512 331.637 621.561L331.953 620.612ZM331.174 620.445L331.303 619.454C330.967 619.41 330.601 619.39 330.209 619.39V620.39V621.39C330.535 621.39 330.812 621.407 331.044 621.437L331.174 620.445ZM330.209 620.39V619.39C329.161 619.39 328.185 619.714 327.3 620.329L327.871 621.15L328.442 621.972C329.017 621.572 329.599 621.39 330.209 621.39V620.39ZM327.871 621.15L327.3 620.329C326.427 620.936 325.752 621.732 325.283 622.699L326.183 623.136L327.082 623.572C327.405 622.907 327.856 622.379 328.442 621.972L327.871 621.15ZM326.183 623.136H325.183V634.343H326.183H327.183V623.136H326.183ZM326.183 634.343V633.343H320.134V634.343V635.343H326.183V634.343Z" fill="black" mask="url(#path-5-outside-2_17007_2267)"/> +<mask id="path-7-outside-3_17007_2267" maskUnits="userSpaceOnUse" x="551.669" y="598.883" width="88" height="31" fill="black"> +<rect fill="white" x="551.669" y="598.883" width="88" height="31"/> +<path d="M553.094 600.867H559.532L565.247 618.624C565.358 618.909 565.445 619.193 565.507 619.478C565.581 619.762 565.655 620.059 565.729 620.368H565.841C565.915 620.059 565.989 619.756 566.063 619.459C566.15 619.162 566.237 618.884 566.323 618.624L572.094 600.867H578.031L568.939 627.994H562.186L553.094 600.867ZM577.753 622.576C577.753 620.647 578.507 619.156 580.017 618.105C581.538 617.053 583.505 616.521 585.917 616.509H589.999V615.414C589.999 614.598 589.795 613.955 589.387 613.484C588.979 613.014 588.286 612.779 587.309 612.779C586.331 612.779 585.614 612.977 585.156 613.373C584.699 613.769 584.47 614.295 584.47 614.95V615.284L578.848 615.266V614.895C578.848 613.2 579.646 611.821 581.241 610.757C582.849 609.681 584.989 609.143 587.661 609.143C590.358 609.143 592.411 609.656 593.821 610.683C595.244 611.709 595.955 613.342 595.955 615.581V623.745C595.955 624.487 596.017 625.199 596.141 625.879C596.277 626.547 596.468 627.122 596.716 627.605V627.883H590.853C590.692 627.586 590.549 627.221 590.426 626.788C590.314 626.355 590.24 625.916 590.203 625.471C589.795 626.164 589.065 626.788 588.014 627.345C586.975 627.901 585.663 628.18 584.08 628.18C582.2 628.18 580.672 627.71 579.497 626.77C578.334 625.83 577.753 624.432 577.753 622.576ZM583.672 622.112C583.672 622.892 583.895 623.504 584.34 623.949C584.785 624.382 585.465 624.599 586.381 624.599C587.37 624.599 588.218 624.271 588.923 623.615C589.64 622.947 589.999 622.174 589.999 621.296V619.737H587.364C586.103 619.737 585.169 619.929 584.562 620.313C583.969 620.696 583.672 621.296 583.672 622.112ZM599.944 627.883V600.181H605.938V627.883H599.944ZM609.927 627.883V609.644H615.957V627.883H609.927ZM609.537 603.91C609.537 603.044 609.834 602.315 610.428 601.721C611.021 601.115 611.869 600.812 612.97 600.812C614.058 600.812 614.893 601.109 615.475 601.702C616.056 602.296 616.347 603.032 616.347 603.91C616.347 604.776 616.05 605.512 615.456 606.118C614.862 606.724 614.021 607.027 612.933 607.027C611.832 607.027 610.991 606.724 610.409 606.118C609.828 605.512 609.537 604.776 609.537 603.91ZM619 619.051V618.457C619 615.761 619.724 613.559 621.171 611.852C622.618 610.132 624.511 609.273 626.849 609.273C628.123 609.273 629.211 609.489 630.114 609.922C631.017 610.343 631.722 610.905 632.229 611.61V600.181H638.074V627.883H632.396L632.322 625.526H632.285C631.815 626.293 631.11 626.943 630.17 627.475C629.23 627.994 628.123 628.254 626.849 628.254C624.424 628.254 622.507 627.394 621.097 625.675C619.699 623.943 619 621.735 619 619.051ZM625.049 619.144C625.049 620.591 625.352 621.766 625.958 622.669C626.564 623.572 627.479 624.024 628.704 624.024C629.545 624.024 630.263 623.789 630.856 623.318C631.45 622.848 631.877 622.292 632.137 621.649V615.804C631.877 615.161 631.456 614.616 630.875 614.171C630.306 613.726 629.589 613.503 628.723 613.503C627.486 613.503 626.564 613.961 625.958 614.876C625.352 615.779 625.049 616.948 625.049 618.383V619.144Z"/> +</mask> +<path d="M553.094 600.867H559.532L565.247 618.624C565.358 618.909 565.445 619.193 565.507 619.478C565.581 619.762 565.655 620.059 565.729 620.368H565.841C565.915 620.059 565.989 619.756 566.063 619.459C566.15 619.162 566.237 618.884 566.323 618.624L572.094 600.867H578.031L568.939 627.994H562.186L553.094 600.867ZM577.753 622.576C577.753 620.647 578.507 619.156 580.017 618.105C581.538 617.053 583.505 616.521 585.917 616.509H589.999V615.414C589.999 614.598 589.795 613.955 589.387 613.484C588.979 613.014 588.286 612.779 587.309 612.779C586.331 612.779 585.614 612.977 585.156 613.373C584.699 613.769 584.47 614.295 584.47 614.95V615.284L578.848 615.266V614.895C578.848 613.2 579.646 611.821 581.241 610.757C582.849 609.681 584.989 609.143 587.661 609.143C590.358 609.143 592.411 609.656 593.821 610.683C595.244 611.709 595.955 613.342 595.955 615.581V623.745C595.955 624.487 596.017 625.199 596.141 625.879C596.277 626.547 596.468 627.122 596.716 627.605V627.883H590.853C590.692 627.586 590.549 627.221 590.426 626.788C590.314 626.355 590.24 625.916 590.203 625.471C589.795 626.164 589.065 626.788 588.014 627.345C586.975 627.901 585.663 628.18 584.08 628.18C582.2 628.18 580.672 627.71 579.497 626.77C578.334 625.83 577.753 624.432 577.753 622.576ZM583.672 622.112C583.672 622.892 583.895 623.504 584.34 623.949C584.785 624.382 585.465 624.599 586.381 624.599C587.37 624.599 588.218 624.271 588.923 623.615C589.64 622.947 589.999 622.174 589.999 621.296V619.737H587.364C586.103 619.737 585.169 619.929 584.562 620.313C583.969 620.696 583.672 621.296 583.672 622.112ZM599.944 627.883V600.181H605.938V627.883H599.944ZM609.927 627.883V609.644H615.957V627.883H609.927ZM609.537 603.91C609.537 603.044 609.834 602.315 610.428 601.721C611.021 601.115 611.869 600.812 612.97 600.812C614.058 600.812 614.893 601.109 615.475 601.702C616.056 602.296 616.347 603.032 616.347 603.91C616.347 604.776 616.05 605.512 615.456 606.118C614.862 606.724 614.021 607.027 612.933 607.027C611.832 607.027 610.991 606.724 610.409 606.118C609.828 605.512 609.537 604.776 609.537 603.91ZM619 619.051V618.457C619 615.761 619.724 613.559 621.171 611.852C622.618 610.132 624.511 609.273 626.849 609.273C628.123 609.273 629.211 609.489 630.114 609.922C631.017 610.343 631.722 610.905 632.229 611.61V600.181H638.074V627.883H632.396L632.322 625.526H632.285C631.815 626.293 631.11 626.943 630.17 627.475C629.23 627.994 628.123 628.254 626.849 628.254C624.424 628.254 622.507 627.394 621.097 625.675C619.699 623.943 619 621.735 619 619.051ZM625.049 619.144C625.049 620.591 625.352 621.766 625.958 622.669C626.564 623.572 627.479 624.024 628.704 624.024C629.545 624.024 630.263 623.789 630.856 623.318C631.45 622.848 631.877 622.292 632.137 621.649V615.804C631.877 615.161 631.456 614.616 630.875 614.171C630.306 613.726 629.589 613.503 628.723 613.503C627.486 613.503 626.564 613.961 625.958 614.876C625.352 615.779 625.049 616.948 625.049 618.383V619.144Z" fill="white"/> +<path d="M553.094 600.867V599.867H551.704L552.146 601.185L553.094 600.867ZM559.532 600.867L560.484 600.561L560.261 599.867H559.532V600.867ZM565.247 618.624L564.295 618.931L564.305 618.96L564.316 618.989L565.247 618.624ZM565.507 619.478L564.53 619.69L564.534 619.71L564.539 619.73L565.507 619.478ZM565.729 620.368L564.757 620.602L564.941 621.368H565.729V620.368ZM565.841 620.368V621.368H566.629L566.813 620.602L565.841 620.368ZM566.063 619.459L565.103 619.179L565.098 619.198L565.093 619.217L566.063 619.459ZM566.323 618.624L567.272 618.94L567.274 618.933L566.323 618.624ZM572.094 600.867V599.867H571.367L571.143 600.558L572.094 600.867ZM578.031 600.867L578.979 601.185L579.421 599.867H578.031V600.867ZM568.939 627.994V628.994H569.659L569.888 628.312L568.939 627.994ZM562.186 627.994L561.237 628.312L561.466 628.994H562.186V627.994ZM553.094 600.867V601.867H559.532V600.867V599.867H553.094V600.867ZM559.532 600.867L558.58 601.174L564.295 618.931L565.247 618.624L566.199 618.318L560.484 600.561L559.532 600.867ZM565.247 618.624L564.316 618.989C564.409 619.226 564.48 619.46 564.53 619.69L565.507 619.478L566.484 619.265C566.41 618.926 566.308 618.591 566.178 618.26L565.247 618.624ZM565.507 619.478L564.539 619.73C564.612 620.008 564.684 620.298 564.757 620.602L565.729 620.368L566.702 620.135C566.626 619.82 566.55 619.517 566.474 619.225L565.507 619.478ZM565.729 620.368V621.368H565.841V620.368V619.368H565.729V620.368ZM565.841 620.368L566.813 620.602C566.887 620.295 566.96 619.995 567.034 619.702L566.063 619.459L565.093 619.217C565.018 619.517 564.943 619.823 564.868 620.135L565.841 620.368ZM566.063 619.459L567.023 619.739C567.107 619.453 567.19 619.187 567.272 618.94L566.323 618.624L565.375 618.308C565.283 618.581 565.193 618.872 565.103 619.179L566.063 619.459ZM566.323 618.624L567.274 618.933L573.045 601.176L572.094 600.867L571.143 600.558L565.372 618.315L566.323 618.624ZM572.094 600.867V601.867H578.031V600.867V599.867H572.094V600.867ZM578.031 600.867L577.083 600.55L567.991 627.676L568.939 627.994L569.888 628.312L578.979 601.185L578.031 600.867ZM568.939 627.994V626.994H562.186V627.994V628.994H568.939V627.994ZM562.186 627.994L563.134 627.676L554.042 600.55L553.094 600.867L552.146 601.185L561.237 628.312L562.186 627.994ZM580.017 618.105L579.448 617.282L579.445 617.284L580.017 618.105ZM585.917 616.509V615.509L585.912 615.509L585.917 616.509ZM589.999 616.509V617.509H590.999V616.509H589.999ZM584.47 615.284L584.466 616.284L585.47 616.288V615.284H584.47ZM578.848 615.266H577.848V616.262L578.844 616.266L578.848 615.266ZM581.241 610.757L581.796 611.589L581.797 611.588L581.241 610.757ZM593.821 610.683L593.233 611.491L593.236 611.494L593.821 610.683ZM596.141 625.879L595.157 626.058L595.159 626.068L595.161 626.079L596.141 625.879ZM596.716 627.605H597.716V627.363L597.606 627.148L596.716 627.605ZM596.716 627.883V628.883H597.716V627.883H596.716ZM590.853 627.883L589.973 628.359L590.257 628.883H590.853V627.883ZM590.426 626.788L589.457 627.037L589.461 627.05L589.464 627.063L590.426 626.788ZM590.203 625.471L591.2 625.388L590.938 622.253L589.342 624.963L590.203 625.471ZM588.014 627.345L587.546 626.461L587.541 626.463L588.014 627.345ZM579.497 626.77L578.868 627.547L578.872 627.551L579.497 626.77ZM584.34 623.949L583.633 624.657L583.643 624.666L584.34 623.949ZM588.923 623.615L589.604 624.348L589.604 624.347L588.923 623.615ZM589.999 619.737H590.999V618.737H589.999V619.737ZM584.562 620.313L584.028 619.468L584.02 619.473L584.562 620.313ZM577.753 622.576H578.753C578.753 620.955 579.363 619.779 580.588 618.925L580.017 618.105L579.445 617.284C577.652 618.533 576.753 620.339 576.753 622.576H577.753ZM580.017 618.105L580.585 618.927C581.897 618.021 583.651 617.521 585.922 617.509L585.917 616.509L585.912 615.509C583.359 615.522 581.179 616.086 579.448 617.282L580.017 618.105ZM585.917 616.509V617.509H589.999V616.509V615.509H585.917V616.509ZM589.999 616.509H590.999V615.414H589.999H588.999V616.509H589.999ZM589.999 615.414H590.999C590.999 614.433 590.752 613.531 590.142 612.829L589.387 613.484L588.632 614.14C588.838 614.378 588.999 614.762 588.999 615.414H589.999ZM589.387 613.484L590.142 612.829C589.458 612.041 588.412 611.779 587.309 611.779V612.779V613.779C588.16 613.779 588.499 613.988 588.632 614.14L589.387 613.484ZM587.309 612.779V611.779C586.23 611.779 585.224 611.992 584.502 612.617L585.156 613.373L585.81 614.13C586.004 613.963 586.433 613.779 587.309 613.779V612.779ZM585.156 613.373L584.502 612.617C583.805 613.22 583.47 614.032 583.47 614.95H584.47H585.47C585.47 614.558 585.592 614.318 585.81 614.13L585.156 613.373ZM584.47 614.95H583.47V615.284H584.47H585.47V614.95H584.47ZM584.47 615.284L584.473 614.284L578.851 614.266L578.848 615.266L578.844 616.266L584.466 616.284L584.47 615.284ZM578.848 615.266H579.848V614.895H578.848H577.848V615.266H578.848ZM578.848 614.895H579.848C579.848 613.583 580.436 612.496 581.796 611.589L581.241 610.757L580.687 609.925C578.855 611.146 577.848 612.817 577.848 614.895H578.848ZM581.241 610.757L581.797 611.588C583.189 610.657 585.114 610.143 587.661 610.143V609.143V608.143C584.864 608.143 582.509 608.705 580.685 609.926L581.241 610.757ZM587.661 609.143V610.143C590.254 610.143 592.064 610.64 593.233 611.491L593.821 610.683L594.41 609.874C592.758 608.672 590.461 608.143 587.661 608.143V609.143ZM593.821 610.683L593.236 611.494C594.327 612.281 594.955 613.565 594.955 615.581H595.955H596.955C596.955 613.119 596.16 611.138 594.407 609.872L593.821 610.683ZM595.955 615.581H594.955V623.745H595.955H596.955V615.581H595.955ZM595.955 623.745H594.955C594.955 624.543 595.022 625.314 595.157 626.058L596.141 625.879L597.124 625.7C597.012 625.083 596.955 624.432 596.955 623.745H595.955ZM596.141 625.879L595.161 626.079C595.311 626.814 595.528 627.48 595.826 628.061L596.716 627.605L597.606 627.148C597.409 626.765 597.243 626.28 597.121 625.679L596.141 625.879ZM596.716 627.605H595.716V627.883H596.716H597.716V627.605H596.716ZM596.716 627.883V626.883H590.853V627.883V628.883H596.716V627.883ZM590.853 627.883L591.732 627.407C591.615 627.191 591.497 626.898 591.387 626.513L590.426 626.788L589.464 627.063C589.602 627.544 589.768 627.981 589.973 628.359L590.853 627.883ZM590.426 626.788L591.394 626.539C591.297 626.161 591.232 625.777 591.2 625.388L590.203 625.471L589.207 625.554C589.248 626.055 589.332 626.55 589.457 627.037L590.426 626.788ZM590.203 625.471L589.342 624.963C589.062 625.438 588.507 625.952 587.546 626.461L588.014 627.345L588.482 628.229C589.623 627.624 590.528 626.89 591.065 625.979L590.203 625.471ZM588.014 627.345L587.541 626.463C586.689 626.92 585.553 627.18 584.08 627.18V628.18V629.18C585.774 629.18 587.26 628.883 588.486 628.226L588.014 627.345ZM584.08 628.18V627.18C582.369 627.18 581.079 626.755 580.122 625.989L579.497 626.77L578.872 627.551C580.265 628.665 582.031 629.18 584.08 629.18V628.18ZM579.497 626.77L580.126 625.992C579.254 625.287 578.753 624.21 578.753 622.576H577.753H576.753C576.753 624.654 577.415 626.372 578.868 627.547L579.497 626.77ZM583.672 622.112H582.672C582.672 623.09 582.957 623.981 583.633 624.656L584.34 623.949L585.047 623.242C584.832 623.027 584.672 622.693 584.672 622.112H583.672ZM584.34 623.949L583.643 624.666C584.347 625.351 585.327 625.599 586.381 625.599V624.599V623.599C585.604 623.599 585.223 623.413 585.037 623.232L584.34 623.949ZM586.381 624.599V625.599C587.615 625.599 588.708 625.181 589.604 624.348L588.923 623.615L588.242 622.883C587.727 623.361 587.126 623.599 586.381 623.599V624.599ZM588.923 623.615L589.604 624.347C590.499 623.514 590.999 622.486 590.999 621.296H589.999H588.999C588.999 621.863 588.782 622.38 588.241 622.883L588.923 623.615ZM589.999 621.296H590.999V619.737H589.999H588.999V621.296H589.999ZM589.999 619.737V618.737H587.364V619.737V620.737H589.999V619.737ZM587.364 619.737V618.737C586.039 618.737 584.874 618.932 584.028 619.468L584.562 620.313L585.097 621.158C585.463 620.926 586.166 620.737 587.364 620.737V619.737ZM584.562 620.313L584.02 619.473C583.093 620.071 582.672 621.018 582.672 622.112H583.672H584.672C584.672 621.574 584.845 621.321 585.105 621.153L584.562 620.313ZM599.944 627.883H598.944V628.883H599.944V627.883ZM599.944 600.181V599.181H598.944V600.181H599.944ZM605.938 600.181H606.938V599.181H605.938V600.181ZM605.938 627.883V628.883H606.938V627.883H605.938ZM599.944 627.883H600.944V600.181H599.944H598.944V627.883H599.944ZM599.944 600.181V601.181H605.938V600.181V599.181H599.944V600.181ZM605.938 600.181H604.938V627.883H605.938H606.938V600.181H605.938ZM605.938 627.883V626.883H599.944V627.883V628.883H605.938V627.883ZM609.927 627.883H608.927V628.883H609.927V627.883ZM609.927 609.644V608.644H608.927V609.644H609.927ZM615.957 609.644H616.957V608.644H615.957V609.644ZM615.957 627.883V628.883H616.957V627.883H615.957ZM610.428 601.721L611.135 602.428L611.142 602.421L610.428 601.721ZM615.475 601.702L616.189 601.003L615.475 601.702ZM609.927 627.883H610.927V609.644H609.927H608.927V627.883H609.927ZM609.927 609.644V610.644H615.957V609.644V608.644H609.927V609.644ZM615.957 609.644H614.957V627.883H615.957H616.957V609.644H615.957ZM615.957 627.883V626.883H609.927V627.883V628.883H615.957V627.883ZM609.537 603.91H610.537C610.537 603.3 610.735 602.828 611.135 602.428L610.428 601.721L609.721 601.014C608.933 601.801 608.537 602.788 608.537 603.91H609.537ZM610.428 601.721L611.142 602.421C611.496 602.059 612.054 601.812 612.97 601.812V600.812V599.812C611.684 599.812 610.547 600.17 609.713 601.021L610.428 601.721ZM612.97 600.812V601.812C613.876 601.812 614.42 602.055 614.76 602.402L615.475 601.702L616.189 601.003C615.366 600.162 614.24 599.812 612.97 599.812V600.812ZM615.475 601.702L614.76 602.402C615.147 602.797 615.347 603.277 615.347 603.91H616.347H617.347C617.347 602.787 616.965 601.795 616.189 601.003L615.475 601.702ZM616.347 603.91H615.347C615.347 604.521 615.148 605.004 614.742 605.419L615.456 606.118L616.17 606.818C616.951 606.021 617.347 605.032 617.347 603.91H616.347ZM615.456 606.118L614.742 605.419C614.385 605.782 613.832 606.027 612.933 606.027V607.027V608.027C614.21 608.027 615.339 607.667 616.17 606.818L615.456 606.118ZM612.933 607.027V606.027C612.016 606.027 611.47 605.78 611.131 605.426L610.409 606.118L609.688 606.811C610.511 607.669 611.648 608.027 612.933 608.027V607.027ZM610.409 606.118L611.131 605.426C610.734 605.012 610.537 604.527 610.537 603.91H609.537H608.537C608.537 605.025 608.921 606.012 609.688 606.811L610.409 606.118ZM621.171 611.852L621.934 612.498L621.936 612.496L621.171 611.852ZM630.114 609.922L629.682 610.824L629.692 610.828L630.114 609.922ZM632.229 611.61L631.418 612.194L633.229 614.713V611.61H632.229ZM632.229 600.181V599.181H631.229V600.181H632.229ZM638.074 600.181H639.074V599.181H638.074V600.181ZM638.074 627.883V628.883H639.074V627.883H638.074ZM632.396 627.883L631.397 627.914L631.427 628.883H632.396V627.883ZM632.322 625.526L633.322 625.495L633.291 624.526H632.322V625.526ZM632.285 625.526V624.526H631.725L631.433 625.004L632.285 625.526ZM630.17 627.475L630.654 628.35L630.662 628.345L630.17 627.475ZM621.097 625.675L620.319 626.303L620.323 626.309L621.097 625.675ZM625.958 622.669L625.128 623.226L625.958 622.669ZM630.856 623.318L630.236 622.534L630.856 623.318ZM632.137 621.649L633.064 622.023L633.137 621.843V621.649H632.137ZM632.137 615.804H633.137V615.61L633.064 615.429L632.137 615.804ZM630.875 614.171L630.259 614.959L630.267 614.965L630.875 614.171ZM625.958 614.876L626.788 615.433L626.792 615.428L625.958 614.876ZM619 619.051H620V618.457H619H618V619.051H619ZM619 618.457H620C620 615.947 620.669 613.99 621.934 612.498L621.171 611.852L620.408 611.205C618.778 613.128 618 615.574 618 618.457H619ZM621.171 611.852L621.936 612.496C623.185 611.012 624.792 610.273 626.849 610.273V609.273V608.273C624.229 608.273 622.052 609.252 620.406 611.208L621.171 611.852ZM626.849 609.273V610.273C628.013 610.273 628.945 610.471 629.682 610.824L630.114 609.922L630.547 609.02C629.477 608.508 628.233 608.273 626.849 608.273V609.273ZM630.114 609.922L629.692 610.828C630.463 611.187 631.025 611.648 631.418 612.194L632.229 611.61L633.041 611.027C632.42 610.163 631.572 609.498 630.536 609.015L630.114 609.922ZM632.229 611.61H633.229V600.181H632.229H631.229V611.61H632.229ZM632.229 600.181V601.181H638.074V600.181V599.181H632.229V600.181ZM638.074 600.181H637.074V627.883H638.074H639.074V600.181H638.074ZM638.074 627.883V626.883H632.396V627.883V628.883H638.074V627.883ZM632.396 627.883L633.396 627.851L633.322 625.495L632.322 625.526L631.323 625.558L631.397 627.914L632.396 627.883ZM632.322 625.526V624.526H632.285V625.526V626.526H632.322V625.526ZM632.285 625.526L631.433 625.004C631.067 625.6 630.5 626.139 629.677 626.604L630.17 627.475L630.662 628.345C631.721 627.746 632.563 626.987 633.138 626.049L632.285 625.526ZM630.17 627.475L629.686 626.599C628.92 627.023 627.985 627.254 626.849 627.254V628.254V629.254C628.26 629.254 629.54 628.965 630.654 628.35L630.17 627.475ZM626.849 628.254V627.254C624.693 627.254 623.071 626.506 621.87 625.041L621.097 625.675L620.323 626.309C621.942 628.283 624.155 629.254 626.849 629.254V628.254ZM621.097 625.675L621.875 625.047C620.649 623.528 620 621.555 620 619.051H619H618C618 621.915 618.749 624.359 620.319 626.303L621.097 625.675ZM625.049 619.144H624.049C624.049 620.725 624.38 622.112 625.128 623.226L625.958 622.669L626.788 622.112C626.324 621.42 626.049 620.457 626.049 619.144H625.049ZM625.958 622.669L625.128 623.226C625.945 624.445 627.195 625.024 628.704 625.024V624.024V623.024C627.764 623.024 627.183 622.7 626.788 622.112L625.958 622.669ZM628.704 624.024V625.024C629.744 625.024 630.687 624.728 631.477 624.103L630.856 623.318L630.236 622.534C629.838 622.849 629.346 623.024 628.704 623.024V624.024ZM630.856 623.318L631.477 624.103C632.194 623.535 632.733 622.842 633.064 622.023L632.137 621.649L631.209 621.274C631.021 621.742 630.706 622.162 630.236 622.534L630.856 623.318ZM632.137 621.649H633.137V615.804H632.137H631.137V621.649H632.137ZM632.137 615.804L633.064 615.429C632.733 614.611 632.198 613.925 631.483 613.377L630.875 614.171L630.267 614.965C630.715 615.308 631.02 615.71 631.209 616.178L632.137 615.804ZM630.875 614.171L631.491 613.384C630.713 612.775 629.766 612.503 628.723 612.503V613.503V614.503C629.411 614.503 629.899 614.677 630.259 614.959L630.875 614.171ZM628.723 613.503V612.503C627.2 612.503 625.941 613.09 625.124 614.324L625.958 614.876L626.792 615.428C627.187 614.832 627.771 614.503 628.723 614.503V613.503ZM625.958 614.876L625.128 614.319C624.381 615.432 624.049 616.812 624.049 618.383H625.049H626.049C626.049 617.084 626.323 616.126 626.788 615.433L625.958 614.876ZM625.049 618.383H624.049V619.144H625.049H626.049V618.383H625.049Z" fill="black" mask="url(#path-7-outside-3_17007_2267)"/> +<mask id="path-9-outside-4_17007_2267" maskUnits="userSpaceOnUse" x="553.339" y="659.25" width="110" height="37" fill="black"> +<rect fill="white" x="553.339" y="659.25" width="110" height="37"/> +<path d="M554.601 681.651V672.231C554.601 668.782 555.533 666.07 557.397 664.093C559.262 662.116 561.876 661.128 565.241 661.128C568.605 661.128 571.227 662.109 573.105 664.072C574.984 666.02 575.923 668.74 575.923 672.231V681.651C575.923 685.184 574.956 687.925 573.021 689.874C571.087 691.808 568.493 692.768 565.241 692.754C561.862 692.754 559.241 691.787 557.376 689.853C555.526 687.904 554.601 685.17 554.601 681.651ZM561.666 682.787C561.666 684.343 561.953 685.57 562.528 686.467C563.117 687.35 564.028 687.792 565.262 687.792C566.496 687.792 567.4 687.35 567.975 686.467C568.563 685.57 568.858 684.343 568.858 682.787V671.2C568.858 669.616 568.563 668.383 567.975 667.499C567.4 666.602 566.496 666.154 565.262 666.154C564.028 666.154 563.117 666.602 562.528 667.499C561.953 668.383 561.666 669.616 561.666 671.2V682.787ZM578.194 679.591V678.35C578.194 673.079 579.694 668.915 582.694 665.859C585.694 662.789 589.998 661.254 595.606 661.254H596.888V666.784H595.774C592.325 666.784 589.655 667.717 587.762 669.581C585.884 671.432 584.944 674.67 584.944 679.296L585.134 679.969C585.134 683.081 585.519 685.177 586.29 686.257C587.075 687.322 588.106 687.855 589.381 687.855C590.629 687.855 591.582 687.427 592.241 686.572C592.914 685.703 593.251 684.189 593.251 682.03C593.251 680.306 592.928 678.988 592.283 678.077C591.638 677.151 590.664 676.689 589.36 676.689C588.169 676.689 587.159 677.144 586.332 678.056C585.519 678.953 585.113 680.144 585.113 681.63H583.536C583.536 678.827 584.3 676.577 585.828 674.88C587.356 673.17 589.304 672.315 591.673 672.315C594.323 672.315 596.419 673.184 597.961 674.922C599.503 676.647 600.274 679.044 600.274 682.114C600.274 685.366 599.272 687.953 597.267 689.874C595.262 691.794 592.627 692.754 589.36 692.754C586.01 692.754 583.311 691.71 581.264 689.621C579.218 687.532 578.194 684.189 578.194 679.591ZM598.907 694.878L610.767 661.633H616.634L604.753 694.878H598.907ZM615.877 679.591V678.35C615.877 673.079 617.377 668.915 620.377 665.859C623.377 662.789 627.681 661.254 633.288 661.254H634.571V666.784H633.457C630.008 666.784 627.337 667.717 625.445 669.581C623.566 671.432 622.627 674.67 622.627 679.296L622.816 679.969C622.816 683.081 623.202 685.177 623.973 686.257C624.758 687.322 625.788 687.855 627.064 687.855C628.312 687.855 629.265 687.427 629.924 686.572C630.597 685.703 630.933 684.189 630.933 682.03C630.933 680.306 630.611 678.988 629.966 678.077C629.321 677.151 628.347 676.689 627.043 676.689C625.851 676.689 624.842 677.144 624.015 678.056C623.202 678.953 622.795 680.144 622.795 681.63H621.218C621.218 678.827 621.982 676.577 623.51 674.88C625.038 673.17 626.987 672.315 629.356 672.315C632.006 672.315 634.102 673.184 635.644 674.922C637.186 676.647 637.957 679.044 637.957 682.114C637.957 685.366 636.954 687.953 634.95 689.874C632.945 691.794 630.309 692.754 627.043 692.754C623.693 692.754 620.994 691.71 618.947 689.621C616.9 687.532 615.877 684.189 615.877 679.591ZM639.513 671.726C639.513 668.488 640.515 665.915 642.52 664.009C644.539 662.088 647.181 661.128 650.448 661.128C653.784 661.128 656.476 662.172 658.522 664.261C660.583 666.35 661.614 669.693 661.614 674.292V675.532C661.614 680.719 660.114 684.834 657.114 687.876C654.113 690.904 649.81 692.439 644.202 692.481H642.898V687.035H644.034C647.469 687.035 650.118 686.109 651.983 684.259C653.861 682.409 654.8 679.212 654.8 674.67L654.674 673.913C654.674 670.927 654.296 668.88 653.539 667.773C652.782 666.665 651.73 666.112 650.384 666.112C649.151 666.112 648.198 666.539 647.525 667.394C646.866 668.235 646.536 669.707 646.536 671.81C646.536 673.605 646.859 674.943 647.504 675.827C648.148 676.71 649.116 677.151 650.405 677.151C651.625 677.151 652.642 676.717 653.455 675.848C654.282 674.964 654.695 673.78 654.695 672.294H656.167C656.167 675 655.431 677.215 653.959 678.939C652.501 680.663 650.56 681.525 648.134 681.525C645.485 681.525 643.382 680.656 641.826 678.918C640.284 677.179 639.513 674.782 639.513 671.726Z"/> +</mask> +<path d="M554.601 681.651V672.231C554.601 668.782 555.533 666.07 557.397 664.093C559.262 662.116 561.876 661.128 565.241 661.128C568.605 661.128 571.227 662.109 573.105 664.072C574.984 666.02 575.923 668.74 575.923 672.231V681.651C575.923 685.184 574.956 687.925 573.021 689.874C571.087 691.808 568.493 692.768 565.241 692.754C561.862 692.754 559.241 691.787 557.376 689.853C555.526 687.904 554.601 685.17 554.601 681.651ZM561.666 682.787C561.666 684.343 561.953 685.57 562.528 686.467C563.117 687.35 564.028 687.792 565.262 687.792C566.496 687.792 567.4 687.35 567.975 686.467C568.563 685.57 568.858 684.343 568.858 682.787V671.2C568.858 669.616 568.563 668.383 567.975 667.499C567.4 666.602 566.496 666.154 565.262 666.154C564.028 666.154 563.117 666.602 562.528 667.499C561.953 668.383 561.666 669.616 561.666 671.2V682.787ZM578.194 679.591V678.35C578.194 673.079 579.694 668.915 582.694 665.859C585.694 662.789 589.998 661.254 595.606 661.254H596.888V666.784H595.774C592.325 666.784 589.655 667.717 587.762 669.581C585.884 671.432 584.944 674.67 584.944 679.296L585.134 679.969C585.134 683.081 585.519 685.177 586.29 686.257C587.075 687.322 588.106 687.855 589.381 687.855C590.629 687.855 591.582 687.427 592.241 686.572C592.914 685.703 593.251 684.189 593.251 682.03C593.251 680.306 592.928 678.988 592.283 678.077C591.638 677.151 590.664 676.689 589.36 676.689C588.169 676.689 587.159 677.144 586.332 678.056C585.519 678.953 585.113 680.144 585.113 681.63H583.536C583.536 678.827 584.3 676.577 585.828 674.88C587.356 673.17 589.304 672.315 591.673 672.315C594.323 672.315 596.419 673.184 597.961 674.922C599.503 676.647 600.274 679.044 600.274 682.114C600.274 685.366 599.272 687.953 597.267 689.874C595.262 691.794 592.627 692.754 589.36 692.754C586.01 692.754 583.311 691.71 581.264 689.621C579.218 687.532 578.194 684.189 578.194 679.591ZM598.907 694.878L610.767 661.633H616.634L604.753 694.878H598.907ZM615.877 679.591V678.35C615.877 673.079 617.377 668.915 620.377 665.859C623.377 662.789 627.681 661.254 633.288 661.254H634.571V666.784H633.457C630.008 666.784 627.337 667.717 625.445 669.581C623.566 671.432 622.627 674.67 622.627 679.296L622.816 679.969C622.816 683.081 623.202 685.177 623.973 686.257C624.758 687.322 625.788 687.855 627.064 687.855C628.312 687.855 629.265 687.427 629.924 686.572C630.597 685.703 630.933 684.189 630.933 682.03C630.933 680.306 630.611 678.988 629.966 678.077C629.321 677.151 628.347 676.689 627.043 676.689C625.851 676.689 624.842 677.144 624.015 678.056C623.202 678.953 622.795 680.144 622.795 681.63H621.218C621.218 678.827 621.982 676.577 623.51 674.88C625.038 673.17 626.987 672.315 629.356 672.315C632.006 672.315 634.102 673.184 635.644 674.922C637.186 676.647 637.957 679.044 637.957 682.114C637.957 685.366 636.954 687.953 634.95 689.874C632.945 691.794 630.309 692.754 627.043 692.754C623.693 692.754 620.994 691.71 618.947 689.621C616.9 687.532 615.877 684.189 615.877 679.591ZM639.513 671.726C639.513 668.488 640.515 665.915 642.52 664.009C644.539 662.088 647.181 661.128 650.448 661.128C653.784 661.128 656.476 662.172 658.522 664.261C660.583 666.35 661.614 669.693 661.614 674.292V675.532C661.614 680.719 660.114 684.834 657.114 687.876C654.113 690.904 649.81 692.439 644.202 692.481H642.898V687.035H644.034C647.469 687.035 650.118 686.109 651.983 684.259C653.861 682.409 654.8 679.212 654.8 674.67L654.674 673.913C654.674 670.927 654.296 668.88 653.539 667.773C652.782 666.665 651.73 666.112 650.384 666.112C649.151 666.112 648.198 666.539 647.525 667.394C646.866 668.235 646.536 669.707 646.536 671.81C646.536 673.605 646.859 674.943 647.504 675.827C648.148 676.71 649.116 677.151 650.405 677.151C651.625 677.151 652.642 676.717 653.455 675.848C654.282 674.964 654.695 673.78 654.695 672.294H656.167C656.167 675 655.431 677.215 653.959 678.939C652.501 680.663 650.56 681.525 648.134 681.525C645.485 681.525 643.382 680.656 641.826 678.918C640.284 677.179 639.513 674.782 639.513 671.726Z" fill="white"/> +<path d="M573.105 664.072L572.383 664.763L572.386 664.766L573.105 664.072ZM573.021 689.874L573.728 690.581L573.731 690.578L573.021 689.874ZM565.241 692.754L565.245 691.754H565.241V692.754ZM557.376 689.853L556.651 690.541L556.656 690.546L557.376 689.853ZM562.528 686.467L561.686 687.006L561.691 687.014L561.696 687.022L562.528 686.467ZM567.975 686.467L567.139 685.918L567.136 685.922L567.975 686.467ZM567.975 667.499L567.133 668.039L567.137 668.047L567.143 668.054L567.975 667.499ZM562.528 667.499L561.692 666.951L561.69 666.954L562.528 667.499ZM554.601 681.651H555.601V672.231H554.601H553.601V681.651H554.601ZM554.601 672.231H555.601C555.601 668.966 556.479 666.524 558.125 664.779L557.397 664.093L556.67 663.407C554.587 665.615 553.601 668.599 553.601 672.231H554.601ZM557.397 664.093L558.125 664.779C559.757 663.049 562.082 662.128 565.241 662.128V661.128V660.128C561.671 660.128 558.767 661.184 556.67 663.407L557.397 664.093ZM565.241 661.128V662.128C568.402 662.128 570.736 663.043 572.383 664.763L573.105 664.072L573.828 663.38C571.718 661.176 568.809 660.128 565.241 660.128V661.128ZM573.105 664.072L572.386 664.766C574.037 666.479 574.923 668.921 574.923 672.231H575.923H576.923C576.923 668.559 575.931 665.562 573.825 663.378L573.105 664.072ZM575.923 672.231H574.923V681.651H575.923H576.923V672.231H575.923ZM575.923 681.651H574.923C574.923 684.999 574.011 687.457 572.312 689.169L573.021 689.874L573.731 690.578C575.901 688.393 576.923 685.369 576.923 681.651H575.923ZM573.021 689.874L572.314 689.166C570.603 690.877 568.285 691.768 565.245 691.754L565.241 692.754L565.237 693.754C568.702 693.769 571.57 692.739 573.728 690.581L573.021 689.874ZM565.241 692.754V691.754C562.06 691.754 559.726 690.85 558.096 689.159L557.376 689.853L556.656 690.546C558.755 692.724 561.665 693.754 565.241 693.754V692.754ZM557.376 689.853L558.101 689.164C556.477 687.453 555.601 684.996 555.601 681.651H554.601H553.601C553.601 685.345 554.575 688.355 556.651 690.541L557.376 689.853ZM561.666 682.787H560.666C560.666 684.451 560.971 685.89 561.686 687.006L562.528 686.467L563.37 685.928C562.936 685.249 562.666 684.235 562.666 682.787H561.666ZM562.528 686.467L561.696 687.022C562.503 688.232 563.757 688.792 565.262 688.792V687.792V686.792C564.3 686.792 563.731 686.469 563.36 685.912L562.528 686.467ZM565.262 687.792V688.792C566.767 688.792 568.02 688.231 568.813 687.012L567.975 686.467L567.136 685.922C566.78 686.469 566.224 686.792 565.262 686.792V687.792ZM567.975 686.467L568.811 687.016C569.544 685.898 569.858 684.455 569.858 682.787H568.858H567.858C567.858 684.231 567.582 685.242 567.139 685.918L567.975 686.467ZM568.858 682.787H569.858V671.2H568.858H567.858V682.787H568.858ZM568.858 671.2H569.858C569.858 669.51 569.547 668.055 568.807 666.945L567.975 667.499L567.143 668.054C567.58 668.711 567.858 669.722 567.858 671.2H568.858ZM567.975 667.499L568.817 666.96C568.026 665.727 566.773 665.154 565.262 665.154V666.154V667.154C566.218 667.154 566.773 667.478 567.133 668.039L567.975 667.499ZM565.262 666.154V665.154C563.75 665.154 562.496 665.726 561.692 666.951L562.528 667.499L563.364 668.048C563.738 667.478 564.306 667.154 565.262 667.154V666.154ZM562.528 667.499L561.69 666.954C560.969 668.062 560.666 669.514 560.666 671.2H561.666H562.666C562.666 669.719 562.938 668.703 563.366 668.045L562.528 667.499ZM561.666 671.2H560.666V682.787H561.666H562.666V671.2H561.666ZM582.694 665.859L583.408 666.56L583.41 666.558L582.694 665.859ZM596.888 661.254H597.888V660.254H596.888V661.254ZM596.888 666.784V667.784H597.888V666.784H596.888ZM587.762 669.581L588.464 670.294L588.464 670.294L587.762 669.581ZM584.944 679.296H583.944V679.434L583.982 679.567L584.944 679.296ZM585.134 679.969H586.134V679.831L586.096 679.698L585.134 679.969ZM586.29 686.257L585.476 686.838L585.481 686.844L585.485 686.85L586.29 686.257ZM592.241 686.572L591.45 685.96L591.449 685.962L592.241 686.572ZM592.283 678.077L591.463 678.648L591.467 678.654L592.283 678.077ZM586.332 678.056L585.592 677.384L585.591 677.384L586.332 678.056ZM585.113 681.63V682.63H586.113V681.63H585.113ZM583.536 681.63H582.536V682.63H583.536V681.63ZM585.828 674.88L586.571 675.55L586.573 675.547L585.828 674.88ZM597.961 674.922L597.213 675.586L597.216 675.589L597.961 674.922ZM578.194 679.591H579.194V678.35H578.194H577.194V679.591H578.194ZM578.194 678.35H579.194C579.194 673.277 580.632 669.388 583.408 666.56L582.694 665.859L581.981 665.159C578.757 668.443 577.194 672.881 577.194 678.35H578.194ZM582.694 665.859L583.41 666.558C586.169 663.734 590.181 662.254 595.606 662.254V661.254V660.254C589.815 660.254 585.22 661.844 581.979 665.16L582.694 665.859ZM595.606 661.254V662.254H596.888V661.254V660.254H595.606V661.254ZM596.888 661.254H595.888V666.784H596.888H597.888V661.254H596.888ZM596.888 666.784V665.784H595.774V666.784V667.784H596.888V666.784ZM595.774 666.784V665.784C592.144 665.784 589.191 666.77 587.06 668.869L587.762 669.581L588.464 670.294C590.118 668.664 592.507 667.784 595.774 667.784V666.784ZM587.762 669.581L587.06 668.869C584.89 671.007 583.944 674.589 583.944 679.296H584.944H585.944C585.944 674.751 586.878 671.856 588.464 670.294L587.762 669.581ZM584.944 679.296L583.982 679.567L584.171 680.24L585.134 679.969L586.096 679.698L585.907 679.026L584.944 679.296ZM585.134 679.969H584.134C584.134 681.561 584.232 682.928 584.439 684.056C584.644 685.171 584.969 686.128 585.476 686.838L586.29 686.257L587.104 685.675C586.84 685.306 586.587 684.676 586.406 683.694C586.228 682.726 586.134 681.49 586.134 679.969H585.134ZM586.29 686.257L585.485 686.85C586.45 688.16 587.774 688.855 589.381 688.855V687.855V686.855C588.437 686.855 587.7 686.484 587.095 685.663L586.29 686.257ZM589.381 687.855V688.855C590.885 688.855 592.154 688.324 593.033 687.182L592.241 686.572L591.449 685.962C591.011 686.531 590.374 686.855 589.381 686.855V687.855ZM592.241 686.572L593.032 687.184C593.92 686.037 594.251 684.23 594.251 682.03H593.251H592.251C592.251 684.148 591.908 685.369 591.45 685.96L592.241 686.572ZM593.251 682.03H594.251C594.251 680.204 593.913 678.648 593.1 677.499L592.283 678.077L591.467 678.654C591.943 679.327 592.251 680.407 592.251 682.03H593.251ZM592.283 678.077L593.104 677.505C592.241 676.266 590.932 675.689 589.36 675.689V676.689V677.689C590.396 677.689 591.036 678.036 591.463 678.648L592.283 678.077ZM589.36 676.689V675.689C587.876 675.689 586.601 676.271 585.592 677.384L586.332 678.056L587.073 678.728C587.717 678.018 588.461 677.689 589.36 677.689V676.689ZM586.332 678.056L585.591 677.384C584.576 678.505 584.113 679.955 584.113 681.63H585.113H586.113C586.113 680.334 586.463 679.401 587.073 678.727L586.332 678.056ZM585.113 681.63V680.63H583.536V681.63V682.63H585.113V681.63ZM583.536 681.63H584.536C584.536 679.015 585.244 677.023 586.571 675.55L585.828 674.88L585.085 674.211C583.355 676.131 582.536 678.638 582.536 681.63H583.536ZM585.828 674.88L586.573 675.547C587.905 674.057 589.578 673.315 591.673 673.315V672.315V671.315C589.03 671.315 586.807 672.284 585.082 674.214L585.828 674.88ZM591.673 672.315V673.315C594.081 673.315 595.888 674.093 597.213 675.586L597.961 674.922L598.709 674.259C596.95 672.275 594.565 671.315 591.673 671.315V672.315ZM597.961 674.922L597.216 675.589C598.546 677.077 599.274 679.208 599.274 682.114H600.274H601.274C601.274 678.88 600.46 676.217 598.706 674.256L597.961 674.922ZM600.274 682.114H599.274C599.274 685.145 598.349 687.452 596.575 689.151L597.267 689.874L597.959 690.596C600.194 688.454 601.274 685.588 601.274 682.114H600.274ZM597.267 689.874L596.575 689.151C594.789 690.863 592.418 691.754 589.36 691.754V692.754V693.754C592.836 693.754 595.736 692.726 597.959 690.596L597.267 689.874ZM589.36 692.754V691.754C586.236 691.754 583.809 690.79 581.979 688.921L581.264 689.621L580.55 690.321C582.813 692.63 585.784 693.754 589.36 693.754V692.754ZM581.264 689.621L581.979 688.921C580.196 687.102 579.194 684.072 579.194 679.591H578.194H577.194C577.194 684.306 578.239 687.963 580.55 690.321L581.264 689.621ZM598.907 694.878L597.965 694.542L597.489 695.878H598.907V694.878ZM610.767 661.633V660.633H610.062L609.825 661.297L610.767 661.633ZM616.634 661.633L617.576 661.969L618.053 660.633H616.634V661.633ZM604.753 694.878V695.878H605.458L605.695 695.215L604.753 694.878ZM598.907 694.878L599.849 695.214L611.709 661.969L610.767 661.633L609.825 661.297L597.965 694.542L598.907 694.878ZM610.767 661.633V662.633H616.634V661.633V660.633H610.767V661.633ZM616.634 661.633L615.692 661.296L603.811 694.542L604.753 694.878L605.695 695.215L617.576 661.969L616.634 661.633ZM604.753 694.878V693.878H598.907V694.878V695.878H604.753V694.878ZM620.377 665.859L621.091 666.56L621.092 666.558L620.377 665.859ZM634.571 661.254H635.571V660.254H634.571V661.254ZM634.571 666.784V667.784H635.571V666.784H634.571ZM625.445 669.581L626.147 670.294L626.147 670.294L625.445 669.581ZM622.627 679.296H621.627V679.434L621.664 679.567L622.627 679.296ZM622.816 679.969H623.816V679.831L623.779 679.698L622.816 679.969ZM623.973 686.257L623.159 686.838L623.163 686.844L623.168 686.85L623.973 686.257ZM629.924 686.572L629.133 685.96L629.132 685.962L629.924 686.572ZM629.966 678.077L629.146 678.648L629.15 678.654L629.966 678.077ZM624.015 678.056L623.275 677.384L623.274 677.384L624.015 678.056ZM622.795 681.63V682.63H623.795V681.63H622.795ZM621.218 681.63H620.218V682.63H621.218V681.63ZM623.51 674.88L624.253 675.55L624.256 675.547L623.51 674.88ZM635.644 674.922L634.896 675.586L634.898 675.589L635.644 674.922ZM615.877 679.591H616.877V678.35H615.877H614.877V679.591H615.877ZM615.877 678.35H616.877C616.877 673.277 618.315 669.388 621.091 666.56L620.377 665.859L619.663 665.159C616.439 668.443 614.877 672.881 614.877 678.35H615.877ZM620.377 665.859L621.092 666.558C623.851 663.734 627.864 662.254 633.288 662.254V661.254V660.254C627.498 660.254 622.903 661.844 619.662 665.16L620.377 665.859ZM633.288 661.254V662.254H634.571V661.254V660.254H633.288V661.254ZM634.571 661.254H633.571V666.784H634.571H635.571V661.254H634.571ZM634.571 666.784V665.784H633.457V666.784V667.784H634.571V666.784ZM633.457 666.784V665.784C629.827 665.784 626.874 666.77 624.743 668.869L625.445 669.581L626.147 670.294C627.801 668.664 630.189 667.784 633.457 667.784V666.784ZM625.445 669.581L624.743 668.869C622.573 671.007 621.627 674.589 621.627 679.296H622.627H623.627C623.627 674.751 624.56 671.856 626.147 670.294L625.445 669.581ZM622.627 679.296L621.664 679.567L621.854 680.24L622.816 679.969L623.779 679.698L623.59 679.026L622.627 679.296ZM622.816 679.969H621.816C621.816 681.561 621.915 682.928 622.122 684.056C622.327 685.171 622.652 686.128 623.159 686.838L623.973 686.257L624.787 685.675C624.523 685.306 624.27 684.676 624.089 683.694C623.911 682.726 623.816 681.49 623.816 679.969H622.816ZM623.973 686.257L623.168 686.85C624.133 688.16 625.457 688.855 627.064 688.855V687.855V686.855C626.12 686.855 625.383 686.484 624.778 685.663L623.973 686.257ZM627.064 687.855V688.855C628.567 688.855 629.837 688.324 630.716 687.182L629.924 686.572L629.132 685.962C628.693 686.531 628.056 686.855 627.064 686.855V687.855ZM629.924 686.572L630.715 687.184C631.603 686.037 631.933 684.23 631.933 682.03H630.933H629.933C629.933 684.148 629.591 685.369 629.133 685.96L629.924 686.572ZM630.933 682.03H631.933C631.933 680.204 631.596 678.648 630.782 677.499L629.966 678.077L629.15 678.654C629.626 679.327 629.933 680.407 629.933 682.03H630.933ZM629.966 678.077L630.786 677.505C629.923 676.266 628.615 675.689 627.043 675.689V676.689V677.689C628.079 677.689 628.719 678.036 629.146 678.648L629.966 678.077ZM627.043 676.689V675.689C625.559 675.689 624.284 676.271 623.275 677.384L624.015 678.056L624.755 678.728C625.4 678.018 626.144 677.689 627.043 677.689V676.689ZM624.015 678.056L623.274 677.384C622.258 678.505 621.795 679.955 621.795 681.63H622.795H623.795C623.795 680.334 624.145 679.401 624.756 678.727L624.015 678.056ZM622.795 681.63V680.63H621.218V681.63V682.63H622.795V681.63ZM621.218 681.63H622.218C622.218 679.015 622.926 677.023 624.253 675.55L623.51 674.88L622.767 674.211C621.038 676.131 620.218 678.638 620.218 681.63H621.218ZM623.51 674.88L624.256 675.547C625.587 674.057 627.261 673.315 629.356 673.315V672.315V671.315C626.713 671.315 624.489 672.284 622.765 674.214L623.51 674.88ZM629.356 672.315V673.315C631.764 673.315 633.571 674.093 634.896 675.586L635.644 674.922L636.392 674.259C634.632 672.275 632.247 671.315 629.356 671.315V672.315ZM635.644 674.922L634.898 675.589C636.229 677.077 636.957 679.208 636.957 682.114H637.957H638.957C638.957 678.88 638.142 676.217 636.389 674.256L635.644 674.922ZM637.957 682.114H636.957C636.957 685.145 636.032 687.452 634.258 689.151L634.95 689.874L635.641 690.596C637.877 688.454 638.957 685.588 638.957 682.114H637.957ZM634.95 689.874L634.258 689.151C632.472 690.863 630.1 691.754 627.043 691.754V692.754V693.754C630.519 693.754 633.418 692.726 635.641 690.596L634.95 689.874ZM627.043 692.754V691.754C623.919 691.754 621.492 690.79 619.661 688.921L618.947 689.621L618.233 690.321C620.496 692.63 623.466 693.754 627.043 693.754V692.754ZM618.947 689.621L619.661 688.921C617.879 687.102 616.877 684.072 616.877 679.591H615.877H614.877C614.877 684.306 615.922 687.963 618.233 690.321L618.947 689.621ZM642.52 664.009L643.209 664.733L643.209 664.733L642.52 664.009ZM658.522 664.261L657.808 664.961L657.811 664.963L658.522 664.261ZM657.114 687.876L657.824 688.58L657.826 688.578L657.114 687.876ZM644.202 692.481V693.481L644.21 693.481L644.202 692.481ZM642.898 692.481H641.898V693.481H642.898V692.481ZM642.898 687.035V686.035H641.898V687.035H642.898ZM651.983 684.259L651.281 683.547L651.278 683.549L651.983 684.259ZM654.8 674.67H655.8V674.587L655.787 674.506L654.8 674.67ZM654.674 673.913H653.674V673.996L653.688 674.077L654.674 673.913ZM647.525 667.394L646.739 666.776L646.737 666.778L647.525 667.394ZM653.455 675.848L652.725 675.164L652.724 675.165L653.455 675.848ZM654.695 672.294V671.294H653.695V672.294H654.695ZM656.167 672.294H657.167V671.294H656.167V672.294ZM653.959 678.939L653.199 678.29L653.196 678.293L653.959 678.939ZM641.826 678.918L641.078 679.581L641.081 679.585L641.826 678.918ZM639.513 671.726H640.513C640.513 668.711 641.437 666.419 643.209 664.733L642.52 664.009L641.831 663.284C639.594 665.412 638.513 668.265 638.513 671.726H639.513ZM642.52 664.009L643.209 664.733C645.01 663.02 647.39 662.128 650.448 662.128V661.128V660.128C646.972 660.128 644.067 661.157 641.831 663.284L642.52 664.009ZM650.448 661.128V662.128C653.557 662.128 655.977 663.092 657.808 664.961L658.522 664.261L659.237 663.561C656.975 661.253 654.011 660.128 650.448 660.128V661.128ZM658.522 664.261L657.811 664.963C659.605 666.783 660.614 669.812 660.614 674.292H661.614H662.614C662.614 669.575 661.561 665.917 659.234 663.559L658.522 664.261ZM661.614 674.292H660.614V675.532H661.614H662.614V674.292H661.614ZM661.614 675.532H660.614C660.614 680.516 659.179 684.357 656.402 687.174L657.114 687.876L657.826 688.578C661.048 685.31 662.614 680.922 662.614 675.532H661.614ZM657.114 687.876L656.403 687.172C653.642 689.959 649.624 691.44 644.195 691.481L644.202 692.481L644.21 693.481C649.995 693.438 654.585 691.849 657.824 688.58L657.114 687.876ZM644.202 692.481V691.481H642.898V692.481V693.481H644.202V692.481ZM642.898 692.481H643.898V687.035H642.898H641.898V692.481H642.898ZM642.898 687.035V688.035H644.034V687.035V686.035H642.898V687.035ZM644.034 687.035V688.035C647.648 688.035 650.583 687.057 652.687 684.969L651.983 684.259L651.278 683.549C649.653 685.162 647.289 686.035 644.034 686.035V687.035ZM651.983 684.259L652.684 684.971C654.852 682.836 655.8 679.299 655.8 674.67H654.8H653.8C653.8 679.125 652.87 681.981 651.281 683.547L651.983 684.259ZM654.8 674.67L655.787 674.506L655.661 673.749L654.674 673.913L653.688 674.077L653.814 674.834L654.8 674.67ZM654.674 673.913H655.674C655.674 672.383 655.578 671.06 655.374 669.957C655.172 668.864 654.853 667.923 654.364 667.209L653.539 667.773L652.713 668.337C652.982 668.73 653.231 669.366 653.407 670.32C653.582 671.264 653.674 672.457 653.674 673.913H654.674ZM653.539 667.773L654.364 667.209C653.42 665.827 652.059 665.112 650.384 665.112V666.112V667.112C651.401 667.112 652.143 667.503 652.713 668.337L653.539 667.773ZM650.384 666.112V665.112C648.891 665.112 647.628 665.645 646.739 666.776L647.525 667.394L648.31 668.013C648.767 667.433 649.411 667.112 650.384 667.112V666.112ZM647.525 667.394L646.737 666.778C645.859 667.899 645.536 669.667 645.536 671.81H646.536H647.536C647.536 669.748 647.872 668.572 648.312 668.011L647.525 667.394ZM646.536 671.81H645.536C645.536 673.693 645.869 675.283 646.696 676.416L647.504 675.827L648.311 675.237C647.849 674.604 647.536 673.517 647.536 671.81H646.536ZM647.504 675.827L646.696 676.416C647.564 677.606 648.862 678.151 650.405 678.151V677.151V676.151C649.37 676.151 648.732 675.814 648.311 675.237L647.504 675.827ZM650.405 677.151V678.151C651.894 678.151 653.177 677.608 654.185 676.531L653.455 675.848L652.724 675.165C652.106 675.826 651.356 676.151 650.405 676.151V677.151ZM653.455 675.848L654.184 676.531C655.223 675.423 655.695 673.973 655.695 672.294H654.695H653.695C653.695 673.587 653.341 674.506 652.725 675.164L653.455 675.848ZM654.695 672.294V673.294H656.167V672.294V671.294H654.695V672.294ZM656.167 672.294H655.167C655.167 674.81 654.487 676.78 653.199 678.29L653.959 678.939L654.72 679.588C656.375 677.649 657.167 675.189 657.167 672.294H656.167ZM653.959 678.939L653.196 678.293C651.943 679.775 650.29 680.525 648.134 680.525V681.525V682.525C650.829 682.525 653.059 681.552 654.723 679.585L653.959 678.939ZM648.134 681.525V680.525C645.727 680.525 643.911 679.747 642.571 678.251L641.826 678.918L641.081 679.585C642.853 681.565 645.243 682.525 648.134 682.525V681.525ZM641.826 678.918L642.574 678.254C641.24 676.75 640.513 674.616 640.513 671.726H639.513H638.513C638.513 674.948 639.328 677.609 641.078 679.581L641.826 678.918Z" fill="black" mask="url(#path-9-outside-4_17007_2267)"/> +<mask id="path-11-outside-5_17007_2267" maskUnits="userSpaceOnUse" x="69" y="487" width="836" height="67" fill="black"> +<rect fill="white" x="69" y="487" width="836" height="67"/> +<path d="M72.6781 526.108V523.111C72.6781 513.149 75.4881 505.318 81.1083 499.618C86.7285 493.892 94.5994 491.028 104.721 491.028H108.077V502.175H105.2C99.1541 502.175 94.5195 503.933 91.2965 507.449C88.0736 510.939 86.4621 517.198 86.4621 526.228L86.5021 527.106C86.5021 532.807 87.168 536.602 88.4998 538.493C89.8582 540.384 91.6161 541.33 93.7737 541.33C95.798 541.33 97.4228 540.598 98.648 539.133C99.8733 537.641 100.486 534.671 100.486 530.223C100.486 527 99.9132 524.603 98.7679 523.031C97.6492 521.433 95.9977 520.634 93.8136 520.634C91.7893 520.634 90.0713 521.406 88.6596 522.951C87.2479 524.47 86.542 526.547 86.542 529.184H84.1448C84.1448 523.99 85.6231 519.955 88.5797 517.078C91.5362 514.175 95.0522 512.723 99.1275 512.723C103.789 512.723 107.504 514.268 110.275 517.358C113.045 520.421 114.43 524.842 114.43 530.622C114.43 536.935 112.459 541.889 108.517 545.485C104.574 549.054 99.6202 550.839 93.6538 550.839C87.1546 550.839 82.0272 548.855 78.2716 544.886C74.5426 540.891 72.6781 534.631 72.6781 526.108ZM120.5 511.205C120.5 504.919 122.471 499.991 126.413 496.422C130.355 492.826 135.322 491.028 141.315 491.028C147.788 491.028 152.889 493.013 156.618 496.981C160.373 500.95 162.251 507.21 162.251 515.76V518.716C162.251 528.651 159.441 536.469 153.821 542.169C148.227 547.869 140.357 550.732 130.208 550.759H126.852V539.812H129.729C135.775 539.838 140.41 538.107 143.633 534.618C146.856 531.129 148.467 524.882 148.467 515.879L148.427 514.761C148.427 509.194 147.761 505.465 146.43 503.574C145.098 501.656 143.34 500.697 141.156 500.697C139.131 500.697 137.507 501.443 136.281 502.934C135.056 504.399 134.443 507.289 134.443 511.604C134.443 514.987 135.003 517.464 136.121 519.036C137.267 520.581 138.932 521.353 141.116 521.353C143.14 521.353 144.858 520.607 146.27 519.116C147.708 517.597 148.427 515.52 148.427 512.883H150.745C150.745 518.05 149.28 522.072 146.35 524.949C143.42 527.799 139.904 529.224 135.802 529.224C131.141 529.224 127.425 527.666 124.655 524.549C121.885 521.433 120.5 516.985 120.5 511.205ZM168.721 526.108V523.111C168.721 513.149 171.531 505.318 177.151 499.618C182.771 493.892 190.642 491.028 200.763 491.028H204.12V502.175H201.243C195.197 502.175 190.562 503.933 187.339 507.449C184.116 510.939 182.505 517.198 182.505 526.228L182.545 527.106C182.545 532.807 183.21 536.602 184.542 538.493C185.901 540.384 187.659 541.33 189.816 541.33C191.84 541.33 193.465 540.598 194.69 539.133C195.916 537.641 196.528 534.671 196.528 530.223C196.528 527 195.956 524.603 194.81 523.031C193.692 521.433 192.04 520.634 189.856 520.634C187.832 520.634 186.114 521.406 184.702 522.951C183.29 524.47 182.584 526.547 182.584 529.184H180.187C180.187 523.99 181.666 519.955 184.622 517.078C187.579 514.175 191.095 512.723 195.17 512.723C199.831 512.723 203.547 514.268 206.317 517.358C209.087 520.421 210.472 524.842 210.472 530.622C210.472 536.935 208.501 541.889 204.559 545.485C200.617 549.054 195.663 550.839 189.696 550.839C183.197 550.839 178.07 548.855 174.314 544.886C170.585 540.891 168.721 534.631 168.721 526.108ZM216.542 511.205C216.542 504.919 218.513 499.991 222.455 496.422C226.397 492.826 231.365 491.028 237.358 491.028C243.83 491.028 248.931 493.013 252.66 496.981C256.416 500.95 258.294 507.21 258.294 515.76V518.716C258.294 528.651 255.484 536.469 249.863 542.169C244.27 547.869 236.399 550.732 226.251 550.759H222.895V539.812H225.771C231.818 539.838 236.452 538.107 239.675 534.618C242.898 531.129 244.51 524.882 244.51 515.879L244.47 514.761C244.47 509.194 243.804 505.465 242.472 503.574C241.14 501.656 239.382 500.697 237.198 500.697C235.174 500.697 233.549 501.443 232.324 502.934C231.099 504.399 230.486 507.289 230.486 511.604C230.486 514.987 231.045 517.464 232.164 519.036C233.309 520.581 234.974 521.353 237.158 521.353C239.182 521.353 240.9 520.607 242.312 519.116C243.751 517.597 244.47 515.52 244.47 512.883H246.787C246.787 518.05 245.322 522.072 242.392 524.949C239.462 527.799 235.946 529.224 231.844 529.224C227.183 529.224 223.467 527.666 220.697 524.549C217.927 521.433 216.542 516.985 216.542 511.205ZM287.733 529.863V511.964C287.733 505.278 289.531 500.111 293.127 496.462C296.723 492.813 301.664 490.988 307.95 490.988C314.236 490.988 319.177 492.786 322.773 496.382C326.395 499.951 328.206 505.145 328.206 511.964V529.863C328.206 536.789 326.315 542.023 322.533 545.565C318.777 549.108 313.916 550.866 307.95 550.839C301.611 550.812 296.656 549.041 293.087 545.525C289.518 541.983 287.733 536.762 287.733 529.863ZM301.637 532.7C301.637 535.47 302.157 537.601 303.195 539.093C304.261 540.584 305.846 541.33 307.95 541.33C310.054 541.33 311.639 540.584 312.704 539.093C313.77 537.601 314.303 535.47 314.303 532.7V509.407C314.303 506.584 313.77 504.426 312.704 502.934C311.639 501.443 310.054 500.697 307.95 500.697C305.846 500.697 304.261 501.443 303.195 502.934C302.157 504.426 301.637 506.584 301.637 509.407V532.7ZM357.969 550V535.297L358.408 534.618V509.487H358.089L347.021 528.105H363.402L364.601 527.746H377.426V538.533H334.156V528.625L359.487 491.827H370.754V550H357.969ZM383.136 550V541.33L404.152 519.515C405.75 517.651 407.122 515.746 408.267 513.802C409.413 511.857 409.985 509.846 409.985 507.769C409.985 505.238 409.413 503.427 408.267 502.335C407.122 501.243 405.617 500.697 403.753 500.697C401.808 500.697 400.237 501.336 399.038 502.615C397.839 503.867 397.24 506.331 397.24 510.006V511.644H383.136V508.208C383.136 503.227 385.054 499.112 388.89 495.863C392.725 492.613 397.76 490.988 403.992 490.988C410.518 490.988 415.472 492.44 418.855 495.343C422.238 498.22 423.943 502.135 423.969 507.09C423.969 510.765 423.183 514.055 421.612 516.958C420.067 519.862 417.856 522.818 414.98 525.828L403.952 538.853H425.328V550H383.136ZM431.797 529.863V511.964C431.797 505.278 433.595 500.111 437.191 496.462C440.787 492.813 445.728 490.988 452.014 490.988C458.3 490.988 463.241 492.786 466.836 496.382C470.459 499.951 472.27 505.145 472.27 511.964V529.863C472.27 536.789 470.379 542.023 466.597 545.565C462.841 549.108 457.98 550.866 452.014 550.839C445.674 550.812 440.72 549.041 437.151 545.525C433.582 541.983 431.797 536.762 431.797 529.863ZM445.701 532.7C445.701 535.47 446.22 537.601 447.259 539.093C448.325 540.584 449.909 541.33 452.014 541.33C454.118 541.33 455.703 540.584 456.768 539.093C457.834 537.601 458.366 535.47 458.366 532.7V509.407C458.366 506.584 457.834 504.426 456.768 502.934C455.703 501.443 454.118 500.697 452.014 500.697C449.909 500.697 448.325 501.443 447.259 502.934C446.22 504.426 445.701 506.584 445.701 509.407V532.7ZM501.39 534.178C501.39 530.369 502.402 527.2 504.427 524.669C506.477 522.139 508.675 520.527 511.019 519.835V519.675C508.648 518.61 506.717 516.998 505.226 514.841C503.761 512.657 503.028 509.913 503.028 506.61C503.028 501.842 504.733 498.047 508.142 495.223C511.578 492.4 516.359 490.988 522.486 490.988C528.612 490.988 533.366 492.44 536.749 495.343C540.159 498.22 541.863 501.976 541.863 506.61C541.863 510.02 541.091 512.83 539.546 515.04C538.028 517.225 536.097 518.756 533.753 519.635V519.795C536.176 520.461 538.401 522.072 540.425 524.629C542.476 527.16 543.501 530.343 543.501 534.178C543.501 539.319 541.557 543.381 537.668 546.364C533.806 549.347 528.745 550.839 522.486 550.839C516.2 550.839 511.112 549.347 507.223 546.364C503.334 543.381 501.39 539.319 501.39 534.178ZM515.414 532.66C515.414 535.776 516.026 538.041 517.252 539.452C518.504 540.837 520.235 541.53 522.446 541.53C524.63 541.53 526.335 540.824 527.56 539.412C528.785 538.001 529.398 535.75 529.398 532.66C529.398 529.437 528.745 527.173 527.44 525.868C526.161 524.536 524.497 523.87 522.446 523.87C520.395 523.87 518.703 524.536 517.372 525.868C516.066 527.173 515.414 529.437 515.414 532.66ZM516.333 508.448C516.333 511.138 516.905 513.189 518.051 514.601C519.196 515.986 520.661 516.679 522.446 516.679C524.204 516.679 525.655 515.986 526.801 514.601C527.973 513.189 528.559 511.138 528.559 508.448C528.559 505.731 528.039 503.734 527 502.455C525.988 501.15 524.47 500.497 522.446 500.497C520.421 500.497 518.89 501.123 517.851 502.375C516.839 503.627 516.333 505.651 516.333 508.448ZM549.411 534.178C549.411 530.369 550.423 527.2 552.448 524.669C554.499 522.139 556.696 520.527 559.04 519.835V519.675C556.67 518.61 554.738 516.998 553.247 514.841C551.782 512.657 551.049 509.913 551.049 506.61C551.049 501.842 552.754 498.047 556.163 495.223C559.599 492.4 564.381 490.988 570.507 490.988C576.633 490.988 581.388 492.44 584.77 495.343C588.18 498.22 589.884 501.976 589.884 506.61C589.884 510.02 589.112 512.83 587.567 515.04C586.049 517.225 584.118 518.756 581.774 519.635V519.795C584.198 520.461 586.422 522.072 588.446 524.629C590.497 527.16 591.523 530.343 591.523 534.178C591.523 539.319 589.578 543.381 585.689 546.364C581.827 549.347 576.766 550.839 570.507 550.839C564.221 550.839 559.133 549.347 555.245 546.364C551.356 543.381 549.411 539.319 549.411 534.178ZM563.435 532.66C563.435 535.776 564.048 538.041 565.273 539.452C566.525 540.837 568.256 541.53 570.467 541.53C572.651 541.53 574.356 540.824 575.581 539.412C576.806 538.001 577.419 535.75 577.419 532.66C577.419 529.437 576.766 527.173 575.461 525.868C574.183 524.536 572.518 523.87 570.467 523.87C568.416 523.87 566.725 524.536 565.393 525.868C564.088 527.173 563.435 529.437 563.435 532.66ZM564.354 508.448C564.354 511.138 564.927 513.189 566.072 514.601C567.217 515.986 568.682 516.679 570.467 516.679C572.225 516.679 573.677 515.986 574.822 514.601C575.994 513.189 576.58 511.138 576.58 508.448C576.58 505.731 576.06 503.734 575.022 502.455C574.009 501.15 572.491 500.497 570.467 500.497C568.443 500.497 566.911 501.123 565.872 502.375C564.86 503.627 564.354 505.651 564.354 508.448ZM597.433 534.178C597.433 530.369 598.445 527.2 600.469 524.669C602.52 522.139 604.717 520.527 607.061 519.835V519.675C604.691 518.61 602.76 516.998 601.268 514.841C599.803 512.657 599.071 509.913 599.071 506.61C599.071 501.842 600.775 498.047 604.185 495.223C607.621 492.4 612.402 490.988 618.528 490.988C624.654 490.988 629.409 492.44 632.792 495.343C636.201 498.22 637.906 501.976 637.906 506.61C637.906 510.02 637.133 512.83 635.588 515.04C634.07 517.225 632.139 518.756 629.795 519.635V519.795C632.219 520.461 634.443 522.072 636.467 524.629C638.518 527.16 639.544 530.343 639.544 534.178C639.544 539.319 637.599 543.381 633.711 546.364C629.848 549.347 624.788 550.839 618.528 550.839C612.242 550.839 607.155 549.347 603.266 546.364C599.377 543.381 597.433 539.319 597.433 534.178ZM611.456 532.66C611.456 535.776 612.069 538.041 613.294 539.452C614.546 540.837 616.277 541.53 618.488 541.53C620.672 541.53 622.377 540.824 623.602 539.412C624.827 538.001 625.44 535.75 625.44 532.66C625.44 529.437 624.788 527.173 623.482 525.868C622.204 524.536 620.539 523.87 618.488 523.87C616.437 523.87 614.746 524.536 613.414 525.868C612.109 527.173 611.456 529.437 611.456 532.66ZM612.375 508.448C612.375 511.138 612.948 513.189 614.093 514.601C615.239 515.986 616.704 516.679 618.488 516.679C620.246 516.679 621.698 515.986 622.843 514.601C624.015 513.189 624.601 511.138 624.601 508.448C624.601 505.731 624.082 503.734 623.043 502.455C622.031 501.15 620.512 500.497 618.488 500.497C616.464 500.497 614.932 501.123 613.893 502.375C612.881 503.627 612.375 505.651 612.375 508.448ZM646.413 529.863V511.964C646.413 505.278 648.211 500.111 651.806 496.462C655.402 492.813 660.343 490.988 666.629 490.988C672.915 490.988 677.856 492.786 681.452 496.382C685.075 499.951 686.886 505.145 686.886 511.964V529.863C686.886 536.789 684.995 542.023 681.212 545.565C677.457 549.108 672.596 550.866 666.629 550.839C660.29 550.812 655.336 549.041 651.766 545.525C648.197 541.983 646.413 536.762 646.413 529.863ZM660.317 532.7C660.317 535.47 660.836 537.601 661.875 539.093C662.94 540.584 664.525 541.33 666.629 541.33C668.733 541.33 670.318 540.584 671.384 539.093C672.449 537.601 672.982 535.47 672.982 532.7V509.407C672.982 506.584 672.449 504.426 671.384 502.934C670.318 501.443 668.733 500.697 666.629 500.697C664.525 500.697 662.94 501.443 661.875 502.934C660.836 504.426 660.317 506.584 660.317 509.407V532.7ZM716.965 529.863V511.964C716.965 505.278 718.763 500.111 722.358 496.462C725.954 492.813 730.895 490.988 737.181 490.988C743.467 490.988 748.408 492.786 752.004 496.382C755.627 499.951 757.438 505.145 757.438 511.964V529.863C757.438 536.789 755.547 542.023 751.764 545.565C748.009 549.108 743.148 550.866 737.181 550.839C730.842 550.812 725.888 549.041 722.318 545.525C718.749 541.983 716.965 536.762 716.965 529.863ZM730.869 532.7C730.869 535.47 731.388 537.601 732.427 539.093C733.492 540.584 735.077 541.33 737.181 541.33C739.285 541.33 740.87 540.584 741.936 539.093C743.001 537.601 743.534 535.47 743.534 532.7V509.407C743.534 506.584 743.001 504.426 741.936 502.934C740.87 501.443 739.285 500.697 737.181 500.697C735.077 500.697 733.492 501.443 732.427 502.934C731.388 504.426 730.869 506.584 730.869 509.407V532.7ZM787.2 550V535.297L787.64 534.618V509.487H787.32L776.253 528.105H792.634L793.832 527.746H806.658V538.533H763.388V528.625L788.718 491.827H799.985V550H787.2ZM812.368 550V541.33L833.383 519.515C834.982 517.651 836.353 515.746 837.499 513.802C838.644 511.857 839.217 509.846 839.217 507.769C839.217 505.238 838.644 503.427 837.499 502.335C836.353 501.243 834.848 500.697 832.984 500.697C831.04 500.697 829.468 501.336 828.269 502.615C827.071 503.867 826.471 506.331 826.471 510.006V511.644H812.368V508.208C812.368 503.227 814.286 499.112 818.121 495.863C821.957 492.613 826.991 490.988 833.224 490.988C839.749 490.988 844.704 492.44 848.086 495.343C851.469 498.22 853.174 502.135 853.201 507.09C853.201 510.765 852.415 514.055 850.843 516.958C849.298 519.862 847.088 522.818 844.211 525.828L833.184 538.853H854.559V550H812.368ZM861.028 529.863V511.964C861.028 505.278 862.826 500.111 866.422 496.462C870.018 492.813 874.959 490.988 881.245 490.988C887.531 490.988 892.472 492.786 896.068 496.382C899.69 499.951 901.501 505.145 901.501 511.964V529.863C901.501 536.789 899.61 542.023 895.828 545.565C892.072 549.108 887.211 550.866 881.245 550.839C874.906 550.812 869.951 549.041 866.382 545.525C862.813 541.983 861.028 536.762 861.028 529.863ZM874.932 532.7C874.932 535.47 875.452 537.601 876.49 539.093C877.556 540.584 879.141 541.33 881.245 541.33C883.349 541.33 884.934 540.584 885.999 539.093C887.065 537.601 887.598 535.47 887.598 532.7V509.407C887.598 506.584 887.065 504.426 885.999 502.934C884.934 501.443 883.349 500.697 881.245 500.697C879.141 500.697 877.556 501.443 876.49 502.934C875.452 504.426 874.932 506.584 874.932 509.407V532.7Z"/> +</mask> +<path d="M72.6781 526.108V523.111C72.6781 513.149 75.4881 505.318 81.1083 499.618C86.7285 493.892 94.5994 491.028 104.721 491.028H108.077V502.175H105.2C99.1541 502.175 94.5195 503.933 91.2965 507.449C88.0736 510.939 86.4621 517.198 86.4621 526.228L86.5021 527.106C86.5021 532.807 87.168 536.602 88.4998 538.493C89.8582 540.384 91.6161 541.33 93.7737 541.33C95.798 541.33 97.4228 540.598 98.648 539.133C99.8733 537.641 100.486 534.671 100.486 530.223C100.486 527 99.9132 524.603 98.7679 523.031C97.6492 521.433 95.9977 520.634 93.8136 520.634C91.7893 520.634 90.0713 521.406 88.6596 522.951C87.2479 524.47 86.542 526.547 86.542 529.184H84.1448C84.1448 523.99 85.6231 519.955 88.5797 517.078C91.5362 514.175 95.0522 512.723 99.1275 512.723C103.789 512.723 107.504 514.268 110.275 517.358C113.045 520.421 114.43 524.842 114.43 530.622C114.43 536.935 112.459 541.889 108.517 545.485C104.574 549.054 99.6202 550.839 93.6538 550.839C87.1546 550.839 82.0272 548.855 78.2716 544.886C74.5426 540.891 72.6781 534.631 72.6781 526.108ZM120.5 511.205C120.5 504.919 122.471 499.991 126.413 496.422C130.355 492.826 135.322 491.028 141.315 491.028C147.788 491.028 152.889 493.013 156.618 496.981C160.373 500.95 162.251 507.21 162.251 515.76V518.716C162.251 528.651 159.441 536.469 153.821 542.169C148.227 547.869 140.357 550.732 130.208 550.759H126.852V539.812H129.729C135.775 539.838 140.41 538.107 143.633 534.618C146.856 531.129 148.467 524.882 148.467 515.879L148.427 514.761C148.427 509.194 147.761 505.465 146.43 503.574C145.098 501.656 143.34 500.697 141.156 500.697C139.131 500.697 137.507 501.443 136.281 502.934C135.056 504.399 134.443 507.289 134.443 511.604C134.443 514.987 135.003 517.464 136.121 519.036C137.267 520.581 138.932 521.353 141.116 521.353C143.14 521.353 144.858 520.607 146.27 519.116C147.708 517.597 148.427 515.52 148.427 512.883H150.745C150.745 518.05 149.28 522.072 146.35 524.949C143.42 527.799 139.904 529.224 135.802 529.224C131.141 529.224 127.425 527.666 124.655 524.549C121.885 521.433 120.5 516.985 120.5 511.205ZM168.721 526.108V523.111C168.721 513.149 171.531 505.318 177.151 499.618C182.771 493.892 190.642 491.028 200.763 491.028H204.12V502.175H201.243C195.197 502.175 190.562 503.933 187.339 507.449C184.116 510.939 182.505 517.198 182.505 526.228L182.545 527.106C182.545 532.807 183.21 536.602 184.542 538.493C185.901 540.384 187.659 541.33 189.816 541.33C191.84 541.33 193.465 540.598 194.69 539.133C195.916 537.641 196.528 534.671 196.528 530.223C196.528 527 195.956 524.603 194.81 523.031C193.692 521.433 192.04 520.634 189.856 520.634C187.832 520.634 186.114 521.406 184.702 522.951C183.29 524.47 182.584 526.547 182.584 529.184H180.187C180.187 523.99 181.666 519.955 184.622 517.078C187.579 514.175 191.095 512.723 195.17 512.723C199.831 512.723 203.547 514.268 206.317 517.358C209.087 520.421 210.472 524.842 210.472 530.622C210.472 536.935 208.501 541.889 204.559 545.485C200.617 549.054 195.663 550.839 189.696 550.839C183.197 550.839 178.07 548.855 174.314 544.886C170.585 540.891 168.721 534.631 168.721 526.108ZM216.542 511.205C216.542 504.919 218.513 499.991 222.455 496.422C226.397 492.826 231.365 491.028 237.358 491.028C243.83 491.028 248.931 493.013 252.66 496.981C256.416 500.95 258.294 507.21 258.294 515.76V518.716C258.294 528.651 255.484 536.469 249.863 542.169C244.27 547.869 236.399 550.732 226.251 550.759H222.895V539.812H225.771C231.818 539.838 236.452 538.107 239.675 534.618C242.898 531.129 244.51 524.882 244.51 515.879L244.47 514.761C244.47 509.194 243.804 505.465 242.472 503.574C241.14 501.656 239.382 500.697 237.198 500.697C235.174 500.697 233.549 501.443 232.324 502.934C231.099 504.399 230.486 507.289 230.486 511.604C230.486 514.987 231.045 517.464 232.164 519.036C233.309 520.581 234.974 521.353 237.158 521.353C239.182 521.353 240.9 520.607 242.312 519.116C243.751 517.597 244.47 515.52 244.47 512.883H246.787C246.787 518.05 245.322 522.072 242.392 524.949C239.462 527.799 235.946 529.224 231.844 529.224C227.183 529.224 223.467 527.666 220.697 524.549C217.927 521.433 216.542 516.985 216.542 511.205ZM287.733 529.863V511.964C287.733 505.278 289.531 500.111 293.127 496.462C296.723 492.813 301.664 490.988 307.95 490.988C314.236 490.988 319.177 492.786 322.773 496.382C326.395 499.951 328.206 505.145 328.206 511.964V529.863C328.206 536.789 326.315 542.023 322.533 545.565C318.777 549.108 313.916 550.866 307.95 550.839C301.611 550.812 296.656 549.041 293.087 545.525C289.518 541.983 287.733 536.762 287.733 529.863ZM301.637 532.7C301.637 535.47 302.157 537.601 303.195 539.093C304.261 540.584 305.846 541.33 307.95 541.33C310.054 541.33 311.639 540.584 312.704 539.093C313.77 537.601 314.303 535.47 314.303 532.7V509.407C314.303 506.584 313.77 504.426 312.704 502.934C311.639 501.443 310.054 500.697 307.95 500.697C305.846 500.697 304.261 501.443 303.195 502.934C302.157 504.426 301.637 506.584 301.637 509.407V532.7ZM357.969 550V535.297L358.408 534.618V509.487H358.089L347.021 528.105H363.402L364.601 527.746H377.426V538.533H334.156V528.625L359.487 491.827H370.754V550H357.969ZM383.136 550V541.33L404.152 519.515C405.75 517.651 407.122 515.746 408.267 513.802C409.413 511.857 409.985 509.846 409.985 507.769C409.985 505.238 409.413 503.427 408.267 502.335C407.122 501.243 405.617 500.697 403.753 500.697C401.808 500.697 400.237 501.336 399.038 502.615C397.839 503.867 397.24 506.331 397.24 510.006V511.644H383.136V508.208C383.136 503.227 385.054 499.112 388.89 495.863C392.725 492.613 397.76 490.988 403.992 490.988C410.518 490.988 415.472 492.44 418.855 495.343C422.238 498.22 423.943 502.135 423.969 507.09C423.969 510.765 423.183 514.055 421.612 516.958C420.067 519.862 417.856 522.818 414.98 525.828L403.952 538.853H425.328V550H383.136ZM431.797 529.863V511.964C431.797 505.278 433.595 500.111 437.191 496.462C440.787 492.813 445.728 490.988 452.014 490.988C458.3 490.988 463.241 492.786 466.836 496.382C470.459 499.951 472.27 505.145 472.27 511.964V529.863C472.27 536.789 470.379 542.023 466.597 545.565C462.841 549.108 457.98 550.866 452.014 550.839C445.674 550.812 440.72 549.041 437.151 545.525C433.582 541.983 431.797 536.762 431.797 529.863ZM445.701 532.7C445.701 535.47 446.22 537.601 447.259 539.093C448.325 540.584 449.909 541.33 452.014 541.33C454.118 541.33 455.703 540.584 456.768 539.093C457.834 537.601 458.366 535.47 458.366 532.7V509.407C458.366 506.584 457.834 504.426 456.768 502.934C455.703 501.443 454.118 500.697 452.014 500.697C449.909 500.697 448.325 501.443 447.259 502.934C446.22 504.426 445.701 506.584 445.701 509.407V532.7ZM501.39 534.178C501.39 530.369 502.402 527.2 504.427 524.669C506.477 522.139 508.675 520.527 511.019 519.835V519.675C508.648 518.61 506.717 516.998 505.226 514.841C503.761 512.657 503.028 509.913 503.028 506.61C503.028 501.842 504.733 498.047 508.142 495.223C511.578 492.4 516.359 490.988 522.486 490.988C528.612 490.988 533.366 492.44 536.749 495.343C540.159 498.22 541.863 501.976 541.863 506.61C541.863 510.02 541.091 512.83 539.546 515.04C538.028 517.225 536.097 518.756 533.753 519.635V519.795C536.176 520.461 538.401 522.072 540.425 524.629C542.476 527.16 543.501 530.343 543.501 534.178C543.501 539.319 541.557 543.381 537.668 546.364C533.806 549.347 528.745 550.839 522.486 550.839C516.2 550.839 511.112 549.347 507.223 546.364C503.334 543.381 501.39 539.319 501.39 534.178ZM515.414 532.66C515.414 535.776 516.026 538.041 517.252 539.452C518.504 540.837 520.235 541.53 522.446 541.53C524.63 541.53 526.335 540.824 527.56 539.412C528.785 538.001 529.398 535.75 529.398 532.66C529.398 529.437 528.745 527.173 527.44 525.868C526.161 524.536 524.497 523.87 522.446 523.87C520.395 523.87 518.703 524.536 517.372 525.868C516.066 527.173 515.414 529.437 515.414 532.66ZM516.333 508.448C516.333 511.138 516.905 513.189 518.051 514.601C519.196 515.986 520.661 516.679 522.446 516.679C524.204 516.679 525.655 515.986 526.801 514.601C527.973 513.189 528.559 511.138 528.559 508.448C528.559 505.731 528.039 503.734 527 502.455C525.988 501.15 524.47 500.497 522.446 500.497C520.421 500.497 518.89 501.123 517.851 502.375C516.839 503.627 516.333 505.651 516.333 508.448ZM549.411 534.178C549.411 530.369 550.423 527.2 552.448 524.669C554.499 522.139 556.696 520.527 559.04 519.835V519.675C556.67 518.61 554.738 516.998 553.247 514.841C551.782 512.657 551.049 509.913 551.049 506.61C551.049 501.842 552.754 498.047 556.163 495.223C559.599 492.4 564.381 490.988 570.507 490.988C576.633 490.988 581.388 492.44 584.77 495.343C588.18 498.22 589.884 501.976 589.884 506.61C589.884 510.02 589.112 512.83 587.567 515.04C586.049 517.225 584.118 518.756 581.774 519.635V519.795C584.198 520.461 586.422 522.072 588.446 524.629C590.497 527.16 591.523 530.343 591.523 534.178C591.523 539.319 589.578 543.381 585.689 546.364C581.827 549.347 576.766 550.839 570.507 550.839C564.221 550.839 559.133 549.347 555.245 546.364C551.356 543.381 549.411 539.319 549.411 534.178ZM563.435 532.66C563.435 535.776 564.048 538.041 565.273 539.452C566.525 540.837 568.256 541.53 570.467 541.53C572.651 541.53 574.356 540.824 575.581 539.412C576.806 538.001 577.419 535.75 577.419 532.66C577.419 529.437 576.766 527.173 575.461 525.868C574.183 524.536 572.518 523.87 570.467 523.87C568.416 523.87 566.725 524.536 565.393 525.868C564.088 527.173 563.435 529.437 563.435 532.66ZM564.354 508.448C564.354 511.138 564.927 513.189 566.072 514.601C567.217 515.986 568.682 516.679 570.467 516.679C572.225 516.679 573.677 515.986 574.822 514.601C575.994 513.189 576.58 511.138 576.58 508.448C576.58 505.731 576.06 503.734 575.022 502.455C574.009 501.15 572.491 500.497 570.467 500.497C568.443 500.497 566.911 501.123 565.872 502.375C564.86 503.627 564.354 505.651 564.354 508.448ZM597.433 534.178C597.433 530.369 598.445 527.2 600.469 524.669C602.52 522.139 604.717 520.527 607.061 519.835V519.675C604.691 518.61 602.76 516.998 601.268 514.841C599.803 512.657 599.071 509.913 599.071 506.61C599.071 501.842 600.775 498.047 604.185 495.223C607.621 492.4 612.402 490.988 618.528 490.988C624.654 490.988 629.409 492.44 632.792 495.343C636.201 498.22 637.906 501.976 637.906 506.61C637.906 510.02 637.133 512.83 635.588 515.04C634.07 517.225 632.139 518.756 629.795 519.635V519.795C632.219 520.461 634.443 522.072 636.467 524.629C638.518 527.16 639.544 530.343 639.544 534.178C639.544 539.319 637.599 543.381 633.711 546.364C629.848 549.347 624.788 550.839 618.528 550.839C612.242 550.839 607.155 549.347 603.266 546.364C599.377 543.381 597.433 539.319 597.433 534.178ZM611.456 532.66C611.456 535.776 612.069 538.041 613.294 539.452C614.546 540.837 616.277 541.53 618.488 541.53C620.672 541.53 622.377 540.824 623.602 539.412C624.827 538.001 625.44 535.75 625.44 532.66C625.44 529.437 624.788 527.173 623.482 525.868C622.204 524.536 620.539 523.87 618.488 523.87C616.437 523.87 614.746 524.536 613.414 525.868C612.109 527.173 611.456 529.437 611.456 532.66ZM612.375 508.448C612.375 511.138 612.948 513.189 614.093 514.601C615.239 515.986 616.704 516.679 618.488 516.679C620.246 516.679 621.698 515.986 622.843 514.601C624.015 513.189 624.601 511.138 624.601 508.448C624.601 505.731 624.082 503.734 623.043 502.455C622.031 501.15 620.512 500.497 618.488 500.497C616.464 500.497 614.932 501.123 613.893 502.375C612.881 503.627 612.375 505.651 612.375 508.448ZM646.413 529.863V511.964C646.413 505.278 648.211 500.111 651.806 496.462C655.402 492.813 660.343 490.988 666.629 490.988C672.915 490.988 677.856 492.786 681.452 496.382C685.075 499.951 686.886 505.145 686.886 511.964V529.863C686.886 536.789 684.995 542.023 681.212 545.565C677.457 549.108 672.596 550.866 666.629 550.839C660.29 550.812 655.336 549.041 651.766 545.525C648.197 541.983 646.413 536.762 646.413 529.863ZM660.317 532.7C660.317 535.47 660.836 537.601 661.875 539.093C662.94 540.584 664.525 541.33 666.629 541.33C668.733 541.33 670.318 540.584 671.384 539.093C672.449 537.601 672.982 535.47 672.982 532.7V509.407C672.982 506.584 672.449 504.426 671.384 502.934C670.318 501.443 668.733 500.697 666.629 500.697C664.525 500.697 662.94 501.443 661.875 502.934C660.836 504.426 660.317 506.584 660.317 509.407V532.7ZM716.965 529.863V511.964C716.965 505.278 718.763 500.111 722.358 496.462C725.954 492.813 730.895 490.988 737.181 490.988C743.467 490.988 748.408 492.786 752.004 496.382C755.627 499.951 757.438 505.145 757.438 511.964V529.863C757.438 536.789 755.547 542.023 751.764 545.565C748.009 549.108 743.148 550.866 737.181 550.839C730.842 550.812 725.888 549.041 722.318 545.525C718.749 541.983 716.965 536.762 716.965 529.863ZM730.869 532.7C730.869 535.47 731.388 537.601 732.427 539.093C733.492 540.584 735.077 541.33 737.181 541.33C739.285 541.33 740.87 540.584 741.936 539.093C743.001 537.601 743.534 535.47 743.534 532.7V509.407C743.534 506.584 743.001 504.426 741.936 502.934C740.87 501.443 739.285 500.697 737.181 500.697C735.077 500.697 733.492 501.443 732.427 502.934C731.388 504.426 730.869 506.584 730.869 509.407V532.7ZM787.2 550V535.297L787.64 534.618V509.487H787.32L776.253 528.105H792.634L793.832 527.746H806.658V538.533H763.388V528.625L788.718 491.827H799.985V550H787.2ZM812.368 550V541.33L833.383 519.515C834.982 517.651 836.353 515.746 837.499 513.802C838.644 511.857 839.217 509.846 839.217 507.769C839.217 505.238 838.644 503.427 837.499 502.335C836.353 501.243 834.848 500.697 832.984 500.697C831.04 500.697 829.468 501.336 828.269 502.615C827.071 503.867 826.471 506.331 826.471 510.006V511.644H812.368V508.208C812.368 503.227 814.286 499.112 818.121 495.863C821.957 492.613 826.991 490.988 833.224 490.988C839.749 490.988 844.704 492.44 848.086 495.343C851.469 498.22 853.174 502.135 853.201 507.09C853.201 510.765 852.415 514.055 850.843 516.958C849.298 519.862 847.088 522.818 844.211 525.828L833.184 538.853H854.559V550H812.368ZM861.028 529.863V511.964C861.028 505.278 862.826 500.111 866.422 496.462C870.018 492.813 874.959 490.988 881.245 490.988C887.531 490.988 892.472 492.786 896.068 496.382C899.69 499.951 901.501 505.145 901.501 511.964V529.863C901.501 536.789 899.61 542.023 895.828 545.565C892.072 549.108 887.211 550.866 881.245 550.839C874.906 550.812 869.951 549.041 866.382 545.525C862.813 541.983 861.028 536.762 861.028 529.863ZM874.932 532.7C874.932 535.47 875.452 537.601 876.49 539.093C877.556 540.584 879.141 541.33 881.245 541.33C883.349 541.33 884.934 540.584 885.999 539.093C887.065 537.601 887.598 535.47 887.598 532.7V509.407C887.598 506.584 887.065 504.426 885.999 502.934C884.934 501.443 883.349 500.697 881.245 500.697C879.141 500.697 877.556 501.443 876.49 502.934C875.452 504.426 874.932 506.584 874.932 509.407V532.7Z" fill="white"/> +<path d="M81.1083 499.618L83.2446 501.725L83.2494 501.72L81.1083 499.618ZM108.077 491.028H111.077V488.028H108.077V491.028ZM108.077 502.175V505.175H111.077V502.175H108.077ZM91.2965 507.449L93.5003 509.485L93.508 509.476L91.2965 507.449ZM86.4621 526.228H83.4621V526.296L83.4652 526.364L86.4621 526.228ZM86.5021 527.106H89.5021V527.038L89.499 526.97L86.5021 527.106ZM88.4998 538.493L86.0469 540.221L86.055 540.232L86.0632 540.244L88.4998 538.493ZM98.648 539.133L100.949 541.057L100.958 541.047L100.966 541.037L98.648 539.133ZM98.7679 523.031L96.3102 524.752L96.3266 524.775L96.3434 524.798L98.7679 523.031ZM88.6596 522.951L90.8566 524.994L90.8654 524.985L90.8742 524.975L88.6596 522.951ZM86.542 529.184V532.184H89.542V529.184H86.542ZM84.1448 529.184H81.1448V532.184H84.1448V529.184ZM88.5797 517.078L90.6717 519.228L90.6816 519.219L88.5797 517.078ZM110.275 517.358L108.041 519.36L108.049 519.37L110.275 517.358ZM108.517 545.485L110.53 547.709L110.538 547.702L108.517 545.485ZM78.2716 544.886L76.0784 546.933L76.0855 546.94L76.0926 546.948L78.2716 544.886ZM72.6781 526.108H75.6781V523.111H72.6781H69.6781V526.108H72.6781ZM72.6781 523.111H75.6781C75.6781 513.734 78.3059 506.733 83.2445 501.725L81.1083 499.618L78.9721 497.512C72.6704 503.903 69.6781 512.564 69.6781 523.111H72.6781ZM81.1083 499.618L83.2494 501.72C88.1667 496.709 95.1824 494.028 104.721 494.028V491.028V488.028C94.0163 488.028 85.2902 491.074 78.9672 497.517L81.1083 499.618ZM104.721 491.028V494.028H108.077V491.028V488.028H104.721V491.028ZM108.077 491.028H105.077V502.175H108.077H111.077V491.028H108.077ZM108.077 502.175V499.175H105.2V502.175V505.175H108.077V502.175ZM105.2 502.175V499.175C98.5531 499.175 93.0203 501.129 89.0851 505.422L91.2965 507.449L93.508 509.476C96.0186 506.738 99.755 505.175 105.2 505.175V502.175ZM91.2965 507.449L89.0928 505.414C85.0608 509.779 83.4621 517.042 83.4621 526.228H86.4621H89.4621C89.4621 517.354 91.0864 512.098 93.5003 509.485L91.2965 507.449ZM86.4621 526.228L83.4652 526.364L83.5052 527.243L86.5021 527.106L89.499 526.97L89.459 526.091L86.4621 526.228ZM86.5021 527.106H83.5021C83.5021 530.056 83.6731 532.618 84.0466 534.747C84.4115 536.826 85.0116 538.75 86.0469 540.221L88.4998 538.493L90.9526 536.766C90.6561 536.345 90.2574 535.426 89.9564 533.71C89.664 532.043 89.5021 529.857 89.5021 527.106H86.5021ZM88.4998 538.493L86.0632 540.244C87.933 542.847 90.5639 544.33 93.7736 544.33V541.33V538.33C92.6684 538.33 91.7834 537.922 90.9363 536.743L88.4998 538.493ZM93.7736 541.33V544.33C96.6255 544.33 99.116 543.249 100.949 541.057L98.648 539.133L96.3468 537.208C95.7295 537.946 94.9704 538.33 93.7736 538.33V541.33ZM98.648 539.133L100.966 541.037C102.015 539.76 102.611 538.109 102.965 536.393C103.326 534.639 103.486 532.566 103.486 530.223H100.486H97.4859C97.4859 532.328 97.3393 533.964 97.0883 535.18C96.8296 536.434 96.5062 537.014 96.3298 537.228L98.648 539.133ZM100.486 530.223H103.486C103.486 526.745 102.886 523.588 101.192 521.264L98.7679 523.031L96.3434 524.798C96.9403 525.617 97.4859 527.255 97.4859 530.223H100.486ZM98.7679 523.031L101.226 521.311C99.4717 518.805 96.8405 517.634 93.8136 517.634V520.634V523.634C95.155 523.634 95.8267 524.061 96.3102 524.752L98.7679 523.031ZM93.8136 520.634V517.634C90.915 517.634 88.4032 518.785 86.4449 520.928L88.6596 522.951L90.8742 524.975C91.7393 524.028 92.6636 523.634 93.8136 523.634V520.634ZM88.6596 522.951L86.4626 520.908C84.4054 523.121 83.542 526.003 83.542 529.184H86.542H89.542C89.542 527.091 90.0903 525.818 90.8566 524.994L88.6596 522.951ZM86.542 529.184V526.184H84.1448V529.184V532.184H86.542V529.184ZM84.1448 529.184H87.1448C87.1448 524.578 88.4375 521.402 90.6717 519.228L88.5797 517.078L86.4876 514.928C82.8086 518.507 81.1448 523.402 81.1448 529.184H84.1448ZM88.5797 517.078L90.6816 519.219C93.0878 516.856 95.853 515.723 99.1275 515.723V512.723V509.723C94.2513 509.723 89.9847 511.494 86.4777 514.938L88.5797 517.078ZM99.1275 512.723V515.723C103.053 515.723 105.913 516.987 108.041 519.36L110.275 517.358L112.508 515.355C109.096 511.549 104.524 509.723 99.1275 509.723V512.723ZM110.275 517.358L108.049 519.37C110.152 521.695 111.43 525.289 111.43 530.622H114.43H117.43C117.43 524.396 115.937 519.147 112.5 515.346L110.275 517.358ZM114.43 530.622H111.43C111.43 536.26 109.699 540.346 106.495 543.269L108.517 545.485L110.538 547.702C115.218 543.433 117.43 537.61 117.43 530.622H114.43ZM108.517 545.485L106.503 543.261C103.181 546.269 98.9737 547.839 93.6538 547.839V550.839V553.839C100.267 553.839 105.968 551.84 110.53 547.709L108.517 545.485ZM93.6538 550.839V547.839C87.8099 547.839 83.533 546.081 80.4506 542.824L78.2716 544.886L76.0926 546.948C80.5214 551.628 86.4994 553.839 93.6538 553.839V550.839ZM78.2716 544.886L80.4648 542.839C77.4786 539.64 75.6781 534.281 75.6781 526.108H72.6781H69.6781C69.6781 534.982 71.6065 542.142 76.0784 546.933L78.2716 544.886ZM126.413 496.422L128.426 498.646L128.434 498.638L126.413 496.422ZM156.618 496.981L154.431 499.036L154.439 499.043L156.618 496.981ZM153.821 542.169L151.685 540.063L151.68 540.068L153.821 542.169ZM130.208 550.759V553.759L130.216 553.759L130.208 550.759ZM126.852 550.759H123.852V553.759H126.852V550.759ZM126.852 539.812V536.812H123.852V539.812H126.852ZM129.729 539.812L129.742 536.812H129.729V539.812ZM148.467 515.879H151.467V515.826L151.465 515.772L148.467 515.879ZM148.427 514.761H145.427V514.814L145.429 514.868L148.427 514.761ZM146.43 503.574L143.965 505.285L143.971 505.293L143.977 505.301L146.43 503.574ZM136.281 502.934L138.583 504.859L138.591 504.849L138.599 504.839L136.281 502.934ZM136.121 519.036L133.677 520.776L133.694 520.799L133.712 520.823L136.121 519.036ZM146.27 519.116L144.092 517.053L144.091 517.054L146.27 519.116ZM148.427 512.883V509.883H145.427V512.883H148.427ZM150.745 512.883H153.745V509.883H150.745V512.883ZM146.35 524.949L148.441 527.099L148.451 527.09L146.35 524.949ZM120.5 511.205H123.5C123.5 505.598 125.227 501.542 128.426 498.646L126.413 496.422L124.399 494.198C119.714 498.44 117.5 504.24 117.5 511.205H120.5ZM126.413 496.422L128.434 498.638C131.755 495.61 135.971 494.028 141.315 494.028V491.028V488.028C134.674 488.028 128.955 490.042 124.391 494.206L126.413 496.422ZM141.315 491.028V494.028C147.129 494.028 151.376 495.784 154.431 499.036L156.618 496.981L158.804 494.927C154.402 490.242 148.447 488.028 141.315 488.028V491.028ZM156.618 496.981L154.439 499.043C157.437 502.212 159.251 507.559 159.251 515.76H162.251H165.251C165.251 506.86 163.31 499.688 158.797 494.919L156.618 496.981ZM162.251 515.76H159.251V518.716H162.251H165.251V515.76H162.251ZM162.251 518.716H159.251C159.251 528.064 156.625 535.052 151.685 540.063L153.821 542.169L155.957 544.275C162.257 537.886 165.251 529.239 165.251 518.716H162.251ZM153.821 542.169L151.68 540.068C146.791 545.05 139.775 547.734 130.2 547.759L130.208 550.759L130.216 553.759C140.938 553.731 149.664 550.688 155.962 544.27L153.821 542.169ZM130.208 550.759V547.759H126.852V550.759V553.759H130.208V550.759ZM126.852 550.759H129.852V539.812H126.852H123.852V550.759H126.852ZM126.852 539.812V542.812H129.729V539.812V536.812H126.852V539.812ZM129.729 539.812L129.716 542.812C136.359 542.841 141.895 540.92 145.837 536.653L143.633 534.618L141.429 532.582C138.924 535.294 135.191 536.836 129.742 536.812L129.729 539.812ZM143.633 534.618L145.837 536.653C149.867 532.289 151.467 525.042 151.467 515.879H148.467H145.467C145.467 524.723 143.844 529.968 141.429 532.582L143.633 534.618ZM148.467 515.879L151.465 515.772L151.425 514.654L148.427 514.761L145.429 514.868L145.469 515.987L148.467 515.879ZM148.427 514.761H151.427C151.427 511.875 151.256 509.36 150.881 507.261C150.514 505.207 149.912 503.308 148.882 501.846L146.43 503.574L143.977 505.301C144.279 505.73 144.675 506.641 144.975 508.316C145.266 509.946 145.427 512.08 145.427 514.761H148.427ZM146.43 503.574L148.894 501.863C147.047 499.203 144.4 497.697 141.156 497.697V500.697V503.697C142.279 503.697 143.149 504.109 143.965 505.285L146.43 503.574ZM141.156 500.697V497.697C138.284 497.697 135.789 498.807 133.963 501.03L136.281 502.934L138.599 504.839C139.224 504.079 139.979 503.697 141.156 503.697V500.697ZM136.281 502.934L133.98 501.01C132.927 502.269 132.326 503.892 131.968 505.579C131.604 507.298 131.443 509.324 131.443 511.604H134.443H137.443C137.443 509.57 137.59 507.993 137.838 506.823C138.093 505.619 138.41 505.065 138.583 504.859L136.281 502.934ZM134.443 511.604H131.443C131.443 515.195 132.014 518.439 133.677 520.776L136.121 519.036L138.565 517.296C137.992 516.49 137.443 514.779 137.443 511.604H134.443ZM136.121 519.036L133.712 520.823C135.505 523.242 138.129 524.353 141.116 524.353V521.353V518.353C139.734 518.353 139.028 517.919 138.531 517.249L136.121 519.036ZM141.116 521.353V524.353C143.978 524.353 146.48 523.258 148.449 521.178L146.27 519.116L144.091 517.054C143.236 517.956 142.302 518.353 141.116 518.353V521.353ZM146.27 519.116L148.448 521.179C150.542 518.968 151.427 516.078 151.427 512.883H148.427H145.427C145.427 514.961 144.874 516.227 144.092 517.053L146.27 519.116ZM148.427 512.883V515.883H150.745V512.883V509.883H148.427V512.883ZM150.745 512.883H147.745C147.745 517.465 146.463 520.633 144.248 522.808L146.35 524.949L148.451 527.09C152.096 523.511 153.745 518.636 153.745 512.883H150.745ZM146.35 524.949L144.258 522.799C141.89 525.102 139.126 526.224 135.802 526.224V529.224V532.224C140.682 532.224 144.949 530.496 148.441 527.099L146.35 524.949ZM135.802 529.224V526.224C131.885 526.224 129.027 524.953 126.897 522.556L124.655 524.549L122.412 526.543C125.823 530.379 130.396 532.224 135.802 532.224V529.224ZM124.655 524.549L126.897 522.556C124.775 520.17 123.5 516.534 123.5 511.205H120.5H117.5C117.5 517.436 118.994 522.696 122.412 526.543L124.655 524.549ZM177.151 499.618L179.287 501.725L179.292 501.72L177.151 499.618ZM204.12 491.028H207.12V488.028H204.12V491.028ZM204.12 502.175V505.175H207.12V502.175H204.12ZM187.339 507.449L189.543 509.485L189.55 509.476L187.339 507.449ZM182.505 526.228H179.505V526.296L179.508 526.364L182.505 526.228ZM182.545 527.106H185.545V527.038L185.541 526.97L182.545 527.106ZM184.542 538.493L182.089 540.221L182.097 540.232L182.106 540.244L184.542 538.493ZM194.69 539.133L196.992 541.057L197 541.047L197.009 541.037L194.69 539.133ZM194.81 523.031L192.353 524.752L192.369 524.775L192.386 524.798L194.81 523.031ZM184.702 522.951L186.899 524.994L186.908 524.985L186.917 524.975L184.702 522.951ZM182.584 529.184V532.184H185.584V529.184H182.584ZM180.187 529.184H177.187V532.184H180.187V529.184ZM184.622 517.078L186.714 519.228L186.724 519.219L184.622 517.078ZM206.317 517.358L204.083 519.36L204.092 519.37L206.317 517.358ZM204.559 545.485L206.573 547.709L206.581 547.702L204.559 545.485ZM174.314 544.886L172.121 546.933L172.128 546.94L172.135 546.948L174.314 544.886ZM168.721 526.108H171.721V523.111H168.721H165.721V526.108H168.721ZM168.721 523.111H171.721C171.721 513.734 174.348 506.733 179.287 501.725L177.151 499.618L175.015 497.512C168.713 503.903 165.721 512.564 165.721 523.111H168.721ZM177.151 499.618L179.292 501.72C184.209 496.709 191.225 494.028 200.763 494.028V491.028V488.028C190.059 488.028 181.333 491.074 175.01 497.517L177.151 499.618ZM200.763 491.028V494.028H204.12V491.028V488.028H200.763V491.028ZM204.12 491.028H201.12V502.175H204.12H207.12V491.028H204.12ZM204.12 502.175V499.175H201.243V502.175V505.175H204.12V502.175ZM201.243 502.175V499.175C194.596 499.175 189.063 501.129 185.128 505.422L187.339 507.449L189.55 509.476C192.061 506.738 195.798 505.175 201.243 505.175V502.175ZM187.339 507.449L185.135 505.414C181.103 509.779 179.505 517.042 179.505 526.228H182.505H185.505C185.505 517.354 187.129 512.098 189.543 509.485L187.339 507.449ZM182.505 526.228L179.508 526.364L179.548 527.243L182.545 527.106L185.541 526.97L185.501 526.091L182.505 526.228ZM182.545 527.106H179.545C179.545 530.056 179.716 532.618 180.089 534.747C180.454 536.826 181.054 538.75 182.089 540.221L184.542 538.493L186.995 536.766C186.699 536.345 186.3 535.426 185.999 533.71C185.706 532.043 185.545 529.857 185.545 527.106H182.545ZM184.542 538.493L182.106 540.244C183.975 542.847 186.606 544.33 189.816 544.33V541.33V538.33C188.711 538.33 187.826 537.922 186.979 536.743L184.542 538.493ZM189.816 541.33V544.33C192.668 544.33 195.159 543.249 196.992 541.057L194.69 539.133L192.389 537.208C191.772 537.946 191.013 538.33 189.816 538.33V541.33ZM194.69 539.133L197.009 541.037C198.058 539.76 198.653 538.109 199.007 536.393C199.369 534.639 199.528 532.566 199.528 530.223H196.528H193.528C193.528 532.328 193.382 533.964 193.131 535.18C192.872 536.434 192.549 537.014 192.372 537.228L194.69 539.133ZM196.528 530.223H199.528C199.528 526.745 198.929 523.588 197.235 521.264L194.81 523.031L192.386 524.798C192.983 525.617 193.528 527.255 193.528 530.223H196.528ZM194.81 523.031L197.268 521.311C195.514 518.805 192.883 517.634 189.856 517.634V520.634V523.634C191.197 523.634 191.869 524.061 192.353 524.752L194.81 523.031ZM189.856 520.634V517.634C186.957 517.634 184.446 518.785 182.487 520.928L184.702 522.951L186.917 524.975C187.782 524.028 188.706 523.634 189.856 523.634V520.634ZM184.702 522.951L182.505 520.908C180.448 523.121 179.584 526.003 179.584 529.184H182.584H185.584C185.584 527.091 186.133 525.818 186.899 524.994L184.702 522.951ZM182.584 529.184V526.184H180.187V529.184V532.184H182.584V529.184ZM180.187 529.184H183.187C183.187 524.578 184.48 521.402 186.714 519.228L184.622 517.078L182.53 514.928C178.851 518.507 177.187 523.402 177.187 529.184H180.187ZM184.622 517.078L186.724 519.219C189.13 516.856 191.896 515.723 195.17 515.723V512.723V509.723C190.294 509.723 186.027 511.494 182.52 514.938L184.622 517.078ZM195.17 512.723V515.723C199.096 515.723 201.956 516.987 204.083 519.36L206.317 517.358L208.551 515.355C205.138 511.549 200.567 509.723 195.17 509.723V512.723ZM206.317 517.358L204.092 519.37C206.195 521.695 207.472 525.289 207.472 530.622H210.472H213.472C213.472 524.396 211.98 519.147 208.542 515.346L206.317 517.358ZM210.472 530.622H207.472C207.472 536.26 205.742 540.346 202.537 543.269L204.559 545.485L206.581 547.702C211.261 543.433 213.472 537.61 213.472 530.622H210.472ZM204.559 545.485L202.546 543.261C199.223 546.269 195.016 547.839 189.696 547.839V550.839V553.839C196.309 553.839 202.01 551.84 206.573 547.709L204.559 545.485ZM189.696 550.839V547.839C183.852 547.839 179.576 546.081 176.493 542.824L174.314 544.886L172.135 546.948C176.564 551.628 182.542 553.839 189.696 553.839V550.839ZM174.314 544.886L176.507 542.839C173.521 539.64 171.721 534.281 171.721 526.108H168.721H165.721C165.721 534.982 167.649 542.142 172.121 546.933L174.314 544.886ZM222.455 496.422L224.469 498.646L224.477 498.638L222.455 496.422ZM252.66 496.981L250.474 499.036L250.481 499.043L252.66 496.981ZM249.863 542.169L247.727 540.063L247.722 540.068L249.863 542.169ZM226.251 550.759V553.759L226.259 553.759L226.251 550.759ZM222.895 550.759H219.895V553.759H222.895V550.759ZM222.895 539.812V536.812H219.895V539.812H222.895ZM225.771 539.812L225.785 536.812H225.771V539.812ZM244.51 515.879H247.51V515.826L247.508 515.772L244.51 515.879ZM244.47 514.761H241.47V514.814L241.472 514.868L244.47 514.761ZM242.472 503.574L240.008 505.285L240.014 505.293L240.019 505.301L242.472 503.574ZM232.324 502.934L234.625 504.859L234.633 504.849L234.642 504.839L232.324 502.934ZM232.164 519.036L229.72 520.776L229.737 520.799L229.754 520.823L232.164 519.036ZM242.312 519.116L240.134 517.053L240.133 517.054L242.312 519.116ZM244.47 512.883V509.883H241.47V512.883H244.47ZM246.787 512.883H249.787V509.883H246.787V512.883ZM242.392 524.949L244.484 527.099L244.494 527.09L242.392 524.949ZM216.542 511.205H219.542C219.542 505.598 221.27 501.542 224.469 498.646L222.455 496.422L220.442 494.198C215.756 498.44 213.542 504.24 213.542 511.205H216.542ZM222.455 496.422L224.477 498.638C227.797 495.61 232.014 494.028 237.358 494.028V491.028V488.028C230.716 488.028 224.997 490.042 220.433 494.206L222.455 496.422ZM237.358 491.028V494.028C243.172 494.028 247.418 495.784 250.474 499.036L252.66 496.981L254.847 494.927C250.444 490.242 244.489 488.028 237.358 488.028V491.028ZM252.66 496.981L250.481 499.043C253.48 502.212 255.294 507.559 255.294 515.76H258.294H261.294C261.294 506.86 259.352 499.688 254.839 494.919L252.66 496.981ZM258.294 515.76H255.294V518.716H258.294H261.294V515.76H258.294ZM258.294 518.716H255.294C255.294 528.064 252.667 535.052 247.727 540.063L249.863 542.169L252 544.275C258.3 537.886 261.294 529.239 261.294 518.716H258.294ZM249.863 542.169L247.722 540.068C242.833 545.05 235.817 547.734 226.243 547.759L226.251 550.759L226.259 553.759C236.981 553.731 245.707 550.688 252.005 544.27L249.863 542.169ZM226.251 550.759V547.759H222.895V550.759V553.759H226.251V550.759ZM222.895 550.759H225.895V539.812H222.895H219.895V550.759H222.895ZM222.895 539.812V542.812H225.771V539.812V536.812H222.895V539.812ZM225.771 539.812L225.758 542.812C232.401 542.841 237.938 540.92 241.879 536.653L239.675 534.618L237.471 532.582C234.967 535.294 231.234 536.836 225.785 536.812L225.771 539.812ZM239.675 534.618L241.879 536.653C245.91 532.289 247.51 525.042 247.51 515.879H244.51H241.51C241.51 524.723 239.886 529.968 237.471 532.582L239.675 534.618ZM244.51 515.879L247.508 515.772L247.468 514.654L244.47 514.761L241.472 514.868L241.512 515.987L244.51 515.879ZM244.47 514.761H247.47C247.47 511.875 247.298 509.36 246.924 507.261C246.557 505.207 245.954 503.308 244.925 501.846L242.472 503.574L240.019 505.301C240.321 505.73 240.718 506.641 241.017 508.316C241.308 509.946 241.47 512.08 241.47 514.761H244.47ZM242.472 503.574L244.936 501.863C243.089 499.203 240.443 497.697 237.198 497.697V500.697V503.697C238.322 503.697 239.191 504.109 240.008 505.285L242.472 503.574ZM237.198 500.697V497.697C234.326 497.697 231.832 498.807 230.006 501.03L232.324 502.934L234.642 504.839C235.266 504.079 236.021 503.697 237.198 503.697V500.697ZM232.324 502.934L230.023 501.01C228.97 502.269 228.368 503.892 228.011 505.579C227.646 507.298 227.486 509.324 227.486 511.604H230.486H233.486C233.486 509.57 233.632 507.993 233.88 506.823C234.135 505.619 234.453 505.065 234.625 504.859L232.324 502.934ZM230.486 511.604H227.486C227.486 515.195 228.056 518.439 229.72 520.776L232.164 519.036L234.608 517.296C234.034 516.49 233.486 514.779 233.486 511.604H230.486ZM232.164 519.036L229.754 520.823C231.548 523.242 234.172 524.353 237.158 524.353V521.353V518.353C235.776 518.353 235.071 517.919 234.574 517.249L232.164 519.036ZM237.158 521.353V524.353C240.02 524.353 242.522 523.258 244.491 521.178L242.312 519.116L240.133 517.054C239.279 517.956 238.345 518.353 237.158 518.353V521.353ZM242.312 519.116L244.49 521.179C246.584 518.968 247.47 516.078 247.47 512.883H244.47H241.47C241.47 514.961 240.917 516.227 240.134 517.053L242.312 519.116ZM244.47 512.883V515.883H246.787V512.883V509.883H244.47V512.883ZM246.787 512.883H243.787C243.787 517.465 242.506 520.633 240.29 522.808L242.392 524.949L244.494 527.09C248.138 523.511 249.787 518.636 249.787 512.883H246.787ZM242.392 524.949L240.3 522.799C237.933 525.102 235.168 526.224 231.844 526.224V529.224V532.224C236.724 532.224 240.992 530.496 244.484 527.099L242.392 524.949ZM231.844 529.224V526.224C227.927 526.224 225.069 524.953 222.939 522.556L220.697 524.549L218.455 526.543C221.865 530.379 226.439 532.224 231.844 532.224V529.224ZM220.697 524.549L222.939 522.556C220.818 520.17 219.542 516.534 219.542 511.205H216.542H213.542C213.542 517.436 215.036 522.696 218.455 526.543L220.697 524.549ZM322.773 496.382L320.651 498.503L320.659 498.511L320.667 498.519L322.773 496.382ZM322.533 545.565L320.482 543.376L320.474 543.383L322.533 545.565ZM307.95 550.839L307.963 547.839H307.962L307.95 550.839ZM293.087 545.525L290.974 547.654L290.982 547.662L293.087 545.525ZM303.195 539.093L300.734 540.807L300.744 540.822L300.754 540.836L303.195 539.093ZM303.195 502.934L300.754 501.191L300.744 501.205L300.734 501.22L303.195 502.934ZM287.733 529.863H290.733V511.964H287.733H284.733V529.863H287.733ZM287.733 511.964H290.733C290.733 505.817 292.375 501.5 295.264 498.568L293.127 496.462L290.99 494.356C286.688 498.722 284.733 504.74 284.733 511.964H287.733ZM293.127 496.462L295.264 498.568C298.173 495.616 302.273 493.988 307.95 493.988V490.988V487.988C301.055 487.988 295.273 490.01 290.99 494.356L293.127 496.462ZM307.95 490.988V493.988C313.639 493.988 317.745 495.597 320.651 498.503L322.773 496.382L324.894 494.261C320.609 489.976 314.832 487.988 307.95 487.988V490.988ZM322.773 496.382L320.667 498.519C323.543 501.353 325.206 505.666 325.206 511.964H328.206H331.206C331.206 504.625 329.247 498.55 324.878 494.245L322.773 496.382ZM328.206 511.964H325.206V529.863H328.206H331.206V511.964H328.206ZM328.206 529.863H325.206C325.206 536.25 323.475 540.572 320.482 543.376L322.533 545.565L324.584 547.755C329.156 543.473 331.206 537.327 331.206 529.863H328.206ZM322.533 545.565L320.474 543.383C317.366 546.315 313.289 547.863 307.963 547.839L307.95 550.839L307.936 553.839C314.544 553.868 320.189 551.901 324.591 547.747L322.533 545.565ZM307.95 550.839L307.962 547.839C302.189 547.815 298.065 546.218 295.192 543.388L293.087 545.525L290.982 547.662C295.247 551.864 301.032 553.81 307.937 553.839L307.95 550.839ZM293.087 545.525L295.2 543.396C292.383 540.6 290.733 536.267 290.733 529.863H287.733H284.733C284.733 537.257 286.652 543.365 290.974 547.654L293.087 545.525ZM301.637 532.7H298.637C298.637 535.782 299.205 538.612 300.734 540.807L303.195 539.093L305.657 537.378C305.108 536.59 304.637 535.158 304.637 532.7H301.637ZM303.195 539.093L300.754 540.836C302.472 543.242 305.042 544.33 307.95 544.33V541.33V538.33C306.65 538.33 306.049 537.927 305.637 537.349L303.195 539.093ZM307.95 541.33V544.33C310.858 544.33 313.428 543.242 315.146 540.836L312.704 539.093L310.263 537.349C309.85 537.927 309.25 538.33 307.95 538.33V541.33ZM312.704 539.093L315.146 540.836C316.717 538.636 317.303 535.794 317.303 532.7H314.303H311.303C311.303 535.146 310.822 536.566 310.263 537.349L312.704 539.093ZM314.303 532.7H317.303V509.407H314.303H311.303V532.7H314.303ZM314.303 509.407H317.303C317.303 506.274 316.723 503.399 315.146 501.191L312.704 502.934L310.263 504.678C310.817 505.453 311.303 506.893 311.303 509.407H314.303ZM312.704 502.934L315.146 501.191C313.428 498.786 310.858 497.697 307.95 497.697V500.697V503.697C309.25 503.697 309.85 504.1 310.263 504.678L312.704 502.934ZM307.95 500.697V497.697C305.042 497.697 302.472 498.786 300.754 501.191L303.195 502.934L305.637 504.678C306.049 504.1 306.65 503.697 307.95 503.697V500.697ZM303.195 502.934L300.734 501.22C299.199 503.423 298.637 506.286 298.637 509.407H301.637H304.637C304.637 506.881 305.114 505.429 305.657 504.649L303.195 502.934ZM301.637 509.407H298.637V532.7H301.637H304.637V509.407H301.637ZM357.969 550H354.969V553H357.969V550ZM357.969 535.297L355.45 533.667L354.969 534.411V535.297H357.969ZM358.408 534.618L360.927 536.248L361.408 535.504V534.618H358.408ZM358.408 509.487H361.408V506.487H358.408V509.487ZM358.089 509.487V506.487H356.382L355.51 507.954L358.089 509.487ZM347.021 528.105L344.443 526.572L341.748 531.105H347.021V528.105ZM363.402 528.105V531.105H363.843L364.265 530.979L363.402 528.105ZM364.601 527.746V524.746H364.161L363.739 524.872L364.601 527.746ZM377.426 527.746H380.426V524.746H377.426V527.746ZM377.426 538.533V541.533H380.426V538.533H377.426ZM334.156 538.533H331.156V541.533H334.156V538.533ZM334.156 528.625L331.685 526.924L331.156 527.692V528.625H334.156ZM359.487 491.827V488.827H357.91L357.016 490.126L359.487 491.827ZM370.754 491.827H373.754V488.827H370.754V491.827ZM370.754 550V553H373.754V550H370.754ZM357.969 550H360.969V535.297H357.969H354.969V550H357.969ZM357.969 535.297L360.487 536.927L360.927 536.248L358.408 534.618L355.89 532.988L355.45 533.667L357.969 535.297ZM358.408 534.618H361.408V509.487H358.408H355.408V534.618H358.408ZM358.408 509.487V506.487H358.089V509.487V512.487H358.408V509.487ZM358.089 509.487L355.51 507.954L344.443 526.572L347.021 528.105L349.6 529.638L360.667 511.02L358.089 509.487ZM347.021 528.105V531.105H363.402V528.105V525.105H347.021V528.105ZM363.402 528.105L364.265 530.979L365.463 530.619L364.601 527.746L363.739 524.872L362.54 525.232L363.402 528.105ZM364.601 527.746V530.746H377.426V527.746V524.746H364.601V527.746ZM377.426 527.746H374.426V538.533H377.426H380.426V527.746H377.426ZM377.426 538.533V535.533H334.156V538.533V541.533H377.426V538.533ZM334.156 538.533H337.156V528.625H334.156H331.156V538.533H334.156ZM334.156 528.625L336.627 530.326L361.958 493.528L359.487 491.827L357.016 490.126L331.685 526.924L334.156 528.625ZM359.487 491.827V494.827H370.754V491.827V488.827H359.487V491.827ZM370.754 491.827H367.754V550H370.754H373.754V491.827H370.754ZM370.754 550V547H357.969V550V553H370.754V550ZM383.136 550H380.136V553H383.136V550ZM383.136 541.33L380.976 539.249L380.136 540.12V541.33H383.136ZM404.152 519.515L406.313 521.597L406.373 521.534L406.43 521.468L404.152 519.515ZM399.038 502.615L401.205 504.69L401.216 504.678L401.227 504.667L399.038 502.615ZM397.24 511.644V514.644H400.24V511.644H397.24ZM383.136 511.644H380.136V514.644H383.136V511.644ZM418.855 495.343L416.901 497.62L416.912 497.629L418.855 495.343ZM423.969 507.09H426.969V507.082L426.969 507.074L423.969 507.09ZM421.612 516.958L418.974 515.53L418.969 515.54L418.964 515.549L421.612 516.958ZM414.98 525.828L412.811 523.755L412.748 523.821L412.69 523.89L414.98 525.828ZM403.952 538.853L401.663 536.914L397.482 541.853H403.952V538.853ZM425.328 538.853H428.328V535.853H425.328V538.853ZM425.328 550V553H428.328V550H425.328ZM383.136 550H386.136V541.33H383.136H380.136V550H383.136ZM383.136 541.33L385.297 543.411L406.313 521.597L404.152 519.515L401.992 517.434L380.976 539.249L383.136 541.33ZM404.152 519.515L406.43 521.468C408.133 519.481 409.61 517.434 410.852 515.324L408.267 513.802L405.682 512.279C404.634 514.059 403.368 515.821 401.874 517.563L404.152 519.515ZM408.267 513.802L410.852 515.324C412.245 512.96 412.985 510.428 412.985 507.769H409.985H406.985C406.985 509.265 406.58 510.755 405.682 512.279L408.267 513.802ZM409.985 507.769H412.985C412.985 504.895 412.35 502.083 410.338 500.164L408.267 502.335L406.197 504.506C406.475 504.771 406.985 505.582 406.985 507.769H409.985ZM408.267 502.335L410.338 500.164C408.536 498.447 406.241 497.697 403.753 497.697V500.697V503.697C404.993 503.697 405.708 504.04 406.197 504.506L408.267 502.335ZM403.753 500.697V497.697C401.08 497.697 398.681 498.61 396.849 500.563L399.038 502.615L401.227 504.667C401.793 504.063 402.537 503.697 403.753 503.697V500.697ZM399.038 502.615L396.871 500.54C395.776 501.684 395.145 503.17 394.775 504.693C394.399 506.235 394.24 508.026 394.24 510.006H397.24H400.24C400.24 508.311 400.38 507.032 400.605 506.111C400.833 505.17 401.102 504.797 401.205 504.69L399.038 502.615ZM397.24 510.006H394.24V511.644H397.24H400.24V510.006H397.24ZM397.24 511.644V508.644H383.136V511.644V514.644H397.24V511.644ZM383.136 511.644H386.136V508.208H383.136H380.136V511.644H383.136ZM383.136 508.208H386.136C386.136 504.119 387.659 500.837 390.829 498.152L388.89 495.863L386.951 493.574C382.449 497.387 380.136 502.336 380.136 508.208H383.136ZM388.89 495.863L390.829 498.152C394.002 495.463 398.294 493.988 403.992 493.988V490.988V487.988C397.225 487.988 391.449 489.763 386.951 493.574L388.89 495.863ZM403.992 490.988V493.988C410.126 493.988 414.266 495.358 416.901 497.62L418.855 495.343L420.809 493.067C416.678 489.522 410.91 487.988 403.992 487.988V490.988ZM418.855 495.343L416.912 497.629C419.547 499.869 420.947 502.912 420.969 507.106L423.969 507.09L426.969 507.074C426.938 501.359 424.929 496.57 420.799 493.058L418.855 495.343ZM423.969 507.09H420.969C420.969 510.324 420.282 513.113 418.974 515.53L421.612 516.958L424.25 518.386C426.085 514.996 426.969 511.207 426.969 507.09H423.969ZM421.612 516.958L418.964 515.549C417.576 518.156 415.546 520.894 412.811 523.755L414.98 525.828L417.148 527.901C420.167 524.743 422.558 521.567 424.26 518.367L421.612 516.958ZM414.98 525.828L412.69 523.89L401.663 536.914L403.952 538.853L406.242 540.791L417.269 527.766L414.98 525.828ZM403.952 538.853V541.853H425.328V538.853V535.853H403.952V538.853ZM425.328 538.853H422.328V550H425.328H428.328V538.853H425.328ZM425.328 550V547H383.136V550V553H425.328V550ZM466.836 496.382L464.715 498.503L464.723 498.511L464.731 498.519L466.836 496.382ZM466.597 545.565L464.546 543.376L464.538 543.383L466.597 545.565ZM452.014 550.839L452.027 547.839H452.026L452.014 550.839ZM437.151 545.525L435.037 547.654L435.045 547.662L437.151 545.525ZM447.259 539.093L444.797 540.807L444.807 540.822L444.818 540.836L447.259 539.093ZM447.259 502.934L444.818 501.191L444.807 501.205L444.797 501.22L447.259 502.934ZM431.797 529.863H434.797V511.964H431.797H428.797V529.863H431.797ZM431.797 511.964H434.797C434.797 505.817 436.438 501.5 439.328 498.568L437.191 496.462L435.054 494.356C430.751 498.722 428.797 504.74 428.797 511.964H431.797ZM437.191 496.462L439.328 498.568C442.236 495.616 446.337 493.988 452.014 493.988V490.988V487.988C445.118 487.988 439.337 490.01 435.054 494.356L437.191 496.462ZM452.014 490.988V493.988C457.703 493.988 461.809 495.597 464.715 498.503L466.836 496.382L468.958 494.261C464.673 489.976 458.896 487.988 452.014 487.988V490.988ZM466.836 496.382L464.731 498.519C467.607 501.353 469.27 505.666 469.27 511.964H472.27H475.27C475.27 504.625 473.311 498.55 468.942 494.245L466.836 496.382ZM472.27 511.964H469.27V529.863H472.27H475.27V511.964H472.27ZM472.27 529.863H469.27C469.27 536.25 467.539 540.572 464.546 543.376L466.597 545.565L468.647 547.755C473.219 543.473 475.27 537.327 475.27 529.863H472.27ZM466.597 545.565L464.538 543.383C461.43 546.315 457.352 547.863 452.027 547.839L452.014 550.839L452 553.839C458.608 553.868 464.252 551.901 468.655 547.747L466.597 545.565ZM452.014 550.839L452.026 547.839C446.252 547.815 442.129 546.218 439.256 543.388L437.151 545.525L435.045 547.662C439.311 551.864 445.096 553.81 452.001 553.839L452.014 550.839ZM437.151 545.525L439.264 543.396C436.447 540.6 434.797 536.267 434.797 529.863H431.797H428.797C428.797 537.257 430.716 543.365 435.037 547.654L437.151 545.525ZM445.701 532.7H442.701C442.701 535.782 443.268 538.612 444.797 540.807L447.259 539.093L449.721 537.378C449.172 536.59 448.701 535.158 448.701 532.7H445.701ZM447.259 539.093L444.818 540.836C446.536 543.242 449.105 544.33 452.014 544.33V541.33V538.33C450.713 538.33 450.113 537.927 449.7 537.349L447.259 539.093ZM452.014 541.33V544.33C454.922 544.33 457.491 543.242 459.209 540.836L456.768 539.093L454.327 537.349C453.914 537.927 453.314 538.33 452.014 538.33V541.33ZM456.768 539.093L459.209 540.836C460.781 538.636 461.366 535.794 461.366 532.7H458.366H455.366C455.366 535.146 454.886 536.566 454.327 537.349L456.768 539.093ZM458.366 532.7H461.366V509.407H458.366H455.366V532.7H458.366ZM458.366 509.407H461.366C461.366 506.274 460.787 503.399 459.209 501.191L456.768 502.934L454.327 504.678C454.88 505.453 455.366 506.893 455.366 509.407H458.366ZM456.768 502.934L459.209 501.191C457.491 498.786 454.922 497.697 452.014 497.697V500.697V503.697C453.314 503.697 453.914 504.1 454.327 504.678L456.768 502.934ZM452.014 500.697V497.697C449.105 497.697 446.536 498.786 444.818 501.191L447.259 502.934L449.7 504.678C450.113 504.1 450.713 503.697 452.014 503.697V500.697ZM447.259 502.934L444.797 501.22C443.263 503.423 442.701 506.286 442.701 509.407H445.701H448.701C448.701 506.881 449.177 505.429 449.721 504.649L447.259 502.934ZM445.701 509.407H442.701V532.7H445.701H448.701V509.407H445.701ZM504.427 524.669L502.096 522.78L502.09 522.788L502.084 522.795L504.427 524.669ZM511.019 519.835L511.869 522.712L514.019 522.077V519.835H511.019ZM511.019 519.675H514.019V517.734L512.249 516.939L511.019 519.675ZM505.226 514.841L502.734 516.512L502.746 516.529L502.758 516.547L505.226 514.841ZM508.142 495.223L506.238 492.905L506.229 492.913L508.142 495.223ZM536.749 495.343L534.795 497.62L534.805 497.628L534.815 497.636L536.749 495.343ZM539.546 515.04L537.087 513.322L537.083 513.328L539.546 515.04ZM533.753 519.635L532.699 516.826L530.753 517.556V519.635H533.753ZM533.753 519.795H530.753V522.082L532.958 522.688L533.753 519.795ZM540.425 524.629L538.073 526.491L538.083 526.505L538.094 526.518L540.425 524.629ZM537.668 546.364L535.842 543.984L535.834 543.99L537.668 546.364ZM507.223 546.364L505.397 548.744L507.223 546.364ZM517.252 539.452L514.986 541.419L515.006 541.441L515.026 541.464L517.252 539.452ZM527.44 525.868L525.276 527.946L525.297 527.968L525.319 527.989L527.44 525.868ZM518.051 514.601L515.721 516.491L515.73 516.502L515.739 516.513L518.051 514.601ZM526.801 514.601L524.492 512.685L524.489 512.689L526.801 514.601ZM527 502.455L524.63 504.293L524.651 504.32L524.672 504.347L527 502.455ZM517.851 502.375L515.542 500.459L515.53 500.474L515.518 500.489L517.851 502.375ZM501.39 534.178H504.39C504.39 530.926 505.242 528.452 506.769 526.543L504.427 524.669L502.084 522.795C499.562 525.947 498.39 529.813 498.39 534.178H501.39ZM504.427 524.669L506.757 526.558C508.551 524.345 510.272 523.184 511.869 522.712L511.019 519.835L510.169 516.958C507.078 517.871 504.404 519.933 502.096 522.78L504.427 524.669ZM511.019 519.835H514.019V519.675H511.019H508.019V519.835H511.019ZM511.019 519.675L512.249 516.939C510.382 516.1 508.877 514.847 507.693 513.135L505.226 514.841L502.758 516.547C504.558 519.15 506.915 521.12 509.789 522.411L511.019 519.675ZM505.226 514.841L507.717 513.17C506.659 511.593 506.028 509.47 506.028 506.61H503.028H500.028C500.028 510.356 500.862 513.72 502.734 516.512L505.226 514.841ZM503.028 506.61H506.028C506.028 502.657 507.393 499.739 510.056 497.534L508.142 495.223L506.229 492.913C502.073 496.354 500.028 501.027 500.028 506.61H503.028ZM508.142 495.223L510.047 497.541C512.775 495.3 516.794 493.988 522.486 493.988V490.988V487.988C515.925 487.988 510.382 489.5 506.238 492.906L508.142 495.223ZM522.486 490.988V493.988C528.163 493.988 532.13 495.332 534.795 497.62L536.749 495.343L538.703 493.067C534.603 489.547 529.061 487.988 522.486 487.988V490.988ZM536.749 495.343L534.815 497.636C537.519 499.918 538.863 502.82 538.863 506.61H541.863H544.863C544.863 501.131 542.798 496.522 538.684 493.05L536.749 495.343ZM541.863 506.61H538.863C538.863 509.568 538.197 511.734 537.087 513.322L539.546 515.04L542.005 516.759C543.985 513.925 544.863 510.471 544.863 506.61H541.863ZM539.546 515.04L537.083 513.328C535.889 515.045 534.436 516.175 532.699 516.826L533.753 519.635L534.806 522.444C537.757 521.338 540.166 519.404 542.009 516.753L539.546 515.04ZM533.753 519.635H530.753V519.795H533.753H536.753V519.635H533.753ZM533.753 519.795L532.958 522.688C534.605 523.14 536.327 524.286 538.073 526.491L540.425 524.629L542.777 522.767C540.474 519.859 537.748 517.781 534.547 516.902L533.753 519.795ZM540.425 524.629L538.094 526.518C539.638 528.423 540.501 530.903 540.501 534.178H543.501H546.501C546.501 529.783 545.314 525.896 542.755 522.74L540.425 524.629ZM543.501 534.178H540.501C540.501 538.439 538.95 541.6 535.842 543.984L537.668 546.364L539.494 548.744C544.164 545.162 546.501 540.199 546.501 534.178H543.501ZM537.668 546.364L535.834 543.99C532.63 546.465 528.271 547.839 522.486 547.839V550.839V553.839C529.219 553.839 534.982 552.23 539.502 548.738L537.668 546.364ZM522.486 550.839V547.839C516.672 547.839 512.282 546.464 509.049 543.984L507.223 546.364L505.397 548.744C509.942 552.231 515.728 553.839 522.486 553.839V550.839ZM507.223 546.364L509.049 543.984C505.942 541.6 504.39 538.439 504.39 534.178H501.39H498.39C498.39 540.199 500.727 545.162 505.397 548.744L507.223 546.364ZM515.414 532.66H512.414C512.414 536.052 513.059 539.199 514.986 541.419L517.252 539.452L519.517 537.486C518.993 536.882 518.414 535.501 518.414 532.66H515.414ZM517.252 539.452L515.026 541.464C516.952 543.595 519.557 544.53 522.446 544.53V541.53V538.53C520.913 538.53 520.055 538.08 519.477 537.441L517.252 539.452ZM522.446 541.53V544.53C525.337 544.53 527.932 543.56 529.825 541.379L527.56 539.412L525.294 537.446C524.737 538.088 523.922 538.53 522.446 538.53V541.53ZM527.56 539.412L529.825 541.379C531.749 539.162 532.398 536.034 532.398 532.66H529.398H526.398C526.398 535.466 525.821 536.839 525.294 537.446L527.56 539.412ZM529.398 532.66H532.398C532.398 529.191 531.725 525.91 529.561 523.747L527.44 525.868L525.319 527.989C525.765 528.436 526.398 529.683 526.398 532.66H529.398ZM527.44 525.868L529.604 523.79C527.694 521.801 525.214 520.87 522.446 520.87V523.87V526.87C523.78 526.87 524.629 527.271 525.276 527.946L527.44 525.868ZM522.446 523.87V520.87C519.677 520.87 517.197 521.799 515.25 523.747L517.372 525.868L519.493 527.989C520.209 527.273 521.112 526.87 522.446 526.87V523.87ZM517.372 525.868L515.25 523.747C513.086 525.91 512.414 529.191 512.414 532.66H515.414H518.414C518.414 529.683 519.046 528.436 519.493 527.989L517.372 525.868ZM516.333 508.448H513.333C513.333 511.508 513.977 514.341 515.721 516.491L518.051 514.601L520.38 512.711C519.834 512.037 519.333 510.769 519.333 508.448H516.333ZM518.051 514.601L515.739 516.513C517.449 518.581 519.759 519.679 522.446 519.679V516.679V513.679C521.563 513.679 520.943 513.391 520.363 512.689L518.051 514.601ZM522.446 516.679V519.679C525.121 519.679 527.412 518.569 529.113 516.513L526.801 514.601L524.489 512.689C523.899 513.403 523.286 513.679 522.446 513.679V516.679ZM526.801 514.601L529.109 516.517C530.895 514.365 531.559 511.521 531.559 508.448H528.559H525.559C525.559 510.755 525.05 512.013 524.492 512.685L526.801 514.601ZM528.559 508.448H531.559C531.559 505.455 531.006 502.627 529.329 500.563L527 502.455L524.672 504.347C525.073 504.84 525.559 506.007 525.559 508.448H528.559ZM527 502.455L529.371 500.617C527.662 498.413 525.165 497.497 522.446 497.497V500.497V503.497C523.775 503.497 524.314 503.887 524.63 504.293L527 502.455ZM522.446 500.497V497.497C519.767 497.497 517.287 498.356 515.542 500.459L517.851 502.375L520.16 504.291C520.492 503.89 521.076 503.497 522.446 503.497V500.497ZM517.851 502.375L515.518 500.489C513.855 502.546 513.333 505.421 513.333 508.448H516.333H519.333C519.333 505.881 519.822 504.708 520.184 504.261L517.851 502.375ZM552.448 524.669L550.117 522.78L550.111 522.788L550.105 522.795L552.448 524.669ZM559.04 519.835L559.89 522.712L562.04 522.077V519.835H559.04ZM559.04 519.675H562.04V517.734L560.27 516.939L559.04 519.675ZM553.247 514.841L550.755 516.512L550.767 516.529L550.779 516.547L553.247 514.841ZM556.163 495.223L554.259 492.905L554.25 492.913L556.163 495.223ZM584.77 495.343L582.817 497.62L582.826 497.628L582.836 497.636L584.77 495.343ZM587.567 515.04L585.108 513.322L585.104 513.328L587.567 515.04ZM581.774 519.635L580.72 516.826L578.774 517.556V519.635H581.774ZM581.774 519.795H578.774V522.082L580.979 522.688L581.774 519.795ZM588.446 524.629L586.094 526.491L586.105 526.505L586.116 526.518L588.446 524.629ZM585.689 546.364L583.863 543.984L583.855 543.99L585.689 546.364ZM555.245 546.364L553.419 548.744L555.245 546.364ZM565.273 539.452L563.007 541.419L563.027 541.441L563.047 541.464L565.273 539.452ZM575.461 525.868L573.297 527.946L573.318 527.968L573.34 527.989L575.461 525.868ZM566.072 514.601L563.742 516.491L563.751 516.502L563.76 516.513L566.072 514.601ZM574.822 514.601L572.514 512.685L572.51 512.689L574.822 514.601ZM575.022 502.455L572.651 504.293L572.672 504.32L572.693 504.347L575.022 502.455ZM565.872 502.375L563.564 500.459L563.551 500.474L563.539 500.489L565.872 502.375ZM549.411 534.178H552.411C552.411 530.926 553.263 528.452 554.79 526.543L552.448 524.669L550.105 522.795C547.583 525.947 546.411 529.813 546.411 534.178H549.411ZM552.448 524.669L554.778 526.558C556.572 524.345 558.293 523.184 559.89 522.712L559.04 519.835L558.19 516.958C555.099 517.871 552.425 519.933 550.117 522.78L552.448 524.669ZM559.04 519.835H562.04V519.675H559.04H556.04V519.835H559.04ZM559.04 519.675L560.27 516.939C558.403 516.1 556.898 514.847 555.715 513.135L553.247 514.841L550.779 516.547C552.579 519.15 554.936 521.12 557.81 522.411L559.04 519.675ZM553.247 514.841L555.738 513.17C554.681 511.593 554.049 509.47 554.049 506.61H551.049H548.049C548.049 510.356 548.883 513.72 550.755 516.512L553.247 514.841ZM551.049 506.61H554.049C554.049 502.657 555.414 499.739 558.077 497.534L556.163 495.223L554.25 492.913C550.094 496.354 548.049 501.027 548.049 506.61H551.049ZM556.163 495.223L558.068 497.541C560.796 495.3 564.815 493.988 570.507 493.988V490.988V487.988C563.946 487.988 558.403 489.5 554.259 492.906L556.163 495.223ZM570.507 490.988V493.988C576.184 493.988 580.151 495.332 582.817 497.62L584.77 495.343L586.724 493.067C582.624 489.547 577.082 487.988 570.507 487.988V490.988ZM584.77 495.343L582.836 497.636C585.54 499.918 586.884 502.82 586.884 506.61H589.884H592.884C592.884 501.131 590.82 496.522 586.705 493.05L584.77 495.343ZM589.884 506.61H586.884C586.884 509.568 586.218 511.734 585.108 513.322L587.567 515.04L590.026 516.759C592.006 513.925 592.884 510.471 592.884 506.61H589.884ZM587.567 515.04L585.104 513.328C583.91 515.045 582.457 516.175 580.72 516.826L581.774 519.635L582.827 522.444C585.778 521.338 588.187 519.404 590.03 516.753L587.567 515.04ZM581.774 519.635H578.774V519.795H581.774H584.774V519.635H581.774ZM581.774 519.795L580.979 522.688C582.627 523.14 584.348 524.286 586.094 526.491L588.446 524.629L590.798 522.767C588.496 519.859 585.769 517.781 582.569 516.902L581.774 519.795ZM588.446 524.629L586.116 526.518C587.659 528.423 588.523 530.903 588.523 534.178H591.523H594.523C594.523 529.783 593.335 525.896 590.777 522.74L588.446 524.629ZM591.523 534.178H588.523C588.523 538.439 586.971 541.6 583.863 543.984L585.689 546.364L587.515 548.744C592.185 545.162 594.523 540.199 594.523 534.178H591.523ZM585.689 546.364L583.855 543.99C580.651 546.465 576.292 547.839 570.507 547.839V550.839V553.839C577.241 553.839 583.003 552.23 587.523 548.738L585.689 546.364ZM570.507 550.839V547.839C564.693 547.839 560.303 546.464 557.071 543.984L555.245 546.364L553.419 548.744C557.963 552.231 563.749 553.839 570.507 553.839V550.839ZM555.245 546.364L557.071 543.984C553.963 541.6 552.411 538.439 552.411 534.178H549.411H546.411C546.411 540.199 548.748 545.162 553.419 548.744L555.245 546.364ZM563.435 532.66H560.435C560.435 536.052 561.081 539.199 563.007 541.419L565.273 539.452L567.539 537.486C567.015 536.882 566.435 535.501 566.435 532.66H563.435ZM565.273 539.452L563.047 541.464C564.973 543.595 567.579 544.53 570.467 544.53V541.53V538.53C568.934 538.53 568.076 538.08 567.499 537.441L565.273 539.452ZM570.467 541.53V544.53C573.359 544.53 575.954 543.56 577.847 541.379L575.581 539.412L573.315 537.446C572.758 538.088 571.944 538.53 570.467 538.53V541.53ZM575.581 539.412L577.847 541.379C579.77 539.162 580.419 536.034 580.419 532.66H577.419H574.419C574.419 535.466 573.842 536.839 573.315 537.446L575.581 539.412ZM577.419 532.66H580.419C580.419 529.191 579.746 525.91 577.582 523.747L575.461 525.868L573.34 527.989C573.786 528.436 574.419 529.683 574.419 532.66H577.419ZM575.461 525.868L577.625 523.79C575.715 521.801 573.235 520.87 570.467 520.87V523.87V526.87C571.801 526.87 572.65 527.271 573.297 527.946L575.461 525.868ZM570.467 523.87V520.87C567.698 520.87 565.219 521.799 563.271 523.747L565.393 525.868L567.514 527.989C568.23 527.273 569.134 526.87 570.467 526.87V523.87ZM565.393 525.868L563.271 523.747C561.108 525.91 560.435 529.191 560.435 532.66H563.435H566.435C566.435 529.683 567.068 528.436 567.514 527.989L565.393 525.868ZM564.354 508.448H561.354C561.354 511.508 561.998 514.341 563.742 516.491L566.072 514.601L568.402 512.711C567.855 512.037 567.354 510.769 567.354 508.448H564.354ZM566.072 514.601L563.76 516.513C565.471 518.581 567.781 519.679 570.467 519.679V516.679V513.679C569.584 513.679 568.964 513.391 568.384 512.689L566.072 514.601ZM570.467 516.679V519.679C573.142 519.679 575.433 518.569 577.134 516.513L574.822 514.601L572.51 512.689C571.92 513.403 571.308 513.679 570.467 513.679V516.679ZM574.822 514.601L577.13 516.517C578.917 514.365 579.58 511.521 579.58 508.448H576.58H573.58C573.58 510.755 573.071 512.013 572.514 512.685L574.822 514.601ZM576.58 508.448H579.58C579.58 505.455 579.027 502.627 577.35 500.563L575.022 502.455L572.693 504.347C573.094 504.84 573.58 506.007 573.58 508.448H576.58ZM575.022 502.455L577.392 500.617C575.683 498.413 573.186 497.497 570.467 497.497V500.497V503.497C571.796 503.497 572.336 503.887 572.651 504.293L575.022 502.455ZM570.467 500.497V497.497C567.788 497.497 565.309 498.356 563.564 500.459L565.872 502.375L568.181 504.291C568.513 503.89 569.097 503.497 570.467 503.497V500.497ZM565.872 502.375L563.539 500.489C561.877 502.546 561.354 505.421 561.354 508.448H564.354H567.354C567.354 505.881 567.844 504.708 568.205 504.261L565.872 502.375ZM600.469 524.669L598.138 522.78L598.132 522.788L598.126 522.795L600.469 524.669ZM607.061 519.835L607.911 522.712L610.061 522.077V519.835H607.061ZM607.061 519.675H610.061V517.734L608.291 516.939L607.061 519.675ZM601.268 514.841L598.777 516.512L598.788 516.529L598.8 516.547L601.268 514.841ZM604.185 495.223L602.28 492.905L602.271 492.913L604.185 495.223ZM632.792 495.343L630.838 497.62L630.847 497.628L630.857 497.636L632.792 495.343ZM635.588 515.04L633.129 513.322L633.125 513.328L635.588 515.04ZM629.795 519.635L628.742 516.826L626.795 517.556V519.635H629.795ZM629.795 519.795H626.795V522.082L629 522.688L629.795 519.795ZM636.467 524.629L634.115 526.491L634.126 526.505L634.137 526.518L636.467 524.629ZM633.711 546.364L631.885 543.984L631.877 543.99L633.711 546.364ZM603.266 546.364L601.44 548.744L603.266 546.364ZM613.294 539.452L611.029 541.419L611.048 541.441L611.069 541.464L613.294 539.452ZM623.482 525.868L621.318 527.946L621.339 527.968L621.361 527.989L623.482 525.868ZM614.093 514.601L611.764 516.491L611.772 516.502L611.781 516.513L614.093 514.601ZM622.843 514.601L620.535 512.685L620.531 512.689L622.843 514.601ZM623.043 502.455L620.672 504.293L620.693 504.32L620.715 504.347L623.043 502.455ZM613.893 502.375L611.585 500.459L611.573 500.474L611.561 500.489L613.893 502.375ZM597.432 534.178H600.432C600.432 530.926 601.285 528.452 602.812 526.543L600.469 524.669L598.126 522.795C595.605 525.947 594.432 529.813 594.432 534.178H597.432ZM600.469 524.669L602.8 526.558C604.593 524.345 606.315 523.184 607.911 522.712L607.061 519.835L606.211 516.958C603.12 517.871 600.447 519.933 598.138 522.78L600.469 524.669ZM607.061 519.835H610.061V519.675H607.061H604.061V519.835H607.061ZM607.061 519.675L608.291 516.939C606.424 516.1 604.919 514.847 603.736 513.135L601.268 514.841L598.8 516.547C600.6 519.15 602.957 521.12 605.832 522.411L607.061 519.675ZM601.268 514.841L603.76 513.17C602.702 511.593 602.071 509.47 602.071 506.61H599.071H596.071C596.071 510.356 596.904 513.72 598.777 516.512L601.268 514.841ZM599.071 506.61H602.071C602.071 502.657 603.435 499.739 606.098 497.534L604.185 495.223L602.271 492.913C598.115 496.354 596.071 501.027 596.071 506.61H599.071ZM604.185 495.223L606.089 497.541C608.817 495.3 612.836 493.988 618.528 493.988V490.988V487.988C611.968 487.988 606.424 489.5 602.28 492.906L604.185 495.223ZM618.528 490.988V493.988C624.206 493.988 628.173 495.332 630.838 497.62L632.792 495.343L634.745 493.067C630.645 489.547 625.103 487.988 618.528 487.988V490.988ZM632.792 495.343L630.857 497.636C633.561 499.918 634.906 502.82 634.906 506.61H637.906H640.906C640.906 501.131 638.841 496.522 634.726 493.05L632.792 495.343ZM637.906 506.61H634.906C634.906 509.568 634.239 511.734 633.129 513.322L635.588 515.04L638.047 516.759C640.027 513.925 640.906 510.471 640.906 506.61H637.906ZM635.588 515.04L633.125 513.328C631.932 515.045 630.479 516.175 628.742 516.826L629.795 519.635L630.848 522.444C633.799 521.338 636.209 519.404 638.052 516.753L635.588 515.04ZM629.795 519.635H626.795V519.795H629.795H632.795V519.635H629.795ZM629.795 519.795L629 522.688C630.648 523.14 632.369 524.286 634.115 526.491L636.467 524.629L638.82 522.767C636.517 519.859 633.79 517.781 630.59 516.902L629.795 519.795ZM636.467 524.629L634.137 526.518C635.681 528.423 636.544 530.903 636.544 534.178H639.544H642.544C642.544 529.783 641.356 525.896 638.798 522.74L636.467 524.629ZM639.544 534.178H636.544C636.544 538.439 634.992 541.6 631.885 543.984L633.711 546.364L635.536 548.744C640.207 545.162 642.544 540.199 642.544 534.178H639.544ZM633.711 546.364L631.877 543.99C628.672 546.465 624.313 547.839 618.528 547.839V550.839V553.839C625.262 553.839 631.025 552.23 635.544 548.738L633.711 546.364ZM618.528 550.839V547.839C612.714 547.839 608.325 546.464 605.092 543.984L603.266 546.364L601.44 548.744C605.984 552.231 611.77 553.839 618.528 553.839V550.839ZM603.266 546.364L605.092 543.984C601.984 541.6 600.432 538.439 600.432 534.178H597.432H594.432C594.432 540.199 596.77 545.162 601.44 548.744L603.266 546.364ZM611.456 532.66H608.456C608.456 536.052 609.102 539.199 611.029 541.419L613.294 539.452L615.56 537.486C615.036 536.882 614.456 535.501 614.456 532.66H611.456ZM613.294 539.452L611.069 541.464C612.994 543.595 615.6 544.53 618.488 544.53V541.53V538.53C616.955 538.53 616.098 538.08 615.52 537.441L613.294 539.452ZM618.488 541.53V544.53C621.38 544.53 623.975 543.56 625.868 541.379L623.602 539.412L621.337 537.446C620.779 538.088 619.965 538.53 618.488 538.53V541.53ZM623.602 539.412L625.868 541.379C627.791 539.162 628.44 536.034 628.44 532.66H625.44H622.44C622.44 535.466 621.864 536.839 621.337 537.446L623.602 539.412ZM625.44 532.66H628.44C628.44 529.191 627.767 525.91 625.604 523.747L623.482 525.868L621.361 527.989C621.808 528.436 622.44 529.683 622.44 532.66H625.44ZM623.482 525.868L625.647 523.79C623.737 521.801 621.256 520.87 618.488 520.87V523.87V526.87C619.822 526.87 620.671 527.271 621.318 527.946L623.482 525.868ZM618.488 523.87V520.87C615.72 520.87 613.24 521.799 611.293 523.747L613.414 525.868L615.535 527.989C616.252 527.273 617.155 526.87 618.488 526.87V523.87ZM613.414 525.868L611.293 523.747C609.129 525.91 608.456 529.191 608.456 532.66H611.456H614.456C614.456 529.683 615.089 528.436 615.535 527.989L613.414 525.868ZM612.375 508.448H609.375C609.375 511.508 610.019 514.341 611.764 516.491L614.093 514.601L616.423 512.711C615.877 512.037 615.375 510.769 615.375 508.448H612.375ZM614.093 514.601L611.781 516.513C613.492 518.581 615.802 519.679 618.488 519.679V516.679V513.679C617.605 513.679 616.985 513.391 616.405 512.689L614.093 514.601ZM618.488 516.679V519.679C621.163 519.679 623.455 518.569 625.155 516.513L622.843 514.601L620.531 512.689C619.941 513.403 619.329 513.679 618.488 513.679V516.679ZM622.843 514.601L625.151 516.517C626.938 514.365 627.601 511.521 627.601 508.448H624.601H621.601C621.601 510.755 621.092 512.013 620.535 512.685L622.843 514.601ZM624.601 508.448H627.601C627.601 505.455 627.048 502.627 625.371 500.563L623.043 502.455L620.715 504.347C621.115 504.84 621.601 506.007 621.601 508.448H624.601ZM623.043 502.455L625.414 500.617C623.705 498.413 621.208 497.497 618.488 497.497V500.497V503.497C619.817 503.497 620.357 503.887 620.672 504.293L623.043 502.455ZM618.488 500.497V497.497C615.809 497.497 613.33 498.356 611.585 500.459L613.893 502.375L616.202 504.291C616.535 503.89 617.118 503.497 618.488 503.497V500.497ZM613.893 502.375L611.561 500.489C609.898 502.546 609.375 505.421 609.375 508.448H612.375H615.375C615.375 505.881 615.865 504.708 616.226 504.261L613.893 502.375ZM681.452 496.382L679.331 498.503L679.339 498.511L679.347 498.519L681.452 496.382ZM681.212 545.565L679.162 543.376L679.154 543.383L681.212 545.565ZM666.629 550.839L666.643 547.839H666.642L666.629 550.839ZM651.766 545.525L649.653 547.654L649.661 547.662L651.766 545.525ZM661.875 539.093L659.413 540.807L659.423 540.822L659.434 540.836L661.875 539.093ZM661.875 502.934L659.434 501.191L659.423 501.205L659.413 501.22L661.875 502.934ZM646.413 529.863H649.413V511.964H646.413H643.413V529.863H646.413ZM646.413 511.964H649.413C649.413 505.817 651.054 501.5 653.943 498.568L651.806 496.462L649.67 494.356C645.367 498.722 643.413 504.74 643.413 511.964H646.413ZM651.806 496.462L653.943 498.568C656.852 495.616 660.952 493.988 666.629 493.988V490.988V487.988C659.734 487.988 653.952 490.01 649.67 494.356L651.806 496.462ZM666.629 490.988V493.988C672.319 493.988 676.424 495.597 679.331 498.503L681.452 496.382L683.573 494.261C679.288 489.976 673.512 487.988 666.629 487.988V490.988ZM681.452 496.382L679.347 498.519C682.223 501.353 683.886 505.666 683.886 511.964H686.886H689.886C689.886 504.625 687.927 498.55 683.558 494.245L681.452 496.382ZM686.886 511.964H683.886V529.863H686.886H689.886V511.964H686.886ZM686.886 529.863H683.886C683.886 536.25 682.154 540.572 679.162 543.376L681.212 545.565L683.263 547.755C687.835 543.473 689.886 537.327 689.886 529.863H686.886ZM681.212 545.565L679.154 543.383C676.046 546.315 671.968 547.863 666.643 547.839L666.629 550.839L666.616 553.839C673.223 553.868 678.868 551.901 683.271 547.747L681.212 545.565ZM666.629 550.839L666.642 547.839C660.868 547.815 656.745 546.218 653.872 543.388L651.766 545.525L649.661 547.662C653.927 551.864 659.712 553.81 666.617 553.839L666.629 550.839ZM651.766 545.525L653.88 543.396C651.063 540.6 649.413 536.267 649.413 529.863H646.413H643.413C643.413 537.257 645.332 543.365 649.653 547.654L651.766 545.525ZM660.317 532.7H657.317C657.317 535.782 657.884 538.612 659.413 540.807L661.875 539.093L664.337 537.378C663.788 536.59 663.317 535.158 663.317 532.7H660.317ZM661.875 539.093L659.434 540.836C661.152 543.242 663.721 544.33 666.629 544.33V541.33V538.33C665.329 538.33 664.729 537.927 664.316 537.349L661.875 539.093ZM666.629 541.33V544.33C669.538 544.33 672.107 543.242 673.825 540.836L671.384 539.093L668.943 537.349C668.53 537.927 667.93 538.33 666.629 538.33V541.33ZM671.384 539.093L673.825 540.836C675.397 538.636 675.982 535.794 675.982 532.7H672.982H669.982C669.982 535.146 669.502 536.566 668.943 537.349L671.384 539.093ZM672.982 532.7H675.982V509.407H672.982H669.982V532.7H672.982ZM672.982 509.407H675.982C675.982 506.274 675.402 503.399 673.825 501.191L671.384 502.934L668.943 504.678C669.496 505.453 669.982 506.893 669.982 509.407H672.982ZM671.384 502.934L673.825 501.191C672.107 498.786 669.538 497.697 666.629 497.697V500.697V503.697C667.93 503.697 668.53 504.1 668.943 504.678L671.384 502.934ZM666.629 500.697V497.697C663.721 497.697 661.152 498.786 659.434 501.191L661.875 502.934L664.316 504.678C664.729 504.1 665.329 503.697 666.629 503.697V500.697ZM661.875 502.934L659.413 501.22C657.879 503.423 657.317 506.286 657.317 509.407H660.317H663.317C663.317 506.881 663.793 505.429 664.337 504.649L661.875 502.934ZM660.317 509.407H657.317V532.7H660.317H663.317V509.407H660.317ZM752.004 496.382L749.883 498.503L749.891 498.511L749.898 498.519L752.004 496.382ZM751.764 545.565L749.714 543.376L749.706 543.383L751.764 545.565ZM737.181 550.839L737.195 547.839H737.194L737.181 550.839ZM722.318 545.525L720.205 547.654L720.213 547.662L722.318 545.525ZM732.427 539.093L729.965 540.807L729.975 540.822L729.986 540.836L732.427 539.093ZM732.427 502.934L729.986 501.191L729.975 501.205L729.965 501.22L732.427 502.934ZM716.965 529.863H719.965V511.964H716.965H713.965V529.863H716.965ZM716.965 511.964H719.965C719.965 505.817 721.606 501.5 724.495 498.568L722.358 496.462L720.221 494.356C715.919 498.722 713.965 504.74 713.965 511.964H716.965ZM722.358 496.462L724.495 498.568C727.404 495.616 731.504 493.988 737.181 493.988V490.988V487.988C730.286 487.988 724.504 490.01 720.221 494.356L722.358 496.462ZM737.181 490.988V493.988C742.871 493.988 746.976 495.597 749.883 498.503L752.004 496.382L754.125 494.261C749.84 489.976 744.064 487.988 737.181 487.988V490.988ZM752.004 496.382L749.898 498.519C752.774 501.353 754.438 505.666 754.438 511.964H757.438H760.438C760.438 504.625 758.479 498.55 754.11 494.245L752.004 496.382ZM757.438 511.964H754.438V529.863H757.438H760.438V511.964H757.438ZM757.438 529.863H754.438C754.438 536.25 752.706 540.572 749.714 543.376L751.764 545.565L753.815 547.755C758.387 543.473 760.438 537.327 760.438 529.863H757.438ZM751.764 545.565L749.706 543.383C746.597 546.315 742.52 547.863 737.195 547.839L737.181 550.839L737.168 553.839C743.775 553.868 749.42 551.901 753.823 547.747L751.764 545.565ZM737.181 550.839L737.194 547.839C731.42 547.815 727.297 546.218 724.424 543.388L722.318 545.525L720.213 547.662C724.479 551.864 730.264 553.81 737.169 553.839L737.181 550.839ZM722.318 545.525L724.432 543.396C721.615 540.6 719.965 536.267 719.965 529.863H716.965H713.965C713.965 537.257 715.884 543.365 720.205 547.654L722.318 545.525ZM730.869 532.7H727.869C727.869 535.782 728.436 538.612 729.965 540.807L732.427 539.093L734.889 537.378C734.34 536.59 733.869 535.158 733.869 532.7H730.869ZM732.427 539.093L729.986 540.836C731.703 543.242 734.273 544.33 737.181 544.33V541.33V538.33C735.881 538.33 735.281 537.927 734.868 537.349L732.427 539.093ZM737.181 541.33V544.33C740.089 544.33 742.659 543.242 744.377 540.836L741.936 539.093L739.495 537.349C739.082 537.927 738.481 538.33 737.181 538.33V541.33ZM741.936 539.093L744.377 540.836C745.949 538.636 746.534 535.794 746.534 532.7H743.534H740.534C740.534 535.146 740.054 536.566 739.495 537.349L741.936 539.093ZM743.534 532.7H746.534V509.407H743.534H740.534V532.7H743.534ZM743.534 509.407H746.534C746.534 506.274 745.954 503.399 744.377 501.191L741.936 502.934L739.495 504.678C740.048 505.453 740.534 506.893 740.534 509.407H743.534ZM741.936 502.934L744.377 501.191C742.659 498.786 740.089 497.697 737.181 497.697V500.697V503.697C738.481 503.697 739.082 504.1 739.495 504.678L741.936 502.934ZM737.181 500.697V497.697C734.273 497.697 731.703 498.786 729.986 501.191L732.427 502.934L734.868 504.678C735.281 504.1 735.881 503.697 737.181 503.697V500.697ZM732.427 502.934L729.965 501.22C728.431 503.423 727.869 506.286 727.869 509.407H730.869H733.869C733.869 506.881 734.345 505.429 734.889 504.649L732.427 502.934ZM730.869 509.407H727.869V532.7H730.869H733.869V509.407H730.869ZM787.2 550H784.2V553H787.2V550ZM787.2 535.297L784.681 533.667L784.2 534.411V535.297H787.2ZM787.64 534.618L790.158 536.248L790.64 535.504V534.618H787.64ZM787.64 509.487H790.64V506.487H787.64V509.487ZM787.32 509.487V506.487H785.613L784.741 507.954L787.32 509.487ZM776.253 528.105L773.674 526.572L770.98 531.105H776.253V528.105ZM792.634 528.105V531.105H793.074L793.496 530.979L792.634 528.105ZM793.832 527.746V524.746H793.392L792.97 524.872L793.832 527.746ZM806.658 527.746H809.658V524.746H806.658V527.746ZM806.658 538.533V541.533H809.658V538.533H806.658ZM763.388 538.533H760.388V541.533H763.388V538.533ZM763.388 528.625L760.917 526.924L760.388 527.692V528.625H763.388ZM788.718 491.827V488.827H787.141L786.247 490.126L788.718 491.827ZM799.985 491.827H802.985V488.827H799.985V491.827ZM799.985 550V553H802.985V550H799.985ZM787.2 550H790.2V535.297H787.2H784.2V550H787.2ZM787.2 535.297L789.719 536.927L790.158 536.248L787.64 534.618L785.121 532.988L784.681 533.667L787.2 535.297ZM787.64 534.618H790.64V509.487H787.64H784.64V534.618H787.64ZM787.64 509.487V506.487H787.32V509.487V512.487H787.64V509.487ZM787.32 509.487L784.741 507.954L773.674 526.572L776.253 528.105L778.832 529.638L789.899 511.02L787.32 509.487ZM776.253 528.105V531.105H792.634V528.105V525.105H776.253V528.105ZM792.634 528.105L793.496 530.979L794.695 530.619L793.832 527.746L792.97 524.872L791.772 525.232L792.634 528.105ZM793.832 527.746V530.746H806.658V527.746V524.746H793.832V527.746ZM806.658 527.746H803.658V538.533H806.658H809.658V527.746H806.658ZM806.658 538.533V535.533H763.388V538.533V541.533H806.658V538.533ZM763.388 538.533H766.388V528.625H763.388H760.388V538.533H763.388ZM763.388 528.625L765.859 530.326L791.189 493.528L788.718 491.827L786.247 490.126L760.917 526.924L763.388 528.625ZM788.718 491.827V494.827H799.985V491.827V488.827H788.718V491.827ZM799.985 491.827H796.985V550H799.985H802.985V491.827H799.985ZM799.985 550V547H787.2V550V553H799.985V550ZM812.368 550H809.368V553H812.368V550ZM812.368 541.33L810.207 539.249L809.368 540.12V541.33H812.368ZM833.383 519.515L835.544 521.597L835.604 521.534L835.661 521.468L833.383 519.515ZM828.269 502.615L830.436 504.69L830.447 504.678L830.458 504.667L828.269 502.615ZM826.471 511.644V514.644H829.471V511.644H826.471ZM812.368 511.644H809.368V514.644H812.368V511.644ZM848.086 495.343L846.133 497.62L846.143 497.629L848.086 495.343ZM853.201 507.09H856.201V507.082L856.201 507.074L853.201 507.09ZM850.843 516.958L848.205 515.53L848.2 515.54L848.195 515.549L850.843 516.958ZM844.211 525.828L842.042 523.755L841.98 523.821L841.921 523.89L844.211 525.828ZM833.184 538.853L830.894 536.914L826.713 541.853H833.184V538.853ZM854.559 538.853H857.559V535.853H854.559V538.853ZM854.559 550V553H857.559V550H854.559ZM812.368 550H815.368V541.33H812.368H809.368V550H812.368ZM812.368 541.33L814.528 543.411L835.544 521.597L833.383 519.515L831.223 517.434L810.207 539.249L812.368 541.33ZM833.383 519.515L835.661 521.468C837.364 519.481 838.841 517.434 840.084 515.324L837.499 513.802L834.914 512.279C833.865 514.059 832.599 515.821 831.106 517.563L833.383 519.515ZM837.499 513.802L840.084 515.324C841.477 512.96 842.217 510.428 842.217 507.769H839.217H836.217C836.217 509.265 835.812 510.755 834.914 512.279L837.499 513.802ZM839.217 507.769H842.217C842.217 504.895 841.582 502.083 839.569 500.164L837.499 502.335L835.429 504.506C835.706 504.771 836.217 505.582 836.217 507.769H839.217ZM837.499 502.335L839.569 500.164C837.768 498.447 835.473 497.697 832.984 497.697V500.697V503.697C834.224 503.697 834.939 504.04 835.429 504.506L837.499 502.335ZM832.984 500.697V497.697C830.311 497.697 827.912 498.61 826.081 500.563L828.269 502.615L830.458 504.667C831.024 504.063 831.768 503.697 832.984 503.697V500.697ZM828.269 502.615L826.102 500.54C825.007 501.684 824.376 503.17 824.006 504.693C823.631 506.235 823.471 508.026 823.471 510.006H826.471H829.471C829.471 508.311 829.612 507.032 829.836 506.111C830.065 505.17 830.333 504.797 830.436 504.69L828.269 502.615ZM826.471 510.006H823.471V511.644H826.471H829.471V510.006H826.471ZM826.471 511.644V508.644H812.368V511.644V514.644H826.471V511.644ZM812.368 511.644H815.368V508.208H812.368H809.368V511.644H812.368ZM812.368 508.208H815.368C815.368 504.119 816.89 500.837 820.06 498.152L818.121 495.863L816.182 493.574C811.681 497.387 809.368 502.336 809.368 508.208H812.368ZM818.121 495.863L820.06 498.152C823.233 495.463 827.525 493.988 833.224 493.988V490.988V487.988C826.457 487.988 820.68 489.763 816.182 493.574L818.121 495.863ZM833.224 490.988V493.988C839.357 493.988 843.498 495.358 846.133 497.62L848.086 495.343L850.04 493.067C845.91 489.522 840.142 487.988 833.224 487.988V490.988ZM848.086 495.343L846.143 497.629C848.778 499.869 850.178 502.912 850.201 507.106L853.201 507.09L856.201 507.074C856.17 501.359 854.161 496.57 850.03 493.058L848.086 495.343ZM853.201 507.09H850.201C850.201 510.324 849.513 513.113 848.205 515.53L850.843 516.958L853.482 518.386C855.316 514.996 856.201 511.207 856.201 507.09H853.201ZM850.843 516.958L848.195 515.549C846.808 518.156 844.777 520.894 842.042 523.755L844.211 525.828L846.38 527.901C849.398 524.743 851.789 521.567 853.492 518.367L850.843 516.958ZM844.211 525.828L841.921 523.89L830.894 536.914L833.184 538.853L835.473 540.791L846.501 527.766L844.211 525.828ZM833.184 538.853V541.853H854.559V538.853V535.853H833.184V538.853ZM854.559 538.853H851.559V550H854.559H857.559V538.853H854.559ZM854.559 550V547H812.368V550V553H854.559V550ZM896.068 496.382L893.946 498.503L893.954 498.511L893.962 498.519L896.068 496.382ZM895.828 545.565L893.777 543.376L893.77 543.383L895.828 545.565ZM881.245 550.839L881.258 547.839H881.258L881.245 550.839ZM866.382 545.525L864.269 547.654L864.277 547.662L866.382 545.525ZM876.49 539.093L874.029 540.807L874.039 540.822L874.049 540.836L876.49 539.093ZM876.49 502.934L874.049 501.191L874.039 501.205L874.029 501.22L876.49 502.934ZM861.028 529.863H864.028V511.964H861.028H858.028V529.863H861.028ZM861.028 511.964H864.028C864.028 505.817 865.67 501.5 868.559 498.568L866.422 496.462L864.285 494.356C859.983 498.722 858.028 504.74 858.028 511.964H861.028ZM866.422 496.462L868.559 498.568C871.468 495.616 875.568 493.988 881.245 493.988V490.988V487.988C874.35 487.988 868.568 490.01 864.285 494.356L866.422 496.462ZM881.245 490.988V493.988C886.935 493.988 891.04 495.597 893.946 498.503L896.068 496.382L898.189 494.261C893.904 489.976 888.127 487.988 881.245 487.988V490.988ZM896.068 496.382L893.962 498.519C896.838 501.353 898.501 505.666 898.501 511.964H901.501H904.501C904.501 504.625 902.542 498.55 898.173 494.245L896.068 496.382ZM901.501 511.964H898.501V529.863H901.501H904.501V511.964H901.501ZM901.501 529.863H898.501C898.501 536.25 896.77 540.572 893.777 543.376L895.828 545.565L897.879 547.755C902.451 543.473 904.501 537.327 904.501 529.863H901.501ZM895.828 545.565L893.77 543.383C890.661 546.315 886.584 547.863 881.258 547.839L881.245 550.839L881.232 553.839C887.839 553.868 893.484 551.901 897.887 547.747L895.828 545.565ZM881.245 550.839L881.258 547.839C875.484 547.815 871.36 546.218 868.487 543.388L866.382 545.525L864.277 547.662C868.542 551.864 874.327 553.81 881.232 553.839L881.245 550.839ZM866.382 545.525L868.495 543.396C865.678 540.6 864.028 536.267 864.028 529.863H861.028H858.028C858.028 537.257 859.947 543.365 864.269 547.654L866.382 545.525ZM874.932 532.7H871.932C871.932 535.782 872.5 538.612 874.029 540.807L876.49 539.093L878.952 537.378C878.403 536.59 877.932 535.158 877.932 532.7H874.932ZM876.49 539.093L874.049 540.836C875.767 543.242 878.337 544.33 881.245 544.33V541.33V538.33C879.945 538.33 879.344 537.927 878.932 537.349L876.49 539.093ZM881.245 541.33V544.33C884.153 544.33 886.723 543.242 888.441 540.836L885.999 539.093L883.558 537.349C883.145 537.927 882.545 538.33 881.245 538.33V541.33ZM885.999 539.093L888.441 540.836C890.012 538.636 890.598 535.794 890.598 532.7H887.598H884.598C884.598 535.146 884.117 536.566 883.558 537.349L885.999 539.093ZM887.598 532.7H890.598V509.407H887.598H884.598V532.7H887.598ZM887.598 509.407H890.598C890.598 506.274 890.018 503.399 888.441 501.191L885.999 502.934L883.558 504.678C884.112 505.453 884.598 506.893 884.598 509.407H887.598ZM885.999 502.934L888.441 501.191C886.723 498.786 884.153 497.697 881.245 497.697V500.697V503.697C882.545 503.697 883.145 504.1 883.558 504.678L885.999 502.934ZM881.245 500.697V497.697C878.337 497.697 875.767 498.786 874.049 501.191L876.49 502.934L878.932 504.678C879.344 504.1 879.945 503.697 881.245 503.697V500.697ZM876.49 502.934L874.029 501.22C872.494 503.423 871.932 506.286 871.932 509.407H874.932H877.932C877.932 506.881 878.409 505.429 878.952 504.649L876.49 502.934ZM874.932 509.407H871.932V532.7H874.932H877.932V509.407H874.932Z" fill="black" mask="url(#path-11-outside-5_17007_2267)"/> +<path d="M1055.49 109C1055.81 107.808 1056.11 106.89 1056.11 105.59C1056.11 98.3596 1050.63 92.429 1043.57 91.6707C1045.12 86.8503 1045.93 81.7321 1045.93 76.3972C1045.93 48.5582 1023.32 26 995.427 26C972.523 26 953.173 41.2464 947.013 62.0986C944.272 60.0404 940.853 58.7947 937.162 58.7947C928.098 58.7947 920.744 66.1336 920.744 75.1786C920.744 75.2598 920.744 75.341 920.744 75.4223C919.604 75.5306 918.491 75.7202 917.378 75.9097C907.609 68.7604 895.804 64.265 883.049 63.6151C852.519 62.0444 826.358 81.8133 818.243 109.3C814.77 106.673 810.455 105.103 805.76 105.103C794.254 105.103 784.945 114.418 784.945 125.874C784.945 125.982 784.945 126.063 784.945 126.172C784.674 126.172 784.375 126.226 784.104 126.253C752.841 129.584 755.582 175.973 787.008 175.973H1052.53C1071.01 175.973 1085.99 161.024 1085.99 142.582C1085.99 125.17 1072.63 110.871 1055.59 109.327L1055.49 109Z" fill="white" stroke="black" stroke-width="4"/> +<mask id="path-14-outside-6_17007_2267" maskUnits="userSpaceOnUse" x="383" y="171" width="70" height="83" fill="black"> +<rect fill="white" x="383" y="171" width="70" height="83"/> +<path d="M404.667 205.602C409.4 192.936 404.667 176 404.667 176C404.667 176 412.506 196.568 426.333 202.219C434.206 205.436 448 203.91 448 203.91C448 203.91 436.705 212.773 433 220.825C428.31 231.018 431.333 249.581 431.333 249.581C431.333 249.581 422.653 231.856 412.167 227.591C402.18 223.53 388 227.591 388 227.591C388 227.591 400.411 216.991 404.667 205.602Z"/> +</mask> +<path d="M404.667 205.602C409.4 192.936 404.667 176 404.667 176C404.667 176 412.506 196.568 426.333 202.219C434.206 205.436 448 203.91 448 203.91C448 203.91 436.705 212.773 433 220.825C428.31 231.018 431.333 249.581 431.333 249.581C431.333 249.581 422.653 231.856 412.167 227.591C402.18 223.53 388 227.591 388 227.591C388 227.591 400.411 216.991 404.667 205.602Z" fill="#FFD25C"/> +<path d="M404.667 176L408.404 174.575C407.643 172.578 405.445 171.532 403.415 172.201C401.384 172.87 400.239 175.018 400.814 177.077L404.667 176ZM404.667 205.602L408.414 207.002V207.002L404.667 205.602ZM388 227.591L385.402 224.55C383.971 225.772 383.586 227.826 384.476 229.484C385.367 231.142 387.292 231.955 389.101 231.437L388 227.591ZM412.167 227.591L410.66 231.297V231.297L412.167 227.591ZM431.333 249.581L427.741 251.34C428.613 253.121 430.658 253.994 432.548 253.392C434.437 252.79 435.6 250.895 435.281 248.938L431.333 249.581ZM433 220.825L436.634 222.497V222.497L433 220.825ZM448 203.91L450.469 207.057C451.875 205.954 452.379 204.052 451.703 202.398C451.027 200.743 449.336 199.738 447.56 199.934L448 203.91ZM426.333 202.219L427.846 198.516L426.333 202.219ZM404.667 176C400.814 177.077 400.814 177.076 400.814 177.075C400.814 177.075 400.814 177.074 400.814 177.074C400.813 177.073 400.813 177.073 400.813 177.073C400.813 177.073 400.813 177.073 400.814 177.075C400.815 177.079 400.817 177.086 400.82 177.098C400.826 177.121 400.837 177.159 400.851 177.213C400.879 177.32 400.922 177.487 400.977 177.709C401.086 178.153 401.241 178.816 401.415 179.655C401.764 181.338 402.183 183.712 402.462 186.456C403.031 192.047 402.967 198.721 400.92 204.201L404.667 205.602L408.414 207.002C411.099 199.816 411.036 191.69 410.421 185.646C410.108 182.573 409.64 179.922 409.249 178.033C409.053 177.087 408.876 176.327 408.745 175.796C408.679 175.53 408.625 175.321 408.587 175.174C408.567 175.1 408.552 175.042 408.54 175C408.534 174.979 408.53 174.962 408.526 174.95C408.525 174.943 408.523 174.938 408.522 174.933C408.521 174.931 408.521 174.929 408.52 174.928C408.52 174.927 408.52 174.926 408.52 174.925C408.519 174.924 408.519 174.923 404.667 176ZM404.667 205.602L400.92 204.201C399.052 209.199 395.277 214.254 391.753 218.204C390.022 220.144 388.416 221.747 387.247 222.861C386.663 223.417 386.191 223.849 385.869 224.137C385.709 224.281 385.586 224.389 385.507 224.459C385.467 224.494 385.438 224.519 385.42 224.534C385.411 224.542 385.405 224.547 385.402 224.55C385.401 224.551 385.4 224.552 385.4 224.552C385.4 224.552 385.4 224.551 385.4 224.551C385.401 224.551 385.401 224.551 385.401 224.551C385.402 224.55 385.402 224.55 388 227.591C390.598 230.633 390.599 230.632 390.599 230.632C390.599 230.632 390.6 230.631 390.601 230.631C390.602 230.63 390.603 230.628 390.604 230.627C390.607 230.625 390.611 230.622 390.616 230.618C390.624 230.61 390.636 230.6 390.651 230.587C390.681 230.562 390.722 230.526 390.774 230.48C390.878 230.389 391.027 230.258 391.214 230.09C391.588 229.754 392.118 229.269 392.765 228.653C394.055 227.424 395.818 225.665 397.722 223.53C401.467 219.333 406.025 213.393 408.414 207.002L404.667 205.602ZM388 227.591C389.101 231.437 389.101 231.437 389.1 231.437C389.1 231.437 389.099 231.437 389.099 231.437C389.098 231.438 389.098 231.438 389.097 231.438C389.097 231.438 389.097 231.438 389.098 231.438C389.1 231.437 389.106 231.435 389.115 231.433C389.132 231.428 389.163 231.42 389.206 231.408C389.293 231.385 389.429 231.348 389.611 231.302C389.974 231.21 390.518 231.079 391.207 230.932C392.589 230.637 394.532 230.282 396.759 230.046C401.339 229.561 406.586 229.64 410.66 231.297L412.167 227.591L413.674 223.886C407.76 221.481 400.924 221.56 395.917 222.09C393.351 222.362 391.125 222.769 389.536 223.108C388.739 223.279 388.098 223.433 387.647 223.547C387.421 223.604 387.243 223.651 387.117 223.686C387.054 223.703 387.004 223.716 386.967 223.727C386.949 223.732 386.934 223.736 386.923 223.739C386.917 223.741 386.912 223.742 386.908 223.743C386.906 223.744 386.904 223.744 386.903 223.745C386.902 223.745 386.901 223.745 386.9 223.745C386.899 223.746 386.899 223.746 388 227.591ZM412.167 227.591L410.66 231.297C414.741 232.957 418.966 237.575 422.407 242.482C424.055 244.832 425.399 247.066 426.332 248.714C426.796 249.536 427.155 250.206 427.395 250.665C427.515 250.894 427.605 251.07 427.663 251.185C427.692 251.243 427.714 251.285 427.727 251.311C427.733 251.324 427.738 251.333 427.74 251.338C427.741 251.341 427.742 251.342 427.742 251.343C427.742 251.343 427.742 251.343 427.742 251.342C427.742 251.342 427.742 251.342 427.742 251.341C427.741 251.341 427.741 251.34 431.333 249.581C434.926 247.822 434.925 247.821 434.925 247.82C434.925 247.82 434.924 247.819 434.924 247.818C434.923 247.817 434.922 247.815 434.921 247.813C434.92 247.809 434.917 247.804 434.914 247.798C434.908 247.786 434.9 247.769 434.89 247.749C434.869 247.708 434.84 247.65 434.803 247.577C434.729 247.43 434.622 247.221 434.484 246.957C434.209 246.43 433.808 245.682 433.295 244.776C432.272 242.967 430.791 240.503 428.958 237.889C425.437 232.867 420.078 226.491 413.674 223.886L412.167 227.591ZM431.333 249.581C435.281 248.938 435.281 248.939 435.281 248.939C435.282 248.939 435.282 248.94 435.282 248.94C435.282 248.94 435.282 248.94 435.282 248.94C435.282 248.939 435.281 248.938 435.281 248.935C435.28 248.93 435.278 248.92 435.276 248.906C435.272 248.877 435.265 248.832 435.255 248.77C435.237 248.647 435.209 248.459 435.174 248.212C435.105 247.717 435.01 246.99 434.91 246.082C434.709 244.261 434.487 241.734 434.406 238.911C434.239 233.075 434.703 226.694 436.634 222.497L433 220.825L429.366 219.153C426.607 225.15 426.238 233.146 426.41 239.14C426.498 242.232 426.74 244.983 426.959 246.961C427.068 247.952 427.173 248.755 427.251 249.316C427.29 249.596 427.322 249.816 427.346 249.97C427.357 250.047 427.367 250.107 427.373 250.149C427.377 250.171 427.379 250.188 427.381 250.2C427.382 250.206 427.383 250.211 427.384 250.215C427.384 250.217 427.385 250.219 427.385 250.221C427.385 250.221 427.385 250.222 427.385 250.223C427.385 250.223 427.385 250.224 431.333 249.581ZM433 220.825L436.634 222.497C438.163 219.175 441.458 215.373 444.69 212.204C446.254 210.67 447.713 209.372 448.78 208.458C449.312 208.003 449.743 207.645 450.037 207.405C450.184 207.285 450.297 207.194 450.37 207.136C450.407 207.106 450.434 207.085 450.451 207.071C450.459 207.065 450.465 207.06 450.468 207.058C450.47 207.057 450.47 207.056 450.471 207.056C450.471 207.056 450.471 207.056 450.47 207.056C450.47 207.056 450.47 207.056 450.47 207.056C450.47 207.057 450.469 207.057 448 203.91C445.531 200.763 445.53 200.764 445.53 200.764C445.53 200.764 445.529 200.765 445.529 200.765C445.528 200.766 445.527 200.767 445.525 200.768C445.523 200.77 445.519 200.772 445.516 200.775C445.508 200.781 445.497 200.79 445.484 200.8C445.458 200.821 445.421 200.85 445.374 200.888C445.28 200.963 445.147 201.07 444.978 201.208C444.64 201.484 444.16 201.882 443.575 202.383C442.408 203.383 440.811 204.803 439.089 206.492C435.747 209.768 431.542 214.423 429.366 219.153L433 220.825ZM448 203.91C447.56 199.934 447.561 199.934 447.561 199.934C447.561 199.934 447.562 199.934 447.562 199.934C447.562 199.934 447.562 199.934 447.562 199.934C447.562 199.934 447.561 199.934 447.56 199.934C447.556 199.935 447.549 199.936 447.539 199.937C447.519 199.939 447.486 199.942 447.442 199.947C447.352 199.956 447.214 199.969 447.032 199.986C446.669 200.018 446.132 200.063 445.46 200.107C444.113 200.195 442.239 200.281 440.137 200.271C435.783 200.25 431.026 199.815 427.846 198.516L426.333 202.219L424.82 205.921C429.513 207.839 435.59 208.25 440.1 208.271C442.431 208.282 444.498 208.187 445.983 208.09C446.727 208.041 447.33 207.991 447.751 207.953C447.962 207.934 448.128 207.918 448.245 207.906C448.303 207.9 448.349 207.896 448.381 207.892C448.398 207.89 448.411 207.889 448.42 207.888C448.425 207.887 448.429 207.887 448.433 207.887C448.434 207.886 448.436 207.886 448.437 207.886C448.437 207.886 448.438 207.886 448.438 207.886C448.439 207.886 448.44 207.886 448 203.91ZM426.333 202.219L427.846 198.516C422.125 196.178 417.269 190.518 413.698 184.857C411.961 182.103 410.626 179.505 409.725 177.596C409.277 176.644 408.939 175.87 408.717 175.343C408.606 175.08 408.524 174.878 408.472 174.747C408.446 174.682 408.427 174.634 408.416 174.605C408.41 174.59 408.406 174.581 408.405 174.576C408.404 174.573 408.403 174.572 408.403 174.572C408.403 174.572 408.403 174.572 408.403 174.573C408.403 174.573 408.404 174.574 408.404 174.574C408.404 174.575 408.404 174.575 404.667 176C400.929 177.425 400.929 177.426 400.93 177.427C400.93 177.427 400.93 177.428 400.931 177.429C400.931 177.431 400.932 177.433 400.933 177.436C400.935 177.441 400.937 177.447 400.94 177.454C400.946 177.469 400.954 177.489 400.963 177.513C400.982 177.563 401.009 177.631 401.044 177.718C401.113 177.891 401.213 178.137 401.344 178.447C401.605 179.066 401.988 179.943 402.49 181.008C403.491 183.132 404.98 186.03 406.931 189.124C410.737 195.159 416.715 202.609 424.82 205.921L426.333 202.219Z" fill="white" mask="url(#path-14-outside-6_17007_2267)"/> +<path d="M404.667 205.602C409.4 192.936 404.667 176 404.667 176C404.667 176 412.506 196.568 426.333 202.219C434.206 205.436 448 203.91 448 203.91C448 203.91 436.705 212.773 433 220.825C428.31 231.018 431.333 249.581 431.333 249.581C431.333 249.581 422.653 231.856 412.167 227.591C402.18 223.53 388 227.591 388 227.591C388 227.591 400.411 216.991 404.667 205.602Z" fill="#FFD25C"/> +<path d="M404.667 176L406.536 175.288C406.155 174.289 405.056 173.766 404.041 174.1C403.025 174.435 402.453 175.509 402.74 176.538L404.667 176ZM404.667 205.602L406.54 206.302V206.302L404.667 205.602ZM388 227.591L386.701 226.071C385.986 226.682 385.793 227.709 386.238 228.538C386.683 229.367 387.646 229.773 388.551 229.514L388 227.591ZM412.167 227.591L411.413 229.444V229.444L412.167 227.591ZM431.333 249.581L429.537 250.461C429.973 251.351 430.996 251.788 431.94 251.487C432.885 251.186 433.467 250.238 433.307 249.26L431.333 249.581ZM433 220.825L434.817 221.661V221.661L433 220.825ZM448 203.91L449.235 205.484C449.938 204.932 450.189 203.981 449.852 203.154C449.514 202.327 448.668 201.824 447.78 201.922L448 203.91ZM426.333 202.219L427.09 200.367L426.333 202.219ZM404.667 176C402.74 176.538 402.74 176.538 402.74 176.538C402.74 176.538 402.74 176.537 402.74 176.537C402.74 176.537 402.74 176.537 402.74 176.538C402.741 176.539 402.741 176.541 402.742 176.544C402.744 176.55 402.746 176.559 402.75 176.573C402.758 176.601 402.769 176.644 402.785 176.703C402.816 176.82 402.861 176.998 402.919 177.231C403.034 177.697 403.194 178.384 403.374 179.25C403.733 180.984 404.164 183.427 404.452 186.254C405.032 191.957 405 198.995 402.793 204.902L404.667 205.602L406.54 206.302C409.066 199.542 409.034 191.779 408.431 185.849C408.127 182.858 407.671 180.276 407.291 178.439C407.1 177.519 406.928 176.784 406.803 176.274C406.74 176.019 406.689 175.821 406.653 175.684C406.635 175.615 406.62 175.562 406.61 175.525C406.605 175.506 406.601 175.491 406.598 175.481C406.597 175.476 406.596 175.471 406.595 175.468C406.594 175.467 406.594 175.465 406.594 175.464C406.593 175.464 406.593 175.463 406.593 175.463C406.593 175.462 406.593 175.462 404.667 176ZM404.667 205.602L402.793 204.902C400.796 210.247 396.825 215.524 393.245 219.536C391.471 221.524 389.826 223.166 388.626 224.309C388.027 224.88 387.54 225.325 387.206 225.625C387.038 225.775 386.909 225.889 386.824 225.964C386.781 226.002 386.749 226.03 386.728 226.047C386.718 226.056 386.71 226.063 386.706 226.067C386.703 226.069 386.702 226.07 386.701 226.07C386.701 226.071 386.701 226.071 386.701 226.071C386.701 226.071 386.701 226.071 386.701 226.071C386.701 226.071 386.701 226.071 388 227.591C389.299 229.112 389.299 229.112 389.3 229.112C389.3 229.111 389.3 229.111 389.301 229.111C389.301 229.11 389.302 229.109 389.303 229.108C389.306 229.106 389.309 229.104 389.312 229.101C389.32 229.094 389.33 229.085 389.343 229.074C389.37 229.051 389.408 229.018 389.457 228.975C389.555 228.889 389.697 228.764 389.878 228.602C390.239 228.278 390.755 227.806 391.385 227.205C392.645 226.005 394.369 224.284 396.23 222.199C399.919 218.063 404.282 212.345 406.54 206.302L404.667 205.602ZM388 227.591C388.551 229.514 388.55 229.514 388.55 229.514C388.55 229.514 388.55 229.514 388.55 229.514C388.55 229.514 388.55 229.514 388.55 229.514C388.551 229.514 388.552 229.514 388.554 229.513C388.559 229.512 388.567 229.51 388.578 229.506C388.6 229.5 388.636 229.49 388.684 229.477C388.78 229.451 388.927 229.412 389.12 229.364C389.505 229.266 390.074 229.129 390.789 228.976C392.223 228.67 394.237 228.302 396.549 228.057C401.235 227.561 406.88 227.6 411.413 229.444L412.167 227.591L412.92 225.739C407.467 223.521 401.028 223.56 396.127 224.079C393.646 224.342 391.491 224.736 389.954 225.064C389.184 225.229 388.567 225.377 388.138 225.486C387.923 225.54 387.756 225.585 387.639 225.616C387.581 225.632 387.536 225.644 387.504 225.653C387.488 225.658 387.476 225.661 387.466 225.664C387.462 225.665 387.458 225.666 387.455 225.667C387.454 225.667 387.453 225.668 387.452 225.668C387.451 225.668 387.451 225.668 387.45 225.668C387.45 225.669 387.449 225.669 388 227.591ZM412.167 227.591L411.413 229.444C416.076 231.34 420.584 236.398 424.045 241.334C425.739 243.75 427.117 246.041 428.072 247.73C428.549 248.573 428.919 249.262 429.168 249.738C429.292 249.976 429.386 250.16 429.448 250.283C429.479 250.345 429.502 250.391 429.517 250.421C429.525 250.436 429.53 250.447 429.533 250.453C429.535 250.457 429.536 250.459 429.537 250.46C429.537 250.461 429.537 250.461 429.537 250.461C429.537 250.461 429.537 250.461 429.537 250.461C429.537 250.461 429.537 250.461 431.333 249.581C433.13 248.701 433.129 248.701 433.129 248.701C433.129 248.7 433.129 248.7 433.128 248.699C433.128 248.698 433.127 248.697 433.127 248.696C433.125 248.692 433.123 248.688 433.121 248.683C433.115 248.673 433.108 248.658 433.099 248.64C433.08 248.602 433.053 248.548 433.018 248.479C432.948 248.34 432.846 248.139 432.712 247.884C432.445 247.374 432.055 246.646 431.554 245.76C430.554 243.992 429.107 241.586 427.32 239.037C423.819 234.044 418.744 228.107 412.92 225.739L412.167 227.591ZM431.333 249.581C433.307 249.26 433.307 249.26 433.307 249.26C433.307 249.26 433.307 249.26 433.307 249.26C433.307 249.26 433.307 249.26 433.307 249.259C433.307 249.257 433.307 249.255 433.306 249.251C433.305 249.244 433.303 249.233 433.3 249.217C433.295 249.185 433.288 249.136 433.278 249.07C433.258 248.939 433.229 248.743 433.193 248.488C433.122 247.977 433.025 247.231 432.922 246.301C432.716 244.441 432.49 241.858 432.407 238.968C432.239 233.093 432.679 226.308 434.817 221.661L433 220.825L431.183 219.989C428.631 225.536 428.238 233.129 428.409 239.083C428.496 242.107 428.732 244.802 428.946 246.741C429.054 247.712 429.156 248.495 429.232 249.04C429.27 249.312 429.301 249.524 429.323 249.67C429.334 249.743 429.343 249.799 429.349 249.838C429.352 249.858 429.355 249.873 429.356 249.884C429.357 249.889 429.358 249.893 429.358 249.897C429.359 249.898 429.359 249.899 429.359 249.9C429.359 249.901 429.359 249.901 429.359 249.902C429.359 249.902 429.359 249.903 431.333 249.581ZM433 220.825L434.817 221.661C436.507 217.987 440.03 213.971 443.289 210.776C444.894 209.204 446.387 207.875 447.478 206.94C448.024 206.473 448.467 206.105 448.772 205.856C448.925 205.731 449.043 205.636 449.121 205.574C449.161 205.542 449.19 205.519 449.209 205.504C449.219 205.496 449.226 205.491 449.23 205.487C449.232 205.486 449.234 205.484 449.234 205.484C449.235 205.483 449.235 205.483 449.235 205.483C449.235 205.483 449.235 205.483 449.235 205.483C449.235 205.483 449.235 205.484 448 203.91C446.765 202.337 446.765 202.337 446.765 202.337C446.765 202.337 446.764 202.337 446.764 202.338C446.763 202.338 446.763 202.339 446.762 202.34C446.76 202.341 446.757 202.343 446.754 202.346C446.747 202.351 446.738 202.358 446.726 202.368C446.702 202.387 446.668 202.414 446.623 202.45C446.535 202.52 446.406 202.624 446.243 202.757C445.916 203.024 445.448 203.412 444.876 203.902C443.734 204.88 442.172 206.27 440.489 207.92C437.175 211.169 433.197 215.611 431.183 219.989L433 220.825ZM448 203.91C447.78 201.922 447.78 201.922 447.781 201.922C447.781 201.922 447.781 201.922 447.781 201.922C447.781 201.922 447.78 201.922 447.78 201.922C447.779 201.922 447.777 201.923 447.775 201.923C447.77 201.923 447.761 201.924 447.75 201.925C447.727 201.928 447.691 201.932 447.642 201.937C447.546 201.946 447.401 201.96 447.212 201.977C446.834 202.012 446.281 202.057 445.591 202.102C444.209 202.193 442.287 202.281 440.128 202.271C435.734 202.25 430.648 201.821 427.09 200.367L426.333 202.219L425.577 204.07C429.891 205.833 435.638 206.25 440.109 206.271C442.383 206.281 444.402 206.189 445.852 206.094C446.578 206.046 447.165 205.998 447.572 205.961C447.775 205.943 447.934 205.927 448.044 205.916C448.099 205.911 448.141 205.906 448.171 205.903C448.185 205.902 448.197 205.9 448.205 205.9C448.209 205.899 448.213 205.899 448.215 205.898C448.216 205.898 448.217 205.898 448.218 205.898C448.218 205.898 448.219 205.898 448.219 205.898C448.219 205.898 448.22 205.898 448 203.91ZM426.333 202.219L427.09 200.367C420.772 197.785 415.636 191.678 412.006 185.923C410.216 183.084 408.842 180.412 407.917 178.449C407.454 177.469 407.106 176.669 406.874 176.119C406.758 175.844 406.672 175.631 406.615 175.49C406.587 175.419 406.566 175.366 406.553 175.332C406.546 175.315 406.541 175.303 406.538 175.295C406.537 175.292 406.536 175.289 406.536 175.288C406.535 175.287 406.535 175.287 406.535 175.287C406.535 175.287 406.535 175.287 406.535 175.287C406.535 175.287 406.536 175.288 404.667 176C402.798 176.712 402.798 176.713 402.798 176.713C402.798 176.714 402.799 176.714 402.799 176.715C402.799 176.716 402.8 176.718 402.801 176.72C402.802 176.723 402.804 176.728 402.806 176.735C402.811 176.747 402.818 176.764 402.826 176.786C402.844 176.83 402.869 176.894 402.901 176.975C402.966 177.138 403.062 177.372 403.187 177.671C403.438 178.267 403.81 179.119 404.299 180.155C405.275 182.225 406.725 185.048 408.623 188.057C412.37 193.999 418.067 201.001 425.577 204.07L426.333 202.219Z" fill="black"/> +<path d="M1148.21 299.268C1150.88 283.882 1150.98 267.869 1146.7 252.756C1143.06 239.864 1136.1 227.809 1126.14 218.723C1120.62 213.686 1114.29 209.682 1107.31 206.954L1108.98 208.616L1108.67 207.259L1104.68 209.575C1113.43 216.763 1124.65 220.716 1136.01 220.525C1147.37 220.335 1157.31 216.205 1165.6 209.238C1170.11 205.444 1173.93 200.762 1176.7 195.566C1177.3 194.43 1176.98 192.977 1175.84 192.311C1174.75 191.683 1173.17 192.025 1172.57 193.167C1171.96 194.309 1171.36 195.325 1170.69 196.365C1170.37 196.866 1170.04 197.361 1169.69 197.85C1169.53 198.078 1169.37 198.307 1169.2 198.529C1169.11 198.655 1169.01 198.782 1168.91 198.909C1168.88 198.96 1168.56 199.366 1168.78 199.093C1167.29 201.016 1165.63 202.805 1163.84 204.454C1162.93 205.292 1161.99 206.091 1161.02 206.859C1160.98 206.891 1160.66 207.132 1160.93 206.929C1160.84 206.999 1160.74 207.075 1160.65 207.145C1160.43 207.309 1160.2 207.474 1159.97 207.639C1159.46 208.014 1158.93 208.375 1158.39 208.724C1156.33 210.088 1154.15 211.281 1151.88 212.29C1151.74 212.353 1151.59 212.417 1151.45 212.48C1151.45 212.48 1151.08 212.639 1151.29 212.55C1151.53 212.449 1151.07 212.639 1151.02 212.658C1150.92 212.702 1150.8 212.747 1150.69 212.791C1150.1 213.026 1149.5 213.248 1148.9 213.457C1147.72 213.863 1146.54 214.219 1145.34 214.523C1144.14 214.828 1142.86 215.094 1141.61 215.297C1141.32 215.342 1141.02 215.392 1140.73 215.431C1140.3 215.488 1141.02 215.392 1140.6 215.443C1140.43 215.462 1140.27 215.481 1140.09 215.5C1139.42 215.576 1138.74 215.634 1138.06 215.678C1135.47 215.843 1132.87 215.78 1130.29 215.494C1130.12 215.475 1129.95 215.456 1129.78 215.437C1129.74 215.437 1129.32 215.38 1129.66 215.424C1129.37 215.386 1129.07 215.342 1128.78 215.291C1128.1 215.183 1127.43 215.063 1126.77 214.929C1125.47 214.669 1124.19 214.352 1122.92 213.978C1120.04 213.127 1117.82 212.246 1115.23 210.888C1113.91 210.203 1112.63 209.448 1111.38 208.629C1110.14 207.811 1109.12 207.062 1108.07 206.206C1107.25 205.527 1106.16 205.267 1105.18 205.831C1104.21 206.396 1103.84 207.487 1104.07 208.521C1104.15 208.883 1104.23 209.251 1104.31 209.613C1104.63 210.881 1105.47 211.307 1106.6 211.763C1106.79 211.84 1106.97 211.916 1107.16 211.992C1106.84 211.859 1107.21 212.011 1107.26 212.036C1107.63 212.195 1107.99 212.36 1108.36 212.525C1109.16 212.893 1109.95 213.28 1110.73 213.679C1113.56 215.151 1116.27 216.864 1118.82 218.787C1118.82 218.787 1119.44 219.263 1119.1 218.996C1119.23 219.091 1119.35 219.193 1119.48 219.294C1119.79 219.542 1120.1 219.796 1120.41 220.049C1121.06 220.582 1121.69 221.128 1122.32 221.693C1123.54 222.79 1124.72 223.932 1125.86 225.119C1126.99 226.305 1128.04 227.479 1129.06 228.716C1129.31 229.027 1129.57 229.338 1129.81 229.655C1129.92 229.782 1130.01 229.909 1130.11 230.036C1130.59 230.645 1129.98 229.858 1130.26 230.22C1130.77 230.892 1131.27 231.571 1131.76 232.263C1133.65 234.927 1135.35 237.719 1136.85 240.619C1138.49 243.785 1139.56 246.297 1140.71 249.634C1143.26 256.975 1144.66 264.5 1145.13 272.119C1145.66 280.805 1145.06 289.605 1143.6 298.018C1143.39 299.243 1143.92 300.638 1145.27 300.943C1146.43 301.203 1147.98 300.594 1148.21 299.281L1148.21 299.268Z" fill="#090909"/> +<path d="M58.1464 138.347C56.6261 147.497 56.631 156.789 58.0831 165.949C59.5351 175.108 62.4052 183.77 66.5762 191.881C70.7473 199.992 75.9611 206.96 82.2859 213.11C88.6107 219.261 95.647 224.235 103.37 228.105C111.04 231.946 119.27 234.67 127.739 235.975C128.884 236.152 130.029 236.305 131.179 236.437V232.744C121.891 232.867 112.745 234.95 104.213 238.619C95.7931 242.239 88.0406 247.508 81.5355 254.013C77.8517 257.696 74.5724 261.808 71.7901 266.23C71.2589 267.073 71.6147 268.269 72.4479 268.757C73.3299 269.279 74.4165 268.939 74.9476 268.092C77.3596 264.266 79.8837 261.035 83.0363 257.736C84.5615 256.14 86.1598 254.623 87.8214 253.181C89.5755 251.659 91.013 250.536 92.8793 249.212C100.188 244.026 108.019 240.412 116.634 238.299C117.857 237.999 119.085 237.733 120.322 237.501C120.927 237.388 121.526 237.284 122.135 237.186C122.423 237.142 122.71 237.097 122.998 237.053C123.124 237.033 123.251 237.019 123.383 236.999C123.076 237.043 123.607 236.969 123.665 236.964C126.165 236.644 128.674 236.472 131.194 236.437C132.183 236.423 133.021 235.6 133.021 234.591C133.021 233.498 132.178 232.857 131.194 232.744C129.327 232.527 127.364 232.217 125.307 231.809C123.251 231.4 121.234 230.912 119.231 230.341C117.228 229.77 115.24 229.125 113.281 228.406C111.323 227.687 109.612 226.983 107.746 226.126C103.979 224.392 100.344 222.378 96.87 220.103C93.3958 217.828 90.2821 215.44 87.1489 212.613C80.7754 206.866 75.5762 200.425 71.3564 192.989C67.1366 185.553 63.9937 177.132 62.2444 168.401C61.377 164.078 60.8946 160.044 60.7192 155.578C60.5438 151.111 60.7192 146.694 61.2601 142.292C61.3624 141.455 61.5232 140.356 61.6938 139.332C61.8643 138.308 61.416 137.338 60.3976 137.057C59.5205 136.816 58.3121 137.357 58.1513 138.347H58.1464Z" fill="black"/> +<path d="M280.03 346.635C290.015 351.378 296.505 361.613 296.255 372.346C296.255 380.833 292.761 389.071 288.268 396.06C274.039 417.528 248.078 428.262 223.366 430.508C197.904 432.755 169.946 427.513 152.972 406.545C145.234 397.059 141.24 384.827 140.491 372.846C139.243 356.37 143.986 340.644 149.477 325.417C161.21 293.715 185.423 253.027 224.115 253.027C239.591 253.027 254.818 259.767 263.805 272.997C276.036 291.219 277.534 317.429 269.546 337.399C265.302 337.15 261.558 336.9 257.564 336.9C249.826 336.9 242.087 337.399 234.349 338.148C232.102 338.148 230.355 338.398 228.608 339.146C225.862 333.655 224.364 327.414 223.366 321.923C222.617 317.18 221.868 312.187 220.869 307.444C220.62 306.196 219.372 305.447 218.124 305.447C216.876 305.447 215.627 306.196 215.627 307.444C215.378 307.944 215.378 308.443 215.378 309.192C212.632 324.169 206.641 339.895 197.155 351.877C190.416 357.369 185.173 364.608 185.173 373.844C185.173 380.833 187.919 387.324 193.91 391.068C199.901 394.563 207.14 395.561 213.88 395.312C223.615 395.062 232.602 391.817 240.839 387.573C244.334 385.826 241.588 381.083 238.093 382.83C230.106 387.074 221.119 389.82 212.133 389.82C206.641 389.82 200.151 389.071 195.658 385.576C190.416 381.582 189.916 373.095 191.913 367.354C193.661 362.611 197.405 358.867 201.898 355.871C207.39 351.128 218.623 346.635 225.363 345.387C225.612 345.387 225.612 345.637 225.612 345.886C229.856 352.876 237.844 358.367 245.832 359.616C253.32 360.614 260.31 358.367 265.802 353.375C268.547 350.879 270.794 347.634 272.541 343.889C275.287 344.638 277.783 345.637 280.03 346.635ZM242.337 343.14C250.325 342.641 258.812 342.142 267.05 342.891C265.802 344.888 264.803 346.386 263.555 347.883C259.062 352.376 253.071 355.122 246.581 354.124C239.841 352.876 234.848 348.882 231.603 344.139C235.098 343.64 238.842 343.39 242.337 343.14ZM361.469 253.276C400.66 253.276 418.632 293.466 418.632 327.913C418.632 336.9 417.384 346.386 415.138 355.622C404.903 399.805 372.203 431.507 339.502 431.507C320.531 431.507 305.803 421.272 295.818 405.546C283.087 385.576 279.593 356.87 286.083 329.162C296.567 284.978 328.768 253.276 361.469 253.276ZM357.475 317.679C347.989 332.906 340.501 348.882 335.258 366.106C334.759 368.103 336.257 369.351 338.004 369.351C339.252 369.351 340.251 368.852 340.501 367.354C345.743 350.879 352.982 335.153 361.968 320.425C363.466 318.428 361.469 316.181 359.721 316.181C358.723 316.181 357.974 316.68 357.475 317.679ZM632.817 275.992C633.566 295.962 627.575 316.181 620.336 334.653C611.1 358.617 598.12 382.082 581.645 402.051C573.906 411.787 564.421 421.023 552.938 426.514C543.952 430.758 532.968 431.008 525.48 423.769C517.242 415.531 514.995 402.051 513.747 390.818C512.25 375.092 512.998 358.867 514.496 343.14C514.746 339.146 515.495 335.402 515.744 331.658C515.744 331.408 515.744 331.159 515.994 330.659C516.244 327.664 511.002 326.915 510.253 330.16C510.253 330.16 510.253 330.41 510.253 330.659C505.51 351.877 500.268 372.596 492.28 392.566C489.035 400.803 485.29 408.791 480.548 416.03C477.053 421.522 472.809 427.263 467.068 430.508C462.325 433.254 457.083 434.003 451.841 432.256C446.849 430.758 443.603 427.513 441.357 423.02C438.861 417.778 437.862 411.787 437.613 405.796C437.113 398.806 437.862 391.567 438.361 384.328C440.109 371.597 442.855 358.617 446.849 345.886C451.591 331.658 457.582 317.679 465.071 304.199C472.06 291.718 480.048 279.986 490.283 270.5C497.772 263.261 507.507 256.771 518.49 257.52C531.72 257.77 539.209 271.499 542.953 282.732C548.944 301.204 546.448 321.423 546.947 340.644C546.947 343.39 550.941 344.888 552.189 342.142C552.439 341.643 552.688 341.393 552.688 340.644C560.427 324.419 566.168 306.696 573.157 289.971C577.151 281.733 581.145 273.745 585.888 265.757C590.381 258.518 595.873 250.281 603.611 246.287C611.1 242.293 618.589 245.288 623.831 251.03C630.071 257.77 632.318 267.255 632.817 275.992ZM774.066 293.216C775.564 307.195 775.564 321.923 774.066 336.151C772.818 349.381 770.821 362.361 768.325 375.342C764.331 394.063 755.344 432.505 730.382 432.505C720.148 432.505 716.403 423.519 715.155 414.532C714.157 408.542 714.157 402.051 714.656 396.06C714.906 394.563 715.155 392.815 715.654 391.068C716.154 388.821 714.406 387.573 712.659 387.573C711.66 387.573 710.662 388.072 710.163 389.321C703.173 411.787 689.694 428.262 665.48 430.009C657.992 430.758 650.004 430.508 643.014 428.262C627.787 423.269 620.798 407.793 617.553 393.315C614.308 378.088 614.308 362.112 615.556 346.635C617.054 325.168 623.544 290.72 633.778 272.248C639.52 261.764 648.506 251.779 661.486 252.777C675.715 253.776 681.706 268.503 683.703 280.735C685.2 291.469 685.2 302.702 684.951 313.435C684.701 332.157 683.952 350.879 681.206 369.101C680.957 371.098 682.704 372.596 684.202 372.596C685.2 372.596 686.199 372.097 686.698 370.599C691.441 350.13 696.433 329.661 702.674 309.192C707.167 295.213 712.16 280.485 719.898 267.754C720.148 267.505 720.148 267.505 720.148 267.255L720.896 266.506C721.146 266.257 721.396 266.007 721.396 265.757C721.895 265.757 721.895 265.508 722.145 265.009C727.387 257.27 738.37 253.526 747.356 253.526C752.349 253.526 757.092 254.524 760.836 257.27C770.322 265.258 772.818 281.733 774.066 293.216ZM918.299 277.49C918.548 282.482 917.55 286.975 915.303 290.969C907.814 303.95 890.59 309.441 876.861 311.438C871.869 312.187 867.126 312.437 862.383 312.437C860.885 312.437 860.137 312.936 859.887 314.184C859.637 314.683 859.637 315.183 859.637 315.932C862.633 329.162 865.878 342.142 866.876 355.622C867.376 362.611 867.126 369.85 866.627 376.839C865.129 390.319 861.634 404.298 854.395 415.781C850.651 421.522 845.908 426.265 839.667 429.011C833.177 432.006 824.94 432.256 817.95 430.259C802.474 426.265 798.979 408.542 799.229 394.812C799.478 382.83 801.974 370.849 805.719 359.366C809.962 345.886 815.953 332.906 822.943 320.425C823.442 319.676 823.192 318.428 822.693 317.679C822.444 316.68 821.445 315.682 819.947 316.431C819.448 316.68 819.198 316.68 819.198 316.93C815.704 317.929 812.209 318.178 808.465 318.677C802.723 319.177 797.232 319.426 791.74 318.677C780.757 317.18 768.275 312.936 763.533 302.202C762.534 300.205 762.285 297.959 761.536 295.962C761.536 295.712 761.536 295.712 761.536 295.712C761.536 295.213 761.536 294.963 761.536 294.714C761.536 294.464 761.536 293.965 761.536 293.466C761.536 292.217 761.536 291.469 761.536 290.47C761.536 290.22 761.536 289.971 761.536 289.472L762.035 289.222C762.035 288.723 762.035 288.224 762.285 287.475C763.033 284.479 763.533 282.732 765.28 279.986C767.027 277.24 769.274 274.994 772.02 272.497C780.757 265.258 792.239 261.264 803.223 258.768C822.194 254.524 842.164 253.276 861.385 253.526C874.864 253.776 888.843 255.024 901.324 259.767C903.072 260.515 905.069 261.514 907.066 262.263C908.563 263.511 910.061 264.509 911.059 265.258C913.556 267.505 914.804 268.753 916.302 271.499C916.551 271.748 916.551 272.248 916.801 272.747C916.801 272.747 916.801 272.747 916.801 272.997C917.05 273.496 917.3 274.245 917.55 274.994C917.55 275.493 917.799 275.992 917.799 276.491C917.799 276.741 917.799 276.991 917.799 276.991C917.799 277.24 917.799 277.24 917.799 277.24C918.299 277.24 918.299 277.24 918.299 277.24C918.299 277.49 918.299 277.49 918.299 277.49ZM1035.57 340.644C1052.05 355.122 1056.54 381.333 1045.06 400.054C1030.08 425.017 997.382 430.508 970.672 430.259C955.695 430.259 940.218 428.262 926.239 422.271C917.253 418.277 908.766 412.286 903.524 403.549C899.53 396.809 897.782 389.071 898.531 381.582C899.28 376.091 901.527 370.599 906.02 366.355C910.763 362.112 917.253 360.364 923.493 360.614C927.737 360.864 931.481 361.613 935.226 362.861C947.207 371.597 961.436 377.588 975.914 380.833C980.907 382.082 986.398 382.331 991.89 383.33C995.385 383.829 995.385 378.337 991.89 377.838C972.419 375.591 953.198 369.101 937.722 357.868C928.985 351.378 921.496 343.39 915.755 333.655C913.009 329.411 910.763 324.668 909.514 320.175C908.766 317.929 908.017 315.682 907.518 313.935C907.268 311.688 907.018 310.44 906.769 308.942C905.521 293.216 912.76 278.738 924.492 268.753C930.982 263.261 938.72 259.517 946.958 257.021C956.194 254.025 965.68 253.526 975.415 253.526C990.642 253.776 1007.62 255.523 1021.1 262.762C1028.83 267.006 1034.33 272.747 1035.82 280.984C1035.82 281.234 1035.82 281.484 1035.82 281.733C1035.82 281.733 1035.82 281.983 1035.82 282.981C1036.07 283.73 1036.07 284.479 1036.07 285.228C1035.82 287.475 1035.82 287.724 1035.32 289.721C1035.32 290.47 1035.07 290.969 1034.82 291.968C1034.82 292.217 1034.58 292.717 1034.58 292.966C1034.58 292.966 1034.58 293.216 1034.33 293.216V293.466C1034.08 293.715 1033.83 293.715 1033.58 294.464C1031.83 298.208 1030.08 301.703 1027.34 304.948C1019.1 314.683 1006.12 316.93 993.887 313.685C990.642 312.687 987.397 311.688 984.152 310.44C983.153 309.691 982.155 309.192 980.907 308.443C980.657 308.443 980.158 308.193 979.908 308.193C975.165 305.697 970.672 302.702 967.177 299.207C966.678 298.708 965.929 298.208 965.43 297.46C965.18 297.21 964.931 296.96 964.931 296.96C964.931 296.96 964.931 296.96 964.931 296.711H964.681C964.681 296.711 964.681 296.711 964.681 296.461C962.434 293.466 957.941 296.211 959.689 299.207C961.935 302.702 965.43 305.447 968.675 307.694C972.17 310.19 976.164 312.437 979.908 314.434C980.158 314.434 980.158 314.434 980.158 314.434C998.13 324.169 1019.85 326.665 1035.57 340.644ZM1085.13 403.299C1088.12 412.036 1086.62 422.77 1077.89 427.762C1069.9 432.505 1059.66 430.758 1051.93 426.265C1043.19 421.522 1037.7 413.784 1037.7 403.799C1037.7 397.808 1039.69 392.066 1044.69 388.072C1049.18 384.079 1055.92 382.83 1061.66 383.829C1072.15 385.576 1081.63 392.815 1085.13 403.299ZM1085.62 255.773C1089.37 268.254 1089.37 282.233 1088.87 295.213C1088.62 303.95 1087.12 311.938 1085.62 320.425C1083.63 330.909 1081.13 341.892 1076.39 351.877C1074.64 355.871 1072.15 359.865 1068.9 362.861C1066.15 365.606 1063.41 367.104 1059.66 366.855C1056.92 366.355 1054.17 364.858 1052.18 362.112C1050.18 359.366 1048.43 355.372 1047.68 351.877C1045.19 342.142 1045.19 332.157 1045.69 322.422C1045.93 317.929 1046.18 313.435 1046.68 308.942C1046.93 305.447 1047.18 302.452 1047.68 299.706C1047.68 298.957 1047.93 298.208 1048.18 297.46C1049.43 289.472 1051.68 281.983 1054.17 274.494C1055.92 269.252 1057.67 264.26 1060.41 259.267C1062.66 255.024 1065.41 250.78 1069.4 247.785C1072.15 245.788 1076.14 244.29 1078.88 245.538C1082.38 247.285 1084.38 252.028 1085.62 255.773Z" fill="white"/> +<path d="M290.009 350.13C304.986 367.853 296.499 392.566 282.271 407.793C262.051 430.009 229.85 438.247 200.644 436.499C173.934 435.002 147.724 421.522 136.491 396.06C130.5 382.581 129.751 367.603 131.748 353.125C133.246 343.64 135.992 334.653 139.487 325.917C150.22 292.467 176.181 252.028 213.375 247.535C226.355 245.788 241.332 249.282 252.316 257.27C261.802 264.26 268.541 274.744 272.286 286.227C275.281 296.461 276.529 307.195 275.78 317.929C274.782 324.918 273.534 332.157 271.038 339.146C278.027 340.644 285.016 344.139 290.009 350.13ZM276.03 346.635C273.783 345.637 271.287 344.638 268.541 343.889C266.794 347.634 264.547 350.879 261.802 353.375C256.31 358.367 249.32 360.614 241.832 359.616C233.844 358.367 225.856 352.876 221.612 345.886C221.612 345.637 221.612 345.387 221.363 345.387C214.623 346.635 203.39 351.128 197.898 355.871C193.405 358.867 189.661 362.611 187.913 367.354C185.916 373.095 186.416 381.582 191.658 385.576C196.151 389.071 202.641 389.82 208.133 389.82C217.119 389.82 226.106 387.074 234.093 382.83C237.588 381.083 240.334 385.826 236.839 387.573C228.602 391.817 219.615 395.062 209.88 395.312C203.14 395.561 195.901 394.563 189.91 391.068C183.919 387.324 181.173 380.833 181.173 373.844C181.173 364.608 186.416 357.369 193.155 351.877C202.641 339.895 208.632 324.169 211.378 309.192C211.378 308.443 211.378 307.944 211.627 307.444C211.627 306.196 212.876 305.447 214.124 305.447C215.372 305.447 216.62 306.196 216.869 307.444C217.868 312.187 218.617 317.18 219.366 321.923C220.364 327.414 221.862 333.655 224.608 339.146C226.355 338.398 228.102 338.148 230.349 338.148C238.087 337.399 245.826 336.9 253.564 336.9C257.558 336.9 261.302 337.15 265.546 337.399C273.534 317.429 272.036 291.219 259.805 272.997C250.818 259.767 235.591 253.027 220.115 253.027C181.423 253.027 157.21 293.715 145.477 325.417C139.986 340.644 135.243 356.37 136.491 372.846C137.24 384.827 141.234 397.059 148.972 406.545C165.946 427.513 193.904 432.755 219.366 430.508C244.078 428.262 270.039 417.528 284.268 396.06C288.761 389.071 292.255 380.833 292.255 372.346C292.505 361.613 286.015 351.378 276.03 346.635ZM213.874 322.172C211.378 330.16 208.133 338.148 204.139 345.387C207.134 343.889 210.379 342.641 213.375 341.892C214.872 340.894 216.869 340.395 218.617 340.145C216.869 336.151 213.874 326.665 213.874 322.172ZM238.337 343.14C234.842 343.39 231.098 343.64 227.603 344.139C230.848 348.882 235.841 352.876 242.581 354.124C249.071 355.122 255.062 352.376 259.555 347.883C260.803 346.386 261.802 344.888 263.05 342.891C254.812 342.142 246.325 342.641 238.337 343.14ZM406.145 275.742C419.625 296.96 423.369 327.165 416.38 356.62C407.643 393.814 377.688 436.998 335.502 436.998C315.283 436.998 297.809 425.516 287.075 408.791C273.596 387.573 269.602 357.369 276.591 327.664C287.575 280.984 322.522 247.535 357.718 247.535C378.188 247.535 394.912 258.768 406.145 275.742ZM414.632 327.913C414.632 293.466 396.66 253.276 357.469 253.276C324.768 253.276 292.567 284.978 282.083 329.162C275.593 356.87 279.087 385.576 291.818 405.546C301.803 421.272 316.531 431.507 335.502 431.507C368.203 431.507 400.903 399.805 411.138 355.622C413.384 346.386 414.632 336.9 414.632 327.913ZM353.475 317.679C353.974 316.68 354.723 316.181 355.721 316.181C357.469 316.181 359.466 318.428 357.968 320.425C348.982 335.153 341.743 350.879 336.501 367.354C336.251 368.852 335.252 369.351 334.004 369.351C332.257 369.351 330.759 368.103 331.258 366.106C336.501 348.882 343.989 332.906 353.475 317.679ZM629.816 255.773C634.309 264.759 635.058 275.243 634.309 285.228C632.811 306.446 626.071 326.665 617.834 345.886C605.353 375.342 574.4 428.511 542.947 434.752C531.215 436.998 519.982 432.755 513.242 422.77C505.504 411.287 504.256 396.06 503.257 382.83C503.257 377.588 503.008 372.346 503.257 367.104C497.017 389.321 480.791 438.746 453.333 438.746C442.1 438.746 435.11 433.005 430.867 422.77C425.874 409.54 427.372 394.063 429.369 380.584C430.867 368.352 433.613 356.37 437.357 344.638C446.843 313.935 476.298 251.529 513.242 251.529C531.465 251.529 541.2 269.003 545.693 284.479C549.437 298.208 548.938 312.187 548.688 326.416C548.938 326.166 548.938 325.667 548.938 325.667C556.676 307.195 562.667 288.473 571.903 271.249C579.392 257.52 592.622 234.555 611.843 239.298C619.831 241.295 626.321 248.284 629.816 255.773ZM628.817 275.992C628.068 263.761 621.828 244.54 606.601 244.54C595.617 244.54 586.881 257.52 581.888 265.757C577.145 273.745 573.151 281.733 569.157 289.971C562.168 306.696 556.427 324.419 548.688 340.644C548.688 342.142 547.44 343.64 545.943 343.64C544.445 343.64 542.947 342.392 542.947 340.644C542.448 321.423 544.944 301.204 538.953 282.732C535.209 271.499 527.72 257.77 514.49 257.52C503.507 256.771 493.772 263.261 486.283 270.5C457.826 296.96 439.354 347.134 434.361 384.328C433.862 391.567 433.113 398.806 433.613 405.796C434.112 418.277 438.355 433.254 453.582 433.254C483.537 433.254 501.26 353.375 506.253 330.659C506.253 330.41 506.253 330.16 506.253 330.16C506.502 328.662 507.75 328.163 508.998 328.163C510.496 328.163 512.244 328.912 511.994 330.659C511.744 331.159 511.744 331.408 511.744 331.658C511.495 335.402 510.746 339.146 510.496 343.14C508.998 358.867 508.25 375.092 509.747 390.818C511.495 406.794 515.988 429.51 536.207 429.51C570.655 429.51 605.852 361.862 616.336 334.653C623.575 316.181 629.566 295.962 628.817 275.992ZM776.806 305.697C777.055 319.177 776.806 332.656 774.809 345.886C772.562 362.112 770.066 378.587 765.573 394.313C761.329 408.542 755.089 424.517 742.358 433.005C736.617 436.749 729.378 438.995 722.388 437.747C708.909 435.75 705.164 418.526 704.665 407.293C693.432 427.263 676.957 436.499 654.241 436.499C626.034 436.499 613.054 419.525 607.811 392.566C602.569 366.106 605.814 338.148 611.057 311.938C614.302 295.213 618.795 277.49 628.78 263.511C634.771 254.025 644.256 247.285 655.739 247.285C674.71 247.285 683.197 264.26 685.444 280.984C686.942 293.216 686.443 305.447 686.443 317.429C686.443 322.921 686.193 328.662 686.193 334.404C689.438 321.174 692.933 308.193 697.426 295.463C704.665 273.745 715.149 247.535 742.608 247.535C772.313 247.535 776.057 282.732 776.806 305.697ZM770.066 293.216C768.818 281.733 766.322 265.258 756.836 257.27C753.092 254.524 748.349 253.526 743.356 253.526C734.37 253.526 723.387 257.27 718.145 265.009C717.895 265.508 717.895 265.757 717.396 265.757C717.396 266.007 717.146 266.257 716.896 266.506L716.148 267.255C716.148 267.505 716.148 267.505 715.898 267.754C708.16 280.485 703.167 295.213 698.674 309.192C692.433 329.661 687.441 350.13 682.698 370.599C682.199 372.097 681.2 372.596 680.202 372.596C678.704 372.596 676.957 371.098 677.206 369.101C679.952 350.879 680.701 332.157 680.951 313.435C681.2 302.702 681.2 291.469 679.703 280.735C677.706 268.503 671.715 253.776 657.486 252.777C644.506 251.779 635.52 261.764 629.778 272.248C619.544 290.72 613.054 325.168 611.556 346.635C610.308 362.112 610.308 378.088 613.553 393.315C616.798 407.793 623.787 423.269 639.014 428.262C646.004 430.508 653.992 430.758 661.48 430.009C685.694 428.262 699.173 411.787 706.163 389.321C706.662 388.072 707.66 387.573 708.659 387.573C710.406 387.573 712.154 388.821 711.654 391.068C711.155 392.815 710.906 394.563 710.656 396.06C710.157 402.051 710.157 408.542 711.155 414.532C712.403 423.519 716.148 432.505 726.382 432.505C759.832 432.505 768.069 360.364 770.066 336.151C771.564 321.923 771.564 307.195 770.066 293.216ZM919.041 273.745C921.538 284.479 917.044 295.213 909.306 302.202C896.825 313.935 878.353 317.429 861.878 317.929L863.376 325.168C866.371 338.398 868.867 351.877 868.618 365.357C868.618 394.563 858.133 437.248 822.188 437.248C816.946 437.248 811.454 436 806.711 433.504C790.985 425.017 788.738 404.048 789.987 388.322C791.984 365.606 800.221 343.64 810.955 323.67C806.711 324.419 801.719 324.918 796.726 324.918C777.256 324.918 755.788 317.929 752.543 296.96C750.546 283.231 758.784 271.249 770.017 264.26C790.735 251.03 823.686 247.785 848.149 247.785C869.616 247.785 912.801 249.282 919.041 273.745ZM914.299 277.49V277.24C914.299 277.24 914.299 277.24 913.799 277.24V276.491C913.799 276.242 913.799 276.242 913.799 275.992L913.55 275.243C913.3 274.245 913.05 273.496 912.801 272.997C912.551 272.248 912.551 271.748 912.302 271.499C910.804 268.753 909.556 267.505 907.059 265.258C906.061 264.509 904.563 263.511 903.066 262.263C901.069 261.514 899.072 260.515 897.324 259.767C884.843 255.024 870.864 253.776 857.385 253.526C838.164 253.276 818.194 254.524 799.223 258.768C783.496 262.263 762.778 270.001 758.285 287.475C758.035 288.224 758.035 288.723 758.035 289.222L757.536 289.472V295.962C758.285 297.959 758.534 300.205 759.533 302.202C764.275 312.936 776.757 317.18 787.74 318.677C793.232 319.426 798.723 319.177 804.465 318.677C808.209 318.178 811.704 317.929 815.198 316.93C815.198 316.68 815.448 316.68 815.947 316.431C817.445 315.682 818.444 316.68 818.693 317.679C819.192 318.428 819.442 319.676 818.943 320.425C806.711 342.392 795.728 369.351 795.229 394.812C794.979 408.542 798.474 426.265 813.95 430.259C816.946 431.008 820.191 431.507 823.186 431.507C850.645 431.507 860.13 399.306 862.627 376.839C863.126 369.85 863.376 362.611 862.876 355.622C861.878 342.142 858.633 329.162 855.637 315.932C855.637 315.183 855.637 314.683 855.887 314.184C856.137 312.936 856.885 312.437 858.383 312.437C876.356 312.437 901.817 307.444 911.303 290.969C913.55 286.975 914.548 282.482 914.299 277.49ZM1043.81 345.886C1051.04 356.37 1054.04 370.349 1052.79 382.83C1048.3 422.52 1004.12 435.75 969.917 435.75C940.961 435.75 900.772 428.511 890.537 397.558C887.542 388.322 888.291 377.339 893.033 368.852C899.274 357.868 910.757 354.373 921.99 355.372C914.002 347.883 907.262 338.647 902.519 327.913C898.275 317.929 896.278 307.694 897.776 296.711C900.522 278.738 913.752 264.26 929.728 256.272C942.459 249.782 956.437 247.785 970.416 247.785C989.138 247.785 1014.1 250.531 1028.08 263.511C1034.32 269.252 1038.06 277.49 1037.56 286.227C1037.32 290.22 1036.07 293.965 1034.32 297.709C1028.33 309.941 1019.84 318.677 1005.86 320.425C1020.09 326.166 1034.32 332.407 1043.81 345.886ZM1031.57 340.644C1015.85 326.665 994.13 324.169 976.158 314.434H975.908C969.418 310.939 959.683 305.447 955.689 299.207C954.44 297.21 956.188 295.213 958.185 295.213C959.183 295.213 959.932 295.463 960.681 296.711H960.931C960.931 296.96 961.18 297.21 961.43 297.46C963.926 301.454 972.164 306.196 976.158 308.193L976.657 308.443C978.155 309.192 979.153 309.691 980.152 310.44C986.642 312.936 993.382 315.183 1000.37 315.183C1015.35 315.183 1023.59 307.195 1029.58 294.464C1029.83 293.715 1030.08 293.715 1030.33 293.466V293.216C1030.58 293.216 1030.58 292.966 1030.58 292.717L1030.82 292.217C1031.07 290.969 1031.32 290.47 1031.32 289.721C1031.82 287.724 1031.82 287.475 1032.07 285.228C1032.07 284.479 1032.07 283.73 1031.82 282.981V280.984C1027.58 257.27 990.137 253.776 971.415 253.526C953.192 253.526 934.72 256.521 920.492 268.753C908.76 278.738 901.521 293.216 902.769 308.942C903.018 310.44 903.268 311.688 903.518 313.935C905.514 320.924 907.761 327.664 911.755 333.655C927.731 360.864 957.436 374.343 987.89 377.838C991.385 378.337 991.385 383.829 987.89 383.33C982.398 382.331 976.907 382.082 971.914 380.833C957.436 377.588 943.207 371.597 931.226 362.861C927.481 361.613 923.737 360.864 919.493 360.614C913.253 360.364 906.763 362.112 902.02 366.355C897.527 370.599 895.28 376.091 894.531 381.582C893.782 389.071 895.53 396.809 899.524 403.549C912.504 425.017 943.956 430.259 966.672 430.259C993.382 430.508 1026.08 425.017 1041.06 400.054C1052.54 381.333 1048.05 355.122 1031.57 340.644ZM1069.64 240.046C1081.62 237.55 1086.12 250.78 1088.11 260.266C1090.86 274.245 1090.61 288.723 1089.61 302.951C1088.11 321.423 1079.13 372.097 1057.16 372.097C1054.67 372.097 1052.42 371.597 1050.17 370.349C1041.93 366.855 1038.94 356.62 1037.69 348.632C1034.7 331.408 1036.19 313.186 1038.94 296.211C1041.69 279.986 1051.42 243.541 1069.64 240.046ZM1081.62 255.773C1080.38 252.028 1078.38 247.285 1074.88 245.538C1072.14 244.29 1068.15 245.788 1065.4 247.785C1053.92 256.521 1046.18 284.479 1044.18 297.46C1043.93 298.208 1043.68 298.957 1043.68 299.706C1043.18 302.452 1042.93 305.447 1042.68 308.942C1042.18 313.435 1041.93 317.929 1041.69 322.422C1041.19 332.157 1041.19 342.142 1043.68 351.877C1044.93 358.118 1048.67 365.606 1055.66 366.855C1059.41 367.104 1062.15 365.606 1064.9 362.861C1077.88 350.879 1084.37 311.438 1084.87 295.213C1085.37 282.233 1085.37 268.254 1081.62 255.773ZM1088.11 407.543C1089.86 419.525 1083.62 430.758 1071.64 434.752C1068.64 435.75 1065.65 436.25 1062.65 436.25C1054.67 436.25 1046.68 433.254 1040.69 428.511C1030.95 421.023 1026.21 408.292 1029.2 396.31C1030.95 390.069 1034.45 384.827 1039.94 381.582C1045.68 378.337 1052.67 377.339 1059.41 378.587C1073.89 381.083 1086.12 392.815 1088.11 407.543ZM1081.13 403.299C1077.63 392.815 1068.15 385.576 1057.66 383.829C1051.92 382.83 1045.18 384.079 1040.69 388.072C1035.69 392.066 1033.7 397.808 1033.7 403.799C1033.7 419.026 1048.42 430.508 1063.15 430.508C1066.9 430.508 1070.64 429.759 1073.89 427.762C1082.62 422.77 1084.12 412.036 1081.13 403.299Z" fill="black"/> +</g> +<path d="M132.11 140.72L140.378 91.9783H153.599L145.328 140.72H132.11ZM193.034 93.0475C189.24 91.6665 185.232 90.9736 181.196 91.0009C168.149 91.0009 158.957 97.6035 158.878 107.068C158.806 114.064 165.441 117.966 170.45 120.293C175.591 122.681 177.318 124.202 177.293 126.334C177.261 129.596 173.188 131.086 169.394 131.086C164.107 131.086 161.301 130.34 156.962 128.532L155.262 127.759L153.408 138.656C156.492 140.014 162.197 141.192 168.117 141.252C181.998 141.252 191.009 134.727 191.113 124.62C191.163 119.082 187.648 114.867 180.026 111.393C175.41 109.155 172.584 107.638 172.613 105.357C172.613 103.336 175.007 101.172 180.177 101.172C183.564 101.096 186.93 101.731 190.059 103.037L191.242 103.599L193.034 93.0475ZM226.999 91.9783H216.827C213.677 91.9783 211.318 92.8437 209.935 96.002L190.383 140.471H204.299C204.299 140.471 206.527 134.558 207.039 133.259L223.712 133.279C224.101 134.961 225.296 140.471 225.296 140.471H237.651L226.999 91.9783ZM210.826 123.312C211.917 120.507 216.087 109.704 216.087 109.704C216.008 109.834 217.171 106.884 217.837 105.056L218.73 109.254C218.73 109.254 221.26 120.875 221.787 123.312H210.826ZM120.891 91.9783L107.992 125.1L106.618 118.368C104.218 110.61 96.7362 102.204 88.3711 97.9964L100.166 140.471L114.105 140.456L134.847 91.9783H120.827" fill="white"/> +<path d="M95.373 91.9777H74.1708L74 92.9898C90.5668 97.0209 101.528 106.759 106.079 118.457L101.449 96.0759C100.649 92.9948 98.333 92.0746 95.4646 91.9677" fill="white"/> +<path d="M1036.47 641.198C1038.53 640.899 1040.7 641.385 1042.45 642.56C1044.15 643.68 1045.46 645.421 1046.05 647.4C1046.92 650.151 1046.38 653.313 1044.63 655.587C1042.31 658.347 1040.53 661.535 1038.98 664.797C1035.29 672.745 1033.38 681.482 1032.92 690.244C1032.74 693.557 1032.77 696.88 1032.99 700.19C1033.12 702.19 1032.57 704.235 1031.45 705.879C1030.23 707.7 1028.32 709.027 1026.22 709.523C1024.41 709.956 1022.47 709.787 1020.76 709.04C1018.2 707.942 1016.22 705.526 1015.63 702.746C1015.37 701.552 1015.38 700.322 1015.31 699.108C1014.85 688.67 1015.97 678.124 1018.96 668.116C1020.28 663.66 1021.98 659.317 1024.05 655.167C1025.96 651.408 1028.13 647.765 1030.77 644.499C1032.17 642.713 1034.24 641.493 1036.47 641.198ZM1034.58 645.206C1033.86 645.665 1033.3 646.326 1032.77 646.999C1030.83 649.474 1029.18 652.168 1027.68 654.942C1031.07 656.671 1034.34 658.653 1037.45 660.862C1038.81 658.331 1040.31 655.855 1042.16 653.658C1043.46 651.993 1043.72 649.573 1042.83 647.654C1042.13 646.1 1040.73 644.894 1039.11 644.472C1037.59 644.06 1035.9 644.321 1034.58 645.206ZM1020.51 674.452C1018.53 683.212 1017.94 692.277 1018.53 701.241C1018.66 703.04 1019.67 704.746 1021.18 705.691C1023.28 707.1 1026.29 706.82 1028.09 705.023C1029.32 703.87 1030 702.134 1029.89 700.429C1029.27 690.898 1030.13 681.216 1032.9 672.071C1033 671.704 1033.18 671.343 1033.13 670.951C1033.05 669.774 1032.89 668.6 1032.59 667.459C1032.14 665.711 1031.27 664.038 1029.92 662.845C1028.54 661.581 1026.68 660.772 1024.81 660.984C1022.98 665.327 1021.55 669.846 1020.51 674.452Z" fill="black"/> +<path d="M1034.58 645.206C1035.9 644.321 1037.59 644.06 1039.11 644.472C1040.73 644.894 1042.13 646.1 1042.83 647.654C1043.72 649.573 1043.46 651.993 1042.16 653.658C1040.31 655.855 1038.81 658.331 1037.45 660.862C1034.34 658.653 1031.07 656.671 1027.68 654.942C1029.18 652.168 1030.83 649.474 1032.77 646.999C1033.3 646.326 1033.86 645.665 1034.58 645.206Z" fill="#FFCA05"/> +<path d="M1020.51 674.452C1021.55 669.846 1022.98 665.327 1024.81 660.984C1026.68 660.772 1028.54 661.581 1029.92 662.845C1031.27 664.038 1032.14 665.711 1032.59 667.459C1032.89 668.6 1033.05 669.774 1033.13 670.951C1033.18 671.343 1033 671.704 1032.9 672.071C1030.13 681.216 1029.27 690.898 1029.89 700.429C1030 702.134 1029.32 703.87 1028.09 705.023C1026.29 706.82 1023.28 707.1 1021.18 705.691C1019.67 704.746 1018.66 703.04 1018.53 701.241C1017.94 692.277 1018.53 683.212 1020.51 674.452Z" fill="#FFCA05"/> +<path d="M996.039 572.527L996.945 572.781C999.672 573.654 1001.78 576.152 1002.15 579.027C1002.38 580.232 1002.06 581.459 1002.19 582.671C1002.34 584.864 1003.03 587.139 1004.65 588.654C1006.47 590.291 1008.98 590.85 1011.37 591.06C1013.75 591.258 1016.15 591.089 1018.51 590.765C1021.36 590.282 1024.37 591.538 1026 593.888C1027.45 595.882 1027.83 598.61 1027.02 600.983C1026.11 603.815 1023.51 606.016 1020.6 606.434C1015.57 607.148 1010.42 607.299 1005.47 606.237C1001.28 605.343 997.243 603.505 994.077 600.603C992.066 598.813 990.429 596.618 989.202 594.211C987.358 590.574 986.473 586.463 986.434 582.355C986.42 581.177 986.491 579.995 986.665 578.824L986.936 577.906C987.567 576.06 988.882 574.454 990.567 573.48C992.215 572.506 994.19 572.215 996.039 572.527ZM994.784 576.136C992.662 575.919 990.539 577.612 990.249 579.754C989.993 582.001 990.123 584.275 990.516 586.483C991.255 590.705 993.228 594.737 996.362 597.627C999.31 600.405 1003.17 602.05 1007.14 602.768C1011.44 603.546 1015.87 603.369 1020.21 602.749C1021.07 602.601 1021.9 602.162 1022.52 601.523C1023.74 600.303 1024.1 598.318 1023.39 596.777C1022.81 595.499 1021.56 594.571 1020.17 594.415C1019.43 594.319 1018.7 594.492 1017.98 594.573C1015.21 594.897 1012.4 594.999 1009.65 594.613C1007.9 594.363 1006.17 593.91 1004.6 593.113C1002.64 592.141 1000.99 590.554 999.992 588.592C998.697 586.063 998.291 583.12 998.552 580.275C998.614 578.166 996.873 576.245 994.784 576.136Z" fill="black"/> +<path d="M994.784 576.136C996.873 576.245 998.614 578.166 998.552 580.275C998.291 583.12 998.697 586.063 999.992 588.592C1000.99 590.554 1002.64 592.141 1004.6 593.113C1006.17 593.91 1007.9 594.363 1009.65 594.613C1012.4 594.999 1015.21 594.897 1017.98 594.573C1018.7 594.492 1019.43 594.319 1020.17 594.415C1021.56 594.571 1022.81 595.499 1023.39 596.777C1024.1 598.318 1023.74 600.303 1022.52 601.523C1021.9 602.162 1021.07 602.601 1020.21 602.749C1015.87 603.369 1011.44 603.546 1007.14 602.768C1003.17 602.05 999.31 600.405 996.362 597.627C993.228 594.737 991.255 590.705 990.516 586.483C990.123 584.275 989.993 582.001 990.249 579.754C990.539 577.612 992.662 575.919 994.784 576.136Z" fill="#FFCA05"/> +<path d="M1014.35 495.975L1015.51 497.11C1018.35 500.049 1020.37 503.86 1020.88 507.983C1021.18 510.468 1020.98 513.032 1020.23 515.45C1019.21 518.762 1017.55 521.842 1015.75 524.799C1012.67 529.755 1009.1 534.388 1005.32 538.824C1006.11 541.485 1006.47 544.295 1006.19 547.087C1005.88 550.303 1004.89 553.462 1003.35 556.322C1004.76 558.633 1005.46 561.395 1005.21 564.133C1004.96 567.533 1003.46 570.779 1001.33 573.443C997.819 577.812 992.739 580.94 987.263 581.939C985.027 582.348 982.728 582.369 980.503 581.995C977.892 581.567 975.319 580.731 973.104 579.284C971.13 578.007 969.471 576.232 968.392 574.132C968.258 573.867 968.105 573.594 967.812 573.488C967.083 573.136 966.366 572.762 965.698 572.307C962.302 575.82 958.913 579.34 955.52 582.856C954.658 583.758 953.815 584.732 952.667 585.274C950.351 586.484 947.439 586.172 945.417 584.619C942.019 581.252 938.56 577.947 935.139 574.606C933.284 572.832 931.484 570.998 929.594 569.262C927.869 567.371 927.36 564.452 928.4 562.046C928.788 561.081 929.438 560.244 930.175 559.517C935.218 554.3 940.249 549.072 945.289 543.853C945.214 541.442 945.544 538.905 946.858 536.804C947.91 535.087 949.622 533.817 951.532 533.244C951.121 530.731 951.179 528.053 952.225 525.661C952.613 524.725 953.191 523.881 953.794 523.07L954.596 522.239C956.055 520.837 957.891 519.81 959.866 519.425C962.571 518.892 965.371 519.451 967.804 520.61C970.087 518.643 972.864 517.262 975.793 516.662C979.763 515.832 983.991 516.424 987.503 518.357C986.824 517.71 986.164 516.992 985.861 516.08C985.361 514.801 985.516 513.186 986.536 512.165C988.345 510.285 990.162 508.41 991.97 506.529C992.368 506.12 992.742 505.678 993.21 505.345C993.637 505.045 994.148 504.916 994.641 504.776C994.072 502.746 994.073 500.525 994.792 498.505C995.511 496.447 996.985 494.668 998.84 493.533C1000.99 492.22 1003.57 491.616 1006.03 491.957C1009.16 492.381 1011.98 493.98 1014.35 495.975ZM1009.72 497.243C1008.01 496.218 1006.03 495.442 1003.98 495.61C1002.17 495.793 1000.35 496.585 999.185 498.051C998.019 499.493 997.712 501.477 998.119 503.229C998.739 506.001 1000.55 508.313 1002.6 510.176C1004.36 511.773 1006.29 513.286 1008.57 514.07C1009.66 514.433 1010.87 514.614 1011.99 514.229C1012.69 515.235 1013.39 516.24 1014.09 517.244C1012.02 518.563 1009.39 518.358 1007.2 517.587C1007.03 518.167 1006.74 518.709 1006.31 519.142C1004.28 521.247 1002.26 523.354 1000.22 525.449C999.408 526.296 998.164 526.626 997.044 526.43C995.837 526.274 994.846 525.515 993.996 524.704C994.611 525.637 995.025 526.686 995.42 527.73C998.917 529.127 1001.86 531.758 1003.69 535.052C1006.63 531.477 1009.47 527.8 1011.98 523.899C1013.64 521.283 1015.18 518.573 1016.27 515.673C1016.96 513.88 1017.35 511.971 1017.3 510.062C1017.22 504.798 1014.07 499.947 1009.72 497.243ZM995.863 508.197C995.498 508.07 995.263 508.422 995.032 508.644C993.084 510.679 991.115 512.696 989.169 514.734C988.835 515.031 989.076 515.51 989.348 515.739C991.767 518.089 994.183 520.443 996.606 522.788C996.873 523.124 997.417 523.163 997.687 522.786C999.613 520.804 1001.52 518.804 1003.45 516.823C1003.62 516.616 1003.89 516.428 1003.88 516.133C1003.92 515.829 1003.65 515.638 1003.48 515.442C1001.13 513.167 998.781 510.891 996.443 508.608C996.261 508.461 996.112 508.23 995.863 508.197ZM980.844 520.105C977.37 519.691 973.721 520.678 970.895 522.838C974.053 525.45 976.865 528.481 979.203 531.856C981.874 529.744 984.959 528.192 988.195 527.223C989.07 526.977 989.951 526.723 990.859 526.673C988.784 523.075 984.999 520.548 980.844 520.105ZM991.068 530.817C990.741 530.763 990.408 530.804 990.088 530.892C988.044 531.414 986.068 532.224 984.232 533.285C980.701 535.302 977.881 538.404 975.689 541.803C974.49 543.73 973.438 545.796 972.939 548.015C972.66 549.312 972.563 550.717 973.093 551.948C973.498 552.816 974.016 553.643 974.7 554.317C975.408 555.023 976.408 555.474 977.431 555.37C979.216 555.238 980.787 554.187 982.168 553.101C985.16 550.585 987.585 547.322 988.943 543.651C989.383 542.645 990.712 542.176 991.66 542.679C992.586 543.082 993.004 544.251 992.65 545.197C991.611 548.02 989.951 550.59 988.024 552.896C987.322 553.755 986.721 554.748 986.566 555.859C986.278 557.428 986.992 558.992 988.048 560.091C988.5 560.631 989.188 560.968 989.476 561.64C989.845 562.429 989.588 563.453 988.91 564.017C988.249 564.621 987.189 564.673 986.475 564.178C984.431 562.629 982.831 560.361 982.497 557.747C980.503 558.959 978.127 559.749 975.814 559.337C973.772 559.014 972.014 557.724 970.814 556.088C968.724 558.882 965.093 560.069 961.758 559.822C962.559 562.057 963.569 564.238 965.042 566.099C966.582 568.097 968.695 569.712 971.165 570.359C973.88 571.063 976.785 570.724 979.459 569.869C980.045 569.672 980.722 569.689 981.238 570.033C982.17 570.567 982.484 571.924 981.86 572.835C981.36 573.676 980.344 573.821 979.495 574.068C977.697 574.559 975.841 574.805 973.987 574.816C975.214 575.898 976.665 576.718 978.22 577.236C980.586 578.021 983.128 578.409 985.638 578.091C988.552 577.765 991.371 576.643 993.817 574.991C996.594 573.105 998.993 570.52 1000.32 567.405C1001.28 565.156 1001.54 562.57 1000.73 560.272C999.521 561.772 998.151 563.146 996.646 564.351C996.15 564.76 995.465 564.939 994.85 564.78C993.767 564.547 993.081 563.316 993.437 562.252C993.64 561.444 994.428 561.029 994.991 560.496C996.28 559.328 997.499 558.051 998.452 556.592C998.414 556.527 998.339 556.397 998.302 556.333C998.718 555.866 999.226 555.472 999.541 554.924C1001.54 551.403 1002.58 547.275 1002.12 543.27C1001.75 540.51 1000.82 537.795 999.167 535.564C997.252 532.981 994.274 531.228 991.068 530.817ZM966.219 524.408C965.04 523.796 963.749 523.371 962.41 523.282C960.548 523.124 958.615 523.85 957.299 525.22C956.124 526.39 955.488 528.015 955.368 529.639C955.193 531.787 955.757 533.923 956.678 535.824C958.021 538.315 960.101 540.306 962.322 542.003C964.476 543.604 966.83 544.975 969.382 545.847C970.756 541.549 973.306 537.681 976.398 534.407C974.198 531.149 971.513 528.224 968.482 525.735C967.682 525.372 967.012 524.785 966.219 524.408ZM960.553 545.795C957.398 543.497 954.465 540.687 952.763 537.107C952.063 537.322 951.374 537.636 950.853 538.175C949.914 539.126 949.531 540.467 949.39 541.753C949.229 543.447 949.344 545.188 949.958 546.769C951.069 549.714 953.48 551.941 956.112 553.529C958.197 554.749 960.507 555.896 963.011 555.762C964.748 555.732 966.608 555.069 967.663 553.592C968.446 552.482 968.506 551.044 968.198 549.782C965.466 548.837 962.9 547.463 960.553 545.795ZM951.071 554.992C948.91 553.203 947.137 550.911 946.135 548.262C941.552 553.029 936.952 557.776 932.37 562.544C931.265 563.71 931.314 565.732 932.465 566.799C937.517 571.704 942.565 576.616 947.619 581.518C948.726 582.604 950.698 582.54 951.803 581.416C955.502 577.585 959.197 573.751 962.895 569.918C960.02 566.797 958.22 562.811 957.209 558.691C955.002 557.751 952.91 556.531 951.071 554.992Z" fill="black"/> +<path d="M1009.72 497.243C1014.07 499.947 1017.22 504.798 1017.3 510.062C1017.35 511.971 1016.96 513.88 1016.27 515.673C1015.18 518.573 1013.64 521.283 1011.98 523.899C1009.47 527.8 1006.63 531.477 1003.69 535.052C1001.86 531.758 998.917 529.127 995.42 527.73C995.025 526.686 994.611 525.637 993.996 524.704C994.846 525.515 995.837 526.274 997.044 526.43C998.164 526.626 999.408 526.296 1000.22 525.449C1002.26 523.354 1004.28 521.247 1006.31 519.142C1006.74 518.709 1007.03 518.167 1007.2 517.587C1009.39 518.358 1012.02 518.563 1014.09 517.244C1013.39 516.24 1012.69 515.235 1011.99 514.229C1010.87 514.614 1009.66 514.433 1008.57 514.07C1006.29 513.286 1004.36 511.773 1002.6 510.176C1000.55 508.313 998.739 506.001 998.119 503.229C997.712 501.477 998.019 499.493 999.185 498.051C1000.35 496.585 1002.17 495.793 1003.98 495.61C1006.03 495.442 1008.01 496.218 1009.72 497.243Z" fill="white"/> +<path d="M991.068 530.817C994.274 531.228 997.252 532.981 999.167 535.564C1000.82 537.795 1001.75 540.51 1002.12 543.27C1002.58 547.275 1001.54 551.403 999.541 554.924C999.226 555.472 998.718 555.866 998.302 556.333C998.339 556.397 998.414 556.527 998.452 556.592C997.499 558.051 996.28 559.328 994.991 560.496C994.428 561.029 993.64 561.444 993.437 562.252C993.081 563.316 993.767 564.547 994.85 564.78C995.465 564.939 996.15 564.76 996.646 564.351C998.151 563.146 999.521 561.772 1000.73 560.272C1001.54 562.57 1001.28 565.156 1000.32 567.405C998.993 570.52 996.594 573.105 993.817 574.991C991.371 576.643 988.552 577.765 985.638 578.091C983.128 578.409 980.586 578.021 978.22 577.236C976.665 576.718 975.214 575.898 973.987 574.816C975.841 574.805 977.697 574.559 979.495 574.068C980.344 573.821 981.36 573.676 981.86 572.835C982.484 571.924 982.17 570.567 981.238 570.033C980.722 569.689 980.045 569.672 979.459 569.869C976.785 570.724 973.88 571.063 971.165 570.359C968.695 569.712 966.582 568.097 965.042 566.099C963.569 564.238 962.559 562.057 961.758 559.822C965.093 560.069 968.724 558.882 970.814 556.088C972.014 557.724 973.772 559.014 975.814 559.337C978.127 559.749 980.503 558.959 982.497 557.747C982.831 560.361 984.431 562.629 986.475 564.178C987.189 564.673 988.249 564.621 988.91 564.017C989.588 563.453 989.845 562.429 989.476 561.64C989.188 560.968 988.5 560.631 988.048 560.091C986.992 558.992 986.278 557.428 986.566 555.859C986.721 554.748 987.322 553.755 988.024 552.896C989.951 550.59 991.611 548.02 992.65 545.197C993.004 544.251 992.586 543.082 991.66 542.679C990.712 542.176 989.383 542.645 988.943 543.651C987.585 547.322 985.16 550.585 982.168 553.101C980.787 554.187 979.216 555.238 977.431 555.37C976.408 555.474 975.408 555.023 974.7 554.317C974.016 553.643 973.498 552.816 973.093 551.948C972.563 550.717 972.66 549.312 972.939 548.015C973.438 545.796 974.49 543.73 975.689 541.803C977.881 538.404 980.701 535.302 984.232 533.285C986.068 532.224 988.044 531.414 990.088 530.892C990.408 530.804 990.741 530.763 991.068 530.817Z" fill="white"/> +<path d="M966.219 524.408C967.012 524.785 967.682 525.372 968.482 525.735C971.513 528.224 974.198 531.149 976.398 534.407C973.306 537.681 970.756 541.549 969.382 545.847C966.83 544.975 964.476 543.604 962.322 542.003C960.101 540.306 958.021 538.315 956.678 535.824C955.757 533.923 955.193 531.787 955.368 529.639C955.488 528.015 956.124 526.39 957.299 525.22C958.615 523.85 960.548 523.124 962.41 523.282C963.749 523.371 965.04 523.796 966.219 524.408Z" fill="white"/> +<path d="M960.553 545.795C962.9 547.463 965.466 548.837 968.198 549.782C968.506 551.044 968.446 552.482 967.663 553.592C966.608 555.069 964.748 555.732 963.011 555.762C960.507 555.896 958.197 554.749 956.112 553.529C953.48 551.941 951.069 549.714 949.958 546.769C949.344 545.188 949.229 543.447 949.39 541.753C949.531 540.467 949.914 539.126 950.853 538.175C951.374 537.636 952.063 537.322 952.763 537.107C954.465 540.687 957.398 543.497 960.553 545.795Z" fill="white"/> +<path d="M995.863 508.197C996.112 508.23 996.261 508.461 996.443 508.608C998.781 510.891 1001.13 513.167 1003.48 515.442C1003.65 515.638 1003.92 515.829 1003.88 516.133C1003.89 516.428 1003.62 516.616 1003.45 516.823C1001.52 518.804 999.613 520.804 997.687 522.786C997.417 523.163 996.873 523.124 996.606 522.788C994.183 520.443 991.767 518.089 989.348 515.739C989.076 515.51 988.835 515.031 989.169 514.734C991.115 512.696 993.084 510.679 995.032 508.644C995.263 508.422 995.498 508.07 995.863 508.197Z" fill="#BC26DB"/> +<path d="M951.071 554.992C952.91 556.531 955.002 557.751 957.209 558.691C958.22 562.811 960.02 566.797 962.895 569.918C959.197 573.751 955.502 577.585 951.803 581.416C950.698 582.54 948.726 582.604 947.619 581.518C942.565 576.616 937.517 571.704 932.465 566.799C931.314 565.732 931.265 563.71 932.37 562.544C936.952 557.776 941.552 553.029 946.135 548.262C947.137 550.911 948.91 553.203 951.071 554.992Z" fill="#BC26DB"/> +<path d="M980.844 520.105C984.999 520.548 988.784 523.075 990.859 526.673C989.951 526.723 989.07 526.977 988.195 527.223C984.959 528.192 981.874 529.744 979.203 531.856C976.865 528.481 974.053 525.45 970.895 522.838C973.721 520.678 977.37 519.691 980.844 520.105Z" fill="#B5B5B5"/> +<path d="M929.594 569.262C931.484 570.998 933.284 572.832 935.139 574.606C938.56 577.947 942.019 581.252 945.417 584.619L945.151 584.551L929.349 569.199L929.594 569.262Z" fill="black"/> +<path d="M942.493 480.739C949.243 481.528 958.529 487.334 968.446 493.716C973.661 497.073 979.33 501.567 984.424 504.638C988.686 507.206 980.844 499.226 979.054 496.944C962.271 475.561 957.394 459.214 957.487 448" stroke="black" stroke-width="2.64052" stroke-linecap="round"/> +<path d="M1078.93 462H1081.94C1084.97 462.205 1087.98 462.719 1090.96 463.298C1093.95 464.156 1096.95 465.007 1099.82 466.212C1100.99 466.986 1102.24 467.6 1103.44 468.288C1104.63 469.152 1105.9 469.875 1107.09 470.719C1110.55 473.481 1113.7 476.683 1116.2 480.388C1117.1 481.731 1117.96 483.098 1118.84 484.461C1119.7 485.791 1120.26 487.298 1121.01 488.69C1121.82 490.187 1122.33 491.819 1123.05 493.356C1124.17 495.645 1124.64 498.185 1125.54 500.566C1125.91 501.556 1126.02 502.617 1126.25 503.647C1127.41 507.972 1128.03 512.431 1128.45 516.89C1128.56 520.384 1128.98 523.867 1128.93 527.368C1128.73 532.643 1128.6 537.948 1127.63 543.151C1126.99 546.455 1126.78 549.844 1125.86 553.088C1124.67 557.4 1123.79 561.821 1122.09 565.969C1121.03 568.681 1119.87 571.351 1118.84 574.073C1118.21 575.76 1117.57 577.465 1117.33 579.264C1117.01 579.623 1116.88 580.254 1117.38 580.529C1117.31 584.195 1118.11 587.8 1118.91 591.351C1119.7 593.906 1120.57 596.437 1121.19 599.044C1121.68 600.694 1121.9 602.448 1122.7 603.988C1126.65 612.028 1128.55 621.2 1127.59 630.184C1126.61 639.424 1122.92 648.32 1117.27 655.574C1115.35 657.682 1113.53 659.888 1111.49 661.875C1108.25 665.031 1104.74 667.916 1100.87 670.217C1095.04 672.989 1089.03 675.314 1082.95 677.438C1081.18 677.73 1079.44 678.192 1077.64 678.276C1075.84 678.381 1074.06 678.92 1072.25 678.768C1067.85 678.381 1063.35 678.509 1059.09 677.164C1055.33 676.415 1051.82 674.756 1048.37 673.109C1046.24 672.086 1044.18 670.915 1042.1 669.797C1040.9 669.166 1039.94 668.183 1038.82 667.432C1037.03 666.221 1035.52 664.647 1033.94 663.175C1030.71 660.11 1027.95 656.562 1025.52 652.811C1023.97 650.366 1022.32 647.948 1021.27 645.221C1019.67 641.917 1018.55 638.401 1017.43 634.907C1016.99 632.557 1016.31 630.259 1016.02 627.881C1015.55 625.313 1015.35 622.713 1015.21 620.11V618.568C1015.48 614.573 1015.87 610.588 1016.37 606.618C1016.64 604.032 1017.32 601.522 1017.9 598.997C1018.54 596.482 1019.6 594.109 1020.46 591.666C1021.6 588.511 1022.36 585.238 1023.3 582.019C1023.99 579.658 1024.66 577.287 1025.31 574.917C1025.97 572.556 1026.06 570.088 1026.34 567.665C1026.69 564.641 1026.47 561.594 1026.38 558.565C1026.36 555.975 1025.81 553.434 1025.53 550.872C1025.32 548.845 1024.78 546.867 1024.67 544.83C1024.61 543.57 1024.16 542.373 1024.11 541.112C1024 538.607 1023.49 536.134 1023.5 533.621C1023.51 529.619 1023.41 525.601 1023.87 521.619C1024.71 514.39 1026.4 507.263 1028.9 500.451C1029.89 498.11 1030.89 495.765 1032.07 493.516C1032.59 492.271 1033.28 491.116 1034.02 490C1035.25 487.744 1036.85 485.736 1038.26 483.6C1041.51 479.295 1045.41 475.542 1049.66 472.291C1051.88 470.377 1054.45 468.997 1056.98 467.572C1059.55 466.404 1062.11 465.214 1064.78 464.296C1065.48 464.193 1066.18 464.024 1066.84 463.737C1070.79 462.684 1074.85 462.047 1078.93 462ZM1059.33 470.534C1057.09 471.862 1054.67 472.915 1052.62 474.574C1048.77 477.656 1044.94 480.86 1041.91 484.825C1039.79 487.697 1037.65 490.579 1035.97 493.756C1035.39 495.188 1034.46 496.441 1033.94 497.898C1032.32 501.723 1030.65 505.551 1029.69 509.614C1028.61 513.199 1028.04 516.918 1027.62 520.636C1027.4 522.634 1027.1 524.626 1027.05 526.639C1026.95 530.293 1027.22 533.941 1027.34 537.589C1027.57 539.757 1027.77 541.936 1028.17 544.079C1028.53 546.879 1028.94 549.674 1029.41 552.456C1029.55 554.744 1029.77 557.03 1030.1 559.301C1030.27 562.073 1029.96 564.841 1029.86 567.613C1029.55 570.328 1029.36 573.07 1028.81 575.75C1027.32 581.17 1025.96 586.632 1024.17 591.958C1022.71 596.334 1020.71 600.604 1020.23 605.255C1019.41 608.432 1019.24 611.731 1018.83 614.98C1018.6 616.397 1018.99 617.817 1018.82 619.234C1018.64 620.906 1019.12 622.545 1019.16 624.212C1019.39 626.388 1019.68 628.567 1020.22 630.69C1020.51 632.407 1020.83 634.134 1021.44 635.768C1022.05 637.338 1022.35 639.03 1023.15 640.522C1024.15 642.533 1024.83 644.699 1025.91 646.668C1028.17 650.578 1030.78 654.271 1033.63 657.76C1035.57 659.691 1037.53 661.605 1039.59 663.412C1041.56 665.183 1043.82 666.583 1046.06 667.976C1047.87 669.291 1049.97 670.064 1052.01 670.918C1055.35 672.5 1058.93 673.67 1062.6 674.079C1062.69 674.546 1063.57 674.531 1063.92 674.304L1064.09 674.421C1069.05 675.327 1074.12 674.943 1079.11 674.464C1081.14 674.029 1083.15 673.558 1085.18 673.139C1087.74 672.35 1090.29 671.484 1092.74 670.381C1094.58 669.346 1096.56 668.567 1098.32 667.374C1100.96 665.935 1103.34 664.065 1105.68 662.181C1108.01 660.325 1109.95 658.054 1112.03 655.928C1112.51 655.342 1112.89 654.675 1113.39 654.094C1118.03 648.252 1121.47 641.353 1123.01 633.969C1125.09 624.125 1123.67 613.627 1119.42 604.581C1118.97 603.553 1118.23 602.645 1118.09 601.502C1117.08 597.694 1115.83 593.959 1114.83 590.148C1114.37 587.376 1113.93 584.586 1113.81 581.774C1113.84 577.29 1114.85 572.801 1116.82 568.791C1117.25 567.885 1117.92 567.104 1118.18 566.118C1119.7 562.106 1120.77 557.936 1121.91 553.801C1122.48 551.491 1122.8 549.125 1123.3 546.799C1124.38 541.05 1124.86 535.206 1125.16 529.367C1125.42 525.287 1124.88 521.217 1124.79 517.14C1124.44 513.808 1123.94 510.487 1123.29 507.203C1123.04 505.047 1122.29 503.003 1121.73 500.92C1120.46 496.311 1118.77 491.792 1116.33 487.692C1114.67 484.261 1112.19 481.351 1109.87 478.377C1106.44 474.941 1102.73 471.637 1098.21 469.823C1097.3 469.501 1096.54 468.87 1095.64 468.538C1090.64 466.751 1085.36 465.728 1080.05 465.741C1072.92 465.783 1065.75 467.29 1059.33 470.534Z" fill="black"/> +<path d="M1077.93 471.285C1078.99 470.764 1080.66 471.375 1080.68 472.732C1080.77 473.586 1080.04 474.145 1079.6 474.761C1079.03 475.47 1078.54 476.413 1077.6 476.633C1076.17 476.972 1074.8 475.058 1075.72 473.815C1076.36 472.902 1076.97 471.874 1077.93 471.285Z" fill="black"/> +<path d="M1084.32 471.912C1084.83 471.712 1085.43 471.742 1085.94 471.909C1086.9 472.498 1086.98 473.751 1087.43 474.694C1088.63 477.152 1088.73 480.004 1088.47 482.689C1088.33 484.902 1087.42 487.086 1085.91 488.685C1083.79 490.657 1080.7 491.6 1077.89 490.909C1074.68 490.128 1071.71 488.303 1069.46 485.836C1068.84 485.169 1068.23 484.199 1068.67 483.255C1069.13 482.003 1070.93 481.636 1071.79 482.686C1073.54 484.957 1076.01 486.774 1078.84 487.268C1080.56 487.567 1082.57 487.161 1083.67 485.668C1085.01 483.919 1084.93 481.556 1084.89 479.452C1084.91 477.411 1083.63 475.694 1083.31 473.731C1083.16 472.962 1083.69 472.263 1084.32 471.912Z" fill="black"/> +<path d="M1064.53 474.834C1065.52 474.469 1066.95 474.826 1067.22 475.986C1067.39 477.057 1066.8 478.045 1066.35 478.966C1064.89 481.613 1063.39 484.291 1061.25 486.432C1059.66 488.056 1057.76 489.594 1055.46 489.895C1053.71 490.17 1051.71 489.648 1050.61 488.144C1049.79 487.003 1049.13 485.638 1049.15 484.194C1049.15 483.413 1049.58 482.619 1050.31 482.317C1051.16 482.105 1052.21 482.489 1052.57 483.348C1052.82 484.313 1052.94 485.484 1053.82 486.093C1054.59 486.562 1055.52 486.155 1056.23 485.761C1058 484.72 1059.26 483.018 1060.57 481.459C1061.66 479.939 1062.65 478.32 1063.33 476.563C1063.6 475.912 1063.89 475.183 1064.53 474.834Z" fill="black"/> +<path d="M1099.15 474.764C1099.78 474.382 1100.61 474.587 1101.17 475.028C1102.56 476.079 1103.85 477.379 1104.57 479.013C1104.94 480.144 1105.58 481.227 1105.55 482.454C1105.6 484.114 1105.49 485.898 1104.56 487.315C1103.78 488.446 1102.66 489.332 1101.39 489.801C1099.3 490.305 1097.03 490.192 1095.05 489.317C1093.93 488.867 1093.58 487.268 1094.25 486.3C1094.85 485.616 1095.9 485.421 1096.7 485.846C1098.09 486.537 1099.93 486.709 1101.19 485.643C1102.15 484.807 1102.1 483.365 1101.83 482.217C1101.47 480.78 1100.83 479.285 1099.58 478.439C1098.92 477.965 1098.08 477.409 1098.08 476.475C1098.01 475.714 1098.62 475.178 1099.15 474.764Z" fill="black"/> +<path d="M1105.04 492.882C1105.5 492.773 1106.02 492.595 1106.47 492.837C1107.68 493.456 1108.48 494.634 1109.44 495.575C1111.35 497.439 1112.74 499.78 1113.96 502.155C1114.79 504.451 1115.28 507.016 1114.63 509.429C1114.18 511.168 1113.04 512.813 1111.4 513.531C1110.07 513.921 1108.7 512.331 1109.22 511.034C1109.66 510.123 1110.76 509.716 1111.04 508.7C1111.57 506.964 1111.37 504.995 1110.47 503.42C1109.26 501.197 1107.98 498.914 1106.01 497.302C1105.3 496.695 1104.5 496.144 1104.05 495.3C1103.55 494.397 1104.28 493.327 1105.04 492.882Z" fill="black"/> +<path d="M1070.2 494.894C1073.64 494.222 1077.08 495.348 1080.19 496.773C1081.01 497.152 1081.85 497.945 1081.67 498.964C1081.49 500.353 1079.67 501.007 1078.6 500.214C1076.52 498.801 1073.94 498.477 1071.5 498.527C1069.69 498.552 1067.91 499.385 1066.73 500.793C1066.23 501.411 1066.15 502.295 1065.6 502.881C1064.67 503.775 1062.89 503.193 1062.61 501.918C1062.45 501.12 1062.83 500.356 1063.2 499.682C1064.02 498.232 1065.17 496.917 1066.63 496.134C1067.8 495.657 1068.94 495.058 1070.2 494.894Z" fill="black"/> +<path d="M1113.28 520.77C1114.24 520.231 1115.64 520.76 1115.86 521.911C1116.43 524.354 1116.69 526.886 1116.56 529.397C1116.43 532.83 1116.2 536.311 1115.14 539.598C1114.42 541.866 1113.55 544.122 1112.27 546.126C1111.62 546.782 1111.32 547.942 1110.3 548.084C1108.98 548.386 1107.68 546.894 1108.14 545.589C1108.45 544.955 1108.98 544.481 1109.36 543.887C1110.2 542.674 1110.65 541.245 1111.14 539.852C1112.23 536.641 1112.88 533.267 1112.98 529.868C1113.03 528.279 1112.86 526.697 1112.79 525.112C1112.75 524.174 1112.34 523.306 1112.27 522.375C1112.22 521.669 1112.8 521.17 1113.28 520.77Z" fill="black"/> +<path d="M1038.43 534.704C1039.76 534.1 1041.47 535.336 1041.13 536.848C1040.89 538.313 1038.96 538.697 1037.99 537.719C1036.99 536.915 1037.47 535.303 1038.43 534.704Z" fill="black"/> +<path d="M1032.81 537.407C1033.73 536.913 1035 537.527 1035.28 538.547C1035.66 539.635 1034.84 540.878 1033.76 541.052C1032.56 541.165 1031.4 539.922 1031.67 538.694C1031.8 538.096 1032.36 537.746 1032.81 537.407Z" fill="black"/> +<path d="M1089.16 537.988C1089.89 537.806 1090.8 537.961 1091.22 538.664C1091.96 539.837 1091.1 541.544 1089.82 541.796C1088.83 541.901 1087.89 541.06 1087.72 540.084C1087.59 539.144 1088.4 538.355 1089.16 537.988Z" fill="black"/> +<path d="M1039.15 541.893C1040.12 541.492 1041.53 541.928 1041.76 543.086C1042.06 544.242 1041.11 545.295 1040.09 545.611C1039.08 545.769 1038.1 544.873 1037.93 543.88C1037.83 543.006 1038.53 542.36 1039.15 541.893Z" fill="black"/> +<path d="M1095.2 543.411C1096.57 542.694 1098.45 544.012 1098.08 545.602C1097.76 547.154 1095.62 547.513 1094.67 546.348C1093.76 545.509 1094.15 543.912 1095.2 543.411Z" fill="black"/> +<path d="M1089.09 544.878C1090.48 544.421 1091.93 546.128 1091.34 547.478C1090.82 548.626 1089.01 548.995 1088.2 547.982C1087.39 547.004 1087.68 545.075 1089.09 544.878Z" fill="black"/> +<path d="M1106.66 557.13C1108.01 556.374 1109.78 557.819 1109.31 559.316C1108.95 560.9 1108.85 562.54 1108.37 564.095C1107.11 568.419 1105.43 572.708 1102.69 576.292C1101.01 578.488 1098.83 580.466 1096.1 581.123C1094.05 581.689 1091.61 581.37 1090.1 579.715C1087.39 576.838 1086.26 572.708 1086.28 568.781C1086.28 567.783 1086.1 566.705 1086.57 565.781C1087.36 564.451 1089.66 565.063 1089.87 566.555C1089.98 568.047 1089.76 569.557 1090.02 571.042C1090.35 573.01 1090.94 575.022 1092.2 576.586C1092.84 577.402 1093.89 577.909 1094.92 577.687C1096.5 577.357 1097.73 576.189 1098.81 575.037C1102.31 571.184 1104.22 566.126 1105.36 561.07C1105.75 559.738 1105.26 557.936 1106.66 557.13Z" fill="black"/> +<path d="M1037.69 559.376C1038.65 559.016 1040.09 559.371 1040.32 560.531C1040.43 561.789 1040.15 563.039 1040.12 564.297C1040.05 566.388 1040.12 568.484 1040.19 570.575C1040.41 572.736 1040.45 574.964 1041.24 577.013C1041.65 578.443 1042.38 579.805 1043.47 580.816C1044.14 581.405 1045.24 581.714 1045.37 582.737C1045.61 584.207 1043.83 585.452 1042.59 584.669C1040.68 583.418 1039.03 581.629 1038.22 579.438C1037.76 578.35 1037.3 577.235 1037.2 576.042C1037.08 574.61 1036.6 573.23 1036.6 571.785C1036.56 569.375 1036.45 566.962 1036.55 564.551C1036.61 563.221 1036.41 561.869 1036.71 560.561C1036.83 560.032 1037.26 559.658 1037.69 559.376Z" fill="black"/> +<path d="M1036.77 592.384C1037.85 591.301 1039.13 590.388 1040.57 589.884C1041.37 589.624 1042.11 590.118 1042.76 590.53C1042.9 591.206 1043.21 591.958 1042.87 592.626C1042.55 593.265 1041.8 593.407 1041.21 593.687C1040.1 594.096 1039.36 595.099 1038.63 595.995C1037.14 597.824 1036.11 600.102 1035.93 602.493C1035.69 603.958 1033.42 604.372 1032.68 603.107C1032.16 602.243 1032.35 601.17 1032.59 600.247C1033.39 597.362 1034.66 594.518 1036.77 592.384Z" fill="black"/> +<path d="M1105.98 590.585C1106.78 590.186 1107.91 590.408 1108.29 591.296C1108.89 592.639 1109.58 593.959 1109.94 595.399C1110.21 596.412 1110.23 597.475 1110.5 598.49C1110.77 599.336 1110.2 600.257 1109.46 600.611C1108.56 600.918 1107.37 600.527 1107.04 599.556C1106.6 598.358 1106.75 597.021 1106.29 595.828C1105.82 594.645 1105.1 593.542 1104.9 592.264C1104.84 591.518 1105.45 590.979 1105.98 590.585Z" fill="black"/> +<path d="M1089.21 593.919C1089.8 593.677 1090.59 593.694 1091.06 594.203C1092.14 595.429 1092.79 596.963 1093.51 598.423C1094.38 600.07 1094.9 601.879 1095.33 603.688C1095.5 604.382 1095.59 605.273 1094.99 605.789C1094.16 606.695 1092.5 606.311 1092.05 605.188C1091.55 603.898 1091.33 602.503 1090.73 601.248C1090.14 599.96 1089.72 598.578 1088.9 597.41C1088.53 596.823 1088.02 596.212 1088.12 595.463C1088.18 594.787 1088.72 594.313 1089.21 593.919Z" fill="black"/> +<path d="M1056.5 594.608C1057.53 594.094 1059.11 594.74 1059.17 596.012C1059.13 596.856 1058.72 597.629 1058.63 598.47C1057.97 602.757 1057.79 607.189 1058.7 611.456C1059.06 613.145 1059.65 614.785 1060.49 616.29C1061.2 617.44 1060.19 619.177 1058.86 619.072C1058.04 619.077 1057.4 618.431 1057.08 617.709C1056.3 615.978 1055.59 614.201 1055.09 612.364C1054.88 610.742 1054.48 609.133 1054.56 607.486C1054.46 603.863 1054.69 600.235 1055.28 596.661C1055.38 595.823 1055.78 595.044 1056.5 594.608Z" fill="black"/> +<path d="M1046.68 596.579C1047.45 596.304 1048.47 596.412 1048.9 597.2C1049.54 598.348 1049.38 599.726 1049.49 600.993C1049.8 603.626 1049.11 606.286 1048.02 608.654C1047.05 610.61 1045.65 612.537 1043.58 613.355C1041.18 614.293 1038.43 613.867 1036.19 612.691C1034.84 611.98 1033.65 610.887 1032.97 609.487C1032.35 608.107 1033.9 606.326 1035.31 606.872C1036.17 607.214 1036.39 608.245 1037.05 608.821C1038.55 610.124 1040.84 610.558 1042.61 609.58C1043.84 608.906 1044.57 607.601 1045.06 606.316C1046.09 603.835 1046.03 601.095 1045.65 598.48C1045.47 597.714 1046.04 596.908 1046.68 596.579Z" fill="black"/> +<path d="M1075.45 598.303C1076.23 598.006 1077.33 598.004 1077.88 598.742C1080.51 603.082 1081.65 608.187 1082.02 613.233C1082.13 616.302 1080.57 619.506 1077.85 620.931C1075.76 622.056 1073.29 621.914 1071.03 621.572C1069.6 621.215 1067.97 620.761 1067.12 619.436C1066.32 618.204 1067.43 616.359 1068.85 616.502C1069.6 616.684 1070.07 617.398 1070.79 617.652C1072.35 618.174 1074.09 618.226 1075.65 617.692C1076.85 617.295 1077.92 616.332 1078.24 615.057C1078.6 613.617 1078.21 612.147 1078.07 610.705C1077.98 609.335 1077.52 608.038 1077.31 606.688C1077.05 605.103 1076.3 603.681 1075.69 602.221C1075.43 601.545 1074.76 601.148 1074.49 600.487C1074.36 599.673 1074.69 598.685 1075.45 598.303Z" fill="black"/> +<path d="M1091.06 612.534C1092.22 611.973 1093.83 612.854 1093.83 614.199C1092.85 617.677 1092.48 621.363 1092.93 624.963C1093.21 626.615 1093.59 628.372 1094.72 629.65C1095.58 630.58 1096.98 630.648 1098.13 630.368C1099.72 630.012 1101.25 629.273 1102.48 628.165C1103.12 627.623 1103.22 626.633 1103.98 626.214C1104.75 625.685 1105.92 625.857 1106.42 626.683C1107.03 627.661 1106.65 628.941 1105.97 629.769C1103.87 632.397 1100.65 634.044 1097.35 634.281C1095.03 634.423 1092.77 633.168 1091.43 631.257C1089.6 628.744 1089.16 625.505 1089.06 622.451C1088.9 619.596 1089.41 616.761 1090.09 614.006C1090.25 613.432 1090.52 612.821 1091.06 612.534Z" fill="black"/> +<path d="M1028.65 621.273C1029.58 621.001 1030.83 621.405 1031.1 622.453C1031.25 623.773 1030.83 625.088 1030.98 626.413C1031.17 628.22 1031.1 630.106 1031.83 631.801C1032.39 632.931 1031.33 634.491 1030.09 634.299C1029.11 634.216 1028.4 633.343 1028.13 632.432C1027.63 630.648 1027.63 628.779 1027.45 626.947C1027.32 625.527 1027.39 624.098 1027.51 622.68C1027.52 622.001 1028.15 621.595 1028.65 621.273Z" fill="black"/> +<path d="M1114.29 622.548C1114.51 621.7 1115.48 621.557 1116.17 621.308C1116.71 621.567 1117.42 621.71 1117.68 622.346C1118.25 623.551 1118.31 624.919 1118.59 626.211C1119.15 628.829 1119.05 631.541 1118.78 634.189C1118.26 636.479 1117.33 638.775 1115.63 640.42C1114.28 641.72 1112.38 642.533 1110.52 642.214C1109.19 641.815 1108.88 639.683 1110.02 638.892C1110.86 638.378 1111.98 638.648 1112.76 638.004C1114.19 636.856 1115.09 635.05 1115.19 633.196C1115.39 630.65 1115.54 628.013 1114.76 625.55C1114.49 624.582 1114.06 623.571 1114.29 622.548Z" fill="black"/> +<path d="M1044.74 624.759C1045.63 624.302 1046.91 624.619 1047.24 625.665C1048.56 630.017 1048.87 634.72 1047.92 639.189C1047.33 641.872 1045.86 644.574 1043.34 645.795C1041.85 646.578 1040.11 646.623 1038.5 646.231C1035.74 645.625 1033.14 644.073 1031.41 641.777C1030.72 640.874 1030.44 639.342 1031.39 638.521C1032.25 637.715 1033.74 638.129 1034.23 639.164C1034.87 640.627 1036.35 641.418 1037.71 642.029C1039.16 642.586 1040.89 643.097 1042.32 642.241C1043.75 641.138 1044.18 639.232 1044.52 637.53C1045.06 633.829 1044.7 630.017 1043.68 626.438C1043.6 625.715 1044.19 625.108 1044.74 624.759Z" fill="black"/> +<path d="M1055 630.498C1055.67 630.124 1056.59 630.406 1057 631.062C1057.69 632.135 1057.79 633.463 1058.09 634.683C1058.32 635.851 1058.83 636.984 1058.76 638.194C1058.58 639.254 1057.42 640.008 1056.4 639.604C1055.24 639.297 1055.05 637.909 1054.85 636.894C1054.65 635.294 1053.94 633.809 1053.82 632.202C1053.71 631.386 1054.41 630.877 1055 630.498Z" fill="black"/> +<path d="M1081.84 635.035C1082.94 634.618 1084.51 635.344 1084.42 636.692C1083.89 639.244 1083.43 641.912 1082.04 644.155C1081.31 645.173 1080.68 646.276 1079.82 647.182C1078.43 648.564 1076.87 649.827 1075.03 650.526C1073.11 651.536 1070.94 651.823 1068.82 651.931C1066.27 651.926 1063.69 651.729 1061.24 650.98C1060.29 650.658 1059.19 650.234 1058.77 649.211C1058.29 648.03 1059.31 646.563 1060.56 646.628C1061.18 646.708 1061.73 647.035 1062.28 647.299C1063.63 648.015 1065.17 648.128 1066.66 648.225C1069.1 648.312 1071.63 648.11 1073.88 647.065C1076.69 645.597 1078.95 642.995 1079.94 639.916C1080.32 638.63 1080.57 637.308 1080.86 636C1081.1 635.601 1081.46 635.284 1081.84 635.035Z" fill="black"/> +<path d="M1100.56 650.695C1101.63 650.381 1102.96 651.189 1103 652.385C1103.02 653.448 1102.27 654.286 1101.68 655.087C1098.9 658.458 1096.23 662.007 1092.76 664.679C1091.2 665.817 1089.33 666.828 1087.35 666.518C1084.94 666.371 1083.1 664.175 1082.63 661.872C1082.35 660.006 1082.62 657.822 1084.05 656.485C1085.11 655.539 1086.92 656.54 1086.97 657.912C1087.11 658.683 1086.26 659.12 1086.21 659.846C1086.1 660.782 1086.25 661.862 1086.96 662.531C1087.61 663.05 1088.49 662.84 1089.17 662.496C1090.96 661.595 1092.45 660.2 1093.74 658.671C1095.81 656.28 1098.22 654.134 1099.72 651.294C1099.9 650.982 1100.25 650.838 1100.56 650.695Z" fill="black"/> +<path d="M1052.11 653.752C1052.87 653.468 1053.91 653.747 1054.29 654.538C1054.94 655.801 1055.26 657.231 1055.35 658.646C1055.3 660.612 1054.59 662.686 1053.02 663.911C1051.51 665.136 1049.44 665.418 1047.61 664.916C1044.33 664.06 1041.56 661.904 1039.11 659.609C1038.13 658.636 1037.01 657.757 1036.28 656.557C1035.55 655.252 1036.99 653.495 1038.37 653.977C1039.65 654.314 1040.29 655.626 1041.2 656.487C1043.25 658.448 1045.5 660.372 1048.23 661.218C1049.03 661.356 1050.02 661.672 1050.7 661.049C1051.6 660.12 1051.97 658.631 1051.53 657.388C1051.33 656.794 1051.04 656.235 1050.93 655.621C1050.82 654.8 1051.47 654.129 1052.11 653.752Z" fill="black"/> +<path d="M1076.92 655.734C1077.89 655.379 1079.17 655.823 1079.51 656.871C1079.64 657.351 1079.66 657.957 1079.32 658.359C1078 659.806 1077.35 661.787 1075.87 663.1C1074.45 664.372 1072.82 665.423 1071.08 666.162C1069.1 666.748 1066.92 666.84 1064.97 666.084C1063.59 665.543 1061.97 665.141 1061.07 663.841C1060.25 662.596 1061.62 660.799 1063 661.108C1063.8 661.37 1064.44 661.999 1065.23 662.314C1066.99 663.137 1069.14 663.135 1070.85 662.179C1072.49 661.286 1073.88 659.948 1074.93 658.386C1075.52 657.453 1075.81 656.173 1076.92 655.734Z" fill="black"/> +<path d="M1064.78 464.296C1065.43 463.999 1066.13 463.802 1066.84 463.737C1066.18 464.024 1065.48 464.193 1064.78 464.296Z" fill="#403201"/> +<path d="M1059.33 470.534C1065.75 467.29 1072.92 465.783 1080.05 465.741C1085.36 465.728 1090.64 466.751 1095.64 468.538C1096.54 468.87 1097.3 469.501 1098.21 469.823C1102.73 471.637 1106.44 474.941 1109.87 478.377C1112.19 481.351 1114.67 484.261 1116.33 487.692C1118.77 491.792 1120.46 496.311 1121.73 500.92C1122.29 503.003 1123.04 505.047 1123.29 507.203C1123.94 510.487 1124.44 513.808 1124.79 517.14C1124.88 521.217 1125.42 525.287 1125.16 529.367C1124.86 535.206 1124.38 541.05 1123.3 546.799C1122.8 549.125 1122.48 551.491 1121.91 553.801C1120.77 557.936 1119.7 562.106 1118.18 566.118C1117.92 567.104 1117.25 567.885 1116.82 568.791C1114.85 572.801 1113.84 577.29 1113.81 581.774C1113.93 584.586 1114.37 587.376 1114.83 590.148C1115.83 593.959 1117.08 597.694 1118.09 601.502C1118.23 602.645 1118.97 603.553 1119.42 604.581C1123.67 613.627 1125.09 624.125 1123.01 633.969C1121.47 641.353 1118.03 648.252 1113.39 654.094C1112.89 654.675 1112.51 655.342 1112.03 655.928C1109.95 658.054 1108.01 660.325 1105.68 662.181C1103.34 664.065 1100.96 665.935 1098.32 667.374C1096.56 668.567 1094.58 669.346 1092.74 670.381C1090.29 671.484 1087.74 672.35 1085.18 673.139C1083.15 673.558 1081.14 674.029 1079.11 674.464C1074.12 674.943 1069.05 675.327 1064.09 674.421L1063.92 674.304C1063.55 673.989 1063.04 674.089 1062.6 674.079C1058.93 673.67 1055.35 672.5 1052.01 670.918C1049.97 670.064 1047.87 669.291 1046.06 667.976C1043.82 666.583 1041.56 665.183 1039.59 663.412C1037.53 661.605 1035.57 659.691 1033.63 657.76C1030.78 654.271 1028.17 650.578 1025.91 646.668C1024.83 644.699 1024.15 642.533 1023.15 640.522C1022.35 639.03 1022.05 637.338 1021.44 635.768C1020.83 634.134 1020.51 632.407 1020.22 630.69C1019.68 628.567 1019.39 626.388 1019.16 624.212C1019.12 622.545 1018.64 620.906 1018.82 619.234C1018.99 617.817 1018.6 616.397 1018.83 614.98C1019.24 611.731 1019.41 608.432 1020.23 605.255C1020.71 600.604 1022.71 596.334 1024.17 591.958C1025.96 586.632 1027.32 581.17 1028.81 575.75C1029.36 573.07 1029.55 570.328 1029.86 567.613C1030.25 564.866 1030.41 562.058 1030.1 559.301C1029.77 557.03 1029.55 554.744 1029.41 552.456C1028.94 549.674 1028.53 546.879 1028.17 544.079C1027.77 541.936 1027.57 539.757 1027.34 537.589C1027.22 533.941 1026.95 530.293 1027.05 526.639C1027.1 524.626 1027.4 522.634 1027.62 520.636C1028.04 516.918 1028.61 513.199 1029.69 509.614C1030.65 505.551 1032.32 501.723 1033.94 497.898C1034.46 496.441 1035.39 495.188 1035.97 493.756C1037.65 490.579 1039.79 487.697 1041.91 484.825C1044.94 480.86 1048.77 477.656 1052.62 474.574C1054.67 472.915 1057.09 471.862 1059.33 470.534ZM1077.93 471.285C1076.97 471.874 1076.36 472.902 1075.72 473.815C1074.8 475.058 1076.17 476.972 1077.6 476.633C1078.54 476.413 1079.03 475.47 1079.6 474.761C1080.04 474.145 1080.77 473.586 1080.68 472.732C1080.66 471.375 1078.99 470.764 1077.93 471.285ZM1084.32 471.912C1083.69 472.263 1083.16 472.962 1083.31 473.731C1083.63 475.694 1084.91 477.411 1084.89 479.452C1084.93 481.556 1085.01 483.919 1083.67 485.668C1082.57 487.161 1080.56 487.567 1078.84 487.268C1076.01 486.774 1073.54 484.957 1071.79 482.686C1070.93 481.636 1069.13 482.003 1068.67 483.255C1068.23 484.199 1068.84 485.169 1069.46 485.836C1071.71 488.303 1074.68 490.128 1077.89 490.909C1080.7 491.6 1083.79 490.657 1085.91 488.685C1087.42 487.086 1088.33 484.902 1088.47 482.689C1088.73 480.004 1088.63 477.152 1087.43 474.694C1086.98 473.751 1086.9 472.498 1085.94 471.909C1085.43 471.742 1084.83 471.712 1084.32 471.912ZM1064.53 474.834C1063.89 475.183 1063.6 475.912 1063.33 476.563C1062.65 478.32 1061.66 479.939 1060.57 481.459C1059.26 483.018 1058 484.72 1056.23 485.761C1055.52 486.155 1054.59 486.562 1053.82 486.093C1052.94 485.484 1052.82 484.313 1052.57 483.348C1052.21 482.489 1051.16 482.105 1050.31 482.317C1049.58 482.619 1049.15 483.413 1049.15 484.194C1049.13 485.638 1049.79 487.003 1050.61 488.144C1051.71 489.648 1053.71 490.17 1055.46 489.895C1057.76 489.594 1059.66 488.056 1061.25 486.432C1063.39 484.291 1064.89 481.613 1066.35 478.966C1066.8 478.045 1067.39 477.057 1067.22 475.986C1066.95 474.826 1065.52 474.469 1064.53 474.834ZM1099.15 474.764C1098.62 475.178 1098.01 475.714 1098.08 476.475C1098.08 477.409 1098.92 477.965 1099.58 478.439C1100.83 479.285 1101.47 480.78 1101.83 482.217C1102.1 483.365 1102.15 484.807 1101.19 485.643C1099.93 486.709 1098.09 486.537 1096.7 485.846C1095.9 485.421 1094.85 485.616 1094.25 486.3C1093.58 487.268 1093.93 488.867 1095.05 489.317C1097.03 490.192 1099.3 490.305 1101.39 489.801C1102.66 489.332 1103.78 488.446 1104.56 487.315C1105.49 485.898 1105.6 484.114 1105.55 482.454C1105.58 481.227 1104.94 480.144 1104.57 479.013C1103.85 477.379 1102.56 476.079 1101.17 475.028C1100.61 474.587 1099.78 474.382 1099.15 474.764ZM1105.04 492.882C1104.28 493.327 1103.55 494.397 1104.05 495.3C1104.5 496.144 1105.3 496.695 1106.01 497.302C1107.98 498.914 1109.26 501.197 1110.47 503.42C1111.37 504.995 1111.57 506.964 1111.04 508.7C1110.76 509.716 1109.66 510.123 1109.22 511.034C1108.7 512.331 1110.07 513.921 1111.4 513.531C1113.04 512.813 1114.18 511.168 1114.63 509.429C1115.28 507.016 1114.79 504.451 1113.96 502.155C1112.74 499.78 1111.35 497.439 1109.44 495.575C1108.48 494.634 1107.68 493.456 1106.47 492.837C1106.02 492.595 1105.5 492.773 1105.04 492.882ZM1070.2 494.894C1068.94 495.058 1067.8 495.657 1066.63 496.134C1065.17 496.917 1064.02 498.232 1063.2 499.682C1062.83 500.356 1062.45 501.12 1062.61 501.918C1062.89 503.193 1064.67 503.775 1065.6 502.881C1066.15 502.295 1066.23 501.411 1066.73 500.793C1067.91 499.385 1069.69 498.552 1071.5 498.527C1073.94 498.477 1076.52 498.801 1078.6 500.214C1079.67 501.007 1081.49 500.353 1081.67 498.964C1081.85 497.945 1081.01 497.152 1080.19 496.773C1077.08 495.348 1073.64 494.222 1070.2 494.894ZM1113.28 520.77C1112.8 521.17 1112.22 521.669 1112.27 522.375C1112.34 523.306 1112.75 524.174 1112.79 525.112C1112.86 526.697 1113.03 528.279 1112.98 529.868C1112.88 533.267 1112.23 536.641 1111.14 539.852C1110.65 541.245 1110.2 542.674 1109.36 543.887C1108.98 544.481 1108.45 544.955 1108.14 545.589C1107.68 546.894 1108.98 548.386 1110.3 548.084C1111.32 547.942 1111.62 546.782 1112.27 546.126C1113.55 544.122 1114.42 541.866 1115.14 539.598C1116.2 536.311 1116.43 532.83 1116.56 529.397C1116.69 526.886 1116.43 524.354 1115.86 521.911C1115.64 520.76 1114.24 520.231 1113.28 520.77ZM1038.43 534.704C1037.47 535.303 1036.99 536.915 1037.99 537.719C1038.96 538.697 1040.89 538.313 1041.13 536.848C1041.47 535.336 1039.76 534.1 1038.43 534.704ZM1032.81 537.407C1032.36 537.746 1031.8 538.096 1031.67 538.694C1031.4 539.922 1032.56 541.165 1033.76 541.052C1034.84 540.878 1035.66 539.635 1035.28 538.547C1035 537.527 1033.73 536.913 1032.81 537.407ZM1089.16 537.988C1088.4 538.355 1087.59 539.144 1087.72 540.084C1087.89 541.06 1088.83 541.901 1089.82 541.796C1091.1 541.544 1091.96 539.837 1091.22 538.664C1090.8 537.961 1089.89 537.806 1089.16 537.988ZM1039.15 541.893C1038.53 542.36 1037.83 543.006 1037.93 543.88C1038.1 544.873 1039.08 545.769 1040.09 545.611C1041.11 545.295 1042.06 544.242 1041.76 543.086C1041.53 541.928 1040.12 541.492 1039.15 541.893ZM1095.2 543.411C1094.15 543.912 1093.76 545.509 1094.67 546.348C1095.62 547.513 1097.76 547.154 1098.08 545.602C1098.45 544.012 1096.57 542.694 1095.2 543.411ZM1089.09 544.878C1087.68 545.075 1087.39 547.004 1088.2 547.982C1089.01 548.995 1090.82 548.626 1091.34 547.478C1091.93 546.128 1090.48 544.421 1089.09 544.878ZM1106.66 557.13C1105.26 557.936 1105.75 559.738 1105.36 561.07C1104.22 566.126 1102.31 571.184 1098.81 575.037C1097.73 576.189 1096.5 577.357 1094.92 577.687C1093.89 577.909 1092.84 577.402 1092.2 576.586C1090.94 575.022 1090.35 573.01 1090.02 571.042C1089.76 569.557 1089.98 568.047 1089.87 566.555C1089.66 565.063 1087.36 564.451 1086.57 565.781C1086.1 566.705 1086.28 567.783 1086.28 568.781C1086.26 572.708 1087.39 576.838 1090.1 579.715C1091.61 581.37 1094.05 581.689 1096.1 581.123C1098.83 580.466 1101.01 578.488 1102.69 576.292C1105.43 572.708 1107.11 568.419 1108.37 564.095C1108.85 562.54 1108.95 560.9 1109.31 559.316C1109.78 557.819 1108.01 556.374 1106.66 557.13ZM1037.69 559.376C1037.26 559.658 1036.83 560.032 1036.71 560.561C1036.41 561.869 1036.61 563.221 1036.55 564.551C1036.45 566.962 1036.56 569.375 1036.6 571.785C1036.6 573.23 1037.08 574.61 1037.2 576.042C1037.3 577.235 1037.76 578.35 1038.22 579.438C1039.03 581.629 1040.68 583.418 1042.59 584.669C1043.83 585.452 1045.61 584.207 1045.37 582.737C1045.24 581.714 1044.14 581.405 1043.47 580.816C1042.38 579.805 1041.65 578.443 1041.24 577.013C1040.45 574.964 1040.41 572.736 1040.19 570.575C1040.12 568.484 1040.05 566.388 1040.12 564.297C1040.15 563.039 1040.43 561.789 1040.32 560.531C1040.09 559.371 1038.65 559.016 1037.69 559.376ZM1036.77 592.384C1034.66 594.518 1033.39 597.362 1032.59 600.247C1032.35 601.17 1032.16 602.243 1032.68 603.107C1033.42 604.372 1035.69 603.958 1035.93 602.493C1036.11 600.102 1037.14 597.824 1038.63 595.995C1039.36 595.099 1040.1 594.096 1041.21 593.687C1041.8 593.407 1042.55 593.265 1042.87 592.626C1043.21 591.958 1042.9 591.206 1042.76 590.53C1042.11 590.118 1041.37 589.624 1040.57 589.884C1039.13 590.388 1037.85 591.301 1036.77 592.384ZM1105.98 590.585C1105.45 590.979 1104.84 591.518 1104.9 592.264C1105.1 593.542 1105.82 594.645 1106.29 595.828C1106.75 597.021 1106.6 598.358 1107.04 599.556C1107.37 600.527 1108.56 600.918 1109.46 600.611C1110.2 600.257 1110.77 599.336 1110.5 598.49C1110.23 597.475 1110.21 596.412 1109.94 595.399C1109.58 593.959 1108.89 592.639 1108.29 591.296C1107.91 590.408 1106.78 590.186 1105.98 590.585ZM1089.21 593.919C1088.72 594.313 1088.18 594.787 1088.12 595.463C1088.02 596.212 1088.53 596.823 1088.9 597.41C1089.72 598.578 1090.14 599.96 1090.73 601.248C1091.33 602.503 1091.55 603.898 1092.05 605.188C1092.5 606.311 1094.16 606.695 1094.99 605.789C1095.59 605.273 1095.5 604.382 1095.33 603.688C1094.9 601.879 1094.38 600.07 1093.51 598.423C1092.79 596.963 1092.14 595.429 1091.06 594.203C1090.59 593.694 1089.8 593.677 1089.21 593.919ZM1056.5 594.608C1055.78 595.044 1055.38 595.823 1055.28 596.661C1054.69 600.235 1054.46 603.863 1054.56 607.486C1054.48 609.133 1054.88 610.742 1055.09 612.364C1055.59 614.201 1056.3 615.978 1057.08 617.709C1057.4 618.431 1058.04 619.077 1058.86 619.072C1060.19 619.177 1061.2 617.44 1060.49 616.29C1059.65 614.785 1059.06 613.145 1058.7 611.456C1057.79 607.189 1057.97 602.757 1058.63 598.47C1058.72 597.629 1059.13 596.856 1059.17 596.012C1059.11 594.74 1057.53 594.094 1056.5 594.608ZM1046.68 596.579C1046.04 596.908 1045.47 597.714 1045.65 598.48C1046.03 601.095 1046.09 603.835 1045.06 606.316C1044.57 607.601 1043.84 608.906 1042.61 609.58C1040.84 610.558 1038.55 610.124 1037.05 608.821C1036.39 608.245 1036.17 607.214 1035.31 606.872C1033.9 606.326 1032.35 608.107 1032.97 609.487C1033.65 610.887 1034.84 611.98 1036.19 612.691C1038.43 613.867 1041.18 614.293 1043.58 613.355C1045.65 612.537 1047.05 610.61 1048.02 608.654C1049.11 606.286 1049.8 603.626 1049.49 600.993C1049.38 599.726 1049.54 598.348 1048.9 597.2C1048.47 596.412 1047.45 596.304 1046.68 596.579ZM1075.45 598.303C1074.69 598.685 1074.36 599.673 1074.49 600.487C1074.76 601.148 1075.43 601.545 1075.69 602.221C1076.3 603.681 1077.05 605.103 1077.31 606.688C1077.52 608.038 1077.98 609.335 1078.07 610.705C1078.21 612.147 1078.6 613.617 1078.24 615.057C1077.92 616.332 1076.85 617.295 1075.65 617.692C1074.09 618.226 1072.35 618.174 1070.79 617.652C1070.07 617.398 1069.6 616.684 1068.85 616.502C1067.43 616.359 1066.32 618.204 1067.12 619.436C1067.97 620.761 1069.6 621.215 1071.03 621.572C1073.29 621.914 1075.76 622.056 1077.85 620.931C1080.57 619.506 1082.13 616.302 1082.02 613.233C1081.65 608.187 1080.51 603.082 1077.88 598.742C1077.33 598.004 1076.23 598.006 1075.45 598.303ZM1091.06 612.534C1090.52 612.821 1090.25 613.432 1090.09 614.006C1089.41 616.761 1088.9 619.596 1089.06 622.451C1089.16 625.505 1089.6 628.744 1091.43 631.257C1092.77 633.168 1095.03 634.423 1097.35 634.281C1100.65 634.044 1103.87 632.397 1105.97 629.769C1106.65 628.941 1107.03 627.661 1106.42 626.683C1105.92 625.857 1104.75 625.685 1103.98 626.214C1103.22 626.633 1103.12 627.623 1102.48 628.165C1101.25 629.273 1099.72 630.012 1098.13 630.368C1096.98 630.648 1095.58 630.58 1094.72 629.65C1093.59 628.372 1093.21 626.615 1092.93 624.963C1092.48 621.363 1092.85 617.677 1093.83 614.199C1093.83 612.854 1092.22 611.973 1091.06 612.534ZM1028.65 621.273C1028.15 621.595 1027.52 622.001 1027.51 622.68C1027.39 624.098 1027.32 625.527 1027.45 626.947C1027.63 628.779 1027.63 630.648 1028.13 632.432C1028.4 633.343 1029.11 634.216 1030.09 634.299C1031.33 634.491 1032.39 632.931 1031.83 631.801C1031.1 630.106 1031.17 628.22 1030.98 626.413C1030.83 625.088 1031.25 623.773 1031.1 622.453C1030.83 621.405 1029.58 621.001 1028.65 621.273ZM1114.29 622.548C1114.06 623.571 1114.49 624.582 1114.76 625.55C1115.54 628.013 1115.39 630.65 1115.19 633.196C1115.09 635.05 1114.19 636.856 1112.76 638.004C1111.98 638.648 1110.86 638.378 1110.02 638.892C1108.88 639.683 1109.19 641.815 1110.52 642.214C1112.38 642.533 1114.28 641.72 1115.63 640.42C1117.33 638.775 1118.26 636.479 1118.78 634.189C1119.05 631.541 1119.15 628.829 1118.59 626.211C1118.31 624.919 1118.25 623.551 1117.68 622.346C1117.42 621.71 1116.71 621.567 1116.17 621.308C1115.48 621.557 1114.51 621.7 1114.29 622.548ZM1044.74 624.759C1044.19 625.108 1043.6 625.715 1043.68 626.438C1044.7 630.017 1045.06 633.829 1044.52 637.53C1044.18 639.232 1043.75 641.138 1042.32 642.241C1040.89 643.097 1039.16 642.586 1037.71 642.029C1036.35 641.418 1034.87 640.627 1034.23 639.164C1033.74 638.129 1032.25 637.715 1031.39 638.521C1030.44 639.342 1030.72 640.874 1031.41 641.777C1033.14 644.073 1035.74 645.625 1038.5 646.231C1040.11 646.623 1041.85 646.578 1043.34 645.795C1045.86 644.574 1047.33 641.872 1047.92 639.189C1048.87 634.72 1048.56 630.017 1047.24 625.665C1046.91 624.619 1045.63 624.302 1044.74 624.759ZM1055 630.498C1054.41 630.877 1053.71 631.386 1053.82 632.202C1053.94 633.809 1054.65 635.294 1054.85 636.894C1055.05 637.909 1055.24 639.297 1056.4 639.604C1057.42 640.008 1058.58 639.254 1058.76 638.194C1058.83 636.984 1058.32 635.851 1058.09 634.683C1057.79 633.463 1057.69 632.135 1057 631.062C1056.59 630.406 1055.67 630.124 1055 630.498ZM1081.84 635.035C1081.46 635.284 1081.1 635.601 1080.86 636C1080.57 637.308 1080.32 638.63 1079.94 639.916C1078.95 642.995 1076.69 645.597 1073.88 647.065C1071.63 648.11 1069.1 648.312 1066.66 648.225C1065.17 648.128 1063.63 648.015 1062.28 647.299C1061.73 647.035 1061.18 646.708 1060.56 646.628C1059.31 646.563 1058.29 648.03 1058.77 649.211C1059.19 650.234 1060.29 650.658 1061.24 650.98C1063.69 651.729 1066.27 651.926 1068.82 651.931C1070.94 651.823 1073.11 651.536 1075.03 650.526C1076.87 649.827 1078.43 648.564 1079.82 647.182C1080.68 646.276 1081.31 645.173 1082.04 644.155C1083.43 641.912 1083.89 639.244 1084.42 636.692C1084.51 635.344 1082.94 634.618 1081.84 635.035ZM1100.56 650.695C1100.25 650.838 1099.9 650.982 1099.72 651.294C1098.22 654.134 1095.81 656.28 1093.74 658.671C1092.45 660.2 1090.96 661.595 1089.17 662.496C1088.49 662.84 1087.61 663.05 1086.96 662.531C1086.25 661.862 1086.1 660.782 1086.21 659.846C1086.26 659.12 1087.11 658.683 1086.97 657.912C1086.92 656.54 1085.11 655.539 1084.05 656.485C1082.62 657.822 1082.35 660.006 1082.63 661.872C1083.1 664.175 1084.94 666.371 1087.35 666.518C1089.33 666.828 1091.2 665.817 1092.76 664.679C1096.23 662.007 1098.9 658.458 1101.68 655.087C1102.27 654.286 1103.02 653.448 1103 652.385C1102.96 651.189 1101.63 650.381 1100.56 650.695ZM1052.11 653.752C1051.47 654.129 1050.82 654.8 1050.93 655.621C1051.04 656.235 1051.33 656.794 1051.53 657.388C1051.97 658.631 1051.6 660.12 1050.7 661.049C1050.02 661.672 1049.03 661.356 1048.23 661.218C1045.5 660.372 1043.25 658.448 1041.2 656.487C1040.29 655.626 1039.65 654.314 1038.37 653.977C1036.99 653.495 1035.55 655.252 1036.28 656.557C1037.01 657.757 1038.13 658.636 1039.11 659.609C1041.56 661.904 1044.33 664.06 1047.61 664.916C1049.44 665.418 1051.51 665.136 1053.02 663.911C1054.59 662.686 1055.3 660.612 1055.35 658.646C1055.26 657.231 1054.94 655.801 1054.29 654.538C1053.91 653.747 1052.87 653.468 1052.11 653.752ZM1076.92 655.734C1075.81 656.173 1075.52 657.453 1074.93 658.386C1073.88 659.948 1072.49 661.286 1070.85 662.179C1069.14 663.135 1066.99 663.137 1065.23 662.314C1064.44 661.999 1063.8 661.37 1063 661.108C1061.62 660.799 1060.25 662.596 1061.07 663.841C1061.97 665.141 1063.59 665.543 1064.97 666.084C1066.92 666.84 1069.1 666.748 1071.08 666.162C1072.82 665.423 1074.45 664.372 1075.87 663.1C1077.35 661.787 1078 659.806 1079.32 658.359C1079.66 657.957 1079.64 657.351 1079.51 656.871C1079.17 655.823 1077.89 655.379 1076.92 655.734Z" fill="#FFCA05"/> +<path d="M1117.33 579.264C1117.01 579.623 1116.88 580.254 1117.38 580.529C1117.42 580.105 1117.41 579.68 1117.33 579.264Z" fill="#3F3201"/> +<path d="M1063.92 674.304C1063.55 673.989 1063.04 674.089 1062.6 674.079C1062.69 674.546 1063.57 674.531 1063.92 674.304Z" fill="#4F3E01"/> +<path d="M1071.72 763.74C1137.6 763.74 1191 757.673 1191 750.189C1191 742.706 1137.6 736.639 1071.72 736.639C1005.84 736.639 952.438 742.706 952.438 750.189C952.438 757.673 1005.84 763.74 1071.72 763.74Z" fill="black"/> +<path d="M1016.71 696.629C1019.93 695.786 1023.36 695.873 1026.57 696.729C1029.76 697.587 1032.81 699.242 1035.04 701.76C1036.43 703.317 1037.43 705.243 1037.83 707.317V712.027C1037.49 714.424 1036.38 716.788 1034.41 718.215C1035.16 720.584 1035.8 722.99 1036.24 725.44C1036.55 727.166 1036.75 728.916 1036.73 730.673C1036.71 732.212 1036.5 733.78 1035.84 735.18C1036.19 737.381 1036.49 739.605 1036.45 741.839C1036.4 743.028 1036.28 744.302 1035.58 745.295C1034.99 746.122 1034 746.457 1033.09 746.758C1031.31 747.304 1029.49 747.687 1027.66 748.059C1025.27 748.539 1022.86 748.96 1020.45 749.351C1019.62 749.514 1018.73 749.031 1018.43 748.224C1018.23 747.612 1018.2 746.957 1018.08 746.327C1012.12 748.565 1005.8 749.658 999.484 750.15H987.96C984.342 749.86 980.736 749.29 977.25 748.244C974.769 747.49 972.336 746.508 970.132 745.109C969.521 744.688 968.837 744.297 968.469 743.616C967.47 741.895 966.777 739.884 967.001 737.858C967.171 736.233 968.095 734.741 969.403 733.821C968.834 728.52 968.937 723.06 970.395 717.909C971.469 714.13 973.458 710.507 976.534 708.069C979.469 705.685 983.221 704.568 986.926 704.402C991.305 704.169 995.629 705.142 999.829 706.307C1002.23 706.977 1004.61 707.728 1006.91 708.706C1006.71 707.23 1006.84 705.703 1007.35 704.303C1008.01 702.42 1009.31 700.827 1010.83 699.597C1012.56 698.192 1014.58 697.191 1016.71 696.629ZM1013.58 702.169C1012.27 703.11 1011.09 704.389 1010.66 706.003C1010.23 707.564 1010.63 709.24 1011.38 710.624C1012.35 712.343 1013.8 713.805 1015.58 714.619C1016.34 715.017 1016.75 715.999 1016.47 716.834C1016.2 717.833 1015.03 718.427 1014.09 718.032C1012.43 717.318 1010.99 716.131 1009.79 714.768C1009.58 714.619 1009.31 714.555 1009.12 714.372C1008.21 713.415 1007 712.855 1005.83 712.307C1003.48 711.275 1001.02 710.517 998.55 709.837C996.048 709.169 993.528 708.523 990.948 708.265C987.692 707.931 984.277 708.095 981.254 709.491C978.759 710.622 976.732 712.685 975.441 715.13C973.69 718.421 973.011 722.193 972.803 725.902C972.656 728.716 972.777 731.546 973.162 734.337C974.722 735.281 976.398 736.007 978.125 736.562C981.719 737.711 985.466 738.261 989.209 738.575C995.363 739.055 1001.55 738.862 1007.69 738.356C1013.2 737.889 1018.68 737.155 1024.12 736.151C1026.36 735.718 1028.61 735.271 1030.82 734.652C1031.3 734.486 1031.86 734.411 1032.23 734.008C1032.71 733.458 1032.86 732.708 1032.98 732.003C1033.2 730.326 1033.02 728.628 1032.78 726.963C1032.39 724.48 1031.77 722.039 1031.01 719.648C1030.05 719.826 1029.06 719.855 1028.09 719.813C1027 719.705 1026.22 718.45 1026.59 717.391C1026.8 716.717 1027.4 716.189 1028.09 716.101C1028.92 716.022 1029.77 715.987 1030.6 715.899C1031.56 715.716 1032.45 715.179 1033.07 714.4C1033.77 713.487 1034.1 712.335 1034.25 711.197C1034.42 709.864 1034.44 708.477 1034.01 707.191C1033.27 704.894 1031.48 703.109 1029.46 701.936C1026.96 700.478 1024.06 699.76 1021.19 699.787C1018.51 699.82 1015.77 700.543 1013.58 702.169ZM971.002 737.354C970.781 737.664 970.639 738.031 970.624 738.418C970.571 739.292 970.857 740.142 971.202 740.928C971.346 741.236 971.483 741.584 971.797 741.751C973.912 743.159 976.302 744.067 978.717 744.776C984.263 746.353 990.066 746.721 995.798 746.566C1001.28 746.406 1006.76 745.732 1012.07 744.325C1014.24 743.737 1016.39 743.06 1018.43 742.122C1018.87 741.873 1019.39 741.71 1019.89 741.83C1020.61 741.963 1021.21 742.599 1021.33 743.343C1021.44 744.013 1021.53 744.687 1021.64 745.358C1023.3 745.079 1024.95 744.779 1026.6 744.454C1028.64 744.025 1030.7 743.653 1032.66 742.951C1032.94 741.324 1032.72 739.664 1032.55 738.038C1029.96 738.821 1027.3 739.353 1024.64 739.861C1016.97 741.266 1009.21 742.176 1001.42 742.501C995.104 742.73 988.736 742.606 982.492 741.484C978.491 740.739 974.473 739.59 971.002 737.354Z" fill="black"/> +<path d="M1013.58 702.169C1015.77 700.543 1018.51 699.82 1021.19 699.787C1024.06 699.76 1026.96 700.478 1029.46 701.936C1031.48 703.109 1033.27 704.894 1034.01 707.191C1034.44 708.477 1034.42 709.864 1034.25 711.197C1034.1 712.335 1033.77 713.487 1033.07 714.4C1032.45 715.179 1031.56 715.716 1030.6 715.899C1029.77 715.987 1028.92 716.022 1028.09 716.101C1027.4 716.189 1026.8 716.717 1026.59 717.391C1026.22 718.45 1027 719.705 1028.09 719.813C1029.06 719.855 1030.05 719.826 1031.01 719.648C1031.77 722.039 1032.39 724.48 1032.78 726.963C1033.02 728.628 1033.2 730.326 1032.98 732.003C1032.86 732.708 1032.71 733.458 1032.23 734.008C1031.86 734.411 1031.3 734.486 1030.82 734.652C1028.61 735.271 1026.36 735.718 1024.12 736.151C1018.68 737.155 1013.2 737.889 1007.69 738.356C1001.55 738.862 995.363 739.055 989.209 738.575C985.466 738.261 981.719 737.711 978.125 736.562C976.398 736.007 974.722 735.281 973.162 734.337C972.777 731.546 972.656 728.716 972.803 725.902C973.011 722.193 973.69 718.421 975.441 715.13C976.732 712.685 978.759 710.622 981.254 709.491C984.277 708.095 987.692 707.931 990.948 708.265C993.528 708.523 996.048 709.169 998.55 709.837C1001.02 710.517 1003.48 711.275 1005.83 712.307C1007 712.855 1008.21 713.415 1009.12 714.372C1009.31 714.555 1009.58 714.619 1009.79 714.768C1010.99 716.131 1012.43 717.318 1014.09 718.032C1015.03 718.427 1016.2 717.833 1016.47 716.834C1016.75 715.999 1016.34 715.017 1015.58 714.619C1013.8 713.805 1012.35 712.343 1011.38 710.624C1010.63 709.24 1010.23 707.564 1010.66 706.003C1011.09 704.389 1012.27 703.11 1013.58 702.169Z" fill="white"/> +<path d="M971.002 737.354C974.473 739.59 978.491 740.739 982.492 741.484C988.736 742.606 995.104 742.73 1001.42 742.501C1009.21 742.176 1016.97 741.266 1024.64 739.861C1027.3 739.353 1029.96 738.821 1032.55 738.038C1032.72 739.664 1032.94 741.324 1032.66 742.951C1030.7 743.653 1028.64 744.025 1026.6 744.454C1024.95 744.779 1023.3 745.079 1021.64 745.358C1021.53 744.687 1021.44 744.013 1021.33 743.343C1021.21 742.599 1020.61 741.963 1019.89 741.83C1019.39 741.71 1018.87 741.873 1018.43 742.122C1016.39 743.06 1014.24 743.737 1012.07 744.325C1006.76 745.732 1001.28 746.406 995.798 746.566C990.066 746.721 984.263 746.353 978.717 744.776C976.302 744.067 973.912 743.159 971.797 741.751C971.483 741.584 971.346 741.236 971.202 740.928C970.857 740.142 970.571 739.292 970.624 738.418C970.639 738.031 970.781 737.664 971.002 737.354Z" fill="#D684B7"/> +<path d="M1115.95 702.883C1119.6 701.956 1123.54 702.007 1127.11 703.29C1129.79 704.285 1132.31 705.971 1133.98 708.361C1135.3 710.238 1135.85 712.626 1135.53 714.909C1138.9 713.504 1142.43 712.521 1145.97 711.671C1148.16 711.141 1150.38 710.765 1152.63 710.632C1155.77 710.444 1158.99 710.74 1161.94 711.892C1163.97 712.674 1165.83 713.882 1167.39 715.419C1170.12 718.134 1171.78 721.783 1172.65 725.525C1173.75 730.268 1173.81 735.211 1173.28 740.037C1174.38 740.804 1175.21 741.962 1175.55 743.28V746.488C1175.29 747.715 1174.79 748.885 1174.14 749.95C1173.85 750.46 1173.33 750.761 1172.88 751.098C1171.31 752.14 1169.61 752.947 1167.86 753.612C1163.67 755.202 1159.22 755.958 1154.78 756.359H1143.08C1136.69 755.884 1130.3 754.785 1124.27 752.532C1124.12 753.253 1124.16 754.046 1123.79 754.703C1123.42 755.347 1122.64 755.698 1121.92 755.562C1118.69 755.044 1115.48 754.482 1112.29 753.774C1110.99 753.476 1109.68 753.172 1108.43 752.709C1107.75 752.447 1107.04 752.091 1106.63 751.454C1105.95 750.47 1105.84 749.219 1105.79 748.054C1105.75 745.861 1106.04 743.676 1106.38 741.516C1106.42 741.356 1106.32 741.214 1106.27 741.07C1105.49 739.235 1105.44 737.182 1105.55 735.215C1105.82 731.526 1106.75 727.927 1107.84 724.413C1106.72 723.604 1105.84 722.467 1105.26 721.201C1104.37 719.221 1104.13 717.005 1104.24 714.852C1104.4 712.207 1105.6 709.694 1107.38 707.783C1109.66 705.313 1112.74 703.707 1115.95 702.883ZM1118.66 706.158C1115.75 706.582 1112.88 707.711 1110.68 709.721C1109.09 711.165 1107.95 713.215 1107.9 715.416C1107.88 716.968 1108.03 718.588 1108.78 719.972C1109.45 721.26 1110.83 722.125 1112.26 722.16C1112.91 722.216 1113.58 722.25 1114.23 722.315C1115.07 722.425 1115.76 723.191 1115.8 724.046C1115.88 724.989 1115.15 725.915 1114.22 726.023C1113.23 726.065 1112.24 726.035 1111.26 725.855C1110.32 728.862 1109.54 731.945 1109.26 735.096C1109.16 736.352 1109.13 737.633 1109.41 738.868C1109.54 739.407 1109.74 739.967 1110.16 740.343C1110.46 740.573 1110.82 740.668 1111.17 740.776C1112.56 741.184 1113.98 741.5 1115.39 741.803C1120.09 742.781 1124.83 743.5 1129.59 744.054C1135.82 744.761 1142.09 745.168 1148.36 745.032C1153.25 744.908 1158.17 744.49 1162.92 743.234C1165.21 742.619 1167.46 741.779 1169.5 740.535C1169.83 738.12 1169.96 735.676 1169.9 733.237C1169.83 730.557 1169.51 727.872 1168.78 725.29C1168.18 723.187 1167.28 721.146 1165.96 719.409C1164.9 718.009 1163.54 716.838 1162 716.026C1159.59 714.734 1156.82 714.296 1154.12 714.332C1150.37 714.345 1146.71 715.287 1143.11 716.273C1140.71 716.962 1138.3 717.718 1136.03 718.784C1135.11 719.241 1134.16 719.703 1133.44 720.457C1133.22 720.704 1132.91 720.812 1132.63 720.968C1131.45 722.314 1130.03 723.461 1128.41 724.197C1127.62 724.579 1126.61 724.272 1126.13 723.533C1125.53 722.677 1125.83 721.35 1126.75 720.86C1128.59 720.029 1130.1 718.52 1131.07 716.737C1131.85 715.292 1132.22 713.523 1131.67 711.929C1131.1 710.21 1129.7 708.939 1128.24 707.988C1125.41 706.178 1121.92 705.698 1118.66 706.158ZM1167.29 745.751C1163.28 747.28 1159.01 748.004 1154.76 748.42C1148.83 748.972 1142.87 748.881 1136.94 748.489C1129.93 748.004 1122.96 747.099 1116.06 745.762C1113.93 745.33 1111.79 744.882 1109.71 744.24C1109.55 745.687 1109.39 747.149 1109.51 748.605C1109.54 748.788 1109.53 748.997 1109.63 749.16C1110.31 749.433 1111.03 749.611 1111.74 749.796C1114.7 750.523 1117.69 751.055 1120.69 751.566C1120.8 750.88 1120.9 750.192 1121.02 749.507C1121.16 748.658 1121.95 747.991 1122.8 748C1123.41 747.984 1123.92 748.369 1124.47 748.575C1128.11 750.097 1131.96 751.044 1135.83 751.726C1141.55 752.685 1147.37 752.997 1153.15 752.697C1158.04 752.399 1162.96 751.613 1167.51 749.724C1168.77 749.179 1170.03 748.59 1171.13 747.751C1171.61 746.942 1171.96 746.024 1172.05 745.075C1172.1 744.547 1171.98 743.999 1171.67 743.571C1170.29 744.456 1168.81 745.164 1167.29 745.751Z" fill="black"/> +<path d="M1118.66 706.158C1121.92 705.698 1125.41 706.178 1128.24 707.988C1129.7 708.939 1131.1 710.21 1131.67 711.929C1132.22 713.523 1131.85 715.292 1131.07 716.737C1130.1 718.52 1128.59 720.029 1126.75 720.86C1125.83 721.35 1125.53 722.677 1126.13 723.533C1126.61 724.272 1127.62 724.579 1128.41 724.197C1130.03 723.461 1131.45 722.314 1132.63 720.968C1132.91 720.812 1133.22 720.704 1133.44 720.457C1134.16 719.703 1135.11 719.241 1136.03 718.784C1138.3 717.718 1140.71 716.962 1143.11 716.273C1146.71 715.287 1150.37 714.345 1154.12 714.332C1156.82 714.296 1159.59 714.734 1162 716.026C1163.54 716.838 1164.9 718.009 1165.96 719.409C1167.28 721.146 1168.18 723.187 1168.78 725.29C1169.51 727.872 1169.83 730.557 1169.9 733.237C1169.96 735.676 1169.83 738.12 1169.5 740.535C1167.46 741.779 1165.21 742.619 1162.92 743.234C1158.17 744.49 1153.25 744.908 1148.36 745.032C1142.09 745.168 1135.82 744.761 1129.59 744.054C1124.83 743.5 1120.09 742.781 1115.39 741.803C1113.98 741.5 1112.56 741.184 1111.17 740.776C1110.82 740.668 1110.46 740.573 1110.16 740.343C1109.74 739.967 1109.54 739.407 1109.41 738.868C1109.13 737.633 1109.16 736.352 1109.26 735.096C1109.54 731.945 1110.32 728.862 1111.26 725.855C1112.24 726.035 1113.23 726.065 1114.22 726.023C1115.15 725.915 1115.88 724.989 1115.8 724.046C1115.76 723.191 1115.07 722.425 1114.23 722.315C1113.58 722.25 1112.91 722.216 1112.26 722.16C1110.83 722.125 1109.45 721.26 1108.78 719.972C1108.03 718.588 1107.88 716.968 1107.9 715.416C1107.95 713.215 1109.09 711.165 1110.68 709.721C1112.88 707.711 1115.75 706.582 1118.66 706.158Z" fill="white"/> +<path d="M1167.29 745.751C1168.81 745.164 1170.29 744.456 1171.67 743.571C1171.98 743.999 1172.1 744.547 1172.05 745.075C1171.96 746.024 1171.61 746.942 1171.13 747.751C1170.03 748.59 1168.77 749.179 1167.51 749.724C1162.96 751.613 1158.04 752.399 1153.15 752.697C1147.37 752.997 1141.55 752.685 1135.83 751.726C1131.96 751.044 1128.11 750.097 1124.47 748.575C1123.92 748.369 1123.41 747.984 1122.8 748C1121.95 747.991 1121.16 748.658 1121.02 749.507C1120.9 750.192 1120.8 750.88 1120.69 751.566C1117.69 751.055 1114.7 750.523 1111.74 749.796C1111.03 749.611 1110.31 749.433 1109.63 749.16C1109.53 748.997 1109.54 748.788 1109.51 748.605C1109.39 747.149 1109.55 745.687 1109.71 744.24C1111.79 744.882 1113.93 745.33 1116.06 745.762C1122.96 747.099 1129.93 748.004 1136.94 748.489C1142.87 748.881 1148.83 748.972 1154.76 748.42C1159.01 748.004 1163.28 747.28 1167.29 745.751Z" fill="#D684B7"/> +<path d="M1154.54 564.214H1155.42C1159.55 564.288 1163.77 565.134 1167.32 567.392C1170.26 569.241 1172.65 572.02 1173.98 575.288C1175.19 578.223 1175.56 581.473 1175.29 584.633C1174.91 589.049 1173.3 593.295 1170.95 596.998C1169.7 598.947 1168.23 600.746 1166.57 602.339C1165.83 603.045 1165.07 603.753 1164.17 604.24C1162.65 605.091 1160.84 605.385 1159.13 605.072C1157.38 604.759 1155.75 603.824 1154.59 602.444C1153.34 600.978 1152.64 599.02 1152.7 597.072C1152.72 594.859 1153.71 592.681 1155.35 591.236C1157.59 589.284 1159.27 586.564 1159.75 583.57C1159.83 582.783 1159.93 581.867 1159.44 581.195C1158.89 580.702 1158.14 580.521 1157.45 580.362C1155.59 580.006 1153.69 580.132 1151.83 580.369C1147.26 581 1142.84 582.474 1138.55 584.158C1132.6 586.534 1126.87 589.437 1121.27 592.568C1119.86 593.333 1118.22 593.648 1116.63 593.427C1114.85 593.196 1113.14 592.314 1111.92 590.953C1110.72 589.654 1110.01 587.916 1109.84 586.14V585.172C1109.95 582.417 1111.55 579.777 1113.95 578.502C1121.86 574.112 1130 570.084 1138.58 567.246C1143.74 565.564 1149.1 564.306 1154.54 564.214ZM1152.48 568.044C1147.42 568.44 1142.49 569.799 1137.71 571.482C1130.47 574.061 1123.55 577.464 1116.81 581.165C1116.24 581.495 1115.64 581.773 1115.11 582.17C1113.97 583.045 1113.34 584.562 1113.51 586.009C1113.66 587.454 1114.6 588.779 1115.9 589.373C1117 589.904 1118.34 589.887 1119.44 589.331C1126.09 585.625 1132.92 582.194 1140.07 579.599C1144.38 578.074 1148.83 576.784 1153.39 576.462C1155.5 576.335 1157.66 576.406 1159.67 577.114C1160.94 577.572 1162.18 578.376 1162.8 579.642C1163.63 581.261 1163.57 583.187 1163.22 584.934C1162.44 588.512 1160.41 591.756 1157.68 594.114C1156.38 595.288 1155.98 597.326 1156.69 598.937C1157.45 600.767 1159.56 601.851 1161.45 601.342C1162.7 601.063 1163.59 600.066 1164.49 599.213C1167.85 595.797 1170.31 591.423 1171.31 586.675C1172 583.355 1171.9 579.789 1170.58 576.643C1169.34 573.65 1166.94 571.225 1164.09 569.831C1160.5 568.076 1156.4 567.755 1152.48 568.044Z" fill="black"/> +<path d="M1152.48 568.044C1156.4 567.755 1160.5 568.076 1164.09 569.831C1166.94 571.225 1169.34 573.65 1170.58 576.643C1171.9 579.789 1172 583.355 1171.31 586.675C1170.31 591.423 1167.85 595.797 1164.49 599.213C1163.59 600.066 1162.7 601.063 1161.45 601.342C1159.56 601.851 1157.45 600.767 1156.69 598.937C1155.98 597.326 1156.38 595.288 1157.68 594.114C1160.41 591.756 1162.44 588.512 1163.22 584.934C1163.57 583.187 1163.63 581.261 1162.8 579.642C1162.18 578.376 1160.94 577.572 1159.67 577.114C1157.66 576.406 1155.5 576.335 1153.39 576.462C1148.83 576.784 1144.38 578.074 1140.07 579.599C1132.92 582.194 1126.09 585.625 1119.44 589.331C1118.34 589.887 1117 589.904 1115.9 589.373C1114.6 588.779 1113.66 587.454 1113.51 586.009C1113.34 584.562 1113.97 583.045 1115.11 582.17C1115.64 581.773 1116.24 581.495 1116.81 581.165C1123.55 577.464 1130.47 574.061 1137.71 571.482C1142.49 569.799 1147.42 568.44 1152.48 568.044Z" fill="#FFCA05"/> +<path d="M1103.98 645.344C1106.04 644.681 1108.34 644.827 1110.31 645.731C1111.64 646.336 1112.81 647.287 1113.72 648.448C1116.15 651.471 1118.16 654.82 1119.95 658.277C1125.4 668.938 1128.26 680.882 1128.87 692.873V703.001C1128.8 704.395 1128.75 705.818 1128.25 707.136C1127.2 710.183 1124.46 712.517 1121.36 713.059H1118.27C1114.82 712.489 1111.86 709.651 1111.07 706.16C1110.61 704.428 1110.93 702.633 1110.96 700.873C1111.3 691.329 1110.03 681.654 1106.66 672.722C1105.16 668.778 1103.29 664.96 1100.87 661.522C1100.21 660.555 1099.36 659.732 1098.81 658.687C1097.23 655.88 1097.28 652.212 1098.91 649.441C1100.03 647.496 1101.87 646.006 1103.98 645.344ZM1105.72 648.514C1104.66 648.694 1103.66 649.198 1102.87 649.942C1101.56 651.175 1100.86 653.077 1101.12 654.891C1101.26 656.128 1101.84 657.278 1102.67 658.181C1104.95 661.08 1106.75 664.345 1108.29 667.706C1110.29 672.127 1111.78 676.788 1112.78 681.552C1114.31 688.79 1114.72 696.254 1114.25 703.637C1114.07 705.976 1115.49 708.309 1117.59 709.216C1119.25 709.972 1121.27 709.808 1122.8 708.789C1124.18 707.899 1125.14 706.347 1125.33 704.681C1125.88 696.888 1125.5 689.014 1124.09 681.332C1122.5 672.785 1119.64 664.451 1115.32 656.948C1113.99 654.679 1112.56 652.459 1110.88 650.442C1109.65 648.931 1107.61 648.172 1105.72 648.514Z" fill="black"/> +<path d="M1105.72 648.514C1107.61 648.172 1109.65 648.931 1110.88 650.442C1112.56 652.459 1113.99 654.679 1115.32 656.948C1119.64 664.451 1122.5 672.785 1124.09 681.332C1125.5 689.014 1125.88 696.888 1125.33 704.681C1125.14 706.347 1124.18 707.899 1122.8 708.789C1121.27 709.808 1119.25 709.972 1117.59 709.216C1115.49 708.309 1114.07 705.976 1114.25 703.637C1114.72 696.254 1114.31 688.79 1112.78 681.552C1111.78 676.788 1110.29 672.127 1108.29 667.706C1106.75 664.345 1104.95 661.08 1102.67 658.181C1101.84 657.278 1101.26 656.128 1101.12 654.891C1100.86 653.077 1101.56 651.175 1102.87 649.942C1103.66 649.198 1104.66 648.694 1105.72 648.514Z" fill="#FFCA05"/> +<path d="M1148.68 585.699C1150.69 584.905 1152.89 584.658 1155.04 584.783C1158.31 584.984 1161.49 586.002 1164.4 587.496C1167.05 588.888 1169.51 590.708 1171.48 593.017C1174.48 596.462 1176.68 600.718 1177.39 605.305V610.197C1177.06 612.187 1176.27 614.105 1175 615.661C1173.46 617.624 1171.54 619.469 1169.1 620.122C1168.71 621.976 1167.84 623.68 1166.77 625.214C1165.68 626.802 1164.39 628.231 1163.04 629.6C1164.31 631.779 1165.17 634.222 1165.43 636.751C1165.88 640.801 1164.74 644.971 1162.41 648.267C1159.74 652.135 1155.49 654.781 1150.93 655.535H1147.1C1144.19 655.213 1141.23 654.486 1138.78 652.771C1136.09 653.707 1133.09 653.554 1130.44 652.516C1128.06 651.582 1125.95 650.015 1124.17 648.168C1122.55 646.525 1121.18 644.642 1119.97 642.672C1117.46 641.664 1115.22 639.985 1113.55 637.83C1111.06 634.663 1109.8 630.568 1109.84 626.521C1109.86 622.819 1111 619.202 1112.72 615.974C1114.81 612.062 1117.69 608.64 1120.91 605.652C1123.3 603.455 1125.87 601.44 1128.68 599.832C1132.06 598.018 1135.65 596.58 1139.39 595.797C1140.17 592.673 1142.23 590.039 1144.69 588.096C1145.92 587.141 1147.22 586.26 1148.68 585.699ZM1149.83 589.741C1148.4 590.409 1147.12 591.393 1145.97 592.486C1145.09 593.38 1144.33 594.408 1143.8 595.557C1145.45 595.797 1147.09 596.296 1148.52 597.195C1149.38 597.795 1149.65 599.113 1149.07 600.005C1148.56 600.927 1147.29 601.279 1146.39 600.751C1145.41 600.206 1144.34 599.834 1143.24 599.732C1142.56 599.65 1141.88 599.691 1141.2 599.692C1139.84 599.975 1138.48 600.287 1137.15 600.715C1135.23 601.318 1133.37 602.132 1131.56 603.024C1129.74 603.926 1128.07 605.109 1126.46 606.359C1124.46 607.926 1122.6 609.678 1120.88 611.566C1118.7 614.01 1116.77 616.725 1115.46 619.764C1114.33 622.383 1113.71 625.286 1114 628.154C1114.31 631.313 1115.65 634.424 1117.99 636.557C1117.33 632.773 1117.75 628.858 1118.85 625.203C1119.2 624.23 1120.35 623.662 1121.32 623.98C1122.35 624.252 1123.03 625.461 1122.72 626.513C1122.35 627.86 1122.05 629.233 1121.89 630.626C1121.51 633.831 1122.01 637.129 1123.24 640.096C1124.82 642.779 1126.77 645.299 1129.27 647.135C1130.96 648.386 1133 649.227 1135.1 649.204C1133.35 646.991 1132.09 644.337 1131.68 641.506C1131.27 638.847 1131.6 636.133 1132.19 633.53C1132.35 632.883 1132.83 632.332 1133.45 632.107C1134.47 631.679 1135.74 632.284 1136.09 633.355C1136.4 634.134 1136.03 634.935 1135.93 635.714C1135.48 638.085 1135.39 640.606 1136.23 642.901C1137.04 645.182 1138.56 647.133 1140.27 648.774C1140.87 649.1 1141.39 649.549 1142 649.861C1143.75 650.82 1145.75 651.153 1147.71 651.377C1148.4 651.429 1149.09 651.592 1149.78 651.466C1153.29 651.036 1156.63 649.165 1158.78 646.275C1160.39 644.149 1161.34 641.495 1161.39 638.8C1161.45 636.629 1160.91 634.461 1159.95 632.532C1157.58 634.453 1154.83 635.873 1151.89 636.627C1151.2 638.534 1151.36 640.657 1151.93 642.575C1152.27 643.667 1151.53 644.918 1150.45 645.164C1149.46 645.428 1148.35 644.821 1148.03 643.832C1147.39 641.721 1147.14 639.455 1147.52 637.266C1146.42 637.234 1145.47 636.201 1145.54 635.074C1145.56 633.97 1146.54 633.034 1147.61 633.059C1151.61 632.837 1155.56 631.191 1158.41 628.291C1160.53 626.322 1162.62 624.255 1164.11 621.732C1164.62 620.804 1165.09 619.803 1165.14 618.72C1165.12 617.091 1164.74 615.404 1163.72 614.112C1163.2 613.318 1162.28 612.696 1162.25 611.653C1162.14 610.385 1163.35 609.238 1164.58 609.458C1165.47 609.542 1166 610.345 1166.53 610.99C1167.67 612.357 1168.52 613.979 1168.9 615.741C1170.22 614.989 1171.25 613.813 1172.15 612.592C1173.13 611.174 1173.5 609.398 1173.47 607.681C1173.43 605.162 1172.67 602.706 1171.57 600.473C1170.3 597.98 1168.59 595.714 1166.5 593.882C1163.83 591.626 1160.61 590.046 1157.22 589.297C1154.78 588.784 1152.16 588.739 1149.83 589.741Z" fill="black"/> +<path d="M1149.83 589.741C1152.16 588.739 1154.78 588.784 1157.22 589.297C1160.61 590.046 1163.83 591.626 1166.5 593.882C1168.59 595.714 1170.3 597.98 1171.57 600.473C1172.67 602.706 1173.43 605.162 1173.47 607.681C1173.5 609.398 1173.13 611.174 1172.15 612.592C1171.25 613.813 1170.22 614.989 1168.9 615.741C1168.52 613.979 1167.67 612.357 1166.53 610.99C1166 610.345 1165.47 609.542 1164.58 609.458C1163.35 609.238 1162.14 610.385 1162.25 611.653C1162.28 612.696 1163.2 613.318 1163.72 614.112C1164.74 615.404 1165.12 617.091 1165.14 618.72C1165.09 619.803 1164.62 620.804 1164.11 621.732C1162.62 624.255 1160.53 626.322 1158.41 628.291C1155.56 631.191 1151.61 632.837 1147.61 633.059C1146.54 633.034 1145.56 633.97 1145.54 635.074C1145.47 636.201 1146.42 637.234 1147.52 637.266C1147.14 639.455 1147.39 641.721 1148.03 643.832C1148.35 644.821 1149.46 645.428 1150.45 645.164C1151.53 644.918 1152.27 643.667 1151.93 642.575C1151.36 640.657 1151.2 638.534 1151.89 636.627C1154.83 635.873 1157.58 634.453 1159.95 632.532C1160.91 634.461 1161.45 636.629 1161.39 638.8C1161.34 641.495 1160.39 644.149 1158.78 646.275C1156.63 649.165 1153.29 651.036 1149.78 651.466C1149.09 651.592 1148.4 651.429 1147.71 651.377C1145.75 651.153 1143.75 650.82 1142 649.861C1141.39 649.549 1140.87 649.1 1140.27 648.774C1138.56 647.133 1137.04 645.182 1136.23 642.901C1135.39 640.606 1135.48 638.085 1135.93 635.714C1136.03 634.935 1136.4 634.134 1136.09 633.355C1135.74 632.284 1134.47 631.679 1133.45 632.107C1132.83 632.332 1132.35 632.883 1132.19 633.53C1131.6 636.133 1131.27 638.847 1131.68 641.506C1132.09 644.337 1133.35 646.991 1135.1 649.204C1133 649.227 1130.96 648.386 1129.27 647.135C1126.77 645.299 1124.82 642.779 1123.24 640.096C1122.01 637.129 1121.51 633.831 1121.89 630.626C1122.05 629.233 1122.35 627.86 1122.72 626.513C1123.03 625.461 1122.35 624.252 1121.32 623.98C1120.35 623.662 1119.2 624.23 1118.85 625.203C1117.75 628.858 1117.33 632.773 1117.99 636.557C1115.65 634.424 1114.31 631.313 1114 628.154C1113.71 625.286 1114.33 622.383 1115.46 619.764C1116.77 616.725 1118.7 614.01 1120.88 611.566C1122.6 609.678 1124.46 607.926 1126.46 606.359C1128.07 605.109 1129.74 603.926 1131.56 603.024C1133.37 602.132 1135.23 601.318 1137.15 600.715C1138.48 600.287 1139.84 599.975 1141.2 599.692C1141.88 599.691 1142.56 599.65 1143.24 599.732C1144.34 599.834 1145.41 600.206 1146.39 600.751C1147.29 601.279 1148.56 600.927 1149.07 600.005C1149.65 599.113 1149.38 597.795 1148.52 597.195C1147.09 596.296 1145.45 595.797 1143.8 595.557C1144.33 594.408 1145.09 593.38 1145.97 592.486C1147.12 591.393 1148.4 590.409 1149.83 589.741Z" fill="white"/> +<path d="M1054.09 549.084C1054.59 548.464 1055.51 548.265 1056.2 548.643C1056.88 548.984 1057.28 549.823 1057.12 550.586C1056.78 552.183 1055.86 553.597 1054.68 554.662C1056.38 556.139 1058.22 557.468 1060.23 558.48C1063.49 560.155 1067.18 560.917 1070.82 560.58C1074.92 560.267 1078.84 558.639 1082.29 556.369C1080.72 554.921 1079.66 552.773 1079.82 550.569C1079.87 549.654 1080.71 548.896 1081.6 548.948C1082.53 548.95 1083.35 549.85 1083.28 550.814C1083.23 552.049 1083.93 553.209 1084.88 553.915C1086.25 554.963 1088.26 554.902 1089.64 553.9C1090.2 553.528 1090.55 552.825 1091.25 552.671C1092.16 552.389 1093.18 553.056 1093.38 553.997V554.813C1093.3 555.07 1093.2 555.323 1093.02 555.53C1091.47 557.405 1089.02 558.409 1086.64 558.239C1086.58 560.432 1086.32 562.613 1085.96 564.775C1085.23 569.019 1084.07 573.218 1082.18 577.076C1080.61 580.229 1078.48 583.193 1075.58 585.169C1073.57 586.551 1071.22 587.345 1068.83 587.555H1066.6C1063.83 587.386 1061.12 586.317 1058.97 584.502C1056.02 582.046 1054.11 578.532 1052.81 574.915C1051.48 571.181 1050.73 567.251 1050.32 563.304C1050.09 561.078 1049.96 558.838 1050 556.599C1048.75 556.726 1047.48 556.656 1046.24 556.487C1045.33 556.397 1044.6 555.447 1044.74 554.513C1044.82 553.601 1045.67 552.853 1046.56 552.944C1047.98 553.096 1049.45 553.246 1050.83 552.794C1051.96 552.448 1052.99 551.649 1053.49 550.533C1053.72 550.061 1053.74 549.492 1054.09 549.084ZM1053.43 558.294C1053.4 558.609 1053.41 558.927 1053.44 559.242C1053.53 559.068 1053.58 558.876 1053.6 558.681C1053.62 558.539 1053.68 558.162 1053.43 558.294ZM1077.55 562.729C1073.65 564.13 1069.42 564.595 1065.34 563.913C1062.36 563.415 1059.51 562.262 1056.91 560.715C1056.87 561.466 1056.83 562.217 1056.78 562.968C1059.86 564.051 1063.06 564.774 1066.27 565.283C1071.56 566.109 1076.95 566.181 1082.26 565.564C1082.63 563.751 1082.9 561.917 1083.06 560.072C1081.31 561.131 1079.47 562.047 1077.55 562.729ZM1054.03 565.133C1054.47 568.138 1055.12 571.122 1056.16 573.969C1057.92 572.723 1060.04 571.991 1062.18 571.998C1064.5 571.965 1066.78 572.71 1068.81 573.826C1070.51 572.295 1072.52 571.102 1074.71 570.509C1076.77 569.961 1078.96 570.062 1081.01 570.646C1081.13 570.176 1081.28 569.712 1081.41 569.244C1072.88 570.078 1064.17 569.177 1056 566.471C1055.23 566.248 1054.56 565.749 1054.03 565.133ZM1071.52 576.146C1071.04 576.569 1070.53 576.986 1070.18 577.539C1069.14 579.177 1068.27 580.92 1067.4 582.656C1066.99 583.409 1066 583.727 1065.24 583.372C1064.37 583.019 1063.93 581.877 1064.34 581.006C1065.04 579.532 1065.81 578.091 1066.61 576.674C1065.26 576.019 1063.79 575.562 1062.29 575.566C1060.62 575.555 1058.94 576.174 1057.67 577.306C1058.53 578.857 1059.56 580.335 1060.89 581.495C1062.42 582.864 1064.36 583.744 1066.38 583.948C1069.1 584.262 1071.93 583.519 1074.13 581.835C1076.71 579.88 1078.46 576.986 1079.74 574.005C1078.92 573.783 1078.06 573.69 1077.21 573.727C1075.11 573.799 1073.14 574.82 1071.52 576.146Z" fill="black"/> +<path d="M1053.43 558.294C1053.68 558.162 1053.62 558.539 1053.6 558.681C1053.58 558.876 1053.53 559.068 1053.44 559.242C1053.41 558.927 1053.4 558.609 1053.43 558.294Z" fill="#43161D"/> +<path d="M1077.55 562.729C1079.47 562.047 1081.31 561.131 1083.06 560.072C1082.9 561.917 1082.63 563.751 1082.26 565.564C1076.95 566.181 1071.56 566.109 1066.27 565.283C1063.06 564.774 1059.86 564.051 1056.78 562.968C1056.83 562.217 1056.87 561.466 1056.91 560.715C1059.51 562.262 1062.36 563.415 1065.34 563.913C1069.42 564.595 1073.65 564.13 1077.55 562.729Z" fill="#FFF8F5"/> +<path d="M1054.03 565.133C1054.56 565.749 1055.23 566.248 1056 566.471C1064.17 569.177 1072.88 570.078 1081.41 569.244C1081.28 569.712 1081.13 570.176 1081.01 570.646C1078.96 570.062 1076.77 569.961 1074.71 570.509C1072.52 571.102 1070.51 572.295 1068.81 573.826C1066.78 572.71 1064.5 571.965 1062.18 571.998C1060.04 571.991 1057.92 572.723 1056.16 573.969C1055.12 571.122 1054.47 568.138 1054.03 565.133Z" fill="#C34155"/> +<path d="M1071.52 576.146C1073.14 574.82 1075.11 573.799 1077.21 573.727C1078.06 573.69 1078.92 573.783 1079.74 574.005C1078.46 576.986 1076.71 579.88 1074.13 581.835C1071.93 583.519 1069.1 584.262 1066.38 583.948C1064.36 583.744 1062.42 582.864 1060.89 581.495C1059.56 580.335 1058.53 578.857 1057.67 577.306C1058.94 576.174 1060.62 575.555 1062.29 575.566C1063.79 575.562 1065.26 576.019 1066.61 576.674C1065.81 578.091 1065.04 579.532 1064.34 581.006C1063.93 581.877 1064.37 583.019 1065.24 583.372C1066 583.727 1066.99 583.409 1067.4 582.656C1068.27 580.92 1069.14 579.177 1070.18 577.539C1070.53 576.986 1071.04 576.569 1071.52 576.146Z" fill="#F7B5C4"/> +<path d="M1084.32 502.055C1086.45 500.488 1089.2 499.931 1091.77 500.339C1093.75 500.627 1095.61 501.563 1097.09 502.929C1098.74 504.436 1099.92 506.402 1100.81 508.452C1101.63 510.372 1102.19 512.398 1102.59 514.45C1103.58 519.713 1103.59 525.132 1102.98 530.443C1102.68 533.204 1102.05 535.912 1101.48 538.623C1102.26 539.35 1103.04 540.083 1103.78 540.852C1104 541.067 1104.18 541.311 1104.33 541.571V543.198C1104.1 543.725 1103.65 544.145 1103.11 544.302C1102.45 544.5 1101.7 544.316 1101.22 543.821C1100.39 542.99 1099.6 542.104 1098.63 541.441C1095.51 539.137 1092.12 536.994 1088.29 536.247C1085.44 535.675 1082.47 536.149 1079.84 537.327C1078.66 537.793 1077.6 538.524 1076.55 539.226C1075.5 539.923 1073.93 539.24 1073.69 537.99C1073.5 537.229 1073.81 536.363 1074.45 535.922C1075.25 535.365 1076.07 534.838 1076.92 534.36C1076.49 530.058 1076.33 525.719 1076.66 521.404C1076.98 517.338 1077.65 513.257 1079.11 509.445C1080.22 506.608 1081.85 503.855 1084.32 502.055ZM1086.57 505.289C1084.84 506.523 1083.73 508.443 1082.91 510.388C1081.46 513.954 1080.83 517.808 1080.53 521.636C1080.24 525.363 1080.32 529.111 1080.66 532.831C1082.14 532.377 1083.68 532.124 1085.22 532.062C1084.88 530.205 1084.7 528.321 1084.65 526.434C1084.66 526.068 1085.06 525.942 1085.35 525.871C1087.17 525.53 1089.07 525.723 1090.86 525.14C1091.72 524.866 1092.61 524.325 1092.91 523.402C1093.29 522.399 1092.8 521.327 1092.13 520.592C1090.47 518.748 1088.15 517.751 1086.26 516.195C1085.87 515.848 1085.39 515.369 1085.56 514.789C1086.32 511.078 1087.5 507.402 1089.49 504.173C1088.45 504.31 1087.43 504.659 1086.57 505.289Z" fill="black"/> +<path d="M1050.95 500.601C1053.74 500.103 1056.74 500.746 1059.01 502.499C1061.18 504.149 1062.61 506.615 1063.54 509.169C1064.47 511.754 1064.93 514.494 1065.14 517.233C1065.35 520.04 1065.3 522.862 1065.04 525.664C1068.33 526.724 1071.13 529.422 1072.09 532.832C1072.22 533.363 1071.98 533.882 1071.68 534.301C1071.61 534.344 1071.53 534.389 1071.46 534.437C1070.9 534.901 1070.01 534.866 1069.48 534.366C1069.16 534.107 1069.02 533.703 1068.88 533.324C1068.18 531.405 1066.64 529.87 1064.81 529.056C1062.74 528.132 1060.33 528.018 1058.19 528.773C1056.59 529.335 1055.18 530.465 1054.36 531.983C1053.43 533.683 1053.25 535.706 1053.46 537.613C1053.69 539.686 1054.55 541.717 1056.02 543.19C1057.28 544.506 1058.99 545.414 1060.81 545.555C1062.44 545.631 1064.15 545.272 1065.49 544.283C1066.64 543.484 1067.44 542.285 1068.03 541.024C1068.51 540.017 1070.02 539.898 1070.66 540.79C1071.03 541.253 1071.13 541.914 1070.89 542.461C1070.4 543.56 1069.75 544.59 1068.96 545.487C1067.58 547.057 1065.71 548.125 1063.7 548.574H1059.03C1056.46 547.932 1054.15 546.306 1052.6 544.126C1051.02 541.959 1050.25 539.271 1050.17 536.593C1049.25 536.271 1048.3 536.039 1047.33 535.906C1044.68 535.536 1041.97 536.092 1039.51 537.116C1038.75 537.496 1037.99 537.875 1037.26 538.317C1036.38 538.824 1035.16 538.465 1034.68 537.57C1034.16 536.703 1034.44 535.44 1035.3 534.919C1036.15 534.405 1037.02 533.926 1037.93 533.52C1037.82 529.631 1037.94 525.728 1038.44 521.868C1038.91 518.266 1039.66 514.684 1040.92 511.276C1041.99 508.417 1043.44 505.629 1045.62 503.485C1047.09 502.039 1048.93 500.962 1050.95 500.601ZM1048.79 505.896C1047.24 507.172 1046.18 508.954 1045.33 510.766C1044.16 513.297 1043.42 516.006 1042.87 518.738C1042 523.189 1041.68 527.74 1041.78 532.274C1043.29 531.943 1044.84 531.789 1046.38 531.867C1046.17 529.986 1046.13 528.087 1046.22 526.198C1046.23 526.001 1046.39 525.857 1046.56 525.797C1047.02 525.624 1047.52 525.639 1048 525.619C1049.45 525.612 1050.91 525.714 1052.34 525.421C1052.92 525.291 1053.5 525.097 1053.98 524.721C1054.67 524.186 1055.04 523.216 1054.81 522.348C1054.56 521.36 1053.86 520.573 1053.16 519.886C1051.74 518.51 1050.04 517.487 1048.61 516.136C1048.29 515.796 1047.9 515.396 1047.93 514.892C1048.15 513.985 1048.44 513.095 1048.74 512.212C1049.72 509.451 1050.94 506.742 1052.67 504.384C1051.26 504.414 1049.88 504.985 1048.79 505.896Z" fill="black"/> +<path d="M1086.57 505.289C1087.43 504.659 1088.45 504.31 1089.49 504.173C1087.5 507.402 1086.32 511.078 1085.56 514.789C1085.39 515.369 1085.87 515.848 1086.26 516.195C1088.15 517.751 1090.47 518.748 1092.13 520.592C1092.8 521.327 1093.29 522.399 1092.91 523.402C1092.61 524.325 1091.72 524.866 1090.86 525.14C1089.07 525.723 1087.17 525.53 1085.35 525.871C1085.06 525.942 1084.66 526.068 1084.65 526.434C1084.7 528.321 1084.88 530.205 1085.22 532.062C1083.68 532.124 1082.14 532.377 1080.66 532.831C1080.32 529.111 1080.24 525.363 1080.53 521.636C1080.83 517.808 1081.46 513.954 1082.91 510.388C1083.73 508.443 1084.84 506.523 1086.57 505.289Z" fill="white"/> +<path d="M1048.79 505.896C1049.88 504.985 1051.26 504.414 1052.67 504.384C1050.94 506.742 1049.72 509.451 1048.74 512.212C1048.44 513.095 1048.15 513.985 1047.93 514.892C1047.9 515.396 1048.29 515.796 1048.61 516.136C1050.04 517.487 1051.74 518.51 1053.16 519.886C1053.86 520.573 1054.56 521.36 1054.81 522.348C1055.04 523.216 1054.67 524.186 1053.98 524.721C1053.5 525.097 1052.92 525.291 1052.34 525.421C1050.91 525.714 1049.45 525.612 1048 525.619C1047.52 525.639 1047.02 525.624 1046.56 525.797C1046.39 525.857 1046.23 526.001 1046.22 526.198C1046.13 528.087 1046.17 529.986 1046.38 531.867C1044.84 531.789 1043.29 531.943 1041.78 532.274C1041.68 527.74 1042 523.189 1042.87 518.738C1043.42 516.006 1044.16 513.297 1045.33 510.766C1046.18 508.954 1047.24 507.172 1048.79 505.896Z" fill="white"/> +<path d="M1058.19 528.773C1060.33 528.018 1062.74 528.132 1064.81 529.056C1066.64 529.87 1068.18 531.405 1068.88 533.324C1069.02 533.703 1069.16 534.107 1069.48 534.366C1070.01 534.866 1070.9 534.901 1071.46 534.437C1071.5 534.45 1071.58 534.477 1071.62 534.49C1072 536.653 1071.72 538.935 1070.78 540.915L1070.66 540.79C1070.02 539.898 1068.51 540.017 1068.03 541.024C1067.44 542.285 1066.64 543.484 1065.49 544.283C1064.15 545.272 1062.44 545.631 1060.81 545.555C1058.99 545.414 1057.28 544.506 1056.02 543.19C1054.55 541.717 1053.69 539.686 1053.46 537.613C1053.25 535.706 1053.43 533.683 1054.36 531.983C1055.18 530.465 1056.59 529.335 1058.19 528.773Z" fill="#FFCA05"/> +<defs> +<linearGradient id="paint0_linear_17007_2267" x1="5.71025e-06" y1="330.901" x2="1208" y2="382.21" gradientUnits="userSpaceOnUse"> +<stop stop-color="white" stop-opacity="0.29"/> +<stop offset="1" stop-color="white" stop-opacity="0.12"/> +</linearGradient> +</defs> +</svg> diff --git a/src/assets/cards/Cart Gradient 5.png b/src/assets/cards/Cart Gradient 5.png new file mode 100644 index 000000000..abd139106 Binary files /dev/null and b/src/assets/cards/Cart Gradient 5.png differ diff --git a/src/assets/cards/Cart Gradient 9.svg b/src/assets/cards/Cart Gradient 9.svg new file mode 100644 index 000000000..77a1bf628 --- /dev/null +++ b/src/assets/cards/Cart Gradient 9.svg @@ -0,0 +1,70 @@ +<svg width="1208" height="765" viewBox="0 0 1208 765" fill="none" xmlns="http://www.w3.org/2000/svg"> +<rect x="2.1533" y="2.1533" width="1203.69" height="760.114" rx="62.4456" fill="#FF90E8" stroke="url(#paint0_linear_17007_6863)" stroke-width="4.3066"/> +<mask id="mask0_17007_6863" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="1208" height="765"> +<rect width="1208" height="764.421" rx="64.5989" fill="#FF90E8"/> +</mask> +<g mask="url(#mask0_17007_6863)"> +<path d="M870.408 367.248C860.33 355.55 855.558 339.496 857.599 324.213C859.212 310.018 866.931 297.003 877.809 287.986L900 277.484C908.848 275.879 917.878 276.139 926.832 276.414C972.69 278.348 1018.03 289.395 1060.48 306.974C1113.05 328.776 1160.97 361.528 1201.37 401.757C1230.92 431.151 1256.53 464.441 1278.23 500.032C1282.56 506.983 1286.46 514.204 1290.74 521.197L1311.36 564.772C1315.58 582.575 1310.39 602.267 1297.79 615.409C1286.37 627.593 1269.19 634.059 1252.56 632.187C1238.18 630.8 1224.5 623.381 1215.37 612.098C1209.57 605.196 1206.5 596.603 1202.24 588.76C1174.96 535.631 1137.97 486.665 1090.35 450.302C1062.7 429.145 1031.66 412.447 998.75 401.308C970.337 392.004 940.541 385.906 910.591 386.67C895.309 386.269 880.308 379.01 870.408 367.248ZM888.351 347.128C894.029 355.964 904.741 360.973 915.087 359.988C940.483 359.84 965.789 364.194 990.272 370.941C1050.18 387.51 1104.92 421.467 1148.04 466.369C1181.46 500.842 1208.36 541.298 1229.65 584.264C1232.06 589.312 1234.42 594.615 1238.75 598.335C1247.92 606.962 1262.91 608.335 1273.32 601.328C1284.79 594.215 1289.52 578.335 1283.86 565.979C1255.4 506.525 1217.13 451.173 1168.2 406.814C1128.41 370.614 1081.65 342.053 1031.06 324.071C992.967 310.775 952.8 302.468 912.431 302.912C901.189 302.688 890.196 309.714 885.965 320.193C882.189 328.801 883.154 339.266 888.351 347.128Z" fill="black"/> +<path d="M888.351 347.128C883.154 339.266 882.189 328.801 885.965 320.193C890.196 309.714 901.189 302.688 912.431 302.912C952.8 302.468 992.967 310.775 1031.06 324.071C1081.65 342.053 1128.41 370.614 1168.2 406.814C1217.13 451.173 1255.4 506.525 1283.86 565.979C1289.52 578.335 1284.79 594.215 1273.32 601.328C1262.91 608.335 1247.92 606.962 1238.75 598.335C1234.42 594.615 1232.06 589.312 1229.65 584.264C1208.36 541.298 1181.46 500.842 1148.04 466.369C1104.92 421.467 1050.18 387.51 990.272 370.941C965.789 364.194 940.483 359.84 915.087 359.988C904.741 360.973 894.029 355.964 888.351 347.128Z" fill="#FFCA05"/> +<path d="M527.124 132.052C530.315 119.576 539.529 108.753 551.432 103.647C563.178 98.4566 576.814 98.6027 588.819 102.687C598.514 105.848 607.13 111.598 614.51 118.517C613.108 108.895 613.59 98.7033 617.751 89.7476C621.989 80.3913 630.324 72.9781 640.119 69.7801C649.876 66.4906 660.722 67.5013 670.112 71.3942C681.391 76.1512 690.803 84.8353 696.902 95.3522C699.528 99.6916 701.219 104.518 703.683 108.948C707.96 116.858 713.393 124.174 720.024 130.289C732.982 142.422 749.986 149.871 767.542 152.435C773.746 153.398 780.064 152.993 786.29 153.726C804.087 155.543 821.357 161.612 836.506 170.982C859.273 184.933 876.907 206.503 886.924 231.099C898.299 229.794 910.237 231.599 920.143 237.432C929.953 242.967 937.444 252.13 941.552 262.53C946.736 275.553 947.517 289.989 945.551 303.788C943.307 319.711 937.642 335.047 929.892 349.14C917.231 371.912 898.828 391.808 876.06 404.84L854.162 413.751C842.945 416.601 830.902 417.202 819.784 413.733C809.359 410.647 800.296 403.717 794.134 394.875C787.412 406.801 779.505 418.152 769.85 427.931C759.624 438.338 747.455 446.999 733.825 452.373C717.991 458.71 700.274 460.381 683.613 456.805C668.142 453.532 653.333 445.665 643.458 433.206C620.071 442.928 595.698 450.877 570.518 454.14C557.171 455.575 542.895 456.051 530.554 450.068C525.309 447.541 521.045 443.319 518.124 438.336L516.402 434.105C514.718 428.972 514.569 423.403 515.971 418.172C511.757 415.357 508.047 411.787 505.524 407.373L503.782 403.092C501.856 397.344 502.017 391.075 503.845 385.308C498.766 382.681 494.616 378.577 491.795 373.636L490.055 369.362C486.824 359.919 489.747 349.546 495.316 341.552C501.218 332.791 509.282 325.726 517.665 319.385C532.237 308.564 548.329 299.972 564.731 292.288C553.107 268.559 551.83 239.109 564.522 215.398C550.907 202.097 538.416 187.108 530.992 169.433C526.185 157.742 523.831 144.503 527.124 132.052ZM546.948 140.964C546.03 149.781 548.981 158.477 552.853 166.265C559.008 178.26 567.752 188.735 577.283 198.216C584.86 190.422 594.108 184.378 603.969 179.84C615.492 174.732 628.607 174.655 640.758 177.186C627.533 166.976 615.668 154.99 606.036 141.356C600.477 133.344 592.885 126.414 583.614 122.973C574.751 119.744 564.238 119.977 556.156 125.252C550.749 128.625 547.526 134.746 546.948 140.964ZM634.99 106.875C634.594 115.39 637.17 123.73 640.494 131.453C646.142 144.255 654.314 155.741 663.127 166.549C664.442 168.377 666.61 169.235 668.429 170.455C687.573 182.023 708.818 190.119 730.778 194.608C734.534 195.467 738.804 195.231 741.949 197.759C745.985 200.77 747.144 206.806 744.605 211.154C742.575 214.943 738.03 217.162 733.784 216.461C725.887 215.341 718.09 213.533 710.425 211.359C714.254 214.47 718.344 217.245 722.138 220.412C725.262 222.989 729.194 225.419 729.902 229.759C731.246 235.44 727.004 241.614 721.143 242.35C716.832 243.276 712.942 240.624 710.008 237.805C691.123 222.808 670.679 209.143 647.805 200.923C637.051 197.356 625.041 194.603 613.952 198.5C605.198 202.161 597.091 207.618 590.729 214.68C582.148 223.908 577.429 236.266 576.734 248.719C576.067 262.908 579.657 277.359 587.413 289.286C590.818 294.342 595.036 299.24 600.761 301.728C605.327 303.562 611.268 303.369 614.808 299.532C619.709 294.263 621.501 287.026 622.657 280.155C623.403 273.861 624.039 267.316 622.134 261.173C620.364 254.689 618.641 248.201 616.888 241.718C642.213 253.421 667.622 264.942 692.951 276.652C697.015 278.289 699.181 282.635 699.216 286.847C701.355 292.895 701.576 299.616 699.429 305.717C710.219 310.96 716.563 323.683 714.109 335.432C715.611 337.315 717.339 339 719.109 340.627C721.015 337.184 721.978 333.354 723.409 329.719C725.856 324.21 733.453 322.054 738.482 325.308C742.476 327.688 744.411 332.809 743.062 337.256C739.713 348.63 733.776 359.154 726.424 368.457C723.391 378.192 716.922 386.454 709.491 393.327C695.935 405.893 679.855 415.407 663.451 423.798C670.099 430.16 678.8 434.087 687.736 436.113C702.879 439.577 719.125 436.872 732.848 429.695C746.66 422.532 757.979 411.295 766.858 398.696C774.85 387.451 781.047 375.048 786.076 362.252C786.871 360.082 788.083 357.98 790.002 356.6C793.726 353.641 799.549 353.667 803.154 356.755C805.896 358.88 807.166 362.409 807.054 365.811C815.454 363.697 823.578 360.498 831.029 356.071C836.777 352.681 844.925 356.267 846.295 362.742C847.372 366.932 845.622 371.756 841.859 374.05C833.189 379.359 823.64 383.081 813.901 385.887C816.43 388.444 819.259 390.805 822.621 392.219C831.696 396.396 842.297 395.504 851.633 392.541C868.013 387.238 882.088 376.455 893.585 363.89C902.726 353.803 910.295 342.311 915.94 329.953C922.351 315.617 926.432 299.842 925.087 284.1C924.185 274.611 920.917 264.69 913.355 258.421C907.827 253.613 900.335 251.64 893.081 251.736C895.108 261.39 896.01 271.306 895.6 281.189C895.462 284.305 893.963 287.427 891.398 289.291C888.212 291.745 883.625 292.134 880.086 290.284C876.443 288.484 874.184 284.397 874.415 280.372C876.076 240.75 852.564 201.441 816.763 184.153C799.731 175.681 780.077 172.47 761.164 175.226C761.928 174.521 762.7 173.838 763.479 173.152C738.265 169.322 714.159 157 697.653 137.53C690.656 129.316 684.999 120.006 680.716 110.112C676.989 101.765 670.671 94.062 661.883 90.7531C655.481 88.4101 647.675 88.2876 641.9 92.3612C637.251 95.648 635.347 101.453 634.99 106.875ZM536.855 328.201C527.616 334.431 518.49 341.222 511.656 350.109C509.035 353.768 506.5 358.165 507.365 362.81C508.135 366.633 511.712 369.042 515.194 370.243C522.084 372.404 529.456 372.375 536.612 371.917C550.337 370.82 563.827 367.702 577.013 363.797C596.369 357.964 615.164 350.266 633.069 340.87C646.45 333.685 659.564 325.682 670.765 315.354C674.92 311.341 678.988 306.994 681.349 301.66C682.284 299.589 682.624 297.317 682.42 295.069C676.169 292.082 669.807 289.328 663.553 286.334C662.406 285.833 661.239 285.2 659.954 285.271C654.293 285.277 648.646 285.827 643.053 286.692C640.839 297.243 636.763 307.97 628.611 315.448C621.738 321.905 611.931 324.829 602.621 323.669C591.519 322.763 581.802 316.073 574.847 307.76C561.673 313.564 548.903 320.32 536.855 328.201ZM524.189 401.287C529.679 405.372 536.914 405.636 543.528 405.776C559.132 405.556 574.5 402.076 589.448 397.766C608.299 392.178 626.627 384.794 644.13 375.833C656.786 369.263 669.097 361.865 680.119 352.785C685.272 348.381 690.288 343.599 693.772 337.734C695.675 334.407 697.079 330.217 695.402 326.542C694.415 324.178 692.21 322.72 690.028 321.565C680.728 332.44 668.871 340.81 656.771 348.319C628.642 365.264 597.888 377.869 565.973 385.572C551.484 388.957 536.552 391.316 521.661 390.138C520.094 393.927 520.684 398.791 524.189 401.287ZM533.654 423.449C532.848 426.912 534.288 430.675 537.265 432.648C542.352 436.125 548.776 436.531 554.767 436.768C566.529 436.84 578.207 434.796 589.63 432.084C608.173 427.607 626.198 421.084 643.566 413.212C660.421 405.442 676.907 396.501 691.416 384.853C696.959 380.291 702.357 375.329 706.138 369.178C707.872 366.085 709.418 362.468 708.498 358.887C708.025 356.79 706.48 355.228 705.009 353.767C693.479 367.412 678.389 377.467 662.993 386.284C635.384 401.844 605.51 413.484 574.557 420.32C561.148 423.068 547.324 425.1 533.654 423.449Z" fill="black"/> +<path d="M546.948 140.964C547.526 134.746 550.749 128.625 556.156 125.252C564.238 119.977 574.751 119.744 583.614 122.973C592.885 126.414 600.477 133.344 606.036 141.356C615.668 154.99 627.533 166.976 640.758 177.186C628.607 174.655 615.492 174.732 603.969 179.84C594.108 184.378 584.86 190.422 577.283 198.216C567.752 188.735 559.008 178.26 552.853 166.265C548.981 158.477 546.03 149.781 546.948 140.964Z" fill="white"/> +<path d="M634.99 106.875C635.347 101.453 637.251 95.648 641.9 92.3612C647.675 88.2876 655.481 88.4101 661.883 90.7531C670.671 94.062 676.989 101.765 680.716 110.112C684.999 120.006 690.656 129.316 697.653 137.53C714.159 157 738.265 169.322 763.479 173.152C762.7 173.838 761.928 174.521 761.164 175.226C780.077 172.47 799.731 175.681 816.763 184.153C852.564 201.441 876.076 240.75 874.415 280.372C874.184 284.397 876.443 288.484 880.086 290.284C883.625 292.134 888.212 291.745 891.398 289.291C893.963 287.427 895.462 284.305 895.6 281.189C896.01 271.306 895.108 261.39 893.081 251.736C900.335 251.64 907.827 253.613 913.355 258.421C920.917 264.69 924.185 274.611 925.087 284.1C926.432 299.842 922.351 315.617 915.94 329.953C910.295 342.311 902.726 353.803 893.585 363.89C882.088 376.455 868.013 387.238 851.633 392.541C842.297 395.504 831.696 396.396 822.621 392.219C819.259 390.805 816.43 388.444 813.901 385.887C823.64 383.081 833.189 379.359 841.859 374.05C845.622 371.756 847.372 366.932 846.295 362.742C844.925 356.267 836.777 352.681 831.029 356.071C823.578 360.498 815.454 363.697 807.054 365.811C807.166 362.409 805.896 358.88 803.154 356.755C799.549 353.667 793.726 353.641 790.002 356.6C788.083 357.98 786.871 360.082 786.076 362.252C781.047 375.048 774.85 387.451 766.858 398.696C757.979 411.295 746.66 422.532 732.848 429.695C719.125 436.872 702.879 439.577 687.736 436.113C678.8 434.087 670.099 430.16 663.451 423.798C679.855 415.407 695.935 405.893 709.491 393.327C716.922 386.454 723.391 378.192 726.424 368.457C733.776 359.154 739.713 348.63 743.062 337.256C744.411 332.809 742.476 327.688 738.482 325.308C733.453 322.054 725.856 324.21 723.409 329.719C721.978 333.354 721.015 337.184 719.109 340.627C717.339 339 715.611 337.315 714.109 335.432C716.563 323.683 710.219 310.96 699.429 305.717C701.576 299.616 701.355 292.895 699.216 286.847C699.181 282.635 697.015 278.289 692.951 276.652C667.622 264.942 642.213 253.421 616.888 241.718C618.641 248.201 620.364 254.689 622.134 261.173C624.039 267.316 623.403 273.861 622.657 280.155C621.501 287.026 619.709 294.263 614.808 299.532C611.268 303.369 605.327 303.562 600.761 301.728C595.036 299.24 590.818 294.342 587.413 289.286C579.657 277.359 576.067 262.908 576.734 248.719C577.429 236.266 582.148 223.908 590.729 214.68C597.091 207.618 605.198 202.161 613.952 198.5C625.041 194.603 637.051 197.356 647.805 200.923C670.679 209.143 691.123 222.808 710.008 237.805C712.942 240.624 716.832 243.276 721.143 242.35C727.004 241.614 731.246 235.44 729.902 229.759C729.194 225.419 725.262 222.989 722.138 220.412C718.344 217.245 714.254 214.47 710.425 211.359C718.09 213.533 725.887 215.341 733.784 216.461C738.03 217.162 742.575 214.943 744.605 211.154C747.144 206.806 745.985 200.77 741.949 197.759C738.804 195.231 734.534 195.467 730.778 194.608C708.818 190.119 687.573 182.023 668.429 170.455C666.61 169.235 664.442 168.377 663.127 166.549C654.314 155.741 646.142 144.255 640.494 131.453C637.17 123.73 634.594 115.39 634.99 106.875Z" fill="white"/> +<path d="M536.855 328.201C548.903 320.32 561.673 313.564 574.847 307.76C581.802 316.073 591.519 322.763 602.621 323.669C611.931 324.829 621.738 321.905 628.611 315.448C636.763 307.97 640.839 297.243 643.053 286.692C648.646 285.827 654.293 285.277 659.954 285.271C661.239 285.2 662.406 285.833 663.553 286.334C669.807 289.328 676.169 292.082 682.42 295.069C682.624 297.317 682.284 299.589 681.349 301.66C678.988 306.994 674.92 311.341 670.765 315.354C659.564 325.682 646.45 333.685 633.069 340.87C615.164 350.266 596.369 357.964 577.013 363.797C563.827 367.702 550.337 370.82 536.612 371.917C529.456 372.375 522.084 372.404 515.194 370.243C511.712 369.042 508.135 366.633 507.365 362.81C506.5 358.165 509.035 353.768 511.656 350.109C518.49 341.222 527.616 334.431 536.855 328.201Z" fill="#FFCA05"/> +<path d="M524.189 401.287C520.684 398.791 520.094 393.927 521.661 390.138C536.552 391.316 551.484 388.957 565.973 385.572C597.888 377.869 628.642 365.264 656.771 348.319C668.871 340.81 680.728 332.44 690.028 321.565C692.21 322.72 694.415 324.178 695.402 326.542C697.079 330.217 695.675 334.407 693.772 337.734C690.288 343.599 685.272 348.381 680.119 352.785C669.097 361.865 656.786 369.263 644.13 375.833C626.627 384.794 608.299 392.178 589.448 397.766C574.5 402.076 559.132 405.556 543.528 405.776C536.914 405.636 529.679 405.372 524.189 401.287Z" fill="#FFCA05"/> +<path d="M533.654 423.449C547.324 425.1 561.148 423.068 574.557 420.32C605.51 413.484 635.384 401.844 662.993 386.284C678.389 377.467 693.479 367.412 705.009 353.767C706.48 355.228 708.025 356.79 708.498 358.887C709.418 362.468 707.872 366.085 706.138 369.178C702.357 375.329 696.959 380.291 691.416 384.853C676.907 396.501 660.421 405.442 643.566 413.212C626.198 421.084 608.173 427.607 589.63 432.084C578.207 434.796 566.529 436.84 554.767 436.768C548.776 436.531 542.352 436.125 537.265 432.648C534.288 430.675 532.848 426.912 533.654 423.449Z" fill="#FFCA05"/> +<mask id="path-5-outside-1_17007_6863" maskUnits="userSpaceOnUse" x="96" y="670.175" width="223" height="35" fill="black"> +<rect fill="white" x="96" y="670.175" width="223" height="35"/> +<path d="M97.4393 703.175L97.4393 672.558L104.652 672.558L113.757 690.243C113.968 690.691 114.157 691.147 114.325 691.609C114.507 692.058 114.668 692.507 114.809 692.955L114.935 692.955C114.921 692.479 114.907 692.002 114.893 691.525C114.893 691.049 114.893 690.572 114.893 690.095L114.893 672.558L120.907 672.558L120.907 703.175L113.757 703.175L104.526 685.448C104.316 685.028 104.126 684.593 103.958 684.144C103.79 683.696 103.643 683.247 103.516 682.799L103.369 682.799C103.397 683.275 103.411 683.745 103.411 684.208C103.425 684.656 103.432 685.126 103.432 685.616L103.432 703.175L97.4393 703.175ZM125.617 691.988L125.617 672.558L132.62 672.558L132.62 692.724C132.62 694.897 133.026 696.432 133.839 697.329C134.652 698.212 135.781 698.654 137.225 698.654C138.627 698.654 139.734 698.212 140.547 697.329C141.374 696.432 141.788 694.897 141.788 692.724L141.788 672.558L148.727 672.558L148.727 691.988C148.727 695.997 147.676 698.948 145.573 700.841C143.484 702.733 140.709 703.68 137.246 703.68C133.727 703.68 130.909 702.733 128.792 700.841C126.676 698.948 125.617 695.997 125.617 691.988ZM151.335 678.046L151.335 672.558L175.37 672.558L175.37 678.046L166.896 678.046L166.896 703.175L159.83 703.175L159.83 678.046L151.335 678.046ZM176.274 678.046L176.274 672.558L200.31 672.558L200.31 678.046L191.835 678.046L191.835 703.175L184.77 703.175L184.77 678.046L176.274 678.046ZM210.487 703.175L210.487 691.736L200.499 672.558L208.174 672.558L213.494 683.072C213.663 683.422 213.817 683.759 213.957 684.081C214.097 684.39 214.23 684.712 214.357 685.049L214.462 685.049C214.588 684.712 214.714 684.39 214.84 684.081C214.98 683.773 215.142 683.436 215.324 683.072L220.644 672.558L227.436 672.558L217.574 691.567L217.574 703.175L210.487 703.175ZM246.95 703.175L246.95 691.736L236.962 672.558L244.637 672.558L249.958 683.072C250.126 683.422 250.28 683.759 250.42 684.081C250.56 684.39 250.694 684.712 250.82 685.049L250.925 685.049C251.051 684.712 251.177 684.39 251.303 684.081C251.444 683.773 251.605 683.436 251.787 683.072L257.107 672.558L263.899 672.558L254.037 691.567L254.037 703.175L246.95 703.175ZM263.92 688.75L263.92 686.983C263.92 681.908 265.133 678.151 267.558 675.712C269.998 673.273 273.138 672.053 276.979 672.053C280.806 672.053 283.939 673.273 286.379 675.712C288.832 678.151 290.058 681.908 290.058 686.983L290.058 688.75C290.058 693.824 288.832 697.582 286.379 700.021C283.939 702.46 280.806 703.68 276.979 703.68C273.138 703.68 269.998 702.46 267.558 700.021C265.133 697.582 263.92 693.824 263.92 688.75ZM271.175 690.243C271.175 693.187 271.694 695.331 272.731 696.677C273.769 698.009 275.184 698.675 276.979 698.675C278.773 698.675 280.189 698.009 281.227 696.677C282.278 695.331 282.804 693.187 282.804 690.243L282.804 685.511C282.804 682.567 282.278 680.436 281.227 679.119C280.189 677.787 278.773 677.121 276.979 677.121C275.184 677.121 273.769 677.787 272.731 679.119C271.694 680.436 271.175 682.567 271.175 685.511L271.175 690.243ZM293.928 691.988L293.928 672.558L300.93 672.558L300.93 692.724C300.93 694.897 301.337 696.432 302.15 697.329C302.963 698.212 304.091 698.654 305.535 698.654C306.937 698.654 308.045 698.212 308.858 697.329C309.685 696.432 310.098 694.897 310.098 692.724L310.098 672.558L317.038 672.558L317.038 691.988C317.038 695.997 315.986 698.948 313.884 700.841C311.795 702.733 309.019 703.68 305.556 703.68C302.038 703.68 299.22 702.733 297.103 700.841C294.986 698.948 293.928 695.997 293.928 691.988Z"/> +</mask> +<path d="M97.4393 703.175L97.4393 672.558L104.652 672.558L113.757 690.243C113.968 690.691 114.157 691.147 114.325 691.609C114.507 692.058 114.668 692.507 114.809 692.955L114.935 692.955C114.921 692.479 114.907 692.002 114.893 691.525C114.893 691.049 114.893 690.572 114.893 690.095L114.893 672.558L120.907 672.558L120.907 703.175L113.757 703.175L104.526 685.448C104.316 685.028 104.126 684.593 103.958 684.144C103.79 683.696 103.643 683.247 103.516 682.799L103.369 682.799C103.397 683.275 103.411 683.745 103.411 684.208C103.425 684.656 103.432 685.126 103.432 685.616L103.432 703.175L97.4393 703.175ZM125.617 691.988L125.617 672.558L132.62 672.558L132.62 692.724C132.62 694.897 133.026 696.432 133.839 697.329C134.652 698.212 135.781 698.654 137.225 698.654C138.627 698.654 139.734 698.212 140.547 697.329C141.374 696.432 141.788 694.897 141.788 692.724L141.788 672.558L148.727 672.558L148.727 691.988C148.727 695.997 147.676 698.948 145.573 700.841C143.484 702.733 140.709 703.68 137.246 703.68C133.727 703.68 130.909 702.733 128.792 700.841C126.676 698.948 125.617 695.997 125.617 691.988ZM151.335 678.046L151.335 672.558L175.37 672.558L175.37 678.046L166.896 678.046L166.896 703.175L159.83 703.175L159.83 678.046L151.335 678.046ZM176.274 678.046L176.274 672.558L200.31 672.558L200.31 678.046L191.835 678.046L191.835 703.175L184.77 703.175L184.77 678.046L176.274 678.046ZM210.487 703.175L210.487 691.736L200.499 672.558L208.174 672.558L213.494 683.072C213.663 683.422 213.817 683.759 213.957 684.081C214.097 684.39 214.23 684.712 214.357 685.049L214.462 685.049C214.588 684.712 214.714 684.39 214.84 684.081C214.98 683.773 215.142 683.436 215.324 683.072L220.644 672.558L227.436 672.558L217.574 691.567L217.574 703.175L210.487 703.175ZM246.95 703.175L246.95 691.736L236.962 672.558L244.637 672.558L249.958 683.072C250.126 683.422 250.28 683.759 250.42 684.081C250.56 684.39 250.694 684.712 250.82 685.049L250.925 685.049C251.051 684.712 251.177 684.39 251.303 684.081C251.444 683.773 251.605 683.436 251.787 683.072L257.107 672.558L263.899 672.558L254.037 691.567L254.037 703.175L246.95 703.175ZM263.92 688.75L263.92 686.983C263.92 681.908 265.133 678.151 267.558 675.712C269.998 673.273 273.138 672.053 276.979 672.053C280.806 672.053 283.939 673.273 286.379 675.712C288.832 678.151 290.058 681.908 290.058 686.983L290.058 688.75C290.058 693.824 288.832 697.582 286.379 700.021C283.939 702.46 280.806 703.68 276.979 703.68C273.138 703.68 269.998 702.46 267.558 700.021C265.133 697.582 263.92 693.824 263.92 688.75ZM271.175 690.243C271.175 693.187 271.694 695.331 272.731 696.677C273.769 698.009 275.184 698.675 276.979 698.675C278.773 698.675 280.189 698.009 281.227 696.677C282.278 695.331 282.804 693.187 282.804 690.243L282.804 685.511C282.804 682.567 282.278 680.436 281.227 679.119C280.189 677.787 278.773 677.121 276.979 677.121C275.184 677.121 273.769 677.787 272.731 679.119C271.694 680.436 271.175 682.567 271.175 685.511L271.175 690.243ZM293.928 691.988L293.928 672.558L300.93 672.558L300.93 692.724C300.93 694.897 301.337 696.432 302.15 697.329C302.963 698.212 304.091 698.654 305.535 698.654C306.937 698.654 308.045 698.212 308.858 697.329C309.685 696.432 310.098 694.897 310.098 692.724L310.098 672.558L317.038 672.558L317.038 691.988C317.038 695.997 315.986 698.948 313.884 700.841C311.795 702.733 309.019 703.68 305.556 703.68C302.038 703.68 299.22 702.733 297.103 700.841C294.986 698.948 293.928 695.997 293.928 691.988Z" fill="white"/> +<path d="M97.4393 703.175L96.4393 703.175L96.4393 704.175L97.4393 704.175L97.4393 703.175ZM97.4393 672.558L97.4393 671.558L96.4393 671.558L96.4393 672.558L97.4393 672.558ZM104.652 672.558L105.541 672.1L105.262 671.558L104.652 671.558L104.652 672.558ZM113.757 690.243L114.663 689.818L114.655 689.801L114.646 689.785L113.757 690.243ZM114.325 691.609L113.385 691.951L113.392 691.969L113.399 691.986L114.325 691.609ZM114.809 692.955L113.854 693.254L114.073 693.955L114.809 693.955L114.809 692.955ZM114.935 692.955L114.935 693.955L115.965 693.955L115.934 692.926L114.935 692.955ZM114.893 691.525L113.893 691.525L113.893 691.54L113.893 691.555L114.893 691.525ZM114.893 672.558L114.893 671.558L113.893 671.558L113.893 672.558L114.893 672.558ZM120.907 672.558L121.907 672.558L121.907 671.558L120.907 671.558L120.907 672.558ZM120.907 703.175L120.907 704.175L121.907 704.175L121.907 703.175L120.907 703.175ZM113.757 703.175L112.87 703.637L113.151 704.175L113.757 704.175L113.757 703.175ZM104.526 685.448L103.631 685.895L103.635 685.903L103.639 685.91L104.526 685.448ZM103.516 682.799L104.479 682.528L104.274 681.799L103.516 681.799L103.516 682.799ZM103.369 682.799L103.369 681.799L102.309 681.799L102.371 682.857L103.369 682.799ZM103.411 684.208L102.411 684.208L102.411 684.223L102.412 684.239L103.411 684.208ZM103.432 703.175L103.432 704.175L104.432 704.175L104.432 703.175L103.432 703.175ZM97.4393 703.175L98.4393 703.175L98.4393 672.558L97.4393 672.558L96.4393 672.558L96.4393 703.175L97.4393 703.175ZM97.4393 672.558L97.4393 673.558L104.652 673.558L104.652 672.558L104.652 671.558L97.4393 671.558L97.4393 672.558ZM104.652 672.558L103.763 673.016L112.868 690.7L113.757 690.243L114.646 689.785L105.541 672.1L104.652 672.558ZM113.757 690.243L112.852 690.667C113.049 691.089 113.227 691.517 113.385 691.951L114.325 691.609L115.265 691.268C115.086 690.777 114.886 690.294 114.663 689.818L113.757 690.243ZM114.325 691.609L113.399 691.986C113.571 692.41 113.722 692.832 113.854 693.254L114.809 692.955L115.763 692.657C115.614 692.181 115.444 691.707 115.251 691.233L114.325 691.609ZM114.809 692.955L114.809 693.955L114.935 693.955L114.935 692.955L114.935 691.955L114.809 691.955L114.809 692.955ZM114.935 692.955L115.934 692.926C115.933 692.868 115.931 692.805 115.929 692.747C115.927 692.69 115.926 692.626 115.924 692.568C115.922 692.511 115.92 692.447 115.919 692.39C115.917 692.332 115.915 692.269 115.913 692.211C115.909 692.071 115.907 691.993 115.903 691.853C115.899 691.714 115.896 691.636 115.892 691.496L114.893 691.525L113.893 691.555C113.895 691.615 113.897 691.673 113.898 691.734C113.9 691.794 113.902 691.852 113.904 691.912C113.905 691.973 113.907 692.031 113.909 692.091C113.911 692.151 113.912 692.209 113.914 692.27C113.918 692.406 113.921 692.491 113.925 692.627C113.929 692.763 113.931 692.849 113.935 692.985L114.935 692.955ZM114.893 691.525L115.893 691.525C115.893 691.524 115.893 691.524 115.893 691.523C115.893 691.522 115.893 691.521 115.893 691.52C115.893 691.519 115.893 691.518 115.893 691.517C115.893 691.516 115.893 691.515 115.893 691.514C115.893 691.513 115.893 691.512 115.893 691.511C115.893 691.51 115.893 691.51 115.893 691.509C115.893 691.508 115.893 691.507 115.893 691.506C115.893 691.505 115.893 691.504 115.893 691.503C115.893 691.502 115.893 691.501 115.893 691.5C115.893 691.499 115.893 691.498 115.893 691.497C115.893 691.497 115.893 691.496 115.893 691.495C115.893 691.494 115.893 691.493 115.893 691.492C115.893 691.491 115.893 691.49 115.893 691.489C115.893 691.488 115.893 691.487 115.893 691.486C115.893 691.485 115.893 691.484 115.893 691.483C115.893 691.483 115.893 691.482 115.893 691.481C115.893 691.48 115.893 691.479 115.893 691.478C115.893 691.477 115.893 691.476 115.893 691.475C115.893 691.474 115.893 691.473 115.893 691.472C115.893 691.471 115.893 691.47 115.893 691.47C115.893 691.469 115.893 691.468 115.893 691.467C115.893 691.466 115.893 691.465 115.893 691.464C115.893 691.463 115.893 691.462 115.893 691.461C115.893 691.46 115.893 691.459 115.893 691.458C115.893 691.457 115.893 691.456 115.893 691.456C115.893 691.455 115.893 691.454 115.893 691.453C115.893 691.452 115.893 691.451 115.893 691.45C115.893 691.449 115.893 691.448 115.893 691.447C115.893 691.446 115.893 691.445 115.893 691.444C115.893 691.443 115.893 691.443 115.893 691.442C115.893 691.441 115.893 691.44 115.893 691.439C115.893 691.438 115.893 691.437 115.893 691.436C115.893 691.435 115.893 691.434 115.893 691.433C115.893 691.432 115.893 691.431 115.893 691.43C115.893 691.429 115.893 691.429 115.893 691.428C115.893 691.427 115.893 691.426 115.893 691.425C115.893 691.424 115.893 691.423 115.893 691.422C115.893 691.421 115.893 691.42 115.893 691.419C115.893 691.418 115.893 691.417 115.893 691.416C115.893 691.416 115.893 691.415 115.893 691.414C115.893 691.413 115.893 691.412 115.893 691.411C115.893 691.41 115.893 691.409 115.893 691.408C115.893 691.407 115.893 691.406 115.893 691.405C115.893 691.404 115.893 691.403 115.893 691.402C115.893 691.402 115.893 691.401 115.893 691.4C115.893 691.399 115.893 691.398 115.893 691.397C115.893 691.396 115.893 691.395 115.893 691.394C115.893 691.393 115.893 691.392 115.893 691.391C115.893 691.39 115.893 691.389 115.893 691.389C115.893 691.388 115.893 691.387 115.893 691.386C115.893 691.385 115.893 691.384 115.893 691.383C115.893 691.382 115.893 691.381 115.893 691.38C115.893 691.379 115.893 691.378 115.893 691.377C115.893 691.376 115.893 691.375 115.893 691.375C115.893 691.374 115.893 691.373 115.893 691.372C115.893 691.371 115.893 691.37 115.893 691.369C115.893 691.368 115.893 691.367 115.893 691.366C115.893 691.365 115.893 691.364 115.893 691.363C115.893 691.362 115.893 691.362 115.893 691.361C115.893 691.36 115.893 691.359 115.893 691.358C115.893 691.357 115.893 691.356 115.893 691.355C115.893 691.354 115.893 691.353 115.893 691.352C115.893 691.351 115.893 691.35 115.893 691.349C115.893 691.348 115.893 691.348 115.893 691.347C115.893 691.346 115.893 691.345 115.893 691.344C115.893 691.343 115.893 691.342 115.893 691.341C115.893 691.34 115.893 691.339 115.893 691.338C115.893 691.337 115.893 691.336 115.893 691.335C115.893 691.335 115.893 691.334 115.893 691.333C115.893 691.332 115.893 691.331 115.893 691.33C115.893 691.329 115.893 691.328 115.893 691.327C115.893 691.326 115.893 691.325 115.893 691.324C115.893 691.323 115.893 691.322 115.893 691.321C115.893 691.321 115.893 691.32 115.893 691.319C115.893 691.318 115.893 691.317 115.893 691.316C115.893 691.315 115.893 691.314 115.893 691.313C115.893 691.312 115.893 691.311 115.893 691.31C115.893 691.309 115.893 691.308 115.893 691.308C115.893 691.307 115.893 691.306 115.893 691.305C115.893 691.304 115.893 691.303 115.893 691.302C115.893 691.301 115.893 691.3 115.893 691.299C115.893 691.298 115.893 691.297 115.893 691.296C115.893 691.295 115.893 691.294 115.893 691.294C115.893 691.293 115.893 691.292 115.893 691.291C115.893 691.29 115.893 691.289 115.893 691.288C115.893 691.287 115.893 691.286 115.893 691.285C115.893 691.284 115.893 691.283 115.893 691.282C115.893 691.281 115.893 691.281 115.893 691.28C115.893 691.279 115.893 691.278 115.893 691.277C115.893 691.276 115.893 691.275 115.893 691.274C115.893 691.273 115.893 691.272 115.893 691.271C115.893 691.27 115.893 691.269 115.893 691.268C115.893 691.268 115.893 691.267 115.893 691.266C115.893 691.265 115.893 691.264 115.893 691.263C115.893 691.262 115.893 691.261 115.893 691.26C115.893 691.259 115.893 691.258 115.893 691.257C115.893 691.256 115.893 691.255 115.893 691.254C115.893 691.254 115.893 691.253 115.893 691.252C115.893 691.251 115.893 691.25 115.893 691.249C115.893 691.248 115.893 691.247 115.893 691.246C115.893 691.245 115.893 691.244 115.893 691.243C115.893 691.242 115.893 691.241 115.893 691.241C115.893 691.24 115.893 691.239 115.893 691.238C115.893 691.237 115.893 691.236 115.893 691.235C115.893 691.234 115.893 691.233 115.893 691.232C115.893 691.231 115.893 691.23 115.893 691.229C115.893 691.228 115.893 691.227 115.893 691.227C115.893 691.226 115.893 691.225 115.893 691.224C115.893 691.223 115.893 691.222 115.893 691.221C115.893 691.22 115.893 691.219 115.893 691.218C115.893 691.217 115.893 691.216 115.893 691.215C115.893 691.214 115.893 691.214 115.893 691.213C115.893 691.212 115.893 691.211 115.893 691.21C115.893 691.209 115.893 691.208 115.893 691.207C115.893 691.206 115.893 691.205 115.893 691.204C115.893 691.203 115.893 691.202 115.893 691.201C115.893 691.2 115.893 691.2 115.893 691.199C115.893 691.198 115.893 691.197 115.893 691.196C115.893 691.195 115.893 691.194 115.893 691.193C115.893 691.192 115.893 691.191 115.893 691.19C115.893 691.189 115.893 691.188 115.893 691.187C115.893 691.187 115.893 691.186 115.893 691.185C115.893 691.184 115.893 691.183 115.893 691.182C115.893 691.181 115.893 691.18 115.893 691.179C115.893 691.178 115.893 691.177 115.893 691.176C115.893 691.175 115.893 691.174 115.893 691.173C115.893 691.173 115.893 691.172 115.893 691.171C115.893 691.17 115.893 691.169 115.893 691.168C115.893 691.167 115.893 691.166 115.893 691.165C115.893 691.164 115.893 691.163 115.893 691.162C115.893 691.161 115.893 691.16 115.893 691.16C115.893 691.159 115.893 691.158 115.893 691.157C115.893 691.156 115.893 691.155 115.893 691.154C115.893 691.153 115.893 691.152 115.893 691.151C115.893 691.15 115.893 691.149 115.893 691.148C115.893 691.147 115.893 691.146 115.893 691.146C115.893 691.145 115.893 691.144 115.893 691.143C115.893 691.142 115.893 691.141 115.893 691.14C115.893 691.139 115.893 691.138 115.893 691.137C115.893 691.136 115.893 691.135 115.893 691.134C115.893 691.133 115.893 691.133 115.893 691.132C115.893 691.131 115.893 691.13 115.893 691.129C115.893 691.128 115.893 691.127 115.893 691.126C115.893 691.125 115.893 691.124 115.893 691.123C115.893 691.122 115.893 691.121 115.893 691.12C115.893 691.119 115.893 691.119 115.893 691.118C115.893 691.117 115.893 691.116 115.893 691.115C115.893 691.114 115.893 691.113 115.893 691.112C115.893 691.111 115.893 691.11 115.893 691.109C115.893 691.108 115.893 691.107 115.893 691.106C115.893 691.106 115.893 691.105 115.893 691.104C115.893 691.103 115.893 691.102 115.893 691.101C115.893 691.1 115.893 691.099 115.893 691.098C115.893 691.097 115.893 691.096 115.893 691.095C115.893 691.094 115.893 691.093 115.893 691.092C115.893 691.092 115.893 691.091 115.893 691.09C115.893 691.089 115.893 691.088 115.893 691.087C115.893 691.086 115.893 691.085 115.893 691.084C115.893 691.083 115.893 691.082 115.893 691.081C115.893 691.08 115.893 691.079 115.893 691.079C115.893 691.078 115.893 691.077 115.893 691.076C115.893 691.075 115.893 691.074 115.893 691.073C115.893 691.072 115.893 691.071 115.893 691.07C115.893 691.069 115.893 691.068 115.893 691.067C115.893 691.066 115.893 691.065 115.893 691.065C115.893 691.064 115.893 691.063 115.893 691.062C115.893 691.061 115.893 691.06 115.893 691.059C115.893 691.058 115.893 691.057 115.893 691.056C115.893 691.055 115.893 691.054 115.893 691.053C115.893 691.052 115.893 691.052 115.893 691.051C115.893 691.05 115.893 691.049 115.893 691.048C115.893 691.047 115.893 691.046 115.893 691.045C115.893 691.044 115.893 691.043 115.893 691.042C115.893 691.041 115.893 691.04 115.893 691.039C115.893 691.038 115.893 691.038 115.893 691.037C115.893 691.036 115.893 691.035 115.893 691.034C115.893 691.033 115.893 691.032 115.893 691.031C115.893 691.03 115.893 691.029 115.893 691.028C115.893 691.027 115.893 691.026 115.893 691.025C115.893 691.025 115.893 691.024 115.893 691.023C115.893 691.022 115.893 691.021 115.893 691.02C115.893 691.019 115.893 691.018 115.893 691.017C115.893 691.016 115.893 691.015 115.893 691.014C115.893 691.013 115.893 691.012 115.893 691.011C115.893 691.011 115.893 691.01 115.893 691.009C115.893 691.008 115.893 691.007 115.893 691.006C115.893 691.005 115.893 691.004 115.893 691.003C115.893 691.002 115.893 691.001 115.893 691C115.893 690.999 115.893 690.998 115.893 690.998C115.893 690.997 115.893 690.996 115.893 690.995C115.893 690.994 115.893 690.993 115.893 690.992C115.893 690.991 115.893 690.99 115.893 690.989C115.893 690.988 115.893 690.987 115.893 690.986C115.893 690.985 115.893 690.984 115.893 690.984C115.893 690.983 115.893 690.982 115.893 690.981C115.893 690.98 115.893 690.979 115.893 690.978C115.893 690.977 115.893 690.976 115.893 690.975C115.893 690.974 115.893 690.973 115.893 690.972C115.893 690.971 115.893 690.971 115.893 690.97C115.893 690.969 115.893 690.968 115.893 690.967C115.893 690.966 115.893 690.965 115.893 690.964C115.893 690.963 115.893 690.962 115.893 690.961C115.893 690.96 115.893 690.959 115.893 690.958C115.893 690.957 115.893 690.957 115.893 690.956C115.893 690.955 115.893 690.954 115.893 690.953C115.893 690.952 115.893 690.951 115.893 690.95C115.893 690.949 115.893 690.948 115.893 690.947C115.893 690.946 115.893 690.945 115.893 690.944C115.893 690.944 115.893 690.943 115.893 690.942C115.893 690.941 115.893 690.94 115.893 690.939C115.893 690.938 115.893 690.937 115.893 690.936C115.893 690.935 115.893 690.934 115.893 690.933C115.893 690.932 115.893 690.931 115.893 690.931C115.893 690.93 115.893 690.929 115.893 690.928C115.893 690.927 115.893 690.926 115.893 690.925C115.893 690.924 115.893 690.923 115.893 690.922C115.893 690.921 115.893 690.92 115.893 690.919C115.893 690.918 115.893 690.917 115.893 690.917C115.893 690.916 115.893 690.915 115.893 690.914C115.893 690.913 115.893 690.912 115.893 690.911C115.893 690.91 115.893 690.909 115.893 690.908C115.893 690.907 115.893 690.906 115.893 690.905C115.893 690.904 115.893 690.904 115.893 690.903C115.893 690.902 115.893 690.901 115.893 690.9C115.893 690.899 115.893 690.898 115.893 690.897C115.893 690.896 115.893 690.895 115.893 690.894C115.893 690.893 115.893 690.892 115.893 690.891C115.893 690.89 115.893 690.89 115.893 690.889C115.893 690.888 115.893 690.887 115.893 690.886C115.893 690.885 115.893 690.884 115.893 690.883C115.893 690.882 115.893 690.881 115.893 690.88C115.893 690.879 115.893 690.878 115.893 690.877C115.893 690.877 115.893 690.876 115.893 690.875C115.893 690.874 115.893 690.873 115.893 690.872C115.893 690.871 115.893 690.87 115.893 690.869C115.893 690.868 115.893 690.867 115.893 690.866C115.893 690.865 115.893 690.864 115.893 690.863C115.893 690.863 115.893 690.862 115.893 690.861C115.893 690.86 115.893 690.859 115.893 690.858C115.893 690.857 115.893 690.856 115.893 690.855C115.893 690.854 115.893 690.853 115.893 690.852C115.893 690.851 115.893 690.85 115.893 690.85C115.893 690.849 115.893 690.848 115.893 690.847C115.893 690.846 115.893 690.845 115.893 690.844C115.893 690.843 115.893 690.842 115.893 690.841C115.893 690.84 115.893 690.839 115.893 690.838C115.893 690.837 115.893 690.836 115.893 690.836C115.893 690.835 115.893 690.834 115.893 690.833C115.893 690.832 115.893 690.831 115.893 690.83C115.893 690.829 115.893 690.828 115.893 690.827C115.893 690.826 115.893 690.825 115.893 690.824C115.893 690.823 115.893 690.823 115.893 690.822C115.893 690.821 115.893 690.82 115.893 690.819C115.893 690.818 115.893 690.817 115.893 690.816C115.893 690.815 115.893 690.814 115.893 690.813C115.893 690.812 115.893 690.811 115.893 690.81C115.893 690.809 115.893 690.809 115.893 690.808C115.893 690.807 115.893 690.806 115.893 690.805C115.893 690.804 115.893 690.803 115.893 690.802C115.893 690.801 115.893 690.8 115.893 690.799C115.893 690.798 115.893 690.797 115.893 690.796C115.893 690.796 115.893 690.795 115.893 690.794C115.893 690.793 115.893 690.792 115.893 690.791C115.893 690.79 115.893 690.789 115.893 690.788C115.893 690.787 115.893 690.786 115.893 690.785C115.893 690.784 115.893 690.783 115.893 690.782C115.893 690.782 115.893 690.781 115.893 690.78C115.893 690.779 115.893 690.778 115.893 690.777C115.893 690.776 115.893 690.775 115.893 690.774C115.893 690.773 115.893 690.772 115.893 690.771C115.893 690.77 115.893 690.769 115.893 690.769C115.893 690.768 115.893 690.767 115.893 690.766C115.893 690.765 115.893 690.764 115.893 690.763C115.893 690.762 115.893 690.761 115.893 690.76C115.893 690.759 115.893 690.758 115.893 690.757C115.893 690.756 115.893 690.755 115.893 690.755C115.893 690.754 115.893 690.753 115.893 690.752C115.893 690.751 115.893 690.75 115.893 690.749C115.893 690.748 115.893 690.747 115.893 690.746C115.893 690.745 115.893 690.744 115.893 690.743C115.893 690.742 115.893 690.742 115.893 690.741C115.893 690.74 115.893 690.739 115.893 690.738C115.893 690.737 115.893 690.736 115.893 690.735C115.893 690.734 115.893 690.733 115.893 690.732C115.893 690.731 115.893 690.73 115.893 690.729C115.893 690.728 115.893 690.728 115.893 690.727C115.893 690.726 115.893 690.725 115.893 690.724C115.893 690.723 115.893 690.722 115.893 690.721C115.893 690.72 115.893 690.719 115.893 690.718C115.893 690.717 115.893 690.716 115.893 690.715C115.893 690.715 115.893 690.714 115.893 690.713C115.893 690.712 115.893 690.711 115.893 690.71C115.893 690.709 115.893 690.708 115.893 690.707C115.893 690.706 115.893 690.705 115.893 690.704C115.893 690.703 115.893 690.702 115.893 690.701C115.893 690.701 115.893 690.7 115.893 690.699C115.893 690.698 115.893 690.697 115.893 690.696C115.893 690.695 115.893 690.694 115.893 690.693C115.893 690.692 115.893 690.691 115.893 690.69C115.893 690.689 115.893 690.688 115.893 690.688C115.893 690.687 115.893 690.686 115.893 690.685C115.893 690.684 115.893 690.683 115.893 690.682C115.893 690.681 115.893 690.68 115.893 690.679C115.893 690.678 115.893 690.677 115.893 690.676C115.893 690.675 115.893 690.674 115.893 690.674C115.893 690.673 115.893 690.672 115.893 690.671C115.893 690.67 115.893 690.669 115.893 690.668C115.893 690.667 115.893 690.666 115.893 690.665C115.893 690.664 115.893 690.663 115.893 690.662C115.893 690.661 115.893 690.661 115.893 690.66C115.893 690.659 115.893 690.658 115.893 690.657C115.893 690.656 115.893 690.655 115.893 690.654C115.893 690.653 115.893 690.652 115.893 690.651C115.893 690.65 115.893 690.649 115.893 690.648C115.893 690.647 115.893 690.647 115.893 690.646C115.893 690.645 115.893 690.644 115.893 690.643C115.893 690.642 115.893 690.641 115.893 690.64C115.893 690.639 115.893 690.638 115.893 690.637C115.893 690.636 115.893 690.635 115.893 690.634C115.893 690.634 115.893 690.633 115.893 690.632C115.893 690.631 115.893 690.63 115.893 690.629C115.893 690.628 115.893 690.627 115.893 690.626C115.893 690.625 115.893 690.624 115.893 690.623C115.893 690.622 115.893 690.621 115.893 690.62C115.893 690.62 115.893 690.619 115.893 690.618C115.893 690.617 115.893 690.616 115.893 690.615C115.893 690.614 115.893 690.613 115.893 690.612C115.893 690.611 115.893 690.61 115.893 690.609C115.893 690.608 115.893 690.607 115.893 690.607C115.893 690.606 115.893 690.605 115.893 690.604C115.893 690.603 115.893 690.602 115.893 690.601C115.893 690.6 115.893 690.599 115.893 690.598C115.893 690.597 115.893 690.596 115.893 690.595C115.893 690.594 115.893 690.594 115.893 690.593C115.893 690.592 115.893 690.591 115.893 690.59C115.893 690.589 115.893 690.588 115.893 690.587C115.893 690.586 115.893 690.585 115.893 690.584C115.893 690.583 115.893 690.582 115.893 690.581C115.893 690.58 115.893 690.58 115.893 690.579C115.893 690.578 115.893 690.577 115.893 690.576C115.893 690.575 115.893 690.574 115.893 690.573C115.893 690.572 115.893 690.571 115.893 690.57C115.893 690.569 115.893 690.568 115.893 690.567C115.893 690.567 115.893 690.566 115.893 690.565C115.893 690.564 115.893 690.563 115.893 690.562C115.893 690.561 115.893 690.56 115.893 690.559C115.893 690.558 115.893 690.557 115.893 690.556C115.893 690.555 115.893 690.554 115.893 690.553C115.893 690.553 115.893 690.552 115.893 690.551C115.893 690.55 115.893 690.549 115.893 690.548C115.893 690.547 115.893 690.546 115.893 690.545C115.893 690.544 115.893 690.543 115.893 690.542C115.893 690.541 115.893 690.54 115.893 690.54C115.893 690.539 115.893 690.538 115.893 690.537C115.893 690.536 115.893 690.535 115.893 690.534C115.893 690.533 115.893 690.532 115.893 690.531C115.893 690.53 115.893 690.529 115.893 690.528C115.893 690.527 115.893 690.526 115.893 690.526C115.893 690.525 115.893 690.524 115.893 690.523C115.893 690.522 115.893 690.521 115.893 690.52C115.893 690.519 115.893 690.518 115.893 690.517C115.893 690.516 115.893 690.515 115.893 690.514C115.893 690.513 115.893 690.513 115.893 690.512C115.893 690.511 115.893 690.51 115.893 690.509C115.893 690.508 115.893 690.507 115.893 690.506C115.893 690.505 115.893 690.504 115.893 690.503C115.893 690.502 115.893 690.501 115.893 690.5C115.893 690.499 115.893 690.499 115.893 690.498C115.893 690.497 115.893 690.496 115.893 690.495C115.893 690.494 115.893 690.493 115.893 690.492C115.893 690.491 115.893 690.49 115.893 690.489C115.893 690.488 115.893 690.487 115.893 690.486C115.893 690.486 115.893 690.485 115.893 690.484C115.893 690.483 115.893 690.482 115.893 690.481C115.893 690.48 115.893 690.479 115.893 690.478C115.893 690.477 115.893 690.476 115.893 690.475C115.893 690.474 115.893 690.473 115.893 690.472C115.893 690.472 115.893 690.471 115.893 690.47C115.893 690.469 115.893 690.468 115.893 690.467C115.893 690.466 115.893 690.465 115.893 690.464C115.893 690.463 115.893 690.462 115.893 690.461C115.893 690.46 115.893 690.459 115.893 690.459C115.893 690.458 115.893 690.457 115.893 690.456C115.893 690.455 115.893 690.454 115.893 690.453C115.893 690.452 115.893 690.451 115.893 690.45C115.893 690.449 115.893 690.448 115.893 690.447C115.893 690.446 115.893 690.445 115.893 690.445C115.893 690.444 115.893 690.443 115.893 690.442C115.893 690.441 115.893 690.44 115.893 690.439C115.893 690.438 115.893 690.437 115.893 690.436C115.893 690.435 115.893 690.434 115.893 690.433C115.893 690.432 115.893 690.432 115.893 690.431C115.893 690.43 115.893 690.429 115.893 690.428C115.893 690.427 115.893 690.426 115.893 690.425C115.893 690.424 115.893 690.423 115.893 690.422C115.893 690.421 115.893 690.42 115.893 690.419C115.893 690.418 115.893 690.418 115.893 690.417C115.893 690.416 115.893 690.415 115.893 690.414C115.893 690.413 115.893 690.412 115.893 690.411C115.893 690.41 115.893 690.409 115.893 690.408C115.893 690.407 115.893 690.406 115.893 690.405C115.893 690.405 115.893 690.404 115.893 690.403C115.893 690.402 115.893 690.401 115.893 690.4C115.893 690.399 115.893 690.398 115.893 690.397C115.893 690.396 115.893 690.395 115.893 690.394C115.893 690.393 115.893 690.392 115.893 690.391C115.893 690.391 115.893 690.39 115.893 690.389C115.893 690.388 115.893 690.387 115.893 690.386C115.893 690.385 115.893 690.384 115.893 690.383C115.893 690.382 115.893 690.381 115.893 690.38C115.893 690.379 115.893 690.378 115.893 690.378C115.893 690.377 115.893 690.376 115.893 690.375C115.893 690.374 115.893 690.373 115.893 690.372C115.893 690.371 115.893 690.37 115.893 690.369C115.893 690.368 115.893 690.367 115.893 690.366C115.893 690.365 115.893 690.364 115.893 690.364C115.893 690.363 115.893 690.362 115.893 690.361C115.893 690.36 115.893 690.359 115.893 690.358C115.893 690.357 115.893 690.356 115.893 690.355C115.893 690.354 115.893 690.353 115.893 690.352C115.893 690.351 115.893 690.351 115.893 690.35C115.893 690.349 115.893 690.348 115.893 690.347C115.893 690.346 115.893 690.345 115.893 690.344C115.893 690.343 115.893 690.342 115.893 690.341C115.893 690.34 115.893 690.339 115.893 690.338C115.893 690.337 115.893 690.337 115.893 690.336C115.893 690.335 115.893 690.334 115.893 690.333C115.893 690.332 115.893 690.331 115.893 690.33C115.893 690.329 115.893 690.328 115.893 690.327C115.893 690.326 115.893 690.325 115.893 690.324C115.893 690.324 115.893 690.323 115.893 690.322C115.893 690.321 115.893 690.32 115.893 690.319C115.893 690.318 115.893 690.317 115.893 690.316C115.893 690.315 115.893 690.314 115.893 690.313C115.893 690.312 115.893 690.311 115.893 690.31C115.893 690.31 115.893 690.309 115.893 690.308C115.893 690.307 115.893 690.306 115.893 690.305C115.893 690.304 115.893 690.303 115.893 690.302C115.893 690.301 115.893 690.3 115.893 690.299C115.893 690.298 115.893 690.297 115.893 690.297C115.893 690.296 115.893 690.295 115.893 690.294C115.893 690.293 115.893 690.292 115.893 690.291C115.893 690.29 115.893 690.289 115.893 690.288C115.893 690.287 115.893 690.286 115.893 690.285C115.893 690.284 115.893 690.283 115.893 690.283C115.893 690.282 115.893 690.281 115.893 690.28C115.893 690.279 115.893 690.278 115.893 690.277C115.893 690.276 115.893 690.275 115.893 690.274C115.893 690.273 115.893 690.272 115.893 690.271C115.893 690.27 115.893 690.27 115.893 690.269C115.893 690.268 115.893 690.267 115.893 690.266C115.893 690.265 115.893 690.264 115.893 690.263C115.893 690.262 115.893 690.261 115.893 690.26C115.893 690.259 115.893 690.258 115.893 690.257C115.893 690.257 115.893 690.256 115.893 690.255C115.893 690.254 115.893 690.253 115.893 690.252C115.893 690.251 115.893 690.25 115.893 690.249C115.893 690.248 115.893 690.247 115.893 690.246C115.893 690.245 115.893 690.244 115.893 690.243C115.893 690.243 115.893 690.242 115.893 690.241C115.893 690.24 115.893 690.239 115.893 690.238C115.893 690.237 115.893 690.236 115.893 690.235C115.893 690.234 115.893 690.233 115.893 690.232C115.893 690.231 115.893 690.23 115.893 690.23C115.893 690.229 115.893 690.228 115.893 690.227C115.893 690.226 115.893 690.225 115.893 690.224C115.893 690.223 115.893 690.222 115.893 690.221C115.893 690.22 115.893 690.219 115.893 690.218C115.893 690.217 115.893 690.216 115.893 690.216C115.893 690.215 115.893 690.214 115.893 690.213C115.893 690.212 115.893 690.211 115.893 690.21C115.893 690.209 115.893 690.208 115.893 690.207C115.893 690.206 115.893 690.205 115.893 690.204C115.893 690.203 115.893 690.203 115.893 690.202C115.893 690.201 115.893 690.2 115.893 690.199C115.893 690.198 115.893 690.197 115.893 690.196C115.893 690.195 115.893 690.194 115.893 690.193C115.893 690.192 115.893 690.191 115.893 690.19C115.893 690.189 115.893 690.189 115.893 690.188C115.893 690.187 115.893 690.186 115.893 690.185C115.893 690.184 115.893 690.183 115.893 690.182C115.893 690.181 115.893 690.18 115.893 690.179C115.893 690.178 115.893 690.177 115.893 690.176C115.893 690.176 115.893 690.175 115.893 690.174C115.893 690.173 115.893 690.172 115.893 690.171C115.893 690.17 115.893 690.169 115.893 690.168C115.893 690.167 115.893 690.166 115.893 690.165C115.893 690.164 115.893 690.163 115.893 690.162C115.893 690.162 115.893 690.161 115.893 690.16C115.893 690.159 115.893 690.158 115.893 690.157C115.893 690.156 115.893 690.155 115.893 690.154C115.893 690.153 115.893 690.152 115.893 690.151C115.893 690.15 115.893 690.149 115.893 690.149C115.893 690.148 115.893 690.147 115.893 690.146C115.893 690.145 115.893 690.144 115.893 690.143C115.893 690.142 115.893 690.141 115.893 690.14C115.893 690.139 115.893 690.138 115.893 690.137C115.893 690.136 115.893 690.135 115.893 690.135C115.893 690.134 115.893 690.133 115.893 690.132C115.893 690.131 115.893 690.13 115.893 690.129C115.893 690.128 115.893 690.127 115.893 690.126C115.893 690.125 115.893 690.124 115.893 690.123C115.893 690.122 115.893 690.122 115.893 690.121C115.893 690.12 115.893 690.119 115.893 690.118C115.893 690.117 115.893 690.116 115.893 690.115C115.893 690.114 115.893 690.113 115.893 690.112C115.893 690.111 115.893 690.11 115.893 690.109C115.893 690.108 115.893 690.108 115.893 690.107C115.893 690.106 115.893 690.105 115.893 690.104C115.893 690.103 115.893 690.102 115.893 690.101C115.893 690.1 115.893 690.099 115.893 690.098C115.893 690.097 115.893 690.096 115.893 690.095L114.893 690.095L113.893 690.095C113.893 690.096 113.893 690.097 113.893 690.098C113.893 690.099 113.893 690.1 113.893 690.101C113.893 690.102 113.893 690.103 113.893 690.104C113.893 690.105 113.893 690.106 113.893 690.107C113.893 690.108 113.893 690.108 113.893 690.109C113.893 690.11 113.893 690.111 113.893 690.112C113.893 690.113 113.893 690.114 113.893 690.115C113.893 690.116 113.893 690.117 113.893 690.118C113.893 690.119 113.893 690.12 113.893 690.121C113.893 690.122 113.893 690.122 113.893 690.123C113.893 690.124 113.893 690.125 113.893 690.126C113.893 690.127 113.893 690.128 113.893 690.129C113.893 690.13 113.893 690.131 113.893 690.132C113.893 690.133 113.893 690.134 113.893 690.135C113.893 690.135 113.893 690.136 113.893 690.137C113.893 690.138 113.893 690.139 113.893 690.14C113.893 690.141 113.893 690.142 113.893 690.143C113.893 690.144 113.893 690.145 113.893 690.146C113.893 690.147 113.893 690.148 113.893 690.149C113.893 690.149 113.893 690.15 113.893 690.151C113.893 690.152 113.893 690.153 113.893 690.154C113.893 690.155 113.893 690.156 113.893 690.157C113.893 690.158 113.893 690.159 113.893 690.16C113.893 690.161 113.893 690.162 113.893 690.162C113.893 690.163 113.893 690.164 113.893 690.165C113.893 690.166 113.893 690.167 113.893 690.168C113.893 690.169 113.893 690.17 113.893 690.171C113.893 690.172 113.893 690.173 113.893 690.174C113.893 690.175 113.893 690.176 113.893 690.176C113.893 690.177 113.893 690.178 113.893 690.179C113.893 690.18 113.893 690.181 113.893 690.182C113.893 690.183 113.893 690.184 113.893 690.185C113.893 690.186 113.893 690.187 113.893 690.188C113.893 690.189 113.893 690.189 113.893 690.19C113.893 690.191 113.893 690.192 113.893 690.193C113.893 690.194 113.893 690.195 113.893 690.196C113.893 690.197 113.893 690.198 113.893 690.199C113.893 690.2 113.893 690.201 113.893 690.202C113.893 690.203 113.893 690.203 113.893 690.204C113.893 690.205 113.893 690.206 113.893 690.207C113.893 690.208 113.893 690.209 113.893 690.21C113.893 690.211 113.893 690.212 113.893 690.213C113.893 690.214 113.893 690.215 113.893 690.216C113.893 690.216 113.893 690.217 113.893 690.218C113.893 690.219 113.893 690.22 113.893 690.221C113.893 690.222 113.893 690.223 113.893 690.224C113.893 690.225 113.893 690.226 113.893 690.227C113.893 690.228 113.893 690.229 113.893 690.23C113.893 690.23 113.893 690.231 113.893 690.232C113.893 690.233 113.893 690.234 113.893 690.235C113.893 690.236 113.893 690.237 113.893 690.238C113.893 690.239 113.893 690.24 113.893 690.241C113.893 690.242 113.893 690.243 113.893 690.243C113.893 690.244 113.893 690.245 113.893 690.246C113.893 690.247 113.893 690.248 113.893 690.249C113.893 690.25 113.893 690.251 113.893 690.252C113.893 690.253 113.893 690.254 113.893 690.255C113.893 690.256 113.893 690.257 113.893 690.257C113.893 690.258 113.893 690.259 113.893 690.26C113.893 690.261 113.893 690.262 113.893 690.263C113.893 690.264 113.893 690.265 113.893 690.266C113.893 690.267 113.893 690.268 113.893 690.269C113.893 690.27 113.893 690.27 113.893 690.271C113.893 690.272 113.893 690.273 113.893 690.274C113.893 690.275 113.893 690.276 113.893 690.277C113.893 690.278 113.893 690.279 113.893 690.28C113.893 690.281 113.893 690.282 113.893 690.283C113.893 690.283 113.893 690.284 113.893 690.285C113.893 690.286 113.893 690.287 113.893 690.288C113.893 690.289 113.893 690.29 113.893 690.291C113.893 690.292 113.893 690.293 113.893 690.294C113.893 690.295 113.893 690.296 113.893 690.297C113.893 690.297 113.893 690.298 113.893 690.299C113.893 690.3 113.893 690.301 113.893 690.302C113.893 690.303 113.893 690.304 113.893 690.305C113.893 690.306 113.893 690.307 113.893 690.308C113.893 690.309 113.893 690.31 113.893 690.31C113.893 690.311 113.893 690.312 113.893 690.313C113.893 690.314 113.893 690.315 113.893 690.316C113.893 690.317 113.893 690.318 113.893 690.319C113.893 690.32 113.893 690.321 113.893 690.322C113.893 690.323 113.893 690.324 113.893 690.324C113.893 690.325 113.893 690.326 113.893 690.327C113.893 690.328 113.893 690.329 113.893 690.33C113.893 690.331 113.893 690.332 113.893 690.333C113.893 690.334 113.893 690.335 113.893 690.336C113.893 690.337 113.893 690.337 113.893 690.338C113.893 690.339 113.893 690.34 113.893 690.341C113.893 690.342 113.893 690.343 113.893 690.344C113.893 690.345 113.893 690.346 113.893 690.347C113.893 690.348 113.893 690.349 113.893 690.35C113.893 690.351 113.893 690.351 113.893 690.352C113.893 690.353 113.893 690.354 113.893 690.355C113.893 690.356 113.893 690.357 113.893 690.358C113.893 690.359 113.893 690.36 113.893 690.361C113.893 690.362 113.893 690.363 113.893 690.364C113.893 690.364 113.893 690.365 113.893 690.366C113.893 690.367 113.893 690.368 113.893 690.369C113.893 690.37 113.893 690.371 113.893 690.372C113.893 690.373 113.893 690.374 113.893 690.375C113.893 690.376 113.893 690.377 113.893 690.378C113.893 690.378 113.893 690.379 113.893 690.38C113.893 690.381 113.893 690.382 113.893 690.383C113.893 690.384 113.893 690.385 113.893 690.386C113.893 690.387 113.893 690.388 113.893 690.389C113.893 690.39 113.893 690.391 113.893 690.391C113.893 690.392 113.893 690.393 113.893 690.394C113.893 690.395 113.893 690.396 113.893 690.397C113.893 690.398 113.893 690.399 113.893 690.4C113.893 690.401 113.893 690.402 113.893 690.403C113.893 690.404 113.893 690.405 113.893 690.405C113.893 690.406 113.893 690.407 113.893 690.408C113.893 690.409 113.893 690.41 113.893 690.411C113.893 690.412 113.893 690.413 113.893 690.414C113.893 690.415 113.893 690.416 113.893 690.417C113.893 690.418 113.893 690.418 113.893 690.419C113.893 690.42 113.893 690.421 113.893 690.422C113.893 690.423 113.893 690.424 113.893 690.425C113.893 690.426 113.893 690.427 113.893 690.428C113.893 690.429 113.893 690.43 113.893 690.431C113.893 690.432 113.893 690.432 113.893 690.433C113.893 690.434 113.893 690.435 113.893 690.436C113.893 690.437 113.893 690.438 113.893 690.439C113.893 690.44 113.893 690.441 113.893 690.442C113.893 690.443 113.893 690.444 113.893 690.445C113.893 690.445 113.893 690.446 113.893 690.447C113.893 690.448 113.893 690.449 113.893 690.45C113.893 690.451 113.893 690.452 113.893 690.453C113.893 690.454 113.893 690.455 113.893 690.456C113.893 690.457 113.893 690.458 113.893 690.459C113.893 690.459 113.893 690.46 113.893 690.461C113.893 690.462 113.893 690.463 113.893 690.464C113.893 690.465 113.893 690.466 113.893 690.467C113.893 690.468 113.893 690.469 113.893 690.47C113.893 690.471 113.893 690.472 113.893 690.472C113.893 690.473 113.893 690.474 113.893 690.475C113.893 690.476 113.893 690.477 113.893 690.478C113.893 690.479 113.893 690.48 113.893 690.481C113.893 690.482 113.893 690.483 113.893 690.484C113.893 690.485 113.893 690.486 113.893 690.486C113.893 690.487 113.893 690.488 113.893 690.489C113.893 690.49 113.893 690.491 113.893 690.492C113.893 690.493 113.893 690.494 113.893 690.495C113.893 690.496 113.893 690.497 113.893 690.498C113.893 690.499 113.893 690.499 113.893 690.5C113.893 690.501 113.893 690.502 113.893 690.503C113.893 690.504 113.893 690.505 113.893 690.506C113.893 690.507 113.893 690.508 113.893 690.509C113.893 690.51 113.893 690.511 113.893 690.512C113.893 690.513 113.893 690.513 113.893 690.514C113.893 690.515 113.893 690.516 113.893 690.517C113.893 690.518 113.893 690.519 113.893 690.52C113.893 690.521 113.893 690.522 113.893 690.523C113.893 690.524 113.893 690.525 113.893 690.526C113.893 690.526 113.893 690.527 113.893 690.528C113.893 690.529 113.893 690.53 113.893 690.531C113.893 690.532 113.893 690.533 113.893 690.534C113.893 690.535 113.893 690.536 113.893 690.537C113.893 690.538 113.893 690.539 113.893 690.54C113.893 690.54 113.893 690.541 113.893 690.542C113.893 690.543 113.893 690.544 113.893 690.545C113.893 690.546 113.893 690.547 113.893 690.548C113.893 690.549 113.893 690.55 113.893 690.551C113.893 690.552 113.893 690.553 113.893 690.553C113.893 690.554 113.893 690.555 113.893 690.556C113.893 690.557 113.893 690.558 113.893 690.559C113.893 690.56 113.893 690.561 113.893 690.562C113.893 690.563 113.893 690.564 113.893 690.565C113.893 690.566 113.893 690.567 113.893 690.567C113.893 690.568 113.893 690.569 113.893 690.57C113.893 690.571 113.893 690.572 113.893 690.573C113.893 690.574 113.893 690.575 113.893 690.576C113.893 690.577 113.893 690.578 113.893 690.579C113.893 690.58 113.893 690.58 113.893 690.581C113.893 690.582 113.893 690.583 113.893 690.584C113.893 690.585 113.893 690.586 113.893 690.587C113.893 690.588 113.893 690.589 113.893 690.59C113.893 690.591 113.893 690.592 113.893 690.593C113.893 690.594 113.893 690.594 113.893 690.595C113.893 690.596 113.893 690.597 113.893 690.598C113.893 690.599 113.893 690.6 113.893 690.601C113.893 690.602 113.893 690.603 113.893 690.604C113.893 690.605 113.893 690.606 113.893 690.607C113.893 690.607 113.893 690.608 113.893 690.609C113.893 690.61 113.893 690.611 113.893 690.612C113.893 690.613 113.893 690.614 113.893 690.615C113.893 690.616 113.893 690.617 113.893 690.618C113.893 690.619 113.893 690.62 113.893 690.62C113.893 690.621 113.893 690.622 113.893 690.623C113.893 690.624 113.893 690.625 113.893 690.626C113.893 690.627 113.893 690.628 113.893 690.629C113.893 690.63 113.893 690.631 113.893 690.632C113.893 690.633 113.893 690.634 113.893 690.634C113.893 690.635 113.893 690.636 113.893 690.637C113.893 690.638 113.893 690.639 113.893 690.64C113.893 690.641 113.893 690.642 113.893 690.643C113.893 690.644 113.893 690.645 113.893 690.646C113.893 690.647 113.893 690.647 113.893 690.648C113.893 690.649 113.893 690.65 113.893 690.651C113.893 690.652 113.893 690.653 113.893 690.654C113.893 690.655 113.893 690.656 113.893 690.657C113.893 690.658 113.893 690.659 113.893 690.66C113.893 690.661 113.893 690.661 113.893 690.662C113.893 690.663 113.893 690.664 113.893 690.665C113.893 690.666 113.893 690.667 113.893 690.668C113.893 690.669 113.893 690.67 113.893 690.671C113.893 690.672 113.893 690.673 113.893 690.674C113.893 690.674 113.893 690.675 113.893 690.676C113.893 690.677 113.893 690.678 113.893 690.679C113.893 690.68 113.893 690.681 113.893 690.682C113.893 690.683 113.893 690.684 113.893 690.685C113.893 690.686 113.893 690.687 113.893 690.688C113.893 690.688 113.893 690.689 113.893 690.69C113.893 690.691 113.893 690.692 113.893 690.693C113.893 690.694 113.893 690.695 113.893 690.696C113.893 690.697 113.893 690.698 113.893 690.699C113.893 690.7 113.893 690.701 113.893 690.701C113.893 690.702 113.893 690.703 113.893 690.704C113.893 690.705 113.893 690.706 113.893 690.707C113.893 690.708 113.893 690.709 113.893 690.71C113.893 690.711 113.893 690.712 113.893 690.713C113.893 690.714 113.893 690.715 113.893 690.715C113.893 690.716 113.893 690.717 113.893 690.718C113.893 690.719 113.893 690.72 113.893 690.721C113.893 690.722 113.893 690.723 113.893 690.724C113.893 690.725 113.893 690.726 113.893 690.727C113.893 690.728 113.893 690.728 113.893 690.729C113.893 690.73 113.893 690.731 113.893 690.732C113.893 690.733 113.893 690.734 113.893 690.735C113.893 690.736 113.893 690.737 113.893 690.738C113.893 690.739 113.893 690.74 113.893 690.741C113.893 690.742 113.893 690.742 113.893 690.743C113.893 690.744 113.893 690.745 113.893 690.746C113.893 690.747 113.893 690.748 113.893 690.749C113.893 690.75 113.893 690.751 113.893 690.752C113.893 690.753 113.893 690.754 113.893 690.755C113.893 690.755 113.893 690.756 113.893 690.757C113.893 690.758 113.893 690.759 113.893 690.76C113.893 690.761 113.893 690.762 113.893 690.763C113.893 690.764 113.893 690.765 113.893 690.766C113.893 690.767 113.893 690.768 113.893 690.769C113.893 690.769 113.893 690.77 113.893 690.771C113.893 690.772 113.893 690.773 113.893 690.774C113.893 690.775 113.893 690.776 113.893 690.777C113.893 690.778 113.893 690.779 113.893 690.78C113.893 690.781 113.893 690.782 113.893 690.782C113.893 690.783 113.893 690.784 113.893 690.785C113.893 690.786 113.893 690.787 113.893 690.788C113.893 690.789 113.893 690.79 113.893 690.791C113.893 690.792 113.893 690.793 113.893 690.794C113.893 690.795 113.893 690.796 113.893 690.796C113.893 690.797 113.893 690.798 113.893 690.799C113.893 690.8 113.893 690.801 113.893 690.802C113.893 690.803 113.893 690.804 113.893 690.805C113.893 690.806 113.893 690.807 113.893 690.808C113.893 690.809 113.893 690.809 113.893 690.81C113.893 690.811 113.893 690.812 113.893 690.813C113.893 690.814 113.893 690.815 113.893 690.816C113.893 690.817 113.893 690.818 113.893 690.819C113.893 690.82 113.893 690.821 113.893 690.822C113.893 690.823 113.893 690.823 113.893 690.824C113.893 690.825 113.893 690.826 113.893 690.827C113.893 690.828 113.893 690.829 113.893 690.83C113.893 690.831 113.893 690.832 113.893 690.833C113.893 690.834 113.893 690.835 113.893 690.836C113.893 690.836 113.893 690.837 113.893 690.838C113.893 690.839 113.893 690.84 113.893 690.841C113.893 690.842 113.893 690.843 113.893 690.844C113.893 690.845 113.893 690.846 113.893 690.847C113.893 690.848 113.893 690.849 113.893 690.85C113.893 690.85 113.893 690.851 113.893 690.852C113.893 690.853 113.893 690.854 113.893 690.855C113.893 690.856 113.893 690.857 113.893 690.858C113.893 690.859 113.893 690.86 113.893 690.861C113.893 690.862 113.893 690.863 113.893 690.863C113.893 690.864 113.893 690.865 113.893 690.866C113.893 690.867 113.893 690.868 113.893 690.869C113.893 690.87 113.893 690.871 113.893 690.872C113.893 690.873 113.893 690.874 113.893 690.875C113.893 690.876 113.893 690.877 113.893 690.877C113.893 690.878 113.893 690.879 113.893 690.88C113.893 690.881 113.893 690.882 113.893 690.883C113.893 690.884 113.893 690.885 113.893 690.886C113.893 690.887 113.893 690.888 113.893 690.889C113.893 690.89 113.893 690.89 113.893 690.891C113.893 690.892 113.893 690.893 113.893 690.894C113.893 690.895 113.893 690.896 113.893 690.897C113.893 690.898 113.893 690.899 113.893 690.9C113.893 690.901 113.893 690.902 113.893 690.903C113.893 690.904 113.893 690.904 113.893 690.905C113.893 690.906 113.893 690.907 113.893 690.908C113.893 690.909 113.893 690.91 113.893 690.911C113.893 690.912 113.893 690.913 113.893 690.914C113.893 690.915 113.893 690.916 113.893 690.917C113.893 690.917 113.893 690.918 113.893 690.919C113.893 690.92 113.893 690.921 113.893 690.922C113.893 690.923 113.893 690.924 113.893 690.925C113.893 690.926 113.893 690.927 113.893 690.928C113.893 690.929 113.893 690.93 113.893 690.931C113.893 690.931 113.893 690.932 113.893 690.933C113.893 690.934 113.893 690.935 113.893 690.936C113.893 690.937 113.893 690.938 113.893 690.939C113.893 690.94 113.893 690.941 113.893 690.942C113.893 690.943 113.893 690.944 113.893 690.944C113.893 690.945 113.893 690.946 113.893 690.947C113.893 690.948 113.893 690.949 113.893 690.95C113.893 690.951 113.893 690.952 113.893 690.953C113.893 690.954 113.893 690.955 113.893 690.956C113.893 690.957 113.893 690.957 113.893 690.958C113.893 690.959 113.893 690.96 113.893 690.961C113.893 690.962 113.893 690.963 113.893 690.964C113.893 690.965 113.893 690.966 113.893 690.967C113.893 690.968 113.893 690.969 113.893 690.97C113.893 690.971 113.893 690.971 113.893 690.972C113.893 690.973 113.893 690.974 113.893 690.975C113.893 690.976 113.893 690.977 113.893 690.978C113.893 690.979 113.893 690.98 113.893 690.981C113.893 690.982 113.893 690.983 113.893 690.984C113.893 690.984 113.893 690.985 113.893 690.986C113.893 690.987 113.893 690.988 113.893 690.989C113.893 690.99 113.893 690.991 113.893 690.992C113.893 690.993 113.893 690.994 113.893 690.995C113.893 690.996 113.893 690.997 113.893 690.998C113.893 690.998 113.893 690.999 113.893 691C113.893 691.001 113.893 691.002 113.893 691.003C113.893 691.004 113.893 691.005 113.893 691.006C113.893 691.007 113.893 691.008 113.893 691.009C113.893 691.01 113.893 691.011 113.893 691.011C113.893 691.012 113.893 691.013 113.893 691.014C113.893 691.015 113.893 691.016 113.893 691.017C113.893 691.018 113.893 691.019 113.893 691.02C113.893 691.021 113.893 691.022 113.893 691.023C113.893 691.024 113.893 691.025 113.893 691.025C113.893 691.026 113.893 691.027 113.893 691.028C113.893 691.029 113.893 691.03 113.893 691.031C113.893 691.032 113.893 691.033 113.893 691.034C113.893 691.035 113.893 691.036 113.893 691.037C113.893 691.038 113.893 691.038 113.893 691.039C113.893 691.04 113.893 691.041 113.893 691.042C113.893 691.043 113.893 691.044 113.893 691.045C113.893 691.046 113.893 691.047 113.893 691.048C113.893 691.049 113.893 691.05 113.893 691.051C113.893 691.052 113.893 691.052 113.893 691.053C113.893 691.054 113.893 691.055 113.893 691.056C113.893 691.057 113.893 691.058 113.893 691.059C113.893 691.06 113.893 691.061 113.893 691.062C113.893 691.063 113.893 691.064 113.893 691.065C113.893 691.065 113.893 691.066 113.893 691.067C113.893 691.068 113.893 691.069 113.893 691.07C113.893 691.071 113.893 691.072 113.893 691.073C113.893 691.074 113.893 691.075 113.893 691.076C113.893 691.077 113.893 691.078 113.893 691.079C113.893 691.079 113.893 691.08 113.893 691.081C113.893 691.082 113.893 691.083 113.893 691.084C113.893 691.085 113.893 691.086 113.893 691.087C113.893 691.088 113.893 691.089 113.893 691.09C113.893 691.091 113.893 691.092 113.893 691.092C113.893 691.093 113.893 691.094 113.893 691.095C113.893 691.096 113.893 691.097 113.893 691.098C113.893 691.099 113.893 691.1 113.893 691.101C113.893 691.102 113.893 691.103 113.893 691.104C113.893 691.105 113.893 691.106 113.893 691.106C113.893 691.107 113.893 691.108 113.893 691.109C113.893 691.11 113.893 691.111 113.893 691.112C113.893 691.113 113.893 691.114 113.893 691.115C113.893 691.116 113.893 691.117 113.893 691.118C113.893 691.119 113.893 691.119 113.893 691.12C113.893 691.121 113.893 691.122 113.893 691.123C113.893 691.124 113.893 691.125 113.893 691.126C113.893 691.127 113.893 691.128 113.893 691.129C113.893 691.13 113.893 691.131 113.893 691.132C113.893 691.133 113.893 691.133 113.893 691.134C113.893 691.135 113.893 691.136 113.893 691.137C113.893 691.138 113.893 691.139 113.893 691.14C113.893 691.141 113.893 691.142 113.893 691.143C113.893 691.144 113.893 691.145 113.893 691.146C113.893 691.146 113.893 691.147 113.893 691.148C113.893 691.149 113.893 691.15 113.893 691.151C113.893 691.152 113.893 691.153 113.893 691.154C113.893 691.155 113.893 691.156 113.893 691.157C113.893 691.158 113.893 691.159 113.893 691.16C113.893 691.16 113.893 691.161 113.893 691.162C113.893 691.163 113.893 691.164 113.893 691.165C113.893 691.166 113.893 691.167 113.893 691.168C113.893 691.169 113.893 691.17 113.893 691.171C113.893 691.172 113.893 691.173 113.893 691.173C113.893 691.174 113.893 691.175 113.893 691.176C113.893 691.177 113.893 691.178 113.893 691.179C113.893 691.18 113.893 691.181 113.893 691.182C113.893 691.183 113.893 691.184 113.893 691.185C113.893 691.186 113.893 691.187 113.893 691.187C113.893 691.188 113.893 691.189 113.893 691.19C113.893 691.191 113.893 691.192 113.893 691.193C113.893 691.194 113.893 691.195 113.893 691.196C113.893 691.197 113.893 691.198 113.893 691.199C113.893 691.2 113.893 691.2 113.893 691.201C113.893 691.202 113.893 691.203 113.893 691.204C113.893 691.205 113.893 691.206 113.893 691.207C113.893 691.208 113.893 691.209 113.893 691.21C113.893 691.211 113.893 691.212 113.893 691.213C113.893 691.214 113.893 691.214 113.893 691.215C113.893 691.216 113.893 691.217 113.893 691.218C113.893 691.219 113.893 691.22 113.893 691.221C113.893 691.222 113.893 691.223 113.893 691.224C113.893 691.225 113.893 691.226 113.893 691.227C113.893 691.227 113.893 691.228 113.893 691.229C113.893 691.23 113.893 691.231 113.893 691.232C113.893 691.233 113.893 691.234 113.893 691.235C113.893 691.236 113.893 691.237 113.893 691.238C113.893 691.239 113.893 691.24 113.893 691.241C113.893 691.241 113.893 691.242 113.893 691.243C113.893 691.244 113.893 691.245 113.893 691.246C113.893 691.247 113.893 691.248 113.893 691.249C113.893 691.25 113.893 691.251 113.893 691.252C113.893 691.253 113.893 691.254 113.893 691.254C113.893 691.255 113.893 691.256 113.893 691.257C113.893 691.258 113.893 691.259 113.893 691.26C113.893 691.261 113.893 691.262 113.893 691.263C113.893 691.264 113.893 691.265 113.893 691.266C113.893 691.267 113.893 691.268 113.893 691.268C113.893 691.269 113.893 691.27 113.893 691.271C113.893 691.272 113.893 691.273 113.893 691.274C113.893 691.275 113.893 691.276 113.893 691.277C113.893 691.278 113.893 691.279 113.893 691.28C113.893 691.281 113.893 691.281 113.893 691.282C113.893 691.283 113.893 691.284 113.893 691.285C113.893 691.286 113.893 691.287 113.893 691.288C113.893 691.289 113.893 691.29 113.893 691.291C113.893 691.292 113.893 691.293 113.893 691.294C113.893 691.294 113.893 691.295 113.893 691.296C113.893 691.297 113.893 691.298 113.893 691.299C113.893 691.3 113.893 691.301 113.893 691.302C113.893 691.303 113.893 691.304 113.893 691.305C113.893 691.306 113.893 691.307 113.893 691.308C113.893 691.308 113.893 691.309 113.893 691.31C113.893 691.311 113.893 691.312 113.893 691.313C113.893 691.314 113.893 691.315 113.893 691.316C113.893 691.317 113.893 691.318 113.893 691.319C113.893 691.32 113.893 691.321 113.893 691.321C113.893 691.322 113.893 691.323 113.893 691.324C113.893 691.325 113.893 691.326 113.893 691.327C113.893 691.328 113.893 691.329 113.893 691.33C113.893 691.331 113.893 691.332 113.893 691.333C113.893 691.334 113.893 691.335 113.893 691.335C113.893 691.336 113.893 691.337 113.893 691.338C113.893 691.339 113.893 691.34 113.893 691.341C113.893 691.342 113.893 691.343 113.893 691.344C113.893 691.345 113.893 691.346 113.893 691.347C113.893 691.348 113.893 691.348 113.893 691.349C113.893 691.35 113.893 691.351 113.893 691.352C113.893 691.353 113.893 691.354 113.893 691.355C113.893 691.356 113.893 691.357 113.893 691.358C113.893 691.359 113.893 691.36 113.893 691.361C113.893 691.362 113.893 691.362 113.893 691.363C113.893 691.364 113.893 691.365 113.893 691.366C113.893 691.367 113.893 691.368 113.893 691.369C113.893 691.37 113.893 691.371 113.893 691.372C113.893 691.373 113.893 691.374 113.893 691.375C113.893 691.375 113.893 691.376 113.893 691.377C113.893 691.378 113.893 691.379 113.893 691.38C113.893 691.381 113.893 691.382 113.893 691.383C113.893 691.384 113.893 691.385 113.893 691.386C113.893 691.387 113.893 691.388 113.893 691.389C113.893 691.389 113.893 691.39 113.893 691.391C113.893 691.392 113.893 691.393 113.893 691.394C113.893 691.395 113.893 691.396 113.893 691.397C113.893 691.398 113.893 691.399 113.893 691.4C113.893 691.401 113.893 691.402 113.893 691.402C113.893 691.403 113.893 691.404 113.893 691.405C113.893 691.406 113.893 691.407 113.893 691.408C113.893 691.409 113.893 691.41 113.893 691.411C113.893 691.412 113.893 691.413 113.893 691.414C113.893 691.415 113.893 691.416 113.893 691.416C113.893 691.417 113.893 691.418 113.893 691.419C113.893 691.42 113.893 691.421 113.893 691.422C113.893 691.423 113.893 691.424 113.893 691.425C113.893 691.426 113.893 691.427 113.893 691.428C113.893 691.429 113.893 691.429 113.893 691.43C113.893 691.431 113.893 691.432 113.893 691.433C113.893 691.434 113.893 691.435 113.893 691.436C113.893 691.437 113.893 691.438 113.893 691.439C113.893 691.44 113.893 691.441 113.893 691.442C113.893 691.443 113.893 691.443 113.893 691.444C113.893 691.445 113.893 691.446 113.893 691.447C113.893 691.448 113.893 691.449 113.893 691.45C113.893 691.451 113.893 691.452 113.893 691.453C113.893 691.454 113.893 691.455 113.893 691.456C113.893 691.456 113.893 691.457 113.893 691.458C113.893 691.459 113.893 691.46 113.893 691.461C113.893 691.462 113.893 691.463 113.893 691.464C113.893 691.465 113.893 691.466 113.893 691.467C113.893 691.468 113.893 691.469 113.893 691.47C113.893 691.47 113.893 691.471 113.893 691.472C113.893 691.473 113.893 691.474 113.893 691.475C113.893 691.476 113.893 691.477 113.893 691.478C113.893 691.479 113.893 691.48 113.893 691.481C113.893 691.482 113.893 691.483 113.893 691.483C113.893 691.484 113.893 691.485 113.893 691.486C113.893 691.487 113.893 691.488 113.893 691.489C113.893 691.49 113.893 691.491 113.893 691.492C113.893 691.493 113.893 691.494 113.893 691.495C113.893 691.496 113.893 691.497 113.893 691.497C113.893 691.498 113.893 691.499 113.893 691.5C113.893 691.501 113.893 691.502 113.893 691.503C113.893 691.504 113.893 691.505 113.893 691.506C113.893 691.507 113.893 691.508 113.893 691.509C113.893 691.51 113.893 691.51 113.893 691.511C113.893 691.512 113.893 691.513 113.893 691.514C113.893 691.515 113.893 691.516 113.893 691.517C113.893 691.518 113.893 691.519 113.893 691.52C113.893 691.521 113.893 691.522 113.893 691.523C113.893 691.524 113.893 691.524 113.893 691.525L114.893 691.525ZM114.893 690.095L115.893 690.095L115.893 672.558L114.893 672.558L113.893 672.558L113.893 690.095L114.893 690.095ZM114.893 672.558L114.893 673.558L120.907 673.558L120.907 672.558L120.907 671.558L114.893 671.558L114.893 672.558ZM120.907 672.558L119.907 672.558L119.907 703.175L120.907 703.175L121.907 703.175L121.907 672.558L120.907 672.558ZM120.907 703.175L120.907 702.175L113.757 702.175L113.757 703.175L113.757 704.175L120.907 704.175L120.907 703.175ZM113.757 703.175L114.644 702.713L105.413 684.986L104.526 685.448L103.639 685.91L112.87 703.637L113.757 703.175ZM104.526 685.448L105.42 685.001C105.226 684.612 105.051 684.21 104.894 683.793L103.958 684.144L103.022 684.496C103.202 684.976 103.405 685.443 103.631 685.895L104.526 685.448ZM103.958 684.144L104.894 683.793C104.736 683.37 104.597 682.949 104.479 682.528L103.516 682.799L102.554 683.069C102.688 683.546 102.844 684.021 103.022 684.496L103.958 684.144ZM103.516 682.799L103.516 681.799L103.369 681.799L103.369 682.799L103.369 683.799L103.516 683.799L103.516 682.799ZM103.369 682.799L102.371 682.857C102.398 683.315 102.411 683.765 102.411 684.208L103.411 684.208L104.411 684.208C104.411 683.725 104.397 683.235 104.368 682.74L103.369 682.799ZM103.411 684.208L102.412 684.239C102.425 684.676 102.432 685.135 102.432 685.616L103.432 685.616L104.432 685.616C104.432 685.116 104.425 684.636 104.411 684.176L103.411 684.208ZM103.432 685.616L102.432 685.616L102.432 703.175L103.432 703.175L104.432 703.175L104.432 685.616L103.432 685.616ZM103.432 703.175L103.432 702.175L97.4393 702.175L97.4393 703.175L97.4393 704.175L103.432 704.175L103.432 703.175ZM125.617 672.558L125.617 671.558L124.617 671.558L124.617 672.558L125.617 672.558ZM132.62 672.558L133.62 672.558L133.62 671.558L132.62 671.558L132.62 672.558ZM133.839 697.329L133.098 698.001L133.104 698.006L133.839 697.329ZM140.547 697.329L139.812 696.651L139.812 696.652L140.547 697.329ZM141.788 672.558L141.788 671.558L140.788 671.558L140.788 672.558L141.788 672.558ZM148.727 672.558L149.727 672.558L149.727 671.558L148.727 671.558L148.727 672.558ZM145.573 700.841L144.904 700.098L144.902 700.1L145.573 700.841ZM125.617 691.988L126.617 691.988L126.617 672.558L125.617 672.558L124.617 672.558L124.617 691.988L125.617 691.988ZM125.617 672.558L125.617 673.558L132.62 673.558L132.62 672.558L132.62 671.558L125.617 671.558L125.617 672.558ZM132.62 672.558L131.62 672.558L131.62 692.724L132.62 692.724L133.62 692.724L133.62 672.558L132.62 672.558ZM132.62 692.724L131.62 692.724C131.62 694.967 132.029 696.82 133.098 698.001L133.839 697.329L134.58 696.658C134.024 696.043 133.62 694.827 133.62 692.724L132.62 692.724ZM133.839 697.329L133.104 698.006C134.144 699.137 135.563 699.654 137.225 699.654L137.225 698.654L137.225 697.654C135.999 697.654 135.161 697.288 134.575 696.652L133.839 697.329ZM137.225 698.654L137.225 699.654C138.855 699.654 140.248 699.13 141.283 698.006L140.547 697.329L139.812 696.652C139.22 697.294 138.398 697.654 137.225 697.654L137.225 698.654ZM140.547 697.329L141.283 698.007C142.371 696.826 142.788 694.97 142.788 692.724L141.788 692.724L140.788 692.724C140.788 694.824 140.378 696.038 139.812 696.651L140.547 697.329ZM141.788 692.724L142.788 692.724L142.788 672.558L141.788 672.558L140.788 672.558L140.788 692.724L141.788 692.724ZM141.788 672.558L141.788 673.558L148.727 673.558L148.727 672.558L148.727 671.558L141.788 671.558L141.788 672.558ZM148.727 672.558L147.727 672.558L147.727 691.988L148.727 691.988L149.727 691.988L149.727 672.558L148.727 672.558ZM148.727 691.988L147.727 691.988C147.727 695.835 146.72 698.463 144.904 700.098L145.573 700.841L146.242 701.584C148.632 699.434 149.727 696.159 149.727 691.988L148.727 691.988ZM145.573 700.841L144.902 700.1C143.036 701.79 140.52 702.68 137.246 702.68L137.246 703.68L137.246 704.68C140.897 704.68 143.932 703.677 146.244 701.582L145.573 700.841ZM137.246 703.68L137.246 702.68C133.912 702.68 131.351 701.787 129.459 700.095L128.792 700.841L128.126 701.586C130.467 703.68 133.542 704.68 137.246 704.68L137.246 703.68ZM128.792 700.841L129.459 700.095C127.63 698.46 126.617 695.834 126.617 691.988L125.617 691.988L124.617 691.988C124.617 696.161 125.721 699.436 128.126 701.586L128.792 700.841ZM151.335 678.046L150.335 678.046L150.335 679.046L151.335 679.046L151.335 678.046ZM151.335 672.558L151.335 671.558L150.335 671.558L150.335 672.558L151.335 672.558ZM175.37 672.558L176.37 672.558L176.37 671.558L175.37 671.558L175.37 672.558ZM175.37 678.046L175.37 679.046L176.37 679.046L176.37 678.046L175.37 678.046ZM166.896 678.046L166.896 677.046L165.896 677.046L165.896 678.046L166.896 678.046ZM166.896 703.175L166.896 704.175L167.896 704.175L167.896 703.175L166.896 703.175ZM159.83 703.175L158.83 703.175L158.83 704.175L159.83 704.175L159.83 703.175ZM159.83 678.046L160.83 678.046L160.83 677.046L159.83 677.046L159.83 678.046ZM151.335 678.046L152.335 678.046L152.335 672.558L151.335 672.558L150.335 672.558L150.335 678.046L151.335 678.046ZM151.335 672.558L151.335 673.558L175.37 673.558L175.37 672.558L175.37 671.558L151.335 671.558L151.335 672.558ZM175.37 672.558L174.37 672.558L174.37 678.046L175.37 678.046L176.37 678.046L176.37 672.558L175.37 672.558ZM175.37 678.046L175.37 677.046L166.896 677.046L166.896 678.046L166.896 679.046L175.37 679.046L175.37 678.046ZM166.896 678.046L165.896 678.046L165.896 703.175L166.896 703.175L167.896 703.175L167.896 678.046L166.896 678.046ZM166.896 703.175L166.896 702.175L159.83 702.175L159.83 703.175L159.83 704.175L166.896 704.175L166.896 703.175ZM159.83 703.175L160.83 703.175L160.83 678.046L159.83 678.046L158.83 678.046L158.83 703.175L159.83 703.175ZM159.83 678.046L159.83 677.046L151.335 677.046L151.335 678.046L151.335 679.046L159.83 679.046L159.83 678.046ZM176.274 678.046L175.274 678.046L175.274 679.046L176.274 679.046L176.274 678.046ZM176.274 672.558L176.274 671.558L175.274 671.558L175.274 672.558L176.274 672.558ZM200.31 672.558L201.31 672.558L201.31 671.558L200.31 671.558L200.31 672.558ZM200.31 678.046L200.31 679.046L201.31 679.046L201.31 678.046L200.31 678.046ZM191.835 678.046L191.835 677.046L190.835 677.046L190.835 678.046L191.835 678.046ZM191.835 703.175L191.835 704.175L192.835 704.175L192.835 703.175L191.835 703.175ZM184.77 703.175L183.77 703.175L183.77 704.175L184.77 704.175L184.77 703.175ZM184.77 678.046L185.77 678.046L185.77 677.046L184.77 677.046L184.77 678.046ZM176.274 678.046L177.274 678.046L177.274 672.558L176.274 672.558L175.274 672.558L175.274 678.046L176.274 678.046ZM176.274 672.558L176.274 673.558L200.31 673.558L200.31 672.558L200.31 671.558L176.274 671.558L176.274 672.558ZM200.31 672.558L199.31 672.558L199.31 678.046L200.31 678.046L201.31 678.046L201.31 672.558L200.31 672.558ZM200.31 678.046L200.31 677.046L191.835 677.046L191.835 678.046L191.835 679.046L200.31 679.046L200.31 678.046ZM191.835 678.046L190.835 678.046L190.835 703.175L191.835 703.175L192.835 703.175L192.835 678.046L191.835 678.046ZM191.835 703.175L191.835 702.175L184.77 702.175L184.77 703.175L184.77 704.175L191.835 704.175L191.835 703.175ZM184.77 703.175L185.77 703.175L185.77 678.046L184.77 678.046L183.77 678.046L183.77 703.175L184.77 703.175ZM184.77 678.046L184.77 677.046L176.274 677.046L176.274 678.046L176.274 679.046L184.77 679.046L184.77 678.046ZM210.487 703.175L209.487 703.175L209.487 704.175L210.487 704.175L210.487 703.175ZM210.487 691.736L211.487 691.736L211.487 691.491L211.374 691.274L210.487 691.736ZM200.499 672.558L200.499 671.558L198.851 671.558L199.612 673.02L200.499 672.558ZM208.174 672.558L209.067 672.106L208.789 671.558L208.174 671.558L208.174 672.558ZM213.494 683.072L214.396 682.639L214.391 682.63L214.387 682.621L213.494 683.072ZM213.957 684.081L213.04 684.48L213.043 684.488L213.047 684.495L213.957 684.081ZM214.357 685.049L213.42 685.4L213.664 686.049L214.357 686.049L214.357 685.049ZM214.462 685.049L214.462 686.049L215.155 686.049L215.398 685.4L214.462 685.049ZM214.84 684.081L213.93 683.668L213.922 683.685L213.915 683.703L214.84 684.081ZM215.324 683.072L214.432 682.621L214.429 682.625L215.324 683.072ZM220.644 672.558L220.644 671.558L220.029 671.558L219.752 672.106L220.644 672.558ZM227.436 672.558L228.324 673.018L229.082 671.558L227.436 671.558L227.436 672.558ZM217.574 691.567L216.686 691.107L216.574 691.323L216.574 691.567L217.574 691.567ZM217.574 703.175L217.574 704.175L218.574 704.175L218.574 703.175L217.574 703.175ZM210.487 703.175L211.487 703.175L211.487 691.736L210.487 691.736L209.487 691.736L209.487 703.175L210.487 703.175ZM210.487 691.736L211.374 691.274L201.386 672.096L200.499 672.558L199.612 673.02L209.601 692.198L210.487 691.736ZM200.499 672.558L200.499 673.558L208.174 673.558L208.174 672.558L208.174 671.558L200.499 671.558L200.499 672.558ZM208.174 672.558L207.282 673.009L212.602 683.523L213.494 683.072L214.387 682.621L209.067 672.106L208.174 672.558ZM213.494 683.072L212.593 683.505C212.756 683.845 212.905 684.17 213.04 684.48L213.957 684.081L214.874 683.683C214.729 683.348 214.569 683 214.396 682.639L213.494 683.072ZM213.957 684.081L213.047 684.495C213.177 684.782 213.302 685.083 213.42 685.4L214.357 685.049L215.293 684.698C215.159 684.341 215.018 683.998 214.867 683.668L213.957 684.081ZM214.357 685.049L214.357 686.049L214.462 686.049L214.462 685.049L214.462 684.049L214.357 684.049L214.357 685.049ZM214.462 685.049L215.398 685.4C215.521 685.072 215.644 684.759 215.766 684.46L214.84 684.081L213.915 683.703C213.785 684.021 213.655 684.353 213.525 684.698L214.462 685.049ZM214.84 684.081L215.751 684.495C215.885 684.2 216.041 683.875 216.218 683.519L215.324 683.072L214.429 682.625C214.243 682.998 214.076 683.346 213.93 683.668L214.84 684.081ZM215.324 683.072L216.216 683.523L221.536 673.009L220.644 672.558L219.752 672.106L214.432 682.621L215.324 683.072ZM220.644 672.558L220.644 673.558L227.436 673.558L227.436 672.558L227.436 671.558L220.644 671.558L220.644 672.558ZM227.436 672.558L226.549 672.097L216.686 691.107L217.574 691.567L218.462 692.028L228.324 673.018L227.436 672.558ZM217.574 691.567L216.574 691.567L216.574 703.175L217.574 703.175L218.574 703.175L218.574 691.567L217.574 691.567ZM217.574 703.175L217.574 702.175L210.487 702.175L210.487 703.175L210.487 704.175L217.574 704.175L217.574 703.175ZM246.95 703.175L245.95 703.175L245.95 704.175L246.95 704.175L246.95 703.175ZM246.95 691.736L247.95 691.736L247.95 691.491L247.837 691.274L246.95 691.736ZM236.962 672.558L236.962 671.558L235.314 671.558L236.075 673.02L236.962 672.558ZM244.637 672.558L245.53 672.106L245.252 671.558L244.637 671.558L244.637 672.558ZM249.958 683.072L250.859 682.639L250.855 682.63L250.85 682.621L249.958 683.072ZM250.42 684.081L249.503 684.48L249.506 684.488L249.51 684.495L250.42 684.081ZM250.82 685.049L249.883 685.4L250.127 686.049L250.82 686.049L250.82 685.049ZM250.925 685.049L250.925 686.049L251.618 686.049L251.861 685.4L250.925 685.049ZM251.303 684.081L250.393 683.668L250.385 683.685L250.378 683.703L251.303 684.081ZM251.787 683.072L250.895 682.621L250.893 682.625L251.787 683.072ZM257.107 672.558L257.107 671.558L256.492 671.558L256.215 672.106L257.107 672.558ZM263.899 672.558L264.787 673.018L265.545 671.558L263.899 671.558L263.899 672.558ZM254.037 691.567L253.149 691.107L253.037 691.323L253.037 691.567L254.037 691.567ZM254.037 703.175L254.037 704.175L255.037 704.175L255.037 703.175L254.037 703.175ZM246.95 703.175L247.95 703.175L247.95 691.736L246.95 691.736L245.95 691.736L245.95 703.175L246.95 703.175ZM246.95 691.736L247.837 691.274L237.849 672.096L236.962 672.558L236.075 673.02L246.064 692.198L246.95 691.736ZM236.962 672.558L236.962 673.558L244.637 673.558L244.637 672.558L244.637 671.558L236.962 671.558L236.962 672.558ZM244.637 672.558L243.745 673.009L249.065 683.523L249.958 683.072L250.85 682.621L245.53 672.106L244.637 672.558ZM249.958 683.072L249.056 683.505C249.219 683.845 249.368 684.17 249.503 684.48L250.42 684.081L251.337 683.683C251.192 683.348 251.032 683 250.859 682.639L249.958 683.072ZM250.42 684.081L249.51 684.495C249.64 684.782 249.765 685.083 249.883 685.4L250.82 685.049L251.756 684.698C251.622 684.341 251.481 683.998 251.331 683.668L250.42 684.081ZM250.82 685.049L250.82 686.049L250.925 686.049L250.925 685.049L250.925 684.049L250.82 684.049L250.82 685.049ZM250.925 685.049L251.861 685.4C251.984 685.072 252.107 684.759 252.229 684.46L251.303 684.081L250.378 683.703C250.248 684.021 250.118 684.353 249.989 684.698L250.925 685.049ZM251.303 684.081L252.214 684.495C252.348 684.2 252.504 683.875 252.681 683.519L251.787 683.072L250.893 682.625C250.706 682.998 250.539 683.346 250.393 683.668L251.303 684.081ZM251.787 683.072L252.679 683.523L257.999 673.009L257.107 672.558L256.215 672.106L250.895 682.621L251.787 683.072ZM257.107 672.558L257.107 673.558L263.899 673.558L263.899 672.558L263.899 671.558L257.107 671.558L257.107 672.558ZM263.899 672.558L263.012 672.097L253.149 691.107L254.037 691.567L254.925 692.028L264.787 673.018L263.899 672.558ZM254.037 691.567L253.037 691.567L253.037 703.175L254.037 703.175L255.037 703.175L255.037 691.567L254.037 691.567ZM254.037 703.175L254.037 702.175L246.95 702.175L246.95 703.175L246.95 704.175L254.037 704.175L254.037 703.175ZM267.558 675.712L266.851 675.005L266.849 675.007L267.558 675.712ZM286.379 675.712L285.671 676.419L285.673 676.421L286.379 675.712ZM286.379 700.021L285.673 699.312L285.671 699.314L286.379 700.021ZM267.558 700.021L266.849 700.726L266.851 700.728L267.558 700.021ZM272.731 696.677L271.939 697.288L271.942 697.292L272.731 696.677ZM281.227 696.677L280.439 696.062L280.438 696.063L281.227 696.677ZM281.227 679.119L280.438 679.733L280.445 679.742L281.227 679.119ZM272.731 679.119L273.517 679.737L273.52 679.733L272.731 679.119ZM263.92 688.75L264.92 688.75L264.92 686.983L263.92 686.983L262.92 686.983L262.92 688.75L263.92 688.75ZM263.92 686.983L264.92 686.983C264.92 682.048 266.101 678.596 268.267 676.417L267.558 675.712L266.849 675.007C264.165 677.707 262.92 681.769 262.92 686.983L263.92 686.983ZM267.558 675.712L268.265 676.419C270.495 674.19 273.37 673.053 276.979 673.053L276.979 672.053L276.979 671.053C272.905 671.053 269.5 672.356 266.851 675.005L267.558 675.712ZM276.979 672.053L276.979 673.053C280.573 673.053 283.441 674.189 285.671 676.419L286.379 675.712L287.086 675.005C284.437 672.357 281.039 671.053 276.979 671.053L276.979 672.053ZM286.379 675.712L285.673 676.421C287.865 678.6 289.059 682.051 289.059 686.983L290.059 686.983L291.059 686.983C291.059 681.766 289.798 677.702 287.084 675.003L286.379 675.712ZM290.059 686.983L289.059 686.983L289.059 688.75L290.059 688.75L291.059 688.75L291.059 686.983L290.059 686.983ZM290.059 688.75L289.059 688.75C289.059 693.682 287.865 697.132 285.673 699.312L286.379 700.021L287.084 700.73C289.798 698.031 291.059 693.967 291.059 688.75L290.059 688.75ZM286.379 700.021L285.671 699.314C283.441 701.544 280.573 702.68 276.979 702.68L276.979 703.68L276.979 704.68C281.039 704.68 284.437 703.376 287.086 700.728L286.379 700.021ZM276.979 703.68L276.979 702.68C273.37 702.68 270.495 701.543 268.265 699.314L267.558 700.021L266.851 700.728C269.5 703.377 272.905 704.68 276.979 704.68L276.979 703.68ZM267.558 700.021L268.267 699.316C266.101 697.137 264.92 693.685 264.92 688.75L263.92 688.75L262.92 688.75C262.92 693.964 264.165 698.026 266.849 700.726L267.558 700.021ZM271.175 690.243L270.175 690.243C270.175 693.262 270.699 695.679 271.939 697.288L272.731 696.677L273.523 696.067C272.688 694.984 272.175 693.111 272.175 690.243L271.175 690.243ZM272.731 696.677L271.942 697.292C273.183 698.884 274.899 699.675 276.979 699.675L276.979 698.675L276.979 697.675C275.47 697.675 274.355 697.134 273.52 696.063L272.731 696.677ZM276.979 698.675L276.979 699.675C279.059 699.675 280.775 698.884 282.016 697.292L281.227 696.677L280.438 696.063C279.603 697.134 278.487 697.675 276.979 697.675L276.979 698.675ZM281.227 696.677L282.015 697.293C283.272 695.683 283.804 693.264 283.804 690.243L282.804 690.243L281.804 690.243C281.804 693.109 281.284 694.98 280.439 696.062L281.227 696.677ZM282.804 690.243L283.804 690.243L283.804 685.511L282.804 685.511L281.804 685.511L281.804 690.243L282.804 690.243ZM282.804 685.511L283.804 685.511C283.804 682.493 283.273 680.08 282.008 678.495L281.227 679.119L280.445 679.742C281.283 680.793 281.804 682.642 281.804 685.511L282.804 685.511ZM281.227 679.119L282.016 678.504C280.775 676.912 279.059 676.121 276.979 676.121L276.979 677.121L276.979 678.121C278.487 678.121 279.603 678.662 280.438 679.733L281.227 679.119ZM276.979 677.121L276.979 676.121C274.899 676.121 273.183 676.912 271.942 678.504L272.731 679.119L273.52 679.733C274.355 678.662 275.47 678.121 276.979 678.121L276.979 677.121ZM272.731 679.119L271.945 678.5C270.698 680.085 270.175 682.495 270.175 685.511L271.175 685.511L272.175 685.511C272.175 682.64 272.69 680.788 273.517 679.737L272.731 679.119ZM271.175 685.511L270.175 685.511L270.175 690.243L271.175 690.243L272.175 690.243L272.175 685.511L271.175 685.511ZM293.928 672.558L293.928 671.558L292.928 671.558L292.928 672.558L293.928 672.558ZM300.93 672.558L301.93 672.558L301.93 671.558L300.93 671.558L300.93 672.558ZM302.15 697.329L301.409 698.001L301.414 698.006L302.15 697.329ZM308.858 697.329L308.123 696.651L308.122 696.652L308.858 697.329ZM310.098 672.558L310.098 671.558L309.098 671.558L309.098 672.558L310.098 672.558ZM317.038 672.558L318.038 672.558L318.038 671.558L317.038 671.558L317.038 672.558ZM313.884 700.841L313.215 700.098L313.212 700.1L313.884 700.841ZM293.928 691.988L294.928 691.988L294.928 672.558L293.928 672.558L292.928 672.558L292.928 691.988L293.928 691.988ZM293.928 672.558L293.928 673.558L300.93 673.558L300.93 672.558L300.93 671.558L293.928 671.558L293.928 672.558ZM300.93 672.558L299.93 672.558L299.93 692.724L300.93 692.724L301.93 692.724L301.93 672.558L300.93 672.558ZM300.93 692.724L299.93 692.724C299.93 694.967 300.339 696.82 301.409 698.001L302.15 697.329L302.891 696.658C302.334 696.043 301.93 694.827 301.93 692.724L300.93 692.724ZM302.15 697.329L301.414 698.006C302.454 699.137 303.873 699.654 305.535 699.654L305.535 698.654L305.535 697.654C304.309 697.654 303.471 697.288 302.885 696.652L302.15 697.329ZM305.535 698.654L305.535 699.654C307.165 699.654 308.559 699.13 309.593 698.006L308.858 697.329L308.122 696.652C307.531 697.294 306.709 697.654 305.535 697.654L305.535 698.654ZM308.858 697.329L309.593 698.007C310.681 696.826 311.098 694.97 311.098 692.724L310.098 692.724L309.098 692.724C309.098 694.824 308.688 696.038 308.123 696.651L308.858 697.329ZM310.098 692.724L311.098 692.724L311.098 672.558L310.098 672.558L309.098 672.558L309.098 692.724L310.098 692.724ZM310.098 672.558L310.098 673.558L317.038 673.558L317.038 672.558L317.038 671.558L310.098 671.558L310.098 672.558ZM317.038 672.558L316.038 672.558L316.038 691.988L317.038 691.988L318.038 691.988L318.038 672.558L317.038 672.558ZM317.038 691.988L316.038 691.988C316.038 695.835 315.031 698.463 313.215 700.098L313.884 700.841L314.553 701.584C316.942 699.434 318.038 696.159 318.038 691.988L317.038 691.988ZM313.884 700.841L313.212 700.1C311.347 701.79 308.83 702.68 305.556 702.68L305.556 703.68L305.556 704.68C309.208 704.68 312.243 703.677 314.555 701.582L313.884 700.841ZM305.556 703.68L305.556 702.68C302.222 702.68 299.662 701.787 297.769 700.095L297.103 700.841L296.436 701.586C298.778 703.68 301.853 704.68 305.556 704.68L305.556 703.68ZM297.103 700.841L297.769 700.095C295.941 698.46 294.928 695.834 294.928 691.988L293.928 691.988L292.928 691.988C292.928 696.161 294.032 699.436 296.436 701.586L297.103 700.841Z" fill="black" mask="url(#path-5-outside-1_17007_6863)"/> +<mask id="path-7-outside-2_17007_6863" maskUnits="userSpaceOnUse" x="96" y="615.343" width="261" height="31" fill="black"> +<rect fill="white" x="96" y="615.343" width="261" height="31"/> +<path d="M97.208 644.343L97.208 617.327L108.081 617.327C111.013 617.327 113.258 618.137 114.816 619.758C116.375 621.366 117.154 623.562 117.154 626.345C117.154 629.116 116.381 631.317 114.835 632.95C113.301 634.571 111.025 635.381 108.007 635.381L103.368 635.381L103.368 644.343L97.208 644.343ZM103.368 631.039L106.949 631.039C108.471 631.039 109.528 630.612 110.122 629.759C110.716 628.893 111.013 627.78 111.013 626.419C111.013 625.071 110.716 623.976 110.122 623.135C109.528 622.281 108.471 621.854 106.949 621.854L103.368 621.854L103.368 631.039ZM118.62 635.474L118.62 634.88C118.62 632.06 119.505 629.802 121.273 628.107C123.042 626.413 125.362 625.565 128.231 625.565C131.076 625.565 133.291 626.369 134.874 627.978C136.457 629.586 137.249 631.806 137.249 634.639L137.249 636.457L122.164 636.457L122.164 633.191L131.441 633.191L131.441 632.932C131.441 632.016 131.169 631.256 130.625 630.649C130.081 630.043 129.271 629.74 128.194 629.74C127.007 629.74 126.098 630.173 125.467 631.039C124.848 631.905 124.539 633.024 124.539 634.397L124.539 635.641C124.539 637.199 124.873 638.418 125.541 639.296C126.221 640.174 127.205 640.613 128.491 640.613C129.407 640.613 130.186 640.403 130.829 639.982C131.472 639.562 131.986 639.049 132.369 638.442L137.008 640.354C136.426 641.714 135.424 642.803 134.002 643.619C132.592 644.436 130.78 644.844 128.565 644.844C125.436 644.844 122.993 644.003 121.236 642.32C119.492 640.626 118.62 638.343 118.62 635.474ZM139.197 639.036C139.197 637.106 139.952 635.616 141.461 634.564C142.982 633.513 144.949 632.981 147.361 632.969L151.443 632.969L151.443 631.874C151.443 631.058 151.239 630.414 150.831 629.944C150.423 629.474 149.73 629.239 148.753 629.239C147.776 629.239 147.058 629.437 146.601 629.833C146.143 630.229 145.914 630.755 145.914 631.41L145.914 631.744L140.292 631.726L140.292 631.354C140.292 629.66 141.09 628.281 142.686 627.217C144.294 626.141 146.434 625.603 149.105 625.603C151.802 625.603 153.855 626.116 155.266 627.143C156.688 628.169 157.399 629.802 157.399 632.041L157.399 640.205C157.399 640.947 157.461 641.659 157.585 642.339C157.721 643.007 157.913 643.582 158.16 644.064L158.16 644.343L152.297 644.343C152.136 644.046 151.994 643.681 151.87 643.248C151.759 642.815 151.685 642.376 151.647 641.931C151.239 642.623 150.509 643.248 149.458 643.805C148.419 644.361 147.108 644.64 145.524 644.64C143.644 644.64 142.117 644.17 140.941 643.229C139.779 642.289 139.197 640.892 139.197 639.036ZM145.116 638.572C145.116 639.352 145.339 639.964 145.784 640.409C146.229 640.842 146.91 641.059 147.825 641.059C148.815 641.059 149.662 640.731 150.367 640.075C151.085 639.407 151.443 638.634 151.443 637.756L151.443 636.197L148.809 636.197C147.547 636.197 146.613 636.389 146.007 636.772C145.413 637.156 145.116 637.756 145.116 638.572ZM161.37 644.343L161.37 626.104L167.159 626.104L167.215 628.386L167.289 628.386C167.759 627.582 168.477 626.932 169.441 626.438C170.419 625.93 171.563 625.677 172.874 625.677C174.754 625.677 176.282 626.202 177.457 627.254C178.632 628.305 179.22 630.093 179.22 632.616L179.22 644.343L173.264 644.343L173.264 633.136C173.264 632.047 173.029 631.28 172.559 630.835C172.101 630.377 171.451 630.148 170.61 630.148C169.893 630.148 169.243 630.359 168.662 630.779C168.081 631.2 167.635 631.763 167.326 632.468L167.326 644.343L161.37 644.343ZM182.801 637.7L182.801 626.104L188.775 626.104L188.775 637.273C188.775 638.424 189.01 639.228 189.48 639.686C189.951 640.131 190.6 640.354 191.429 640.354C192.159 640.354 192.808 640.131 193.377 639.686C193.946 639.24 194.385 638.684 194.694 638.016L194.694 626.104L200.65 626.104L200.65 644.343L194.88 644.343L194.806 642.042L194.75 642.042C194.23 642.871 193.482 643.533 192.505 644.027C191.54 644.522 190.396 644.77 189.072 644.77C187.217 644.77 185.708 644.225 184.545 643.137C183.382 642.036 182.801 640.224 182.801 637.7ZM202.691 630.408L202.691 626.104L215.03 626.104L215.03 630.408L202.691 630.408ZM205.475 638.758L205.475 627.532L205.586 627.161L205.586 620.927L211.356 620.927L211.356 637.867C211.356 638.931 211.517 639.636 211.839 639.982C212.16 640.329 212.643 640.502 213.286 640.502C213.595 640.502 213.892 640.477 214.177 640.428C214.461 640.366 214.74 640.279 215.012 640.168L215.012 644.287C214.69 644.411 214.214 644.528 213.583 644.64C212.952 644.751 212.204 644.807 211.338 644.807C209.495 644.807 208.054 644.33 207.015 643.378C205.988 642.413 205.475 640.873 205.475 638.758ZM226.979 644.343L226.979 617.327L237.853 617.327C240.784 617.327 243.029 618.137 244.588 619.758C246.146 621.366 246.926 623.562 246.926 626.345C246.926 629.116 246.153 631.317 244.606 632.95C243.073 634.571 240.797 635.381 237.778 635.381L233.14 635.381L233.14 644.343L226.979 644.343ZM233.14 631.039L236.721 631.039C238.242 631.039 239.3 630.612 239.894 629.759C240.487 628.893 240.784 627.78 240.784 626.419C240.784 625.071 240.487 623.976 239.894 623.135C239.3 622.281 238.242 621.854 236.721 621.854L233.14 621.854L233.14 631.039ZM249.635 644.343L249.635 626.104L255.665 626.104L255.665 644.343L249.635 644.343ZM249.245 620.37C249.245 619.504 249.542 618.774 250.136 618.181C250.729 617.575 251.577 617.271 252.678 617.271C253.766 617.271 254.601 617.568 255.183 618.162C255.764 618.756 256.055 619.492 256.055 620.37C256.055 621.236 255.758 621.972 255.164 622.578C254.57 623.184 253.729 623.487 252.641 623.487C251.54 623.487 250.699 623.184 250.117 622.578C249.536 621.972 249.245 621.236 249.245 620.37ZM258.708 635.492L258.708 634.898C258.708 632.066 259.617 629.802 261.436 628.107C263.254 626.4 265.647 625.547 268.616 625.547C271.585 625.547 273.972 626.4 275.778 628.107C277.597 629.802 278.506 632.066 278.506 634.898L278.506 635.492C278.506 638.325 277.597 640.595 275.778 642.302C273.972 643.996 271.585 644.844 268.616 644.844C265.635 644.844 263.235 643.996 261.417 642.302C259.611 640.595 258.708 638.325 258.708 635.492ZM264.757 634.639L264.757 635.733C264.757 637.243 265.085 638.424 265.74 639.277C266.408 640.118 267.361 640.539 268.598 640.539C269.847 640.539 270.799 640.118 271.455 639.277C272.123 638.424 272.457 637.243 272.457 635.733L272.457 634.639C272.457 633.142 272.123 631.979 271.455 631.15C270.787 630.309 269.835 629.889 268.598 629.889C267.373 629.889 266.427 630.309 265.759 631.15C265.091 631.979 264.757 633.142 264.757 634.639ZM281.493 644.343L281.493 626.104L287.282 626.104L287.338 628.386L287.412 628.386C287.882 627.582 288.6 626.932 289.564 626.438C290.542 625.93 291.686 625.677 292.997 625.677C294.877 625.677 296.405 626.202 297.58 627.254C298.755 628.305 299.343 630.093 299.343 632.616L299.343 644.343L293.387 644.343L293.387 633.136C293.387 632.047 293.152 631.28 292.682 630.835C292.224 630.377 291.575 630.148 290.733 630.148C290.016 630.148 289.367 630.359 288.785 630.779C288.204 631.2 287.758 631.763 287.449 632.468L287.449 644.343L281.493 644.343ZM302.163 635.474L302.163 634.88C302.163 632.06 303.048 629.802 304.816 628.107C306.585 626.413 308.905 625.565 311.774 625.565C314.619 625.565 316.834 626.369 318.417 627.978C320 629.586 320.792 631.806 320.792 634.639L320.792 636.457L305.707 636.457L305.707 633.191L314.984 633.191L314.984 632.932C314.984 632.016 314.712 631.256 314.168 630.649C313.624 630.043 312.813 629.74 311.737 629.74C310.55 629.74 309.641 630.173 309.01 631.039C308.391 631.905 308.082 633.024 308.082 634.397L308.082 635.641C308.082 637.199 308.416 638.418 309.084 639.296C309.764 640.174 310.748 640.613 312.034 640.613C312.95 640.613 313.729 640.403 314.372 639.982C315.015 639.562 315.529 639.049 315.912 638.442L320.551 640.354C319.969 641.714 318.967 642.803 317.545 643.619C316.135 644.436 314.323 644.844 312.108 644.844C308.979 644.844 306.536 644.003 304.779 642.32C303.035 640.626 302.163 638.343 302.163 635.474ZM322.685 635.474L322.685 634.88C322.685 632.06 323.569 629.802 325.338 628.107C327.107 626.413 329.426 625.565 332.296 625.565C335.141 625.565 337.355 626.369 338.938 627.978C340.522 629.586 341.313 631.806 341.313 634.639L341.313 636.457L326.229 636.457L326.229 633.191L335.506 633.191L335.506 632.932C335.506 632.016 335.234 631.256 334.689 630.649C334.145 630.043 333.335 629.74 332.259 629.74C331.071 629.74 330.162 630.173 329.531 631.039C328.913 631.905 328.604 633.024 328.604 634.397L328.604 635.641C328.604 637.199 328.937 638.418 329.605 639.296C330.286 640.174 331.269 640.613 332.556 640.613C333.471 640.613 334.25 640.403 334.894 639.982C335.537 639.562 336.05 639.049 336.434 638.442L341.072 640.354C340.491 641.714 339.489 642.803 338.066 643.619C336.656 644.436 334.844 644.844 332.63 644.844C329.5 644.844 327.057 644.003 325.301 642.32C323.557 640.626 322.685 638.343 322.685 635.474ZM344.134 644.343L344.134 626.104L349.997 626.104L350.071 628.367L350.127 628.367C350.56 627.6 351.147 626.963 351.89 626.456C352.632 625.949 353.467 625.695 354.395 625.695C354.716 625.695 355.025 625.72 355.322 625.77C355.619 625.819 355.829 625.868 355.953 625.918L355.953 630.612C355.73 630.538 355.471 630.482 355.174 630.445C354.889 630.408 354.568 630.39 354.209 630.39C353.38 630.39 352.601 630.643 351.871 631.15C351.141 631.658 350.578 632.319 350.183 633.136L350.183 644.343L344.134 644.343Z"/> +</mask> +<path d="M97.208 644.343L97.208 617.327L108.081 617.327C111.013 617.327 113.258 618.137 114.816 619.758C116.375 621.366 117.154 623.562 117.154 626.345C117.154 629.116 116.381 631.317 114.835 632.95C113.301 634.571 111.025 635.381 108.007 635.381L103.368 635.381L103.368 644.343L97.208 644.343ZM103.368 631.039L106.949 631.039C108.471 631.039 109.528 630.612 110.122 629.759C110.716 628.893 111.013 627.78 111.013 626.419C111.013 625.071 110.716 623.976 110.122 623.135C109.528 622.281 108.471 621.854 106.949 621.854L103.368 621.854L103.368 631.039ZM118.62 635.474L118.62 634.88C118.62 632.06 119.505 629.802 121.273 628.107C123.042 626.413 125.362 625.565 128.231 625.565C131.076 625.565 133.291 626.369 134.874 627.978C136.457 629.586 137.249 631.806 137.249 634.639L137.249 636.457L122.164 636.457L122.164 633.191L131.441 633.191L131.441 632.932C131.441 632.016 131.169 631.256 130.625 630.649C130.081 630.043 129.271 629.74 128.194 629.74C127.007 629.74 126.098 630.173 125.467 631.039C124.848 631.905 124.539 633.024 124.539 634.397L124.539 635.641C124.539 637.199 124.873 638.418 125.541 639.296C126.221 640.174 127.205 640.613 128.491 640.613C129.407 640.613 130.186 640.403 130.829 639.982C131.472 639.562 131.986 639.049 132.369 638.442L137.008 640.354C136.426 641.714 135.424 642.803 134.002 643.619C132.592 644.436 130.78 644.844 128.565 644.844C125.436 644.844 122.993 644.003 121.236 642.32C119.492 640.626 118.62 638.343 118.62 635.474ZM139.197 639.036C139.197 637.106 139.952 635.616 141.461 634.564C142.982 633.513 144.949 632.981 147.361 632.969L151.443 632.969L151.443 631.874C151.443 631.058 151.239 630.414 150.831 629.944C150.423 629.474 149.73 629.239 148.753 629.239C147.776 629.239 147.058 629.437 146.601 629.833C146.143 630.229 145.914 630.755 145.914 631.41L145.914 631.744L140.292 631.726L140.292 631.354C140.292 629.66 141.09 628.281 142.686 627.217C144.294 626.141 146.434 625.603 149.105 625.603C151.802 625.603 153.855 626.116 155.266 627.143C156.688 628.169 157.399 629.802 157.399 632.041L157.399 640.205C157.399 640.947 157.461 641.659 157.585 642.339C157.721 643.007 157.913 643.582 158.16 644.064L158.16 644.343L152.297 644.343C152.136 644.046 151.994 643.681 151.87 643.248C151.759 642.815 151.685 642.376 151.647 641.931C151.239 642.623 150.509 643.248 149.458 643.805C148.419 644.361 147.108 644.64 145.524 644.64C143.644 644.64 142.117 644.17 140.941 643.229C139.779 642.289 139.197 640.892 139.197 639.036ZM145.116 638.572C145.116 639.352 145.339 639.964 145.784 640.409C146.229 640.842 146.91 641.059 147.825 641.059C148.815 641.059 149.662 640.731 150.367 640.075C151.085 639.407 151.443 638.634 151.443 637.756L151.443 636.197L148.809 636.197C147.547 636.197 146.613 636.389 146.007 636.772C145.413 637.156 145.116 637.756 145.116 638.572ZM161.37 644.343L161.37 626.104L167.159 626.104L167.215 628.386L167.289 628.386C167.759 627.582 168.477 626.932 169.441 626.438C170.419 625.93 171.563 625.677 172.874 625.677C174.754 625.677 176.282 626.202 177.457 627.254C178.632 628.305 179.22 630.093 179.22 632.616L179.22 644.343L173.264 644.343L173.264 633.136C173.264 632.047 173.029 631.28 172.559 630.835C172.101 630.377 171.451 630.148 170.61 630.148C169.893 630.148 169.243 630.359 168.662 630.779C168.081 631.2 167.635 631.763 167.326 632.468L167.326 644.343L161.37 644.343ZM182.801 637.7L182.801 626.104L188.775 626.104L188.775 637.273C188.775 638.424 189.01 639.228 189.48 639.686C189.951 640.131 190.6 640.354 191.429 640.354C192.159 640.354 192.808 640.131 193.377 639.686C193.946 639.24 194.385 638.684 194.694 638.016L194.694 626.104L200.65 626.104L200.65 644.343L194.88 644.343L194.806 642.042L194.75 642.042C194.23 642.871 193.482 643.533 192.505 644.027C191.54 644.522 190.396 644.77 189.072 644.77C187.217 644.77 185.708 644.225 184.545 643.137C183.382 642.036 182.801 640.224 182.801 637.7ZM202.691 630.408L202.691 626.104L215.03 626.104L215.03 630.408L202.691 630.408ZM205.475 638.758L205.475 627.532L205.586 627.161L205.586 620.927L211.356 620.927L211.356 637.867C211.356 638.931 211.517 639.636 211.839 639.982C212.16 640.329 212.643 640.502 213.286 640.502C213.595 640.502 213.892 640.477 214.177 640.428C214.461 640.366 214.74 640.279 215.012 640.168L215.012 644.287C214.69 644.411 214.214 644.528 213.583 644.64C212.952 644.751 212.204 644.807 211.338 644.807C209.495 644.807 208.054 644.33 207.015 643.378C205.988 642.413 205.475 640.873 205.475 638.758ZM226.979 644.343L226.979 617.327L237.853 617.327C240.784 617.327 243.029 618.137 244.588 619.758C246.146 621.366 246.926 623.562 246.926 626.345C246.926 629.116 246.153 631.317 244.606 632.95C243.073 634.571 240.797 635.381 237.778 635.381L233.14 635.381L233.14 644.343L226.979 644.343ZM233.14 631.039L236.721 631.039C238.242 631.039 239.3 630.612 239.894 629.759C240.487 628.893 240.784 627.78 240.784 626.419C240.784 625.071 240.487 623.976 239.894 623.135C239.3 622.281 238.242 621.854 236.721 621.854L233.14 621.854L233.14 631.039ZM249.635 644.343L249.635 626.104L255.665 626.104L255.665 644.343L249.635 644.343ZM249.245 620.37C249.245 619.504 249.542 618.774 250.136 618.181C250.729 617.575 251.577 617.271 252.678 617.271C253.766 617.271 254.601 617.568 255.183 618.162C255.764 618.756 256.055 619.492 256.055 620.37C256.055 621.236 255.758 621.972 255.164 622.578C254.57 623.184 253.729 623.487 252.641 623.487C251.54 623.487 250.699 623.184 250.117 622.578C249.536 621.972 249.245 621.236 249.245 620.37ZM258.708 635.492L258.708 634.898C258.708 632.066 259.617 629.802 261.436 628.107C263.254 626.4 265.647 625.547 268.616 625.547C271.585 625.547 273.972 626.4 275.778 628.107C277.597 629.802 278.506 632.066 278.506 634.898L278.506 635.492C278.506 638.325 277.597 640.595 275.778 642.302C273.972 643.996 271.585 644.844 268.616 644.844C265.635 644.844 263.235 643.996 261.417 642.302C259.611 640.595 258.708 638.325 258.708 635.492ZM264.757 634.639L264.757 635.733C264.757 637.243 265.085 638.424 265.74 639.277C266.408 640.118 267.361 640.539 268.598 640.539C269.847 640.539 270.799 640.118 271.455 639.277C272.123 638.424 272.457 637.243 272.457 635.733L272.457 634.639C272.457 633.142 272.123 631.979 271.455 631.15C270.787 630.309 269.835 629.889 268.598 629.889C267.373 629.889 266.427 630.309 265.759 631.15C265.091 631.979 264.757 633.142 264.757 634.639ZM281.493 644.343L281.493 626.104L287.282 626.104L287.338 628.386L287.412 628.386C287.882 627.582 288.6 626.932 289.564 626.438C290.542 625.93 291.686 625.677 292.997 625.677C294.877 625.677 296.405 626.202 297.58 627.254C298.755 628.305 299.343 630.093 299.343 632.616L299.343 644.343L293.387 644.343L293.387 633.136C293.387 632.047 293.152 631.28 292.682 630.835C292.224 630.377 291.575 630.148 290.733 630.148C290.016 630.148 289.367 630.359 288.785 630.779C288.204 631.2 287.758 631.763 287.449 632.468L287.449 644.343L281.493 644.343ZM302.163 635.474L302.163 634.88C302.163 632.06 303.048 629.802 304.816 628.107C306.585 626.413 308.905 625.565 311.774 625.565C314.619 625.565 316.834 626.369 318.417 627.978C320 629.586 320.792 631.806 320.792 634.639L320.792 636.457L305.707 636.457L305.707 633.191L314.984 633.191L314.984 632.932C314.984 632.016 314.712 631.256 314.168 630.649C313.624 630.043 312.813 629.74 311.737 629.74C310.55 629.74 309.641 630.173 309.01 631.039C308.391 631.905 308.082 633.024 308.082 634.397L308.082 635.641C308.082 637.199 308.416 638.418 309.084 639.296C309.764 640.174 310.748 640.613 312.034 640.613C312.95 640.613 313.729 640.403 314.372 639.982C315.015 639.562 315.529 639.049 315.912 638.442L320.551 640.354C319.969 641.714 318.967 642.803 317.545 643.619C316.135 644.436 314.323 644.844 312.108 644.844C308.979 644.844 306.536 644.003 304.779 642.32C303.035 640.626 302.163 638.343 302.163 635.474ZM322.685 635.474L322.685 634.88C322.685 632.06 323.569 629.802 325.338 628.107C327.107 626.413 329.426 625.565 332.296 625.565C335.141 625.565 337.355 626.369 338.938 627.978C340.522 629.586 341.313 631.806 341.313 634.639L341.313 636.457L326.229 636.457L326.229 633.191L335.506 633.191L335.506 632.932C335.506 632.016 335.234 631.256 334.689 630.649C334.145 630.043 333.335 629.74 332.259 629.74C331.071 629.74 330.162 630.173 329.531 631.039C328.913 631.905 328.604 633.024 328.604 634.397L328.604 635.641C328.604 637.199 328.937 638.418 329.605 639.296C330.286 640.174 331.269 640.613 332.556 640.613C333.471 640.613 334.25 640.403 334.894 639.982C335.537 639.562 336.05 639.049 336.434 638.442L341.072 640.354C340.491 641.714 339.489 642.803 338.066 643.619C336.656 644.436 334.844 644.844 332.63 644.844C329.5 644.844 327.057 644.003 325.301 642.32C323.557 640.626 322.685 638.343 322.685 635.474ZM344.134 644.343L344.134 626.104L349.997 626.104L350.071 628.367L350.127 628.367C350.56 627.6 351.147 626.963 351.89 626.456C352.632 625.949 353.467 625.695 354.395 625.695C354.716 625.695 355.025 625.72 355.322 625.77C355.619 625.819 355.829 625.868 355.953 625.918L355.953 630.612C355.73 630.538 355.471 630.482 355.174 630.445C354.889 630.408 354.568 630.39 354.209 630.39C353.38 630.39 352.601 630.643 351.871 631.15C351.141 631.658 350.578 632.319 350.183 633.136L350.183 644.343L344.134 644.343Z" fill="white"/> +<path d="M97.208 644.343L96.208 644.343L96.208 645.343L97.208 645.343L97.208 644.343ZM97.208 617.327L97.208 616.327L96.208 616.327L96.208 617.327L97.208 617.327ZM114.816 619.758L114.096 620.451L114.098 620.454L114.816 619.758ZM114.835 632.95L114.109 632.263L114.109 632.263L114.835 632.95ZM103.368 635.381L103.368 634.381L102.368 634.381L102.368 635.381L103.368 635.381ZM103.368 644.343L103.368 645.343L104.368 645.343L104.368 644.343L103.368 644.343ZM103.368 631.039L102.368 631.039L102.368 632.039L103.368 632.039L103.368 631.039ZM110.122 629.759L110.943 630.33L110.947 630.324L110.122 629.759ZM110.122 623.135L109.301 623.706L109.305 623.711L110.122 623.135ZM103.368 621.854L103.368 620.854L102.368 620.854L102.368 621.854L103.368 621.854ZM97.208 644.343L98.208 644.343L98.208 617.327L97.208 617.327L96.208 617.327L96.208 644.343L97.208 644.343ZM97.208 617.327L97.208 618.327L108.081 618.327L108.081 617.327L108.081 616.327L97.208 616.327L97.208 617.327ZM108.081 617.327L108.081 618.327C110.827 618.327 112.778 619.081 114.096 620.451L114.816 619.758L115.537 619.065C113.737 617.193 111.198 616.327 108.081 616.327L108.081 617.327ZM114.816 619.758L114.098 620.454C115.435 621.832 116.154 623.755 116.154 626.345L117.154 626.345L118.154 626.345C118.154 623.368 117.315 620.899 115.534 619.062L114.816 619.758ZM117.154 626.345L116.154 626.345C116.154 628.922 115.44 630.856 114.109 632.263L114.835 632.95L115.561 633.638C117.322 631.778 118.154 629.309 118.154 626.345L117.154 626.345ZM114.835 632.95L114.109 632.263C112.823 633.621 110.851 634.381 108.007 634.381L108.007 635.381L108.007 636.381C111.199 636.381 113.779 635.52 115.561 633.638L114.835 632.95ZM108.007 635.381L108.007 634.381L103.368 634.381L103.368 635.381L103.368 636.381L108.007 636.381L108.007 635.381ZM103.368 635.381L102.368 635.381L102.368 644.343L103.368 644.343L104.368 644.343L104.368 635.381L103.368 635.381ZM103.368 644.343L103.368 643.343L97.208 643.343L97.208 644.343L97.208 645.343L103.368 645.343L103.368 644.343ZM103.368 631.039L103.368 632.039L106.949 632.039L106.949 631.039L106.949 630.039L103.368 630.039L103.368 631.039ZM106.949 631.039L106.949 632.039C108.637 632.039 110.086 631.562 110.943 630.33L110.122 629.759L109.301 629.188C108.97 629.663 108.304 630.039 106.949 630.039L106.949 631.039ZM110.122 629.759L110.947 630.324C111.684 629.249 112.013 627.922 112.013 626.419L111.013 626.419L110.013 626.419C110.013 627.637 109.747 628.537 109.297 629.193L110.122 629.759ZM111.013 626.419L112.013 626.419C112.013 624.928 111.684 623.613 110.939 622.558L110.122 623.135L109.305 623.711C109.748 624.339 110.013 625.214 110.013 626.419L111.013 626.419ZM110.122 623.135L110.943 622.564C110.086 621.332 108.637 620.854 106.949 620.854L106.949 621.854L106.949 622.854C108.304 622.854 108.97 623.23 109.301 623.706L110.122 623.135ZM106.949 621.854L106.949 620.854L103.368 620.854L103.368 621.854L103.368 622.854L106.949 622.854L106.949 621.854ZM103.368 621.854L102.368 621.854L102.368 631.039L103.368 631.039L104.368 631.039L104.368 621.854L103.368 621.854ZM121.273 628.107L121.965 628.83L121.273 628.107ZM137.249 636.457L137.249 637.457L138.249 637.457L138.249 636.457L137.249 636.457ZM122.164 636.457L121.164 636.457L121.164 637.457L122.164 637.457L122.164 636.457ZM122.164 633.191L122.164 632.191L121.164 632.191L121.164 633.191L122.164 633.191ZM131.441 633.191L131.441 634.191L132.441 634.191L132.441 633.191L131.441 633.191ZM125.467 631.039L124.659 630.45L124.653 630.458L125.467 631.039ZM125.541 639.296L124.745 639.901L124.75 639.908L125.541 639.296ZM132.369 638.442L132.75 637.518L131.973 637.198L131.524 637.908L132.369 638.442ZM137.008 640.354L137.927 640.746L138.325 639.815L137.389 639.429L137.008 640.354ZM134.002 643.619L133.504 642.752L133.501 642.754L134.002 643.619ZM121.236 642.32L120.539 643.038L120.545 643.043L121.236 642.32ZM118.62 635.474L119.62 635.474L119.62 634.88L118.62 634.88L117.62 634.88L117.62 635.474L118.62 635.474ZM118.62 634.88L119.62 634.88C119.62 632.287 120.424 630.307 121.965 628.83L121.273 628.107L120.582 627.385C118.586 629.298 117.62 631.832 117.62 634.88L118.62 634.88ZM121.273 628.107L121.965 628.83C123.516 627.343 125.572 626.565 128.231 626.565L128.231 625.565L128.231 624.565C125.151 624.565 122.568 625.482 120.582 627.385L121.273 628.107ZM128.231 625.565L128.231 626.565C130.882 626.565 132.812 627.309 134.161 628.679L134.874 627.978L135.587 627.276C133.769 625.43 131.271 624.565 128.231 624.565L128.231 625.565ZM134.874 627.978L134.161 628.679C135.516 630.055 136.249 631.998 136.249 634.639L137.249 634.639L138.249 634.639C138.249 631.614 137.398 629.116 135.587 627.276L134.874 627.978ZM137.249 634.639L136.249 634.639L136.249 636.457L137.249 636.457L138.249 636.457L138.249 634.639L137.249 634.639ZM137.249 636.457L137.249 635.457L122.164 635.457L122.164 636.457L122.164 637.457L137.249 637.457L137.249 636.457ZM122.164 636.457L123.164 636.457L123.164 633.191L122.164 633.191L121.164 633.191L121.164 636.457L122.164 636.457ZM122.164 633.191L122.164 634.191L131.441 634.191L131.441 633.191L131.441 632.191L122.164 632.191L122.164 633.191ZM131.441 633.191L132.441 633.191L132.441 632.932L131.441 632.932L130.441 632.932L130.441 633.191L131.441 633.191ZM131.441 632.932L132.441 632.932C132.441 631.802 132.099 630.794 131.369 629.981L130.625 630.649L129.881 631.318C130.24 631.717 130.441 632.23 130.441 632.932L131.441 632.932ZM130.625 630.649L131.369 629.981C130.579 629.102 129.458 628.74 128.194 628.74L128.194 629.74L128.194 630.74C129.083 630.74 129.582 630.985 129.881 631.318L130.625 630.649ZM128.194 629.74L128.194 628.74C126.727 628.74 125.5 629.295 124.659 630.45L125.467 631.039L126.275 631.628C126.695 631.051 127.286 630.74 128.194 630.74L128.194 629.74ZM125.467 631.039L124.653 630.458C123.882 631.537 123.539 632.876 123.539 634.397L124.539 634.397L125.539 634.397C125.539 633.172 125.814 632.273 126.281 631.62L125.467 631.039ZM124.539 634.397L123.539 634.397L123.539 635.641L124.539 635.641L125.539 635.641L125.539 634.397L124.539 634.397ZM124.539 635.641L123.539 635.641C123.539 637.33 123.9 638.79 124.745 639.901L125.541 639.296L126.337 638.691C125.846 638.045 125.539 637.068 125.539 635.641L124.539 635.641ZM125.541 639.296L124.75 639.908C125.652 641.072 126.951 641.613 128.491 641.613L128.491 640.613L128.491 639.613C127.459 639.613 126.791 639.277 126.332 638.684L125.541 639.296ZM128.491 640.613L128.491 641.613C129.563 641.613 130.542 641.365 131.376 640.819L130.829 639.982L130.282 639.145C129.83 639.441 129.25 639.613 128.491 639.613L128.491 640.613ZM130.829 639.982L131.376 640.819C132.131 640.326 132.749 639.713 133.214 638.977L132.369 638.442L131.524 637.908C131.222 638.384 130.814 638.797 130.282 639.145L130.829 639.982ZM132.369 638.442L131.988 639.367L136.627 641.278L137.008 640.354L137.389 639.429L132.75 637.518L132.369 638.442ZM137.008 640.354L136.088 639.961C135.601 641.1 134.76 642.031 133.504 642.752L134.002 643.619L134.5 644.486C136.089 643.574 137.251 642.329 137.927 640.746L137.008 640.354ZM134.002 643.619L133.501 642.754C132.288 643.456 130.664 643.844 128.565 643.844L128.565 644.844L128.565 645.844C130.895 645.844 132.895 645.415 134.503 644.485L134.002 643.619ZM128.565 644.844L128.565 643.844C125.617 643.844 123.449 643.055 121.928 641.598L121.236 642.32L120.545 643.043C122.536 644.95 125.255 645.844 128.565 645.844L128.565 644.844ZM121.236 642.32L121.933 641.603C120.418 640.13 119.62 638.126 119.62 635.474L118.62 635.474L117.62 635.474C117.62 638.561 118.567 641.121 120.539 643.038L121.236 642.32ZM141.461 634.564L140.892 633.742L140.889 633.744L141.461 634.564ZM147.361 632.969L147.361 631.969L147.356 631.969L147.361 632.969ZM151.443 632.969L151.443 633.969L152.443 633.969L152.443 632.969L151.443 632.969ZM145.914 631.744L145.911 632.744L146.914 632.747L146.914 631.744L145.914 631.744ZM140.292 631.726L139.292 631.726L139.292 632.722L140.289 632.726L140.292 631.726ZM142.686 627.217L143.24 628.049L143.242 628.048L142.686 627.217ZM155.266 627.143L154.677 627.951L154.68 627.953L155.266 627.143ZM157.585 642.339L156.601 642.518L156.603 642.528L156.605 642.538L157.585 642.339ZM158.16 644.064L159.16 644.064L159.16 643.823L159.05 643.608L158.16 644.064ZM158.16 644.343L158.16 645.343L159.16 645.343L159.16 644.343L158.16 644.343ZM152.297 644.343L151.418 644.819L151.701 645.343L152.297 645.343L152.297 644.343ZM151.87 643.248L150.902 643.497L150.905 643.51L150.909 643.523L151.87 643.248ZM151.647 641.931L152.644 641.848L152.383 638.713L150.786 641.423L151.647 641.931ZM149.458 643.805L148.99 642.921L148.986 642.923L149.458 643.805ZM140.941 643.229L140.313 644.007L140.317 644.01L140.941 643.229ZM145.784 640.409L145.077 641.116L145.087 641.126L145.784 640.409ZM150.367 640.075L151.048 640.808L151.049 640.807L150.367 640.075ZM151.443 636.197L152.443 636.197L152.443 635.197L151.443 635.197L151.443 636.197ZM146.007 636.772L145.472 635.927L145.464 635.932L146.007 636.772ZM139.197 639.036L140.197 639.036C140.197 637.414 140.807 636.239 142.033 635.385L141.461 634.564L140.889 633.744C139.097 634.993 138.197 636.798 138.197 639.036L139.197 639.036ZM141.461 634.564L142.029 635.387C143.342 634.48 145.095 633.98 147.366 633.969L147.361 632.969L147.356 631.969C144.803 631.982 142.623 632.546 140.892 633.742L141.461 634.564ZM147.361 632.969L147.361 633.969L151.443 633.969L151.443 632.969L151.443 631.969L147.361 631.969L147.361 632.969ZM151.443 632.969L152.443 632.969L152.443 631.874L151.443 631.874L150.443 631.874L150.443 632.969L151.443 632.969ZM151.443 631.874L152.443 631.874C152.443 630.893 152.196 629.991 151.586 629.289L150.831 629.944L150.076 630.6C150.282 630.838 150.443 631.222 150.443 631.874L151.443 631.874ZM150.831 629.944L151.586 629.289C150.902 628.501 149.856 628.239 148.753 628.239L148.753 629.239L148.753 630.239C149.604 630.239 149.944 630.448 150.076 630.6L150.831 629.944ZM148.753 629.239L148.753 628.239C147.674 628.239 146.669 628.452 145.946 629.077L146.601 629.833L147.255 630.589C147.448 630.422 147.877 630.239 148.753 630.239L148.753 629.239ZM146.601 629.833L145.946 629.077C145.249 629.68 144.914 630.492 144.914 631.41L145.914 631.41L146.914 631.41C146.914 631.018 147.037 630.778 147.255 630.589L146.601 629.833ZM145.914 631.41L144.914 631.41L144.914 631.744L145.914 631.744L146.914 631.744L146.914 631.41L145.914 631.41ZM145.914 631.744L145.917 630.744L140.295 630.726L140.292 631.726L140.289 632.726L145.911 632.744L145.914 631.744ZM140.292 631.726L141.292 631.726L141.292 631.354L140.292 631.354L139.292 631.354L139.292 631.726L140.292 631.726ZM140.292 631.354L141.292 631.354C141.292 630.043 141.88 628.956 143.24 628.049L142.686 627.217L142.131 626.385C140.3 627.605 139.292 629.277 139.292 631.354L140.292 631.354ZM142.686 627.217L143.242 628.048C144.634 627.116 146.559 626.603 149.105 626.603L149.105 625.603L149.105 624.603C146.309 624.603 143.954 625.165 142.129 626.386L142.686 627.217ZM149.105 625.603L149.105 626.603C151.699 626.603 153.508 627.1 154.677 627.951L155.266 627.143L155.854 626.334C154.203 625.132 151.906 624.603 149.105 624.603L149.105 625.603ZM155.266 627.143L154.68 627.953C155.772 628.741 156.399 630.025 156.399 632.041L157.399 632.041L158.399 632.041C158.399 629.579 157.605 627.597 155.851 626.332L155.266 627.143ZM157.399 632.041L156.399 632.041L156.399 640.205L157.399 640.205L158.399 640.205L158.399 632.041L157.399 632.041ZM157.399 640.205L156.399 640.205C156.399 641.003 156.466 641.774 156.601 642.518L157.585 642.339L158.569 642.16C158.457 641.543 158.399 640.892 158.399 640.205L157.399 640.205ZM157.585 642.339L156.605 642.538C156.755 643.274 156.972 643.94 157.27 644.521L158.16 644.064L159.05 643.608C158.853 643.224 158.687 642.74 158.565 642.139L157.585 642.339ZM158.16 644.064L157.16 644.064L157.16 644.343L158.16 644.343L159.16 644.343L159.16 644.064L158.16 644.064ZM158.16 644.343L158.16 643.343L152.297 643.343L152.297 644.343L152.297 645.343L158.16 645.343L158.16 644.343ZM152.297 644.343L153.176 643.866C153.059 643.651 152.942 643.358 152.832 642.973L151.87 643.248L150.909 643.523C151.046 644.004 151.213 644.441 151.418 644.819L152.297 644.343ZM151.87 643.248L152.839 642.999C152.741 642.62 152.676 642.237 152.644 641.848L151.647 641.931L150.651 642.014C150.693 642.515 150.776 643.01 150.902 643.497L151.87 643.248ZM151.647 641.931L150.786 641.423C150.506 641.897 149.951 642.412 148.99 642.921L149.458 643.805L149.926 644.688C151.067 644.084 151.972 643.349 152.509 642.438L151.647 641.931ZM149.458 643.805L148.986 642.923C148.133 643.38 146.997 643.64 145.524 643.64L145.524 644.64L145.524 645.64C147.218 645.64 148.705 645.343 149.93 644.686L149.458 643.805ZM145.524 644.64L145.524 643.64C143.813 643.64 142.523 643.214 141.566 642.449L140.941 643.229L140.317 644.01C141.71 645.125 143.475 645.64 145.524 645.64L145.524 644.64ZM140.941 643.229L141.57 642.452C140.698 641.747 140.197 640.669 140.197 639.036L139.197 639.036L138.197 639.036C138.197 641.114 138.859 642.832 140.313 644.007L140.941 643.229ZM145.116 638.572L144.116 638.572C144.116 639.55 144.402 640.441 145.077 641.116L145.784 640.409L146.491 639.702C146.276 639.487 146.116 639.153 146.116 638.572L145.116 638.572ZM145.784 640.409L145.087 641.126C145.791 641.811 146.772 642.059 147.825 642.059L147.825 641.059L147.825 640.059C147.048 640.059 146.668 639.873 146.481 639.692L145.784 640.409ZM147.825 641.059L147.825 642.059C149.06 642.059 150.152 641.64 151.048 640.808L150.367 640.075L149.686 639.343C149.172 639.821 148.57 640.059 147.825 640.059L147.825 641.059ZM150.367 640.075L151.049 640.807C151.943 639.974 152.443 638.946 152.443 637.756L151.443 637.756L150.443 637.756C150.443 638.323 150.226 638.84 149.686 639.343L150.367 640.075ZM151.443 637.756L152.443 637.756L152.443 636.197L151.443 636.197L150.443 636.197L150.443 637.756L151.443 637.756ZM151.443 636.197L151.443 635.197L148.809 635.197L148.809 636.197L148.809 637.197L151.443 637.197L151.443 636.197ZM148.809 636.197L148.809 635.197C147.483 635.197 146.319 635.392 145.472 635.927L146.007 636.772L146.541 637.618C146.907 637.386 147.611 637.197 148.809 637.197L148.809 636.197ZM146.007 636.772L145.464 635.932C144.537 636.531 144.116 637.478 144.116 638.572L145.116 638.572L146.116 638.572C146.116 638.034 146.289 637.781 146.549 637.613L146.007 636.772ZM161.37 644.343L160.37 644.343L160.37 645.343L161.37 645.343L161.37 644.343ZM161.37 626.104L161.37 625.104L160.37 625.104L160.37 626.104L161.37 626.104ZM167.159 626.104L168.159 626.079L168.135 625.104L167.159 625.104L167.159 626.104ZM167.215 628.386L166.215 628.41L166.239 629.386L167.215 629.386L167.215 628.386ZM167.289 628.386L167.289 629.386L167.863 629.386L168.152 628.89L167.289 628.386ZM169.441 626.438L169.898 627.327L169.902 627.325L169.441 626.438ZM177.457 627.254L178.124 626.509L177.457 627.254ZM179.22 644.343L179.22 645.343L180.22 645.343L180.22 644.343L179.22 644.343ZM173.264 644.343L172.264 644.343L172.264 645.343L173.264 645.343L173.264 644.343ZM172.559 630.835L171.851 631.542L171.861 631.552L171.871 631.561L172.559 630.835ZM168.662 630.779L168.076 629.969L168.662 630.779ZM167.326 632.468L166.41 632.066L166.326 632.258L166.326 632.468L167.326 632.468ZM167.326 644.343L167.326 645.343L168.326 645.343L168.326 644.343L167.326 644.343ZM161.37 644.343L162.37 644.343L162.37 626.104L161.37 626.104L160.37 626.104L160.37 644.343L161.37 644.343ZM161.37 626.104L161.37 627.104L167.159 627.104L167.159 626.104L167.159 625.104L161.37 625.104L161.37 626.104ZM167.159 626.104L166.159 626.128L166.215 628.41L167.215 628.386L168.215 628.361L168.159 626.079L167.159 626.104ZM167.215 628.386L167.215 629.386L167.289 629.386L167.289 628.386L167.289 627.386L167.215 627.386L167.215 628.386ZM167.289 628.386L168.152 628.89C168.511 628.276 169.074 627.75 169.898 627.327L169.441 626.438L168.985 625.548C167.879 626.115 167.007 626.887 166.426 627.881L167.289 628.386ZM169.441 626.438L169.902 627.325C170.712 626.905 171.693 626.677 172.874 626.677L172.874 625.677L172.874 624.677C171.433 624.677 170.125 624.956 168.981 625.55L169.441 626.438ZM172.874 625.677L172.874 626.677C174.558 626.677 175.833 627.142 176.79 627.999L177.457 627.254L178.124 626.509C176.731 625.263 174.95 624.677 172.874 624.677L172.874 625.677ZM177.457 627.254L176.79 627.999C177.654 628.772 178.22 630.21 178.22 632.616L179.22 632.616L180.22 632.616C180.22 629.975 179.61 627.838 178.124 626.509L177.457 627.254ZM179.22 632.616L178.22 632.616L178.22 644.343L179.22 644.343L180.22 644.343L180.22 632.616L179.22 632.616ZM179.22 644.343L179.22 643.343L173.264 643.343L173.264 644.343L173.264 645.343L179.22 645.343L179.22 644.343ZM173.264 644.343L174.264 644.343L174.264 633.136L173.264 633.136L172.264 633.136L172.264 644.343L173.264 644.343ZM173.264 633.136L174.264 633.136C174.264 631.95 174.016 630.838 173.246 630.109L172.559 630.835L171.871 631.561C172.042 631.723 172.264 632.144 172.264 633.136L173.264 633.136ZM172.559 630.835L173.266 630.128C172.569 629.431 171.634 629.148 170.61 629.148L170.61 630.148L170.61 631.148C171.269 631.148 171.633 631.323 171.851 631.542L172.559 630.835ZM170.61 630.148L170.61 629.148C169.682 629.148 168.828 629.425 168.076 629.969L168.662 630.779L169.248 631.59C169.659 631.292 170.103 631.148 170.61 631.148L170.61 630.148ZM168.662 630.779L168.076 629.969C167.34 630.502 166.786 631.21 166.41 632.066L167.326 632.468L168.242 632.869C168.485 632.315 168.822 631.898 169.248 631.59L168.662 630.779ZM167.326 632.468L166.326 632.468L166.326 644.343L167.326 644.343L168.326 644.343L168.326 632.468L167.326 632.468ZM167.326 644.343L167.326 643.343L161.37 643.343L161.37 644.343L161.37 645.343L167.326 645.343L167.326 644.343ZM182.801 626.104L182.801 625.104L181.801 625.104L181.801 626.104L182.801 626.104ZM188.775 626.104L189.775 626.104L189.775 625.104L188.775 625.104L188.775 626.104ZM189.48 639.686L188.783 640.402L188.793 640.412L189.48 639.686ZM194.694 638.016L195.602 638.436L195.694 638.236L195.694 638.016L194.694 638.016ZM194.694 626.104L194.694 625.104L193.694 625.104L193.694 626.104L194.694 626.104ZM200.65 626.104L201.65 626.104L201.65 625.104L200.65 625.104L200.65 626.104ZM200.65 644.343L200.65 645.343L201.65 645.343L201.65 644.343L200.65 644.343ZM194.88 644.343L193.88 644.375L193.912 645.343L194.88 645.343L194.88 644.343ZM194.806 642.042L195.805 642.01L195.774 641.042L194.806 641.042L194.806 642.042ZM194.75 642.042L194.75 641.042L194.197 641.042L193.903 641.511L194.75 642.042ZM192.505 644.027L192.053 643.135L192.049 643.138L192.505 644.027ZM184.545 643.137L183.857 643.863L183.861 643.867L184.545 643.137ZM182.801 637.7L183.801 637.7L183.801 626.104L182.801 626.104L181.801 626.104L181.801 637.7L182.801 637.7ZM182.801 626.104L182.801 627.104L188.775 627.104L188.775 626.104L188.775 625.104L182.801 625.104L182.801 626.104ZM188.775 626.104L187.775 626.104L187.775 637.273L188.775 637.273L189.775 637.273L189.775 626.104L188.775 626.104ZM188.775 637.273L187.775 637.273C187.775 638.505 188.017 639.656 188.783 640.402L189.48 639.686L190.178 638.969C190.004 638.8 189.775 638.343 189.775 637.273L188.775 637.273ZM189.48 639.686L188.793 640.412C189.496 641.078 190.419 641.354 191.429 641.354L191.429 640.354L191.429 639.354C190.781 639.354 190.405 639.184 190.168 638.96L189.48 639.686ZM191.429 640.354L191.429 641.354C192.379 641.354 193.246 641.058 193.993 640.473L193.377 639.686L192.761 638.898C192.369 639.204 191.938 639.354 191.429 639.354L191.429 640.354ZM193.377 639.686L193.993 640.473C194.689 639.928 195.227 639.245 195.602 638.436L194.694 638.016L193.787 637.596C193.543 638.122 193.202 638.552 192.761 638.898L193.377 639.686ZM194.694 638.016L195.694 638.016L195.694 626.104L194.694 626.104L193.694 626.104L193.694 638.016L194.694 638.016ZM194.694 626.104L194.694 627.104L200.65 627.104L200.65 626.104L200.65 625.104L194.694 625.104L194.694 626.104ZM200.65 626.104L199.65 626.104L199.65 644.343L200.65 644.343L201.65 644.343L201.65 626.104L200.65 626.104ZM200.65 644.343L200.65 643.343L194.88 643.343L194.88 644.343L194.88 645.343L200.65 645.343L200.65 644.343ZM194.88 644.343L195.879 644.311L195.805 642.01L194.806 642.042L193.806 642.074L193.88 644.375L194.88 644.343ZM194.806 642.042L194.806 641.042L194.75 641.042L194.75 642.042L194.75 643.042L194.806 643.042L194.806 642.042ZM194.75 642.042L193.903 641.511C193.491 642.168 192.888 642.712 192.053 643.135L192.505 644.027L192.957 644.92C194.076 644.353 194.97 643.574 195.597 642.573L194.75 642.042ZM192.505 644.027L192.049 643.138C191.253 643.546 190.272 643.77 189.072 643.77L189.072 644.77L189.072 645.77C190.52 645.77 191.827 645.499 192.961 644.917L192.505 644.027ZM189.072 644.77L189.072 643.77C187.426 643.77 186.176 643.293 185.228 642.407L184.545 643.137L183.861 643.867C185.24 645.157 187.008 645.77 189.072 645.77L189.072 644.77ZM184.545 643.137L185.232 642.411C184.359 641.583 183.801 640.103 183.801 637.7L182.801 637.7L181.801 637.7C181.801 640.344 182.405 642.488 183.857 643.863L184.545 643.137ZM202.691 630.408L201.691 630.408L201.691 631.408L202.691 631.408L202.691 630.408ZM202.691 626.104L202.691 625.104L201.691 625.104L201.691 626.104L202.691 626.104ZM215.03 626.104L216.03 626.104L216.03 625.104L215.03 625.104L215.03 626.104ZM215.03 630.408L215.03 631.408L216.03 631.408L216.03 630.408L215.03 630.408ZM205.475 627.532L204.517 627.245L204.475 627.385L204.475 627.532L205.475 627.532ZM205.586 627.161L206.544 627.448L206.586 627.308L206.586 627.161L205.586 627.161ZM205.586 620.927L205.586 619.927L204.586 619.927L204.586 620.927L205.586 620.927ZM211.356 620.927L212.356 620.927L212.356 619.927L211.356 619.927L211.356 620.927ZM211.839 639.982L211.106 640.663L211.839 639.982ZM214.177 640.428L214.348 641.413L214.369 641.409L214.389 641.405L214.177 640.428ZM215.012 640.168L216.012 640.168L216.012 638.678L214.633 639.242L215.012 640.168ZM215.012 644.287L215.371 645.22L216.012 644.974L216.012 644.287L215.012 644.287ZM207.015 643.378L206.33 644.107L206.339 644.115L207.015 643.378ZM202.691 630.408L203.691 630.408L203.691 626.104L202.691 626.104L201.691 626.104L201.691 630.408L202.691 630.408ZM202.691 626.104L202.691 627.104L215.03 627.104L215.03 626.104L215.03 625.104L202.691 625.104L202.691 626.104ZM215.03 626.104L214.03 626.104L214.03 630.408L215.03 630.408L216.03 630.408L216.03 626.104L215.03 626.104ZM215.03 630.408L215.03 629.408L202.691 629.408L202.691 630.408L202.691 631.408L215.03 631.408L215.03 630.408ZM205.475 638.758L206.475 638.758L206.475 627.532L205.475 627.532L204.475 627.532L204.475 638.758L205.475 638.758ZM205.475 627.532L206.432 627.82L206.544 627.448L205.586 627.161L204.628 626.874L204.517 627.245L205.475 627.532ZM205.586 627.161L206.586 627.161L206.586 620.927L205.586 620.927L204.586 620.927L204.586 627.161L205.586 627.161ZM205.586 620.927L205.586 621.927L211.356 621.927L211.356 620.927L211.356 619.927L205.586 619.927L205.586 620.927ZM211.356 620.927L210.356 620.927L210.356 637.867L211.356 637.867L212.356 637.867L212.356 620.927L211.356 620.927ZM211.356 637.867L210.356 637.867C210.356 638.442 210.399 638.965 210.502 639.416C210.603 639.857 210.779 640.31 211.106 640.663L211.839 639.982L212.572 639.302C212.578 639.308 212.512 639.236 212.452 638.971C212.394 638.717 212.356 638.356 212.356 637.867L211.356 637.867ZM211.839 639.982L211.106 640.663C211.678 641.278 212.469 641.502 213.286 641.502L213.286 640.502L213.286 639.502C212.817 639.502 212.643 639.379 212.572 639.302L211.839 639.982ZM213.286 640.502L213.286 641.502C213.649 641.502 214.003 641.473 214.348 641.413L214.177 640.428L214.005 639.443C213.781 639.481 213.542 639.502 213.286 639.502L213.286 640.502ZM214.177 640.428L214.389 641.405C214.731 641.331 215.065 641.227 215.39 641.094L215.012 640.168L214.633 639.242C214.414 639.332 214.191 639.401 213.964 639.451L214.177 640.428ZM215.012 640.168L214.012 640.168L214.012 644.287L215.012 644.287L216.012 644.287L216.012 640.168L215.012 640.168ZM215.012 644.287L214.653 643.354C214.422 643.443 214.021 643.547 213.409 643.655L213.583 644.64L213.757 645.624C214.407 645.51 214.958 645.379 215.371 645.22L215.012 644.287ZM213.583 644.64L213.409 643.655C212.852 643.753 212.164 643.807 211.338 643.807L211.338 644.807L211.338 645.807C212.243 645.807 213.053 645.749 213.757 645.624L213.583 644.64ZM211.338 644.807L211.338 643.807C209.666 643.807 208.494 643.377 207.69 642.641L207.015 643.378L206.339 644.115C207.613 645.283 209.324 645.807 211.338 645.807L211.338 644.807ZM207.015 643.378L207.699 642.649C206.956 641.951 206.475 640.735 206.475 638.758L205.475 638.758L204.475 638.758C204.475 641.011 205.02 642.875 206.33 644.107L207.015 643.378ZM226.979 644.343L225.979 644.343L225.979 645.343L226.979 645.343L226.979 644.343ZM226.979 617.327L226.979 616.327L225.979 616.327L225.979 617.327L226.979 617.327ZM244.588 619.758L243.867 620.451L243.87 620.454L244.588 619.758ZM244.606 632.95L243.88 632.263L243.88 632.263L244.606 632.95ZM233.14 635.381L233.14 634.381L232.14 634.381L232.14 635.381L233.14 635.381ZM233.14 644.343L233.14 645.343L234.14 645.343L234.14 644.343L233.14 644.343ZM233.14 631.039L232.14 631.039L232.14 632.039L233.14 632.039L233.14 631.039ZM239.894 629.759L240.714 630.33L240.718 630.324L239.894 629.759ZM239.894 623.135L239.073 623.706L239.077 623.711L239.894 623.135ZM233.14 621.854L233.14 620.854L232.14 620.854L232.14 621.854L233.14 621.854ZM226.979 644.343L227.979 644.343L227.979 617.327L226.979 617.327L225.979 617.327L225.979 644.343L226.979 644.343ZM226.979 617.327L226.979 618.327L237.853 618.327L237.853 617.327L237.853 616.327L226.979 616.327L226.979 617.327ZM237.853 617.327L237.853 618.327C240.599 618.327 242.55 619.081 243.867 620.451L244.588 619.758L245.309 619.065C243.509 617.193 240.97 616.327 237.853 616.327L237.853 617.327ZM244.588 619.758L243.87 620.454C245.206 621.832 245.926 623.755 245.926 626.345L246.926 626.345L247.926 626.345C247.926 623.368 247.087 620.899 245.306 619.062L244.588 619.758ZM246.926 626.345L245.926 626.345C245.926 628.922 245.212 630.856 243.88 632.263L244.606 632.95L245.333 633.638C247.093 631.778 247.926 629.309 247.926 626.345L246.926 626.345ZM244.606 632.95L243.88 632.263C242.595 633.621 240.622 634.381 237.778 634.381L237.778 635.381L237.778 636.381C240.971 636.381 243.551 635.52 245.333 633.638L244.606 632.95ZM237.778 635.381L237.778 634.381L233.14 634.381L233.14 635.381L233.14 636.381L237.778 636.381L237.778 635.381ZM233.14 635.381L232.14 635.381L232.14 644.343L233.14 644.343L234.14 644.343L234.14 635.381L233.14 635.381ZM233.14 644.343L233.14 643.343L226.979 643.343L226.979 644.343L226.979 645.343L233.14 645.343L233.14 644.343ZM233.14 631.039L233.14 632.039L236.721 632.039L236.721 631.039L236.721 630.039L233.14 630.039L233.14 631.039ZM236.721 631.039L236.721 632.039C238.409 632.039 239.858 631.562 240.714 630.33L239.894 629.759L239.073 629.188C238.742 629.663 238.076 630.039 236.721 630.039L236.721 631.039ZM239.894 629.759L240.718 630.324C241.456 629.249 241.784 627.922 241.784 626.419L240.784 626.419L239.784 626.419C239.784 627.637 239.519 628.537 239.069 629.193L239.894 629.759ZM240.784 626.419L241.784 626.419C241.784 624.928 241.455 623.613 240.711 622.558L239.894 623.135L239.077 623.711C239.519 624.339 239.784 625.214 239.784 626.419L240.784 626.419ZM239.894 623.135L240.714 622.564C239.858 621.332 238.409 620.854 236.721 620.854L236.721 621.854L236.721 622.854C238.076 622.854 238.742 623.231 239.073 623.706L239.894 623.135ZM236.721 621.854L236.721 620.854L233.14 620.854L233.14 621.854L233.14 622.854L236.721 622.854L236.721 621.854ZM233.14 621.854L232.14 621.854L232.14 631.039L233.14 631.039L234.14 631.039L234.14 621.854L233.14 621.854ZM249.635 644.343L248.635 644.343L248.635 645.343L249.635 645.343L249.635 644.343ZM249.635 626.104L249.635 625.104L248.635 625.104L248.635 626.104L249.635 626.104ZM255.665 626.104L256.665 626.104L256.665 625.104L255.665 625.104L255.665 626.104ZM255.665 644.343L255.665 645.343L256.665 645.343L256.665 644.343L255.665 644.343ZM250.136 618.181L250.843 618.888L250.85 618.88L250.136 618.181ZM255.183 618.162L255.897 617.462L255.183 618.162ZM249.635 644.343L250.635 644.343L250.635 626.104L249.635 626.104L248.635 626.104L248.635 644.343L249.635 644.343ZM249.635 626.104L249.635 627.104L255.665 627.104L255.665 626.104L255.665 625.104L249.635 625.104L249.635 626.104ZM255.665 626.104L254.665 626.104L254.665 644.343L255.665 644.343L256.665 644.343L256.665 626.104L255.665 626.104ZM255.665 644.343L255.665 643.343L249.635 643.343L249.635 644.343L249.635 645.343L255.665 645.343L255.665 644.343ZM249.245 620.37L250.245 620.37C250.245 619.76 250.443 619.288 250.843 618.888L250.136 618.181L249.429 617.474C248.641 618.261 248.245 619.248 248.245 620.37L249.245 620.37ZM250.136 618.181L250.85 618.88C251.204 618.519 251.762 618.271 252.678 618.271L252.678 617.271L252.678 616.271C251.392 616.271 250.255 616.63 249.421 617.481L250.136 618.181ZM252.678 617.271L252.678 618.271C253.584 618.271 254.128 618.514 254.468 618.862L255.183 618.162L255.897 617.462C255.074 616.622 253.948 616.271 252.678 616.271L252.678 617.271ZM255.183 618.162L254.468 618.862C254.855 619.257 255.055 619.737 255.055 620.37L256.055 620.37L257.055 620.37C257.055 619.247 256.673 618.255 255.897 617.462L255.183 618.162ZM256.055 620.37L255.055 620.37C255.055 620.98 254.856 621.463 254.45 621.878L255.164 622.578L255.878 623.278C256.659 622.481 257.055 621.492 257.055 620.37L256.055 620.37ZM255.164 622.578L254.45 621.878C254.093 622.242 253.54 622.487 252.641 622.487L252.641 623.487L252.641 624.487C253.918 624.487 255.047 624.126 255.878 623.278L255.164 622.578ZM252.641 623.487L252.641 622.487C251.724 622.487 251.178 622.24 250.839 621.886L250.117 622.578L249.396 623.27C250.219 624.129 251.356 624.487 252.641 624.487L252.641 623.487ZM250.117 622.578L250.839 621.886C250.442 621.472 250.245 620.987 250.245 620.37L249.245 620.37L248.245 620.37C248.245 621.485 248.629 622.472 249.396 623.27L250.117 622.578ZM261.436 628.107L262.117 628.839L262.12 628.836L261.436 628.107ZM275.778 628.107L275.091 628.834L275.097 628.839L275.778 628.107ZM275.778 642.302L276.463 643.031L276.463 643.031L275.778 642.302ZM261.417 642.302L260.73 643.029L260.735 643.033L261.417 642.302ZM265.74 639.277L264.947 639.887L264.952 639.893L264.957 639.899L265.74 639.277ZM271.455 639.277L270.668 638.661L270.666 638.663L271.455 639.277ZM271.455 631.15L270.672 631.772L270.676 631.778L271.455 631.15ZM265.759 631.15L266.537 631.778L266.542 631.772L265.759 631.15ZM258.708 635.492L259.708 635.492L259.708 634.898L258.708 634.898L257.708 634.898L257.708 635.492L258.708 635.492ZM258.708 634.898L259.708 634.898C259.708 632.301 260.531 630.317 262.117 628.839L261.436 628.107L260.754 627.376C258.703 629.287 257.708 631.831 257.708 634.898L258.708 634.898ZM261.436 628.107L262.12 628.836C263.719 627.336 265.85 626.547 268.616 626.547L268.616 625.547L268.616 624.547C265.445 624.547 262.789 625.465 260.751 627.378L261.436 628.107ZM268.616 625.547L268.616 626.547C271.382 626.547 273.506 627.336 275.091 628.834L275.778 628.107L276.465 627.381C274.438 625.465 271.788 624.547 268.616 624.547L268.616 625.547ZM275.778 628.107L275.097 628.839C276.683 630.317 277.506 632.301 277.506 634.898L278.506 634.898L279.506 634.898C279.506 631.831 278.511 629.287 276.46 627.376L275.778 628.107ZM278.506 634.898L277.506 634.898L277.506 635.492L278.506 635.492L279.506 635.492L279.506 634.898L278.506 634.898ZM278.506 635.492L277.506 635.492C277.506 638.09 276.683 640.081 275.094 641.573L275.778 642.302L276.463 643.031C278.511 641.108 279.506 638.56 279.506 635.492L278.506 635.492ZM275.778 642.302L275.094 641.573C273.509 643.06 271.384 643.844 268.616 643.844L268.616 644.844L268.616 645.844C271.786 645.844 274.436 644.933 276.463 643.031L275.778 642.302ZM268.616 644.844L268.616 643.844C265.835 643.844 263.696 643.059 262.099 641.57L261.417 642.302L260.735 643.033C262.774 644.934 265.435 645.844 268.616 645.844L268.616 644.844ZM261.417 642.302L262.104 641.575C260.526 640.084 259.708 638.092 259.708 635.492L258.708 635.492L257.708 635.492C257.708 638.558 258.696 641.105 260.73 643.029L261.417 642.302ZM264.757 634.639L263.757 634.639L263.757 635.733L264.757 635.733L265.757 635.733L265.757 634.639L264.757 634.639ZM264.757 635.733L263.757 635.733C263.757 637.376 264.113 638.8 264.947 639.887L265.74 639.277L266.533 638.668C266.057 638.048 265.757 637.109 265.757 635.733L264.757 635.733ZM265.74 639.277L264.957 639.899C265.845 641.017 267.108 641.539 268.598 641.539L268.598 640.539L268.598 639.539C267.614 639.539 266.971 639.22 266.523 638.655L265.74 639.277ZM268.598 640.539L268.598 641.539C270.096 641.539 271.365 641.02 272.244 639.892L271.455 639.277L270.666 638.663C270.234 639.217 269.598 639.539 268.598 639.539L268.598 640.539ZM271.455 639.277L272.243 639.894C273.093 638.807 273.457 637.38 273.457 635.733L272.457 635.733L271.457 635.733C271.457 637.105 271.153 638.041 270.668 638.661L271.455 639.277ZM272.457 635.733L273.457 635.733L273.457 634.639L272.457 634.639L271.457 634.639L271.457 635.733L272.457 635.733ZM272.457 634.639L273.457 634.639C273.457 633.005 273.093 631.589 272.234 630.523L271.455 631.15L270.676 631.778C271.153 632.369 271.457 633.279 271.457 634.639L272.457 634.639ZM271.455 631.15L272.238 630.529C271.35 629.41 270.088 628.889 268.598 628.889L268.598 629.889L268.598 630.889C269.582 630.889 270.224 631.208 270.672 631.772L271.455 631.15ZM268.598 629.889L268.598 628.889C267.116 628.889 265.861 629.413 264.976 630.529L265.759 631.15L266.542 631.772C266.992 631.205 267.63 630.889 268.598 630.889L268.598 629.889ZM265.759 631.15L264.98 630.523C264.121 631.589 263.757 633.005 263.757 634.639L264.757 634.639L265.757 634.639C265.757 633.279 266.061 632.369 266.537 631.778L265.759 631.15ZM281.493 644.343L280.493 644.343L280.493 645.343L281.493 645.343L281.493 644.343ZM281.493 626.104L281.493 625.104L280.493 625.104L280.493 626.104L281.493 626.104ZM287.282 626.104L288.282 626.079L288.258 625.104L287.282 625.104L287.282 626.104ZM287.338 628.386L286.338 628.41L286.362 629.386L287.338 629.386L287.338 628.386ZM287.412 628.386L287.412 629.386L287.986 629.386L288.275 628.89L287.412 628.386ZM289.564 626.438L290.021 627.327L290.025 627.325L289.564 626.438ZM297.58 627.254L298.247 626.509L297.58 627.254ZM299.343 644.343L299.343 645.343L300.343 645.343L300.343 644.343L299.343 644.343ZM293.387 644.343L292.387 644.343L292.387 645.343L293.387 645.343L293.387 644.343ZM292.682 630.835L291.975 631.542L291.984 631.552L291.994 631.561L292.682 630.835ZM288.785 630.779L288.199 629.969L288.785 630.779ZM287.449 632.468L286.533 632.066L286.449 632.258L286.449 632.468L287.449 632.468ZM287.449 644.343L287.449 645.343L288.449 645.343L288.449 644.343L287.449 644.343ZM281.493 644.343L282.493 644.343L282.493 626.104L281.493 626.104L280.493 626.104L280.493 644.343L281.493 644.343ZM281.493 626.104L281.493 627.104L287.282 627.104L287.282 626.104L287.282 625.104L281.493 625.104L281.493 626.104ZM287.282 626.104L286.283 626.128L286.338 628.41L287.338 628.386L288.338 628.361L288.282 626.079L287.282 626.104ZM287.338 628.386L287.338 629.386L287.412 629.386L287.412 628.386L287.412 627.386L287.338 627.386L287.338 628.386ZM287.412 628.386L288.275 628.89C288.634 628.276 289.197 627.75 290.021 627.327L289.564 626.438L289.108 625.548C288.002 626.115 287.13 626.887 286.549 627.881L287.412 628.386ZM289.564 626.438L290.025 627.325C290.835 626.905 291.816 626.677 292.997 626.677L292.997 625.677L292.997 624.677C291.556 624.677 290.248 624.956 289.104 625.55L289.564 626.438ZM292.997 625.677L292.997 626.677C294.681 626.677 295.956 627.142 296.913 627.999L297.58 627.254L298.247 626.509C296.854 625.263 295.073 624.677 292.997 624.677L292.997 625.677ZM297.58 627.254L296.913 627.999C297.777 628.772 298.343 630.21 298.343 632.616L299.343 632.616L300.343 632.616C300.343 629.976 299.733 627.838 298.247 626.509L297.58 627.254ZM299.343 632.616L298.343 632.616L298.343 644.343L299.343 644.343L300.343 644.343L300.343 632.616L299.343 632.616ZM299.343 644.343L299.343 643.343L293.387 643.343L293.387 644.343L293.387 645.343L299.343 645.343L299.343 644.343ZM293.387 644.343L294.387 644.343L294.387 633.136L293.387 633.136L292.387 633.136L292.387 644.343L293.387 644.343ZM293.387 633.136L294.387 633.136C294.387 631.95 294.139 630.838 293.369 630.109L292.682 630.835L291.994 631.561C292.165 631.723 292.387 632.144 292.387 633.136L293.387 633.136ZM292.682 630.835L293.389 630.128C292.692 629.431 291.757 629.148 290.733 629.148L290.733 630.148L290.733 631.148C291.392 631.148 291.756 631.323 291.975 631.542L292.682 630.835ZM290.733 630.148L290.733 629.148C289.805 629.148 288.951 629.425 288.199 629.969L288.785 630.779L289.371 631.59C289.782 631.292 290.226 631.148 290.733 631.148L290.733 630.148ZM288.785 630.779L288.199 629.969C287.463 630.502 286.909 631.21 286.533 632.066L287.449 632.468L288.365 632.869C288.608 632.315 288.945 631.898 289.371 631.59L288.785 630.779ZM287.449 632.468L286.449 632.468L286.449 644.343L287.449 644.343L288.449 644.343L288.449 632.468L287.449 632.468ZM287.449 644.343L287.449 643.343L281.493 643.343L281.493 644.343L281.493 645.343L287.449 645.343L287.449 644.343ZM304.816 628.107L305.508 628.83L304.816 628.107ZM320.792 636.457L320.792 637.457L321.792 637.457L321.792 636.457L320.792 636.457ZM305.707 636.457L304.707 636.457L304.707 637.457L305.707 637.457L305.707 636.457ZM305.707 633.191L305.707 632.191L304.707 632.191L304.707 633.191L305.707 633.191ZM314.984 633.191L314.984 634.191L315.984 634.191L315.984 633.191L314.984 633.191ZM309.01 631.039L308.201 630.45L308.196 630.458L309.01 631.039ZM309.084 639.296L308.288 639.901L308.293 639.908L309.084 639.296ZM315.912 638.442L316.293 637.518L315.516 637.198L315.067 637.908L315.912 638.442ZM320.551 640.354L321.47 640.746L321.868 639.815L320.932 639.429L320.551 640.354ZM317.545 643.619L317.047 642.752L317.044 642.754L317.545 643.619ZM304.779 642.32L304.082 643.038L304.088 643.043L304.779 642.32ZM302.163 635.474L303.163 635.474L303.163 634.88L302.163 634.88L301.163 634.88L301.163 635.474L302.163 635.474ZM302.163 634.88L303.163 634.88C303.163 632.287 303.967 630.307 305.508 628.83L304.816 628.107L304.125 627.385C302.129 629.298 301.163 631.832 301.163 634.88L302.163 634.88ZM304.816 628.107L305.508 628.83C307.059 627.343 309.115 626.565 311.774 626.565L311.774 625.565L311.774 624.565C308.694 624.565 306.111 625.482 304.125 627.385L304.816 628.107ZM311.774 625.565L311.774 626.565C314.425 626.565 316.355 627.309 317.704 628.679L318.417 627.978L319.13 627.276C317.312 625.43 314.814 624.565 311.774 624.565L311.774 625.565ZM318.417 627.978L317.704 628.679C319.059 630.055 319.792 631.998 319.792 634.639L320.792 634.639L321.792 634.639C321.792 631.614 320.941 629.116 319.13 627.276L318.417 627.978ZM320.792 634.639L319.792 634.639L319.792 636.457L320.792 636.457L321.792 636.457L321.792 634.639L320.792 634.639ZM320.792 636.457L320.792 635.457L305.707 635.457L305.707 636.457L305.707 637.457L320.792 637.457L320.792 636.457ZM305.707 636.457L306.707 636.457L306.707 633.191L305.707 633.191L304.707 633.191L304.707 636.457L305.707 636.457ZM305.707 633.191L305.707 634.191L314.984 634.191L314.984 633.191L314.984 632.191L305.707 632.191L305.707 633.191ZM314.984 633.191L315.984 633.191L315.984 632.932L314.984 632.932L313.984 632.932L313.984 633.191L314.984 633.191ZM314.984 632.932L315.984 632.932C315.984 631.802 315.642 630.794 314.912 629.981L314.168 630.649L313.424 631.318C313.783 631.717 313.984 632.23 313.984 632.932L314.984 632.932ZM314.168 630.649L314.912 629.981C314.122 629.102 313.001 628.74 311.737 628.74L311.737 629.74L311.737 630.74C312.626 630.74 313.125 630.985 313.424 631.318L314.168 630.649ZM311.737 629.74L311.737 628.74C310.27 628.74 309.043 629.295 308.202 630.45L309.01 631.039L309.818 631.628C310.238 631.051 310.829 630.74 311.737 630.74L311.737 629.74ZM309.01 631.039L308.196 630.458C307.425 631.537 307.082 632.876 307.082 634.397L308.082 634.397L309.082 634.397C309.082 633.172 309.357 632.273 309.824 631.62L309.01 631.039ZM308.082 634.397L307.082 634.397L307.082 635.641L308.082 635.641L309.082 635.641L309.082 634.397L308.082 634.397ZM308.082 635.641L307.082 635.641C307.082 637.33 307.443 638.79 308.288 639.901L309.084 639.296L309.88 638.691C309.389 638.045 309.082 637.068 309.082 635.641L308.082 635.641ZM309.084 639.296L308.293 639.908C309.195 641.072 310.494 641.613 312.034 641.613L312.034 640.613L312.034 639.613C311.002 639.613 310.334 639.277 309.875 638.684L309.084 639.296ZM312.034 640.613L312.034 641.613C313.106 641.613 314.084 641.365 314.919 640.819L314.372 639.982L313.825 639.145C313.373 639.441 312.793 639.613 312.034 639.613L312.034 640.613ZM314.372 639.982L314.919 640.819C315.674 640.326 316.292 639.713 316.757 638.977L315.912 638.442L315.067 637.908C314.765 638.384 314.357 638.798 313.825 639.145L314.372 639.982ZM315.912 638.442L315.531 639.367L320.17 641.278L320.551 640.354L320.932 639.429L316.293 637.518L315.912 638.442ZM320.551 640.354L319.631 639.961C319.144 641.1 318.303 642.031 317.047 642.752L317.545 643.619L318.043 644.486C319.632 643.574 320.794 642.329 321.47 640.746L320.551 640.354ZM317.545 643.619L317.044 642.754C315.831 643.456 314.207 643.844 312.108 643.844L312.108 644.844L312.108 645.844C314.438 645.844 316.438 645.415 318.046 644.485L317.545 643.619ZM312.108 644.844L312.108 643.844C309.16 643.844 306.992 643.055 305.471 641.598L304.779 642.32L304.088 643.043C306.079 644.95 308.798 645.844 312.108 645.844L312.108 644.844ZM304.779 642.32L305.476 641.603C303.961 640.13 303.163 638.126 303.163 635.474L302.163 635.474L301.163 635.474C301.163 638.561 302.11 641.121 304.082 643.038L304.779 642.32ZM325.338 628.107L326.03 628.83L325.338 628.107ZM341.313 636.457L341.313 637.457L342.313 637.457L342.313 636.457L341.313 636.457ZM326.229 636.457L325.229 636.457L325.229 637.457L326.229 637.457L326.229 636.457ZM326.229 633.191L326.229 632.191L325.229 632.191L325.229 633.191L326.229 633.191ZM335.506 633.191L335.506 634.191L336.506 634.191L336.506 633.191L335.506 633.191ZM329.531 631.039L328.723 630.45L328.718 630.458L329.531 631.039ZM329.605 639.296L328.809 639.901L328.815 639.908L329.605 639.296ZM336.434 638.442L336.815 637.518L336.038 637.198L335.589 637.908L336.434 638.442ZM341.072 640.354L341.992 640.746L342.39 639.815L341.453 639.429L341.072 640.354ZM338.066 643.619L337.569 642.752L337.565 642.754L338.066 643.619ZM325.301 642.32L324.604 643.038L324.609 643.043L325.301 642.32ZM322.685 635.474L323.685 635.474L323.685 634.88L322.685 634.88L321.685 634.88L321.685 635.474L322.685 635.474ZM322.685 634.88L323.685 634.88C323.685 632.287 324.488 630.307 326.03 628.83L325.338 628.107L324.646 627.385C322.65 629.298 321.685 631.832 321.685 634.88L322.685 634.88ZM325.338 628.107L326.03 628.83C327.581 627.343 329.637 626.565 332.296 626.565L332.296 625.565L332.296 624.565C329.216 624.565 326.633 625.482 324.646 627.385L325.338 628.107ZM332.296 625.565L332.296 626.565C334.947 626.565 336.877 627.309 338.226 628.679L338.938 627.978L339.651 627.276C337.834 625.43 335.335 624.565 332.296 624.565L332.296 625.565ZM338.938 627.978L338.226 628.679C339.581 630.055 340.313 631.998 340.313 634.639L341.313 634.639L342.313 634.639C342.313 631.614 341.463 629.116 339.651 627.276L338.938 627.978ZM341.313 634.639L340.313 634.639L340.313 636.457L341.313 636.457L342.313 636.457L342.313 634.639L341.313 634.639ZM341.313 636.457L341.313 635.457L326.229 635.457L326.229 636.457L326.229 637.457L341.313 637.457L341.313 636.457ZM326.229 636.457L327.229 636.457L327.229 633.191L326.229 633.191L325.229 633.191L325.229 636.457L326.229 636.457ZM326.229 633.191L326.229 634.191L335.506 634.191L335.506 633.191L335.506 632.191L326.229 632.191L326.229 633.191ZM335.506 633.191L336.506 633.191L336.506 632.932L335.506 632.932L334.506 632.932L334.506 633.191L335.506 633.191ZM335.506 632.932L336.506 632.932C336.506 631.802 336.163 630.794 335.434 629.981L334.689 630.649L333.945 631.318C334.304 631.717 334.506 632.23 334.506 632.932L335.506 632.932ZM334.689 630.649L335.434 629.981C334.644 629.102 333.523 628.74 332.259 628.74L332.259 629.74L332.259 630.74C333.147 630.74 333.647 630.985 333.945 631.318L334.689 630.649ZM332.259 629.74L332.259 628.74C330.792 628.74 329.565 629.295 328.723 630.45L329.531 631.039L330.339 631.628C330.76 631.051 331.351 630.74 332.259 630.74L332.259 629.74ZM329.531 631.039L328.718 630.458C327.947 631.537 327.604 632.876 327.604 634.397L328.604 634.397L329.604 634.397C329.604 633.172 329.879 632.273 330.345 631.62L329.531 631.039ZM328.604 634.397L327.604 634.397L327.604 635.641L328.604 635.641L329.604 635.641L329.604 634.397L328.604 634.397ZM328.604 635.641L327.604 635.641C327.604 637.33 327.964 638.79 328.81 639.901L329.605 639.296L330.401 638.691C329.911 638.045 329.604 637.068 329.604 635.641L328.604 635.641ZM329.605 639.296L328.815 639.908C329.716 641.072 331.015 641.613 332.556 641.613L332.556 640.613L332.556 639.613C331.523 639.613 330.856 639.277 330.396 638.684L329.605 639.296ZM332.556 640.613L332.556 641.613C333.628 641.613 334.606 641.365 335.441 640.819L334.894 639.982L334.346 639.145C333.895 639.441 333.314 639.613 332.556 639.613L332.556 640.613ZM334.894 639.982L335.441 640.819C336.195 640.326 336.813 639.713 337.279 638.977L336.434 638.442L335.589 637.908C335.287 638.384 334.878 638.798 334.346 639.145L334.894 639.982ZM336.434 638.442L336.053 639.367L340.691 641.278L341.072 640.354L341.453 639.429L336.815 637.518L336.434 638.442ZM341.072 640.354L340.153 639.961C339.666 641.1 338.824 642.031 337.569 642.752L338.066 643.619L338.564 644.486C340.154 643.574 341.316 642.329 341.992 640.746L341.072 640.354ZM338.066 643.619L337.565 642.754C336.353 643.456 334.729 643.844 332.63 643.844L332.63 644.844L332.63 645.844C334.959 645.844 336.96 645.415 338.567 644.485L338.066 643.619ZM332.63 644.844L332.63 643.844C329.681 643.844 327.514 643.055 325.992 641.598L325.301 642.32L324.609 643.043C326.601 644.95 329.319 645.844 332.63 645.844L332.63 644.844ZM325.301 642.32L325.998 641.603C324.482 640.13 323.685 638.126 323.685 635.474L322.685 635.474L321.685 635.474C321.685 638.561 322.631 641.121 324.604 643.038L325.301 642.32ZM344.134 644.343L343.134 644.343L343.134 645.343L344.134 645.343L344.134 644.343ZM344.134 626.104L344.134 625.104L343.134 625.104L343.134 626.104L344.134 626.104ZM349.997 626.104L350.997 626.071L350.965 625.104L349.997 625.104L349.997 626.104ZM350.071 628.367L349.072 628.4L349.104 629.367L350.071 629.367L350.071 628.367ZM350.127 628.367L350.127 629.367L350.711 629.367L350.998 628.859L350.127 628.367ZM355.953 625.918L356.953 625.918L356.953 625.241L356.325 624.99L355.953 625.918ZM355.953 630.612L355.637 631.561L356.953 632L356.953 630.612L355.953 630.612ZM355.174 630.445L355.044 631.437L355.05 631.438L355.174 630.445ZM351.871 631.15L351.3 630.329L351.871 631.15ZM350.183 633.136L349.283 632.699L349.183 632.906L349.183 633.136L350.183 633.136ZM350.183 644.343L350.183 645.343L351.183 645.343L351.183 644.343L350.183 644.343ZM344.134 644.343L345.134 644.343L345.134 626.104L344.134 626.104L343.134 626.104L343.134 644.343L344.134 644.343ZM344.134 626.104L344.134 627.104L349.997 627.104L349.997 626.104L349.997 625.104L344.134 625.104L344.134 626.104ZM349.997 626.104L348.998 626.136L349.072 628.4L350.071 628.367L351.071 628.334L350.997 626.071L349.997 626.104ZM350.071 628.367L350.071 629.367L350.127 629.367L350.127 628.367L350.127 627.367L350.071 627.367L350.071 628.367ZM350.127 628.367L350.998 628.859C351.354 628.228 351.835 627.704 352.454 627.282L351.89 626.456L351.325 625.63C350.46 626.222 349.766 626.972 349.256 627.876L350.127 628.367ZM351.89 626.456L352.454 627.282C353.024 626.892 353.661 626.695 354.395 626.695L354.395 625.695L354.395 624.695C353.272 624.695 352.239 625.006 351.325 625.63L351.89 626.456ZM354.395 625.695L354.395 626.695C354.665 626.695 354.919 626.716 355.158 626.756L355.322 625.77L355.487 624.783C355.132 624.724 354.767 624.695 354.395 624.695L354.395 625.695ZM355.322 625.77L355.158 626.756C355.292 626.778 355.396 626.799 355.474 626.817C355.556 626.837 355.586 626.848 355.582 626.846L355.953 625.918L356.325 624.99C356.092 624.897 355.789 624.833 355.487 624.783L355.322 625.77ZM355.953 625.918L354.953 625.918L354.953 630.612L355.953 630.612L356.953 630.612L356.953 625.918L355.953 625.918ZM355.953 630.612L356.269 629.664C355.97 629.564 355.643 629.496 355.298 629.453L355.174 630.445L355.05 631.438C355.298 631.469 355.491 631.512 355.637 631.561L355.953 630.612ZM355.174 630.445L355.303 629.454C354.967 629.41 354.601 629.39 354.209 629.39L354.209 630.39L354.209 631.39C354.535 631.39 354.812 631.407 355.044 631.437L355.174 630.445ZM354.209 630.39L354.209 629.39C353.161 629.39 352.185 629.715 351.3 630.329L351.871 631.15L352.442 631.972C353.017 631.572 353.599 631.39 354.209 631.39L354.209 630.39ZM351.871 631.15L351.3 630.329C350.427 630.936 349.752 631.732 349.283 632.699L350.183 633.136L351.082 633.572C351.405 632.907 351.856 632.379 352.442 631.972L351.871 631.15ZM350.183 633.136L349.183 633.136L349.183 644.343L350.183 644.343L351.183 644.343L351.183 633.136L350.183 633.136ZM350.183 644.343L350.183 643.343L344.134 643.343L344.134 644.343L344.134 645.343L350.183 645.343L350.183 644.343Z" fill="black" mask="url(#path-7-outside-2_17007_6863)"/> +<mask id="path-9-outside-3_17007_6863" maskUnits="userSpaceOnUse" x="575.669" y="608.883" width="88" height="31" fill="black"> +<rect fill="white" x="575.669" y="608.883" width="88" height="31"/> +<path d="M577.094 610.867L583.532 610.867L589.247 628.624C589.358 628.909 589.445 629.193 589.507 629.478C589.581 629.762 589.655 630.059 589.729 630.368L589.841 630.368C589.915 630.059 589.989 629.756 590.063 629.459C590.15 629.162 590.237 628.884 590.323 628.624L596.094 610.867L602.031 610.867L592.939 637.994L586.186 637.994L577.094 610.867ZM601.753 632.576C601.753 630.647 602.507 629.156 604.017 628.105C605.538 627.053 607.505 626.521 609.917 626.509L613.999 626.509L613.999 625.414C613.999 624.598 613.795 623.955 613.387 623.485C612.979 623.015 612.286 622.78 611.309 622.78C610.331 622.78 609.614 622.977 609.156 623.373C608.699 623.769 608.47 624.295 608.47 624.95L608.47 625.284L602.848 625.266L602.848 624.895C602.848 623.2 603.646 621.821 605.241 620.757C606.849 619.681 608.989 619.143 611.661 619.143C614.358 619.143 616.411 619.656 617.821 620.683C619.244 621.71 619.955 623.342 619.955 625.581L619.955 633.745C619.955 634.488 620.017 635.199 620.141 635.879C620.277 636.547 620.468 637.122 620.716 637.605L620.716 637.883L614.853 637.883C614.692 637.586 614.549 637.221 614.426 636.788C614.314 636.355 614.24 635.916 614.203 635.471C613.795 636.164 613.065 636.788 612.014 637.345C610.975 637.902 609.663 638.18 608.08 638.18C606.2 638.18 604.672 637.71 603.497 636.77C602.334 635.83 601.753 634.432 601.753 632.576ZM607.672 632.113C607.672 632.892 607.895 633.504 608.34 633.949C608.785 634.382 609.465 634.599 610.381 634.599C611.37 634.599 612.218 634.271 612.923 633.615C613.64 632.948 613.999 632.174 613.999 631.296L613.999 629.738L611.364 629.738C610.103 629.738 609.169 629.929 608.562 630.313C607.969 630.696 607.672 631.296 607.672 632.113ZM623.944 637.883L623.944 610.181L629.937 610.181L629.937 637.883L623.944 637.883ZM633.927 637.883L633.927 619.644L639.957 619.644L639.957 637.883L633.927 637.883ZM633.537 613.91C633.537 613.045 633.834 612.315 634.428 611.721C635.021 611.115 635.869 610.812 636.97 610.812C638.058 610.812 638.893 611.109 639.475 611.702C640.056 612.296 640.347 613.032 640.347 613.91C640.347 614.776 640.05 615.512 639.456 616.118C638.862 616.725 638.021 617.028 636.933 617.028C635.832 617.028 634.991 616.725 634.409 616.118C633.828 615.512 633.537 614.776 633.537 613.91ZM643 629.051L643 628.457C643 625.761 643.724 623.559 645.171 621.852C646.618 620.132 648.511 619.273 650.849 619.273C652.123 619.273 653.211 619.489 654.114 619.922C655.017 620.343 655.722 620.906 656.229 621.611L656.229 610.181L662.074 610.181L662.074 637.883L656.396 637.883L656.322 635.527L656.285 635.527C655.815 636.294 655.11 636.943 654.17 637.475C653.23 637.994 652.123 638.254 650.849 638.254C648.424 638.254 646.507 637.394 645.097 635.675C643.699 633.943 643 631.735 643 629.051ZM649.049 629.144C649.049 630.591 649.352 631.766 649.958 632.669C650.564 633.572 651.479 634.024 652.704 634.024C653.545 634.024 654.263 633.789 654.856 633.319C655.45 632.849 655.877 632.292 656.137 631.649L656.137 625.804C655.877 625.161 655.456 624.616 654.875 624.171C654.306 623.726 653.589 623.503 652.723 623.503C651.486 623.503 650.564 623.961 649.958 624.876C649.352 625.779 649.049 626.948 649.049 628.383L649.049 629.144Z"/> +</mask> +<path d="M577.094 610.867L583.532 610.867L589.247 628.624C589.358 628.909 589.445 629.193 589.507 629.478C589.581 629.762 589.655 630.059 589.729 630.368L589.841 630.368C589.915 630.059 589.989 629.756 590.063 629.459C590.15 629.162 590.237 628.884 590.323 628.624L596.094 610.867L602.031 610.867L592.939 637.994L586.186 637.994L577.094 610.867ZM601.753 632.576C601.753 630.647 602.507 629.156 604.017 628.105C605.538 627.053 607.505 626.521 609.917 626.509L613.999 626.509L613.999 625.414C613.999 624.598 613.795 623.955 613.387 623.485C612.979 623.015 612.286 622.78 611.309 622.78C610.331 622.78 609.614 622.977 609.156 623.373C608.699 623.769 608.47 624.295 608.47 624.95L608.47 625.284L602.848 625.266L602.848 624.895C602.848 623.2 603.646 621.821 605.241 620.757C606.849 619.681 608.989 619.143 611.661 619.143C614.358 619.143 616.411 619.656 617.821 620.683C619.244 621.71 619.955 623.342 619.955 625.581L619.955 633.745C619.955 634.488 620.017 635.199 620.141 635.879C620.277 636.547 620.468 637.122 620.716 637.605L620.716 637.883L614.853 637.883C614.692 637.586 614.549 637.221 614.426 636.788C614.314 636.355 614.24 635.916 614.203 635.471C613.795 636.164 613.065 636.788 612.014 637.345C610.975 637.902 609.663 638.18 608.08 638.18C606.2 638.18 604.672 637.71 603.497 636.77C602.334 635.83 601.753 634.432 601.753 632.576ZM607.672 632.113C607.672 632.892 607.895 633.504 608.34 633.949C608.785 634.382 609.465 634.599 610.381 634.599C611.37 634.599 612.218 634.271 612.923 633.615C613.64 632.948 613.999 632.174 613.999 631.296L613.999 629.738L611.364 629.738C610.103 629.738 609.169 629.929 608.562 630.313C607.969 630.696 607.672 631.296 607.672 632.113ZM623.944 637.883L623.944 610.181L629.937 610.181L629.937 637.883L623.944 637.883ZM633.927 637.883L633.927 619.644L639.957 619.644L639.957 637.883L633.927 637.883ZM633.537 613.91C633.537 613.045 633.834 612.315 634.428 611.721C635.021 611.115 635.869 610.812 636.97 610.812C638.058 610.812 638.893 611.109 639.475 611.702C640.056 612.296 640.347 613.032 640.347 613.91C640.347 614.776 640.05 615.512 639.456 616.118C638.862 616.725 638.021 617.028 636.933 617.028C635.832 617.028 634.991 616.725 634.409 616.118C633.828 615.512 633.537 614.776 633.537 613.91ZM643 629.051L643 628.457C643 625.761 643.724 623.559 645.171 621.852C646.618 620.132 648.511 619.273 650.849 619.273C652.123 619.273 653.211 619.489 654.114 619.922C655.017 620.343 655.722 620.906 656.229 621.611L656.229 610.181L662.074 610.181L662.074 637.883L656.396 637.883L656.322 635.527L656.285 635.527C655.815 636.294 655.11 636.943 654.17 637.475C653.23 637.994 652.123 638.254 650.849 638.254C648.424 638.254 646.507 637.394 645.097 635.675C643.699 633.943 643 631.735 643 629.051ZM649.049 629.144C649.049 630.591 649.352 631.766 649.958 632.669C650.564 633.572 651.479 634.024 652.704 634.024C653.545 634.024 654.263 633.789 654.856 633.319C655.45 632.849 655.877 632.292 656.137 631.649L656.137 625.804C655.877 625.161 655.456 624.616 654.875 624.171C654.306 623.726 653.589 623.503 652.723 623.503C651.486 623.503 650.564 623.961 649.958 624.876C649.352 625.779 649.049 626.948 649.049 628.383L649.049 629.144Z" fill="white"/> +<path d="M577.094 610.867L577.094 609.867L575.704 609.867L576.146 611.185L577.094 610.867ZM583.532 610.867L584.484 610.561L584.261 609.867L583.532 609.867L583.532 610.867ZM589.247 628.624L588.295 628.931L588.305 628.96L588.316 628.989L589.247 628.624ZM589.507 629.478L588.53 629.69L588.534 629.71L588.539 629.73L589.507 629.478ZM589.729 630.368L588.757 630.602L588.941 631.368L589.729 631.368L589.729 630.368ZM589.841 630.368L589.841 631.368L590.629 631.368L590.813 630.602L589.841 630.368ZM590.063 629.459L589.103 629.179L589.098 629.198L589.093 629.217L590.063 629.459ZM590.323 628.624L591.272 628.941L591.274 628.933L590.323 628.624ZM596.094 610.867L596.094 609.867L595.367 609.867L595.143 610.558L596.094 610.867ZM602.031 610.867L602.979 611.185L603.421 609.867L602.031 609.867L602.031 610.867ZM592.939 637.994L592.939 638.994L593.659 638.994L593.888 638.312L592.939 637.994ZM586.186 637.994L585.237 638.312L585.466 638.994L586.186 638.994L586.186 637.994ZM577.094 610.867L577.094 611.867L583.532 611.867L583.532 610.867L583.532 609.867L577.094 609.867L577.094 610.867ZM583.532 610.867L582.58 611.174L588.295 628.931L589.247 628.624L590.199 628.318L584.484 610.561L583.532 610.867ZM589.247 628.624L588.316 628.989C588.409 629.226 588.48 629.46 588.53 629.69L589.507 629.478L590.484 629.265C590.41 628.927 590.308 628.591 590.178 628.26L589.247 628.624ZM589.507 629.478L588.539 629.73C588.612 630.008 588.684 630.298 588.757 630.602L589.729 630.368L590.702 630.135C590.626 629.82 590.55 629.517 590.474 629.225L589.507 629.478ZM589.729 630.368L589.729 631.368L589.841 631.368L589.841 630.368L589.841 629.368L589.729 629.368L589.729 630.368ZM589.841 630.368L590.813 630.602C590.887 630.295 590.96 629.995 591.034 629.702L590.063 629.459L589.093 629.217C589.018 629.517 588.943 629.823 588.868 630.135L589.841 630.368ZM590.063 629.459L591.023 629.739C591.107 629.453 591.19 629.187 591.272 628.94L590.323 628.624L589.375 628.308C589.283 628.581 589.193 628.872 589.103 629.179L590.063 629.459ZM590.323 628.624L591.274 628.933L597.045 611.176L596.094 610.867L595.143 610.558L589.372 628.315L590.323 628.624ZM596.094 610.867L596.094 611.867L602.031 611.867L602.031 610.867L602.031 609.867L596.094 609.867L596.094 610.867ZM602.031 610.867L601.083 610.55L591.991 637.677L592.939 637.994L593.888 638.312L602.979 611.185L602.031 610.867ZM592.939 637.994L592.939 636.994L586.186 636.994L586.186 637.994L586.186 638.994L592.939 638.994L592.939 637.994ZM586.186 637.994L587.134 637.677L578.042 610.55L577.094 610.867L576.146 611.185L585.237 638.312L586.186 637.994ZM604.017 628.105L603.448 627.282L603.445 627.284L604.017 628.105ZM609.917 626.509L609.917 625.509L609.912 625.509L609.917 626.509ZM613.999 626.509L613.999 627.509L614.999 627.509L614.999 626.509L613.999 626.509ZM608.47 625.284L608.466 626.284L609.47 626.288L609.47 625.284L608.47 625.284ZM602.848 625.266L601.848 625.266L601.848 626.263L602.844 626.266L602.848 625.266ZM605.241 620.757L605.796 621.589L605.797 621.588L605.241 620.757ZM617.821 620.683L617.233 621.491L617.236 621.494L617.821 620.683ZM620.141 635.879L619.157 636.058L619.159 636.068L619.161 636.079L620.141 635.879ZM620.716 637.605L621.716 637.605L621.716 637.363L621.606 637.148L620.716 637.605ZM620.716 637.883L620.716 638.883L621.716 638.883L621.716 637.883L620.716 637.883ZM614.853 637.883L613.973 638.359L614.257 638.883L614.853 638.883L614.853 637.883ZM614.426 636.788L613.457 637.037L613.461 637.05L613.464 637.063L614.426 636.788ZM614.203 635.471L615.2 635.388L614.938 632.253L613.342 634.963L614.203 635.471ZM612.014 637.345L611.546 636.461L611.541 636.463L612.014 637.345ZM603.497 636.77L602.868 637.547L602.872 637.551L603.497 636.77ZM608.34 633.949L607.633 634.657L607.643 634.666L608.34 633.949ZM612.923 633.615L613.604 634.348L613.604 634.347L612.923 633.615ZM613.999 629.738L614.999 629.738L614.999 628.738L613.999 628.738L613.999 629.738ZM608.562 630.313L608.028 629.468L608.02 629.473L608.562 630.313ZM601.753 632.576L602.753 632.576C602.753 630.955 603.363 629.779 604.588 628.925L604.017 628.105L603.445 627.284C601.652 628.533 600.753 630.339 600.753 632.576L601.753 632.576ZM604.017 628.105L604.585 628.927C605.897 628.021 607.651 627.521 609.922 627.509L609.917 626.509L609.912 625.509C607.359 625.522 605.179 626.086 603.448 627.282L604.017 628.105ZM609.917 626.509L609.917 627.509L613.999 627.509L613.999 626.509L613.999 625.509L609.917 625.509L609.917 626.509ZM613.999 626.509L614.999 626.509L614.999 625.414L613.999 625.414L612.999 625.414L612.999 626.509L613.999 626.509ZM613.999 625.414L614.999 625.414C614.999 624.433 614.752 623.531 614.142 622.829L613.387 623.485L612.632 624.14C612.838 624.378 612.999 624.762 612.999 625.414L613.999 625.414ZM613.387 623.485L614.142 622.829C613.458 622.041 612.412 621.78 611.309 621.78L611.309 622.78L611.309 623.78C612.16 623.78 612.499 623.988 612.632 624.14L613.387 623.485ZM611.309 622.78L611.309 621.78C610.23 621.78 609.224 621.992 608.502 622.617L609.156 623.373L609.81 624.13C610.004 623.963 610.433 623.78 611.309 623.78L611.309 622.78ZM609.156 623.373L608.502 622.617C607.805 623.22 607.47 624.032 607.47 624.95L608.47 624.95L609.47 624.95C609.47 624.558 609.592 624.318 609.81 624.13L609.156 623.373ZM608.47 624.95L607.47 624.95L607.47 625.284L608.47 625.284L609.47 625.284L609.47 624.95L608.47 624.95ZM608.47 625.284L608.473 624.284L602.851 624.266L602.848 625.266L602.844 626.266L608.466 626.284L608.47 625.284ZM602.848 625.266L603.848 625.266L603.848 624.895L602.848 624.895L601.848 624.895L601.848 625.266L602.848 625.266ZM602.848 624.895L603.848 624.895C603.848 623.583 604.436 622.496 605.796 621.589L605.241 620.757L604.687 619.925C602.855 621.146 601.848 622.817 601.848 624.895L602.848 624.895ZM605.241 620.757L605.797 621.588C607.189 620.657 609.114 620.143 611.661 620.143L611.661 619.143L611.661 618.143C608.864 618.143 606.509 618.705 604.685 619.926L605.241 620.757ZM611.661 619.143L611.661 620.143C614.254 620.143 616.064 620.64 617.233 621.491L617.821 620.683L618.41 619.874C616.758 618.672 614.461 618.143 611.661 618.143L611.661 619.143ZM617.821 620.683L617.236 621.494C618.327 622.281 618.955 623.565 618.955 625.581L619.955 625.581L620.955 625.581C620.955 623.12 620.16 621.138 618.407 619.872L617.821 620.683ZM619.955 625.581L618.955 625.581L618.955 633.745L619.955 633.745L620.955 633.745L620.955 625.581L619.955 625.581ZM619.955 633.745L618.955 633.745C618.955 634.543 619.022 635.315 619.157 636.058L620.141 635.879L621.124 635.7C621.012 635.083 620.955 634.432 620.955 633.745L619.955 633.745ZM620.141 635.879L619.161 636.079C619.311 636.814 619.528 637.48 619.826 638.061L620.716 637.605L621.606 637.148C621.409 636.765 621.243 636.28 621.121 635.68L620.141 635.879ZM620.716 637.605L619.716 637.605L619.716 637.883L620.716 637.883L621.716 637.883L621.716 637.605L620.716 637.605ZM620.716 637.883L620.716 636.883L614.853 636.883L614.853 637.883L614.853 638.883L620.716 638.883L620.716 637.883ZM614.853 637.883L615.732 637.407C615.615 637.191 615.497 636.898 615.387 636.514L614.426 636.788L613.464 637.063C613.602 637.544 613.768 637.981 613.973 638.359L614.853 637.883ZM614.426 636.788L615.394 636.539C615.297 636.161 615.232 635.777 615.2 635.388L614.203 635.471L613.207 635.554C613.248 636.055 613.332 636.55 613.457 637.037L614.426 636.788ZM614.203 635.471L613.342 634.963C613.062 635.438 612.507 635.952 611.546 636.461L612.014 637.345L612.482 638.229C613.623 637.624 614.528 636.89 615.065 635.979L614.203 635.471ZM612.014 637.345L611.541 636.463C610.689 636.92 609.553 637.18 608.08 637.18L608.08 638.18L608.08 639.18C609.774 639.18 611.26 638.883 612.486 638.226L612.014 637.345ZM608.08 638.18L608.08 637.18C606.369 637.18 605.079 636.755 604.122 635.989L603.497 636.77L602.872 637.551C604.265 638.665 606.031 639.18 608.08 639.18L608.08 638.18ZM603.497 636.77L604.126 635.992C603.254 635.287 602.753 634.21 602.753 632.576L601.753 632.576L600.753 632.576C600.753 634.654 601.415 636.372 602.868 637.547L603.497 636.77ZM607.672 632.113L606.672 632.113C606.672 633.09 606.957 633.981 607.633 634.657L608.34 633.949L609.047 633.242C608.832 633.027 608.672 632.693 608.672 632.113L607.672 632.113ZM608.34 633.949L607.643 634.666C608.347 635.351 609.327 635.599 610.381 635.599L610.381 634.599L610.381 633.599C609.604 633.599 609.223 633.414 609.037 633.232L608.34 633.949ZM610.381 634.599L610.381 635.599C611.615 635.599 612.708 635.181 613.604 634.348L612.923 633.615L612.242 632.883C611.727 633.361 611.126 633.599 610.381 633.599L610.381 634.599ZM612.923 633.615L613.604 634.347C614.499 633.515 614.999 632.486 614.999 631.296L613.999 631.296L612.999 631.296C612.999 631.863 612.782 632.38 612.241 632.884L612.923 633.615ZM613.999 631.296L614.999 631.296L614.999 629.738L613.999 629.738L612.999 629.738L612.999 631.296L613.999 631.296ZM613.999 629.738L613.999 628.738L611.364 628.738L611.364 629.738L611.364 630.738L613.999 630.738L613.999 629.738ZM611.364 629.738L611.364 628.738C610.039 628.738 608.874 628.932 608.028 629.468L608.562 630.313L609.097 631.158C609.463 630.926 610.166 630.738 611.364 630.738L611.364 629.738ZM608.562 630.313L608.02 629.473C607.093 630.071 606.672 631.018 606.672 632.113L607.672 632.113L608.672 632.113C608.672 631.574 608.845 631.321 609.105 631.153L608.562 630.313ZM623.944 637.883L622.944 637.883L622.944 638.883L623.944 638.883L623.944 637.883ZM623.944 610.181L623.944 609.181L622.944 609.181L622.944 610.181L623.944 610.181ZM629.937 610.181L630.937 610.181L630.937 609.181L629.937 609.181L629.937 610.181ZM629.937 637.883L629.937 638.883L630.937 638.883L630.937 637.883L629.937 637.883ZM623.944 637.883L624.944 637.883L624.944 610.181L623.944 610.181L622.944 610.181L622.944 637.883L623.944 637.883ZM623.944 610.181L623.944 611.181L629.937 611.181L629.937 610.181L629.937 609.181L623.944 609.181L623.944 610.181ZM629.937 610.181L628.937 610.181L628.937 637.883L629.937 637.883L630.937 637.883L630.937 610.181L629.937 610.181ZM629.937 637.883L629.937 636.883L623.944 636.883L623.944 637.883L623.944 638.883L629.937 638.883L629.937 637.883ZM633.927 637.883L632.927 637.883L632.927 638.883L633.927 638.883L633.927 637.883ZM633.927 619.644L633.927 618.644L632.927 618.644L632.927 619.644L633.927 619.644ZM639.957 619.644L640.957 619.644L640.957 618.644L639.957 618.644L639.957 619.644ZM639.957 637.883L639.957 638.883L640.957 638.883L640.957 637.883L639.957 637.883ZM634.428 611.721L635.135 612.428L635.142 612.421L634.428 611.721ZM639.475 611.702L640.189 611.003L639.475 611.702ZM633.927 637.883L634.927 637.883L634.927 619.644L633.927 619.644L632.927 619.644L632.927 637.883L633.927 637.883ZM633.927 619.644L633.927 620.644L639.957 620.644L639.957 619.644L639.957 618.644L633.927 618.644L633.927 619.644ZM639.957 619.644L638.957 619.644L638.957 637.883L639.957 637.883L640.957 637.883L640.957 619.644L639.957 619.644ZM639.957 637.883L639.957 636.883L633.927 636.883L633.927 637.883L633.927 638.883L639.957 638.883L639.957 637.883ZM633.537 613.91L634.537 613.91C634.537 613.3 634.735 612.828 635.135 612.428L634.428 611.721L633.721 611.014C632.933 611.802 632.537 612.789 632.537 613.91L633.537 613.91ZM634.428 611.721L635.142 612.421C635.496 612.059 636.054 611.812 636.97 611.812L636.97 610.812L636.97 609.812C635.684 609.812 634.547 610.171 633.713 611.021L634.428 611.721ZM636.97 610.812L636.97 611.812C637.876 611.812 638.42 612.055 638.76 612.402L639.475 611.702L640.189 611.003C639.366 610.163 638.24 609.812 636.97 609.812L636.97 610.812ZM639.475 611.702L638.76 612.402C639.147 612.797 639.347 613.277 639.347 613.91L640.347 613.91L641.347 613.91C641.347 612.787 640.965 611.795 640.189 611.003L639.475 611.702ZM640.347 613.91L639.347 613.91C639.347 614.521 639.148 615.004 638.742 615.419L639.456 616.118L640.17 616.818C640.951 616.021 641.347 615.032 641.347 613.91L640.347 613.91ZM639.456 616.118L638.742 615.419C638.385 615.782 637.832 616.028 636.933 616.028L636.933 617.028L636.933 618.028C638.21 618.028 639.339 617.667 640.17 616.818L639.456 616.118ZM636.933 617.028L636.933 616.028C636.016 616.028 635.47 615.78 635.131 615.426L634.409 616.118L633.687 616.811C634.511 617.669 635.648 618.028 636.933 618.028L636.933 617.028ZM634.409 616.118L635.131 615.426C634.734 615.013 634.537 614.527 634.537 613.91L633.537 613.91L632.537 613.91C632.537 615.025 632.921 616.012 633.687 616.811L634.409 616.118ZM645.171 621.852L645.934 622.498L645.936 622.496L645.171 621.852ZM654.114 619.922L653.682 620.824L653.692 620.829L654.114 619.922ZM656.229 621.611L655.418 622.195L657.229 624.713L657.229 621.611L656.229 621.611ZM656.229 610.181L656.229 609.181L655.229 609.181L655.229 610.181L656.229 610.181ZM662.074 610.181L663.074 610.181L663.074 609.181L662.074 609.181L662.074 610.181ZM662.074 637.883L662.074 638.883L663.074 638.883L663.074 637.883L662.074 637.883ZM656.396 637.883L655.397 637.915L655.427 638.883L656.396 638.883L656.396 637.883ZM656.322 635.527L657.322 635.495L657.291 634.527L656.322 634.527L656.322 635.527ZM656.285 635.527L656.285 634.527L655.725 634.527L655.433 635.004L656.285 635.527ZM654.17 637.475L654.654 638.35L654.662 638.345L654.17 637.475ZM645.097 635.675L644.319 636.303L644.323 636.309L645.097 635.675ZM649.958 632.669L649.128 633.227L649.958 632.669ZM654.856 633.319L654.236 632.535L654.856 633.319ZM656.137 631.649L657.064 632.023L657.137 631.843L657.137 631.649L656.137 631.649ZM656.137 625.804L657.137 625.804L657.137 625.61L657.064 625.429L656.137 625.804ZM654.875 624.171L654.259 624.959L654.267 624.965L654.875 624.171ZM649.958 624.876L650.788 625.434L650.792 625.428L649.958 624.876ZM643 629.051L644 629.051L644 628.457L643 628.457L642 628.457L642 629.051L643 629.051ZM643 628.457L644 628.457C644 625.947 644.669 623.99 645.934 622.498L645.171 621.852L644.408 621.205C642.778 623.128 642 625.574 642 628.457L643 628.457ZM645.171 621.852L645.936 622.496C647.185 621.012 648.792 620.273 650.849 620.273L650.849 619.273L650.849 618.273C648.229 618.273 646.052 619.252 644.406 621.208L645.171 621.852ZM650.849 619.273L650.849 620.273C652.013 620.273 652.945 620.471 653.682 620.824L654.114 619.922L654.547 619.02C653.477 618.508 652.233 618.273 650.849 618.273L650.849 619.273ZM654.114 619.922L653.692 620.829C654.463 621.188 655.025 621.648 655.418 622.195L656.229 621.611L657.041 621.027C656.42 620.163 655.572 619.498 654.536 619.016L654.114 619.922ZM656.229 621.611L657.229 621.611L657.229 610.181L656.229 610.181L655.229 610.181L655.229 621.611L656.229 621.611ZM656.229 610.181L656.229 611.181L662.074 611.181L662.074 610.181L662.074 609.181L656.229 609.181L656.229 610.181ZM662.074 610.181L661.074 610.181L661.074 637.883L662.074 637.883L663.074 637.883L663.074 610.181L662.074 610.181ZM662.074 637.883L662.074 636.883L656.396 636.883L656.396 637.883L656.396 638.883L662.074 638.883L662.074 637.883ZM656.396 637.883L657.396 637.852L657.322 635.495L656.322 635.527L655.323 635.558L655.397 637.915L656.396 637.883ZM656.322 635.527L656.322 634.527L656.285 634.527L656.285 635.527L656.285 636.527L656.322 636.527L656.322 635.527ZM656.285 635.527L655.433 635.004C655.067 635.6 654.5 636.139 653.677 636.605L654.17 637.475L654.662 638.345C655.721 637.747 656.563 636.987 657.138 636.049L656.285 635.527ZM654.17 637.475L653.686 636.6C652.92 637.023 651.985 637.254 650.849 637.254L650.849 638.254L650.849 639.254C652.26 639.254 653.54 638.965 654.654 638.35L654.17 637.475ZM650.849 638.254L650.849 637.254C648.693 637.254 647.071 636.506 645.87 635.041L645.097 635.675L644.323 636.309C645.942 638.283 648.155 639.254 650.849 639.254L650.849 638.254ZM645.097 635.675L645.875 635.047C644.649 633.528 644 631.556 644 629.051L643 629.051L642 629.051C642 631.915 642.749 634.359 644.319 636.303L645.097 635.675ZM649.049 629.144L648.049 629.144C648.049 630.725 648.38 632.112 649.128 633.227L649.958 632.669L650.788 632.112C650.324 631.42 650.049 630.457 650.049 629.144L649.049 629.144ZM649.958 632.669L649.128 633.227C649.945 634.445 651.195 635.024 652.704 635.024L652.704 634.024L652.704 633.024C651.764 633.024 651.183 632.7 650.788 632.112L649.958 632.669ZM652.704 634.024L652.704 635.024C653.744 635.024 654.687 634.728 655.477 634.103L654.856 633.319L654.236 632.535C653.838 632.849 653.346 633.024 652.704 633.024L652.704 634.024ZM654.856 633.319L655.477 634.103C656.194 633.535 656.733 632.842 657.064 632.023L656.137 631.649L655.209 631.274C655.021 631.742 654.706 632.162 654.236 632.535L654.856 633.319ZM656.137 631.649L657.137 631.649L657.137 625.804L656.137 625.804L655.137 625.804L655.137 631.649L656.137 631.649ZM656.137 625.804L657.064 625.429C656.733 624.611 656.198 623.925 655.483 623.377L654.875 624.171L654.267 624.965C654.715 625.308 655.02 625.71 655.209 626.178L656.137 625.804ZM654.875 624.171L655.491 623.384C654.713 622.775 653.766 622.503 652.723 622.503L652.723 623.503L652.723 624.503C653.411 624.503 653.899 624.677 654.259 624.959L654.875 624.171ZM652.723 623.503L652.723 622.503C651.2 622.503 649.941 623.09 649.124 624.324L649.958 624.876L650.792 625.428C651.187 624.832 651.771 624.503 652.723 624.503L652.723 623.503ZM649.958 624.876L649.128 624.319C648.381 625.432 648.049 626.812 648.049 628.383L649.049 628.383L650.049 628.383C650.049 627.084 650.323 626.127 650.788 625.434L649.958 624.876ZM649.049 628.383L648.049 628.383L648.049 629.144L649.049 629.144L650.049 629.144L650.049 628.383L649.049 628.383Z" fill="black" mask="url(#path-9-outside-3_17007_6863)"/> +<mask id="path-11-outside-4_17007_6863" maskUnits="userSpaceOnUse" x="577.339" y="669.25" width="110" height="37" fill="black"> +<rect fill="white" x="577.339" y="669.25" width="110" height="37"/> +<path d="M578.601 691.651L578.601 682.231C578.601 678.782 579.533 676.07 581.397 674.093C583.262 672.116 585.876 671.128 589.241 671.128C592.605 671.128 595.227 672.109 597.105 674.072C598.984 676.02 599.923 678.74 599.923 682.231L599.923 691.651C599.923 695.184 598.956 697.925 597.021 699.874C595.087 701.808 592.493 702.768 589.241 702.754C585.862 702.754 583.241 701.787 581.376 699.853C579.526 697.904 578.601 695.17 578.601 691.651ZM585.666 692.787C585.666 694.343 585.953 695.57 586.528 696.467C587.117 697.35 588.028 697.792 589.262 697.792C590.496 697.792 591.4 697.35 591.975 696.467C592.563 695.57 592.858 694.343 592.858 692.787L592.858 681.2C592.858 679.616 592.563 678.383 591.975 677.499C591.4 676.602 590.496 676.154 589.262 676.154C588.028 676.154 587.117 676.602 586.528 677.499C585.953 678.383 585.666 679.616 585.666 681.2L585.666 692.787ZM602.194 689.591L602.194 688.35C602.194 683.079 603.694 678.915 606.694 675.859C609.694 672.789 613.998 671.254 619.606 671.254L620.888 671.254L620.888 676.784L619.774 676.784C616.325 676.784 613.655 677.717 611.762 679.581C609.884 681.432 608.944 684.67 608.944 689.296L609.134 689.969C609.134 693.081 609.519 695.177 610.29 696.257C611.075 697.322 612.106 697.855 613.381 697.855C614.629 697.855 615.582 697.427 616.241 696.572C616.914 695.703 617.251 694.189 617.251 692.03C617.251 690.306 616.928 688.988 616.283 688.077C615.638 687.151 614.664 686.689 613.36 686.689C612.169 686.689 611.159 687.144 610.332 688.056C609.519 688.953 609.113 690.144 609.113 691.63L607.536 691.63C607.536 688.827 608.3 686.577 609.828 684.88C611.356 683.17 613.304 682.315 615.673 682.315C618.323 682.315 620.419 683.184 621.961 684.922C623.503 686.647 624.274 689.044 624.274 692.114C624.274 695.366 623.272 697.953 621.267 699.874C619.262 701.794 616.627 702.754 613.36 702.754C610.01 702.754 607.311 701.71 605.264 699.621C603.218 697.532 602.194 694.189 602.194 689.591ZM622.907 704.878L634.767 671.633L640.634 671.633L628.753 704.878L622.907 704.878ZM639.877 689.591L639.877 688.35C639.877 683.079 641.377 678.915 644.377 675.859C647.377 672.789 651.681 671.254 657.288 671.254L658.571 671.254L658.571 676.784L657.457 676.784C654.008 676.784 651.337 677.717 649.445 679.581C647.566 681.432 646.627 684.67 646.627 689.296L646.816 689.969C646.816 693.081 647.202 695.177 647.973 696.257C648.758 697.322 649.788 697.855 651.064 697.855C652.312 697.855 653.265 697.427 653.924 696.572C654.597 695.703 654.933 694.189 654.933 692.03C654.933 690.306 654.611 688.988 653.966 688.077C653.321 687.151 652.347 686.689 651.043 686.689C649.851 686.689 648.842 687.144 648.015 688.056C647.202 688.953 646.795 690.144 646.795 691.63L645.218 691.63C645.218 688.827 645.982 686.577 647.51 684.88C649.038 683.17 650.987 682.315 653.356 682.315C656.006 682.315 658.102 683.184 659.644 684.922C661.186 686.647 661.957 689.044 661.957 692.114C661.957 695.366 660.954 697.953 658.95 699.874C656.945 701.794 654.309 702.754 651.043 702.754C647.693 702.754 644.994 701.71 642.947 699.621C640.9 697.532 639.877 694.189 639.877 689.591ZM663.513 681.726C663.513 678.488 664.515 675.915 666.52 674.009C668.539 672.088 671.181 671.128 674.448 671.128C677.784 671.128 680.476 672.172 682.522 674.261C684.583 676.35 685.614 679.693 685.614 684.292L685.614 685.532C685.614 690.719 684.114 694.834 681.114 697.876C678.113 700.904 673.81 702.439 668.202 702.481L666.898 702.481L666.898 697.035L668.034 697.035C671.469 697.035 674.118 696.109 675.983 694.259C677.861 692.409 678.8 689.212 678.8 684.67L678.674 683.913C678.674 680.927 678.296 678.88 677.539 677.773C676.782 676.665 675.73 676.112 674.384 676.112C673.151 676.112 672.198 676.539 671.525 677.394C670.866 678.235 670.536 679.707 670.536 681.81C670.536 683.605 670.859 684.943 671.504 685.827C672.148 686.71 673.116 687.151 674.405 687.151C675.625 687.151 676.642 686.717 677.455 685.848C678.282 684.964 678.695 683.78 678.695 682.294L680.167 682.294C680.167 685 679.431 687.215 677.959 688.939C676.501 690.663 674.56 691.525 672.134 691.525C669.485 691.525 667.382 690.656 665.826 688.918C664.284 687.179 663.513 684.782 663.513 681.726Z"/> +</mask> +<path d="M578.601 691.651L578.601 682.231C578.601 678.782 579.533 676.07 581.397 674.093C583.262 672.116 585.876 671.128 589.241 671.128C592.605 671.128 595.227 672.109 597.105 674.072C598.984 676.02 599.923 678.74 599.923 682.231L599.923 691.651C599.923 695.184 598.956 697.925 597.021 699.874C595.087 701.808 592.493 702.768 589.241 702.754C585.862 702.754 583.241 701.787 581.376 699.853C579.526 697.904 578.601 695.17 578.601 691.651ZM585.666 692.787C585.666 694.343 585.953 695.57 586.528 696.467C587.117 697.35 588.028 697.792 589.262 697.792C590.496 697.792 591.4 697.35 591.975 696.467C592.563 695.57 592.858 694.343 592.858 692.787L592.858 681.2C592.858 679.616 592.563 678.383 591.975 677.499C591.4 676.602 590.496 676.154 589.262 676.154C588.028 676.154 587.117 676.602 586.528 677.499C585.953 678.383 585.666 679.616 585.666 681.2L585.666 692.787ZM602.194 689.591L602.194 688.35C602.194 683.079 603.694 678.915 606.694 675.859C609.694 672.789 613.998 671.254 619.606 671.254L620.888 671.254L620.888 676.784L619.774 676.784C616.325 676.784 613.655 677.717 611.762 679.581C609.884 681.432 608.944 684.67 608.944 689.296L609.134 689.969C609.134 693.081 609.519 695.177 610.29 696.257C611.075 697.322 612.106 697.855 613.381 697.855C614.629 697.855 615.582 697.427 616.241 696.572C616.914 695.703 617.251 694.189 617.251 692.03C617.251 690.306 616.928 688.988 616.283 688.077C615.638 687.151 614.664 686.689 613.36 686.689C612.169 686.689 611.159 687.144 610.332 688.056C609.519 688.953 609.113 690.144 609.113 691.63L607.536 691.63C607.536 688.827 608.3 686.577 609.828 684.88C611.356 683.17 613.304 682.315 615.673 682.315C618.323 682.315 620.419 683.184 621.961 684.922C623.503 686.647 624.274 689.044 624.274 692.114C624.274 695.366 623.272 697.953 621.267 699.874C619.262 701.794 616.627 702.754 613.36 702.754C610.01 702.754 607.311 701.71 605.264 699.621C603.218 697.532 602.194 694.189 602.194 689.591ZM622.907 704.878L634.767 671.633L640.634 671.633L628.753 704.878L622.907 704.878ZM639.877 689.591L639.877 688.35C639.877 683.079 641.377 678.915 644.377 675.859C647.377 672.789 651.681 671.254 657.288 671.254L658.571 671.254L658.571 676.784L657.457 676.784C654.008 676.784 651.337 677.717 649.445 679.581C647.566 681.432 646.627 684.67 646.627 689.296L646.816 689.969C646.816 693.081 647.202 695.177 647.973 696.257C648.758 697.322 649.788 697.855 651.064 697.855C652.312 697.855 653.265 697.427 653.924 696.572C654.597 695.703 654.933 694.189 654.933 692.03C654.933 690.306 654.611 688.988 653.966 688.077C653.321 687.151 652.347 686.689 651.043 686.689C649.851 686.689 648.842 687.144 648.015 688.056C647.202 688.953 646.795 690.144 646.795 691.63L645.218 691.63C645.218 688.827 645.982 686.577 647.51 684.88C649.038 683.17 650.987 682.315 653.356 682.315C656.006 682.315 658.102 683.184 659.644 684.922C661.186 686.647 661.957 689.044 661.957 692.114C661.957 695.366 660.954 697.953 658.95 699.874C656.945 701.794 654.309 702.754 651.043 702.754C647.693 702.754 644.994 701.71 642.947 699.621C640.9 697.532 639.877 694.189 639.877 689.591ZM663.513 681.726C663.513 678.488 664.515 675.915 666.52 674.009C668.539 672.088 671.181 671.128 674.448 671.128C677.784 671.128 680.476 672.172 682.522 674.261C684.583 676.35 685.614 679.693 685.614 684.292L685.614 685.532C685.614 690.719 684.114 694.834 681.114 697.876C678.113 700.904 673.81 702.439 668.202 702.481L666.898 702.481L666.898 697.035L668.034 697.035C671.469 697.035 674.118 696.109 675.983 694.259C677.861 692.409 678.8 689.212 678.8 684.67L678.674 683.913C678.674 680.927 678.296 678.88 677.539 677.773C676.782 676.665 675.73 676.112 674.384 676.112C673.151 676.112 672.198 676.539 671.525 677.394C670.866 678.235 670.536 679.707 670.536 681.81C670.536 683.605 670.859 684.943 671.504 685.827C672.148 686.71 673.116 687.151 674.405 687.151C675.625 687.151 676.642 686.717 677.455 685.848C678.282 684.964 678.695 683.78 678.695 682.294L680.167 682.294C680.167 685 679.431 687.215 677.959 688.939C676.501 690.663 674.56 691.525 672.134 691.525C669.485 691.525 667.382 690.656 665.826 688.918C664.284 687.179 663.513 684.782 663.513 681.726Z" fill="white"/> +<path d="M597.105 674.072L596.383 674.763L596.386 674.766L597.105 674.072ZM597.021 699.874L597.728 700.581L597.731 700.578L597.021 699.874ZM589.241 702.754L589.245 701.754L589.241 701.754L589.241 702.754ZM581.376 699.853L580.651 700.541L580.656 700.546L581.376 699.853ZM586.528 696.467L585.686 697.006L585.691 697.014L585.696 697.022L586.528 696.467ZM591.975 696.467L591.139 695.918L591.136 695.922L591.975 696.467ZM591.975 677.499L591.133 678.039L591.137 678.047L591.143 678.054L591.975 677.499ZM586.528 677.499L585.692 676.951L585.69 676.954L586.528 677.499ZM578.601 691.651L579.601 691.651L579.601 682.231L578.601 682.231L577.601 682.231L577.601 691.651L578.601 691.651ZM578.601 682.231L579.601 682.231C579.601 678.966 580.479 676.524 582.125 674.779L581.397 674.093L580.67 673.407C578.587 675.615 577.601 678.599 577.601 682.231L578.601 682.231ZM581.397 674.093L582.125 674.779C583.757 673.049 586.082 672.128 589.241 672.128L589.241 671.128L589.241 670.128C585.671 670.128 582.767 671.184 580.67 673.407L581.397 674.093ZM589.241 671.128L589.241 672.128C592.402 672.128 594.736 673.043 596.383 674.763L597.105 674.072L597.828 673.38C595.718 671.176 592.809 670.128 589.241 670.128L589.241 671.128ZM597.105 674.072L596.386 674.766C598.037 676.479 598.923 678.921 598.923 682.231L599.923 682.231L600.923 682.231C600.923 678.559 599.931 675.562 597.825 673.378L597.105 674.072ZM599.923 682.231L598.923 682.231L598.923 691.651L599.923 691.651L600.923 691.651L600.923 682.231L599.923 682.231ZM599.923 691.651L598.923 691.651C598.923 694.999 598.011 697.457 596.312 699.169L597.021 699.874L597.731 700.578C599.901 698.393 600.923 695.369 600.923 691.651L599.923 691.651ZM597.021 699.874L596.314 699.166C594.603 700.877 592.285 701.768 589.245 701.754L589.241 702.754L589.237 703.754C592.702 703.769 595.57 702.739 597.728 700.581L597.021 699.874ZM589.241 702.754L589.241 701.754C586.06 701.754 583.726 700.85 582.096 699.159L581.376 699.853L580.656 700.546C582.755 702.724 585.665 703.754 589.241 703.754L589.241 702.754ZM581.376 699.853L582.101 699.164C580.477 697.453 579.601 694.996 579.601 691.651L578.601 691.651L577.601 691.651C577.601 695.345 578.575 698.355 580.651 700.541L581.376 699.853ZM585.666 692.787L584.666 692.787C584.666 694.451 584.971 695.89 585.686 697.006L586.528 696.467L587.37 695.928C586.936 695.249 586.666 694.235 586.666 692.787L585.666 692.787ZM586.528 696.467L585.696 697.022C586.503 698.232 587.757 698.792 589.262 698.792L589.262 697.792L589.262 696.792C588.3 696.792 587.731 696.469 587.36 695.912L586.528 696.467ZM589.262 697.792L589.262 698.792C590.767 698.792 592.02 698.231 592.813 697.012L591.975 696.467L591.136 695.922C590.78 696.469 590.224 696.792 589.262 696.792L589.262 697.792ZM591.975 696.467L592.811 697.016C593.544 695.898 593.858 694.455 593.858 692.787L592.858 692.787L591.858 692.787C591.858 694.231 591.582 695.242 591.139 695.918L591.975 696.467ZM592.858 692.787L593.858 692.787L593.858 681.2L592.858 681.2L591.858 681.2L591.858 692.787L592.858 692.787ZM592.858 681.2L593.858 681.2C593.858 679.51 593.547 678.055 592.807 676.945L591.975 677.499L591.143 678.054C591.58 678.711 591.858 679.722 591.858 681.2L592.858 681.2ZM591.975 677.499L592.817 676.96C592.026 675.727 590.773 675.154 589.262 675.154L589.262 676.154L589.262 677.154C590.218 677.154 590.773 677.478 591.133 678.039L591.975 677.499ZM589.262 676.154L589.262 675.154C587.75 675.154 586.496 675.726 585.692 676.951L586.528 677.499L587.364 678.048C587.738 677.478 588.306 677.154 589.262 677.154L589.262 676.154ZM586.528 677.499L585.69 676.954C584.969 678.062 584.666 679.514 584.666 681.2L585.666 681.2L586.666 681.2C586.666 679.719 586.938 678.703 587.366 678.045L586.528 677.499ZM585.666 681.2L584.666 681.2L584.666 692.787L585.666 692.787L586.666 692.787L586.666 681.2L585.666 681.2ZM606.694 675.859L607.408 676.56L607.41 676.558L606.694 675.859ZM620.888 671.254L621.888 671.254L621.888 670.254L620.888 670.254L620.888 671.254ZM620.888 676.784L620.888 677.784L621.888 677.784L621.888 676.784L620.888 676.784ZM611.762 679.581L612.464 680.294L612.464 680.294L611.762 679.581ZM608.944 689.296L607.944 689.296L607.944 689.434L607.982 689.567L608.944 689.296ZM609.134 689.969L610.134 689.969L610.134 689.831L610.096 689.698L609.134 689.969ZM610.29 696.257L609.476 696.838L609.481 696.844L609.485 696.85L610.29 696.257ZM616.241 696.572L615.45 695.96L615.449 695.962L616.241 696.572ZM616.283 688.077L615.463 688.648L615.467 688.654L616.283 688.077ZM610.332 688.056L609.592 687.384L609.591 687.384L610.332 688.056ZM609.113 691.63L609.113 692.63L610.113 692.63L610.113 691.63L609.113 691.63ZM607.536 691.63L606.536 691.63L606.536 692.63L607.536 692.63L607.536 691.63ZM609.828 684.88L610.571 685.55L610.573 685.547L609.828 684.88ZM621.961 684.922L621.213 685.586L621.216 685.589L621.961 684.922ZM602.194 689.591L603.194 689.591L603.194 688.35L602.194 688.35L601.194 688.35L601.194 689.591L602.194 689.591ZM602.194 688.35L603.194 688.35C603.194 683.277 604.632 679.388 607.408 676.56L606.694 675.859L605.981 675.159C602.757 678.443 601.194 682.881 601.194 688.35L602.194 688.35ZM606.694 675.859L607.41 676.558C610.169 673.734 614.181 672.254 619.606 672.254L619.606 671.254L619.606 670.254C613.815 670.254 609.22 671.844 605.979 675.16L606.694 675.859ZM619.606 671.254L619.606 672.254L620.888 672.254L620.888 671.254L620.888 670.254L619.606 670.254L619.606 671.254ZM620.888 671.254L619.888 671.254L619.888 676.784L620.888 676.784L621.888 676.784L621.888 671.254L620.888 671.254ZM620.888 676.784L620.888 675.784L619.774 675.784L619.774 676.784L619.774 677.784L620.888 677.784L620.888 676.784ZM619.774 676.784L619.774 675.784C616.144 675.784 613.191 676.77 611.06 678.869L611.762 679.581L612.464 680.294C614.118 678.664 616.507 677.784 619.774 677.784L619.774 676.784ZM611.762 679.581L611.06 678.869C608.89 681.007 607.944 684.589 607.944 689.296L608.944 689.296L609.944 689.296C609.944 684.751 610.878 681.856 612.464 680.294L611.762 679.581ZM608.944 689.296L607.982 689.567L608.171 690.24L609.134 689.969L610.096 689.698L609.907 689.026L608.944 689.296ZM609.134 689.969L608.134 689.969C608.134 691.561 608.232 692.928 608.439 694.056C608.644 695.171 608.969 696.128 609.476 696.838L610.29 696.257L611.104 695.675C610.84 695.306 610.587 694.676 610.406 693.694C610.228 692.726 610.134 691.49 610.134 689.969L609.134 689.969ZM610.29 696.257L609.485 696.85C610.45 698.16 611.774 698.855 613.381 698.855L613.381 697.855L613.381 696.855C612.437 696.855 611.7 696.484 611.095 695.663L610.29 696.257ZM613.381 697.855L613.381 698.855C614.885 698.855 616.154 698.324 617.033 697.182L616.241 696.572L615.449 695.962C615.011 696.531 614.374 696.855 613.381 696.855L613.381 697.855ZM616.241 696.572L617.032 697.184C617.92 696.037 618.251 694.23 618.251 692.03L617.251 692.03L616.251 692.03C616.251 694.148 615.908 695.369 615.45 695.96L616.241 696.572ZM617.251 692.03L618.251 692.03C618.251 690.204 617.913 688.648 617.1 687.499L616.283 688.077L615.467 688.654C615.943 689.327 616.251 690.407 616.251 692.03L617.251 692.03ZM616.283 688.077L617.104 687.505C616.241 686.266 614.932 685.689 613.36 685.689L613.36 686.689L613.36 687.689C614.396 687.689 615.036 688.036 615.463 688.648L616.283 688.077ZM613.36 686.689L613.36 685.689C611.876 685.689 610.601 686.271 609.592 687.384L610.332 688.056L611.073 688.728C611.717 688.018 612.461 687.689 613.36 687.689L613.36 686.689ZM610.332 688.056L609.591 687.384C608.576 688.505 608.113 689.955 608.113 691.63L609.113 691.63L610.113 691.63C610.113 690.334 610.463 689.401 611.073 688.727L610.332 688.056ZM609.113 691.63L609.113 690.63L607.536 690.63L607.536 691.63L607.536 692.63L609.113 692.63L609.113 691.63ZM607.536 691.63L608.536 691.63C608.536 689.015 609.244 687.023 610.571 685.55L609.828 684.88L609.085 684.211C607.355 686.131 606.536 688.638 606.536 691.63L607.536 691.63ZM609.828 684.88L610.573 685.547C611.905 684.057 613.578 683.315 615.673 683.315L615.673 682.315L615.673 681.315C613.03 681.315 610.807 682.284 609.082 684.214L609.828 684.88ZM615.673 682.315L615.673 683.315C618.081 683.315 619.888 684.093 621.213 685.586L621.961 684.922L622.709 684.259C620.95 682.275 618.565 681.315 615.673 681.315L615.673 682.315ZM621.961 684.922L621.216 685.589C622.546 687.077 623.274 689.208 623.274 692.114L624.274 692.114L625.274 692.114C625.274 688.88 624.46 686.217 622.706 684.256L621.961 684.922ZM624.274 692.114L623.274 692.114C623.274 695.145 622.349 697.452 620.575 699.151L621.267 699.874L621.959 700.596C624.194 698.454 625.274 695.588 625.274 692.114L624.274 692.114ZM621.267 699.874L620.575 699.151C618.789 700.863 616.418 701.754 613.36 701.754L613.36 702.754L613.36 703.754C616.836 703.754 619.736 702.726 621.959 700.596L621.267 699.874ZM613.36 702.754L613.36 701.754C610.236 701.754 607.809 700.79 605.979 698.921L605.264 699.621L604.55 700.321C606.813 702.63 609.784 703.754 613.36 703.754L613.36 702.754ZM605.264 699.621L605.979 698.921C604.196 697.102 603.194 694.072 603.194 689.591L602.194 689.591L601.194 689.591C601.194 694.306 602.239 697.963 604.55 700.321L605.264 699.621ZM622.907 704.878L621.965 704.542L621.489 705.878L622.907 705.878L622.907 704.878ZM634.767 671.633L634.767 670.633L634.062 670.633L633.825 671.297L634.767 671.633ZM640.634 671.633L641.576 671.969L642.053 670.633L640.634 670.633L640.634 671.633ZM628.753 704.878L628.753 705.878L629.458 705.878L629.695 705.215L628.753 704.878ZM622.907 704.878L623.849 705.214L635.709 671.969L634.767 671.633L633.825 671.297L621.965 704.542L622.907 704.878ZM634.767 671.633L634.767 672.633L640.634 672.633L640.634 671.633L640.634 670.633L634.767 670.633L634.767 671.633ZM640.634 671.633L639.692 671.296L627.811 704.542L628.753 704.878L629.695 705.215L641.576 671.969L640.634 671.633ZM628.753 704.878L628.753 703.878L622.907 703.878L622.907 704.878L622.907 705.878L628.753 705.878L628.753 704.878ZM644.377 675.859L645.091 676.56L645.092 676.558L644.377 675.859ZM658.571 671.254L659.571 671.254L659.571 670.254L658.571 670.254L658.571 671.254ZM658.571 676.784L658.571 677.784L659.571 677.784L659.571 676.784L658.571 676.784ZM649.445 679.581L650.147 680.294L650.147 680.294L649.445 679.581ZM646.627 689.296L645.627 689.296L645.627 689.434L645.664 689.567L646.627 689.296ZM646.816 689.969L647.816 689.969L647.816 689.831L647.779 689.698L646.816 689.969ZM647.973 696.257L647.159 696.838L647.163 696.844L647.168 696.85L647.973 696.257ZM653.924 696.572L653.133 695.96L653.132 695.962L653.924 696.572ZM653.966 688.077L653.146 688.648L653.15 688.654L653.966 688.077ZM648.015 688.056L647.275 687.384L647.274 687.384L648.015 688.056ZM646.795 691.63L646.795 692.63L647.795 692.63L647.795 691.63L646.795 691.63ZM645.218 691.63L644.218 691.63L644.218 692.63L645.218 692.63L645.218 691.63ZM647.51 684.88L648.253 685.55L648.256 685.547L647.51 684.88ZM659.644 684.922L658.896 685.586L658.898 685.589L659.644 684.922ZM639.877 689.591L640.877 689.591L640.877 688.35L639.877 688.35L638.877 688.35L638.877 689.591L639.877 689.591ZM639.877 688.35L640.877 688.35C640.877 683.277 642.315 679.388 645.091 676.56L644.377 675.859L643.663 675.159C640.439 678.443 638.877 682.881 638.877 688.35L639.877 688.35ZM644.377 675.859L645.092 676.558C647.851 673.734 651.864 672.254 657.288 672.254L657.288 671.254L657.288 670.254C651.498 670.254 646.903 671.844 643.662 675.16L644.377 675.859ZM657.288 671.254L657.288 672.254L658.571 672.254L658.571 671.254L658.571 670.254L657.288 670.254L657.288 671.254ZM658.571 671.254L657.571 671.254L657.571 676.784L658.571 676.784L659.571 676.784L659.571 671.254L658.571 671.254ZM658.571 676.784L658.571 675.784L657.457 675.784L657.457 676.784L657.457 677.784L658.571 677.784L658.571 676.784ZM657.457 676.784L657.457 675.784C653.827 675.784 650.874 676.77 648.743 678.869L649.445 679.581L650.147 680.294C651.801 678.664 654.189 677.784 657.457 677.784L657.457 676.784ZM649.445 679.581L648.743 678.869C646.573 681.007 645.627 684.589 645.627 689.296L646.627 689.296L647.627 689.296C647.627 684.751 648.56 681.856 650.147 680.294L649.445 679.581ZM646.627 689.296L645.664 689.567L645.854 690.24L646.816 689.969L647.779 689.698L647.59 689.026L646.627 689.296ZM646.816 689.969L645.816 689.969C645.816 691.561 645.915 692.928 646.122 694.056C646.327 695.171 646.652 696.128 647.159 696.838L647.973 696.257L648.787 695.675C648.523 695.306 648.269 694.676 648.089 693.694C647.911 692.726 647.816 691.49 647.816 689.969L646.816 689.969ZM647.973 696.257L647.168 696.85C648.133 698.16 649.457 698.855 651.064 698.855L651.064 697.855L651.064 696.855C650.12 696.855 649.383 696.484 648.778 695.663L647.973 696.257ZM651.064 697.855L651.064 698.855C652.567 698.855 653.837 698.324 654.716 697.182L653.924 696.572L653.132 695.962C652.693 696.531 652.056 696.855 651.064 696.855L651.064 697.855ZM653.924 696.572L654.715 697.184C655.603 696.037 655.933 694.23 655.933 692.03L654.933 692.03L653.933 692.03C653.933 694.148 653.591 695.369 653.133 695.96L653.924 696.572ZM654.933 692.03L655.933 692.03C655.933 690.204 655.596 688.648 654.782 687.499L653.966 688.077L653.15 688.654C653.626 689.327 653.933 690.407 653.933 692.03L654.933 692.03ZM653.966 688.077L654.786 687.505C653.923 686.266 652.615 685.689 651.043 685.689L651.043 686.689L651.043 687.689C652.079 687.689 652.719 688.036 653.146 688.648L653.966 688.077ZM651.043 686.689L651.043 685.689C649.559 685.689 648.284 686.271 647.275 687.384L648.015 688.056L648.755 688.728C649.4 688.018 650.144 687.689 651.043 687.689L651.043 686.689ZM648.015 688.056L647.274 687.384C646.258 688.505 645.795 689.955 645.795 691.63L646.795 691.63L647.795 691.63C647.795 690.334 648.145 689.401 648.756 688.727L648.015 688.056ZM646.795 691.63L646.795 690.63L645.218 690.63L645.218 691.63L645.218 692.63L646.795 692.63L646.795 691.63ZM645.218 691.63L646.218 691.63C646.218 689.015 646.926 687.023 648.253 685.55L647.51 684.88L646.767 684.211C645.038 686.131 644.218 688.638 644.218 691.63L645.218 691.63ZM647.51 684.88L648.256 685.547C649.587 684.057 651.261 683.315 653.356 683.315L653.356 682.315L653.356 681.315C650.713 681.315 648.489 682.284 646.765 684.214L647.51 684.88ZM653.356 682.315L653.356 683.315C655.764 683.315 657.571 684.093 658.896 685.586L659.644 684.922L660.392 684.259C658.632 682.275 656.247 681.315 653.356 681.315L653.356 682.315ZM659.644 684.922L658.898 685.589C660.229 687.077 660.957 689.208 660.957 692.114L661.957 692.114L662.957 692.114C662.957 688.88 662.142 686.217 660.389 684.256L659.644 684.922ZM661.957 692.114L660.957 692.114C660.957 695.145 660.032 697.452 658.258 699.151L658.95 699.874L659.641 700.596C661.877 698.454 662.957 695.588 662.957 692.114L661.957 692.114ZM658.95 699.874L658.258 699.151C656.472 700.863 654.1 701.754 651.043 701.754L651.043 702.754L651.043 703.754C654.519 703.754 657.418 702.726 659.641 700.596L658.95 699.874ZM651.043 702.754L651.043 701.754C647.919 701.754 645.492 700.79 643.661 698.921L642.947 699.621L642.233 700.321C644.496 702.63 647.466 703.754 651.043 703.754L651.043 702.754ZM642.947 699.621L643.661 698.921C641.879 697.102 640.877 694.072 640.877 689.591L639.877 689.591L638.877 689.591C638.877 694.306 639.922 697.963 642.233 700.321L642.947 699.621ZM666.52 674.009L667.209 674.733L667.209 674.733L666.52 674.009ZM682.522 674.261L681.808 674.961L681.811 674.963L682.522 674.261ZM681.114 697.876L681.824 698.58L681.826 698.578L681.114 697.876ZM668.202 702.481L668.202 703.481L668.21 703.481L668.202 702.481ZM666.898 702.481L665.898 702.481L665.898 703.481L666.898 703.481L666.898 702.481ZM666.898 697.035L666.898 696.035L665.898 696.035L665.898 697.035L666.898 697.035ZM675.983 694.259L675.281 693.547L675.278 693.549L675.983 694.259ZM678.8 684.67L679.8 684.67L679.8 684.587L679.787 684.506L678.8 684.67ZM678.674 683.913L677.674 683.913L677.674 683.996L677.688 684.077L678.674 683.913ZM671.525 677.394L670.739 676.776L670.737 676.778L671.525 677.394ZM677.455 685.848L676.725 685.164L676.724 685.165L677.455 685.848ZM678.695 682.294L678.695 681.294L677.695 681.294L677.695 682.294L678.695 682.294ZM680.167 682.294L681.167 682.294L681.167 681.294L680.167 681.294L680.167 682.294ZM677.959 688.939L677.199 688.29L677.196 688.293L677.959 688.939ZM665.826 688.918L665.078 689.581L665.081 689.585L665.826 688.918ZM663.513 681.726L664.513 681.726C664.513 678.711 665.437 676.419 667.209 674.733L666.52 674.009L665.831 673.284C663.594 675.412 662.513 678.265 662.513 681.726L663.513 681.726ZM666.52 674.009L667.209 674.733C669.01 673.02 671.39 672.128 674.448 672.128L674.448 671.128L674.448 670.128C670.972 670.128 668.067 671.157 665.831 673.284L666.52 674.009ZM674.448 671.128L674.448 672.128C677.557 672.128 679.977 673.092 681.808 674.961L682.522 674.261L683.237 673.561C680.975 671.253 678.011 670.128 674.448 670.128L674.448 671.128ZM682.522 674.261L681.811 674.963C683.605 676.783 684.614 679.812 684.614 684.292L685.614 684.292L686.614 684.292C686.614 679.575 685.561 675.917 683.234 673.559L682.522 674.261ZM685.614 684.292L684.614 684.292L684.614 685.532L685.614 685.532L686.614 685.532L686.614 684.292L685.614 684.292ZM685.614 685.532L684.614 685.532C684.614 690.516 683.179 694.357 680.402 697.174L681.114 697.876L681.826 698.578C685.048 695.31 686.614 690.922 686.614 685.532L685.614 685.532ZM681.114 697.876L680.403 697.172C677.642 699.959 673.624 701.44 668.195 701.481L668.202 702.481L668.21 703.481C673.995 703.438 678.585 701.849 681.824 698.58L681.114 697.876ZM668.202 702.481L668.202 701.481L666.898 701.481L666.898 702.481L666.898 703.481L668.202 703.481L668.202 702.481ZM666.898 702.481L667.898 702.481L667.898 697.035L666.898 697.035L665.898 697.035L665.898 702.481L666.898 702.481ZM666.898 697.035L666.898 698.035L668.034 698.035L668.034 697.035L668.034 696.035L666.898 696.035L666.898 697.035ZM668.034 697.035L668.034 698.035C671.648 698.035 674.583 697.057 676.687 694.969L675.983 694.259L675.278 693.549C673.653 695.162 671.289 696.035 668.034 696.035L668.034 697.035ZM675.983 694.259L676.684 694.971C678.852 692.836 679.8 689.299 679.8 684.67L678.8 684.67L677.8 684.67C677.8 689.125 676.87 691.981 675.281 693.547L675.983 694.259ZM678.8 684.67L679.787 684.506L679.661 683.749L678.674 683.913L677.688 684.077L677.814 684.835L678.8 684.67ZM678.674 683.913L679.674 683.913C679.674 682.383 679.578 681.06 679.374 679.957C679.172 678.864 678.853 677.923 678.364 677.209L677.539 677.773L676.713 678.337C676.982 678.73 677.231 679.366 677.407 680.32C677.582 681.264 677.674 682.457 677.674 683.913L678.674 683.913ZM677.539 677.773L678.364 677.209C677.42 675.827 676.059 675.112 674.384 675.112L674.384 676.112L674.384 677.112C675.401 677.112 676.143 677.503 676.713 678.337L677.539 677.773ZM674.384 676.112L674.384 675.112C672.891 675.112 671.628 675.645 670.739 676.776L671.525 677.394L672.31 678.013C672.767 677.433 673.411 677.112 674.384 677.112L674.384 676.112ZM671.525 677.394L670.737 676.778C669.859 677.899 669.536 679.667 669.536 681.81L670.536 681.81L671.536 681.81C671.536 679.748 671.872 678.572 672.312 678.011L671.525 677.394ZM670.536 681.81L669.536 681.81C669.536 683.693 669.869 685.283 670.696 686.416L671.504 685.827L672.311 685.237C671.849 684.604 671.536 683.517 671.536 681.81L670.536 681.81ZM671.504 685.827L670.696 686.416C671.564 687.606 672.862 688.151 674.405 688.151L674.405 687.151L674.405 686.151C673.37 686.151 672.732 685.814 672.311 685.237L671.504 685.827ZM674.405 687.151L674.405 688.151C675.894 688.151 677.177 687.608 678.185 686.531L677.455 685.848L676.724 685.165C676.106 685.826 675.356 686.151 674.405 686.151L674.405 687.151ZM677.455 685.848L678.184 686.531C679.223 685.423 679.695 683.973 679.695 682.294L678.695 682.294L677.695 682.294C677.695 683.587 677.341 684.506 676.725 685.164L677.455 685.848ZM678.695 682.294L678.695 683.294L680.167 683.294L680.167 682.294L680.167 681.294L678.695 681.294L678.695 682.294ZM680.167 682.294L679.167 682.294C679.167 684.81 678.487 686.78 677.199 688.29L677.959 688.939L678.72 689.588C680.375 687.649 681.167 685.189 681.167 682.294L680.167 682.294ZM677.959 688.939L677.196 688.293C675.943 689.775 674.29 690.525 672.134 690.525L672.134 691.525L672.134 692.525C674.829 692.525 677.059 691.552 678.723 689.585L677.959 688.939ZM672.134 691.525L672.134 690.525C669.727 690.525 667.911 689.747 666.571 688.251L665.826 688.918L665.081 689.585C666.853 691.565 669.243 692.525 672.134 692.525L672.134 691.525ZM665.826 688.918L666.574 688.254C665.24 686.75 664.513 684.616 664.513 681.726L663.513 681.726L662.513 681.726C662.513 684.948 663.328 687.609 665.078 689.581L665.826 688.918Z" fill="black" mask="url(#path-11-outside-4_17007_6863)"/> +<mask id="path-13-outside-5_17007_6863" maskUnits="userSpaceOnUse" x="93" y="497" width="836" height="67" fill="black"> +<rect fill="white" x="93" y="497" width="836" height="67"/> +<path d="M96.6781 536.108L96.6781 533.111C96.6781 523.149 99.4881 515.318 105.108 509.618C110.728 503.892 118.599 501.028 128.721 501.028L132.077 501.028L132.077 512.175L129.2 512.175C123.154 512.175 118.519 513.933 115.297 517.449C112.074 520.939 110.462 527.198 110.462 536.228L110.502 537.106C110.502 542.807 111.168 546.602 112.5 548.493C113.858 550.384 115.616 551.33 117.774 551.33C119.798 551.33 121.423 550.598 122.648 549.133C123.873 547.641 124.486 544.671 124.486 540.223C124.486 537 123.913 534.603 122.768 533.031C121.649 531.433 119.998 530.634 117.814 530.634C115.789 530.634 114.071 531.406 112.66 532.951C111.248 534.47 110.542 536.547 110.542 539.184L108.145 539.184C108.145 533.99 109.623 529.955 112.58 527.078C115.536 524.175 119.052 522.723 123.127 522.723C127.789 522.723 131.504 524.268 134.275 527.358C137.045 530.421 138.43 534.842 138.43 540.622C138.43 546.935 136.459 551.889 132.517 555.485C128.574 559.054 123.62 560.839 117.654 560.839C111.155 560.839 106.027 558.855 102.272 554.886C98.5426 550.891 96.6781 544.631 96.6781 536.108ZM144.5 521.205C144.5 514.919 146.471 509.991 150.413 506.422C154.355 502.826 159.322 501.028 165.315 501.028C171.788 501.028 176.889 503.013 180.618 506.981C184.373 510.95 186.251 517.21 186.251 525.76L186.251 528.716C186.251 538.651 183.441 546.469 177.821 552.169C172.227 557.869 164.357 560.732 154.208 560.759L150.852 560.759L150.852 549.812L153.729 549.812C159.775 549.838 164.41 548.107 167.633 544.618C170.856 541.129 172.467 534.882 172.467 525.879L172.427 524.761C172.427 519.194 171.761 515.465 170.43 513.574C169.098 511.656 167.34 510.697 165.156 510.697C163.131 510.697 161.507 511.443 160.281 512.934C159.056 514.399 158.443 517.289 158.443 521.604C158.443 524.987 159.003 527.464 160.121 529.036C161.267 530.581 162.932 531.353 165.116 531.353C167.14 531.353 168.858 530.607 170.27 529.116C171.708 527.597 172.427 525.52 172.427 522.883L174.745 522.883C174.745 528.05 173.28 532.072 170.35 534.949C167.42 537.799 163.904 539.224 159.802 539.224C155.141 539.224 151.425 537.666 148.655 534.549C145.885 531.433 144.5 526.985 144.5 521.205ZM192.721 536.108L192.721 533.111C192.721 523.149 195.531 515.318 201.151 509.618C206.771 503.892 214.642 501.028 224.763 501.028L228.12 501.028L228.12 512.175L225.243 512.175C219.197 512.175 214.562 513.933 211.339 517.449C208.116 520.939 206.505 527.198 206.505 536.228L206.545 537.106C206.545 542.807 207.21 546.602 208.542 548.493C209.901 550.384 211.659 551.33 213.816 551.33C215.84 551.33 217.465 550.598 218.69 549.133C219.916 547.641 220.528 544.671 220.528 540.223C220.528 537 219.956 534.603 218.81 533.031C217.692 531.433 216.04 530.634 213.856 530.634C211.832 530.634 210.114 531.406 208.702 532.951C207.29 534.47 206.584 536.547 206.584 539.184L204.187 539.184C204.187 533.99 205.666 529.955 208.622 527.078C211.579 524.175 215.095 522.723 219.17 522.723C223.831 522.723 227.547 524.268 230.317 527.358C233.087 530.421 234.472 534.842 234.472 540.622C234.472 546.935 232.501 551.889 228.559 555.485C224.617 559.054 219.663 560.839 213.696 560.839C207.197 560.839 202.07 558.855 198.314 554.886C194.585 550.891 192.721 544.631 192.721 536.108ZM240.542 521.205C240.542 514.919 242.513 509.991 246.455 506.422C250.397 502.826 255.365 501.028 261.358 501.028C267.83 501.028 272.931 503.013 276.66 506.981C280.416 510.95 282.294 517.21 282.294 525.76L282.294 528.716C282.294 538.651 279.484 546.469 273.863 552.169C268.27 557.869 260.399 560.732 250.251 560.759L246.895 560.759L246.895 549.812L249.771 549.812C255.818 549.838 260.452 548.107 263.675 544.618C266.898 541.129 268.51 534.882 268.51 525.879L268.47 524.761C268.47 519.194 267.804 515.465 266.472 513.574C265.14 511.656 263.382 510.697 261.198 510.697C259.174 510.697 257.549 511.443 256.324 512.934C255.099 514.399 254.486 517.289 254.486 521.604C254.486 524.987 255.045 527.464 256.164 529.036C257.309 530.581 258.974 531.353 261.158 531.353C263.182 531.353 264.9 530.607 266.312 529.116C267.751 527.597 268.47 525.52 268.47 522.883L270.787 522.883C270.787 528.05 269.322 532.072 266.392 534.949C263.462 537.799 259.946 539.224 255.844 539.224C251.183 539.224 247.467 537.666 244.697 534.549C241.927 531.433 240.542 526.985 240.542 521.205ZM311.733 539.863L311.733 521.964C311.733 515.278 313.531 510.111 317.127 506.462C320.723 502.813 325.664 500.988 331.95 500.988C338.236 500.988 343.177 502.786 346.773 506.382C350.395 509.951 352.206 515.145 352.206 521.964L352.206 539.863C352.206 546.789 350.315 552.023 346.533 555.565C342.777 559.108 337.916 560.866 331.95 560.839C325.611 560.812 320.656 559.041 317.087 555.525C313.518 551.983 311.733 546.762 311.733 539.863ZM325.637 542.7C325.637 545.47 326.157 547.601 327.195 549.093C328.261 550.584 329.846 551.33 331.95 551.33C334.054 551.33 335.639 550.584 336.704 549.093C337.77 547.601 338.302 545.47 338.302 542.7L338.302 519.407C338.302 516.584 337.77 514.426 336.704 512.934C335.639 511.443 334.054 510.697 331.95 510.697C329.846 510.697 328.261 511.443 327.195 512.934C326.157 514.426 325.637 516.584 325.637 519.407L325.637 542.7ZM381.969 560L381.969 545.297L382.408 544.618L382.408 519.487L382.089 519.487L371.021 538.105L387.402 538.105L388.601 537.746L401.426 537.746L401.426 548.533L358.156 548.533L358.156 538.625L383.487 501.827L394.754 501.827L394.754 560L381.969 560ZM407.136 560L407.136 551.33L428.152 529.515C429.75 527.651 431.122 525.746 432.267 523.802C433.413 521.857 433.985 519.846 433.985 517.769C433.985 515.238 433.413 513.427 432.267 512.335C431.122 511.243 429.617 510.697 427.753 510.697C425.808 510.697 424.237 511.336 423.038 512.615C421.839 513.867 421.24 516.331 421.24 520.006L421.24 521.644L407.136 521.644L407.136 518.208C407.136 513.227 409.054 509.112 412.89 505.863C416.725 502.613 421.76 500.988 427.992 500.988C434.518 500.988 439.472 502.44 442.855 505.343C446.238 508.22 447.943 512.135 447.969 517.09C447.969 520.765 447.183 524.055 445.612 526.958C444.067 529.862 441.856 532.818 438.98 535.828L427.952 548.853L449.328 548.853L449.328 560L407.136 560ZM455.797 539.863L455.797 521.964C455.797 515.278 457.595 510.111 461.191 506.462C464.787 502.813 469.728 500.988 476.014 500.988C482.3 500.988 487.241 502.786 490.836 506.382C494.459 509.951 496.27 515.145 496.27 521.964L496.27 539.863C496.27 546.789 494.379 552.023 490.597 555.565C486.841 559.108 481.98 560.866 476.014 560.839C469.674 560.812 464.72 559.041 461.151 555.525C457.582 551.983 455.797 546.762 455.797 539.863ZM469.701 542.7C469.701 545.47 470.22 547.601 471.259 549.093C472.325 550.584 473.909 551.33 476.014 551.33C478.118 551.33 479.703 550.584 480.768 549.093C481.834 547.601 482.366 545.47 482.366 542.7L482.366 519.407C482.366 516.584 481.834 514.426 480.768 512.934C479.703 511.443 478.118 510.697 476.014 510.697C473.909 510.697 472.325 511.443 471.259 512.934C470.22 514.426 469.701 516.584 469.701 519.407L469.701 542.7ZM525.39 544.178C525.39 540.369 526.402 537.2 528.427 534.669C530.477 532.139 532.675 530.527 535.019 529.835L535.019 529.675C532.648 528.61 530.717 526.998 529.226 524.841C527.761 522.657 527.028 519.913 527.028 516.61C527.028 511.842 528.733 508.047 532.142 505.223C535.578 502.4 540.359 500.988 546.486 500.988C552.612 500.988 557.366 502.44 560.749 505.343C564.159 508.22 565.863 511.976 565.863 516.61C565.863 520.02 565.091 522.83 563.546 525.04C562.028 527.225 560.097 528.756 557.753 529.635L557.753 529.795C560.176 530.461 562.401 532.072 564.425 534.629C566.476 537.16 567.501 540.343 567.501 544.178C567.501 549.319 565.557 553.381 561.668 556.364C557.806 559.347 552.745 560.839 546.486 560.839C540.2 560.839 535.112 559.347 531.223 556.364C527.334 553.381 525.39 549.319 525.39 544.178ZM539.414 542.66C539.414 545.776 540.026 548.041 541.252 549.452C542.504 550.837 544.235 551.53 546.446 551.53C548.63 551.53 550.335 550.824 551.56 549.412C552.785 548.001 553.398 545.75 553.398 542.66C553.398 539.437 552.745 537.173 551.44 535.868C550.161 534.536 548.497 533.87 546.446 533.87C544.395 533.87 542.703 534.536 541.372 535.868C540.066 537.173 539.414 539.437 539.414 542.66ZM540.333 518.448C540.333 521.138 540.905 523.189 542.051 524.601C543.196 525.986 544.661 526.679 546.446 526.679C548.204 526.679 549.655 525.986 550.801 524.601C551.973 523.189 552.559 521.138 552.559 518.448C552.559 515.731 552.039 513.734 551 512.455C549.988 511.15 548.47 510.497 546.446 510.497C544.421 510.497 542.89 511.123 541.851 512.375C540.839 513.627 540.333 515.651 540.333 518.448ZM573.411 544.178C573.411 540.369 574.423 537.2 576.448 534.669C578.499 532.139 580.696 530.527 583.04 529.835L583.04 529.675C580.67 528.61 578.738 526.998 577.247 524.841C575.782 522.657 575.049 519.913 575.049 516.61C575.049 511.842 576.754 508.047 580.163 505.223C583.599 502.4 588.381 500.988 594.507 500.988C600.633 500.988 605.388 502.44 608.77 505.343C612.18 508.22 613.884 511.976 613.884 516.61C613.884 520.02 613.112 522.83 611.567 525.04C610.049 527.225 608.118 528.756 605.774 529.635L605.774 529.795C608.198 530.461 610.422 532.072 612.446 534.629C614.497 537.16 615.523 540.343 615.523 544.178C615.523 549.319 613.578 553.381 609.689 556.364C605.827 559.347 600.766 560.839 594.507 560.839C588.221 560.839 583.133 559.347 579.245 556.364C575.356 553.381 573.411 549.319 573.411 544.178ZM587.435 542.66C587.435 545.776 588.048 548.041 589.273 549.452C590.525 550.837 592.256 551.53 594.467 551.53C596.651 551.53 598.356 550.824 599.581 549.412C600.806 548.001 601.419 545.75 601.419 542.66C601.419 539.437 600.766 537.173 599.461 535.868C598.183 534.536 596.518 533.87 594.467 533.87C592.416 533.87 590.725 534.536 589.393 535.868C588.088 537.173 587.435 539.437 587.435 542.66ZM588.354 518.448C588.354 521.138 588.927 523.189 590.072 524.601C591.217 525.986 592.682 526.679 594.467 526.679C596.225 526.679 597.677 525.986 598.822 524.601C599.994 523.189 600.58 521.138 600.58 518.448C600.58 515.731 600.06 513.734 599.022 512.455C598.009 511.15 596.491 510.497 594.467 510.497C592.443 510.497 590.911 511.123 589.872 512.375C588.86 513.627 588.354 515.651 588.354 518.448ZM621.433 544.178C621.433 540.369 622.445 537.2 624.469 534.669C626.52 532.139 628.717 530.527 631.061 529.835L631.061 529.675C628.691 528.61 626.76 526.998 625.268 524.841C623.803 522.657 623.071 519.913 623.071 516.61C623.071 511.842 624.775 508.047 628.185 505.223C631.621 502.4 636.402 500.988 642.528 500.988C648.654 500.988 653.409 502.44 656.792 505.343C660.201 508.22 661.906 511.976 661.906 516.61C661.906 520.02 661.133 522.83 659.588 525.04C658.07 527.225 656.139 528.756 653.795 529.635L653.795 529.795C656.219 530.461 658.443 532.072 660.467 534.629C662.518 537.16 663.544 540.343 663.544 544.178C663.544 549.319 661.599 553.381 657.711 556.364C653.848 559.347 648.788 560.839 642.528 560.839C636.242 560.839 631.155 559.347 627.266 556.364C623.377 553.381 621.433 549.319 621.433 544.178ZM635.456 542.66C635.456 545.776 636.069 548.041 637.294 549.452C638.546 550.837 640.277 551.53 642.488 551.53C644.672 551.53 646.377 550.824 647.602 549.412C648.827 548.001 649.44 545.75 649.44 542.66C649.44 539.437 648.788 537.173 647.482 535.868C646.204 534.536 644.539 533.87 642.488 533.87C640.437 533.87 638.746 534.536 637.414 535.868C636.109 537.173 635.456 539.437 635.456 542.66ZM636.375 518.448C636.375 521.138 636.948 523.189 638.093 524.601C639.239 525.986 640.704 526.679 642.488 526.679C644.246 526.679 645.698 525.986 646.843 524.601C648.015 523.189 648.601 521.138 648.601 518.448C648.601 515.731 648.082 513.734 647.043 512.455C646.031 511.15 644.512 510.497 642.488 510.497C640.464 510.497 638.932 511.123 637.893 512.375C636.881 513.627 636.375 515.651 636.375 518.448ZM670.413 539.863L670.413 521.964C670.413 515.278 672.211 510.111 675.806 506.462C679.402 502.813 684.343 500.988 690.629 500.988C696.915 500.988 701.856 502.786 705.452 506.382C709.075 509.951 710.886 515.145 710.886 521.964L710.886 539.863C710.886 546.789 708.995 552.023 705.212 555.565C701.457 559.108 696.596 560.866 690.629 560.839C684.29 560.812 679.336 559.041 675.766 555.525C672.197 551.983 670.413 546.762 670.413 539.863ZM684.317 542.7C684.317 545.47 684.836 547.601 685.875 549.093C686.94 550.584 688.525 551.33 690.629 551.33C692.733 551.33 694.318 550.584 695.384 549.093C696.449 547.601 696.982 545.47 696.982 542.7L696.982 519.407C696.982 516.584 696.449 514.426 695.384 512.934C694.318 511.443 692.733 510.697 690.629 510.697C688.525 510.697 686.94 511.443 685.875 512.934C684.836 514.426 684.317 516.584 684.317 519.407L684.317 542.7ZM740.965 539.863L740.965 521.964C740.965 515.278 742.763 510.111 746.358 506.462C749.954 502.813 754.895 500.988 761.181 500.988C767.467 500.988 772.408 502.786 776.004 506.382C779.627 509.951 781.438 515.145 781.438 521.964L781.438 539.863C781.438 546.789 779.547 552.023 775.764 555.565C772.009 559.108 767.148 560.866 761.181 560.839C754.842 560.812 749.888 559.041 746.318 555.525C742.749 551.983 740.965 546.762 740.965 539.863ZM754.869 542.7C754.869 545.47 755.388 547.601 756.427 549.093C757.492 550.584 759.077 551.33 761.181 551.33C763.285 551.33 764.87 550.584 765.936 549.093C767.001 547.601 767.534 545.47 767.534 542.7L767.534 519.407C767.534 516.584 767.001 514.426 765.936 512.934C764.87 511.443 763.285 510.697 761.181 510.697C759.077 510.697 757.492 511.443 756.427 512.934C755.388 514.426 754.869 516.584 754.869 519.407L754.869 542.7ZM811.2 560L811.2 545.297L811.64 544.618L811.64 519.487L811.32 519.487L800.253 538.105L816.634 538.105L817.832 537.746L830.658 537.746L830.658 548.533L787.388 548.533L787.388 538.625L812.718 501.827L823.985 501.827L823.985 560L811.2 560ZM836.368 560L836.368 551.33L857.383 529.515C858.982 527.651 860.353 525.746 861.499 523.802C862.644 521.857 863.217 519.846 863.217 517.769C863.217 515.238 862.644 513.427 861.499 512.335C860.353 511.243 858.848 510.697 856.984 510.697C855.04 510.697 853.468 511.336 852.269 512.615C851.071 513.867 850.471 516.331 850.471 520.006L850.471 521.644L836.368 521.644L836.368 518.208C836.368 513.227 838.286 509.112 842.121 505.863C845.957 502.613 850.991 500.988 857.224 500.988C863.749 500.988 868.704 502.44 872.086 505.343C875.469 508.22 877.174 512.135 877.201 517.09C877.201 520.765 876.415 524.055 874.843 526.958C873.298 529.862 871.088 532.818 868.211 535.828L857.184 548.853L878.559 548.853L878.559 560L836.368 560ZM885.028 539.863L885.028 521.964C885.028 515.278 886.826 510.111 890.422 506.462C894.018 502.813 898.959 500.988 905.245 500.988C911.531 500.988 916.472 502.786 920.068 506.382C923.69 509.951 925.501 515.145 925.501 521.964L925.501 539.863C925.501 546.789 923.61 552.023 919.828 555.565C916.072 559.108 911.211 560.866 905.245 560.839C898.906 560.812 893.951 559.041 890.382 555.525C886.813 551.983 885.028 546.762 885.028 539.863ZM898.932 542.7C898.932 545.47 899.452 547.601 900.49 549.093C901.556 550.584 903.141 551.33 905.245 551.33C907.349 551.33 908.934 550.584 909.999 549.093C911.065 547.601 911.598 545.47 911.598 542.7L911.598 519.407C911.598 516.584 911.065 514.426 909.999 512.934C908.934 511.443 907.349 510.697 905.245 510.697C903.141 510.697 901.556 511.443 900.49 512.934C899.452 514.426 898.932 516.584 898.932 519.407L898.932 542.7Z"/> +</mask> +<path d="M96.6781 536.108L96.6781 533.111C96.6781 523.149 99.4881 515.318 105.108 509.618C110.728 503.892 118.599 501.028 128.721 501.028L132.077 501.028L132.077 512.175L129.2 512.175C123.154 512.175 118.519 513.933 115.297 517.449C112.074 520.939 110.462 527.198 110.462 536.228L110.502 537.106C110.502 542.807 111.168 546.602 112.5 548.493C113.858 550.384 115.616 551.33 117.774 551.33C119.798 551.33 121.423 550.598 122.648 549.133C123.873 547.641 124.486 544.671 124.486 540.223C124.486 537 123.913 534.603 122.768 533.031C121.649 531.433 119.998 530.634 117.814 530.634C115.789 530.634 114.071 531.406 112.66 532.951C111.248 534.47 110.542 536.547 110.542 539.184L108.145 539.184C108.145 533.99 109.623 529.955 112.58 527.078C115.536 524.175 119.052 522.723 123.127 522.723C127.789 522.723 131.504 524.268 134.275 527.358C137.045 530.421 138.43 534.842 138.43 540.622C138.43 546.935 136.459 551.889 132.517 555.485C128.574 559.054 123.62 560.839 117.654 560.839C111.155 560.839 106.027 558.855 102.272 554.886C98.5426 550.891 96.6781 544.631 96.6781 536.108ZM144.5 521.205C144.5 514.919 146.471 509.991 150.413 506.422C154.355 502.826 159.322 501.028 165.315 501.028C171.788 501.028 176.889 503.013 180.618 506.981C184.373 510.95 186.251 517.21 186.251 525.76L186.251 528.716C186.251 538.651 183.441 546.469 177.821 552.169C172.227 557.869 164.357 560.732 154.208 560.759L150.852 560.759L150.852 549.812L153.729 549.812C159.775 549.838 164.41 548.107 167.633 544.618C170.856 541.129 172.467 534.882 172.467 525.879L172.427 524.761C172.427 519.194 171.761 515.465 170.43 513.574C169.098 511.656 167.34 510.697 165.156 510.697C163.131 510.697 161.507 511.443 160.281 512.934C159.056 514.399 158.443 517.289 158.443 521.604C158.443 524.987 159.003 527.464 160.121 529.036C161.267 530.581 162.932 531.353 165.116 531.353C167.14 531.353 168.858 530.607 170.27 529.116C171.708 527.597 172.427 525.52 172.427 522.883L174.745 522.883C174.745 528.05 173.28 532.072 170.35 534.949C167.42 537.799 163.904 539.224 159.802 539.224C155.141 539.224 151.425 537.666 148.655 534.549C145.885 531.433 144.5 526.985 144.5 521.205ZM192.721 536.108L192.721 533.111C192.721 523.149 195.531 515.318 201.151 509.618C206.771 503.892 214.642 501.028 224.763 501.028L228.12 501.028L228.12 512.175L225.243 512.175C219.197 512.175 214.562 513.933 211.339 517.449C208.116 520.939 206.505 527.198 206.505 536.228L206.545 537.106C206.545 542.807 207.21 546.602 208.542 548.493C209.901 550.384 211.659 551.33 213.816 551.33C215.84 551.33 217.465 550.598 218.69 549.133C219.916 547.641 220.528 544.671 220.528 540.223C220.528 537 219.956 534.603 218.81 533.031C217.692 531.433 216.04 530.634 213.856 530.634C211.832 530.634 210.114 531.406 208.702 532.951C207.29 534.47 206.584 536.547 206.584 539.184L204.187 539.184C204.187 533.99 205.666 529.955 208.622 527.078C211.579 524.175 215.095 522.723 219.17 522.723C223.831 522.723 227.547 524.268 230.317 527.358C233.087 530.421 234.472 534.842 234.472 540.622C234.472 546.935 232.501 551.889 228.559 555.485C224.617 559.054 219.663 560.839 213.696 560.839C207.197 560.839 202.07 558.855 198.314 554.886C194.585 550.891 192.721 544.631 192.721 536.108ZM240.542 521.205C240.542 514.919 242.513 509.991 246.455 506.422C250.397 502.826 255.365 501.028 261.358 501.028C267.83 501.028 272.931 503.013 276.66 506.981C280.416 510.95 282.294 517.21 282.294 525.76L282.294 528.716C282.294 538.651 279.484 546.469 273.863 552.169C268.27 557.869 260.399 560.732 250.251 560.759L246.895 560.759L246.895 549.812L249.771 549.812C255.818 549.838 260.452 548.107 263.675 544.618C266.898 541.129 268.51 534.882 268.51 525.879L268.47 524.761C268.47 519.194 267.804 515.465 266.472 513.574C265.14 511.656 263.382 510.697 261.198 510.697C259.174 510.697 257.549 511.443 256.324 512.934C255.099 514.399 254.486 517.289 254.486 521.604C254.486 524.987 255.045 527.464 256.164 529.036C257.309 530.581 258.974 531.353 261.158 531.353C263.182 531.353 264.9 530.607 266.312 529.116C267.751 527.597 268.47 525.52 268.47 522.883L270.787 522.883C270.787 528.05 269.322 532.072 266.392 534.949C263.462 537.799 259.946 539.224 255.844 539.224C251.183 539.224 247.467 537.666 244.697 534.549C241.927 531.433 240.542 526.985 240.542 521.205ZM311.733 539.863L311.733 521.964C311.733 515.278 313.531 510.111 317.127 506.462C320.723 502.813 325.664 500.988 331.95 500.988C338.236 500.988 343.177 502.786 346.773 506.382C350.395 509.951 352.206 515.145 352.206 521.964L352.206 539.863C352.206 546.789 350.315 552.023 346.533 555.565C342.777 559.108 337.916 560.866 331.95 560.839C325.611 560.812 320.656 559.041 317.087 555.525C313.518 551.983 311.733 546.762 311.733 539.863ZM325.637 542.7C325.637 545.47 326.157 547.601 327.195 549.093C328.261 550.584 329.846 551.33 331.95 551.33C334.054 551.33 335.639 550.584 336.704 549.093C337.77 547.601 338.302 545.47 338.302 542.7L338.302 519.407C338.302 516.584 337.77 514.426 336.704 512.934C335.639 511.443 334.054 510.697 331.95 510.697C329.846 510.697 328.261 511.443 327.195 512.934C326.157 514.426 325.637 516.584 325.637 519.407L325.637 542.7ZM381.969 560L381.969 545.297L382.408 544.618L382.408 519.487L382.089 519.487L371.021 538.105L387.402 538.105L388.601 537.746L401.426 537.746L401.426 548.533L358.156 548.533L358.156 538.625L383.487 501.827L394.754 501.827L394.754 560L381.969 560ZM407.136 560L407.136 551.33L428.152 529.515C429.75 527.651 431.122 525.746 432.267 523.802C433.413 521.857 433.985 519.846 433.985 517.769C433.985 515.238 433.413 513.427 432.267 512.335C431.122 511.243 429.617 510.697 427.753 510.697C425.808 510.697 424.237 511.336 423.038 512.615C421.839 513.867 421.24 516.331 421.24 520.006L421.24 521.644L407.136 521.644L407.136 518.208C407.136 513.227 409.054 509.112 412.89 505.863C416.725 502.613 421.76 500.988 427.992 500.988C434.518 500.988 439.472 502.44 442.855 505.343C446.238 508.22 447.943 512.135 447.969 517.09C447.969 520.765 447.183 524.055 445.612 526.958C444.067 529.862 441.856 532.818 438.98 535.828L427.952 548.853L449.328 548.853L449.328 560L407.136 560ZM455.797 539.863L455.797 521.964C455.797 515.278 457.595 510.111 461.191 506.462C464.787 502.813 469.728 500.988 476.014 500.988C482.3 500.988 487.241 502.786 490.836 506.382C494.459 509.951 496.27 515.145 496.27 521.964L496.27 539.863C496.27 546.789 494.379 552.023 490.597 555.565C486.841 559.108 481.98 560.866 476.014 560.839C469.674 560.812 464.72 559.041 461.151 555.525C457.582 551.983 455.797 546.762 455.797 539.863ZM469.701 542.7C469.701 545.47 470.22 547.601 471.259 549.093C472.325 550.584 473.909 551.33 476.014 551.33C478.118 551.33 479.703 550.584 480.768 549.093C481.834 547.601 482.366 545.47 482.366 542.7L482.366 519.407C482.366 516.584 481.834 514.426 480.768 512.934C479.703 511.443 478.118 510.697 476.014 510.697C473.909 510.697 472.325 511.443 471.259 512.934C470.22 514.426 469.701 516.584 469.701 519.407L469.701 542.7ZM525.39 544.178C525.39 540.369 526.402 537.2 528.427 534.669C530.477 532.139 532.675 530.527 535.019 529.835L535.019 529.675C532.648 528.61 530.717 526.998 529.226 524.841C527.761 522.657 527.028 519.913 527.028 516.61C527.028 511.842 528.733 508.047 532.142 505.223C535.578 502.4 540.359 500.988 546.486 500.988C552.612 500.988 557.366 502.44 560.749 505.343C564.159 508.22 565.863 511.976 565.863 516.61C565.863 520.02 565.091 522.83 563.546 525.04C562.028 527.225 560.097 528.756 557.753 529.635L557.753 529.795C560.176 530.461 562.401 532.072 564.425 534.629C566.476 537.16 567.501 540.343 567.501 544.178C567.501 549.319 565.557 553.381 561.668 556.364C557.806 559.347 552.745 560.839 546.486 560.839C540.2 560.839 535.112 559.347 531.223 556.364C527.334 553.381 525.39 549.319 525.39 544.178ZM539.414 542.66C539.414 545.776 540.026 548.041 541.252 549.452C542.504 550.837 544.235 551.53 546.446 551.53C548.63 551.53 550.335 550.824 551.56 549.412C552.785 548.001 553.398 545.75 553.398 542.66C553.398 539.437 552.745 537.173 551.44 535.868C550.161 534.536 548.497 533.87 546.446 533.87C544.395 533.87 542.703 534.536 541.372 535.868C540.066 537.173 539.414 539.437 539.414 542.66ZM540.333 518.448C540.333 521.138 540.905 523.189 542.051 524.601C543.196 525.986 544.661 526.679 546.446 526.679C548.204 526.679 549.655 525.986 550.801 524.601C551.973 523.189 552.559 521.138 552.559 518.448C552.559 515.731 552.039 513.734 551 512.455C549.988 511.15 548.47 510.497 546.446 510.497C544.421 510.497 542.89 511.123 541.851 512.375C540.839 513.627 540.333 515.651 540.333 518.448ZM573.411 544.178C573.411 540.369 574.423 537.2 576.448 534.669C578.499 532.139 580.696 530.527 583.04 529.835L583.04 529.675C580.67 528.61 578.738 526.998 577.247 524.841C575.782 522.657 575.049 519.913 575.049 516.61C575.049 511.842 576.754 508.047 580.163 505.223C583.599 502.4 588.381 500.988 594.507 500.988C600.633 500.988 605.388 502.44 608.77 505.343C612.18 508.22 613.884 511.976 613.884 516.61C613.884 520.02 613.112 522.83 611.567 525.04C610.049 527.225 608.118 528.756 605.774 529.635L605.774 529.795C608.198 530.461 610.422 532.072 612.446 534.629C614.497 537.16 615.523 540.343 615.523 544.178C615.523 549.319 613.578 553.381 609.689 556.364C605.827 559.347 600.766 560.839 594.507 560.839C588.221 560.839 583.133 559.347 579.245 556.364C575.356 553.381 573.411 549.319 573.411 544.178ZM587.435 542.66C587.435 545.776 588.048 548.041 589.273 549.452C590.525 550.837 592.256 551.53 594.467 551.53C596.651 551.53 598.356 550.824 599.581 549.412C600.806 548.001 601.419 545.75 601.419 542.66C601.419 539.437 600.766 537.173 599.461 535.868C598.183 534.536 596.518 533.87 594.467 533.87C592.416 533.87 590.725 534.536 589.393 535.868C588.088 537.173 587.435 539.437 587.435 542.66ZM588.354 518.448C588.354 521.138 588.927 523.189 590.072 524.601C591.217 525.986 592.682 526.679 594.467 526.679C596.225 526.679 597.677 525.986 598.822 524.601C599.994 523.189 600.58 521.138 600.58 518.448C600.58 515.731 600.06 513.734 599.022 512.455C598.009 511.15 596.491 510.497 594.467 510.497C592.443 510.497 590.911 511.123 589.872 512.375C588.86 513.627 588.354 515.651 588.354 518.448ZM621.433 544.178C621.433 540.369 622.445 537.2 624.469 534.669C626.52 532.139 628.717 530.527 631.061 529.835L631.061 529.675C628.691 528.61 626.76 526.998 625.268 524.841C623.803 522.657 623.071 519.913 623.071 516.61C623.071 511.842 624.775 508.047 628.185 505.223C631.621 502.4 636.402 500.988 642.528 500.988C648.654 500.988 653.409 502.44 656.792 505.343C660.201 508.22 661.906 511.976 661.906 516.61C661.906 520.02 661.133 522.83 659.588 525.04C658.07 527.225 656.139 528.756 653.795 529.635L653.795 529.795C656.219 530.461 658.443 532.072 660.467 534.629C662.518 537.16 663.544 540.343 663.544 544.178C663.544 549.319 661.599 553.381 657.711 556.364C653.848 559.347 648.788 560.839 642.528 560.839C636.242 560.839 631.155 559.347 627.266 556.364C623.377 553.381 621.433 549.319 621.433 544.178ZM635.456 542.66C635.456 545.776 636.069 548.041 637.294 549.452C638.546 550.837 640.277 551.53 642.488 551.53C644.672 551.53 646.377 550.824 647.602 549.412C648.827 548.001 649.44 545.75 649.44 542.66C649.44 539.437 648.788 537.173 647.482 535.868C646.204 534.536 644.539 533.87 642.488 533.87C640.437 533.87 638.746 534.536 637.414 535.868C636.109 537.173 635.456 539.437 635.456 542.66ZM636.375 518.448C636.375 521.138 636.948 523.189 638.093 524.601C639.239 525.986 640.704 526.679 642.488 526.679C644.246 526.679 645.698 525.986 646.843 524.601C648.015 523.189 648.601 521.138 648.601 518.448C648.601 515.731 648.082 513.734 647.043 512.455C646.031 511.15 644.512 510.497 642.488 510.497C640.464 510.497 638.932 511.123 637.893 512.375C636.881 513.627 636.375 515.651 636.375 518.448ZM670.413 539.863L670.413 521.964C670.413 515.278 672.211 510.111 675.806 506.462C679.402 502.813 684.343 500.988 690.629 500.988C696.915 500.988 701.856 502.786 705.452 506.382C709.075 509.951 710.886 515.145 710.886 521.964L710.886 539.863C710.886 546.789 708.995 552.023 705.212 555.565C701.457 559.108 696.596 560.866 690.629 560.839C684.29 560.812 679.336 559.041 675.766 555.525C672.197 551.983 670.413 546.762 670.413 539.863ZM684.317 542.7C684.317 545.47 684.836 547.601 685.875 549.093C686.94 550.584 688.525 551.33 690.629 551.33C692.733 551.33 694.318 550.584 695.384 549.093C696.449 547.601 696.982 545.47 696.982 542.7L696.982 519.407C696.982 516.584 696.449 514.426 695.384 512.934C694.318 511.443 692.733 510.697 690.629 510.697C688.525 510.697 686.94 511.443 685.875 512.934C684.836 514.426 684.317 516.584 684.317 519.407L684.317 542.7ZM740.965 539.863L740.965 521.964C740.965 515.278 742.763 510.111 746.358 506.462C749.954 502.813 754.895 500.988 761.181 500.988C767.467 500.988 772.408 502.786 776.004 506.382C779.627 509.951 781.438 515.145 781.438 521.964L781.438 539.863C781.438 546.789 779.547 552.023 775.764 555.565C772.009 559.108 767.148 560.866 761.181 560.839C754.842 560.812 749.888 559.041 746.318 555.525C742.749 551.983 740.965 546.762 740.965 539.863ZM754.869 542.7C754.869 545.47 755.388 547.601 756.427 549.093C757.492 550.584 759.077 551.33 761.181 551.33C763.285 551.33 764.87 550.584 765.936 549.093C767.001 547.601 767.534 545.47 767.534 542.7L767.534 519.407C767.534 516.584 767.001 514.426 765.936 512.934C764.87 511.443 763.285 510.697 761.181 510.697C759.077 510.697 757.492 511.443 756.427 512.934C755.388 514.426 754.869 516.584 754.869 519.407L754.869 542.7ZM811.2 560L811.2 545.297L811.64 544.618L811.64 519.487L811.32 519.487L800.253 538.105L816.634 538.105L817.832 537.746L830.658 537.746L830.658 548.533L787.388 548.533L787.388 538.625L812.718 501.827L823.985 501.827L823.985 560L811.2 560ZM836.368 560L836.368 551.33L857.383 529.515C858.982 527.651 860.353 525.746 861.499 523.802C862.644 521.857 863.217 519.846 863.217 517.769C863.217 515.238 862.644 513.427 861.499 512.335C860.353 511.243 858.848 510.697 856.984 510.697C855.04 510.697 853.468 511.336 852.269 512.615C851.071 513.867 850.471 516.331 850.471 520.006L850.471 521.644L836.368 521.644L836.368 518.208C836.368 513.227 838.286 509.112 842.121 505.863C845.957 502.613 850.991 500.988 857.224 500.988C863.749 500.988 868.704 502.44 872.086 505.343C875.469 508.22 877.174 512.135 877.201 517.09C877.201 520.765 876.415 524.055 874.843 526.958C873.298 529.862 871.088 532.818 868.211 535.828L857.184 548.853L878.559 548.853L878.559 560L836.368 560ZM885.028 539.863L885.028 521.964C885.028 515.278 886.826 510.111 890.422 506.462C894.018 502.813 898.959 500.988 905.245 500.988C911.531 500.988 916.472 502.786 920.068 506.382C923.69 509.951 925.501 515.145 925.501 521.964L925.501 539.863C925.501 546.789 923.61 552.023 919.828 555.565C916.072 559.108 911.211 560.866 905.245 560.839C898.906 560.812 893.951 559.041 890.382 555.525C886.813 551.983 885.028 546.762 885.028 539.863ZM898.932 542.7C898.932 545.47 899.452 547.601 900.49 549.093C901.556 550.584 903.141 551.33 905.245 551.33C907.349 551.33 908.934 550.584 909.999 549.093C911.065 547.601 911.598 545.47 911.598 542.7L911.598 519.407C911.598 516.584 911.065 514.426 909.999 512.934C908.934 511.443 907.349 510.697 905.245 510.697C903.141 510.697 901.556 511.443 900.49 512.934C899.452 514.426 898.932 516.584 898.932 519.407L898.932 542.7Z" fill="white"/> +<path d="M105.108 509.618L107.245 511.725L107.249 511.72L105.108 509.618ZM132.077 501.028L135.077 501.028L135.077 498.028L132.077 498.028L132.077 501.028ZM132.077 512.175L132.077 515.175L135.077 515.175L135.077 512.175L132.077 512.175ZM115.297 517.449L117.5 519.485L117.508 519.476L115.297 517.449ZM110.462 536.228L107.462 536.228L107.462 536.296L107.465 536.364L110.462 536.228ZM110.502 537.106L113.502 537.106L113.502 537.038L113.499 536.97L110.502 537.106ZM112.5 548.493L110.047 550.221L110.055 550.232L110.063 550.244L112.5 548.493ZM122.648 549.133L124.949 551.057L124.958 551.047L124.966 551.037L122.648 549.133ZM122.768 533.031L120.31 534.752L120.327 534.775L120.343 534.798L122.768 533.031ZM112.66 532.951L114.857 534.994L114.865 534.985L114.874 534.975L112.66 532.951ZM110.542 539.184L110.542 542.184L113.542 542.184L113.542 539.184L110.542 539.184ZM108.145 539.184L105.145 539.184L105.145 542.184L108.145 542.184L108.145 539.184ZM112.58 527.078L114.672 529.228L114.682 529.219L112.58 527.078ZM134.275 527.358L132.041 529.36L132.049 529.37L134.275 527.358ZM132.517 555.485L134.53 557.709L134.538 557.702L132.517 555.485ZM102.272 554.886L100.078 556.933L100.085 556.94L100.093 556.948L102.272 554.886ZM96.6781 536.108L99.6781 536.108L99.6781 533.111L96.6781 533.111L93.6781 533.111L93.6781 536.108L96.6781 536.108ZM96.6781 533.111L99.6781 533.111C99.6781 523.734 102.306 516.733 107.245 511.725L105.108 509.618L102.972 507.512C96.6703 513.903 93.6781 522.564 93.6781 533.111L96.6781 533.111ZM105.108 509.618L107.249 511.72C112.167 506.709 119.182 504.028 128.721 504.028L128.721 501.028L128.721 498.028C118.016 498.028 109.29 501.074 102.967 507.517L105.108 509.618ZM128.721 501.028L128.721 504.028L132.077 504.028L132.077 501.028L132.077 498.028L128.721 498.028L128.721 501.028ZM132.077 501.028L129.077 501.028L129.077 512.175L132.077 512.175L135.077 512.175L135.077 501.028L132.077 501.028ZM132.077 512.175L132.077 509.175L129.2 509.175L129.2 512.175L129.2 515.175L132.077 515.175L132.077 512.175ZM129.2 512.175L129.2 509.175C122.553 509.175 117.02 511.129 113.085 515.422L115.297 517.449L117.508 519.476C120.019 516.738 123.755 515.175 129.2 515.175L129.2 512.175ZM115.297 517.449L113.093 515.414C109.061 519.779 107.462 527.042 107.462 536.228L110.462 536.228L113.462 536.228C113.462 527.354 115.086 522.098 117.5 519.485L115.297 517.449ZM110.462 536.228L107.465 536.364L107.505 537.243L110.502 537.106L113.499 536.97L113.459 536.091L110.462 536.228ZM110.502 537.106L107.502 537.106C107.502 540.056 107.673 542.618 108.047 544.747C108.411 546.826 109.012 548.75 110.047 550.221L112.5 548.493L114.953 546.766C114.656 546.345 114.257 545.426 113.956 543.71C113.664 542.043 113.502 539.857 113.502 537.106L110.502 537.106ZM112.5 548.493L110.063 550.244C111.933 552.847 114.564 554.33 117.774 554.33L117.774 551.33L117.774 548.33C116.668 548.33 115.783 547.922 114.936 546.743L112.5 548.493ZM117.774 551.33L117.774 554.33C120.626 554.33 123.116 553.249 124.949 551.057L122.648 549.133L120.347 547.208C119.729 547.946 118.97 548.33 117.774 548.33L117.774 551.33ZM122.648 549.133L124.966 551.037C126.015 549.76 126.611 548.109 126.965 546.393C127.326 544.639 127.486 542.566 127.486 540.223L124.486 540.223L121.486 540.223C121.486 542.328 121.339 543.964 121.088 545.18C120.83 546.434 120.506 547.014 120.33 547.228L122.648 549.133ZM124.486 540.223L127.486 540.223C127.486 536.745 126.886 533.588 125.192 531.264L122.768 533.031L120.343 534.798C120.94 535.617 121.486 537.255 121.486 540.223L124.486 540.223ZM122.768 533.031L125.226 531.311C123.472 528.805 120.84 527.634 117.814 527.634L117.814 530.634L117.814 533.634C119.155 533.634 119.827 534.061 120.31 534.752L122.768 533.031ZM117.814 530.634L117.814 527.634C114.915 527.634 112.403 528.785 110.445 530.928L112.66 532.951L114.874 534.975C115.739 534.028 116.664 533.634 117.814 533.634L117.814 530.634ZM112.66 532.951L110.463 530.908C108.405 533.121 107.542 536.003 107.542 539.184L110.542 539.184L113.542 539.184C113.542 537.091 114.09 535.818 114.857 534.994L112.66 532.951ZM110.542 539.184L110.542 536.184L108.145 536.184L108.145 539.184L108.145 542.184L110.542 542.184L110.542 539.184ZM108.145 539.184L111.145 539.184C111.145 534.578 112.438 531.402 114.672 529.228L112.58 527.078L110.488 524.928C106.809 528.507 105.145 533.402 105.145 539.184L108.145 539.184ZM112.58 527.078L114.682 529.219C117.088 526.856 119.853 525.723 123.127 525.723L123.127 522.723L123.127 519.723C118.251 519.723 113.985 521.494 110.478 524.938L112.58 527.078ZM123.127 522.723L123.127 525.723C127.053 525.723 129.913 526.987 132.041 529.36L134.275 527.358L136.508 525.355C133.096 521.549 128.524 519.723 123.127 519.723L123.127 522.723ZM134.275 527.358L132.049 529.37C134.152 531.695 135.43 535.289 135.43 540.622L138.43 540.622L141.43 540.622C141.43 534.396 139.937 529.147 136.5 525.346L134.275 527.358ZM138.43 540.622L135.43 540.622C135.43 546.26 133.699 550.346 130.495 553.269L132.517 555.485L134.538 557.702C139.218 553.433 141.43 547.61 141.43 540.622L138.43 540.622ZM132.517 555.485L130.503 553.261C127.181 556.269 122.974 557.839 117.654 557.839L117.654 560.839L117.654 563.839C124.267 563.839 129.968 561.84 134.53 557.709L132.517 555.485ZM117.654 560.839L117.654 557.839C111.81 557.839 107.533 556.081 104.451 552.824L102.272 554.886L100.093 556.948C104.521 561.628 110.499 563.839 117.654 563.839L117.654 560.839ZM102.272 554.886L104.465 552.839C101.479 549.64 99.6781 544.281 99.6781 536.108L96.6781 536.108L93.6781 536.108C93.6781 544.982 95.6065 552.142 100.078 556.933L102.272 554.886ZM150.413 506.422L152.426 508.646L152.434 508.638L150.413 506.422ZM180.618 506.981L178.431 509.036L178.439 509.043L180.618 506.981ZM177.821 552.169L175.685 550.063L175.68 550.068L177.821 552.169ZM154.208 560.759L154.208 563.759L154.216 563.759L154.208 560.759ZM150.852 560.759L147.852 560.759L147.852 563.759L150.852 563.759L150.852 560.759ZM150.852 549.812L150.852 546.812L147.852 546.812L147.852 549.812L150.852 549.812ZM153.729 549.812L153.742 546.812L153.729 546.812L153.729 549.812ZM172.467 525.879L175.467 525.879L175.467 525.826L175.465 525.772L172.467 525.879ZM172.427 524.761L169.427 524.761L169.427 524.814L169.429 524.868L172.427 524.761ZM170.43 513.574L167.965 515.285L167.971 515.293L167.977 515.301L170.43 513.574ZM160.281 512.934L162.583 514.859L162.591 514.849L162.599 514.839L160.281 512.934ZM160.121 529.036L157.677 530.776L157.694 530.799L157.712 530.823L160.121 529.036ZM170.27 529.116L168.092 527.053L168.091 527.054L170.27 529.116ZM172.427 522.883L172.427 519.883L169.427 519.883L169.427 522.883L172.427 522.883ZM174.745 522.883L177.745 522.883L177.745 519.883L174.745 519.883L174.745 522.883ZM170.35 534.949L172.441 537.099L172.451 537.09L170.35 534.949ZM144.5 521.205L147.5 521.205C147.5 515.598 149.227 511.542 152.426 508.646L150.413 506.422L148.399 504.198C143.714 508.44 141.5 514.24 141.5 521.205L144.5 521.205ZM150.413 506.422L152.434 508.638C155.755 505.61 159.971 504.028 165.315 504.028L165.315 501.028L165.315 498.028C158.674 498.028 152.955 500.043 148.391 504.206L150.413 506.422ZM165.315 501.028L165.315 504.028C171.129 504.028 175.376 505.784 178.431 509.036L180.618 506.981L182.804 504.927C178.402 500.242 172.447 498.028 165.315 498.028L165.315 501.028ZM180.618 506.981L178.439 509.043C181.437 512.212 183.251 517.559 183.251 525.76L186.251 525.76L189.251 525.76C189.251 516.86 187.31 509.688 182.797 504.919L180.618 506.981ZM186.251 525.76L183.251 525.76L183.251 528.716L186.251 528.716L189.251 528.716L189.251 525.76L186.251 525.76ZM186.251 528.716L183.251 528.716C183.251 538.064 180.625 545.052 175.685 550.063L177.821 552.169L179.957 554.275C186.257 547.886 189.251 539.239 189.251 528.716L186.251 528.716ZM177.821 552.169L175.68 550.068C170.791 555.05 163.775 557.734 154.2 557.759L154.208 560.759L154.216 563.759C164.938 563.731 173.664 560.688 179.962 554.27L177.821 552.169ZM154.208 560.759L154.208 557.759L150.852 557.759L150.852 560.759L150.852 563.759L154.208 563.759L154.208 560.759ZM150.852 560.759L153.852 560.759L153.852 549.812L150.852 549.812L147.852 549.812L147.852 560.759L150.852 560.759ZM150.852 549.812L150.852 552.812L153.729 552.812L153.729 549.812L153.729 546.812L150.852 546.812L150.852 549.812ZM153.729 549.812L153.716 552.812C160.359 552.841 165.895 550.92 169.837 546.653L167.633 544.618L165.429 542.582C162.924 545.294 159.191 546.836 153.742 546.812L153.729 549.812ZM167.633 544.618L169.837 546.653C173.867 542.289 175.467 535.042 175.467 525.879L172.467 525.879L169.467 525.879C169.467 534.723 167.844 539.968 165.429 542.582L167.633 544.618ZM172.467 525.879L175.465 525.772L175.425 524.654L172.427 524.761L169.429 524.868L169.469 525.987L172.467 525.879ZM172.427 524.761L175.427 524.761C175.427 521.875 175.256 519.36 174.881 517.261C174.514 515.207 173.912 513.308 172.882 511.846L170.43 513.574L167.977 515.301C168.279 515.73 168.675 516.641 168.975 518.316C169.266 519.946 169.427 522.08 169.427 524.761L172.427 524.761ZM170.43 513.574L172.894 511.863C171.047 509.203 168.4 507.697 165.156 507.697L165.156 510.697L165.156 513.697C166.279 513.697 167.149 514.109 167.965 515.285L170.43 513.574ZM165.156 510.697L165.156 507.697C162.284 507.697 159.789 508.807 157.963 511.03L160.281 512.934L162.599 514.839C163.224 514.079 163.979 513.697 165.156 513.697L165.156 510.697ZM160.281 512.934L157.98 511.01C156.927 512.269 156.326 513.892 155.968 515.579C155.604 517.298 155.443 519.324 155.443 521.604L158.443 521.604L161.443 521.604C161.443 519.57 161.59 517.993 161.838 516.823C162.093 515.619 162.41 515.065 162.583 514.859L160.281 512.934ZM158.443 521.604L155.443 521.604C155.443 525.195 156.014 528.439 157.677 530.776L160.121 529.036L162.565 527.296C161.992 526.49 161.443 524.779 161.443 521.604L158.443 521.604ZM160.121 529.036L157.712 530.823C159.505 533.242 162.129 534.353 165.116 534.353L165.116 531.353L165.116 528.353C163.734 528.353 163.028 527.919 162.531 527.249L160.121 529.036ZM165.116 531.353L165.116 534.353C167.978 534.353 170.48 533.258 172.449 531.178L170.27 529.116L168.091 527.054C167.236 527.956 166.302 528.353 165.116 528.353L165.116 531.353ZM170.27 529.116L172.448 531.179C174.542 528.968 175.427 526.078 175.427 522.883L172.427 522.883L169.427 522.883C169.427 524.961 168.874 526.227 168.092 527.053L170.27 529.116ZM172.427 522.883L172.427 525.883L174.745 525.883L174.745 522.883L174.745 519.883L172.427 519.883L172.427 522.883ZM174.745 522.883L171.745 522.883C171.745 527.465 170.463 530.633 168.248 532.808L170.35 534.949L172.451 537.09C176.096 533.511 177.745 528.636 177.745 522.883L174.745 522.883ZM170.35 534.949L168.258 532.799C165.89 535.102 163.126 536.224 159.802 536.224L159.802 539.224L159.802 542.224C164.682 542.224 168.949 540.496 172.441 537.099L170.35 534.949ZM159.802 539.224L159.802 536.224C155.885 536.224 153.027 534.953 150.897 532.556L148.655 534.549L146.412 536.543C149.823 540.379 154.396 542.224 159.802 542.224L159.802 539.224ZM148.655 534.549L150.897 532.556C148.775 530.17 147.5 526.534 147.5 521.205L144.5 521.205L141.5 521.205C141.5 527.436 142.994 532.696 146.412 536.543L148.655 534.549ZM201.151 509.618L203.287 511.725L203.292 511.72L201.151 509.618ZM228.12 501.028L231.12 501.028L231.12 498.028L228.12 498.028L228.12 501.028ZM228.12 512.175L228.12 515.175L231.12 515.175L231.12 512.175L228.12 512.175ZM211.339 517.449L213.543 519.485L213.55 519.476L211.339 517.449ZM206.505 536.228L203.505 536.228L203.505 536.296L203.508 536.364L206.505 536.228ZM206.545 537.106L209.545 537.106L209.545 537.038L209.541 536.97L206.545 537.106ZM208.542 548.493L206.089 550.221L206.097 550.232L206.106 550.244L208.542 548.493ZM218.69 549.133L220.992 551.057L221 551.047L221.009 551.037L218.69 549.133ZM218.81 533.031L216.353 534.752L216.369 534.775L216.386 534.798L218.81 533.031ZM208.702 532.951L210.899 534.994L210.908 534.985L210.917 534.975L208.702 532.951ZM206.584 539.184L206.584 542.184L209.584 542.184L209.584 539.184L206.584 539.184ZM204.187 539.184L201.187 539.184L201.187 542.184L204.187 542.184L204.187 539.184ZM208.622 527.078L210.714 529.228L210.724 529.219L208.622 527.078ZM230.317 527.358L228.083 529.36L228.092 529.37L230.317 527.358ZM228.559 555.485L230.573 557.709L230.581 557.702L228.559 555.485ZM198.314 554.886L196.121 556.933L196.128 556.94L196.135 556.948L198.314 554.886ZM192.721 536.108L195.721 536.108L195.721 533.111L192.721 533.111L189.721 533.111L189.721 536.108L192.721 536.108ZM192.721 533.111L195.721 533.111C195.721 523.734 198.348 516.733 203.287 511.725L201.151 509.618L199.015 507.512C192.713 513.903 189.721 522.564 189.721 533.111L192.721 533.111ZM201.151 509.618L203.292 511.72C208.209 506.709 215.225 504.028 224.763 504.028L224.763 501.028L224.763 498.028C214.059 498.028 205.333 501.074 199.01 507.517L201.151 509.618ZM224.763 501.028L224.763 504.028L228.12 504.028L228.12 501.028L228.12 498.028L224.763 498.028L224.763 501.028ZM228.12 501.028L225.12 501.028L225.12 512.175L228.12 512.175L231.12 512.175L231.12 501.028L228.12 501.028ZM228.12 512.175L228.12 509.175L225.243 509.175L225.243 512.175L225.243 515.175L228.12 515.175L228.12 512.175ZM225.243 512.175L225.243 509.175C218.596 509.175 213.063 511.129 209.128 515.422L211.339 517.449L213.55 519.476C216.061 516.738 219.798 515.175 225.243 515.175L225.243 512.175ZM211.339 517.449L209.135 515.414C205.103 519.779 203.505 527.042 203.505 536.228L206.505 536.228L209.505 536.228C209.505 527.354 211.129 522.098 213.543 519.485L211.339 517.449ZM206.505 536.228L203.508 536.364L203.548 537.243L206.545 537.106L209.541 536.97L209.501 536.091L206.505 536.228ZM206.545 537.106L203.545 537.106C203.545 540.056 203.716 542.618 204.089 544.747C204.454 546.826 205.054 548.75 206.089 550.221L208.542 548.493L210.995 546.766C210.699 546.345 210.3 545.426 209.999 543.71C209.706 542.043 209.545 539.857 209.545 537.106L206.545 537.106ZM208.542 548.493L206.106 550.244C207.975 552.847 210.606 554.33 213.816 554.33L213.816 551.33L213.816 548.33C212.711 548.33 211.826 547.922 210.979 546.743L208.542 548.493ZM213.816 551.33L213.816 554.33C216.668 554.33 219.159 553.249 220.992 551.057L218.69 549.133L216.389 547.208C215.772 547.946 215.013 548.33 213.816 548.33L213.816 551.33ZM218.69 549.133L221.009 551.037C222.058 549.76 222.653 548.109 223.007 546.393C223.369 544.639 223.528 542.566 223.528 540.223L220.528 540.223L217.528 540.223C217.528 542.328 217.382 543.964 217.131 545.18C216.872 546.434 216.549 547.014 216.372 547.228L218.69 549.133ZM220.528 540.223L223.528 540.223C223.528 536.745 222.929 533.588 221.235 531.264L218.81 533.031L216.386 534.798C216.983 535.617 217.528 537.255 217.528 540.223L220.528 540.223ZM218.81 533.031L221.268 531.311C219.514 528.805 216.883 527.634 213.856 527.634L213.856 530.634L213.856 533.634C215.197 533.634 215.869 534.061 216.353 534.752L218.81 533.031ZM213.856 530.634L213.856 527.634C210.957 527.634 208.446 528.785 206.487 530.928L208.702 532.951L210.917 534.975C211.782 534.028 212.706 533.634 213.856 533.634L213.856 530.634ZM208.702 532.951L206.505 530.908C204.448 533.121 203.584 536.003 203.584 539.184L206.584 539.184L209.584 539.184C209.584 537.091 210.133 535.818 210.899 534.994L208.702 532.951ZM206.584 539.184L206.584 536.184L204.187 536.184L204.187 539.184L204.187 542.184L206.584 542.184L206.584 539.184ZM204.187 539.184L207.187 539.184C207.187 534.578 208.48 531.402 210.714 529.228L208.622 527.078L206.53 524.928C202.851 528.507 201.187 533.402 201.187 539.184L204.187 539.184ZM208.622 527.078L210.724 529.219C213.13 526.856 215.896 525.723 219.17 525.723L219.17 522.723L219.17 519.723C214.294 519.723 210.027 521.494 206.52 524.938L208.622 527.078ZM219.17 522.723L219.17 525.723C223.096 525.723 225.956 526.987 228.083 529.36L230.317 527.358L232.551 525.355C229.138 521.549 224.567 519.723 219.17 519.723L219.17 522.723ZM230.317 527.358L228.092 529.37C230.195 531.695 231.472 535.289 231.472 540.622L234.472 540.622L237.472 540.622C237.472 534.396 235.98 529.147 232.542 525.346L230.317 527.358ZM234.472 540.622L231.472 540.622C231.472 546.26 229.742 550.346 226.537 553.269L228.559 555.485L230.581 557.702C235.261 553.433 237.472 547.61 237.472 540.622L234.472 540.622ZM228.559 555.485L226.546 553.261C223.223 556.269 219.016 557.839 213.696 557.839L213.696 560.839L213.696 563.839C220.309 563.839 226.01 561.84 230.573 557.709L228.559 555.485ZM213.696 560.839L213.696 557.839C207.852 557.839 203.576 556.081 200.493 552.824L198.314 554.886L196.135 556.948C200.564 561.628 206.542 563.839 213.696 563.839L213.696 560.839ZM198.314 554.886L200.507 552.839C197.521 549.64 195.721 544.281 195.721 536.108L192.721 536.108L189.721 536.108C189.721 544.982 191.649 552.142 196.121 556.933L198.314 554.886ZM246.455 506.422L248.469 508.646L248.477 508.638L246.455 506.422ZM276.66 506.981L274.474 509.036L274.481 509.043L276.66 506.981ZM273.863 552.169L271.727 550.063L271.722 550.068L273.863 552.169ZM250.251 560.759L250.251 563.759L250.259 563.759L250.251 560.759ZM246.895 560.759L243.895 560.759L243.895 563.759L246.895 563.759L246.895 560.759ZM246.895 549.812L246.895 546.812L243.895 546.812L243.895 549.812L246.895 549.812ZM249.771 549.812L249.785 546.812L249.771 546.812L249.771 549.812ZM268.51 525.879L271.51 525.879L271.51 525.826L271.508 525.772L268.51 525.879ZM268.47 524.761L265.47 524.761L265.47 524.814L265.472 524.868L268.47 524.761ZM266.472 513.574L264.008 515.285L264.014 515.293L264.019 515.301L266.472 513.574ZM256.324 512.934L258.625 514.859L258.633 514.849L258.642 514.839L256.324 512.934ZM256.164 529.036L253.72 530.776L253.737 530.799L253.754 530.823L256.164 529.036ZM266.312 529.116L264.134 527.053L264.133 527.054L266.312 529.116ZM268.47 522.883L268.47 519.883L265.47 519.883L265.47 522.883L268.47 522.883ZM270.787 522.883L273.787 522.883L273.787 519.883L270.787 519.883L270.787 522.883ZM266.392 534.949L268.484 537.099L268.494 537.09L266.392 534.949ZM240.542 521.205L243.542 521.205C243.542 515.598 245.27 511.542 248.469 508.646L246.455 506.422L244.442 504.198C239.756 508.44 237.542 514.24 237.542 521.205L240.542 521.205ZM246.455 506.422L248.477 508.638C251.797 505.61 256.014 504.028 261.358 504.028L261.358 501.028L261.358 498.028C254.716 498.028 248.997 500.043 244.433 504.206L246.455 506.422ZM261.358 501.028L261.358 504.028C267.172 504.028 271.418 505.784 274.474 509.036L276.66 506.981L278.847 504.927C274.444 500.242 268.489 498.028 261.358 498.028L261.358 501.028ZM276.66 506.981L274.481 509.043C277.48 512.212 279.294 517.559 279.294 525.76L282.294 525.76L285.294 525.76C285.294 516.86 283.352 509.688 278.839 504.919L276.66 506.981ZM282.294 525.76L279.294 525.76L279.294 528.716L282.294 528.716L285.294 528.716L285.294 525.76L282.294 525.76ZM282.294 528.716L279.294 528.716C279.294 538.064 276.667 545.052 271.727 550.063L273.863 552.169L276 554.275C282.3 547.886 285.294 539.239 285.294 528.716L282.294 528.716ZM273.863 552.169L271.722 550.068C266.833 555.05 259.817 557.734 250.243 557.759L250.251 560.759L250.259 563.759C260.981 563.731 269.707 560.688 276.005 554.27L273.863 552.169ZM250.251 560.759L250.251 557.759L246.895 557.759L246.895 560.759L246.895 563.759L250.251 563.759L250.251 560.759ZM246.895 560.759L249.895 560.759L249.895 549.812L246.895 549.812L243.895 549.812L243.895 560.759L246.895 560.759ZM246.895 549.812L246.895 552.812L249.771 552.812L249.771 549.812L249.771 546.812L246.895 546.812L246.895 549.812ZM249.771 549.812L249.758 552.812C256.401 552.841 261.938 550.92 265.879 546.653L263.675 544.618L261.471 542.582C258.967 545.294 255.234 546.836 249.785 546.812L249.771 549.812ZM263.675 544.618L265.879 546.653C269.91 542.289 271.51 535.042 271.51 525.879L268.51 525.879L265.51 525.879C265.51 534.723 263.886 539.968 261.471 542.582L263.675 544.618ZM268.51 525.879L271.508 525.772L271.468 524.654L268.47 524.761L265.472 524.868L265.512 525.987L268.51 525.879ZM268.47 524.761L271.47 524.761C271.47 521.875 271.298 519.36 270.924 517.261C270.557 515.207 269.954 513.308 268.925 511.846L266.472 513.574L264.019 515.301C264.321 515.73 264.718 516.641 265.017 518.316C265.308 519.946 265.47 522.08 265.47 524.761L268.47 524.761ZM266.472 513.574L268.936 511.863C267.089 509.203 264.443 507.697 261.198 507.697L261.198 510.697L261.198 513.697C262.322 513.697 263.191 514.109 264.008 515.285L266.472 513.574ZM261.198 510.697L261.198 507.697C258.326 507.697 255.832 508.807 254.006 511.03L256.324 512.934L258.642 514.839C259.266 514.079 260.021 513.697 261.198 513.697L261.198 510.697ZM256.324 512.934L254.023 511.01C252.97 512.269 252.368 513.892 252.011 515.579C251.646 517.298 251.486 519.324 251.486 521.604L254.486 521.604L257.486 521.604C257.486 519.57 257.632 517.993 257.88 516.823C258.135 515.619 258.453 515.065 258.625 514.859L256.324 512.934ZM254.486 521.604L251.486 521.604C251.486 525.195 252.056 528.439 253.72 530.776L256.164 529.036L258.608 527.296C258.034 526.49 257.486 524.779 257.486 521.604L254.486 521.604ZM256.164 529.036L253.754 530.823C255.548 533.242 258.172 534.353 261.158 534.353L261.158 531.353L261.158 528.353C259.776 528.353 259.071 527.919 258.574 527.249L256.164 529.036ZM261.158 531.353L261.158 534.353C264.02 534.353 266.522 533.258 268.491 531.178L266.312 529.116L264.133 527.054C263.279 527.956 262.345 528.353 261.158 528.353L261.158 531.353ZM266.312 529.116L268.49 531.179C270.584 528.968 271.47 526.078 271.47 522.883L268.47 522.883L265.47 522.883C265.47 524.961 264.917 526.227 264.134 527.053L266.312 529.116ZM268.47 522.883L268.47 525.883L270.787 525.883L270.787 522.883L270.787 519.883L268.47 519.883L268.47 522.883ZM270.787 522.883L267.787 522.883C267.787 527.465 266.506 530.633 264.29 532.808L266.392 534.949L268.494 537.09C272.138 533.511 273.787 528.636 273.787 522.883L270.787 522.883ZM266.392 534.949L264.3 532.799C261.933 535.102 259.168 536.224 255.844 536.224L255.844 539.224L255.844 542.224C260.724 542.224 264.992 540.496 268.484 537.099L266.392 534.949ZM255.844 539.224L255.844 536.224C251.927 536.224 249.069 534.953 246.939 532.556L244.697 534.549L242.455 536.543C245.865 540.379 250.439 542.224 255.844 542.224L255.844 539.224ZM244.697 534.549L246.939 532.556C244.818 530.17 243.542 526.534 243.542 521.205L240.542 521.205L237.542 521.205C237.542 527.436 239.036 532.696 242.455 536.543L244.697 534.549ZM346.773 506.382L344.651 508.503L344.659 508.511L344.667 508.519L346.773 506.382ZM346.533 555.565L344.482 553.376L344.474 553.383L346.533 555.565ZM331.95 560.839L331.963 557.839L331.962 557.839L331.95 560.839ZM317.087 555.525L314.974 557.654L314.982 557.662L317.087 555.525ZM327.195 549.093L324.734 550.807L324.744 550.822L324.754 550.836L327.195 549.093ZM327.195 512.934L324.754 511.191L324.744 511.205L324.734 511.22L327.195 512.934ZM311.733 539.863L314.733 539.863L314.733 521.964L311.733 521.964L308.733 521.964L308.733 539.863L311.733 539.863ZM311.733 521.964L314.733 521.964C314.733 515.817 316.375 511.5 319.264 508.568L317.127 506.462L314.99 504.356C310.688 508.722 308.733 514.74 308.733 521.964L311.733 521.964ZM317.127 506.462L319.264 508.568C322.173 505.616 326.273 503.988 331.95 503.988L331.95 500.988L331.95 497.988C325.055 497.988 319.273 500.01 314.99 504.356L317.127 506.462ZM331.95 500.988L331.95 503.988C337.639 503.988 341.745 505.597 344.651 508.503L346.773 506.382L348.894 504.261C344.609 499.976 338.832 497.988 331.95 497.988L331.95 500.988ZM346.773 506.382L344.667 508.519C347.543 511.353 349.206 515.666 349.206 521.964L352.206 521.964L355.206 521.964C355.206 514.625 353.247 508.55 348.878 504.245L346.773 506.382ZM352.206 521.964L349.206 521.964L349.206 539.863L352.206 539.863L355.206 539.863L355.206 521.964L352.206 521.964ZM352.206 539.863L349.206 539.863C349.206 546.25 347.475 550.572 344.482 553.376L346.533 555.565L348.584 557.755C353.156 553.473 355.206 547.327 355.206 539.863L352.206 539.863ZM346.533 555.565L344.474 553.383C341.366 556.315 337.289 557.863 331.963 557.839L331.95 560.839L331.936 563.839C338.544 563.869 344.189 561.901 348.591 557.747L346.533 555.565ZM331.95 560.839L331.962 557.839C326.189 557.815 322.065 556.218 319.192 553.388L317.087 555.525L314.982 557.662C319.247 561.864 325.032 563.81 331.937 563.839L331.95 560.839ZM317.087 555.525L319.2 553.396C316.383 550.6 314.733 546.267 314.733 539.863L311.733 539.863L308.733 539.863C308.733 547.257 310.652 553.365 314.974 557.654L317.087 555.525ZM325.637 542.7L322.637 542.7C322.637 545.782 323.205 548.612 324.734 550.807L327.195 549.093L329.657 547.378C329.108 546.59 328.637 545.158 328.637 542.7L325.637 542.7ZM327.195 549.093L324.754 550.836C326.472 553.242 329.042 554.33 331.95 554.33L331.95 551.33L331.95 548.33C330.65 548.33 330.049 547.927 329.637 547.349L327.195 549.093ZM331.95 551.33L331.95 554.33C334.858 554.33 337.428 553.242 339.146 550.836L336.704 549.093L334.263 547.349C333.85 547.927 333.25 548.33 331.95 548.33L331.95 551.33ZM336.704 549.093L339.146 550.836C340.717 548.636 341.303 545.794 341.303 542.7L338.303 542.7L335.303 542.7C335.303 545.146 334.822 546.566 334.263 547.349L336.704 549.093ZM338.303 542.7L341.303 542.7L341.303 519.407L338.303 519.407L335.303 519.407L335.303 542.7L338.303 542.7ZM338.303 519.407L341.303 519.407C341.303 516.274 340.723 513.399 339.146 511.191L336.704 512.934L334.263 514.678C334.817 515.453 335.303 516.893 335.303 519.407L338.303 519.407ZM336.704 512.934L339.146 511.191C337.428 508.786 334.858 507.697 331.95 507.697L331.95 510.697L331.95 513.697C333.25 513.697 333.85 514.1 334.263 514.678L336.704 512.934ZM331.95 510.697L331.95 507.697C329.042 507.697 326.472 508.786 324.754 511.191L327.195 512.934L329.637 514.678C330.049 514.1 330.65 513.697 331.95 513.697L331.95 510.697ZM327.195 512.934L324.734 511.22C323.199 513.423 322.637 516.286 322.637 519.407L325.637 519.407L328.637 519.407C328.637 516.881 329.114 515.429 329.657 514.649L327.195 512.934ZM325.637 519.407L322.637 519.407L322.637 542.7L325.637 542.7L328.637 542.7L328.637 519.407L325.637 519.407ZM381.969 560L378.969 560L378.969 563L381.969 563L381.969 560ZM381.969 545.297L379.45 543.667L378.969 544.411L378.969 545.297L381.969 545.297ZM382.408 544.618L384.927 546.248L385.408 545.504L385.408 544.618L382.408 544.618ZM382.408 519.487L385.408 519.487L385.408 516.487L382.408 516.487L382.408 519.487ZM382.089 519.487L382.089 516.487L380.382 516.487L379.51 517.954L382.089 519.487ZM371.021 538.105L368.443 536.572L365.748 541.105L371.021 541.105L371.021 538.105ZM387.402 538.105L387.402 541.105L387.843 541.105L388.265 540.979L387.402 538.105ZM388.601 537.746L388.601 534.746L388.161 534.746L387.739 534.872L388.601 537.746ZM401.426 537.746L404.426 537.746L404.426 534.746L401.426 534.746L401.426 537.746ZM401.426 548.533L401.426 551.533L404.426 551.533L404.426 548.533L401.426 548.533ZM358.156 548.533L355.156 548.533L355.156 551.533L358.156 551.533L358.156 548.533ZM358.156 538.625L355.685 536.924L355.156 537.692L355.156 538.625L358.156 538.625ZM383.487 501.827L383.487 498.827L381.91 498.827L381.016 500.126L383.487 501.827ZM394.754 501.827L397.754 501.827L397.754 498.827L394.754 498.827L394.754 501.827ZM394.754 560L394.754 563L397.754 563L397.754 560L394.754 560ZM381.969 560L384.969 560L384.969 545.297L381.969 545.297L378.969 545.297L378.969 560L381.969 560ZM381.969 545.297L384.487 546.927L384.927 546.248L382.408 544.618L379.89 542.988L379.45 543.667L381.969 545.297ZM382.408 544.618L385.408 544.618L385.408 519.487L382.408 519.487L379.408 519.487L379.408 544.618L382.408 544.618ZM382.408 519.487L382.408 516.487L382.089 516.487L382.089 519.487L382.089 522.487L382.408 522.487L382.408 519.487ZM382.089 519.487L379.51 517.954L368.443 536.572L371.021 538.105L373.6 539.638L384.667 521.02L382.089 519.487ZM371.021 538.105L371.021 541.105L387.402 541.105L387.402 538.105L387.402 535.105L371.021 535.105L371.021 538.105ZM387.402 538.105L388.265 540.979L389.463 540.619L388.601 537.746L387.739 534.872L386.54 535.232L387.402 538.105ZM388.601 537.746L388.601 540.746L401.426 540.746L401.426 537.746L401.426 534.746L388.601 534.746L388.601 537.746ZM401.426 537.746L398.426 537.746L398.426 548.533L401.426 548.533L404.426 548.533L404.426 537.746L401.426 537.746ZM401.426 548.533L401.426 545.533L358.156 545.533L358.156 548.533L358.156 551.533L401.426 551.533L401.426 548.533ZM358.156 548.533L361.156 548.533L361.156 538.625L358.156 538.625L355.156 538.625L355.156 548.533L358.156 548.533ZM358.156 538.625L360.627 540.326L385.958 503.528L383.487 501.827L381.016 500.126L355.685 536.924L358.156 538.625ZM383.487 501.827L383.487 504.827L394.754 504.827L394.754 501.827L394.754 498.827L383.487 498.827L383.487 501.827ZM394.754 501.827L391.754 501.827L391.754 560L394.754 560L397.754 560L397.754 501.827L394.754 501.827ZM394.754 560L394.754 557L381.969 557L381.969 560L381.969 563L394.754 563L394.754 560ZM407.136 560L404.136 560L404.136 563L407.136 563L407.136 560ZM407.136 551.33L404.976 549.249L404.136 550.12L404.136 551.33L407.136 551.33ZM428.152 529.515L430.313 531.597L430.373 531.534L430.43 531.468L428.152 529.515ZM423.038 512.615L425.205 514.69L425.216 514.678L425.227 514.667L423.038 512.615ZM421.24 521.644L421.24 524.644L424.24 524.644L424.24 521.644L421.24 521.644ZM407.136 521.644L404.136 521.644L404.136 524.644L407.136 524.644L407.136 521.644ZM442.855 505.343L440.901 507.62L440.912 507.629L442.855 505.343ZM447.969 517.09L450.969 517.09L450.969 517.082L450.969 517.074L447.969 517.09ZM445.612 526.958L442.974 525.53L442.969 525.54L442.964 525.549L445.612 526.958ZM438.98 535.828L436.811 533.755L436.748 533.821L436.69 533.89L438.98 535.828ZM427.952 548.853L425.663 546.914L421.482 551.853L427.952 551.853L427.952 548.853ZM449.328 548.853L452.328 548.853L452.328 545.853L449.328 545.853L449.328 548.853ZM449.328 560L449.328 563L452.328 563L452.328 560L449.328 560ZM407.136 560L410.136 560L410.136 551.33L407.136 551.33L404.136 551.33L404.136 560L407.136 560ZM407.136 551.33L409.297 553.411L430.313 531.597L428.152 529.515L425.992 527.434L404.976 549.249L407.136 551.33ZM428.152 529.515L430.43 531.468C432.133 529.481 433.61 527.434 434.852 525.325L432.267 523.802L429.682 522.279C428.634 524.059 427.368 525.821 425.874 527.563L428.152 529.515ZM432.267 523.802L434.852 525.325C436.245 522.96 436.985 520.428 436.985 517.769L433.985 517.769L430.985 517.769C430.985 519.265 430.58 520.755 429.682 522.279L432.267 523.802ZM433.985 517.769L436.985 517.769C436.985 514.895 436.35 512.083 434.338 510.164L432.267 512.335L430.197 514.506C430.475 514.771 430.985 515.582 430.985 517.769L433.985 517.769ZM432.267 512.335L434.338 510.164C432.536 508.447 430.241 507.697 427.753 507.697L427.753 510.697L427.753 513.697C428.993 513.697 429.708 514.04 430.197 514.506L432.267 512.335ZM427.753 510.697L427.753 507.697C425.08 507.697 422.681 508.61 420.849 510.563L423.038 512.615L425.227 514.667C425.793 514.063 426.537 513.697 427.753 513.697L427.753 510.697ZM423.038 512.615L420.871 510.54C419.776 511.684 419.145 513.17 418.775 514.693C418.399 516.235 418.24 518.026 418.24 520.006L421.24 520.006L424.24 520.006C424.24 518.311 424.38 517.032 424.605 516.111C424.833 515.17 425.102 514.797 425.205 514.69L423.038 512.615ZM421.24 520.006L418.24 520.006L418.24 521.644L421.24 521.644L424.24 521.644L424.24 520.006L421.24 520.006ZM421.24 521.644L421.24 518.644L407.136 518.644L407.136 521.644L407.136 524.644L421.24 524.644L421.24 521.644ZM407.136 521.644L410.136 521.644L410.136 518.208L407.136 518.208L404.136 518.208L404.136 521.644L407.136 521.644ZM407.136 518.208L410.136 518.208C410.136 514.119 411.659 510.837 414.829 508.152L412.89 505.863L410.951 503.574C406.449 507.387 404.136 512.336 404.136 518.208L407.136 518.208ZM412.89 505.863L414.829 508.152C418.002 505.463 422.294 503.988 427.992 503.988L427.992 500.988L427.992 497.988C421.225 497.988 415.449 499.763 410.951 503.574L412.89 505.863ZM427.992 500.988L427.992 503.988C434.126 503.988 438.266 505.358 440.901 507.62L442.855 505.343L444.809 503.067C440.678 499.522 434.91 497.988 427.992 497.988L427.992 500.988ZM442.855 505.343L440.912 507.629C443.547 509.869 444.947 512.912 444.969 517.106L447.969 517.09L450.969 517.074C450.938 511.359 448.929 506.57 444.799 503.058L442.855 505.343ZM447.969 517.09L444.969 517.09C444.969 520.324 444.282 523.113 442.974 525.53L445.612 526.958L448.25 528.386C450.085 524.996 450.969 521.207 450.969 517.09L447.969 517.09ZM445.612 526.958L442.964 525.549C441.576 528.156 439.546 530.894 436.811 533.755L438.98 535.828L441.148 537.901C444.167 534.743 446.558 531.567 448.26 528.367L445.612 526.958ZM438.98 535.828L436.69 533.89L425.663 546.914L427.952 548.853L430.242 550.791L441.269 537.766L438.98 535.828ZM427.952 548.853L427.952 551.853L449.328 551.853L449.328 548.853L449.328 545.853L427.952 545.853L427.952 548.853ZM449.328 548.853L446.328 548.853L446.328 560L449.328 560L452.328 560L452.328 548.853L449.328 548.853ZM449.328 560L449.328 557L407.136 557L407.136 560L407.136 563L449.328 563L449.328 560ZM490.836 506.382L488.715 508.503L488.723 508.511L488.731 508.519L490.836 506.382ZM490.597 555.565L488.546 553.376L488.538 553.383L490.597 555.565ZM476.014 560.839L476.027 557.839L476.026 557.839L476.014 560.839ZM461.151 555.525L459.037 557.654L459.045 557.662L461.151 555.525ZM471.259 549.093L468.797 550.807L468.807 550.822L468.818 550.836L471.259 549.093ZM471.259 512.934L468.818 511.191L468.807 511.205L468.797 511.22L471.259 512.934ZM455.797 539.863L458.797 539.863L458.797 521.964L455.797 521.964L452.797 521.964L452.797 539.863L455.797 539.863ZM455.797 521.964L458.797 521.964C458.797 515.817 460.438 511.5 463.328 508.568L461.191 506.462L459.054 504.356C454.751 508.722 452.797 514.74 452.797 521.964L455.797 521.964ZM461.191 506.462L463.328 508.568C466.236 505.616 470.337 503.988 476.014 503.988L476.014 500.988L476.014 497.988C469.118 497.988 463.337 500.01 459.054 504.356L461.191 506.462ZM476.014 500.988L476.014 503.988C481.703 503.988 485.809 505.597 488.715 508.503L490.836 506.382L492.958 504.261C488.673 499.976 482.896 497.988 476.014 497.988L476.014 500.988ZM490.836 506.382L488.731 508.519C491.607 511.353 493.27 515.666 493.27 521.964L496.27 521.964L499.27 521.964C499.27 514.625 497.311 508.55 492.942 504.245L490.836 506.382ZM496.27 521.964L493.27 521.964L493.27 539.863L496.27 539.863L499.27 539.863L499.27 521.964L496.27 521.964ZM496.27 539.863L493.27 539.863C493.27 546.25 491.539 550.572 488.546 553.376L490.597 555.565L492.647 557.755C497.219 553.473 499.27 547.327 499.27 539.863L496.27 539.863ZM490.597 555.565L488.538 553.383C485.43 556.315 481.352 557.863 476.027 557.839L476.014 560.839L476 563.839C482.608 563.869 488.252 561.901 492.655 557.747L490.597 555.565ZM476.014 560.839L476.026 557.839C470.252 557.815 466.129 556.218 463.256 553.388L461.151 555.525L459.045 557.662C463.311 561.864 469.096 563.81 476.001 563.839L476.014 560.839ZM461.151 555.525L463.264 553.396C460.447 550.6 458.797 546.267 458.797 539.863L455.797 539.863L452.797 539.863C452.797 547.257 454.716 553.365 459.037 557.654L461.151 555.525ZM469.701 542.7L466.701 542.7C466.701 545.782 467.268 548.612 468.797 550.807L471.259 549.093L473.721 547.378C473.172 546.59 472.701 545.158 472.701 542.7L469.701 542.7ZM471.259 549.093L468.818 550.836C470.536 553.242 473.105 554.33 476.014 554.33L476.014 551.33L476.014 548.33C474.713 548.33 474.113 547.927 473.7 547.349L471.259 549.093ZM476.014 551.33L476.014 554.33C478.922 554.33 481.491 553.242 483.209 550.836L480.768 549.093L478.327 547.349C477.914 547.927 477.314 548.33 476.014 548.33L476.014 551.33ZM480.768 549.093L483.209 550.836C484.781 548.636 485.366 545.794 485.366 542.7L482.366 542.7L479.366 542.7C479.366 545.146 478.886 546.566 478.327 547.349L480.768 549.093ZM482.366 542.7L485.366 542.7L485.366 519.407L482.366 519.407L479.366 519.407L479.366 542.7L482.366 542.7ZM482.366 519.407L485.366 519.407C485.366 516.274 484.787 513.399 483.209 511.191L480.768 512.934L478.327 514.678C478.88 515.453 479.366 516.893 479.366 519.407L482.366 519.407ZM480.768 512.934L483.209 511.191C481.491 508.786 478.922 507.697 476.014 507.697L476.014 510.697L476.014 513.697C477.314 513.697 477.914 514.1 478.327 514.678L480.768 512.934ZM476.014 510.697L476.014 507.697C473.105 507.697 470.536 508.786 468.818 511.191L471.259 512.934L473.7 514.678C474.113 514.1 474.713 513.697 476.014 513.697L476.014 510.697ZM471.259 512.934L468.797 511.22C467.263 513.423 466.701 516.286 466.701 519.407L469.701 519.407L472.701 519.407C472.701 516.881 473.177 515.429 473.721 514.649L471.259 512.934ZM469.701 519.407L466.701 519.407L466.701 542.7L469.701 542.7L472.701 542.7L472.701 519.407L469.701 519.407ZM528.427 534.669L526.096 532.78L526.09 532.788L526.084 532.795L528.427 534.669ZM535.019 529.835L535.869 532.712L538.019 532.077L538.019 529.835L535.019 529.835ZM535.019 529.675L538.019 529.675L538.019 527.734L536.249 526.939L535.019 529.675ZM529.226 524.841L526.734 526.512L526.746 526.529L526.758 526.547L529.226 524.841ZM532.142 505.223L530.238 502.906L530.229 502.913L532.142 505.223ZM560.749 505.343L558.795 507.62L558.805 507.628L558.815 507.636L560.749 505.343ZM563.546 525.04L561.087 523.322L561.083 523.328L563.546 525.04ZM557.753 529.635L556.699 526.826L554.753 527.556L554.753 529.635L557.753 529.635ZM557.753 529.795L554.753 529.795L554.753 532.082L556.958 532.688L557.753 529.795ZM564.425 534.629L562.073 536.491L562.083 536.505L562.094 536.518L564.425 534.629ZM561.668 556.364L559.842 553.984L559.834 553.99L561.668 556.364ZM531.223 556.364L529.397 558.745L531.223 556.364ZM541.252 549.452L538.986 551.419L539.006 551.441L539.026 551.464L541.252 549.452ZM551.44 535.868L549.276 537.946L549.297 537.968L549.319 537.989L551.44 535.868ZM542.051 524.601L539.721 526.491L539.73 526.502L539.739 526.513L542.051 524.601ZM550.801 524.601L548.492 522.685L548.489 522.689L550.801 524.601ZM551 512.455L548.63 514.293L548.651 514.32L548.672 514.347L551 512.455ZM541.851 512.375L539.542 510.459L539.53 510.474L539.518 510.489L541.851 512.375ZM525.39 544.178L528.39 544.178C528.39 540.926 529.242 538.452 530.769 536.543L528.427 534.669L526.084 532.795C523.562 535.947 522.39 539.813 522.39 544.178L525.39 544.178ZM528.427 534.669L530.757 536.558C532.551 534.345 534.272 533.184 535.869 532.712L535.019 529.835L534.169 526.958C531.078 527.871 528.404 529.933 526.096 532.78L528.427 534.669ZM535.019 529.835L538.019 529.835L538.019 529.675L535.019 529.675L532.019 529.675L532.019 529.835L535.019 529.835ZM535.019 529.675L536.249 526.939C534.382 526.1 532.877 524.847 531.693 523.135L529.226 524.841L526.758 526.547C528.558 529.15 530.915 531.12 533.789 532.411L535.019 529.675ZM529.226 524.841L531.717 523.17C530.659 521.593 530.028 519.47 530.028 516.61L527.028 516.61L524.028 516.61C524.028 520.356 524.862 523.72 526.734 526.512L529.226 524.841ZM527.028 516.61L530.028 516.61C530.028 512.657 531.393 509.739 534.056 507.534L532.142 505.223L530.229 502.913C526.073 506.354 524.028 511.027 524.028 516.61L527.028 516.61ZM532.142 505.223L534.047 507.541C536.775 505.3 540.794 503.988 546.486 503.988L546.486 500.988L546.486 497.988C539.925 497.988 534.382 499.5 530.238 502.906L532.142 505.223ZM546.486 500.988L546.486 503.988C552.163 503.988 556.13 505.332 558.795 507.62L560.749 505.343L562.703 503.067C558.603 499.547 553.061 497.988 546.486 497.988L546.486 500.988ZM560.749 505.343L558.815 507.636C561.519 509.918 562.863 512.82 562.863 516.61L565.863 516.61L568.863 516.61C568.863 511.131 566.798 506.522 562.684 503.05L560.749 505.343ZM565.863 516.61L562.863 516.61C562.863 519.568 562.197 521.734 561.087 523.322L563.546 525.04L566.005 526.759C567.985 523.925 568.863 520.471 568.863 516.61L565.863 516.61ZM563.546 525.04L561.083 523.328C559.889 525.045 558.436 526.175 556.699 526.826L557.753 529.635L558.806 532.444C561.757 531.338 564.166 529.404 566.009 526.753L563.546 525.04ZM557.753 529.635L554.753 529.635L554.753 529.795L557.753 529.795L560.753 529.795L560.753 529.635L557.753 529.635ZM557.753 529.795L556.958 532.688C558.605 533.14 560.327 534.286 562.073 536.491L564.425 534.629L566.777 532.767C564.474 529.859 561.748 527.781 558.547 526.902L557.753 529.795ZM564.425 534.629L562.094 536.518C563.638 538.423 564.501 540.903 564.501 544.178L567.501 544.178L570.501 544.178C570.501 539.783 569.314 535.896 566.755 532.74L564.425 534.629ZM567.501 544.178L564.501 544.178C564.501 548.439 562.95 551.6 559.842 553.984L561.668 556.364L563.494 558.745C568.164 555.162 570.501 550.199 570.501 544.178L567.501 544.178ZM561.668 556.364L559.834 553.99C556.63 556.465 552.271 557.839 546.486 557.839L546.486 560.839L546.486 563.839C553.219 563.839 558.982 562.23 563.502 558.738L561.668 556.364ZM546.486 560.839L546.486 557.839C540.672 557.839 536.282 556.464 533.049 553.984L531.223 556.364L529.397 558.745C533.942 562.231 539.728 563.839 546.486 563.839L546.486 560.839ZM531.223 556.364L533.049 553.984C529.942 551.6 528.39 548.439 528.39 544.178L525.39 544.178L522.39 544.178C522.39 550.199 524.727 555.162 529.397 558.745L531.223 556.364ZM539.414 542.66L536.414 542.66C536.414 546.052 537.059 549.199 538.986 551.419L541.252 549.452L543.517 547.486C542.993 546.882 542.414 545.501 542.414 542.66L539.414 542.66ZM541.252 549.452L539.026 551.464C540.952 553.595 543.557 554.53 546.446 554.53L546.446 551.53L546.446 548.53C544.913 548.53 544.055 548.08 543.477 547.441L541.252 549.452ZM546.446 551.53L546.446 554.53C549.337 554.53 551.932 553.56 553.825 551.379L551.56 549.412L549.294 547.446C548.737 548.088 547.922 548.53 546.446 548.53L546.446 551.53ZM551.56 549.412L553.825 551.379C555.749 549.162 556.398 546.034 556.398 542.66L553.398 542.66L550.398 542.66C550.398 545.466 549.821 546.839 549.294 547.446L551.56 549.412ZM553.398 542.66L556.398 542.66C556.398 539.191 555.725 535.91 553.561 533.747L551.44 535.868L549.319 537.989C549.765 538.436 550.398 539.683 550.398 542.66L553.398 542.66ZM551.44 535.868L553.604 533.79C551.694 531.801 549.214 530.87 546.446 530.87L546.446 533.87L546.446 536.87C547.78 536.87 548.629 537.271 549.276 537.946L551.44 535.868ZM546.446 533.87L546.446 530.87C543.677 530.87 541.197 531.799 539.25 533.747L541.372 535.868L543.493 537.989C544.209 537.273 545.112 536.87 546.446 536.87L546.446 533.87ZM541.372 535.868L539.25 533.747C537.086 535.91 536.414 539.191 536.414 542.66L539.414 542.66L542.414 542.66C542.414 539.683 543.046 538.436 543.493 537.989L541.372 535.868ZM540.333 518.448L537.333 518.448C537.333 521.508 537.977 524.341 539.721 526.491L542.051 524.601L544.38 522.711C543.834 522.037 543.333 520.769 543.333 518.448L540.333 518.448ZM542.051 524.601L539.739 526.513C541.449 528.581 543.759 529.679 546.446 529.679L546.446 526.679L546.446 523.679C545.563 523.679 544.943 523.391 544.363 522.689L542.051 524.601ZM546.446 526.679L546.446 529.679C549.121 529.679 551.412 528.569 553.113 526.513L550.801 524.601L548.489 522.689C547.899 523.403 547.286 523.679 546.446 523.679L546.446 526.679ZM550.801 524.601L553.109 526.517C554.895 524.365 555.559 521.521 555.559 518.448L552.559 518.448L549.559 518.448C549.559 520.755 549.05 522.013 548.492 522.685L550.801 524.601ZM552.559 518.448L555.559 518.448C555.559 515.455 555.006 512.627 553.329 510.563L551 512.455L548.672 514.347C549.073 514.84 549.559 516.007 549.559 518.448L552.559 518.448ZM551 512.455L553.371 510.617C551.662 508.413 549.165 507.497 546.446 507.497L546.446 510.497L546.446 513.497C547.775 513.497 548.314 513.887 548.63 514.293L551 512.455ZM546.446 510.497L546.446 507.497C543.767 507.497 541.287 508.356 539.542 510.459L541.851 512.375L544.16 514.291C544.492 513.89 545.076 513.497 546.446 513.497L546.446 510.497ZM541.851 512.375L539.518 510.489C537.855 512.546 537.333 515.421 537.333 518.448L540.333 518.448L543.333 518.448C543.333 515.881 543.822 514.708 544.184 514.261L541.851 512.375ZM576.448 534.669L574.117 532.78L574.111 532.788L574.105 532.795L576.448 534.669ZM583.04 529.835L583.89 532.712L586.04 532.077L586.04 529.835L583.04 529.835ZM583.04 529.675L586.04 529.675L586.04 527.734L584.27 526.939L583.04 529.675ZM577.247 524.841L574.755 526.512L574.767 526.529L574.779 526.547L577.247 524.841ZM580.163 505.223L578.259 502.906L578.25 502.913L580.163 505.223ZM608.77 505.343L606.817 507.62L606.826 507.628L606.836 507.636L608.77 505.343ZM611.567 525.04L609.108 523.322L609.104 523.328L611.567 525.04ZM605.774 529.635L604.72 526.826L602.774 527.556L602.774 529.635L605.774 529.635ZM605.774 529.795L602.774 529.795L602.774 532.082L604.979 532.688L605.774 529.795ZM612.446 534.629L610.094 536.491L610.105 536.505L610.116 536.518L612.446 534.629ZM609.689 556.364L607.863 553.984L607.855 553.99L609.689 556.364ZM579.245 556.364L577.419 558.745L579.245 556.364ZM589.273 549.452L587.007 551.419L587.027 551.441L587.047 551.464L589.273 549.452ZM599.461 535.868L597.297 537.946L597.318 537.968L597.34 537.989L599.461 535.868ZM590.072 524.601L587.742 526.491L587.751 526.502L587.76 526.513L590.072 524.601ZM598.822 524.601L596.514 522.685L596.51 522.689L598.822 524.601ZM599.022 512.455L596.651 514.294L596.672 514.32L596.693 514.347L599.022 512.455ZM589.872 512.375L587.564 510.459L587.551 510.474L587.539 510.489L589.872 512.375ZM573.411 544.178L576.411 544.178C576.411 540.926 577.263 538.452 578.79 536.543L576.448 534.669L574.105 532.795C571.583 535.947 570.411 539.813 570.411 544.178L573.411 544.178ZM576.448 534.669L578.778 536.558C580.572 534.345 582.293 533.184 583.89 532.712L583.04 529.835L582.19 526.958C579.099 527.871 576.425 529.933 574.117 532.78L576.448 534.669ZM583.04 529.835L586.04 529.835L586.04 529.675L583.04 529.675L580.04 529.675L580.04 529.835L583.04 529.835ZM583.04 529.675L584.27 526.939C582.403 526.1 580.898 524.847 579.715 523.135L577.247 524.841L574.779 526.547C576.579 529.15 578.936 531.12 581.81 532.411L583.04 529.675ZM577.247 524.841L579.738 523.17C578.681 521.593 578.049 519.47 578.049 516.61L575.049 516.61L572.049 516.61C572.049 520.356 572.883 523.72 574.755 526.512L577.247 524.841ZM575.049 516.61L578.049 516.61C578.049 512.657 579.414 509.739 582.077 507.534L580.163 505.223L578.25 502.913C574.094 506.354 572.049 511.027 572.049 516.61L575.049 516.61ZM580.163 505.223L582.068 507.541C584.796 505.3 588.815 503.988 594.507 503.988L594.507 500.988L594.507 497.988C587.946 497.988 582.403 499.5 578.259 502.906L580.163 505.223ZM594.507 500.988L594.507 503.988C600.184 503.988 604.151 505.332 606.817 507.62L608.77 505.343L610.724 503.067C606.624 499.547 601.082 497.988 594.507 497.988L594.507 500.988ZM608.77 505.343L606.836 507.636C609.54 509.918 610.884 512.82 610.884 516.61L613.884 516.61L616.884 516.61C616.884 511.131 614.82 506.522 610.705 503.05L608.77 505.343ZM613.884 516.61L610.884 516.61C610.884 519.568 610.218 521.734 609.108 523.322L611.567 525.04L614.026 526.759C616.006 523.925 616.884 520.471 616.884 516.61L613.884 516.61ZM611.567 525.04L609.104 523.328C607.91 525.045 606.457 526.175 604.72 526.826L605.774 529.635L606.827 532.444C609.778 531.338 612.187 529.404 614.03 526.753L611.567 525.04ZM605.774 529.635L602.774 529.635L602.774 529.795L605.774 529.795L608.774 529.795L608.774 529.635L605.774 529.635ZM605.774 529.795L604.979 532.688C606.627 533.14 608.348 534.286 610.094 536.491L612.446 534.629L614.798 532.767C612.496 529.859 609.769 527.781 606.569 526.902L605.774 529.795ZM612.446 534.629L610.116 536.518C611.659 538.423 612.523 540.903 612.523 544.178L615.523 544.178L618.523 544.178C618.523 539.783 617.335 535.896 614.777 532.74L612.446 534.629ZM615.523 544.178L612.523 544.178C612.523 548.439 610.971 551.6 607.863 553.984L609.689 556.364L611.515 558.745C616.185 555.162 618.523 550.199 618.523 544.178L615.523 544.178ZM609.689 556.364L607.855 553.99C604.651 556.465 600.292 557.839 594.507 557.839L594.507 560.839L594.507 563.839C601.241 563.839 607.003 562.23 611.523 558.738L609.689 556.364ZM594.507 560.839L594.507 557.839C588.693 557.839 584.303 556.464 581.071 553.984L579.245 556.364L577.419 558.745C581.963 562.231 587.749 563.839 594.507 563.839L594.507 560.839ZM579.245 556.364L581.071 553.984C577.963 551.6 576.411 548.439 576.411 544.178L573.411 544.178L570.411 544.178C570.411 550.199 572.748 555.162 577.419 558.745L579.245 556.364ZM587.435 542.66L584.435 542.66C584.435 546.052 585.081 549.199 587.007 551.419L589.273 549.452L591.539 547.486C591.015 546.882 590.435 545.501 590.435 542.66L587.435 542.66ZM589.273 549.452L587.047 551.464C588.973 553.595 591.579 554.53 594.467 554.53L594.467 551.53L594.467 548.53C592.934 548.53 592.076 548.08 591.499 547.441L589.273 549.452ZM594.467 551.53L594.467 554.53C597.359 554.53 599.954 553.56 601.847 551.379L599.581 549.412L597.315 547.446C596.758 548.088 595.944 548.53 594.467 548.53L594.467 551.53ZM599.581 549.412L601.847 551.379C603.77 549.162 604.419 546.034 604.419 542.66L601.419 542.66L598.419 542.66C598.419 545.466 597.842 546.839 597.315 547.446L599.581 549.412ZM601.419 542.66L604.419 542.66C604.419 539.191 603.746 535.91 601.582 533.747L599.461 535.868L597.34 537.989C597.786 538.436 598.419 539.683 598.419 542.66L601.419 542.66ZM599.461 535.868L601.625 533.79C599.715 531.801 597.235 530.87 594.467 530.87L594.467 533.87L594.467 536.87C595.801 536.87 596.65 537.271 597.297 537.946L599.461 535.868ZM594.467 533.87L594.467 530.87C591.698 530.87 589.219 531.799 587.271 533.747L589.393 535.868L591.514 537.989C592.23 537.273 593.134 536.87 594.467 536.87L594.467 533.87ZM589.393 535.868L587.271 533.747C585.108 535.91 584.435 539.191 584.435 542.66L587.435 542.66L590.435 542.66C590.435 539.683 591.068 538.436 591.514 537.989L589.393 535.868ZM588.354 518.448L585.354 518.448C585.354 521.508 585.998 524.341 587.742 526.491L590.072 524.601L592.402 522.711C591.855 522.037 591.354 520.769 591.354 518.448L588.354 518.448ZM590.072 524.601L587.76 526.513C589.471 528.581 591.781 529.679 594.467 529.679L594.467 526.679L594.467 523.679C593.584 523.679 592.964 523.391 592.384 522.689L590.072 524.601ZM594.467 526.679L594.467 529.679C597.142 529.679 599.433 528.569 601.134 526.513L598.822 524.601L596.51 522.689C595.92 523.403 595.308 523.679 594.467 523.679L594.467 526.679ZM598.822 524.601L601.13 526.517C602.917 524.365 603.58 521.521 603.58 518.448L600.58 518.448L597.58 518.448C597.58 520.755 597.071 522.013 596.514 522.685L598.822 524.601ZM600.58 518.448L603.58 518.448C603.58 515.455 603.027 512.627 601.35 510.563L599.022 512.455L596.693 514.347C597.094 514.84 597.58 516.007 597.58 518.448L600.58 518.448ZM599.022 512.455L601.392 510.617C599.683 508.413 597.186 507.497 594.467 507.497L594.467 510.497L594.467 513.497C595.796 513.497 596.336 513.887 596.651 514.294L599.022 512.455ZM594.467 510.497L594.467 507.497C591.788 507.497 589.309 508.356 587.564 510.459L589.872 512.375L592.181 514.291C592.513 513.89 593.097 513.497 594.467 513.497L594.467 510.497ZM589.872 512.375L587.539 510.489C585.877 512.546 585.354 515.421 585.354 518.448L588.354 518.448L591.354 518.448C591.354 515.881 591.844 514.708 592.205 514.261L589.872 512.375ZM624.469 534.669L622.138 532.78L622.132 532.788L622.126 532.795L624.469 534.669ZM631.061 529.835L631.911 532.712L634.061 532.077L634.061 529.835L631.061 529.835ZM631.061 529.675L634.061 529.675L634.061 527.734L632.291 526.939L631.061 529.675ZM625.268 524.841L622.777 526.512L622.788 526.529L622.8 526.547L625.268 524.841ZM628.185 505.223L626.28 502.906L626.271 502.913L628.185 505.223ZM656.792 505.343L654.838 507.62L654.847 507.628L654.857 507.636L656.792 505.343ZM659.588 525.04L657.129 523.322L657.125 523.328L659.588 525.04ZM653.795 529.635L652.742 526.826L650.795 527.556L650.795 529.635L653.795 529.635ZM653.795 529.795L650.795 529.795L650.795 532.082L653 532.688L653.795 529.795ZM660.467 534.629L658.115 536.491L658.126 536.505L658.137 536.518L660.467 534.629ZM657.711 556.364L655.885 553.984L655.877 553.99L657.711 556.364ZM627.266 556.364L625.44 558.745L627.266 556.364ZM637.294 549.452L635.029 551.419L635.048 551.441L635.069 551.464L637.294 549.452ZM647.482 535.868L645.318 537.946L645.339 537.968L645.361 537.989L647.482 535.868ZM638.093 524.601L635.764 526.491L635.772 526.502L635.781 526.513L638.093 524.601ZM646.843 524.601L644.535 522.685L644.531 522.689L646.843 524.601ZM647.043 512.455L644.672 514.294L644.693 514.32L644.715 514.347L647.043 512.455ZM637.893 512.375L635.585 510.459L635.573 510.474L635.561 510.489L637.893 512.375ZM621.432 544.178L624.432 544.178C624.432 540.926 625.285 538.452 626.812 536.543L624.469 534.669L622.126 532.795C619.605 535.947 618.432 539.813 618.432 544.178L621.432 544.178ZM624.469 534.669L626.8 536.558C628.593 534.345 630.315 533.184 631.911 532.712L631.061 529.835L630.211 526.958C627.12 527.871 624.447 529.933 622.138 532.78L624.469 534.669ZM631.061 529.835L634.061 529.835L634.061 529.675L631.061 529.675L628.061 529.675L628.061 529.835L631.061 529.835ZM631.061 529.675L632.291 526.939C630.424 526.1 628.919 524.847 627.736 523.135L625.268 524.841L622.8 526.547C624.6 529.15 626.957 531.12 629.832 532.411L631.061 529.675ZM625.268 524.841L627.76 523.17C626.702 521.593 626.071 519.47 626.071 516.61L623.071 516.61L620.071 516.61C620.071 520.356 620.904 523.72 622.777 526.512L625.268 524.841ZM623.071 516.61L626.071 516.61C626.071 512.657 627.435 509.739 630.098 507.534L628.185 505.223L626.271 502.913C622.115 506.354 620.071 511.027 620.071 516.61L623.071 516.61ZM628.185 505.223L630.089 507.541C632.817 505.3 636.836 503.988 642.528 503.988L642.528 500.988L642.528 497.988C635.968 497.988 630.424 499.5 626.28 502.906L628.185 505.223ZM642.528 500.988L642.528 503.988C648.206 503.988 652.173 505.332 654.838 507.62L656.792 505.343L658.745 503.067C654.645 499.547 649.103 497.988 642.528 497.988L642.528 500.988ZM656.792 505.343L654.857 507.636C657.561 509.918 658.906 512.82 658.906 516.61L661.906 516.61L664.906 516.61C664.906 511.131 662.841 506.522 658.726 503.05L656.792 505.343ZM661.906 516.61L658.906 516.61C658.906 519.568 658.239 521.734 657.129 523.322L659.588 525.04L662.047 526.759C664.027 523.925 664.906 520.471 664.906 516.61L661.906 516.61ZM659.588 525.04L657.125 523.328C655.932 525.045 654.479 526.175 652.742 526.826L653.795 529.635L654.848 532.444C657.799 531.338 660.209 529.404 662.052 526.753L659.588 525.04ZM653.795 529.635L650.795 529.635L650.795 529.795L653.795 529.795L656.795 529.795L656.795 529.635L653.795 529.635ZM653.795 529.795L653 532.688C654.648 533.14 656.369 534.286 658.115 536.491L660.467 534.629L662.82 532.767C660.517 529.859 657.79 527.781 654.59 526.902L653.795 529.795ZM660.467 534.629L658.137 536.518C659.681 538.423 660.544 540.903 660.544 544.178L663.544 544.178L666.544 544.178C666.544 539.783 665.356 535.896 662.798 532.74L660.467 534.629ZM663.544 544.178L660.544 544.178C660.544 548.439 658.992 551.6 655.885 553.984L657.711 556.364L659.536 558.745C664.207 555.162 666.544 550.199 666.544 544.178L663.544 544.178ZM657.711 556.364L655.877 553.99C652.672 556.465 648.313 557.839 642.528 557.839L642.528 560.839L642.528 563.839C649.262 563.839 655.025 562.23 659.544 558.738L657.711 556.364ZM642.528 560.839L642.528 557.839C636.714 557.839 632.325 556.464 629.092 553.984L627.266 556.364L625.44 558.745C629.984 562.231 635.77 563.839 642.528 563.839L642.528 560.839ZM627.266 556.364L629.092 553.984C625.984 551.6 624.432 548.439 624.432 544.178L621.432 544.178L618.432 544.178C618.432 550.199 620.77 555.162 625.44 558.745L627.266 556.364ZM635.456 542.66L632.456 542.66C632.456 546.052 633.102 549.199 635.029 551.419L637.294 549.452L639.56 547.486C639.036 546.882 638.456 545.501 638.456 542.66L635.456 542.66ZM637.294 549.452L635.069 551.464C636.994 553.595 639.6 554.53 642.488 554.53L642.488 551.53L642.488 548.53C640.955 548.53 640.098 548.08 639.52 547.441L637.294 549.452ZM642.488 551.53L642.488 554.53C645.38 554.53 647.975 553.56 649.868 551.379L647.602 549.412L645.337 547.446C644.779 548.088 643.965 548.53 642.488 548.53L642.488 551.53ZM647.602 549.412L649.868 551.379C651.791 549.162 652.44 546.034 652.44 542.66L649.44 542.66L646.44 542.66C646.44 545.466 645.864 546.839 645.337 547.446L647.602 549.412ZM649.44 542.66L652.44 542.66C652.44 539.191 651.767 535.91 649.604 533.747L647.482 535.868L645.361 537.989C645.808 538.436 646.44 539.683 646.44 542.66L649.44 542.66ZM647.482 535.868L649.647 533.79C647.737 531.801 645.256 530.87 642.488 530.87L642.488 533.87L642.488 536.87C643.822 536.87 644.671 537.271 645.318 537.946L647.482 535.868ZM642.488 533.87L642.488 530.87C639.72 530.87 637.24 531.799 635.293 533.747L637.414 535.868L639.535 537.989C640.252 537.273 641.155 536.87 642.488 536.87L642.488 533.87ZM637.414 535.868L635.293 533.747C633.129 535.91 632.456 539.191 632.456 542.66L635.456 542.66L638.456 542.66C638.456 539.683 639.089 538.436 639.535 537.989L637.414 535.868ZM636.375 518.448L633.375 518.448C633.375 521.508 634.019 524.341 635.764 526.491L638.093 524.601L640.423 522.711C639.877 522.037 639.375 520.769 639.375 518.448L636.375 518.448ZM638.093 524.601L635.781 526.513C637.492 528.581 639.802 529.679 642.488 529.679L642.488 526.679L642.488 523.679C641.605 523.679 640.985 523.391 640.405 522.689L638.093 524.601ZM642.488 526.679L642.488 529.679C645.163 529.679 647.455 528.569 649.155 526.513L646.843 524.601L644.531 522.689C643.941 523.403 643.329 523.679 642.488 523.679L642.488 526.679ZM646.843 524.601L649.151 526.517C650.938 524.365 651.601 521.521 651.601 518.448L648.601 518.448L645.601 518.448C645.601 520.755 645.092 522.013 644.535 522.685L646.843 524.601ZM648.601 518.448L651.601 518.448C651.601 515.455 651.048 512.627 649.371 510.563L647.043 512.455L644.715 514.347C645.115 514.84 645.601 516.007 645.601 518.448L648.601 518.448ZM647.043 512.455L649.414 510.617C647.705 508.413 645.208 507.497 642.488 507.497L642.488 510.497L642.488 513.497C643.817 513.497 644.357 513.887 644.672 514.294L647.043 512.455ZM642.488 510.497L642.488 507.497C639.809 507.497 637.33 508.356 635.585 510.459L637.893 512.375L640.202 514.291C640.535 513.89 641.118 513.497 642.488 513.497L642.488 510.497ZM637.893 512.375L635.561 510.489C633.898 512.546 633.375 515.421 633.375 518.448L636.375 518.448L639.375 518.448C639.375 515.881 639.865 514.708 640.226 514.261L637.893 512.375ZM705.452 506.382L703.331 508.503L703.339 508.511L703.347 508.519L705.452 506.382ZM705.212 555.565L703.162 553.376L703.154 553.383L705.212 555.565ZM690.629 560.839L690.643 557.839L690.642 557.839L690.629 560.839ZM675.766 555.525L673.653 557.654L673.661 557.662L675.766 555.525ZM685.875 549.093L683.413 550.807L683.423 550.822L683.434 550.836L685.875 549.093ZM685.875 512.934L683.434 511.191L683.423 511.205L683.413 511.22L685.875 512.934ZM670.413 539.863L673.413 539.863L673.413 521.964L670.413 521.964L667.413 521.964L667.413 539.863L670.413 539.863ZM670.413 521.964L673.413 521.964C673.413 515.817 675.054 511.5 677.943 508.568L675.806 506.462L673.67 504.356C669.367 508.722 667.413 514.74 667.413 521.964L670.413 521.964ZM675.806 506.462L677.943 508.568C680.852 505.616 684.952 503.988 690.629 503.988L690.629 500.988L690.629 497.988C683.734 497.988 677.952 500.01 673.67 504.356L675.806 506.462ZM690.629 500.988L690.629 503.988C696.319 503.988 700.424 505.597 703.331 508.503L705.452 506.382L707.573 504.261C703.288 499.976 697.512 497.988 690.629 497.988L690.629 500.988ZM705.452 506.382L703.347 508.519C706.223 511.353 707.886 515.666 707.886 521.964L710.886 521.964L713.886 521.964C713.886 514.625 711.927 508.55 707.558 504.245L705.452 506.382ZM710.886 521.964L707.886 521.964L707.886 539.863L710.886 539.863L713.886 539.863L713.886 521.964L710.886 521.964ZM710.886 539.863L707.886 539.863C707.886 546.25 706.154 550.572 703.162 553.376L705.212 555.565L707.263 557.755C711.835 553.473 713.886 547.327 713.886 539.863L710.886 539.863ZM705.212 555.565L703.154 553.383C700.046 556.315 695.968 557.863 690.643 557.839L690.629 560.839L690.616 563.839C697.223 563.869 702.868 561.901 707.271 557.747L705.212 555.565ZM690.629 560.839L690.642 557.839C684.868 557.815 680.745 556.218 677.872 553.388L675.766 555.525L673.661 557.662C677.927 561.864 683.712 563.81 690.617 563.839L690.629 560.839ZM675.766 555.525L677.88 553.396C675.063 550.6 673.413 546.267 673.413 539.863L670.413 539.863L667.413 539.863C667.413 547.257 669.332 553.365 673.653 557.654L675.766 555.525ZM684.317 542.7L681.317 542.7C681.317 545.782 681.884 548.612 683.413 550.807L685.875 549.093L688.337 547.378C687.788 546.59 687.317 545.158 687.317 542.7L684.317 542.7ZM685.875 549.093L683.434 550.836C685.152 553.242 687.721 554.33 690.629 554.33L690.629 551.33L690.629 548.33C689.329 548.33 688.729 547.927 688.316 547.349L685.875 549.093ZM690.629 551.33L690.629 554.33C693.538 554.33 696.107 553.242 697.825 550.836L695.384 549.093L692.943 547.349C692.53 547.927 691.93 548.33 690.629 548.33L690.629 551.33ZM695.384 549.093L697.825 550.836C699.397 548.636 699.982 545.794 699.982 542.7L696.982 542.7L693.982 542.7C693.982 545.146 693.502 546.566 692.943 547.349L695.384 549.093ZM696.982 542.7L699.982 542.7L699.982 519.407L696.982 519.407L693.982 519.407L693.982 542.7L696.982 542.7ZM696.982 519.407L699.982 519.407C699.982 516.274 699.402 513.399 697.825 511.191L695.384 512.934L692.943 514.678C693.496 515.453 693.982 516.893 693.982 519.407L696.982 519.407ZM695.384 512.934L697.825 511.191C696.107 508.786 693.538 507.697 690.629 507.697L690.629 510.697L690.629 513.697C691.93 513.697 692.53 514.1 692.943 514.678L695.384 512.934ZM690.629 510.697L690.629 507.697C687.721 507.697 685.152 508.786 683.434 511.191L685.875 512.934L688.316 514.678C688.729 514.1 689.329 513.697 690.629 513.697L690.629 510.697ZM685.875 512.934L683.413 511.22C681.879 513.423 681.317 516.286 681.317 519.407L684.317 519.407L687.317 519.407C687.317 516.881 687.793 515.429 688.337 514.649L685.875 512.934ZM684.317 519.407L681.317 519.407L681.317 542.7L684.317 542.7L687.317 542.7L687.317 519.407L684.317 519.407ZM776.004 506.382L773.883 508.503L773.891 508.511L773.898 508.519L776.004 506.382ZM775.764 555.565L773.713 553.376L773.706 553.383L775.764 555.565ZM761.181 560.839L761.195 557.839L761.194 557.839L761.181 560.839ZM746.318 555.525L744.205 557.654L744.213 557.662L746.318 555.525ZM756.427 549.093L753.965 550.807L753.975 550.822L753.986 550.836L756.427 549.093ZM756.427 512.934L753.986 511.191L753.975 511.205L753.965 511.22L756.427 512.934ZM740.965 539.863L743.965 539.863L743.965 521.964L740.965 521.964L737.965 521.964L737.965 539.863L740.965 539.863ZM740.965 521.964L743.965 521.964C743.965 515.817 745.606 511.5 748.495 508.568L746.358 506.462L744.221 504.356C739.919 508.722 737.965 514.74 737.965 521.964L740.965 521.964ZM746.358 506.462L748.495 508.568C751.404 505.616 755.504 503.988 761.181 503.988L761.181 500.988L761.181 497.988C754.286 497.988 748.504 500.01 744.221 504.356L746.358 506.462ZM761.181 500.988L761.181 503.988C766.871 503.988 770.976 505.597 773.883 508.503L776.004 506.382L778.125 504.261C773.84 499.976 768.064 497.988 761.181 497.988L761.181 500.988ZM776.004 506.382L773.898 508.519C776.774 511.353 778.438 515.666 778.438 521.964L781.438 521.964L784.438 521.964C784.438 514.625 782.479 508.55 778.11 504.245L776.004 506.382ZM781.438 521.964L778.438 521.964L778.438 539.863L781.438 539.863L784.438 539.863L784.438 521.964L781.438 521.964ZM781.438 539.863L778.438 539.863C778.438 546.25 776.706 550.573 773.714 553.376L775.764 555.565L777.815 557.755C782.387 553.473 784.438 547.327 784.438 539.863L781.438 539.863ZM775.764 555.565L773.706 553.383C770.597 556.315 766.52 557.863 761.195 557.839L761.181 560.839L761.168 563.839C767.775 563.869 773.42 561.901 777.823 557.747L775.764 555.565ZM761.181 560.839L761.194 557.839C755.42 557.815 751.297 556.218 748.424 553.388L746.318 555.525L744.213 557.662C748.479 561.864 754.264 563.81 761.169 563.839L761.181 560.839ZM746.318 555.525L748.432 553.396C745.615 550.6 743.965 546.267 743.965 539.863L740.965 539.863L737.965 539.863C737.965 547.257 739.884 553.365 744.205 557.654L746.318 555.525ZM754.869 542.7L751.869 542.7C751.869 545.782 752.436 548.612 753.965 550.807L756.427 549.093L758.889 547.378C758.34 546.59 757.869 545.158 757.869 542.7L754.869 542.7ZM756.427 549.093L753.986 550.836C755.703 553.242 758.273 554.33 761.181 554.33L761.181 551.33L761.181 548.33C759.881 548.33 759.281 547.927 758.868 547.349L756.427 549.093ZM761.181 551.33L761.181 554.33C764.089 554.33 766.659 553.242 768.377 550.836L765.936 549.093L763.495 547.349C763.082 547.927 762.481 548.33 761.181 548.33L761.181 551.33ZM765.936 549.093L768.377 550.836C769.949 548.636 770.534 545.794 770.534 542.7L767.534 542.7L764.534 542.7C764.534 545.146 764.054 546.566 763.495 547.349L765.936 549.093ZM767.534 542.7L770.534 542.7L770.534 519.407L767.534 519.407L764.534 519.407L764.534 542.7L767.534 542.7ZM767.534 519.407L770.534 519.407C770.534 516.274 769.954 513.399 768.377 511.191L765.936 512.934L763.495 514.678C764.048 515.453 764.534 516.893 764.534 519.407L767.534 519.407ZM765.936 512.934L768.377 511.191C766.659 508.786 764.089 507.697 761.181 507.697L761.181 510.697L761.181 513.697C762.481 513.697 763.082 514.1 763.495 514.678L765.936 512.934ZM761.181 510.697L761.181 507.697C758.273 507.697 755.703 508.786 753.986 511.191L756.427 512.934L758.868 514.678C759.281 514.1 759.881 513.697 761.181 513.697L761.181 510.697ZM756.427 512.934L753.965 511.22C752.431 513.423 751.869 516.286 751.869 519.407L754.869 519.407L757.869 519.407C757.869 516.881 758.345 515.429 758.889 514.649L756.427 512.934ZM754.869 519.407L751.869 519.407L751.869 542.7L754.869 542.7L757.869 542.7L757.869 519.407L754.869 519.407ZM811.2 560L808.2 560L808.2 563L811.2 563L811.2 560ZM811.2 545.297L808.681 543.667L808.2 544.411L808.2 545.297L811.2 545.297ZM811.64 544.618L814.158 546.248L814.64 545.504L814.64 544.618L811.64 544.618ZM811.64 519.487L814.64 519.487L814.64 516.487L811.64 516.487L811.64 519.487ZM811.32 519.487L811.32 516.487L809.613 516.487L808.741 517.954L811.32 519.487ZM800.253 538.105L797.674 536.572L794.98 541.105L800.253 541.105L800.253 538.105ZM816.634 538.105L816.634 541.105L817.074 541.105L817.496 540.979L816.634 538.105ZM817.832 537.746L817.832 534.746L817.392 534.746L816.97 534.872L817.832 537.746ZM830.658 537.746L833.658 537.746L833.658 534.746L830.658 534.746L830.658 537.746ZM830.658 548.533L830.658 551.533L833.658 551.533L833.658 548.533L830.658 548.533ZM787.388 548.533L784.388 548.533L784.388 551.533L787.388 551.533L787.388 548.533ZM787.388 538.625L784.917 536.924L784.388 537.692L784.388 538.625L787.388 538.625ZM812.718 501.827L812.718 498.827L811.141 498.827L810.247 500.126L812.718 501.827ZM823.985 501.827L826.985 501.827L826.985 498.827L823.985 498.827L823.985 501.827ZM823.985 560L823.985 563L826.985 563L826.985 560L823.985 560ZM811.2 560L814.2 560L814.2 545.297L811.2 545.297L808.2 545.297L808.2 560L811.2 560ZM811.2 545.297L813.719 546.927L814.158 546.248L811.64 544.618L809.121 542.988L808.681 543.667L811.2 545.297ZM811.64 544.618L814.64 544.618L814.64 519.487L811.64 519.487L808.64 519.487L808.64 544.618L811.64 544.618ZM811.64 519.487L811.64 516.487L811.32 516.487L811.32 519.487L811.32 522.487L811.64 522.487L811.64 519.487ZM811.32 519.487L808.741 517.954L797.674 536.572L800.253 538.105L802.832 539.638L813.899 521.02L811.32 519.487ZM800.253 538.105L800.253 541.105L816.634 541.105L816.634 538.105L816.634 535.105L800.253 535.105L800.253 538.105ZM816.634 538.105L817.496 540.979L818.695 540.619L817.832 537.746L816.97 534.872L815.772 535.232L816.634 538.105ZM817.832 537.746L817.832 540.746L830.658 540.746L830.658 537.746L830.658 534.746L817.832 534.746L817.832 537.746ZM830.658 537.746L827.658 537.746L827.658 548.533L830.658 548.533L833.658 548.533L833.658 537.746L830.658 537.746ZM830.658 548.533L830.658 545.533L787.388 545.533L787.388 548.533L787.388 551.533L830.658 551.533L830.658 548.533ZM787.388 548.533L790.388 548.533L790.388 538.625L787.388 538.625L784.388 538.625L784.388 548.533L787.388 548.533ZM787.388 538.625L789.859 540.326L815.189 503.528L812.718 501.827L810.247 500.126L784.917 536.924L787.388 538.625ZM812.718 501.827L812.718 504.827L823.985 504.827L823.985 501.827L823.985 498.827L812.718 498.827L812.718 501.827ZM823.985 501.827L820.985 501.827L820.985 560L823.985 560L826.985 560L826.985 501.827L823.985 501.827ZM823.985 560L823.985 557L811.2 557L811.2 560L811.2 563L823.985 563L823.985 560ZM836.368 560L833.368 560L833.368 563L836.368 563L836.368 560ZM836.368 551.33L834.207 549.249L833.368 550.12L833.368 551.33L836.368 551.33ZM857.383 529.515L859.544 531.597L859.604 531.534L859.661 531.468L857.383 529.515ZM852.269 512.615L854.436 514.69L854.447 514.678L854.458 514.667L852.269 512.615ZM850.471 521.644L850.471 524.644L853.471 524.644L853.471 521.644L850.471 521.644ZM836.368 521.644L833.368 521.644L833.368 524.644L836.368 524.644L836.368 521.644ZM872.086 505.343L870.133 507.62L870.143 507.629L872.086 505.343ZM877.201 517.09L880.201 517.09L880.201 517.082L880.2 517.074L877.201 517.09ZM874.843 526.958L872.205 525.53L872.2 525.54L872.195 525.549L874.843 526.958ZM868.211 535.828L866.042 533.755L865.98 533.821L865.921 533.89L868.211 535.828ZM857.184 548.853L854.894 546.914L850.713 551.853L857.184 551.853L857.184 548.853ZM878.559 548.853L881.559 548.853L881.559 545.853L878.559 545.853L878.559 548.853ZM878.559 560L878.559 563L881.559 563L881.559 560L878.559 560ZM836.368 560L839.368 560L839.368 551.33L836.368 551.33L833.368 551.33L833.368 560L836.368 560ZM836.368 551.33L838.528 553.411L859.544 531.597L857.383 529.515L855.223 527.434L834.207 549.249L836.368 551.33ZM857.383 529.515L859.661 531.468C861.364 529.481 862.841 527.434 864.084 525.325L861.499 523.802L858.914 522.279C857.865 524.059 856.599 525.821 855.106 527.563L857.383 529.515ZM861.499 523.802L864.084 525.325C865.477 522.96 866.217 520.428 866.217 517.769L863.217 517.769L860.217 517.769C860.217 519.265 859.812 520.755 858.914 522.279L861.499 523.802ZM863.217 517.769L866.217 517.769C866.217 514.895 865.582 512.083 863.569 510.164L861.499 512.335L859.429 514.506C859.706 514.771 860.217 515.582 860.217 517.769L863.217 517.769ZM861.499 512.335L863.569 510.164C861.768 508.447 859.473 507.697 856.984 507.697L856.984 510.697L856.984 513.697C858.224 513.697 858.939 514.04 859.429 514.506L861.499 512.335ZM856.984 510.697L856.984 507.697C854.311 507.697 851.912 508.61 850.081 510.563L852.269 512.615L854.458 514.667C855.024 514.063 855.768 513.697 856.984 513.697L856.984 510.697ZM852.269 512.615L850.102 510.54C849.007 511.684 848.376 513.17 848.006 514.693C847.631 516.235 847.471 518.026 847.471 520.006L850.471 520.006L853.471 520.006C853.471 518.311 853.612 517.032 853.836 516.111C854.065 515.17 854.333 514.797 854.436 514.69L852.269 512.615ZM850.471 520.006L847.471 520.006L847.471 521.644L850.471 521.644L853.471 521.644L853.471 520.006L850.471 520.006ZM850.471 521.644L850.471 518.644L836.368 518.644L836.368 521.644L836.368 524.644L850.471 524.644L850.471 521.644ZM836.368 521.644L839.368 521.644L839.368 518.208L836.368 518.208L833.368 518.208L833.368 521.644L836.368 521.644ZM836.368 518.208L839.368 518.208C839.368 514.119 840.89 510.837 844.06 508.152L842.121 505.863L840.182 503.574C835.681 507.387 833.368 512.336 833.368 518.208L836.368 518.208ZM842.121 505.863L844.06 508.152C847.233 505.463 851.525 503.988 857.224 503.988L857.224 500.988L857.224 497.988C850.457 497.988 844.68 499.763 840.182 503.574L842.121 505.863ZM857.224 500.988L857.224 503.988C863.357 503.988 867.498 505.358 870.133 507.62L872.086 505.343L874.04 503.067C869.91 499.522 864.142 497.988 857.224 497.988L857.224 500.988ZM872.086 505.343L870.143 507.629C872.778 509.869 874.178 512.912 874.201 517.106L877.201 517.09L880.2 517.074C880.17 511.359 878.161 506.571 874.03 503.058L872.086 505.343ZM877.201 517.09L874.201 517.09C874.201 520.324 873.513 523.113 872.205 525.53L874.843 526.958L877.482 528.386C879.316 524.996 880.201 521.207 880.201 517.09L877.201 517.09ZM874.843 526.958L872.195 525.549C870.808 528.156 868.777 530.894 866.042 533.755L868.211 535.828L870.38 537.901C873.398 534.743 875.789 531.567 877.492 528.367L874.843 526.958ZM868.211 535.828L865.921 533.89L854.894 546.914L857.184 548.853L859.473 550.791L870.501 537.766L868.211 535.828ZM857.184 548.853L857.184 551.853L878.559 551.853L878.559 548.853L878.559 545.853L857.184 545.853L857.184 548.853ZM878.559 548.853L875.559 548.853L875.559 560L878.559 560L881.559 560L881.559 548.853L878.559 548.853ZM878.559 560L878.559 557L836.368 557L836.368 560L836.368 563L878.559 563L878.559 560ZM920.068 506.382L917.946 508.503L917.954 508.511L917.962 508.519L920.068 506.382ZM919.828 555.565L917.777 553.376L917.77 553.383L919.828 555.565ZM905.245 560.839L905.258 557.839L905.258 557.839L905.245 560.839ZM890.382 555.525L888.269 557.654L888.277 557.662L890.382 555.525ZM900.49 549.093L898.029 550.807L898.039 550.822L898.049 550.836L900.49 549.093ZM900.49 512.934L898.049 511.191L898.039 511.205L898.029 511.22L900.49 512.934ZM885.028 539.863L888.028 539.863L888.028 521.964L885.028 521.964L882.028 521.964L882.028 539.863L885.028 539.863ZM885.028 521.964L888.028 521.964C888.028 515.817 889.67 511.5 892.559 508.568L890.422 506.462L888.285 504.356C883.983 508.722 882.028 514.74 882.028 521.964L885.028 521.964ZM890.422 506.462L892.559 508.568C895.468 505.616 899.568 503.988 905.245 503.988L905.245 500.988L905.245 497.988C898.35 497.988 892.568 500.01 888.285 504.356L890.422 506.462ZM905.245 500.988L905.245 503.988C910.935 503.988 915.04 505.597 917.946 508.503L920.068 506.382L922.189 504.261C917.904 499.976 912.127 497.988 905.245 497.988L905.245 500.988ZM920.068 506.382L917.962 508.519C920.838 511.353 922.501 515.666 922.501 521.964L925.501 521.964L928.501 521.964C928.501 514.625 926.542 508.55 922.173 504.245L920.068 506.382ZM925.501 521.964L922.501 521.964L922.501 539.863L925.501 539.863L928.501 539.863L928.501 521.964L925.501 521.964ZM925.501 539.863L922.501 539.863C922.501 546.25 920.77 550.573 917.777 553.376L919.828 555.565L921.879 557.755C926.451 553.473 928.501 547.327 928.501 539.863L925.501 539.863ZM919.828 555.565L917.77 553.383C914.661 556.315 910.584 557.863 905.258 557.839L905.245 560.839L905.232 563.839C911.839 563.869 917.484 561.901 921.887 557.747L919.828 555.565ZM905.245 560.839L905.258 557.839C899.484 557.815 895.36 556.218 892.487 553.388L890.382 555.525L888.277 557.662C892.542 561.864 898.327 563.81 905.232 563.839L905.245 560.839ZM890.382 555.525L892.495 553.396C889.678 550.6 888.028 546.267 888.028 539.863L885.028 539.863L882.028 539.863C882.028 547.257 883.947 553.365 888.269 557.654L890.382 555.525ZM898.932 542.7L895.932 542.7C895.932 545.782 896.5 548.612 898.029 550.807L900.49 549.093L902.952 547.378C902.403 546.59 901.932 545.158 901.932 542.7L898.932 542.7ZM900.49 549.093L898.049 550.836C899.767 553.242 902.337 554.33 905.245 554.33L905.245 551.33L905.245 548.33C903.945 548.33 903.344 547.927 902.932 547.349L900.49 549.093ZM905.245 551.33L905.245 554.33C908.153 554.33 910.723 553.242 912.441 550.836L909.999 549.093L907.558 547.349C907.145 547.927 906.545 548.33 905.245 548.33L905.245 551.33ZM909.999 549.093L912.441 550.836C914.012 548.636 914.598 545.794 914.598 542.7L911.598 542.7L908.598 542.7C908.598 545.146 908.117 546.566 907.558 547.349L909.999 549.093ZM911.598 542.7L914.598 542.7L914.598 519.407L911.598 519.407L908.598 519.407L908.598 542.7L911.598 542.7ZM911.598 519.407L914.598 519.407C914.598 516.274 914.018 513.399 912.441 511.191L909.999 512.934L907.558 514.678C908.112 515.453 908.598 516.893 908.598 519.407L911.598 519.407ZM909.999 512.934L912.441 511.191C910.723 508.786 908.153 507.697 905.245 507.697L905.245 510.697L905.245 513.697C906.545 513.697 907.145 514.1 907.558 514.678L909.999 512.934ZM905.245 510.697L905.245 507.697C902.337 507.697 899.767 508.786 898.049 511.191L900.49 512.934L902.932 514.678C903.344 514.1 903.945 513.697 905.245 513.697L905.245 510.697ZM900.49 512.934L898.029 511.22C896.494 513.423 895.932 516.286 895.932 519.407L898.932 519.407L901.932 519.407C901.932 516.881 902.409 515.429 902.952 514.649L900.49 512.934ZM898.932 519.407L895.932 519.407L895.932 542.7L898.932 542.7L901.932 542.7L901.932 519.407L898.932 519.407Z" fill="black" mask="url(#path-13-outside-5_17007_6863)"/> +</g> +<path d="M1007.71 128.486L1015.98 79.744H1029.2L1020.93 128.486H1007.71ZM1068.64 80.8133C1064.84 79.4323 1060.84 78.7393 1056.8 78.7666C1043.75 78.7666 1034.56 85.3692 1034.48 94.8341C1034.41 101.83 1041.05 105.731 1046.05 108.059C1051.2 110.446 1052.92 111.968 1052.9 114.099C1052.87 117.362 1048.79 118.852 1045 118.852C1039.71 118.852 1036.91 118.106 1032.57 116.298L1030.87 115.524L1029.01 126.422C1032.1 127.78 1037.8 128.958 1043.72 129.018C1057.6 129.018 1066.61 122.492 1066.72 112.386C1066.77 106.848 1063.25 102.633 1055.63 99.1586C1051.01 96.9204 1048.19 95.4035 1048.22 93.1231C1048.22 91.1013 1050.61 88.9378 1055.78 88.9378C1059.17 88.8617 1062.53 89.4969 1065.66 90.803L1066.85 91.3649L1068.64 80.8133ZM1102.6 79.744H1092.43C1089.28 79.744 1086.92 80.6095 1085.54 83.7677L1065.99 128.237H1079.9C1079.9 128.237 1082.13 122.323 1082.64 121.025L1099.32 121.045C1099.71 122.726 1100.9 128.237 1100.9 128.237H1113.26L1102.6 79.744ZM1086.43 111.078C1087.52 108.273 1091.69 97.47 1091.69 97.47C1091.61 97.5993 1092.78 94.65 1093.44 92.8222L1094.33 97.02C1094.33 97.02 1096.86 108.641 1097.39 111.078H1086.43ZM996.495 79.744L983.596 112.866L982.223 106.134C979.822 98.3753 972.341 89.9699 963.976 85.7622L975.771 128.237L989.709 128.222L1010.45 79.744H996.431" fill="white"/> +<path d="M970.977 79.7436H949.775L949.604 80.7557C966.171 84.7868 977.132 94.5253 981.684 106.223L977.053 83.8419C976.254 80.7607 973.937 79.8406 971.069 79.7336" fill="white"/> +<path d="M130.128 161.702C130.328 161.588 130.534 161.458 130.74 161.314C130.883 161.213 131.026 161.099 131.173 160.985C131.226 160.945 131.276 160.905 131.329 160.865C133.927 158.712 136.845 154.22 138.923 148.774C138.933 148.747 138.942 148.72 138.952 148.693C139.101 148.303 139.243 147.909 139.386 147.508C142.46 138.633 143.415 127.306 138.236 118.047C134.979 112.22 130.334 107.339 124.943 103.92C120.321 100.94 117.507 95.9054 117.39 90.4091C117.303 84.0188 115.575 77.507 112.318 71.6803C107.186 62.5109 96.9335 57.3933 87.7015 55.3544C84.4707 54.6407 81.1106 54.201 77.7989 54.3115C75.5044 54.3887 72.9201 54.577 70.8725 55.7241C63.8472 59.6519 53.507 82.8217 62.7646 99.3794C66.0216 105.206 70.6664 110.088 76.0571 113.506C80.6792 116.487 83.4934 121.521 83.6107 127.017C83.6975 133.408 85.4257 139.919 88.6826 145.746C97.9402 162.304 123.099 165.627 130.124 161.699L130.128 161.702Z" fill="#FFC900"/> +<path d="M130.128 161.702C130.328 161.588 130.534 161.458 130.74 161.314C130.883 161.213 131.026 161.099 131.173 160.985C131.226 160.945 131.276 160.905 131.329 160.865C133.927 158.712 136.845 154.22 138.923 148.774C138.933 148.747 138.942 148.72 138.952 148.693C139.101 148.303 139.243 147.909 139.386 147.508C142.46 138.633 143.415 127.306 138.236 118.047C134.979 112.22 130.334 107.339 124.943 103.92C120.321 100.94 117.507 95.9054 117.39 90.4091C117.303 84.0188 115.575 77.507 112.318 71.6803C107.186 62.5109 96.9335 57.3933 87.7015 55.3544C84.4707 54.6407 81.1106 54.201 77.7989 54.3115C75.5044 54.3887 72.9201 54.577 70.8725 55.7241C63.8472 59.6519 53.507 82.8217 62.7646 99.3794C66.0216 105.206 70.6664 110.088 76.0571 113.506C80.6792 116.487 83.4934 121.521 83.6107 127.017C83.6975 133.408 85.4257 139.919 88.6826 145.746C97.9402 162.304 123.099 165.627 130.124 161.699L130.128 161.702ZM92.132 143.821C89.1702 138.52 87.6778 132.745 87.6199 127.038C87.4349 120.185 83.8828 113.832 78.0782 110.291C73.249 107.251 69.0359 102.828 66.1446 97.6577C57.9973 83.0844 67.4378 62.3322 72.7384 59.3704C78.342 56.2376 100.825 59.3156 108.896 73.7557C111.857 79.0562 113.35 84.8317 113.408 90.5383C113.456 97.4657 116.938 103.692 122.813 107.362C127.642 110.402 131.785 114.695 134.746 119.996C142.894 134.569 133.48 155.305 128.066 158.333C122.765 161.295 100.202 158.261 92.132 143.824L92.132 143.821Z" fill="black" stroke="black" stroke-width="0.291534"/> +<path d="M87.495 98.0243L89.5357 94.6391" stroke="black" stroke-width="3.66887" stroke-miterlimit="10" stroke-linecap="round"/> +<path d="M80.1515 91.9765C84.7362 91.9621 88.4412 88.2337 88.4268 83.6489C88.4124 79.0642 84.6841 75.3592 80.0993 75.3736C75.5145 75.388 71.8095 79.1163 71.8239 83.7011C71.8383 88.2859 75.5667 91.9909 80.1515 91.9765Z" fill="white" stroke="black" stroke-width="3.20687" stroke-miterlimit="10"/> +<path d="M94.6993 84.0963C99.2841 84.0819 102.989 80.3536 102.975 75.7688C102.96 71.1841 99.2319 67.479 94.6472 67.4935C90.0624 67.5079 86.3574 71.2362 86.3718 75.821C86.3862 80.4057 90.1145 84.1108 94.6993 84.0963Z" fill="white" stroke="black" stroke-width="3.20687" stroke-miterlimit="10"/> +<path d="M93.908 67.8425C91.9051 70.5039 91.7935 74.2666 93.877 77.0819C95.6557 79.4845 98.5643 80.5594 101.328 80.1105C103.331 77.4491 103.443 73.6864 101.359 70.8711C99.5803 68.4685 96.6717 67.3936 93.908 67.8425Z" fill="black"/> +<path d="M79.8006 75.7013C77.8743 78.3357 77.7891 82.0184 79.8325 84.7804C81.5173 87.0566 84.2224 88.1287 86.8465 87.837C88.7728 85.2026 88.858 81.52 86.8147 78.7579C85.1298 76.4818 82.4247 75.4096 79.8006 75.7013Z" fill="black"/> +<path d="M90.0197 96.739C91.9126 97.2468 94.1103 97.1398 95.9361 96.487C97.7752 95.8274 100.054 93.9891 101.056 92.2849" stroke="black" stroke-width="3.66887" stroke-miterlimit="10" stroke-linecap="round"/> +<path d="M107.899 145.319C107.271 146.008 107.262 147.192 107.947 147.821C110.7 150.327 113.762 152.492 116.673 154.074C117.214 154.442 117.804 154.284 118.317 153.999C118.573 153.854 118.756 153.58 118.945 153.31C119.432 152.364 119.052 151.391 118.307 150.967C115.597 149.444 112.806 147.468 110.327 145.141C109.638 144.52 108.521 144.637 107.899 145.319Z" fill="black" stroke="black" stroke-width="0.583068" stroke-miterlimit="10"/> +<path d="M103.019 141.786L103.149 141.712C103.974 141.079 104.131 140.148 103.628 139.249C102.921 138.294 102.348 137.265 101.774 136.24C100.697 134.312 99.7504 132.314 98.8707 130.445C98.4974 129.472 97.4959 129.192 96.5197 129.565C95.5469 129.939 95.2666 130.94 95.6399 131.916C96.4602 133.985 97.6108 136.043 98.758 138.097C99.402 139.252 99.9789 140.281 100.756 141.366C101.309 142.058 102.24 142.215 103.012 141.786L103.019 141.786Z" fill="black" stroke="black" stroke-width="0.583068" stroke-miterlimit="10"/> +<path d="M94.256 123.439L94.6422 123.224C95.2848 122.865 95.639 121.994 95.5365 121.21C94.8987 118.867 93.9374 116.539 92.7165 114.355C92.1429 113.326 91.5659 112.297 90.8625 111.345C90.2295 110.52 89.1719 110.433 88.4732 110.996C87.648 111.629 87.5613 112.686 88.1238 113.385C88.7568 114.21 89.26 115.109 89.7631 116.012C90.8399 117.939 91.6635 120.008 92.2803 122.021C92.3972 123.135 93.4164 123.745 94.2526 123.439L94.256 123.439Z" fill="black" stroke="black" stroke-width="0.583068" stroke-miterlimit="10"/> +<path d="M128.552 148.619C128.953 148.731 129.206 148.591 129.462 148.446C129.975 148.161 130.347 147.616 130.388 147.086C130.565 143.787 130.326 140.039 129.631 136.379C129.455 135.462 128.565 134.781 127.525 135.028C126.609 135.204 125.928 136.094 126.175 137.133C126.855 140.46 127.08 143.878 126.959 146.983C126.932 147.841 127.565 148.666 128.552 148.623L128.552 148.619Z" fill="black" stroke="black" stroke-width="0.583068" stroke-miterlimit="10"/> +<path d="M108.614 99.8158C107.641 100.189 107.361 101.191 107.66 102.034C108.104 103.136 108.681 104.165 109.251 105.187C110.472 107.371 111.95 109.408 113.616 111.177C114.105 111.746 115.033 111.9 115.802 111.471L116.188 111.256C116.816 110.567 116.897 109.509 116.337 108.814C114.822 107.304 113.612 105.45 112.535 103.523C112.032 102.624 111.532 101.725 111.155 100.748C110.522 99.9232 109.58 99.4358 108.611 99.8125L108.614 99.8158Z" fill="black" stroke="black" stroke-width="0.583068" stroke-miterlimit="10"/> +<path d="M120.914 116.521C120.089 117.154 120.002 118.211 120.435 118.984C121.694 120.637 122.771 122.565 123.851 124.49C124.425 125.519 125.001 126.548 125.442 127.643C125.815 128.616 126.817 128.897 127.793 128.523L127.923 128.45C128.695 128.017 128.979 127.015 128.673 126.172C128.229 125.07 127.582 123.918 126.934 122.759C125.784 120.701 124.507 118.721 123.303 116.867C122.747 116.168 121.616 115.958 120.917 116.521L120.914 116.521Z" fill="black" stroke="black" stroke-width="0.583068" stroke-miterlimit="10"/> +<path d="M109.403 124.925C110.302 124.422 110.585 123.42 110.082 122.525L104.622 112.76C104.119 111.861 103.117 111.577 102.222 112.08C101.326 112.583 101.039 113.585 101.542 114.48L107.003 124.246C107.499 125.148 108.5 125.428 109.403 124.925Z" fill="black" stroke="black" stroke-width="0.583068" stroke-miterlimit="10"/> +<path d="M120.325 144.453C121.224 143.95 121.507 142.948 121.004 142.052L115.544 132.287C115.04 131.388 114.039 131.105 113.143 131.608C112.248 132.111 111.961 133.112 112.464 134.008L117.924 143.773C118.421 144.675 119.422 144.956 120.325 144.453Z" fill="black" stroke="black" stroke-width="0.583068" stroke-miterlimit="10"/> +<defs> +<linearGradient id="paint0_linear_17007_6863" x1="5.71025e-06" y1="330.901" x2="1208" y2="382.21" gradientUnits="userSpaceOnUse"> +<stop stop-color="white" stop-opacity="0.29"/> +<stop offset="1" stop-color="white" stop-opacity="0.12"/> +</linearGradient> +</defs> +</svg> diff --git a/src/assets/cards/index.ts b/src/assets/cards/index.ts new file mode 100644 index 000000000..1b79ed297 --- /dev/null +++ b/src/assets/cards/index.ts @@ -0,0 +1,4 @@ +export { default as CARD_GRADIENT_4 } from './Cart Gradient 4.svg' +export { default as CARD_GRADIENT_5 } from './Cart Gradient 5.png' +export { default as CARD_GRADIENT_9 } from './Cart Gradient 9.svg' +export { default as CARD_GRADIENT_10 } from './Cart Gradient 10.svg' diff --git a/src/assets/index.ts b/src/assets/index.ts index 6cadbffb7..9fee1067e 100644 --- a/src/assets/index.ts +++ b/src/assets/index.ts @@ -1,5 +1,6 @@ export * from './badges' export * from './bg' +export * from './cards' export * from './chains' export * from './exchanges' export * from './icons' diff --git a/src/components/0_Bruddle/BaseInput.tsx b/src/components/0_Bruddle/BaseInput.tsx index 26ef2f515..d3e271766 100644 --- a/src/components/0_Bruddle/BaseInput.tsx +++ b/src/components/0_Bruddle/BaseInput.tsx @@ -29,4 +29,7 @@ const BaseInput = forwardRef<HTMLInputElement, BaseInputProps>( } ) +BaseInput.displayName = 'BaseInput' + +export { BaseInput } export default BaseInput diff --git a/src/components/0_Bruddle/BaseSelect.tsx b/src/components/0_Bruddle/BaseSelect.tsx index acd8f2f84..13aa05fe7 100644 --- a/src/components/0_Bruddle/BaseSelect.tsx +++ b/src/components/0_Bruddle/BaseSelect.tsx @@ -100,4 +100,5 @@ const BaseSelect = forwardRef<HTMLButtonElement, BaseSelectProps>( BaseSelect.displayName = 'BaseSelect' +export { BaseSelect } export default BaseSelect diff --git a/src/components/0_Bruddle/Button.tsx b/src/components/0_Bruddle/Button.tsx index a6604a5a5..a003522d5 100644 --- a/src/components/0_Bruddle/Button.tsx +++ b/src/components/0_Bruddle/Button.tsx @@ -1,9 +1,10 @@ 'use client' -import React, { forwardRef, useEffect, useRef, useState, useCallback } from 'react' +import React, { forwardRef, useCallback, useEffect, useRef } from 'react' import { twMerge } from 'tailwind-merge' import { Icon, type IconName } from '../Global/Icons/Icon' import Loading from '../Global/Loading' import { useHaptic } from 'use-haptic' +import { useLongPress } from '@/hooks/useLongPress' export type ButtonVariant = | 'purple' @@ -11,15 +12,21 @@ export type ButtonVariant = | 'stroke' | 'transparent-light' | 'transparent-dark' - | 'green' - | 'yellow' | 'transparent' | 'primary-soft' -export type ButtonSize = 'small' | 'medium' | 'large' | 'xl' | 'xl-fixed' +export type ButtonSize = 'small' | 'medium' | 'large' type ButtonShape = 'default' | 'square' type ShadowSize = '3' | '4' | '6' | '8' type ShadowType = 'primary' | 'secondary' +/** + * Primary button component. + * + * @prop variant - Visual style. 'purple' for primary CTAs, 'stroke' for secondary. + * @prop size - Height override. Omit for default h-13 (tallest). 'large' is h-10 (shorter!). + * @prop shadowSize - Drop shadow depth. '4' is standard (160+ usages). + * @prop longPress - Hold-to-confirm behavior with progress bar animation. + */ export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> { variant?: ButtonVariant size?: ButtonSize @@ -47,8 +54,6 @@ const buttonVariants: Record<ButtonVariant, string> = { stroke: 'btn-stroke', 'transparent-light': 'btn-transparent-light', 'transparent-dark': 'btn-transparent-dark', - green: 'bg-green-1', - yellow: 'bg-secondary-1', 'primary-soft': 'bg-white', transparent: 'bg-transparent border-none hover:bg-transparent !active:bg-transparent focus:bg-transparent disabled:bg-transparent disabled:hover:bg-transparent', @@ -57,9 +62,8 @@ const buttonVariants: Record<ButtonVariant, string> = { const buttonSizes: Record<ButtonSize, string> = { small: 'btn-small', medium: 'btn-medium', + /** @deprecated large (h-10) is shorter than default (h-13). Avoid for primary CTAs. */ large: 'btn-large', - xl: 'btn-xl', - 'xl-fixed': 'btn-xl-fixed', } const buttonShadows: Record<ShadowType, Record<ShadowSize, string>> = { @@ -104,12 +108,7 @@ export const Button = forwardRef<HTMLButtonElement, ButtonProps>( const buttonRef = (ref as React.RefObject<HTMLButtonElement>) || localRef const { triggerHaptic } = useHaptic() - - // Long press state - const [isLongPressed, setIsLongPressed] = useState(false) - const [pressTimer, setPressTimer] = useState<NodeJS.Timeout | null>(null) - const [pressProgress, setPressProgress] = useState(0) - const [progressInterval, setProgressInterval] = useState<NodeJS.Timeout | null>(null) + const { isLongPressed, pressProgress, handlers: longPressHandlers } = useLongPress(longPress) useEffect(() => { if (!buttonRef.current) return @@ -117,83 +116,9 @@ export const Button = forwardRef<HTMLButtonElement, ButtonProps>( buttonRef.current.classList.add('notranslate') }, []) - // Long press handlers - const handlePressStart = useCallback(() => { - if (!longPress) return - - longPress.onLongPressStart?.() - setPressProgress(0) - - const duration = longPress.duration || 2000 - const updateInterval = 16 // ~60fps - const increment = (100 / duration) * updateInterval - - // Progress animation - const progressTimer = setInterval(() => { - setPressProgress((prev) => { - const newProgress = prev + increment - if (newProgress >= 100) { - clearInterval(progressTimer) - return 100 - } - return newProgress - }) - }, updateInterval) - - setProgressInterval(progressTimer) - - // Long press completion timer - const timer = setTimeout(() => { - setIsLongPressed(true) - longPress.onLongPress?.() - clearInterval(progressTimer) - }, duration) - - setPressTimer(timer) - }, [longPress]) - - const handlePressEnd = useCallback(() => { - if (!longPress) return - - if (pressTimer) { - clearTimeout(pressTimer) - setPressTimer(null) - } - - if (progressInterval) { - clearInterval(progressInterval) - setProgressInterval(null) - } - - if (isLongPressed) { - longPress.onLongPressEnd?.() - setIsLongPressed(false) - } - - setPressProgress(0) - }, [longPress, pressTimer, progressInterval, isLongPressed]) - - const handlePressCancel = useCallback(() => { - if (!longPress) return - - if (pressTimer) { - clearTimeout(pressTimer) - setPressTimer(null) - } - - if (progressInterval) { - clearInterval(progressInterval) - setProgressInterval(null) - } - - setIsLongPressed(false) - setPressProgress(0) - }, [longPress, pressTimer, progressInterval]) - const handleClick = useCallback( (e: React.MouseEvent<HTMLButtonElement>) => { if (longPress && !isLongPressed) { - // If long press is enabled but not completed, don't trigger onClick return } @@ -203,21 +128,9 @@ export const Button = forwardRef<HTMLButtonElement, ButtonProps>( onClick?.(e) }, - [longPress, isLongPressed, onClick] + [longPress, isLongPressed, onClick, disableHaptics, triggerHaptic] ) - // Cleanup timers on unmount - useEffect(() => { - return () => { - if (pressTimer) { - clearTimeout(pressTimer) - } - if (progressInterval) { - clearInterval(progressInterval) - } - } - }, [pressTimer, progressInterval]) - const buttonClasses = twMerge( `btn w-full flex items-center gap-2 transition-all duration-100 active:translate-x-[3px] active:translate-y-[${shadowSize}px] active:shadow-none notranslate`, buttonVariants[variant], @@ -255,12 +168,12 @@ export const Button = forwardRef<HTMLButtonElement, ButtonProps>( ref={buttonRef} translate="no" onClick={handleClick} - onMouseDown={longPress ? handlePressStart : undefined} - onMouseUp={longPress ? handlePressEnd : undefined} - onMouseLeave={longPress ? handlePressCancel : undefined} - onTouchStart={longPress ? handlePressStart : undefined} - onTouchEnd={longPress ? handlePressEnd : undefined} - onTouchCancel={longPress ? handlePressCancel : undefined} + onMouseDown={longPress ? longPressHandlers.onMouseDown : undefined} + onMouseUp={longPress ? longPressHandlers.onMouseUp : undefined} + onMouseLeave={longPress ? longPressHandlers.onMouseLeave : undefined} + onTouchStart={longPress ? longPressHandlers.onTouchStart : undefined} + onTouchEnd={longPress ? longPressHandlers.onTouchEnd : undefined} + onTouchCancel={longPress ? longPressHandlers.onTouchCancel : undefined} {...props} > {/* Progress bar for long press */} diff --git a/src/components/0_Bruddle/Card.tsx b/src/components/0_Bruddle/Card.tsx index d42052e6b..c36bbe7bb 100644 --- a/src/components/0_Bruddle/Card.tsx +++ b/src/components/0_Bruddle/Card.tsx @@ -1,4 +1,3 @@ -import classNames from 'classnames' import { twMerge } from 'tailwind-merge' type ShadowSize = '4' | '6' | '8' @@ -59,7 +58,7 @@ const Description = ({ children, className, ...props }: React.HTMLAttributes<HTM ) const Content = ({ children, className, ...props }: React.HTMLAttributes<HTMLDivElement>) => ( - <div className={classNames('card-content', className)} {...props}> + <div className={twMerge('card-content', className)} {...props}> {children} </div> ) diff --git a/src/components/0_Bruddle/Checkbox.tsx b/src/components/0_Bruddle/Checkbox.tsx index 0f991cf3a..f38dda4f0 100644 --- a/src/components/0_Bruddle/Checkbox.tsx +++ b/src/components/0_Bruddle/Checkbox.tsx @@ -26,4 +26,7 @@ const Checkbox = ({ className, label, value, onChange }: CheckboxProps) => ( </label> ) +Checkbox.displayName = 'Checkbox' + +export { Checkbox } export default Checkbox diff --git a/src/components/0_Bruddle/CloudsBackground.tsx b/src/components/0_Bruddle/CloudsBackground.tsx index 1128351a9..58357a927 100644 --- a/src/components/0_Bruddle/CloudsBackground.tsx +++ b/src/components/0_Bruddle/CloudsBackground.tsx @@ -227,4 +227,7 @@ const CloudsBackground: React.FC<CloudsBackgroundProps> = ({ minimal = false }) ) } +CloudsBackground.displayName = 'CloudsBackground' + +export { CloudsBackground } export default CloudsBackground diff --git a/src/components/0_Bruddle/Divider.tsx b/src/components/0_Bruddle/Divider.tsx index dacc77f8b..508e8f108 100644 --- a/src/components/0_Bruddle/Divider.tsx +++ b/src/components/0_Bruddle/Divider.tsx @@ -16,4 +16,7 @@ const Divider = ({ text, className, dividerClassname, textClassname, ...props }: ) } +Divider.displayName = 'Divider' + +export { Divider } export default Divider diff --git a/src/components/0_Bruddle/PageContainer.tsx b/src/components/0_Bruddle/PageContainer.tsx index d35383e6a..60657d5b5 100644 --- a/src/components/0_Bruddle/PageContainer.tsx +++ b/src/components/0_Bruddle/PageContainer.tsx @@ -19,4 +19,7 @@ const PageContainer = (props: PageContainerProps) => { ) } +PageContainer.displayName = 'PageContainer' + +export { PageContainer } export default PageContainer diff --git a/src/components/0_Bruddle/Title.tsx b/src/components/0_Bruddle/Title.tsx index fd6a45067..9f5df1c13 100644 --- a/src/components/0_Bruddle/Title.tsx +++ b/src/components/0_Bruddle/Title.tsx @@ -18,4 +18,7 @@ const Title = ({ ) } +Title.displayName = 'Title' + +export { Title } export default Title diff --git a/src/components/AddMoney/UserDetailsForm.tsx b/src/components/AddMoney/UserDetailsForm.tsx index 01412bb3f..c9a585839 100644 --- a/src/components/AddMoney/UserDetailsForm.tsx +++ b/src/components/AddMoney/UserDetailsForm.tsx @@ -1,5 +1,5 @@ 'use client' -import { forwardRef, useEffect, useImperativeHandle, useState } from 'react' +import { forwardRef, useEffect, useImperativeHandle } from 'react' import { useForm, Controller } from 'react-hook-form' import BaseInput from '@/components/0_Bruddle/BaseInput' import ErrorAlert from '@/components/Global/ErrorAlert' @@ -18,8 +18,6 @@ interface UserDetailsFormProps { export const UserDetailsForm = forwardRef<{ handleSubmit: () => void }, UserDetailsFormProps>( ({ onSubmit, onValidChange, initialData }, ref) => { - const [submissionError, setSubmissionError] = useState<string | null>(null) - const { control, handleSubmit, @@ -36,13 +34,10 @@ export const UserDetailsForm = forwardRef<{ handleSubmit: () => void }, UserDeta onValidChange?.(isValid) }, [isValid, onValidChange]) + // Note: Submission errors are handled by the parent component useImperativeHandle(ref, () => ({ handleSubmit: handleSubmit(async (data) => { - setSubmissionError(null) - const result = await onSubmit(data) - if (result?.error) { - setSubmissionError(result.error) - } + await onSubmit(data) }), })) @@ -81,13 +76,6 @@ export const UserDetailsForm = forwardRef<{ handleSubmit: () => void }, UserDeta <form onSubmit={(e) => { e.preventDefault() - handleSubmit(async (data) => { - setSubmissionError(null) - const result = await onSubmit(data) - if (result?.error) { - setSubmissionError(result.error) - } - })() }} className="space-y-4" > @@ -101,7 +89,6 @@ export const UserDetailsForm = forwardRef<{ handleSubmit: () => void }, UserDeta }, })} </div> - {submissionError && <ErrorAlert description={submissionError} />} </form> </div> </div> diff --git a/src/components/AddMoney/components/AddMoneyBankDetails.tsx b/src/components/AddMoney/components/AddMoneyBankDetails.tsx index 58adcebd2..fe8631a4c 100644 --- a/src/components/AddMoney/components/AddMoneyBankDetails.tsx +++ b/src/components/AddMoney/components/AddMoneyBankDetails.tsx @@ -135,11 +135,12 @@ export default function AddMoneyBankDetails({ flow = 'add-money' }: IAddMoneyBan return formatCurrencyAmount(amount, onrampCurrency) }, [amount, onrampCurrency, flow]) + const isUk = currentCountryDetails?.id === 'GB' || currentCountryDetails?.iso3 === 'GBR' + const generateBankDetails = async () => { const formattedAmount = formattedCurrencyAmount const isMexico = currentCountryDetails?.id === 'MX' const isUs = currentCountryDetails?.id === 'US' - const isEuro = !isUs && !isMexico let bankDetails = `Bank Transfer Details: Amount: ${formattedAmount} @@ -152,7 +153,7 @@ Beneficiary Address: ${onrampData?.depositInstructions?.bankBeneficiaryAddress} ` } - if (isEuro || isMexico) { + if (!isUs && !isMexico && !isUk) { bankDetails += ` Account Holder Name: ${onrampData?.depositInstructions?.accountHolderName} ` @@ -161,11 +162,19 @@ Account Holder Name: ${onrampData?.depositInstructions?.accountHolderName} // for mexico, include clabe if (isMexico) { bankDetails += ` +Account Holder Name: ${onrampData?.depositInstructions?.accountHolderName} CLABE: ${onrampData?.depositInstructions?.clabe || 'Loading...'}` } - // only include bank address and account details for non-mexico countries - if (!isMexico) { + // uk faster payments + if (isUk) { + bankDetails += ` +Sort Code: ${onrampData?.depositInstructions?.sortCode || 'Loading...'} +Account Number: ${onrampData?.depositInstructions?.accountNumber || 'Loading...'}` + } + + // us and sepa countries + if (!isMexico && !isUk) { bankDetails += ` Bank Address: ${onrampData?.depositInstructions?.bankAddress || 'Loading...'}` @@ -297,45 +306,60 @@ Please use these details to complete your bank transfer.` allowCopy={!!onrampData?.depositInstructions?.clabe} hideBottomBorder /> + ) : isUk ? ( + <> + <PaymentInfoRow + label="Sort Code" + value={onrampData?.depositInstructions?.sortCode || 'N/A'} + allowCopy={!!onrampData?.depositInstructions?.sortCode} + hideBottomBorder + /> + <PaymentInfoRow + label="Account Number" + value={onrampData?.depositInstructions?.accountNumber || 'N/A'} + allowCopy={!!onrampData?.depositInstructions?.accountNumber} + hideBottomBorder + /> + </> ) : ( - <PaymentInfoRow - label={onrampData?.depositInstructions?.bankAccountNumber ? 'Account Number' : 'IBAN'} - value={ - onrampData?.depositInstructions?.bankAccountNumber || - (onrampData?.depositInstructions?.iban - ? formatBankAccountDisplay(onrampData.depositInstructions.iban, 'iban') - : null) || - 'N/A' - } - allowCopy={ - !!( + <> + <PaymentInfoRow + label={onrampData?.depositInstructions?.bankAccountNumber ? 'Account Number' : 'IBAN'} + value={ + onrampData?.depositInstructions?.bankAccountNumber || + (onrampData?.depositInstructions?.iban + ? formatBankAccountDisplay(onrampData.depositInstructions.iban, 'iban') + : null) || + 'N/A' + } + allowCopy={ + !!( + onrampData?.depositInstructions?.bankAccountNumber || + onrampData?.depositInstructions?.iban + ) + } + copyValue={ onrampData?.depositInstructions?.bankAccountNumber || onrampData?.depositInstructions?.iban - ) - } - copyValue={ - onrampData?.depositInstructions?.bankAccountNumber || - onrampData?.depositInstructions?.iban - } - hideBottomBorder - /> - )} - {currentCountryDetails?.id !== 'MX' && ( - <PaymentInfoRow - label={onrampData?.depositInstructions?.bankRoutingNumber ? 'Routing Number' : 'BIC'} - value={ - onrampData?.depositInstructions?.bankRoutingNumber || - onrampData?.depositInstructions?.bic || - 'N/A' - } - allowCopy={ - !!( + } + hideBottomBorder + /> + <PaymentInfoRow + label={onrampData?.depositInstructions?.bankRoutingNumber ? 'Routing Number' : 'BIC'} + value={ onrampData?.depositInstructions?.bankRoutingNumber || - onrampData?.depositInstructions?.bic - ) - } - hideBottomBorder - /> + onrampData?.depositInstructions?.bic || + 'N/A' + } + allowCopy={ + !!( + onrampData?.depositInstructions?.bankRoutingNumber || + onrampData?.depositInstructions?.bic + ) + } + hideBottomBorder + /> + </> )} {isNonUsdCurrency && ( <PaymentInfoRow diff --git a/src/components/AddMoney/components/MantecaDepositShareDetails.tsx b/src/components/AddMoney/components/MantecaDepositShareDetails.tsx index 6f1e2d4af..ab5323573 100644 --- a/src/components/AddMoney/components/MantecaDepositShareDetails.tsx +++ b/src/components/AddMoney/components/MantecaDepositShareDetails.tsx @@ -10,6 +10,7 @@ import { PaymentInfoRow } from '@/components/Payment/PaymentInfoRow' import { Icon } from '@/components/Global/Icons/Icon' import Image from 'next/image' import { Card } from '@/components/0_Bruddle/Card' +import InfoCard from '@/components/Global/InfoCard' import { MANTECA_ARG_DEPOSIT_CUIT, MANTECA_ARG_DEPOSIT_NAME, @@ -110,6 +111,12 @@ const MantecaDepositShareDetails = ({ </div> </div> </Card> + <InfoCard + variant="warning" + icon="alert" + title="Send only from your own account" + description="Deposits from third-party accounts are not supported and funds may be lost." + /> <h2 className="font-bold">Account details</h2> <Card className="space-y-0 rounded-sm px-4"> {depositAddress && ( diff --git a/src/components/AddMoney/consts/index.ts b/src/components/AddMoney/consts/index.ts index 2858c4019..b368d057e 100644 --- a/src/components/AddMoney/consts/index.ts +++ b/src/components/AddMoney/consts/index.ts @@ -2843,7 +2843,9 @@ export const NON_EUR_SEPA_ALPHA2 = new Set( !!c.iso3 && BRIDGE_ALPHA3_TO_ALPHA2[c.iso3] && // exclude usa explicitly; bridge map includes it but it's not sepa - c.iso3 !== 'USA' + c.iso3 !== 'USA' && + // exclude uk explicitly; uses faster payments, not sepa + c.iso3 !== 'GBR' ) .map((c) => ({ alpha2: BRIDGE_ALPHA3_TO_ALPHA2[c.iso3!], currency: c.currency })) .filter((x) => x.alpha2 && x.currency && x.currency !== 'EUR') diff --git a/src/components/AddWithdraw/AddWithdrawRouterView.tsx b/src/components/AddWithdraw/AddWithdrawRouterView.tsx index 649ebba9b..375479a18 100644 --- a/src/components/AddWithdraw/AddWithdrawRouterView.tsx +++ b/src/components/AddWithdraw/AddWithdrawRouterView.tsx @@ -98,6 +98,7 @@ export const AddWithdrawRouterView: FC<AddWithdrawRouterViewProps> = ({ acc.type === AccountType.IBAN || acc.type === AccountType.US || acc.type === AccountType.CLABE || + acc.type === AccountType.GB || acc.type === AccountType.MANTECA ) ?? [] diff --git a/src/components/AddWithdraw/DynamicBankAccountForm.tsx b/src/components/AddWithdraw/DynamicBankAccountForm.tsx index a2ffab55d..c94b48157 100644 --- a/src/components/AddWithdraw/DynamicBankAccountForm.tsx +++ b/src/components/AddWithdraw/DynamicBankAccountForm.tsx @@ -8,7 +8,13 @@ import BaseInput from '@/components/0_Bruddle/BaseInput' import BaseSelect from '@/components/0_Bruddle/BaseSelect' import { BRIDGE_ALPHA3_TO_ALPHA2, ALL_COUNTRIES_ALPHA3_TO_ALPHA2 } from '@/components/AddMoney/consts' import { useParams, useRouter } from 'next/navigation' -import { validateIban, validateBic, isValidRoutingNumber } from '@/utils/bridge-accounts.utils' +import { + validateIban, + validateBic, + isValidRoutingNumber, + isValidSortCode, + isValidUKAccountNumber, +} from '@/utils/bridge-accounts.utils' import ErrorAlert from '@/components/Global/ErrorAlert' import { getBicFromIban } from '@/app/actions/ibanToBic' import PeanutActionDetailsCard, { type PeanutActionDetailsCardProps } from '../Global/PeanutActionDetailsCard' @@ -35,6 +41,7 @@ export type IBankAccountDetails = { accountNumber: string bic: string routingNumber: string + sortCode: string // uk bank accounts clabe: string street: string city: string @@ -71,7 +78,8 @@ export const DynamicBankAccountForm = forwardRef<{ handleSubmit: () => void }, D ) => { const isMx = country.toUpperCase() === 'MX' const isUs = country.toUpperCase() === 'USA' - const isIban = isUs || isMx ? false : isIBANCountry(country) + const isUk = country.toUpperCase() === 'GB' || country.toUpperCase() === 'GBR' + const isIban = isUs || isMx || isUk ? false : isIBANCountry(country) const { user } = useAuth() const dispatch = useAppDispatch() const [isSubmitting, setIsSubmitting] = useState(false) @@ -107,6 +115,7 @@ export const DynamicBankAccountForm = forwardRef<{ handleSubmit: () => void }, D accountNumber: '', bic: '', routingNumber: '', + sortCode: '', // uk bank accounts clabe: '', street: '', city: '', @@ -162,12 +171,14 @@ export const DynamicBankAccountForm = forwardRef<{ handleSubmit: () => void }, D const isUs = country.toUpperCase() === 'USA' const isMx = country.toUpperCase() === 'MX' - const isIban = isUs || isMx ? false : isIBANCountry(country) + const isUk = country.toUpperCase() === 'GB' || country.toUpperCase() === 'GBR' + const isIban = isUs || isMx || isUk ? false : isIBANCountry(country) let accountType: BridgeAccountType if (isIban) accountType = BridgeAccountType.IBAN else if (isUs) accountType = BridgeAccountType.US else if (isMx) accountType = BridgeAccountType.CLABE + else if (isUk) accountType = BridgeAccountType.GB else throw new Error('Unsupported country') const accountNumber = isMx ? data.clabe : data.accountNumber @@ -193,9 +204,14 @@ export const DynamicBankAccountForm = forwardRef<{ handleSubmit: () => void }, D let bic = data.bic || getValues('bic') const iban = data.iban || getValues('iban') + // uk account numbers may be 6-7 digits, pad to 8 for bridge api + const cleanedAccountNumber = isUk + ? accountNumber.replace(/\s/g, '').padStart(8, '0') + : accountNumber.replace(/\s/g, '') + const payload: Partial<AddBankAccountPayload> = { accountType, - accountNumber: accountNumber.replace(/\s/g, ''), + accountNumber: cleanedAccountNumber, countryCode: isUs ? 'USA' : country.toUpperCase(), countryName: selectedCountry, accountOwnerType: BridgeAccountOwnerType.INDIVIDUAL, @@ -217,11 +233,16 @@ export const DynamicBankAccountForm = forwardRef<{ handleSubmit: () => void }, D payload.routingNumber = data.routingNumber } + if (isUk && data.sortCode) { + payload.sortCode = data.sortCode.replace(/[-\s]/g, '') + } + const result = await onSuccess(payload as AddBankAccountPayload, { ...data, iban: isIban ? data.accountNumber || iban || '' : '', accountNumber: isIban ? '' : data.accountNumber, bic: bic, + sortCode: isUk ? data.sortCode : '', country, firstName: firstName.trim(), lastName: lastName.trim(), @@ -458,16 +479,27 @@ export const DynamicBankAccountForm = forwardRef<{ handleSubmit: () => void }, D } } ) - : renderInput( - 'accountNumber', - 'Account Number', - { - required: 'Account number is required', - validate: async (value: string) => - validateUSBankAccount(value).isValid || 'Invalid account number', - }, - 'text' - )} + : isUk + ? renderInput( + 'accountNumber', + 'Account Number', + { + required: 'Account number is required', + validate: (value: string) => + isValidUKAccountNumber(value) || 'Account number must be 6-8 digits', + }, + 'text' + ) + : renderInput( + 'accountNumber', + 'Account Number', + { + required: 'Account number is required', + validate: async (value: string) => + validateUSBankAccount(value).isValid || 'Invalid account number', + }, + 'text' + )} {isIban && renderInput( @@ -503,8 +535,13 @@ export const DynamicBankAccountForm = forwardRef<{ handleSubmit: () => void }, D validate: async (value: string) => (await isValidRoutingNumber(value)) || 'Invalid routing number', })} + {isUk && + renderInput('sortCode', 'Sort Code', { + required: 'Sort code is required', + validate: (value: string) => isValidSortCode(value) || 'Sort code must be 6 digits', + })} - {!isIban && ( + {!isIban && !isUk && ( <> {renderInput( 'street', diff --git a/src/components/Auth/auth.e2e.test.ts b/src/components/Auth/auth.e2e.test.ts new file mode 100644 index 000000000..a80979f24 --- /dev/null +++ b/src/components/Auth/auth.e2e.test.ts @@ -0,0 +1,106 @@ +import { test, expect } from '@playwright/test' + +/** + * Authentication Flow E2E Tests + * + * Tests basic auth UI flows without actual wallet connections. + * Does NOT test MetaMask/WalletConnect popups (external dependencies). + * + * Focus: UI rendering, navigation, error states + */ + +test.describe('Auth UI Flow', () => { + test('should show auth options when not logged in', async ({ page }) => { + await page.goto('/') + + // look for common auth UI elements + // adjust selectors based on actual implementation + const authElements = [ + page.getByRole('button', { name: /connect|sign in|log in/i }), + page.locator('text=/wallet|authenticate/i'), + ] + + // Check if any auth element is visible + let foundAuthElement = false + for (const el of authElements) { + const visible = await el.isVisible().catch(() => false) + if (visible) { + foundAuthElement = true + break + } + } + + // If no auth UI visible, user might already be logged in or auth is elsewhere + // This is a soft assertion - real implementation varies + // We just log and don't fail since auth UI location varies by implementation + }) + + test('should open auth modal/drawer when connect clicked', async ({ page }) => { + await page.goto('/') + + // find and click connect button + const connectButton = page.getByRole('button', { name: /connect|sign in|log in/i }).first() + + if (await connectButton.isVisible()) { + await connectButton.click() + + // should show modal or drawer with wallet options + // look for common wallet names + await expect(page.locator('text=/metamask|walletconnect|coinbase|rainbow/i').first()).toBeVisible({ + timeout: 5000, + }) + } + }) + + test('should close auth modal when close button clicked', async ({ page }) => { + await page.goto('/') + + // open auth modal + const connectButton = page.getByRole('button', { name: /connect|sign in|log in/i }).first() + + if (await connectButton.isVisible()) { + await connectButton.click() + + // wait for modal to appear + await page.waitForSelector('text=/metamask|walletconnect/i', { timeout: 5000 }) + + // find and click close button + const closeButton = page.getByRole('button', { name: /close|cancel|×/i }).first() + + if (await closeButton.isVisible()) { + await closeButton.click() + + // modal should be closed + await expect(page.locator('text=/metamask|walletconnect/i').first()).not.toBeVisible() + } + } + }) +}) + +test.describe('Auth State Persistence', () => { + test('should maintain auth state across page navigation', async ({ page }) => { + // this test requires actual auth - skip for now + // real auth requires wallet connection which is external dependency + test.skip() + }) + + test('should handle auth state on page refresh', async ({ page }) => { + // skip - requires actual wallet connection + test.skip() + }) +}) + +test.describe('Protected Routes', () => { + test('should redirect unauthenticated users from protected routes', async ({ page }) => { + // try to access a protected route + // adjust route based on actual protected pages + await page.goto('/profile') + + // wait for client-side redirect to occur (useEffect-based auth redirect) + await page.waitForURL(/\/setup|\/home|^\/$/, { timeout: 10000 }) + + // verify user is NOT on the protected route + const url = page.url() + expect(url).not.toContain('/profile') + }) +}) diff --git a/src/components/Badges/badge.utils.ts b/src/components/Badges/badge.utils.ts index 65c82761f..58461b552 100644 --- a/src/components/Badges/badge.utils.ts +++ b/src/components/Badges/badge.utils.ts @@ -13,6 +13,7 @@ const CODE_TO_PATH: Record<string, string> = { BIGGEST_REQUEST_POT: '/badges/biggest_request_pot.svg', SEEDLING_DEVCONNECT_BA_2025: '/badges/seedlings_devconnect.svg', ARBIVERSE_DEVCONNECT_BA_2025: '/badges/arbiverse_devconnect.svg', + CARD_PIONEER: '/badges/peanut-pioneer.png', } // public-facing descriptions for badges (third-person perspective) @@ -28,6 +29,7 @@ const PUBLIC_DESCRIPTIONS: Record<string, string> = { BIGGEST_REQUEST_POT: 'High Roller or Master Beggar? They created the pot with the highest number of contributors.', SEEDLING_DEVCONNECT_BA_2025: 'Peanut Ambassador. They spread the word and brought others into the ecosystem.', ARBIVERSE_DEVCONNECT_BA_2025: 'Peanut 🤝 Arbiverse. They joined us at the amazing Arbiverse booth.', + CARD_PIONEER: 'A true Card Pioneer. Among the first to pay everywhere with Peanut.', } export function getBadgeIcon(code?: string) { diff --git a/src/components/Badges/index.tsx b/src/components/Badges/index.tsx index b97b044eb..b63dfa4f7 100644 --- a/src/components/Badges/index.tsx +++ b/src/components/Badges/index.tsx @@ -9,18 +9,25 @@ import { getCardPosition } from '../Global/Card/card.utils' import EmptyState from '../Global/EmptyStates/EmptyState' import { Icon } from '../Global/Icons/Icon' import ActionModal from '../Global/ActionModal' -import { useMemo, useState } from 'react' +import { useMemo, useState, useEffect } from 'react' import { useUserStore } from '@/redux/hooks' import { ActionListCard } from '../ActionListCard' +import { useAuth } from '@/context/authContext' type BadgeView = { title: string; description: string; logo: string | StaticImageData } export const Badges = () => { const router = useRouter() const { user: authUser } = useUserStore() + const { fetchUser } = useAuth() const [isBadgeModalOpen, setIsBadgeModalOpen] = useState(false) const [selectedBadge, setSelectedBadge] = useState<BadgeView | null>(null) + // TODO: fetchUser from context may not be memoized - could cause unnecessary re-renders + useEffect(() => { + fetchUser() + }, [fetchUser]) + // map api badges to view badges const badges: BadgeView[] = useMemo(() => { // get badges from user object and map to card fields diff --git a/src/components/Card/CardDetailsScreen.tsx b/src/components/Card/CardDetailsScreen.tsx new file mode 100644 index 000000000..42c556c52 --- /dev/null +++ b/src/components/Card/CardDetailsScreen.tsx @@ -0,0 +1,94 @@ +'use client' + +import { Button } from '@/components/0_Bruddle/Button' +import Card from '@/components/Global/Card' +import NavHeader from '@/components/Global/NavHeader' +import Image from 'next/image' +import chillPeanutAnim from '@/animations/GIF_ALPHA_BACKGORUND/512X512_ALPHA_GIF_konradurban_01.gif' + +interface CardDetailsScreenProps { + price: number + currentTier: number + onContinue: () => void + onBack: () => void +} + +const CardDetailsScreen = ({ price, currentTier, onContinue, onBack }: CardDetailsScreenProps) => { + const isDiscounted = currentTier >= 2 + const originalPrice = 10 + + return ( + <div className="flex min-h-[inherit] flex-col gap-8"> + <NavHeader title="How does it work?" onPrev={onBack} /> + + <div className="relative my-auto flex flex-col items-center gap-6"> + {/* Peanut mascot background - matches PaymentSuccessView sizing */} + <Image + src={chillPeanutAnim.src} + alt="" + width={20} + height={20} + className="absolute -top-32 left-1/2 -z-10 h-60 w-60 -translate-x-1/2" + /> + + {/* Steps */} + <div className="relative z-10 w-full space-y-0"> + <Card position="first" className="py-3"> + <p className="text-sm text-black"> + <span className="font-bold">1.</span> You deposit{' '} + {isDiscounted ? ( + <> + <span className="line-through">${originalPrice}</span>{' '} + <span className="font-bold text-purple-1">${price}</span> + </> + ) : ( + <span className="font-bold">${price}</span> + )}{' '} + now to reserve your card + {isDiscounted && ( + <span className="ml-1 text-xs text-purple-1">(because you're tier {currentTier})</span> + )} + </p> + </Card> + <Card position="middle" className="py-3"> + <p className="text-sm text-black"> + <span className="font-bold">2.</span> You'll be first to get your card on April 14th + </p> + </Card> + <Card position="middle" className="py-3"> + <p className="text-sm text-black"> + <span className="font-bold">3.</span> Once you get your Peanut Card, the ${price} becomes + your starter balance! + </p> + </Card> + <Card position="last" className="py-3"> + <p className="text-sm text-black"> + <span className="font-bold">4.</span> Invite people: you get rewarded for every person you + invite, now and forever. + </p> + </Card> + </div> + + {/* FAQ Link */} + <p className="text-sm"> + For full conditions,{' '} + <a + href="https://peanut.me/lp/card#faq" + target="_blank" + rel="noopener noreferrer" + className="text-black underline" + > + read the FAQ + </a> + </p> + + {/* CTA Button */} + <Button variant="purple" shadowSize="4" onClick={onContinue} className="w-full"> + Continue + </Button> + </div> + </div> + ) +} + +export default CardDetailsScreen diff --git a/src/components/Card/CardGeoScreen.tsx b/src/components/Card/CardGeoScreen.tsx new file mode 100644 index 000000000..5f177be90 --- /dev/null +++ b/src/components/Card/CardGeoScreen.tsx @@ -0,0 +1,155 @@ +'use client' + +import { Button } from '@/components/0_Bruddle/Button' +import NavHeader from '@/components/Global/NavHeader' +import { Icon } from '@/components/Global/Icons/Icon' +import Card from '@/components/Global/Card' +import InfoCard from '@/components/Global/InfoCard' +import { useRouter } from 'next/navigation' +import { saveRedirectUrl } from '@/utils/general.utils' + +interface CardGeoScreenProps { + isEligible: boolean + eligibilityReason?: string + onContinue: () => void + onInitiatePurchase: () => void + onBack: () => void + purchaseError?: string | null +} + +const CardGeoScreen = ({ + isEligible, + eligibilityReason, + onContinue, + onInitiatePurchase, + onBack, + purchaseError, +}: CardGeoScreenProps) => { + const router = useRouter() + + // State 3: KYC approved but couldn't fetch country - show warning but allow proceeding + const hasKycButNoCountry = !isEligible && eligibilityReason === 'KYC_APPROVED_NO_COUNTRY' + + // State 1 & 2: No KYC or KYC in progress - show verification prompt + // TODO: Replace string matching with structured eligibility codes from backend (e.g., NEEDS_KYC, KYC_IN_PROGRESS) + const needsKycVerification = + !isEligible && + !hasKycButNoCountry && + (eligibilityReason?.toLowerCase().includes('country information not available') || + eligibilityReason?.toLowerCase().includes('please complete kyc')) + + const handleStartVerification = () => { + saveRedirectUrl() + // TODO: Path says "europe" but Bridge covers all regions - consider renaming route or using generic path + router.push('/profile/identity-verification/europe/bridge') + } + + return ( + <div className="flex min-h-[inherit] flex-col gap-8"> + <NavHeader title="Eligibility" onPrev={onBack} /> + + <div className="my-auto flex flex-col gap-6"> + {isEligible ? ( + <> + {/* Eligible State */} + <Card className="flex flex-col items-center gap-4 p-6"> + <div className="flex size-8 items-center justify-center rounded-full bg-success-1"> + <Icon name="check" size={16} /> + </div> + <div className="text-center"> + <h2 className="font-bold">You're Eligible!</h2> + <p className="mt-2 text-sm text-black"> + Great news! Card Pioneers is available in your region. Continue to see how the + program works. + </p> + </div> + </Card> + </> + ) : hasKycButNoCountry ? ( + <> + {/* State 3: KYC approved but couldn't fetch country - show warning but allow proceeding */} + <Card className="flex flex-col items-center gap-4 p-6"> + <div className="flex size-8 items-center justify-center rounded-full bg-success-1"> + <Icon name="check" size={16} /> + </div> + <div className="text-center"> + <h2 className="font-bold">Verification Complete</h2> + <p className="mt-2 text-sm text-black"> + Your identity has been verified. You can proceed with your card reservation. + </p> + </div> + </Card> + + {/* Warning banner - country data not synced yet */} + <InfoCard + variant="warning" + icon="alert" + description="We're still syncing your location data. If you're in an eligible region, you'll be able to complete your purchase." + /> + </> + ) : needsKycVerification ? ( + <> + {/* Needs KYC Verification State */} + <Card className="flex flex-col items-center gap-4 p-6"> + <div className="flex size-8 items-center justify-center rounded-full bg-primary-1"> + <Icon name="shield" size={16} /> + </div> + <div className="text-center"> + <h1 className="font-bold">Verification Required</h1> + <p className="mt-2 text-sm text-black">Card Purchase requires identity verification.</p> + </div> + </Card> + + {/* <div className="flex items-center gap-2"> + <Icon name="info" className="size-4 flex-shrink-0" /> + <p className="text-sm">Verification helps us determine your region eligibility.</p> + </div> */} + </> + ) : ( + <> + {/* Not Eligible State */} + <Card className="flex flex-col items-center gap-4 p-6"> + <div className="flex size-8 items-center justify-center rounded-full bg-yellow-1"> + <Icon name="globe-lock" size={16} /> + </div> + <div className="text-center"> + <h1 className="font-bold">Not Available Yet</h1> + <p className="mt-2 text-sm text-black"> + Card Pioneers isn't available in your region yet. We're working hard to expand + coverage. + </p> + </div> + </Card> + + <div className="flex items-center gap-2"> + <Icon name="info" className="size-4 flex-shrink-0" /> + <p className="text-sm"> + We'll notify you when we launch in your area. In the meantime, keep using Peanut to earn + points! + </p> + </div> + </> + )} + + {purchaseError && <InfoCard variant="error" icon="alert" description={purchaseError} />} + + {/* CTA Buttons */} + {isEligible || hasKycButNoCountry ? ( + <Button variant="purple" shadowSize="4" onClick={onInitiatePurchase} className="w-full"> + Reserve my card + </Button> + ) : needsKycVerification ? ( + <Button variant="purple" shadowSize="4" onClick={handleStartVerification} className="w-full"> + Start Verification + </Button> + ) : ( + <Button variant="stroke" shadowSize="4" onClick={onBack} className="w-full"> + Go Back + </Button> + )} + </div> + </div> + ) +} + +export default CardGeoScreen diff --git a/src/components/Card/CardInfoScreen.tsx b/src/components/Card/CardInfoScreen.tsx new file mode 100644 index 000000000..07bfe5e93 --- /dev/null +++ b/src/components/Card/CardInfoScreen.tsx @@ -0,0 +1,189 @@ +'use client' + +import { Button } from '@/components/0_Bruddle/Button' +import NavHeader from '@/components/Global/NavHeader' +import PioneerCard3D from '@/components/LandingPage/PioneerCard3D' +import { useRouter } from 'next/navigation' +import { useEffect, useState, useRef } from 'react' + +interface CardInfoScreenProps { + onContinue: () => void + hasPurchased: boolean + slotsRemaining?: number + recentPurchases?: number +} + +// Rolling digit component - animates a single digit sliding down using CSS keyframes +const RollingDigit = ({ digit, duration = 400 }: { digit: string; duration?: number }) => { + const [currentDigit, setCurrentDigit] = useState(digit) + const [prevDigit, setPrevDigit] = useState<string | null>(null) + const [animationKey, setAnimationKey] = useState(0) + const prevDigitRef = useRef(digit) + + useEffect(() => { + if (digit !== prevDigitRef.current) { + setPrevDigit(prevDigitRef.current) + setCurrentDigit(digit) + setAnimationKey((k) => k + 1) + prevDigitRef.current = digit + + // Clear prevDigit after animation + const timer = setTimeout(() => { + setPrevDigit(null) + }, duration) + + return () => clearTimeout(timer) + } + }, [digit, duration]) + + const animationStyle = ` + @keyframes slideOut { + from { transform: translateY(0); opacity: 1; } + to { transform: translateY(-100%); opacity: 0; } + } + @keyframes slideIn { + from { transform: translateY(100%); opacity: 0; } + to { transform: translateY(0); opacity: 1; } + } + ` + + return ( + <span className="relative inline-block h-[1.2em] w-[0.65em] overflow-hidden"> + <style>{animationStyle}</style> + {/* Previous digit - slides out */} + {prevDigit !== null && ( + <span + key={`out-${animationKey}`} + className="absolute inset-0 flex items-center justify-center" + style={{ + animation: `slideOut ${duration}ms ease-out forwards`, + }} + > + {prevDigit} + </span> + )} + {/* Current digit - slides in (or static if no animation) */} + <span + key={`in-${animationKey}`} + className="absolute inset-0 flex items-center justify-center" + style={{ + animation: prevDigit !== null ? `slideIn ${duration}ms ease-out forwards` : 'none', + }} + > + {currentDigit} + </span> + </span> + ) +} + +// Rolling number display - splits number into digits and animates each +const RollingNumber = ({ value, duration = 400 }: { value: number; duration?: number }) => { + const digits = String(value).split('') + + return ( + <span className="inline-flex tabular-nums"> + {digits.map((digit, index) => ( + <RollingDigit key={`${digits.length}-${index}`} digit={digit} duration={duration} /> + ))} + </span> + ) +} + +const CardInfoScreen = ({ onContinue, hasPurchased, slotsRemaining, recentPurchases }: CardInfoScreenProps) => { + const router = useRouter() + const [displayValue, setDisplayValue] = useState<number | null>(null) + const timeoutRef = useRef<NodeJS.Timeout | null>(null) + const hasAnimated = useRef(false) + + // Realistic slot decrement: first tick after 4-12s, then every 15-40s + useEffect(() => { + if (slotsRemaining === undefined) return + + // Update display value on refetch without re-triggering the animation + if (hasAnimated.current) { + setDisplayValue(slotsRemaining) + return + } + + hasAnimated.current = true + setDisplayValue(slotsRemaining) + + const scheduleTick = (isFirst: boolean) => { + const delay = isFirst + ? 2000 + Math.random() * 3000 // 2-5 seconds for first tick + : 8000 + Math.random() * 12000 // 8-20 seconds for subsequent ticks + timeoutRef.current = setTimeout(() => { + setDisplayValue((prev) => { + if (prev === null || prev <= 1) return prev + return prev - 1 + }) + scheduleTick(false) + }, delay) + } + + scheduleTick(true) + + return () => { + if (timeoutRef.current) { + clearTimeout(timeoutRef.current) + } + } + }, [slotsRemaining]) + + return ( + <div className="flex min-h-[inherit] flex-col gap-8"> + <NavHeader title="Join Peanut Pioneers" onPrev={() => router.back()} /> + + <div className="my-auto flex flex-col gap-6"> + {/* Description and FAQ link */} + <div> + <p className="text-sm"> + Get access to the best card in the world. Spend globally at the best rates, and get rewarded for + every spend of you and your friends. + </p> + <a + href="https://peanut.to/card/faq" + target="_blank" + rel="noopener noreferrer" + className="mt-2 inline-block text-sm text-black underline" + > + Have a question? Read the FAQ + </a> + </div> + + {/* Card Hero with 3D effect */} + <div className="flex flex-1 flex-col items-center justify-center"> + <PioneerCard3D /> + </div> + + {/* Slots remaining counter */} + {displayValue !== null && ( + <div className="space-y-1 text-center"> + <div className="flex items-center justify-center text-2xl font-bold text-black dark:text-white"> + <RollingNumber value={displayValue} duration={350} /> + <span className="ml-1">slots left</span> + </div> + <p className="text-xs text-black"> + {recentPurchases && recentPurchases > 0 + ? `${recentPurchases} ${recentPurchases === 1 ? 'person' : 'people'} joined in the last 24h` + : 'Join the pioneers today'} + </p> + </div> + )} + + {/* CTA Button */} + {hasPurchased ? ( + <Button variant="purple" shadowSize="4" disabled className="w-full"> + Already a Pioneer + </Button> + ) : ( + <Button variant="purple" shadowSize="4" onClick={onContinue} className="w-full"> + Join Now + </Button> + )} + </div> + </div> + ) +} + +export default CardInfoScreen diff --git a/src/components/Card/CardPioneerModal.tsx b/src/components/Card/CardPioneerModal.tsx new file mode 100644 index 000000000..9e76f1952 --- /dev/null +++ b/src/components/Card/CardPioneerModal.tsx @@ -0,0 +1,94 @@ +'use client' + +import { useEffect, useState } from 'react' +import { useRouter } from 'next/navigation' +import { Button } from '@/components/0_Bruddle/Button' +import BaseModal from '@/components/Global/Modal' +import PioneerCard3D from '@/components/LandingPage/PioneerCard3D' + +const STORAGE_KEY = 'card-pioneer-modal-dismissed' +const DISMISS_DURATION_DAYS = 3 + +interface CardPioneerModalProps { + hasPurchased: boolean +} + +/** + * Popup modal shown to eligible users who haven't purchased Card Pioneer yet. + * Shown on app open, can be dismissed by closing the modal (re-shows after X days). + */ +const CardPioneerModal = ({ hasPurchased }: CardPioneerModalProps) => { + const router = useRouter() + const [isVisible, setIsVisible] = useState(false) + + // Check if modal should be shown + useEffect(() => { + // Don't show if already purchased + // Note: Eligibility check happens during the flow (geo screen), not here + if (hasPurchased) { + return + } + + // Check localStorage for dismissal + const dismissedAt = localStorage.getItem(STORAGE_KEY) + if (dismissedAt) { + const dismissedDate = new Date(dismissedAt) + const now = new Date() + const daysSinceDismissed = (now.getTime() - dismissedDate.getTime()) / (1000 * 60 * 60 * 24) + + if (daysSinceDismissed < DISMISS_DURATION_DAYS) { + return + } + } + + // Show modal with a small delay for better UX + const timer = setTimeout(() => { + setIsVisible(true) + }, 1000) + + return () => clearTimeout(timer) + }, [hasPurchased]) + + const handleDismiss = () => { + localStorage.setItem(STORAGE_KEY, new Date().toISOString()) + setIsVisible(false) + } + + const handleJoinNow = () => { + setIsVisible(false) + router.push('/card') + } + + return ( + <BaseModal + visible={isVisible} + onClose={handleDismiss} + className="items-center justify-center md:mx-auto md:max-w-md" + classWrap="sm:m-auto sm:self-center self-center m-4 bg-white rounded-none !border-0 z-50 max-w-[85%]" + > + <div className="flex flex-col items-center gap-4 p-6 text-center"> + {/* Title */} + <h3 className="text-base font-bold text-black dark:text-white">Become a Pioneer</h3> + + {/* Description */} + <p className="text-sm text-black dark:text-white"> + Join the Peanut Card Pioneers now to earn rewards for every purchase of you and your friends! + </p> + + {/* Card Hero - scaled down for popup */} + <div className="w-full max-w-[240px]"> + <PioneerCard3D /> + </div> + + {/* CTA */} + <div className="w-full space-y-4"> + <Button variant="purple" shadowSize="4" onClick={handleJoinNow} className="w-full"> + Get Early Access + </Button> + </div> + </div> + </BaseModal> + ) +} + +export default CardPioneerModal diff --git a/src/components/Card/CardPurchaseScreen.tsx b/src/components/Card/CardPurchaseScreen.tsx new file mode 100644 index 000000000..4c1b7f7ca --- /dev/null +++ b/src/components/Card/CardPurchaseScreen.tsx @@ -0,0 +1,216 @@ +'use client' + +import { useState, useEffect, useCallback, useRef } from 'react' +import { Button } from '@/components/0_Bruddle/Button' +import NavHeader from '@/components/Global/NavHeader' +import { Icon } from '@/components/Global/Icons/Icon' +import Card from '@/components/Global/Card' +import { cardApi, CardPurchaseError } from '@/services/card' +import Loading from '@/components/Global/Loading' + +interface CardPurchaseScreenProps { + price: number + existingChargeUuid?: string | null + existingPaymentUrl?: string | null + onPurchaseInitiated: (chargeUuid: string, paymentUrl: string) => void + onPurchaseComplete: () => void + onBack: () => void +} + +type PurchaseState = 'idle' | 'creating' | 'awaiting_payment' | 'error' + +const CardPurchaseScreen = ({ + price, + existingChargeUuid, + existingPaymentUrl, + onPurchaseInitiated, + onPurchaseComplete, + onBack, +}: CardPurchaseScreenProps) => { + const [purchaseState, setPurchaseState] = useState<PurchaseState>(existingChargeUuid ? 'awaiting_payment' : 'idle') + const [chargeUuid, setChargeUuid] = useState<string | null>(existingChargeUuid || null) + const [paymentUrl, setPaymentUrl] = useState<string | null>(existingPaymentUrl || null) + const [error, setError] = useState<string | null>(null) + + // Guard against double-submit race condition (React state updates are async, + // so rapid clicks could trigger multiple API calls before state updates) + const isInitiatingRef = useRef(false) + + // Initialize purchase with debounce guard + const initiatePurchase = useCallback(async () => { + if (isInitiatingRef.current) return + isInitiatingRef.current = true + + setPurchaseState('creating') + setError(null) + + try { + const response = await cardApi.purchase() + setChargeUuid(response.chargeUuid) + setPaymentUrl(response.paymentUrl) + onPurchaseInitiated(response.chargeUuid, response.paymentUrl) + setPurchaseState('awaiting_payment') + } catch (err) { + if (err instanceof CardPurchaseError) { + if (err.code === 'ALREADY_PURCHASED') { + // User already purchased, redirect to success + onPurchaseComplete() + return + } + setError(err.message) + } else { + setError('Failed to initiate purchase. Please try again.') + } + setPurchaseState('error') + } finally { + isInitiatingRef.current = false + } + }, [onPurchaseInitiated, onPurchaseComplete]) + + // Open payment URL in new tab + const openPaymentUrl = useCallback(() => { + if (paymentUrl) { + window.open(paymentUrl, '_blank', 'noopener,noreferrer') + } + }, [paymentUrl]) + + // Poll for payment completion with timeout + useEffect(() => { + if (purchaseState !== 'awaiting_payment' || !chargeUuid) return + + let attempts = 0 + const maxAttempts = 40 // 40 attempts * 3s = 2 minutes max + + const pollInterval = setInterval(async () => { + attempts++ + + // Check for timeout + if (attempts > maxAttempts) { + clearInterval(pollInterval) + setError('Payment verification timed out. Please check your transaction status.') + setPurchaseState('error') + return + } + + try { + const info = await cardApi.getInfo() + if (info.hasPurchased) { + clearInterval(pollInterval) + onPurchaseComplete() + } + } catch { + // Ignore polling errors - will retry on next interval + } + }, 3000) + + return () => clearInterval(pollInterval) + }, [purchaseState, chargeUuid, onPurchaseComplete]) + + return ( + <div className="flex min-h-[inherit] flex-col gap-6"> + <NavHeader title="Complete Purchase" onPrev={onBack} /> + + <div className="my-auto flex flex-col gap-6"> + {purchaseState === 'idle' && ( + <> + <Card className="flex flex-col items-center gap-4 p-6"> + <div className="flex size-16 items-center justify-center rounded-full bg-purple-1"> + <Icon name="wallet" size={32} /> + </div> + <div className="text-center"> + <h2 className="text-xl font-bold">Confirm Purchase</h2> + <p className="mt-2 text-sm text-black"> + You're about to reserve your Card Pioneer spot for ${price}. This amount will become + your starter balance when the card launches. + </p> + </div> + </Card> + + {/* Price Summary */} + <Card className="p-4"> + <div className="flex items-center justify-between"> + <span className="text-black">Pioneer Reservation</span> + <span className="text-xl font-bold">${price}</span> + </div> + </Card> + </> + )} + + {purchaseState === 'creating' && ( + <Card className="flex flex-col items-center gap-4 p-6"> + <Loading className="size-12" /> + <div className="text-center"> + <h2 className="text-xl font-bold">Creating Payment...</h2> + <p className="mt-2 text-sm text-black">Setting up your purchase. Please wait.</p> + </div> + </Card> + )} + + {purchaseState === 'awaiting_payment' && ( + <> + <Card className="flex flex-col items-center gap-4 p-6"> + <div className="flex size-16 items-center justify-center rounded-full bg-yellow-1"> + <Icon name="clock" size={32} /> + </div> + <div className="text-center"> + <h2 className="text-xl font-bold">Complete Payment</h2> + <p className="mt-2 text-sm text-black"> + Click below to open the payment page and complete your Pioneer reservation. + </p> + </div> + </Card> + + <Button + variant="stroke" + size="large" + icon="external-link" + onClick={openPaymentUrl} + className="w-full" + > + Open Payment Page + </Button> + + <div className="flex items-center justify-center gap-2 text-sm text-black"> + <Loading className="size-4" /> + <span>Waiting for payment confirmation...</span> + </div> + </> + )} + + {purchaseState === 'error' && ( + <Card className="flex flex-col items-center gap-4 p-6"> + <div className="flex size-16 items-center justify-center rounded-full bg-error-1"> + <Icon name="cancel" size={32} /> + </div> + <div className="text-center"> + <h2 className="text-xl font-bold">Something Went Wrong</h2> + <p className="mt-2 text-sm text-black"> + {error || 'An error occurred while processing your purchase.'} + </p> + </div> + </Card> + )} + + {/* CTA Buttons */} + {purchaseState === 'idle' && ( + <Button variant="purple" shadowSize="4" onClick={initiatePurchase} className="w-full"> + Pay ${price} + </Button> + )} + + {purchaseState === 'error' && ( + <div className="space-y-3"> + <Button variant="purple" shadowSize="4" onClick={initiatePurchase} className="w-full"> + Try Again + </Button> + <Button variant="stroke" onClick={onBack} className="w-full"> + Go Back + </Button> + </div> + )} + </div> + </div> + ) +} + +export default CardPurchaseScreen diff --git a/src/components/Card/CardSuccessScreen.tsx b/src/components/Card/CardSuccessScreen.tsx new file mode 100644 index 000000000..bf8c3bd3c --- /dev/null +++ b/src/components/Card/CardSuccessScreen.tsx @@ -0,0 +1,144 @@ +'use client' + +import { useEffect, useState } from 'react' +import { useRouter } from 'next/navigation' +import { Button } from '@/components/0_Bruddle/Button' +import Card from '@/components/Global/Card' +import { Icon } from '@/components/Global/Icons/Icon' +import InviteFriendsModal from '@/components/Global/InviteFriendsModal' +import { SoundPlayer } from '@/components/Global/SoundPlayer' +import { shootStarConfetti } from '@/utils/confetti' +import { useAuth } from '@/context/authContext' +import Image from 'next/image' +import chillPeanutAnim from '@/animations/GIF_ALPHA_BACKGORUND/512X512_ALPHA_GIF_konradurban_01.gif' + +interface CardSuccessScreenProps { + onViewBadges: () => void +} + +const CardSuccessScreen = ({ onViewBadges }: CardSuccessScreenProps) => { + const [showConfetti, setShowConfetti] = useState(false) + const [isInviteModalOpen, setIsInviteModalOpen] = useState(false) + const { user } = useAuth() + const router = useRouter() + + // Trigger star confetti on mount + useEffect(() => { + if (!showConfetti) { + setShowConfetti(true) + const duration = 2000 + const end = Date.now() + duration + let cancelled = false + + const frame = () => { + if (cancelled) return + + shootStarConfetti({ + particleCount: 20, + origin: { x: 0, y: 0.8 }, + spread: 55, + startVelocity: 30, + ticks: 100, + }) + shootStarConfetti({ + particleCount: 20, + origin: { x: 1, y: 0.8 }, + spread: 55, + startVelocity: 30, + ticks: 100, + }) + + if (Date.now() < end) { + requestAnimationFrame(frame) + } + } + frame() + + return () => { + cancelled = true + } + } + }, [showConfetti]) + + return ( + <> + <div className="flex min-h-[inherit] flex-col justify-between gap-8"> + <SoundPlayer sound="success" /> + + <div className="relative z-10 my-auto flex h-full flex-col justify-center space-y-4"> + {/* Peanut mascot background - matches PaymentSuccessView */} + <Image + src={chillPeanutAnim.src} + alt="Peanut Mascot" + width={20} + height={20} + className="absolute -top-32 left-1/2 -z-10 h-60 w-60 -translate-x-1/2" + /> + + {/* Success card */} + <Card className="flex items-center gap-3 p-4"> + <div className="flex h-12 w-12 min-w-12 items-center justify-center rounded-full bg-success-3 font-bold"> + <Icon name="check" size={24} /> + </div> + <div className="space-y-1"> + <h1 className="text-sm font-normal text-grey-1">You're a Pioneer!</h1> + <h2 className="text-lg font-extrabold">Card Reserved</h2> + </div> + </Card> + + {/* What you unlocked */} + <div className="space-y-0"> + <Card position="first" className="flex items-center gap-3 py-3"> + <div className="flex size-8 items-center justify-center rounded-full bg-purple-1"> + <Icon name="badge" size={16} /> + </div> + <span className="text-sm text-black">Pioneer badge added to your profile</span> + </Card> + <Card position="middle" className="flex items-center gap-3 py-3"> + <div className="flex size-8 items-center justify-center rounded-full bg-purple-1"> + <Icon name="bell" size={16} /> + </div> + <span className="text-sm text-black">Priority access during launch</span> + </Card> + <Card position="middle" className="flex items-center gap-3 py-3"> + <div className="flex size-8 items-center justify-center rounded-full bg-purple-1"> + <Icon name="gift" size={16} /> + </div> + <span className="text-sm text-black">$5 for every friend who joins</span> + </Card> + <Card position="last" className="flex items-center gap-3 py-3"> + <div className="flex size-8 items-center justify-center rounded-full bg-purple-1"> + <Icon name="dollar" size={16} /> + </div> + <span className="text-sm text-black">Earn forever on every purchase</span> + </Card> + </div> + + {/* CTAs */} + <div className="w-full space-y-3"> + <Button + variant="purple" + shadowSize="4" + onClick={() => setIsInviteModalOpen(true)} + className="w-full" + > + <Icon name="share" size={16} className="mr-2" /> + Share Invite Link + </Button> + <Button variant="stroke" onClick={onViewBadges} className="w-full"> + View Your Badges + </Button> + </div> + </div> + </div> + + <InviteFriendsModal + visible={isInviteModalOpen} + onClose={() => setIsInviteModalOpen(false)} + username={user?.user?.username ?? ''} + /> + </> + ) +} + +export default CardSuccessScreen diff --git a/src/components/Claim/Link/views/BankFlowManager.view.tsx b/src/components/Claim/Link/views/BankFlowManager.view.tsx index f19e1ccd5..2e6519249 100644 --- a/src/components/Claim/Link/views/BankFlowManager.view.tsx +++ b/src/components/Claim/Link/views/BankFlowManager.view.tsx @@ -286,7 +286,7 @@ export const BankFlowManager = (props: IClaimScreenProps) => { ? addBankAccountResponse.data.identifier || '' : '', accountNumber: - addBankAccountResponse.data.type === 'us' + addBankAccountResponse.data.type === 'us' || addBankAccountResponse.data.type === 'gb' ? addBankAccountResponse.data.identifier || '' : '', country: addBankAccountResponse.data.details.countryCode, @@ -294,6 +294,7 @@ export const BankFlowManager = (props: IClaimScreenProps) => { bridgeAccountId: addBankAccountResponse.data.bridgeAccountId, bic: addBankAccountResponse.data.bic ?? '', routingNumber: addBankAccountResponse.data.routingNumber ?? '', + sortCode: addBankAccountResponse.data.sortCode ?? '', firstName: addBankAccountResponse.data.firstName || rawData.firstName, lastName: addBankAccountResponse.data.lastName || rawData.lastName, email: user?.user.email ?? '', @@ -365,6 +366,7 @@ export const BankFlowManager = (props: IClaimScreenProps) => { accountNumber: externalAccountResponse.account_number ?? rawData.accountNumber, bic: externalAccountResponse?.iban?.bic ?? rawData.bic, routingNumber: externalAccountResponse?.account?.routing_number ?? rawData.routingNumber, + sortCode: externalAccountResponse?.account?.sort_code ?? rawData.sortCode ?? '', clabe: externalAccountResponse?.clabe?.account_number ?? rawData.clabe, street: externalAccountResponse?.address?.street_line_1 ?? rawData.street, city: externalAccountResponse?.address?.city ?? rawData.city, @@ -420,12 +422,14 @@ export const BankFlowManager = (props: IClaimScreenProps) => { name: account.details.accountOwnerName || user?.user.fullName || '', iban: account.type === 'iban' ? account.identifier || '' : '', clabe: account.type === 'clabe' ? account.identifier || '' : '', - accountNumber: account.type === 'us' ? account.identifier || '' : '', + accountNumber: + account.type === 'us' || account.type === 'gb' ? account.identifier || '' : '', country: account.details.countryCode, id: account.id, bridgeAccountId: account.bridgeAccountId, bic: account.bic ?? '', routingNumber: account.routingNumber ?? '', + sortCode: account.sortCode ?? '', firstName: firstName, lastName: lastName, email: user?.user.email ?? '', diff --git a/src/components/Common/PointsCard.tsx b/src/components/Common/PointsCard.tsx index 5a39115cd..36b395260 100644 --- a/src/components/Common/PointsCard.tsx +++ b/src/components/Common/PointsCard.tsx @@ -1,12 +1,13 @@ import Card from '../Global/Card' import InvitesIcon from '../Home/InvitesIcon' +import { formatPoints } from '@/utils/format.utils' const PointsCard = ({ points, pointsDivRef }: { points: number; pointsDivRef: React.RefObject<HTMLDivElement> }) => { return ( <Card ref={pointsDivRef} className="flex flex-row items-center justify-center gap-3 p-3"> <InvitesIcon /> <p className="text-sm font-medium text-black"> - You've earned {points} {points === 1 ? 'point' : 'points'}! + You've earned {formatPoints(points)} {points === 1 ? 'point' : 'points'}! </p> </Card> ) diff --git a/src/components/Global/AnimateOnView.tsx b/src/components/Global/AnimateOnView.tsx new file mode 100644 index 000000000..64f07753b --- /dev/null +++ b/src/components/Global/AnimateOnView.tsx @@ -0,0 +1,52 @@ +'use client' + +import { useRef, useEffect, type CSSProperties } from 'react' + +type AnimateOnViewProps = { + children: React.ReactNode + className?: string + delay?: string + y?: string + x?: string + rotate?: string + style?: CSSProperties +} & React.HTMLAttributes<HTMLElement> + +export function AnimateOnView({ children, className, delay, y, x, rotate, style, ...rest }: AnimateOnViewProps) { + const ref = useRef<HTMLDivElement>(null) + + useEffect(() => { + const el = ref.current + if (!el) return + const observer = new IntersectionObserver( + ([entry]) => { + if (entry.isIntersecting) { + el.classList.add('in-view') + observer.disconnect() + } + }, + { threshold: 0.1 } + ) + observer.observe(el) + return () => observer.disconnect() + }, []) + + return ( + <div + ref={ref} + className={`animate-on-view ${className || ''}`} + style={ + { + '--aov-delay': delay || '0s', + '--aov-y': y || '20px', + '--aov-x': x || '0px', + '--aov-rotate': rotate || '0deg', + ...style, + } as CSSProperties + } + {...rest} + > + {children} + </div> + ) +} diff --git a/src/components/Global/BackendErrorScreen/index.tsx b/src/components/Global/BackendErrorScreen/index.tsx new file mode 100644 index 000000000..12ad64952 --- /dev/null +++ b/src/components/Global/BackendErrorScreen/index.tsx @@ -0,0 +1,103 @@ +'use client' + +import { useAuth } from '@/context/authContext' +import { Button } from '@/components/0_Bruddle/Button' + +// inline peanut icon svg to ensure it works without needing to fetch external assets +const PeanutIcon = ({ className }: { className?: string }) => ( + <svg + xmlns="http://www.w3.org/2000/svg" + viewBox="0 0 291 389" + fill="none" + aria-label="Peanut Logo" + className={className} + > + {/* peanut shape */} + <path + d="M60.3258 45.632C64.7897 43.0841 70.8696 42.4485 77.6753 42.1648L77.6751 42.1639C86.6738 41.7919 95.9563 42.9122 105.073 44.8494C131.211 50.4032 159.276 64.4612 173.241 88.947L173.241 88.948C182.385 105.004 187.299 122.974 187.679 140.59L187.68 140.615L187.681 140.639C188.214 158.799 197.656 175.377 213.007 185.103L213.027 185.115L213.048 185.129C227.987 194.435 240.944 207.825 250.088 223.88L250.089 223.881C264.205 248.652 262.114 279.714 253.648 304.817C253.251 305.963 252.866 307.057 252.469 308.126L252.46 308.151L252.45 308.178C252.436 308.216 252.422 308.255 252.408 308.294C252.395 308.33 252.381 308.367 252.367 308.403C246.631 323.792 238.741 335.81 232.382 341.201C232.326 341.246 232.276 341.285 232.239 341.315C232.158 341.378 232.121 341.409 232.087 341.434L232.052 341.462L232.017 341.489C231.506 341.893 231.256 342.093 231.002 342.275C230.703 342.487 230.41 342.68 230.129 342.856L229.759 343.068C226.058 345.176 218.929 346.766 209.112 346.794C199.522 346.822 188.125 345.356 176.457 342.08C153.35 335.592 130.193 322.32 117.448 300.794L116.849 299.762C107.705 283.706 102.79 265.736 102.41 248.12L102.409 248.096L102.409 248.072C101.876 229.912 92.433 213.335 77.0818 203.609L77.0617 203.595L77.0418 203.583L75.6472 202.699C61.7596 193.736 49.6638 181.222 40.8698 166.328L40.0013 164.831L39.4191 163.79C27.402 141.848 27.7929 115.163 33.9934 91.9808C37.1244 80.275 41.6741 69.7248 46.5873 61.491C51.6171 53.0618 56.6207 47.7423 60.3214 45.6342L60.3258 45.632Z" + fill="#FFC900" + stroke="black" + strokeWidth="12.6195" + /> + + {/* eye lines */} + <path d="M106.78 163.414L112.666 153.471" stroke="black" strokeWidth="8.41298" strokeLinecap="round" /> + + {/* left eye */} + <path + d="M85.1709 145.907C98.5727 145.757 109.316 134.772 109.167 121.37C109.017 107.968 98.0318 97.2252 84.63 97.3746C71.2282 97.524 60.485 108.509 60.6344 121.911C60.7838 135.313 71.7691 146.056 85.1709 145.907Z" + fill="white" + stroke="black" + strokeWidth="8.41298" + /> + + {/* right eye */} + <path + d="M127.511 122.531C140.913 122.382 151.656 111.396 151.507 97.9945C151.357 84.5927 140.372 73.8495 126.97 73.9989C113.569 74.1482 102.825 85.1336 102.975 98.5354C103.124 111.937 114.109 122.68 127.511 122.531Z" + fill="white" + stroke="black" + strokeWidth="8.41298" + /> + + {/* right pupil */} + <path + d="M124.817 75.0371C119.025 82.8635 118.786 93.8654 124.943 102.046C130.198 109.028 138.726 112.102 146.794 110.725C152.587 102.898 152.825 91.8966 146.669 83.7158C141.413 76.7341 132.886 73.66 124.817 75.0371Z" + fill="black" + /> + + {/* left pupil */} + <path + d="M83.7629 98.3403C78.1936 106.086 78.0308 116.853 84.0684 124.879C89.0469 131.494 96.9795 134.564 104.643 133.65C110.213 125.904 110.376 115.137 104.338 107.111C99.3594 100.497 91.4268 97.426 83.7629 98.3403Z" + fill="black" + /> + + {/* smile */} + <path + d="M114.128 159.598C119.673 161.038 126.095 160.674 131.417 158.723C136.777 156.752 143.396 151.325 146.285 146.32" + stroke="black" + strokeWidth="8.41298" + strokeLinecap="round" + /> + </svg> +) + +/** + * full-page error screen shown when backend requests fail after retries + * displays peanut logo and options to retry or log out + */ +export default function BackendErrorScreen() { + const { logoutUser, isLoggingOut } = useAuth() + + const handleRetry = () => { + window.location.reload() + } + + const handleForceLogout = () => { + // Use skipBackendCall since backend is likely down (that's why we're on this screen) + logoutUser({ skipBackendCall: true }) + } + + return ( + <div className="flex h-[100dvh] w-full flex-col items-center justify-center gap-6 bg-background p-6"> + <div className="h-32 w-32 opacity-50 grayscale"> + <PeanutIcon className="h-full w-full" /> + </div> + <div className="flex flex-col items-center gap-2 text-center"> + <h1 className="text-2xl font-bold text-gray-800">Something went wrong</h1> + <p className="max-w-md text-sm text-gray-600">We're having trouble connecting to our servers.</p> + </div> + <div className="flex flex-col items-center gap-6"> + <Button shadowSize="4" icon="retry" size="medium" className="w-fit rounded-full" onClick={handleRetry}> + Try Again + </Button> + <button + onClick={handleForceLogout} + disabled={isLoggingOut} + className="text-sm text-gray-600 underline hover:text-gray-800 disabled:opacity-50" + > + {isLoggingOut ? 'Logging out...' : 'Log out'} + </button> + </div> + </div> + ) +} diff --git a/src/components/Global/Banner/index.tsx b/src/components/Global/Banner/index.tsx index 1204c9b1e..0330cac21 100644 --- a/src/components/Global/Banner/index.tsx +++ b/src/components/Global/Banner/index.tsx @@ -18,8 +18,9 @@ export function Banner() { return <MaintenanceBanner /> } - // don't show beta feedback banner on landing page, setup page, or quests pages - if (pathname === '/' || pathname === '/setup' || pathname.startsWith('/quests')) return null + // don't show beta feedback banner on landing pages, setup page, or quests pages + if (pathname === '/' || pathname === '/setup' || pathname.startsWith('/quests') || pathname.startsWith('/lp')) + return null // show beta feedback banner when not in maintenance return <FeedbackBanner /> diff --git a/src/components/Global/FAQs/index.tsx b/src/components/Global/FAQs/index.tsx index de73f8c00..406353b48 100644 --- a/src/components/Global/FAQs/index.tsx +++ b/src/components/Global/FAQs/index.tsx @@ -53,7 +53,7 @@ export function FAQsPanel({ heading, questions }: FAQsProps) { return ( <div className="w-full overflow-x-hidden bg-background"> - <div className="relative px-6 py-20 md:px-8 md:py-36"> + <div className="relative px-6 py-12 md:px-8 md:py-16"> <motion.div initial={{ opacity: 0, translateY: 20 }} animate={{ opacity: 1, translateY: 0 }} diff --git a/src/components/Global/FooterVisibilityObserver.tsx b/src/components/Global/FooterVisibilityObserver.tsx new file mode 100644 index 000000000..bda7d96ad --- /dev/null +++ b/src/components/Global/FooterVisibilityObserver.tsx @@ -0,0 +1,31 @@ +'use client' + +import { useFooterVisibility } from '@/context/footerVisibility' +import { useEffect, useRef } from 'react' + +export function FooterVisibilityObserver() { + const footerRef = useRef<HTMLDivElement>(null) + const { setIsFooterVisible } = useFooterVisibility() + + useEffect(() => { + const el = footerRef.current + if (!el) return + + const observer = new IntersectionObserver( + (entries) => { + entries.forEach((entry) => { + setIsFooterVisible(entry.isIntersecting) + }) + }, + { root: null, rootMargin: '0px', threshold: 0.1 } + ) + + observer.observe(el) + + return () => { + observer.unobserve(el) + } + }, [setIsFooterVisible]) + + return <div ref={footerRef} /> +} diff --git a/src/components/Global/Icons/Icon.tsx b/src/components/Global/Icons/Icon.tsx index 4128a277d..faf8bafb9 100644 --- a/src/components/Global/Icons/Icon.tsx +++ b/src/components/Global/Icons/Icon.tsx @@ -18,6 +18,7 @@ import { CurrencyExchangeRounded, LocalOfferOutlined, CardGiftcardRounded, + CreditCardRounded, HomeRounded, SearchRounded, AccountBalanceWalletRounded, @@ -150,6 +151,7 @@ export type IconName = | 'upload-cloud' | 'alert-filled' | 'paste' + | 'credit-card' export interface IconProps extends SVGProps<SVGSVGElement> { name: IconName size?: number | string @@ -290,6 +292,7 @@ const iconComponents: Record<IconName, ComponentType<SVGProps<SVGSVGElement>>> = 'invite-heart': InviteHeartIcon, 'alert-filled': (props) => <MaterialIconWrapper Icon={WarningRounded} {...props} />, paste: (props) => <MaterialIconWrapper Icon={ContentPasteRounded} {...props} />, + 'credit-card': (props) => <MaterialIconWrapper Icon={CreditCardRounded} {...props} />, } export const Icon: FC<IconProps> = ({ name, size = 24, width, height, ...props }) => { diff --git a/src/components/Global/InviteFriendsModal/index.tsx b/src/components/Global/InviteFriendsModal/index.tsx new file mode 100644 index 000000000..85c45468c --- /dev/null +++ b/src/components/Global/InviteFriendsModal/index.tsx @@ -0,0 +1,63 @@ +'use client' + +import ActionModal from '@/components/Global/ActionModal' +import Card from '@/components/Global/Card' +import CopyToClipboard from '@/components/Global/CopyToClipboard' +import ShareButton from '@/components/Global/ShareButton' +import { generateInviteCodeLink, generateInvitesShareText } from '@/utils/general.utils' +import QRCode from 'react-qr-code' + +interface InviteFriendsModalProps { + visible: boolean + onClose: () => void + username: string +} + +/** + * Shared modal for inviting friends to Peanut. + * Shows QR code, invite code, and share button. + * + * Used in: CardSuccessScreen, Profile, PointsPage + */ +export default function InviteFriendsModal({ visible, onClose, username }: InviteFriendsModalProps) { + const { inviteCode, inviteLink } = generateInviteCodeLink(username) + + return ( + <ActionModal + visible={visible} + onClose={onClose} + title="Invite friends!" + description="Invite friends to Peanut and help them skip ahead on the waitlist. Once they're onboarded and start using the app, you'll earn rewards from their activity too." + icon="user-plus" + content={ + <> + {inviteLink && ( + <div className="my-2 size-44"> + <QRCode + value={inviteLink} + size={120} + style={{ height: 'auto', maxWidth: '100%', width: '100%' }} + viewBox="0 0 120 120" + level="H" + /> + </div> + )} + <div className="flex w-full items-center justify-between gap-3"> + <Card className="flex items-center justify-between py-2"> + <p className="overflow-hidden text-ellipsis whitespace-nowrap text-sm font-bold"> + {inviteCode} + </p> + <CopyToClipboard textToCopy={inviteCode} iconSize="4" /> + </Card> + </div> + <ShareButton + generateText={() => Promise.resolve(generateInvitesShareText(inviteLink))} + title="Share your invite link" + > + Share Invite Link + </ShareButton> + </> + } + /> + ) +} diff --git a/src/components/Global/InvitesGraph/index.tsx b/src/components/Global/InvitesGraph/index.tsx index 736d19e51..60dfddc9c 100644 --- a/src/components/Global/InvitesGraph/index.tsx +++ b/src/components/Global/InvitesGraph/index.tsx @@ -184,7 +184,7 @@ export default function InvitesGraph(props: InvitesGraphProps) { const { width, height, - backgroundColor = '#f9fafb', + backgroundColor = '#FAF4F0', showUsernames: initialShowUsernames = true, topNodes: initialTopNodes = DEFAULT_TOP_NODES, activityFilter: initialActivityFilter = DEFAULT_ACTIVITY_FILTER, @@ -253,6 +253,12 @@ export default function InvitesGraph(props: InvitesGraphProps) { // topNodes: limit to top N by points (0 = all). Backend-filtered, triggers refetch. const [topNodes, setTopNodes] = useState(initialTopNodes) + // Particle arrival popups for user mode (+1 pt animations) + // Map: linkId → { timestamp, x, y, nodeId } + const particleArrivalsRef = useRef<Map<string, { timestamp: number; x: number; y: number; nodeId: string }>>( + new Map() + ) + // Use passed data in minimal mode, fetched data otherwise // Note: topNodes filtering is now done by backend, no client-side pruning needed // Performance mode: frontend filter to top 1000 without refetch @@ -564,6 +570,17 @@ export default function InvitesGraph(props: InvitesGraphProps) { return map }, [filteredGraphData]) + // Build set of inviter node IDs (nodes that have outgoing invite edges) + // Used in minimal/user mode to show heart icon next to inviter usernames + const inviterNodes = useMemo(() => { + if (!filteredGraphData) return new Set<string>() + const set = new Set<string>() + filteredGraphData.edges.forEach((edge) => { + set.add(edge.source) // source = inviter + }) + return set + }, [filteredGraphData]) + // Build set of node IDs that participate in P2P (for payment mode coloring) // A node is "P2P active" if it's the source or target of any P2P edge const p2pActiveNodes = useMemo(() => { @@ -893,6 +910,7 @@ export default function InvitesGraph(props: InvitesGraphProps) { visibilityConfig, externalNodesConfig, p2pActiveNodes, + inviterNodes, }) useEffect(() => { displaySettingsRef.current = { @@ -904,6 +922,7 @@ export default function InvitesGraph(props: InvitesGraphProps) { visibilityConfig, externalNodesConfig, p2pActiveNodes, + inviterNodes, } }, [ showUsernames, @@ -914,6 +933,7 @@ export default function InvitesGraph(props: InvitesGraphProps) { visibilityConfig, externalNodesConfig, p2pActiveNodes, + inviterNodes, ]) // Helper to determine user activity status @@ -967,11 +987,11 @@ export default function InvitesGraph(props: InvitesGraphProps) { // Colors by type const colors: Record<string, string> = { - WALLET: '#f59e0b', // Orange/amber - BANK: '#3b82f6', // Blue - MERCHANT: '#10b981', // Green/emerald + WALLET: '#FFC900', // secondary-1 (yellow) + BANK: '#90A8ED', // secondary-3 (blue) + MERCHANT: '#BA8BFF', // primary-4 (purple) } - const fillColor = colors[node.externalType] || '#6b7280' + const fillColor = colors[node.externalType] || '#9CA3AF' ctx.globalAlpha = 0.8 ctx.fillStyle = fillColor @@ -1063,23 +1083,23 @@ export default function InvitesGraph(props: InvitesGraphProps) { const { p2pActiveNodes: p2pNodes } = displaySettingsRef.current if (currentMode === 'user') { - // User mode: all nodes same pleasant purple - fillColor = 'rgba(139, 92, 246, 0.9)' // Solid purple for all + // User mode: all nodes same pink (primary-1 #FF90E8), fully opaque + fillColor = 'rgb(255, 144, 232)' // primary-1 } else if (currentMode === 'payment') { // Payment mode: color by P2P participation (sending or receiving) const hasP2PActivity = p2pNodes.has(node.id) fillColor = hasP2PActivity - ? 'rgba(139, 92, 246, 0.85)' // Purple for P2P active + ? 'rgba(255, 144, 232, 0.85)' // primary-1 for P2P active : 'rgba(156, 163, 175, 0.5)' // Grey for no P2P } else if (!filter.enabled) { // No filter - simple active/inactive by access - fillColor = hasAccess ? 'rgba(139, 92, 246, 0.85)' : 'rgba(156, 163, 175, 0.85)' + fillColor = hasAccess ? 'rgba(255, 144, 232, 0.85)' : 'rgba(156, 163, 175, 0.85)' } else { // Activity filter enabled - three states if (activityStatus === 'new') { - fillColor = 'rgba(16, 185, 129, 0.85)' // Green for new signups + fillColor = 'rgba(144, 168, 237, 0.85)' // secondary-3 #90A8ED for new signups } else if (activityStatus === 'active') { - fillColor = 'rgba(139, 92, 246, 0.85)' // Purple for active + fillColor = 'rgba(255, 144, 232, 0.85)' // primary-1 for active } else { // Inactive - exponential time bands with distinct shades const now = Date.now() @@ -1120,7 +1140,7 @@ export default function InvitesGraph(props: InvitesGraphProps) { ctx.globalAlpha = 1 if (isSelected) { // Selected: golden outline - ctx.strokeStyle = '#fbbf24' + ctx.strokeStyle = '#FFC900' ctx.lineWidth = 3 ctx.stroke() } else if (!hasAccess) { @@ -1136,11 +1156,76 @@ export default function InvitesGraph(props: InvitesGraphProps) { if (showNames && (minimal || globalScale > 1.2)) { const label = node.username const fontSize = minimal ? 4 : 12 / globalScale + const { inviterNodes: inviterNodesSet } = displaySettingsRef.current + const isInviter = inviterNodesSet && inviterNodesSet.has(node.id) + ctx.font = `600 ${fontSize}px Inter, system-ui, -apple-system, sans-serif` ctx.textAlign = 'center' ctx.textBaseline = 'middle' ctx.fillStyle = activityStatus === 'inactive' && filter.enabled ? 'rgba(17, 24, 39, 0.3)' : '#111827' - ctx.fillText(label, node.x, node.y + size + fontSize + 2) + + const labelY = node.y + size + fontSize + 2 + + // Render username + ctx.fillText(label, node.x, labelY) + + // Add heart icon for inviters in minimal/user mode + if (minimal && isInviter) { + // Measure text to position heart after it + const textWidth = ctx.measureText(label).width + const heartX = node.x + textWidth / 2 + fontSize * 0.6 + const heartY = labelY + const heartSize = fontSize * 0.7 + + // Draw simple heart shape (pink/magenta) + ctx.save() + ctx.fillStyle = '#FF90E8' + ctx.beginPath() + // Heart shape using two circles and a triangle + const topY = heartY - heartSize * 0.3 + ctx.arc(heartX - heartSize * 0.25, topY, heartSize * 0.3, 0, Math.PI, true) + ctx.arc(heartX + heartSize * 0.25, topY, heartSize * 0.3, 0, Math.PI, true) + ctx.lineTo(heartX + heartSize * 0.5, topY) + ctx.lineTo(heartX, heartY + heartSize * 0.3) + ctx.lineTo(heartX - heartSize * 0.5, topY) + ctx.closePath() + ctx.fill() + ctx.restore() + } + } + + // Render "+1" popups for particle arrivals in user mode + // currentMode is already defined above, reuse it + if (currentMode === 'user' && minimal) { + const now = performance.now() + const popupDuration = 1500 // 1.5 seconds + const arrivals = particleArrivalsRef.current + + // Clean up old arrivals and render active ones + const toDelete: string[] = [] + arrivals.forEach((arrival, linkId) => { + const age = now - arrival.timestamp + if (age > popupDuration) { + toDelete.push(linkId) + } else { + // Render popup with fade-out - start from node center, rise up + const progress = age / popupDuration + const alpha = 1 - progress + const yOffset = -progress * 15 // Rise up 15px from node center + + ctx.save() + ctx.globalAlpha = alpha + ctx.font = 'bold 5px Inter, system-ui, -apple-system, sans-serif' + ctx.fillStyle = '#fbbf24' // Gold color + ctx.textAlign = 'center' + ctx.textBaseline = 'middle' + ctx.fillText('+1 point', arrival.x, arrival.y + yOffset) + ctx.restore() + } + }) + + // Clean up expired arrivals + toDelete.forEach((linkId) => arrivals.delete(linkId)) } }, [getUserActivityStatus] @@ -1211,14 +1296,14 @@ export default function InvitesGraph(props: InvitesGraphProps) { // Get target node type for color const extType = target.externalType || 'WALLET' const lineColors: Record<string, string> = { - WALLET: 'rgba(245, 158, 11, 0.25)', // Orange - BANK: 'rgba(59, 130, 246, 0.25)', // Blue - MERCHANT: 'rgba(16, 185, 129, 0.25)', // Green + WALLET: 'rgba(255, 201, 0, 0.25)', // secondary-1 + BANK: 'rgba(144, 168, 237, 0.25)', // secondary-3 + MERCHANT: 'rgba(186, 139, 255, 0.25)', // primary-4 } const particleColors: Record<string, string> = { - WALLET: 'rgba(245, 158, 11, 0.8)', // Orange - BANK: 'rgba(59, 130, 246, 0.8)', // Blue - MERCHANT: 'rgba(16, 185, 129, 0.8)', // Green + WALLET: 'rgba(255, 201, 0, 0.8)', // secondary-1 + BANK: 'rgba(144, 168, 237, 0.8)', // secondary-3 + MERCHANT: 'rgba(186, 139, 255, 0.8)', // primary-4 } // Convert frequency/volume labels to numeric values for rendering @@ -1233,7 +1318,7 @@ export default function InvitesGraph(props: InvitesGraphProps) { const lineWidth = Math.min(0.4 + txCount * 0.25, 3.0) // Draw base line - ctx.strokeStyle = lineColors[extType] || 'rgba(107, 114, 128, 0.25)' + ctx.strokeStyle = lineColors[extType] || 'rgba(156, 163, 175, 0.25)' ctx.lineWidth = lineWidth ctx.beginPath() ctx.moveTo(source.x, source.y) @@ -1280,7 +1365,7 @@ export default function InvitesGraph(props: InvitesGraphProps) { // P2P: Draw line with animated particles (scaled by activity & volume) // Supports both full mode (count/totalUsd) and anonymized mode (frequency/volume labels) const baseAlpha = inactive ? 0.08 : 0.25 - ctx.strokeStyle = `rgba(6, 182, 212, ${baseAlpha})` + ctx.strokeStyle = `rgba(144, 168, 237, ${baseAlpha})` // Convert frequency/volume labels to numeric values for rendering // Full mode: use actual values; Anonymized mode: map labels to ranges @@ -1314,7 +1399,7 @@ export default function InvitesGraph(props: InvitesGraphProps) { const particleSize = 1.5 + logUsd * 2.25 const isBidirectional = link.bidirectional === true - ctx.fillStyle = 'rgba(6, 182, 212, 0.85)' + ctx.fillStyle = 'rgba(144, 168, 237, 0.85)' for (let i = 0; i < particleCount; i++) { // Forward direction (source → target) @@ -1339,7 +1424,7 @@ export default function InvitesGraph(props: InvitesGraphProps) { } else { // Invite: Draw line with multiple arrows along the edge const isDirect = link.type === 'DIRECT' - const baseColor = isDirect ? [139, 92, 246] : [236, 72, 153] + const baseColor = isDirect ? [255, 144, 232] : [186, 139, 255] const alpha = inactive ? 0.12 : 0.35 const arrowAlpha = inactive ? 0.2 : 0.6 const { mode: currentMode } = displaySettingsRef.current @@ -1362,7 +1447,7 @@ export default function InvitesGraph(props: InvitesGraphProps) { const particleSize = 3 // Gold color for points - ctx.fillStyle = 'rgba(251, 191, 36, 0.9)' // #fbbf24 with alpha + ctx.fillStyle = 'rgba(255, 201, 0, 0.9)' // secondary-1 #FFC900 with alpha for (let i = 0; i < particleCount; i++) { // Flow direction: source → target (invitee → inviter) @@ -1372,6 +1457,22 @@ export default function InvitesGraph(props: InvitesGraphProps) { const t = (time * baseSpeed + i / particleCount) % 1 const px = source.x + (target.x - source.x) * t const py = source.y + (target.y - source.y) * t + + // Detect arrival: when particle is close to target (t > 0.95) + // Track arrival to show "+1 pt" popup + if (t > 0.95 && t < 0.99) { + const linkId = `${link.source.id}_${link.target.id}_${i}` + const arrivals = particleArrivalsRef.current + if (!arrivals.has(linkId)) { + arrivals.set(linkId, { + timestamp: time, + x: target.x, + y: target.y, + nodeId: link.target.id, + }) + } + } + ctx.beginPath() ctx.arc(px, py, particleSize, 0, 2 * Math.PI) ctx.fill() @@ -1465,7 +1566,13 @@ export default function InvitesGraph(props: InvitesGraphProps) { return } - // User node → Select (camera follows) - click again to open Grafana + // User mode: Navigate to user profile in new tab + if (isMinimal && node.username) { + window.open(`/${node.username}`, '_blank') + return + } + + // Full/Payment mode: User node → Select (camera follows) - click again to open Grafana if (selectedUserId === node.id) { // Already selected - open Grafana const username = node.username || node.id @@ -1478,7 +1585,7 @@ export default function InvitesGraph(props: InvitesGraphProps) { setSelectedUserId(node.id) } }, - [selectedUserId] + [selectedUserId, isMinimal] ) // Right-click selects the node (camera follows) @@ -1796,6 +1903,34 @@ export default function InvitesGraph(props: InvitesGraphProps) { return () => clearTimeout(timeout) }, [filteredGraphData]) + // Continuous zoom tracking in minimal mode during simulation settling + useEffect(() => { + if (!isMinimal || !filteredGraphData || !graphRef.current) return + + let frameId: number | null = null + const startTime = Date.now() + const trackDuration = 4000 // Track for 4 seconds (simulation should settle by then) + + const continuousZoom = () => { + const elapsed = Date.now() - startTime + if (elapsed > trackDuration || !graphRef.current) return + + // Zoom to fit every frame during settling - fast animation + graphRef.current.zoomToFit(100, 40) + frameId = requestAnimationFrame(continuousZoom) + } + + // Start tracking immediately after graph mounts + const timeout = setTimeout(() => { + frameId = requestAnimationFrame(continuousZoom) + }, 100) + + return () => { + if (frameId) cancelAnimationFrame(frameId) + clearTimeout(timeout) + } + }, [isMinimal, filteredGraphData]) + // Center on selected node - track continuously as it moves useEffect(() => { if (!selectedUserId || !graphRef.current) return @@ -1998,8 +2133,8 @@ export default function InvitesGraph(props: InvitesGraphProps) { enableZoomInteraction={true} cooldownTicks={Infinity} warmupTicks={0} - d3AlphaDecay={0.005} - d3VelocityDecay={0.6} + d3AlphaDecay={isMinimal ? 0.03 : 0.005} + d3VelocityDecay={isMinimal ? 0.8 : 0.6} d3AlphaMin={0.001} onEngineStop={handleEngineStop} backgroundColor={backgroundColor} @@ -2346,7 +2481,7 @@ export default function InvitesGraph(props: InvitesGraphProps) { d3VelocityDecay={0.6} d3AlphaMin={0.001} onEngineStop={handleEngineStop} - backgroundColor="#f9fafb" + backgroundColor="#FAF4F0" width={graphWidth} height={graphHeight} autoPauseRedraw={false} diff --git a/src/components/Global/NavHeader/index.tsx b/src/components/Global/NavHeader/index.tsx index 043c75029..31b80098a 100644 --- a/src/components/Global/NavHeader/index.tsx +++ b/src/components/Global/NavHeader/index.tsx @@ -62,7 +62,7 @@ const NavHeader = ({ {showLogoutBtn && ( <Button - onClick={logoutUser} + onClick={() => logoutUser()} loading={isLoggingOut} variant="stroke" icon="logout" diff --git a/src/components/Home/HomeCarouselCTA/CarouselCTA.tsx b/src/components/Home/HomeCarouselCTA/CarouselCTA.tsx index 70794417e..88d185867 100644 --- a/src/components/Home/HomeCarouselCTA/CarouselCTA.tsx +++ b/src/components/Home/HomeCarouselCTA/CarouselCTA.tsx @@ -23,6 +23,8 @@ interface CarouselCTAProps { isPermissionDenied?: boolean secondaryIcon?: StaticImageData | string iconSize?: number + // Perk claim indicator - shows pink dot instead of X close button + isPerkClaim?: boolean } const CarouselCTA = ({ @@ -37,6 +39,7 @@ const CarouselCTA = ({ secondaryIcon, iconSize = 22, logoSize = 36, + isPerkClaim, }: CarouselCTAProps) => { const [showPermissionDeniedModal, setShowPermissionDeniedModal] = useState(false) const { triggerHaptic } = useHaptic() @@ -80,18 +83,24 @@ const CarouselCTA = ({ onClick={handleClick} className="embla__slide relative flex flex-row items-center justify-around px-2 py-2 md:py-3" > - {/* Close button - consistent positioning and size */} - <button - type="button" - aria-label={getAriaLabel()} - onClick={handleClose} - className={twMerge( - CAROUSEL_CLOSE_BUTTON_POSITION, - 'z-10 cursor-pointer p-0 text-black outline-none' - )} - > - <Icon name="cancel" size={CAROUSEL_CLOSE_ICON_SIZE} /> - </button> + {/* Close button or pink dot indicator for perk claims */} + {isPerkClaim ? ( + <div className={twMerge(CAROUSEL_CLOSE_BUTTON_POSITION, 'z-10')} aria-label="Claimable perk"> + <div className="h-2.5 w-2.5 rounded-full bg-primary-1" /> + </div> + ) : ( + <button + type="button" + aria-label={getAriaLabel()} + onClick={handleClose} + className={twMerge( + CAROUSEL_CLOSE_BUTTON_POSITION, + 'z-10 cursor-pointer p-0 text-black outline-none' + )} + > + <Icon name="cancel" size={CAROUSEL_CLOSE_ICON_SIZE} /> + </button> + )} {/* Icon container */} <div diff --git a/src/components/Home/HomeCarouselCTA/index.tsx b/src/components/Home/HomeCarouselCTA/index.tsx index 28315ad12..b7867765d 100644 --- a/src/components/Home/HomeCarouselCTA/index.tsx +++ b/src/components/Home/HomeCarouselCTA/index.tsx @@ -1,42 +1,136 @@ 'use client' +import { useState, useCallback, useMemo, useEffect } from 'react' +import { useQuery, useQueryClient } from '@tanstack/react-query' import Carousel from '@/components/Global/Carousel' import CarouselCTA from './CarouselCTA' import { type IconName } from '@/components/Global/Icons/Icon' -import { useHomeCarouselCTAs } from '@/hooks/useHomeCarouselCTAs' +import { useHomeCarouselCTAs, type CarouselCTA as CarouselCTAType } from '@/hooks/useHomeCarouselCTAs' +import { perksApi, type PendingPerk } from '@/services/perks' +import { useAuth } from '@/context/authContext' +import { useWebSocket } from '@/hooks/useWebSocket' +import { extractInviteeName } from '@/utils/general.utils' +import PerkClaimModal from '../PerkClaimModal' +import underMaintenanceConfig from '@/config/underMaintenance.config' const HomeCarouselCTA = () => { const { carouselCTAs, setCarouselCTAs } = useHomeCarouselCTAs() + const { user } = useAuth() + const queryClient = useQueryClient() + + // Perk claim modal state + const [selectedPerk, setSelectedPerk] = useState<PendingPerk | null>(null) + const [claimedPerkIds, setClaimedPerkIds] = useState<Set<string>>(new Set()) + + useEffect(() => { + setClaimedPerkIds(new Set()) + }, [user?.user.userId]) + + // Fetch pending perks + const { data: pendingPerksData } = useQuery({ + queryKey: ['pendingPerks', user?.user.userId], + queryFn: () => perksApi.getPendingPerks(), + enabled: !!user?.user.userId, + }) + + // Listen for real-time perk notifications via WebSocket + useWebSocket({ + username: user?.user.username ?? undefined, + onPendingPerk: useCallback(() => { + queryClient.invalidateQueries({ queryKey: ['pendingPerks'] }) + }, [queryClient]), + }) + + // Filter for Card Pioneer inviter rewards that haven't been claimed + const cardPioneerPerks = useMemo(() => { + if (underMaintenanceConfig.disableCardPioneers) return [] + return ( + pendingPerksData?.perks?.filter( + (p) => p.name === 'Card Pioneer Inviter Reward' && !claimedPerkIds.has(p.id) + ) || [] + ) + }, [pendingPerksData?.perks, claimedPerkIds]) + + // Convert perks to carousel CTAs (these come first!) + const perkCTAs: CarouselCTAType[] = useMemo(() => { + return cardPioneerPerks.map((perk) => { + const inviteeName = extractInviteeName(perk.reason) + return { + id: `perk-${perk.id}`, + title: ( + <p> + <b>+${perk.amountUsd}</b> reward ready! + </p> + ), + description: ( + <p> + <b>{inviteeName}</b> joined Pioneers. Tap to claim. + </p> + ), + icon: 'gift' as IconName, + iconContainerClassName: 'bg-primary-1', + onClick: () => setSelectedPerk(perk), + isPerkClaim: true, + iconSize: 16, + } + }) + }, [cardPioneerPerks]) + + // Combine perk CTAs (first) with regular CTAs + const allCTAs = useMemo(() => { + return [...perkCTAs, ...carouselCTAs] + }, [perkCTAs, carouselCTAs]) + + const handlePerkClaimed = useCallback((perkId: string) => { + setClaimedPerkIds((prev) => new Set(prev).add(perkId)) + }, []) + + const handleModalClose = useCallback(() => { + setSelectedPerk(null) + }, []) // don't render carousel if there are no CTAs - if (!carouselCTAs.length) return null + if (!allCTAs.length) return null return ( - <Carousel> - {carouselCTAs.map((cta) => ( - <CarouselCTA - key={cta.id} - title={cta.title} - description={cta.description} - icon={cta.icon as IconName} - onClose={() => { - // Use cta.onClose if provided (for notification prompt), otherwise filter from list - if (cta.onClose) { - cta.onClose() - } else { - setCarouselCTAs((prev) => prev.filter((c) => c.id !== cta.id)) - } - }} - onClick={cta.onClick} - logo={cta.logo} - iconContainerClassName={cta.iconContainerClassName} - isPermissionDenied={cta.isPermissionDenied} - secondaryIcon={cta.secondaryIcon} - iconSize={16} - logoSize={cta.logoSize} + <> + <Carousel> + {allCTAs.map((cta) => ( + <CarouselCTA + key={cta.id} + title={cta.title} + description={cta.description} + icon={cta.icon as IconName} + onClose={() => { + // Use cta.onClose if provided (for notification prompt), otherwise filter from list + if (cta.onClose) { + cta.onClose() + } else { + setCarouselCTAs((prev) => prev.filter((c) => c.id !== cta.id)) + } + }} + onClick={cta.onClick} + logo={cta.logo} + iconContainerClassName={cta.iconContainerClassName} + isPermissionDenied={cta.isPermissionDenied} + secondaryIcon={cta.secondaryIcon} + iconSize={16} + logoSize={cta.logoSize} + isPerkClaim={cta.isPerkClaim} + /> + ))} + </Carousel> + + {/* Perk Claim Modal */} + {selectedPerk && ( + <PerkClaimModal + perk={selectedPerk} + visible={!!selectedPerk} + onClose={handleModalClose} + onClaimed={handlePerkClaimed} /> - ))} - </Carousel> + )} + </> ) } diff --git a/src/components/Home/PerkClaimModal.tsx b/src/components/Home/PerkClaimModal.tsx new file mode 100644 index 000000000..5a694fdce --- /dev/null +++ b/src/components/Home/PerkClaimModal.tsx @@ -0,0 +1,350 @@ +'use client' + +import { useState, useCallback, useRef, useEffect } from 'react' +import { useQueryClient } from '@tanstack/react-query' +import { perksApi, type PendingPerk } from '@/services/perks' +import { Icon } from '@/components/Global/Icons/Icon' +import { useHoldToClaim } from '@/hooks/useHoldToClaim' +import { getShakeClass } from '@/utils/perk.utils' +import { extractInviteeName } from '@/utils/general.utils' +import { shootDoubleStarConfetti } from '@/utils/confetti' +import { SoundPlayer } from '@/components/Global/SoundPlayer' +import { useHaptic } from 'use-haptic' +import ActionModal from '@/components/Global/ActionModal' + +type ClaimPhase = 'idle' | 'holding' | 'opening' | 'revealed' | 'exiting' + +interface PerkClaimModalProps { + perk: PendingPerk + visible: boolean + onClose: () => void + onClaimed: (perkId: string) => void +} + +/** + * Modal for claiming perks with gift box animation. + * Contains the shake/hold interaction, confetti, and success state. + * Uses ActionModal for consistent styling with other modals. + */ +export function PerkClaimModal({ perk, visible, onClose, onClaimed }: PerkClaimModalProps) { + const queryClient = useQueryClient() + const [claimPhase, setClaimPhase] = useState<ClaimPhase>('idle') + const [lastClaimedPerk, setLastClaimedPerk] = useState<PendingPerk | null>(null) + const apiCallRef = useRef<Promise<void> | null>(null) + const revealTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null) + const dismissTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null) + + // Cleanup timers on unmount + useEffect(() => { + return () => { + if (revealTimerRef.current) clearTimeout(revealTimerRef.current) + if (dismissTimerRef.current) clearTimeout(dismissTimerRef.current) + } + }, []) + + // Reset state when modal opens with new perk + useEffect(() => { + if (visible) { + setClaimPhase('idle') + setLastClaimedPerk(null) + } + }, [visible, perk.id]) + + // Optimistic claim: trigger animation immediately, API call in background + const handleHoldComplete = useCallback(async () => { + // Phase 1: Opening animation (gift shakes on its own, builds anticipation) + setClaimPhase('opening') + + // Fire API call in background - don't await it + apiCallRef.current = (async () => { + try { + const result = await perksApi.claimPerk(perk.id) + if (result.success) { + onClaimed(perk.id) + queryClient.invalidateQueries({ queryKey: ['pendingPerks'] }) + queryClient.invalidateQueries({ queryKey: ['transactions'] }) + } + } catch (error) { + console.error('Failed to claim perk:', error) + } + })() + + // Phase 2: After 600ms of autonomous shaking, burst into confetti + revealTimerRef.current = setTimeout(() => { + // Haptic burst feedback + if ('vibrate' in navigator) { + navigator.vibrate([100, 50, 100, 50, 200]) + } + + // Confetti explosion! + shootDoubleStarConfetti({ origin: { x: 0.5, y: 0.4 } }) + + // Phase 3: Show revealed state + setLastClaimedPerk(perk) + setClaimPhase('revealed') + }, 600) + }, [perk, queryClient, onClaimed]) + + // Handle dismissing the success message + const handleDismissSuccess = useCallback(() => { + setClaimPhase('exiting') + dismissTimerRef.current = setTimeout(() => { + onClose() + }, 400) + }, [onClose]) + + // Handle modal close based on current phase + const handleModalClose = useCallback(() => { + if (claimPhase === 'revealed') { + handleDismissSuccess() + } else if (claimPhase === 'idle') { + onClose() + } + // Don't allow closing during opening/exiting phases + }, [claimPhase, handleDismissSuccess, onClose]) + + if (!visible) return null + + const isSuccessPhase = (claimPhase === 'revealed' || claimPhase === 'exiting') && !!lastClaimedPerk + + // Use ActionModal's native props for success phase, custom content for gift box phase + if (isSuccessPhase) { + return ( + <SuccessModal + perk={lastClaimedPerk!} + claimPhase={claimPhase} + onClose={handleModalClose} + onDismiss={handleDismissSuccess} + /> + ) + } + + return ( + <ActionModal + visible={visible} + onClose={handleModalClose} + title="" + preventClose={claimPhase === 'opening'} + content={<GiftBoxContent perk={perk} onHoldComplete={handleHoldComplete} claimPhase={claimPhase} />} + /> + ) +} + +interface SuccessModalProps { + perk: PendingPerk + claimPhase: ClaimPhase + onClose: () => void + onDismiss: () => void +} + +/** + * Success modal using ActionModal's native layout for consistent design system styling. + * Uses icon/title/description props for standard vertical centered layout. + */ +function SuccessModal({ perk, claimPhase, onClose, onDismiss }: SuccessModalProps) { + const inviteeName = extractInviteeName(perk.reason) + const { triggerHaptic } = useHaptic() + const [canDismiss, setCanDismiss] = useState(false) + const isExiting = claimPhase === 'exiting' + + useEffect(() => { + triggerHaptic() + const dismissTimer = setTimeout(() => setCanDismiss(true), 2000) + return () => clearTimeout(dismissTimer) + }, [triggerHaptic]) + + return ( + <ActionModal + visible={true} + onClose={onClose} + hideModalCloseButton + preventClose={isExiting} + icon="check" + iconProps={{ className: 'text-white' }} + iconContainerClassName="bg-success-3" + title="" + description={ + <div className={isExiting ? 'animate-gift-exit' : 'animate-gift-revealed'}> + <p className="text-3xl font-extrabold text-black">+${perk.amountUsd}</p> + <p className="mt-1 flex items-center justify-center gap-1 text-sm text-grey-1"> + <Icon name="invite-heart" size={14} /> + <span className="font-medium">{inviteeName}</span> + <span>joined Pioneers</span> + </p> + </div> + } + ctas={canDismiss ? [{ text: 'Done', onClick: onDismiss, variant: 'purple' as const }] : undefined} + content={<SoundPlayer sound="success" />} + /> + ) +} + +interface GiftBoxContentProps { + perk: PendingPerk + onHoldComplete: () => void + claimPhase: ClaimPhase +} + +/** + * Gift box with hold-to-claim interaction + */ +function GiftBoxContent({ perk, onHoldComplete, claimPhase }: GiftBoxContentProps) { + const { holdProgress, isShaking, shakeIntensity, buttonProps } = useHoldToClaim({ + onComplete: onHoldComplete, + disabled: claimPhase !== 'idle', + enableTapMode: true, + tapProgress: 12, + holdProgressPerSec: 80, + decayRate: 8, + }) + + // Ribbon opens outward based on hold progress (max 30deg spread) + const ribbonSpread = (holdProgress / 100) * 30 + + // Determine animation classes based on phase + const getAnimationClass = () => { + if (claimPhase === 'opening') { + return 'animate-gift-opening' + } + if (isShaking) { + return getShakeClass(isShaking, shakeIntensity) + } + return '' + } + + const inviteeName = extractInviteeName(perk.reason) + + return ( + <div className="flex flex-col items-center"> + {/* Title */} + <p className="mb-6 text-center text-sm text-grey-1"> + <Icon name="invite-heart" size={14} className="mr-1 inline" /> + <span className="font-medium">{inviteeName}</span> joined Pioneers! + </p> + + {/* Gift box wrapper - only this shakes */} + <div className={`relative ${getAnimationClass()}`}> + {/* Glow effect behind gift */} + <div + className="pointer-events-none absolute inset-0 -m-6 rounded-3xl bg-primary-1 blur-2xl transition-opacity" + style={{ opacity: (holdProgress / 100) * 0.3 }} + /> + + {/* Gift box container */} + <div {...buttonProps} className="relative cursor-pointer touch-none select-none"> + {/* Gift box */} + <div + className={`gift-box-shine relative h-32 w-44 overflow-hidden rounded-xl border-4 border-primary-1 bg-gradient-to-br from-primary-1/20 via-white to-primary-2/20 shadow-xl transition-transform ${holdProgress > 0 ? 'scale-[0.98]' : ''}`} + > + {/* Vertical ribbon */} + <div className="absolute bottom-0 left-1/2 top-0 w-5 -translate-x-1/2 bg-gradient-to-r from-primary-1/50 via-primary-1/70 to-primary-1/50" /> + + {/* Horizontal ribbon */} + <div className="absolute left-0 right-0 top-1/2 h-5 -translate-y-1/2 bg-gradient-to-b from-primary-1/50 via-primary-1/70 to-primary-1/50" /> + + {/* Light rays from center */} + <div + className="pointer-events-none absolute inset-0" + style={{ + background: `radial-gradient(circle at center, rgba(255,255,255,${0.4 * (holdProgress / 100)}) 0%, transparent 70%)`, + }} + /> + + {/* Cracks appearing with progress */} + {holdProgress > 20 && ( + <div className="absolute left-4 top-4 h-8 w-0.5 rotate-45 bg-primary-1/40" /> + )} + {holdProgress > 40 && ( + <div className="absolute bottom-6 right-6 h-10 w-0.5 -rotate-[30deg] bg-primary-1/40" /> + )} + {holdProgress > 60 && ( + <div className="absolute bottom-4 left-8 h-6 w-0.5 rotate-12 bg-primary-1/40" /> + )} + + {/* Gift icon */} + <div className="absolute inset-0 flex items-center justify-center"> + <div + className={`rounded-full bg-primary-1 p-3 shadow-lg transition-transform ${holdProgress > 30 ? 'animate-bounce' : ''}`} + > + <Icon name="gift" size={28} className="text-white" /> + </div> + </div> + </div> + + {/* Ribbon bow */} + <div className="absolute -top-3 left-1/2 -translate-x-1/2"> + <div className="relative"> + {/* Left ribbon tail */} + <div + className="absolute left-1/2 top-2 h-4 w-2 -translate-x-[10px] bg-primary-1 transition-transform" + style={{ + transform: `translateX(-10px) rotate(${-20 - ribbonSpread * 0.5}deg)`, + borderRadius: '0 0 2px 2px', + }} + /> + {/* Right ribbon tail */} + <div + className="absolute left-1/2 top-2 h-4 w-2 translate-x-[2px] bg-primary-1 transition-transform" + style={{ + transform: `translateX(2px) rotate(${20 + ribbonSpread * 0.5}deg)`, + borderRadius: '0 0 2px 2px', + }} + /> + {/* Left loop */} + <div + className="absolute -left-5 -top-1 h-4 w-6 rounded-full bg-primary-1 shadow-sm transition-transform" + style={{ transform: `rotate(${-25 - ribbonSpread}deg)` }} + /> + {/* Right loop */} + <div + className="absolute -right-5 -top-1 h-4 w-6 rounded-full bg-primary-1 shadow-sm transition-transform" + style={{ transform: `rotate(${25 + ribbonSpread}deg)` }} + /> + {/* Center knot */} + <div className="relative z-10 h-4 w-4 rounded-sm bg-primary-1 shadow-md" /> + </div> + </div> + + {/* Particles flying out */} + {holdProgress > 30 && ( + <> + <div + className="absolute -right-4 top-2 animate-ping text-lg" + style={{ animationDuration: '1s' }} + > + ✨ + </div> + <div + className="absolute -left-4 bottom-4 animate-ping text-lg" + style={{ animationDuration: '1.2s', animationDelay: '0.2s' }} + > + ✨ + </div> + </> + )} + {holdProgress > 60 && ( + <> + <div + className="absolute -top-2 right-2 animate-ping text-sm" + style={{ animationDuration: '0.8s', animationDelay: '0.3s' }} + > + ⭐ + </div> + <div + className="absolute -bottom-2 left-2 animate-ping text-sm" + style={{ animationDuration: '1s', animationDelay: '0.1s' }} + > + ⭐ + </div> + </> + )} + </div> + </div> + + {/* Instructions */} + <p className="mt-6 text-center text-sm text-grey-1">Hold to unwrap your reward</p> + </div> + ) +} + +export default PerkClaimModal diff --git a/src/components/IdentityVerification/StartVerificationModal.tsx b/src/components/IdentityVerification/StartVerificationModal.tsx index 54b53b841..d5a14a63b 100644 --- a/src/components/IdentityVerification/StartVerificationModal.tsx +++ b/src/components/IdentityVerification/StartVerificationModal.tsx @@ -54,8 +54,8 @@ const StartVerificationModal = ({ return ( <p> - To make <b>international</b> money transfers, you must verify your identity using a government-issued - ID. + To send money to and from <b>bank accounts</b> and local payment methods, verify your identity with a + government-issued ID. </p> ) } @@ -64,9 +64,7 @@ const StartVerificationModal = ({ <ActionModal visible={visible} onClose={onClose} - title={ - isSelectedCountryMantecaCountry ? `Unlock ${selectedCountry.title}` : 'Unlock International Transfers' - } + title={isSelectedCountryMantecaCountry ? `Unlock ${selectedCountry.title}` : 'Unlock Bank Payments'} description={getDescription()} descriptionClassName="text-black" icon="shield" diff --git a/src/components/LandingPage/CardPioneers.tsx b/src/components/LandingPage/CardPioneers.tsx new file mode 100644 index 000000000..5862e2f5f --- /dev/null +++ b/src/components/LandingPage/CardPioneers.tsx @@ -0,0 +1,113 @@ +'use client' +import { motion } from 'framer-motion' +import { Button } from '@/components/0_Bruddle/Button' +import { Star } from '@/assets' + +import { useRouter } from 'next/navigation' +import PioneerCard3D from './PioneerCard3D' +import { useEffect, useState } from 'react' +import { Icon } from '@/components/Global/Icons/Icon' + +const CardPioneers = () => { + const router = useRouter() + const [screenWidth, setScreenWidth] = useState(1200) + + useEffect(() => { + const handleResize = () => setScreenWidth(window.innerWidth) + handleResize() // Set actual width on mount + window.addEventListener('resize', handleResize) + return () => window.removeEventListener('resize', handleResize) + }, []) + + const isMobile = screenWidth < 768 + + const handleCTA = () => { + router.push('/lp/card') + } + + return ( + <section id="card-pioneers" className="relative overflow-hidden bg-secondary-1 py-16 text-n-1 md:py-24"> + {!isMobile && <Stars />} + <div className="relative mx-auto flex max-w-7xl flex-col items-center gap-8 px-4 md:flex-row md:gap-12 md:px-8 lg:gap-20"> + {/* Card on left */} + <div className="flex w-full justify-center md:w-1/2"> + <PioneerCard3D /> + </div> + + {/* Copy on right */} + <div className="w-full text-center md:w-1/2 md:text-left"> + <h1 className="font-roboto-flex-extrabold text-[2.25rem] font-extraBlack leading-tight md:text-5xl lg:text-6xl"> + PAY EVERYWHERE. + </h1> + + <p className="font-roboto-flex mt-4 text-lg md:text-xl"> + Get the Peanut Card and pay anywhere in the world. + </p> + + <ul className="font-roboto-flex mt-6 space-y-3 text-base md:text-lg"> + <li className="flex items-center justify-center gap-3 md:justify-start"> + <Icon name="check-circle" className="h-6 w-6 flex-shrink-0 text-n-1" /> + Best rates - no hidden fees + </li> + <li className="flex items-center justify-center gap-3 md:justify-start"> + <Icon name="check-circle" className="h-6 w-6 flex-shrink-0 text-n-1" /> + Earn forever for every invite + </li> + <li className="flex items-center justify-center gap-3 md:justify-start"> + <Icon name="check-circle" className="h-6 w-6 flex-shrink-0 text-n-1" /> + Self-custodial - your funds, your control + </li> + </ul> + + <div className="mt-8 flex flex-col items-center gap-4"> + <Button + shadowSize="4" + onClick={handleCTA} + className="w-full px-10 py-4 text-lg font-extrabold md:w-auto" + > + GET MY CARD + </Button> + </div> + </div> + </div> + </section> + ) +} + +// Animated stars - matches Manteca.tsx pattern +const Stars = () => ( + <> + <motion.img + src={Star.src} + alt="Star" + width={50} + height={50} + className="absolute left-12 top-10" + initial={{ opacity: 0, translateY: 20, translateX: 5, rotate: 22 }} + whileInView={{ opacity: 1, translateY: 0, translateX: 0, rotate: 22 }} + transition={{ type: 'spring', damping: 5, delay: 0.2 }} + /> + <motion.img + src={Star.src} + alt="Star" + width={40} + height={40} + className="absolute bottom-16 right-16" + initial={{ opacity: 0, translateY: 20, translateX: 5, rotate: -15 }} + whileInView={{ opacity: 1, translateY: 0, translateX: 0, rotate: -15 }} + transition={{ type: 'spring', damping: 5, delay: 0.4 }} + /> + <motion.img + src={Star.src} + alt="Star" + width={35} + height={35} + className="absolute right-1/3 top-8" + initial={{ opacity: 0, translateY: 20, rotate: 10 }} + whileInView={{ opacity: 1, translateY: 0, rotate: 10 }} + transition={{ type: 'spring', damping: 5, delay: 0.6 }} + /> + </> +) + +export { CardPioneers } diff --git a/src/components/LandingPage/CloudsCss.tsx b/src/components/LandingPage/CloudsCss.tsx new file mode 100644 index 000000000..ab099317f --- /dev/null +++ b/src/components/LandingPage/CloudsCss.tsx @@ -0,0 +1,41 @@ +import borderCloud from '@/assets/illustrations/border-cloud.svg' +import { type CSSProperties } from 'react' + +type CloudConfig = { + top: string + width: number + speed: string + direction: 'ltr' | 'rtl' + delay?: string +} + +const defaultClouds: CloudConfig[] = [ + { top: '10%', width: 180, speed: '38s', direction: 'ltr' }, + { top: '45%', width: 220, speed: '44s', direction: 'ltr' }, + { top: '80%', width: 210, speed: '42s', direction: 'ltr' }, + { top: '25%', width: 200, speed: '40s', direction: 'rtl' }, + { top: '65%', width: 190, speed: '36s', direction: 'rtl' }, +] + +export function CloudsCss({ clouds = defaultClouds }: { clouds?: CloudConfig[] }) { + return ( + <div className="absolute left-0 top-0 h-full w-full overflow-hidden"> + {clouds.map((cloud, i) => ( + <img + key={i} + src={borderCloud.src} + alt="" + className={`absolute left-0 cloud-${cloud.direction}`} + style={ + { + top: cloud.top, + width: cloud.width, + '--cloud-speed': cloud.speed, + '--cloud-delay': cloud.delay || '0s', + } as CSSProperties + } + /> + ))} + </div> + ) +} diff --git a/src/components/LandingPage/LandingPageClient.tsx b/src/components/LandingPage/LandingPageClient.tsx new file mode 100644 index 000000000..ef9566466 --- /dev/null +++ b/src/components/LandingPage/LandingPageClient.tsx @@ -0,0 +1,217 @@ +'use client' + +import { useFooterVisibility } from '@/context/footerVisibility' +import { useEffect, useState, useRef, useCallback, type ReactNode } from 'react' +import { DropLink, FAQs, Hero, Marquee, NoFees, CardPioneers } from '@/components/LandingPage' +import TweetCarousel from '@/components/LandingPage/TweetCarousel' +import underMaintenanceConfig from '@/config/underMaintenance.config' + +type CTAButton = { + label: string + href: string + isExternal?: boolean + subtext?: string +} + +type FAQQuestion = { + id: string + question: string + answer: string +} + +type LandingPageClientProps = { + heroConfig: { + primaryCta: CTAButton + } + faqData: { + heading: string + questions: FAQQuestion[] + marquee: { visible: boolean; message: string } + } + marqueeMessages: string[] + // Server-rendered slots + mantecaSlot: ReactNode + regulatedRailsSlot: ReactNode + yourMoneySlot: ReactNode + securitySlot: ReactNode + sendInSecondsSlot: ReactNode + footerSlot: ReactNode +} + +export function LandingPageClient({ + heroConfig, + faqData, + marqueeMessages, + mantecaSlot, + regulatedRailsSlot, + yourMoneySlot, + securitySlot, + sendInSecondsSlot, + footerSlot, +}: LandingPageClientProps) { + const { isFooterVisible } = useFooterVisibility() + const [buttonVisible, setButtonVisible] = useState(true) + const [isScrollFrozen, setIsScrollFrozen] = useState(false) + const [buttonScale, setButtonScale] = useState(1) + const [animationComplete, setAnimationComplete] = useState(false) + const [shrinkingPhase, setShrinkingPhase] = useState(false) + const [hasGrown, setHasGrown] = useState(false) + const sendInSecondsRef = useRef<HTMLDivElement>(null) + const frozenScrollY = useRef(0) + const virtualScrollY = useRef(0) + const touchStartY = useRef(0) + + // Use refs to avoid re-attaching listeners on every state change + const isScrollFrozenRef = useRef(isScrollFrozen) + const animationCompleteRef = useRef(animationComplete) + const shrinkingPhaseRef = useRef(shrinkingPhase) + const hasGrownRef = useRef(hasGrown) + isScrollFrozenRef.current = isScrollFrozen + animationCompleteRef.current = animationComplete + shrinkingPhaseRef.current = shrinkingPhase + hasGrownRef.current = hasGrown + + useEffect(() => { + if (isFooterVisible) { + setButtonVisible(false) + } else { + setButtonVisible(true) + } + }, [isFooterVisible]) + + // Shared logic: accumulate virtual scroll delta and animate the button scale + const handleScrollDelta = useCallback((deltaY: number) => { + if (!isScrollFrozenRef.current || animationCompleteRef.current) return + if (deltaY <= 0) return + + virtualScrollY.current += deltaY + + const maxVirtualScroll = 500 + const newScale = Math.min(1.5, 1 + (virtualScrollY.current / maxVirtualScroll) * 0.5) + setButtonScale(newScale) + + if (newScale >= 1.5) { + setAnimationComplete(true) + setHasGrown(true) + document.body.style.overflow = '' + setIsScrollFrozen(false) + } + }, []) + + useEffect(() => { + const handleScroll = () => { + if (sendInSecondsRef.current) { + const targetElement = document.getElementById('sticky-button-target') + if (!targetElement) return + + const targetRect = targetElement.getBoundingClientRect() + const currentScrollY = window.scrollY + + const stickyButtonTop = window.innerHeight - 16 - 52 + const stickyButtonBottom = window.innerHeight - 16 + + const shouldFreeze = + targetRect.top <= stickyButtonBottom - 60 && + targetRect.bottom >= stickyButtonTop - 60 && + !animationCompleteRef.current && + !shrinkingPhaseRef.current && + !hasGrownRef.current + + if (shouldFreeze && !isScrollFrozenRef.current) { + setIsScrollFrozen(true) + frozenScrollY.current = currentScrollY + virtualScrollY.current = 0 + document.body.style.overflow = 'hidden' + window.scrollTo(0, frozenScrollY.current) + } else if (isScrollFrozenRef.current && !animationCompleteRef.current) { + window.scrollTo(0, frozenScrollY.current) + } else if ( + animationCompleteRef.current && + !shrinkingPhaseRef.current && + currentScrollY > frozenScrollY.current + 50 + ) { + setShrinkingPhase(true) + } else if (shrinkingPhaseRef.current) { + const shrinkDistance = Math.max(0, currentScrollY - (frozenScrollY.current + 50)) + const maxShrinkDistance = 200 + const shrinkProgress = Math.min(1, shrinkDistance / maxShrinkDistance) + const newScale = 1.5 - shrinkProgress * 0.5 + setButtonScale(Math.max(1, newScale)) + } else if (animationCompleteRef.current && currentScrollY < frozenScrollY.current - 100) { + setAnimationComplete(false) + setShrinkingPhase(false) + setButtonScale(1) + setHasGrown(false) + } + } + } + + const handleWheel = (event: WheelEvent) => { + if (isScrollFrozenRef.current && !animationCompleteRef.current) { + event.preventDefault() + handleScrollDelta(event.deltaY) + } + } + + const handleTouchStart = (event: TouchEvent) => { + touchStartY.current = event.touches[0].clientY + } + + const handleTouchMove = (event: TouchEvent) => { + if (isScrollFrozenRef.current && !animationCompleteRef.current) { + event.preventDefault() + const deltaY = touchStartY.current - event.touches[0].clientY + touchStartY.current = event.touches[0].clientY + handleScrollDelta(deltaY) + } + } + + window.addEventListener('scroll', handleScroll) + window.addEventListener('wheel', handleWheel, { passive: false }) + window.addEventListener('touchstart', handleTouchStart, { passive: true }) + window.addEventListener('touchmove', handleTouchMove, { passive: false }) + handleScroll() + + return () => { + window.removeEventListener('scroll', handleScroll) + window.removeEventListener('wheel', handleWheel) + window.removeEventListener('touchstart', handleTouchStart) + window.removeEventListener('touchmove', handleTouchMove) + document.body.style.overflow = '' + } + }, [handleScrollDelta]) + + const marqueeProps = { visible: true, message: marqueeMessages } + + return ( + <> + <Hero primaryCta={heroConfig.primaryCta} buttonVisible={buttonVisible} buttonScale={buttonScale} /> + <Marquee {...marqueeProps} /> + {mantecaSlot} + <Marquee {...marqueeProps} /> + {!underMaintenanceConfig.disableCardPioneers && ( + <> + <CardPioneers /> + <Marquee {...marqueeProps} /> + </> + )} + <TweetCarousel /> + <Marquee {...marqueeProps} /> + {regulatedRailsSlot} + <Marquee {...marqueeProps} /> + {yourMoneySlot} + <Marquee {...marqueeProps} /> + <DropLink /> + <Marquee {...marqueeProps} /> + {securitySlot} + <Marquee {...marqueeProps} /> + <div ref={sendInSecondsRef}>{sendInSecondsSlot}</div> + <Marquee {...marqueeProps} /> + <NoFees /> + <Marquee {...marqueeProps} /> + <FAQs heading={faqData.heading} questions={faqData.questions} marquee={faqData.marquee} /> + <Marquee {...marqueeProps} /> + {footerSlot} + </> + ) +} diff --git a/src/components/LandingPage/LandingPageShell.tsx b/src/components/LandingPage/LandingPageShell.tsx new file mode 100644 index 000000000..94a848860 --- /dev/null +++ b/src/components/LandingPage/LandingPageShell.tsx @@ -0,0 +1,11 @@ +import type { ReactNode } from 'react' +import { FooterVisibilityObserver } from '@/components/Global/FooterVisibilityObserver' + +export function LandingPageShell({ children }: { children: ReactNode }) { + return ( + <div className="enable-select !m-0 w-full !p-0"> + {children} + <FooterVisibilityObserver /> + </div> + ) +} diff --git a/src/components/LandingPage/Manteca.tsx b/src/components/LandingPage/Manteca.tsx index 3b574e500..8b600b256 100644 --- a/src/components/LandingPage/Manteca.tsx +++ b/src/components/LandingPage/Manteca.tsx @@ -1,57 +1,41 @@ -import { motion } from 'framer-motion' -import { useEffect, useState } from 'react' import mantecaIphone from '@/assets/iphone-ss/manteca_ss.png' import Image from 'next/image' import { MEPA_ARGENTINA_LOGO, PIX_BRZ_LOGO, Star } from '@/assets' -import { CloudImages } from './imageAssets' +import { CloudsCss } from './CloudsCss' +import { AnimateOnView } from '@/components/Global/AnimateOnView' -const Manteca = () => { - const [screenWidth, setScreenWidth] = useState(typeof window !== 'undefined' ? window.innerWidth : 1200) - - const starConfigs = [ - { className: 'absolute left-12 top-10', delay: 0.2 }, - { className: 'absolute left-56 top-1/2', delay: 0.2 }, - { className: 'absolute bottom-20 left-20', delay: 0.2 }, - { className: 'absolute -top-16 right-20 md:top-58', delay: 0.6 }, - { className: 'absolute bottom-20 right-44', delay: 0.6 }, - ] - - const isMobile = screenWidth < 768 - - useEffect(() => { - const handleResize = () => { - setScreenWidth(window.innerWidth) - } - - handleResize() - window.addEventListener('resize', handleResize) - return () => window.removeEventListener('resize', handleResize) - }, []) +const starConfigs = [ + { className: 'absolute left-12 top-10', delay: '0.2s', rotate: '22deg' }, + { className: 'absolute left-56 top-1/2', delay: '0.2s', rotate: '22deg' }, + { className: 'absolute bottom-20 left-20', delay: '0.2s', rotate: '22deg' }, + { className: 'absolute -top-16 right-20 md:top-58', delay: '0.6s', rotate: '22deg' }, + { className: 'absolute bottom-20 right-44', delay: '0.6s', rotate: '22deg' }, +] +const Manteca = () => { return ( <section + id="qr-pay" className="relative overflow-hidden py-20 text-n-1 md:h-[850px] lg:h-[750px]" style={{ backgroundColor: '#F9F4F0' }} > - {!isMobile && <CloudImages screenWidth={screenWidth} />} + <div className="hidden md:block"> + <CloudsCss /> + </div> - {!isMobile && ( - <> - {starConfigs.map((config, index) => ( - <motion.img - key={index} - src={Star.src} - alt="Floating Star" - width={50} - height={50} - className={config.className} - initial={{ opacity: 0, translateY: 20, translateX: 5, rotate: 22 }} - whileInView={{ opacity: 1, translateY: 0, translateX: 0, rotate: 22 }} - transition={{ type: 'spring', damping: 5, delay: config.delay }} - /> - ))} - </> - )} + <div className="hidden md:block"> + {starConfigs.map((config, index) => ( + <AnimateOnView + key={index} + className={config.className} + delay={config.delay} + x="5px" + rotate={config.rotate} + > + <img src={Star.src} alt="" width={50} height={50} /> + </AnimateOnView> + ))} + </div> <div className="relative flex flex-col items-center justify-center px-4"> <h1 className="font-roboto-flex-extrabold text-center text-[4rem] font-extraBlack md:text-left lg:text-headingMedium"> @@ -71,24 +55,22 @@ const Manteca = () => { </h3> </div> - {isMobile && ( - <div className="mt-4 flex flex-col items-center justify-center gap-4"> - <Image src={mantecaIphone} alt="Mercado pago payment" width={250} height={250} /> + {/* Mobile layout */} + <div className="mt-4 flex flex-col items-center justify-center gap-4 md:hidden"> + <Image src={mantecaIphone} alt="Mercado pago payment" width={250} height={250} /> - <div className="flex gap-8"> - <Image src={MEPA_ARGENTINA_LOGO} alt="Mepa Argentina" width={100} height={100} /> - <Image src={PIX_BRZ_LOGO} alt="Pix Brz" width={100} height={100} /> - </div> + <div className="flex gap-8"> + <Image src={MEPA_ARGENTINA_LOGO} alt="Mepa Argentina" width={100} height={100} /> + <Image src={PIX_BRZ_LOGO} alt="Pix Brz" width={100} height={100} /> </div> - )} + </div> - {!isMobile && ( - <div className="absolute -bottom-24 left-1/2 mx-auto flex -translate-x-1/2 items-center justify-center gap-20 lg:gap-36"> - <Image src={MEPA_ARGENTINA_LOGO} alt="Mepa Argentina" width={170} height={170} /> - <Image src={mantecaIphone} alt="Mercado pago payment" width={250} height={250} /> - <Image src={PIX_BRZ_LOGO} alt="Pix Brazil" width={170} height={170} /> - </div> - )} + {/* Desktop layout */} + <div className="absolute -bottom-24 left-1/2 mx-auto hidden -translate-x-1/2 items-center justify-center gap-20 md:flex lg:gap-36"> + <Image src={MEPA_ARGENTINA_LOGO} alt="Mepa Argentina" width={170} height={170} /> + <Image src={mantecaIphone} alt="Mercado pago payment" width={250} height={250} /> + <Image src={PIX_BRZ_LOGO} alt="Pix Brazil" width={170} height={170} /> + </div> </section> ) } diff --git a/src/components/LandingPage/PioneerCard3D.tsx b/src/components/LandingPage/PioneerCard3D.tsx new file mode 100644 index 000000000..dd53dcc05 --- /dev/null +++ b/src/components/LandingPage/PioneerCard3D.tsx @@ -0,0 +1,158 @@ +'use client' +import { motion, useMotionValue, useTransform, useSpring, useMotionTemplate } from 'framer-motion' +import Image from 'next/image' +import { CARD_GRADIENT_4, CARD_GRADIENT_5, CARD_GRADIENT_9, CARD_GRADIENT_10 } from '@/assets/cards' +import { useRef, useState, useEffect, useCallback } from 'react' + +const CARD_BACKGROUNDS = [CARD_GRADIENT_4, CARD_GRADIENT_9, CARD_GRADIENT_10, CARD_GRADIENT_5] +const CYCLE_INTERVAL = 3000 + +interface PioneerCard3DProps { + className?: string +} + +const PioneerCard3D = ({ className }: PioneerCard3DProps) => { + const cardRef = useRef<HTMLDivElement>(null) + const [activeIndex, setActiveIndex] = useState(0) + const timerRef = useRef<NodeJS.Timeout | null>(null) + + const x = useMotionValue(0) + const y = useMotionValue(0) + const isInteractingRef = useRef(false) + const resumeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null) + + const rotateX = useTransform(y, [-100, 100], [12, -12]) + const rotateY = useTransform(x, [-100, 100], [-12, 12]) + + const shadowX = useTransform(x, [-100, 100], [14, -2]) + const shadowY = useTransform(y, [-100, 100], [14, -2]) + + const springRotateX = useSpring(rotateX, { stiffness: 200, damping: 25 }) + const springRotateY = useSpring(rotateY, { stiffness: 200, damping: 25 }) + const springShadowX = useSpring(shadowX, { stiffness: 200, damping: 25 }) + const springShadowY = useSpring(shadowY, { stiffness: 200, damping: 25 }) + + const boxShadow = useMotionTemplate`${springShadowX}px ${springShadowY}px 0 #000000` + + const advance = useCallback(() => { + setActiveIndex((prev) => (prev + 1) % CARD_BACKGROUNDS.length) + }, []) + + const resetTimer = useCallback(() => { + if (timerRef.current) clearInterval(timerRef.current) + timerRef.current = setInterval(advance, CYCLE_INTERVAL) + }, [advance]) + + useEffect(() => { + resetTimer() + return () => { + if (timerRef.current) clearInterval(timerRef.current) + } + }, [resetTimer]) + + // Mobile auto-oscillation: slow sine wave to show off parallax without interaction + // Pauses when user touches/clicks the card and resumes 2s after release + useEffect(() => { + const isMobile = window.matchMedia('(max-width: 768px)').matches + if (!isMobile) return + + let frame: number + const startTime = Date.now() + + const animate = () => { + if (!isInteractingRef.current) { + const elapsed = (Date.now() - startTime) / 1000 + // gentle figure-8 pattern using offset sine waves + x.set(Math.sin(elapsed * 0.4) * 60) + y.set(Math.sin(elapsed * 0.3 + 1) * 40) + } + frame = requestAnimationFrame(animate) + } + + frame = requestAnimationFrame(animate) + return () => cancelAnimationFrame(frame) + }, [x, y]) + + const pauseOscillation = useCallback(() => { + isInteractingRef.current = true + if (resumeTimerRef.current) clearTimeout(resumeTimerRef.current) + }, []) + + const resumeOscillation = useCallback(() => { + if (resumeTimerRef.current) clearTimeout(resumeTimerRef.current) + resumeTimerRef.current = setTimeout(() => { + isInteractingRef.current = false + }, 2000) + }, []) + + useEffect(() => { + return () => { + if (resumeTimerRef.current) clearTimeout(resumeTimerRef.current) + } + }, []) + + const handleClick = () => { + advance() + resetTimer() + } + + const handlePointerDown = (e: React.PointerEvent<HTMLDivElement>) => { + pauseOscillation() + if (!cardRef.current) return + const rect = cardRef.current.getBoundingClientRect() + x.set(e.clientX - rect.left - rect.width / 2) + y.set(e.clientY - rect.top - rect.height / 2) + } + + const handlePointerMove = (e: React.PointerEvent<HTMLDivElement>) => { + if (!cardRef.current) return + const rect = cardRef.current.getBoundingClientRect() + x.set(e.clientX - rect.left - rect.width / 2) + y.set(e.clientY - rect.top - rect.height / 2) + } + + const handlePointerLeave = () => { + x.set(0) + y.set(0) + resumeOscillation() + } + + return ( + <div + ref={cardRef} + className={`inline-block w-full max-w-96 ${className || ''}`} + onPointerDown={handlePointerDown} + onPointerMove={handlePointerMove} + onPointerLeave={handlePointerLeave} + style={{ perspective: '1000px' }} + > + <motion.div + className="relative aspect-[384/240] w-full cursor-pointer overflow-hidden" + style={{ + rotateX: springRotateX as unknown as number, + rotateY: springRotateY as unknown as number, + transformStyle: 'preserve-3d', + borderRadius: '5.35%', + border: '2px solid #000000', + backgroundColor: '#000000', + boxShadow, + }} + onClick={handleClick} + > + {/* All card images layered, only the active one is visible */} + {CARD_BACKGROUNDS.map((bg, i) => ( + <motion.div + key={i} + className="absolute -inset-px" + animate={{ opacity: i === activeIndex ? 1 : 0 }} + transition={{ duration: 0.6, ease: 'easeInOut' }} + > + <Image src={bg} alt="Card design" fill className="object-cover" priority /> + </motion.div> + ))} + </motion.div> + </div> + ) +} + +export default PioneerCard3D diff --git a/src/components/LandingPage/RegulatedRails.tsx b/src/components/LandingPage/RegulatedRails.tsx index 655b8415d..e1e391d68 100644 --- a/src/components/LandingPage/RegulatedRails.tsx +++ b/src/components/LandingPage/RegulatedRails.tsx @@ -1,4 +1,3 @@ -'use client' import Image from 'next/image' import { MarqueeWrapper } from '../Global/MarqueeWrapper' import { @@ -11,11 +10,10 @@ import { MERCADO_PAGO_ICON, PIX_ICON, WISE_ICON, + Star, } from '@/assets' -import { useEffect, useState } from 'react' -import { motion } from 'framer-motion' -import borderCloud from '@/assets/illustrations/border-cloud.svg' -import { Star } from '@/assets' +import { CloudsCss } from './CloudsCss' +import { AnimateOnView } from '@/components/Global/AnimateOnView' const bgColor = '#F9F4F0' @@ -31,74 +29,28 @@ const logos = [ { logo: WISE_ICON, alt: 'Wise' }, ] -export function RegulatedRails() { - const [screenWidth, setScreenWidth] = useState(typeof window !== 'undefined' ? window.innerWidth : 1200) - - useEffect(() => { - const handleResize = () => { - setScreenWidth(window.innerWidth) - } - - handleResize() - window.addEventListener('resize', handleResize) - return () => window.removeEventListener('resize', handleResize) - }, []) - - const createCloudAnimation = (side: 'left' | 'right', top: string, width: number, speed: number) => { - const vpWidth = screenWidth || 1080 - const totalDistance = vpWidth + width +const regulatedRailsClouds = [ + { top: '20%', width: 200, speed: '38s', direction: 'ltr' as const }, + { top: '60%', width: 220, speed: '34s', direction: 'rtl' as const }, +] - return { - initial: { x: side === 'left' ? -width : vpWidth }, - animate: { x: side === 'left' ? vpWidth : -width }, - transition: { - ease: 'linear', - duration: totalDistance / speed, - repeat: Infinity, - }, - } - } +export function RegulatedRails() { return ( - <section className="relative overflow-hidden py-20 text-n-1" style={{ backgroundColor: bgColor }}> - <div className="absolute left-0 top-0 h-full w-full overflow-hidden"> - {/* Animated clouds */} - <motion.img - src={borderCloud.src} - alt="Floating Border Cloud" - className="absolute left-0" - style={{ top: '20%', width: 200 }} - {...createCloudAnimation('left', '20%', 200, 35)} - /> - <motion.img - src={borderCloud.src} - alt="Floating Border Cloud" - className="absolute right-0" - style={{ top: '60%', width: 220 }} - {...createCloudAnimation('right', '60%', 220, 40)} - /> - </div> + <section + id="regulated-rails" + className="relative overflow-hidden py-20 text-n-1" + style={{ backgroundColor: bgColor }} + > + <CloudsCss clouds={regulatedRailsClouds} /> + <div className="relative max-w-5xl px-10 py-8 md:px-24 md:py-16"> - {/* Animated stars */} - <motion.img - src={Star.src} - alt="Floating Star" - width={50} - height={50} - className="absolute -right-72 -top-12" - initial={{ opacity: 0, translateY: 20, translateX: 5, rotate: 22 }} - whileInView={{ opacity: 1, translateY: 0, translateX: 0, rotate: 22 }} - transition={{ type: 'spring', damping: 5, delay: 0.2 }} - /> - <motion.img - src={Star.src} - alt="Floating Star" - width={50} - height={50} - className="absolute -right-0 -top-16 md:top-58" - initial={{ opacity: 0, translateY: 20, translateX: 5, rotate: 22 }} - whileInView={{ opacity: 1, translateY: 0, translateX: 0, rotate: 22 }} - transition={{ type: 'spring', damping: 5, delay: 0.6 }} - /> + <AnimateOnView className="absolute -right-72 -top-12" delay="0.2s" x="5px" rotate="22deg"> + <img src={Star.src} alt="" width={50} height={50} /> + </AnimateOnView> + <AnimateOnView className="absolute -right-0 -top-16 md:top-58" delay="0.6s" x="5px" rotate="22deg"> + <img src={Star.src} alt="" width={50} height={50} /> + </AnimateOnView> + <h1 className="font-roboto-flex-extrabold text-left text-[3.25rem] font-extraBlack !leading-[5rem] md:text-6xl lg:text-headingMedium"> REGULATED RAILS, SELF-CUSTODY CONTROL </h1> diff --git a/src/components/LandingPage/SendInSecondsCTA.tsx b/src/components/LandingPage/SendInSecondsCTA.tsx new file mode 100644 index 000000000..65be1b83d --- /dev/null +++ b/src/components/LandingPage/SendInSecondsCTA.tsx @@ -0,0 +1,34 @@ +'use client' + +import { motion } from 'framer-motion' +import { Button } from '@/components/0_Bruddle/Button' + +export function SendInSecondsCTA() { + return ( + <div className="relative mt-12 inline-block md:mt-24"> + <motion.div + className="relative" + initial={{ opacity: 0, translateY: 4, translateX: 0, rotate: 0.75 }} + animate={{ + opacity: 1, + translateY: 0, + translateX: 0, + rotate: 0, + scale: 1, + pointerEvents: 'auto' as const, + }} + whileHover={{ translateY: 6, translateX: 0, rotate: 0.75 }} + transition={{ type: 'spring', damping: 15 }} + > + <a href="/send"> + <Button + shadowSize="4" + className="bg-white px-7 py-3 text-base font-extrabold hover:bg-white/90 md:px-9 md:py-8 md:text-xl" + > + SEND NOW + </Button> + </a> + </motion.div> + </div> + ) +} diff --git a/src/components/LandingPage/TweetCarousel.tsx b/src/components/LandingPage/TweetCarousel.tsx index 5db714d10..452c2455c 100644 --- a/src/components/LandingPage/TweetCarousel.tsx +++ b/src/components/LandingPage/TweetCarousel.tsx @@ -334,7 +334,7 @@ const TweetCarousel = () => { if (columns.length === 0) return null return ( - <section className="w-full bg-primary-1 pb-10 pt-12 md:pb-14 md:pt-16"> + <section id="testimonials" className="w-full bg-primary-1 pb-10 pt-12 md:pb-14 md:pt-16"> <div className="mx-auto max-w-7xl px-4 pb-8"> <h2 className="font-roboto-flex-extrabold text-center text-[4rem] font-extraBlack text-n-1 lg:text-headingMedium"> WALL OF LOVE diff --git a/src/components/LandingPage/dropLink.tsx b/src/components/LandingPage/dropLink.tsx index 0f10006ce..a7fbea951 100644 --- a/src/components/LandingPage/dropLink.tsx +++ b/src/components/LandingPage/dropLink.tsx @@ -12,6 +12,7 @@ const businessBgColor = '#90A8ED' export function DropLink() { return ( <section + id="drop-link" className="flex min-h-[500px] items-center justify-center px-4 py-16 text-n-1 md:min-h-[700px]" style={{ backgroundColor: businessBgColor }} > diff --git a/src/components/LandingPage/faq.tsx b/src/components/LandingPage/faq.tsx index 27ec5e5de..2bf3313d5 100644 --- a/src/components/LandingPage/faq.tsx +++ b/src/components/LandingPage/faq.tsx @@ -14,6 +14,7 @@ type LocalFAQsProps = FAQsProps & { export function FAQs({ heading, questions, marquee = { visible: false } }: LocalFAQsProps) { return ( <div + id="faq" className="bg-secondary overflow-x-hidden" style={{ backgroundImage: `url(${PeanutsBG.src})`, diff --git a/src/components/LandingPage/hero.tsx b/src/components/LandingPage/hero.tsx index eb851376d..c54f977d0 100644 --- a/src/components/LandingPage/hero.tsx +++ b/src/components/LandingPage/hero.tsx @@ -1,10 +1,9 @@ -import { ButterySmoothGlobalMoney, PeanutGuyGIF, Sparkle } from '@/assets' +'use client' + +import { ButterySmoothGlobalMoney, PeanutGuyGIF, Star } from '@/assets' import { motion } from 'framer-motion' -import { useEffect, useState } from 'react' -import { twMerge } from 'tailwind-merge' -import { CloudImages, HeroImages } from './imageAssets' -import Image from 'next/image' import { Button } from '@/components/0_Bruddle/Button' +import { CloudsCss } from './CloudsCss' type CTAButton = { label: string @@ -20,7 +19,6 @@ type HeroProps = { buttonScale?: number } -// Helper functions moved outside component for better performance const getInitialAnimation = (variant: 'primary' | 'secondary') => ({ opacity: 0, translateY: 4, @@ -31,7 +29,7 @@ const getInitialAnimation = (variant: 'primary' | 'secondary') => ({ const getAnimateAnimation = (variant: 'primary' | 'secondary', buttonVisible?: boolean, buttonScale?: number) => ({ opacity: buttonVisible ? 1 : 0, translateY: buttonVisible ? 0 : 20, - translateX: buttonVisible ? (variant === 'primary' ? 0 : 0) : 20, + translateX: buttonVisible ? 0 : 20, rotate: buttonVisible ? 0 : 1, scale: buttonScale || 1, pointerEvents: buttonVisible ? ('auto' as const) : ('none' as const), @@ -48,75 +46,8 @@ const transitionConfig = { type: 'spring', damping: 15 } as const const getButtonContainerClasses = (variant: 'primary' | 'secondary') => `relative z-20 mt-8 md:mt-12 flex flex-col items-center justify-center ${variant === 'primary' ? 'mx-auto w-fit' : 'right-[calc(50%-120px)]'}` -const getButtonClasses = (variant: 'primary' | 'secondary') => - `${variant === 'primary' ? 'btn bg-white fill-n-1 text-n-1 hover:bg-white/90' : 'btn-yellow'} px-7 md:px-9 py-3 md:py-8 text-base md:text-xl btn-shadow-primary-4` - -const renderSparkle = (variant: 'primary' | 'secondary') => - variant === 'primary' && ( - <img - src={Sparkle.src} - className={twMerge('absolute -right-4 -top-4 h-auto w-5 sm:-right-5 sm:-top-5 sm:w-6')} - alt="Sparkle" - /> - ) - -const renderArrows = (variant: 'primary' | 'secondary', arrowOpacity: number, buttonVisible?: boolean) => - variant === 'primary' && ( - <> - <Image - src="/arrows/small-arrow.svg" - alt="Arrow pointing to button" - width={32} - height={16} - className="absolute -left-8 -top-5 block -translate-y-1/2 transform md:hidden" - style={{ opacity: buttonVisible ? arrowOpacity : 0, rotate: '8deg' }} - /> - <Image - src="/arrows/small-arrow.svg" - alt="Arrow pointing to button" - width={32} - height={16} - className="absolute -right-8 -top-5 block -translate-y-1/2 scale-x-[-1] transform md:hidden" - style={{ opacity: buttonVisible ? arrowOpacity : 0, rotate: '-8deg' }} - /> - <Image - src="/arrows/small-arrow.svg" - alt="Arrow pointing to button" - width={40} - height={20} - className="absolute -left-10 -top-6 hidden -translate-y-1/2 transform md:block" - style={{ opacity: buttonVisible ? arrowOpacity : 0, rotate: '8deg' }} - /> - <Image - src="/arrows/small-arrow.svg" - alt="Arrow pointing to button" - width={40} - height={20} - className="absolute -right-10 -top-6 hidden -translate-y-1/2 scale-x-[-1] transform md:block" - style={{ opacity: buttonVisible ? arrowOpacity : 0, rotate: '-8deg' }} - /> - </> - ) - export function Hero({ primaryCta, secondaryCta, buttonVisible, buttonScale = 1 }: HeroProps) { - const [screenWidth, setScreenWidth] = useState(typeof window !== 'undefined' ? window.innerWidth : 1200) - - useEffect(() => { - const handleResize = () => { - setScreenWidth(window.innerWidth) - } - - handleResize() - window.addEventListener('resize', handleResize) - - return () => { - window.removeEventListener('resize', handleResize) - } - }, []) - const renderCTAButton = (cta: CTAButton, variant: 'primary' | 'secondary') => { - const arrowOpacity = 1 // Always visible - return ( <motion.div className={getButtonContainerClasses(variant)} @@ -125,8 +56,6 @@ export function Hero({ primaryCta, secondaryCta, buttonVisible, buttonScale = 1 whileHover={getHoverAnimation(variant)} transition={transitionConfig} > - {/* {renderSparkle(variant)} */} - <a href={cta.href} target={cta.isExternal ? '_blank' : undefined} @@ -142,15 +71,16 @@ export function Hero({ primaryCta, secondaryCta, buttonVisible, buttonScale = 1 {cta.subtext && ( <span className="mt-2 block text-center text-sm italic text-n-1 md:text-base">{cta.subtext}</span> )} - - {renderArrows(variant, arrowOpacity, buttonVisible)} </motion.div> ) } return ( - <section className="relative flex min-h-[85vh] w-full flex-col items-center justify-between bg-primary-1 px-4 py-4 xl:h-fit xl:justify-center"> - <CloudImages screenWidth={screenWidth} /> + <section + id="hero" + className="relative flex min-h-[85vh] w-full flex-col items-center justify-between bg-primary-1 px-4 py-4 xl:h-fit xl:justify-center" + > + <CloudsCss /> <div className="relative mt-10 w-full md:mt-0"> <img src={ButterySmoothGlobalMoney.src} @@ -158,7 +88,22 @@ export function Hero({ primaryCta, secondaryCta, buttonVisible, buttonScale = 1 alt="Buttery Smooth Global Money" /> - <HeroImages /> + <motion.img + initial={{ opacity: 0, translateY: 20, translateX: 5 }} + whileInView={{ opacity: 1, translateY: 0, translateX: 0 }} + transition={{ type: 'spring', damping: 5 }} + src={Star.src} + alt="" + className="absolute bottom-[-4%] left-[1%] w-8 sm:bottom-[11%] sm:left-[12%] md:bottom-[18%] md:left-[5%] md:w-12" + /> + <motion.img + initial={{ opacity: 0, translateY: 28, translateX: -5 }} + whileInView={{ opacity: 1, translateY: 0, translateX: 0 }} + transition={{ type: 'spring', damping: 5 }} + src={Star.src} + alt="" + className="absolute right-[1.5%] top-[-12%] w-8 sm:right-[6%] sm:top-[8%] md:right-[5%] md:top-[8%] md:w-12 lg:right-[10%]" + /> </div> <img src={PeanutGuyGIF.src} @@ -166,7 +111,7 @@ export function Hero({ primaryCta, secondaryCta, buttonVisible, buttonScale = 1 alt="Peanut Guy" /> - <div className="relative mb-4 flex w-full flex-col items-center justify-center md:mb-0"> + <div className="relative z-20 mb-4 flex w-full flex-col items-center justify-center md:mb-0"> <h2 className="font-roboto-flex-extrabold mt-18 text-center text-[2.375rem] font-extraBlack text-black md:text-heading"> TAP. SEND. ANYWHERE </h2> @@ -180,7 +125,22 @@ export function Hero({ primaryCta, secondaryCta, buttonVisible, buttonScale = 1 </span> {primaryCta && renderCTAButton(primaryCta, 'primary')} {secondaryCta && renderCTAButton(secondaryCta, 'secondary')} - <HeroImages /> + <motion.img + initial={{ opacity: 0, translateY: 20, translateX: 5 }} + whileInView={{ opacity: 1, translateY: 0, translateX: 0 }} + transition={{ type: 'spring', damping: 5 }} + src={Star.src} + alt="" + className="absolute bottom-[-4%] left-[1%] w-8 sm:bottom-[11%] sm:left-[12%] md:bottom-[18%] md:left-[5%] md:w-12" + /> + <motion.img + initial={{ opacity: 0, translateY: 28, translateX: -5 }} + whileInView={{ opacity: 1, translateY: 0, translateX: 0 }} + transition={{ type: 'spring', damping: 5 }} + src={Star.src} + alt="" + className="absolute right-[1.5%] top-[-12%] w-8 sm:right-[6%] sm:top-[8%] md:right-[5%] md:top-[8%] md:w-12 lg:right-[10%]" + /> </div> </section> ) diff --git a/src/components/LandingPage/imageAssets.tsx b/src/components/LandingPage/imageAssets.tsx deleted file mode 100644 index 36f244ba8..000000000 --- a/src/components/LandingPage/imageAssets.tsx +++ /dev/null @@ -1,124 +0,0 @@ -'use client' -import { Star } from '@/assets' -import { motion } from 'framer-motion' -import borderCloud from '@/assets/illustrations/border-cloud.svg' - -const CloudAnimation = ({ - top, - imageSrc, - styleMod, - screenWidth, - width = 200, - speed = 45, - delay = 0, - direction = 'left-to-right', -}: { - top: string - imageSrc: string - styleMod?: string - screenWidth?: number - width?: number - speed?: number - delay?: number - direction?: 'left-to-right' | 'right-to-left' -}) => { - const vpWidth = screenWidth || 1080 - const totalDistance = vpWidth + width - - return ( - <motion.img - src={imageSrc} - alt="Floating Cloud" - className={`absolute left-0 ${styleMod || ''}`} - style={{ top, width }} - initial={{ - x: direction === 'left-to-right' ? -width : vpWidth, - }} - animate={{ - x: direction === 'left-to-right' ? vpWidth : -width, - }} - transition={{ - ease: 'linear', - duration: totalDistance / speed, - repeat: Infinity, - delay: delay, - }} - /> - ) -} - -export const CloudImages = ({ screenWidth }: { screenWidth: number }) => { - return ( - <div className="absolute left-0 top-0 h-full w-full overflow-hidden"> - {/* 3 clouds moving left-to-right */} - <CloudAnimation - top="10%" - imageSrc={borderCloud.src} - screenWidth={screenWidth} - width={180} - speed={30} - delay={0} - direction="left-to-right" - /> - <CloudAnimation - top="45%" - imageSrc={borderCloud.src} - screenWidth={screenWidth} - width={220} - speed={40} - delay={0} - direction="left-to-right" - /> - <CloudAnimation - top="80%" - imageSrc={borderCloud.src} - screenWidth={screenWidth} - width={210} - speed={38} - delay={0} - direction="left-to-right" - /> - - {/* 2 clouds moving right-to-left */} - <CloudAnimation - top="25%" - imageSrc={borderCloud.src} - screenWidth={screenWidth} - width={200} - speed={35} - delay={0} - direction="right-to-left" - /> - <CloudAnimation - top="65%" - imageSrc={borderCloud.src} - screenWidth={screenWidth} - width={190} - speed={32} - delay={0} - direction="right-to-left" - /> - </div> - ) -} - -export const HeroImages = () => { - return ( - <> - <motion.img - initial={{ opacity: 0, translateY: 20, translateX: 5 }} - whileInView={{ opacity: 1, translateY: 0, translateX: 0 }} - transition={{ type: 'spring', damping: 5 }} - src={Star.src} - className="absolute bottom-[-4%] left-[1%] w-8 sm:bottom-[11%] sm:left-[12%] md:bottom-[18%] md:left-[5%] md:w-12" - /> - <motion.img - initial={{ opacity: 0, translateY: 28, translateX: -5 }} - whileInView={{ opacity: 1, translateY: 0, translateX: 0 }} - transition={{ type: 'spring', damping: 5 }} - src={Star.src} - className="absolute right-[1.5%] top-[-12%] w-8 sm:right-[6%] sm:top-[8%] md:right-[5%] md:top-[8%] md:w-12 lg:right-[10%]" - /> - </> - ) -} diff --git a/src/components/LandingPage/index.ts b/src/components/LandingPage/index.ts index 3288a182e..417673b2a 100644 --- a/src/components/LandingPage/index.ts +++ b/src/components/LandingPage/index.ts @@ -7,3 +7,4 @@ export * from './securityBuiltIn' export * from './sendInSeconds' export * from './yourMoney' export * from './RegulatedRails' +export * from './CardPioneers' diff --git a/src/components/LandingPage/landingPageData.ts b/src/components/LandingPage/landingPageData.ts new file mode 100644 index 000000000..e3750c386 --- /dev/null +++ b/src/components/LandingPage/landingPageData.ts @@ -0,0 +1,54 @@ +export const heroConfig = { + primaryCta: { + label: 'SIGN UP', + href: '/setup', + subtext: 'currently in waitlist', + }, +} + +export const marqueeMessages = ['No fees', 'Instant', '24/7', 'USD', 'EUR', 'USDT/USDC', 'GLOBAL', 'SELF-CUSTODIAL'] + +export const faqData = { + heading: 'Faqs', + questions: [ + { + id: '0', + question: 'Why Peanut?', + answer: `It's time to take control of your money. No banks, no borders. Just buttery smooth global money.`, + }, + { + id: '1', + question: 'What is Peanut?', + answer: `Peanut is the easiest way to send digital dollars to anyone anywhere. Peanut's tech is powered by cutting-edge cryptography and the security of biometric user authentication as well as a network of modern and fully licensed banking providers.`, + }, + { + id: '2', + question: 'Do I have to KYC?', + answer: `No! You can use core functionalities (like sending and receiving money) without KYC. Bank connections, however, trigger a one\u2011time check handled by Persona, a SOC2 Type 2 certified and GDPR compliant ISO 27001\u2013certified provider used by brands like Square and Robinhood. Your documents remain locked away with Persona, not Peanut, and Peanut only gets a yes/no response, keeping your privacy intact.`, + }, + { + id: '3', + question: 'Could a thief drain my wallet if they stole my phone?', + answer: `Not without your face or fingerprint. The passkey is sealed in the Secure Enclave of your phone and never exported. It\u2019s secured by NIST\u2011recommended P\u2011256 Elliptic Curve cryptography. Defeating that would be tougher than guessing all 10\u00B9\u2070\u00B9\u2070 combinations of a 30\u2011character password made of emoji.\nThis means that neither Peanut or even regulators could freeze, us or you to hand over your account, because we can\u2019t hand over what we don\u2019t have. Your key never touches our servers; compliance requests only see cryptographic and encrypted signatures. Cracking those signatures would demand more energy than the Sun outputs in a full century.`, + }, + { + id: '4', + question: `What happens to my funds if Peanut\u2019s servers were breached?`, + answer: "Nothing. Your funds sit in your self\u2011custodied smart account (not on Peanut servers). Every transfer still needs a signature from your biometric passkey, so a server\u2011side attacker has no way to move a cent without the private key sealed in your device's Secure Enclave. Even if Peanut were offline, you could point any ERC\u20114337\u2011compatible wallet at your smart account and recover access independently.", + }, + { + id: '5', + question: 'How does Peanut make money?', + answer: 'We plan to charge merchants for accepting Peanut as a payment method, whilst still being much cheaper than VISA and Mastercard. For users, we only charge minimal amounts!', + }, + { + id: '6', + question: 'My question is not here', + answer: 'Check out our full FAQ page at https://peanutprotocol.notion.site/FAQ-2a4838117579805dad62ff47c9d2eb7a or visit our support page at https://peanut.me/support for more help.', + }, + ], + marquee: { + visible: false, + message: 'Peanut', + }, +} diff --git a/src/components/LandingPage/marquee.tsx b/src/components/LandingPage/marquee.tsx index e8922fad9..764c591c1 100644 --- a/src/components/LandingPage/marquee.tsx +++ b/src/components/LandingPage/marquee.tsx @@ -10,7 +10,7 @@ type MarqueeProps = { export function Marquee({ visible = true, - message = ['No fees', 'Instant', '24/7', 'Dollars', 'Fiat / Crypto'], + message = ['No fees', 'Instant', '24/7', 'Dollars', 'USDT/USDC'], imageSrc = HandThumbsUp.src, backgroundColor = 'bg-secondary-1', }: MarqueeProps) { diff --git a/src/components/LandingPage/noFees.tsx b/src/components/LandingPage/noFees.tsx index 4b830ac6c..11ed75983 100644 --- a/src/components/LandingPage/noFees.tsx +++ b/src/components/LandingPage/noFees.tsx @@ -63,7 +63,10 @@ export function NoFees({ className }: { className?: string }) { } return ( - <section className={twMerge('relative overflow-hidden bg-secondary-3 px-4 py-24 md:py-14', className)}> + <section + id="no-fees" + className={twMerge('relative overflow-hidden bg-secondary-3 px-4 py-24 md:py-14', className)} + > <div className="absolute left-0 top-0 h-full w-full overflow-hidden"> {/* Animated clouds */} <motion.img diff --git a/src/components/LandingPage/securityBuiltIn.tsx b/src/components/LandingPage/securityBuiltIn.tsx index 5f48b8d82..b139439e6 100644 --- a/src/components/LandingPage/securityBuiltIn.tsx +++ b/src/components/LandingPage/securityBuiltIn.tsx @@ -48,7 +48,7 @@ const features: Feature[] = [ export function SecurityBuiltIn() { return ( - <section className="bg-primary-1 px-4 py-16 text-n-1 md:py-40"> + <section id="security" className="bg-primary-1 px-4 py-16 text-n-1 md:py-40"> <div className="mx-auto max-w-7xl"> <div className="mb-12 text-center md:mb-16 md:text-left"> <h1 className="font-roboto-flex-extrabold text-left text-heading font-extraBlack md:text-6xl lg:text-heading"> diff --git a/src/components/LandingPage/sendInSeconds.tsx b/src/components/LandingPage/sendInSeconds.tsx index a83c36602..15d58efab 100644 --- a/src/components/LandingPage/sendInSeconds.tsx +++ b/src/components/LandingPage/sendInSeconds.tsx @@ -1,186 +1,56 @@ -import { useEffect, useState } from 'react' -import { motion } from 'framer-motion' import Image from 'next/image' -import borderCloud from '@/assets/illustrations/border-cloud.svg' import exclamations from '@/assets/illustrations/exclamations.svg' import payZeroFees from '@/assets/illustrations/pay-zero-fees.svg' import mobileSendInSeconds from '@/assets/illustrations/mobile-send-in-seconds.svg' -import { Star, Sparkle } from '@/assets' -import { Button } from '@/components/0_Bruddle/Button' +import { Star } from '@/assets' +import { CloudsCss } from './CloudsCss' +import { AnimateOnView } from '@/components/Global/AnimateOnView' +import { SendInSecondsCTA } from './SendInSecondsCTA' + +const sendInSecondsClouds = [ + { top: '15%', width: 320, speed: '40s', direction: 'ltr' as const }, + { top: '40%', width: 200, speed: '34s', direction: 'rtl' as const }, + { top: '70%', width: 180, speed: '30s', direction: 'ltr' as const }, + { top: '80%', width: 320, speed: '46s', direction: 'rtl' as const }, +] + +const starConfigs = [ + { + className: 'absolute right-10 top-10 md:right-1/4 md:top-20', + width: 50, + height: 50, + delay: '0.2s', + x: '5px', + rotate: '45deg', + }, + { className: 'absolute bottom-16 left-1/3', width: 40, height: 40, delay: '0.4s', x: '-5px', rotate: '-10deg' }, + { + className: 'absolute bottom-20 left-[2rem] md:bottom-72 md:right-[14rem]', + width: 50, + height: 50, + delay: '0.6s', + x: '5px', + rotate: '-22deg', + }, + { className: 'absolute left-[20rem] top-72', width: 60, height: 60, delay: '0.8s', x: '-5px', rotate: '12deg' }, +] export function SendInSeconds() { - const [screenWidth, setScreenWidth] = useState(typeof window !== 'undefined' ? window.innerWidth : 1200) - - useEffect(() => { - const handleResize = () => { - setScreenWidth(window.innerWidth) - } - - handleResize() - window.addEventListener('resize', handleResize) - return () => window.removeEventListener('resize', handleResize) - }, []) - - const createCloudAnimation = (side: 'left' | 'right', width: number, speed: number) => { - const vpWidth = screenWidth || 1080 - const totalDistance = vpWidth + width - - return { - initial: { x: side === 'left' ? -width : vpWidth }, - animate: { x: side === 'left' ? vpWidth : -width }, - transition: { - ease: 'linear', - duration: totalDistance / speed, - repeat: Infinity, - }, - } - } - - // Button helper functions adapted from hero.tsx - const getInitialAnimation = () => ({ - opacity: 0, - translateY: 4, - translateX: 0, - rotate: 0.75, - }) - - const getAnimateAnimation = (buttonVisible: boolean, buttonScale: number = 1) => ({ - opacity: buttonVisible ? 1 : 0, - translateY: buttonVisible ? 0 : 20, - translateX: buttonVisible ? 0 : 20, - rotate: buttonVisible ? 0 : 1, - scale: buttonScale, - pointerEvents: buttonVisible ? ('auto' as const) : ('none' as const), - }) - - const getHoverAnimation = () => ({ - translateY: 6, - translateX: 0, - rotate: 0.75, - }) - - const transitionConfig = { type: 'spring', damping: 15 } as const - - const getButtonClasses = () => - `btn bg-white fill-n-1 text-n-1 hover:bg-white/90 px-9 md:px-11 py-4 md:py-10 text-lg md:text-2xl btn-shadow-primary-4` - - const renderSparkle = () => ( - <img - src={Sparkle.src} - className="absolute -right-4 -top-4 h-auto w-5 sm:-right-5 sm:-top-5 sm:w-6" - alt="Sparkle" - /> - ) - - const renderArrows = () => ( - <> - <Image - src="/arrows/small-arrow.svg" - alt="Arrow pointing to button" - width={48} - height={24} - className="absolute -left-13 -top-7 block -translate-y-1/2 transform md:hidden" - /> - <Image - src="/arrows/small-arrow.svg" - alt="Arrow pointing to button" - width={48} - height={24} - className="absolute -right-13 -top-7 block -translate-y-1/2 scale-x-[-1] transform md:hidden" - /> - <Image - src="/arrows/small-arrow.svg" - alt="Arrow pointing to button" - width={64} - height={32} - className="absolute -left-18 -top-7 hidden -translate-y-1/2 transform md:block" - /> - <Image - src="/arrows/small-arrow.svg" - alt="Arrow pointing to button" - width={64} - height={32} - className="absolute -right-18 -top-7 hidden -translate-y-1/2 scale-x-[-1] transform md:block" - /> - </> - ) - return ( - <section className="relative overflow-hidden bg-secondary-1 px-4 py-16 text-n-1 md:py-32"> - {/* Decorative clouds, stars, and exclamations */} - <div className="absolute left-0 top-0 h-full w-full overflow-hidden"> - {/* Animated clouds */} - <motion.img - src={borderCloud.src} - alt="Floating Border Cloud" - className="absolute left-0" - style={{ top: '15%', width: 320 }} - {...createCloudAnimation('left', 320, 35)} - /> - <motion.img - src={borderCloud.src} - alt="Floating Border Cloud" - className="absolute right-0" - style={{ top: '40%', width: 200 }} - {...createCloudAnimation('right', 200, 40)} - /> - <motion.img - src={borderCloud.src} - alt="Floating Border Cloud" - className="absolute left-0" - style={{ top: '70%', width: 180 }} - {...createCloudAnimation('left', 180, 45)} - /> - <motion.img - src={borderCloud.src} - alt="Floating Border Cloud" - className="absolute right-0" - style={{ top: '80%', width: 320 }} - {...createCloudAnimation('right', 320, 30)} - /> - </div> - - {/* Animated stars and exclamations */} - <motion.img - src={Star.src} - alt="Floating Star" - width={50} - height={50} - className="absolute right-10 top-10 md:right-1/4 md:top-20" - initial={{ opacity: 0, translateY: 20, translateX: 5, rotate: 45 }} - whileInView={{ opacity: 1, translateY: 0, translateX: 0, rotate: 45 }} - transition={{ type: 'spring', damping: 5, delay: 0.2 }} - /> - <motion.img - src={Star.src} - alt="Floating Star" - width={40} - height={40} - className="absolute bottom-16 left-1/3" - initial={{ opacity: 0, translateY: 25, translateX: -5, rotate: -10 }} - whileInView={{ opacity: 1, translateY: 0, translateX: 0, rotate: -10 }} - transition={{ type: 'spring', damping: 5, delay: 0.4 }} - /> - <motion.img - src={Star.src} - alt="Floating Star" - width={50} - height={50} - className="absolute bottom-20 left-[2rem] md:bottom-72 md:right-[14rem]" - initial={{ opacity: 0, translateY: 18, translateX: 5, rotate: -22 }} - whileInView={{ opacity: 1, translateY: 0, translateX: 0, rotate: -22 }} - transition={{ type: 'spring', damping: 5, delay: 0.6 }} - /> - <motion.img - src={Star.src} - alt="Floating Star" - width={60} - height={60} - className="absolute left-[20rem] top-72" - initial={{ opacity: 0, translateY: 22, translateX: -5, rotate: 12 }} - whileInView={{ opacity: 1, translateY: 0, translateX: 0, rotate: 12 }} - transition={{ type: 'spring', damping: 5, delay: 0.8 }} - /> + <section id="send-in-seconds" className="relative overflow-hidden bg-secondary-1 px-4 py-16 text-n-1 md:py-32"> + <CloudsCss clouds={sendInSecondsClouds} /> + + {starConfigs.map((config, i) => ( + <AnimateOnView + key={i} + className={config.className} + delay={config.delay} + x={config.x} + rotate={config.rotate} + > + <img src={Star.src} alt="" width={config.width} height={config.height} /> + </AnimateOnView> + ))} {/* Exclamations */} <Image @@ -221,26 +91,8 @@ export function SendInSeconds() { ALWAYS UNDER YOUR CONTROL. </p> - {/* Fixed CTA Button */} - <div className="relative mt-12 inline-block md:mt-24"> - <motion.div - className="relative" - initial={getInitialAnimation()} - animate={getAnimateAnimation(true, 1)} - whileHover={getHoverAnimation()} - transition={transitionConfig} - > - <a href="/send"> - <Button - shadowSize="4" - className="bg-white px-7 py-3 text-base font-extrabold hover:bg-white/90 md:px-9 md:py-8 md:text-xl" - > - SEND NOW - </Button> - </a> - </motion.div> - - {renderArrows()} + <div id="sticky-button-target"> + <SendInSecondsCTA /> </div> </div> </section> diff --git a/src/components/LandingPage/yourMoney.tsx b/src/components/LandingPage/yourMoney.tsx index a5875c6c5..8d26169da 100644 --- a/src/components/LandingPage/yourMoney.tsx +++ b/src/components/LandingPage/yourMoney.tsx @@ -4,7 +4,7 @@ import { Button } from '@/components/0_Bruddle/Button' export function YourMoney() { return ( - <section className="bg-secondary-1 px-4 py-12 text-n-1 md:py-16"> + <section id="global-cash" className="bg-secondary-1 px-4 py-12 text-n-1 md:py-16"> <div className="mx-auto flex max-w-7xl flex-col items-center justify-between gap-7 md:flex-row"> <div className="mb-12 mt-4 w-full space-y-6 text-center md:mb-20 md:mt-6 md:w-1/2 md:text-left"> <h1 className="font-roboto-flex-extrabold text-6xl font-extraBlack md:text-6xl lg:text-headingMedium"> diff --git a/src/components/Marketing/BlogCard.tsx b/src/components/Marketing/BlogCard.tsx new file mode 100644 index 000000000..87e3573c2 --- /dev/null +++ b/src/components/Marketing/BlogCard.tsx @@ -0,0 +1,32 @@ +import Link from 'next/link' +import { Card } from '@/components/0_Bruddle/Card' + +interface BlogCardProps { + slug: string + title: string + excerpt: string + date: string + category?: string + hrefPrefix?: string +} + +export function BlogCard({ slug, title, excerpt, date, category, hrefPrefix = '/blog' }: BlogCardProps) { + const safeSlug = encodeURIComponent(slug) + return ( + <Link href={`${hrefPrefix}/${safeSlug}`}> + <Card + shadowSize="4" + className="h-full p-5 transition-all hover:shadow-primary-6 hover:-translate-x-1 hover:-translate-y-1" + > + {category && ( + <span className="mb-2 inline-block rounded-sm bg-primary-1/20 px-2 py-0.5 text-xs font-semibold"> + {category} + </span> + )} + <h3 className="text-lg font-bold leading-snug">{title}</h3> + <p className="mt-2 line-clamp-3 text-sm text-black/70">{excerpt}</p> + <time className="mt-3 block text-xs text-black/50">{date}</time> + </Card> + </Link> + ) +} diff --git a/src/components/Marketing/ComparisonTable.tsx b/src/components/Marketing/ComparisonTable.tsx new file mode 100644 index 000000000..abe0bca8f --- /dev/null +++ b/src/components/Marketing/ComparisonTable.tsx @@ -0,0 +1,32 @@ +import { Card } from '@/components/0_Bruddle/Card' + +interface ComparisonTableProps { + peanutName?: string + competitorName: string + rows: Array<{ feature: string; peanut: string; competitor: string }> +} + +export function ComparisonTable({ peanutName = 'Peanut', competitorName, rows }: ComparisonTableProps) { + return ( + <Card shadowSize="4" className="overflow-hidden"> + <table className="w-full text-left text-sm"> + <thead> + <tr className="border-b border-n-1 bg-primary-1/20"> + <th className="px-4 py-3 font-semibold">Feature</th> + <th className="px-4 py-3 font-bold">{peanutName}</th> + <th className="px-4 py-3 font-semibold">{competitorName}</th> + </tr> + </thead> + <tbody> + {rows.map((row, i) => ( + <tr key={i} className={i % 2 === 1 ? 'bg-primary-3/30' : ''}> + <td className="border-b border-n-1/20 px-4 py-3 font-medium">{row.feature}</td> + <td className="border-b border-n-1/20 bg-primary-1/10 px-4 py-3">{row.peanut}</td> + <td className="border-b border-n-1/20 px-4 py-3">{row.competitor}</td> + </tr> + ))} + </tbody> + </table> + </Card> + ) +} diff --git a/src/components/Marketing/ContentPage.tsx b/src/components/Marketing/ContentPage.tsx new file mode 100644 index 000000000..61981a1e8 --- /dev/null +++ b/src/components/Marketing/ContentPage.tsx @@ -0,0 +1,60 @@ +import type { ReactNode } from 'react' +import Link from 'next/link' +import { JsonLd } from './JsonLd' +import { BASE_URL } from '@/constants/general.consts' +import { MarketingErrorBoundary } from './MarketingErrorBoundary' + +interface ContentPageProps { + /** Compiled MDX content element */ + children: ReactNode + /** Breadcrumb items: [{name, href}] */ + breadcrumbs: Array<{ name: string; href: string }> +} + +/** + * Universal wrapper for MDX-rendered marketing pages. + * Handles BreadcrumbList JSON-LD + visible breadcrumb nav. + * The MDX body owns all layout (Hero is full-bleed, prose sections are contained). + */ +export function ContentPage({ children, breadcrumbs }: ContentPageProps) { + const breadcrumbSchema = { + '@context': 'https://schema.org', + '@type': 'BreadcrumbList', + itemListElement: breadcrumbs.map((crumb, i) => ({ + '@type': 'ListItem', + position: i + 1, + name: crumb.name, + item: crumb.href.startsWith('http') ? crumb.href : `${BASE_URL}${crumb.href}`, + })), + } + + return ( + <> + <JsonLd data={breadcrumbSchema} /> + <MarketingErrorBoundary> + <article className="content-page select-text bg-background"> + {children} + <nav aria-label="Breadcrumb" className="mx-auto max-w-[640px] px-6 pb-8 pt-4 md:px-4"> + <ol className="flex flex-wrap items-center gap-1 text-xs text-grey-1"> + {breadcrumbs.map((crumb, i) => ( + <li key={crumb.href} className="flex items-center gap-1"> + {i > 0 && <span aria-hidden>/</span>} + {i < breadcrumbs.length - 1 ? ( + <Link + href={crumb.href} + className="underline decoration-n-1/30 underline-offset-2 hover:text-n-1" + > + {crumb.name} + </Link> + ) : ( + <span className="font-medium text-n-1">{crumb.name}</span> + )} + </li> + ))} + </ol> + </nav> + </article> + </MarketingErrorBoundary> + </> + ) +} diff --git a/src/components/Marketing/DestinationGrid.tsx b/src/components/Marketing/DestinationGrid.tsx new file mode 100644 index 000000000..3f84b6e16 --- /dev/null +++ b/src/components/Marketing/DestinationGrid.tsx @@ -0,0 +1,86 @@ +import Link from 'next/link' +import { Card } from '@/components/0_Bruddle/Card' +import { COUNTRIES_SEO, getCountryName } from '@/data/seo' +import { getFlagUrl } from '@/constants/countryCurrencyMapping' +import { localizedPath } from '@/i18n/config' +import { CARD_HOVER } from '@/components/Marketing/mdx/constants' +import type { Locale } from '@/i18n/types' + +const SLUG_TO_ISO2: Record<string, string> = { + argentina: 'ar', + australia: 'au', + brazil: 'br', + canada: 'ca', + colombia: 'co', + 'costa-rica': 'cr', + indonesia: 'id', + japan: 'jp', + kenya: 'ke', + malaysia: 'my', + mexico: 'mx', + pakistan: 'pk', + peru: 'pe', + philippines: 'ph', + poland: 'pl', + portugal: 'pt', + singapore: 'sg', + 'south-africa': 'za', + spain: 'es', + sweden: 'se', + tanzania: 'tz', + thailand: 'th', + turkey: 'tr', + 'united-arab-emirates': 'ae', + 'united-kingdom': 'gb', + 'united-states': 'us', + vietnam: 'vn', +} + +interface DestinationGridProps { + /** If provided, only show these country slugs */ + countries?: string[] + /** Country slug to exclude from the grid */ + exclude?: string + title?: string + locale?: Locale +} + +export function DestinationGrid({ countries, exclude, title = 'Send money to', locale = 'en' }: DestinationGridProps) { + let slugs = countries ?? Object.keys(COUNTRIES_SEO) + if (exclude) slugs = slugs.filter((s) => s !== exclude) + + return ( + <section className="py-10 md:py-14"> + {title && <h2 className="mb-6 text-h2 font-bold md:text-h1">{title}</h2>} + <div className="grid grid-cols-2 gap-4 md:grid-cols-3"> + {slugs.map((slug) => { + const seo = COUNTRIES_SEO[slug] + if (!seo) return null + + const countryName = getCountryName(slug, locale) + const flagCode = SLUG_TO_ISO2[slug] + + return ( + <Link key={slug} href={localizedPath('send-money-to', locale, slug)}> + <Card shadowSize="4" className={`flex-row items-center gap-3 p-4 ${CARD_HOVER}`}> + {flagCode && ( + <img + src={getFlagUrl(flagCode)} + alt={`${countryName} flag`} + width={32} + height={24} + className="rounded-sm" + /> + )} + <div> + <span className="font-semibold">{countryName}</span> + <span className="ml-1 text-sm text-black/50">→</span> + </div> + </Card> + </Link> + ) + })} + </div> + </section> + ) +} diff --git a/src/components/Marketing/FAQSection.tsx b/src/components/Marketing/FAQSection.tsx new file mode 100644 index 000000000..a9a0cb15c --- /dev/null +++ b/src/components/Marketing/FAQSection.tsx @@ -0,0 +1,40 @@ +import { JsonLd } from './JsonLd' +import { Card } from '@/components/0_Bruddle/Card' + +interface FAQSectionProps { + faqs: Array<{ q: string; a: string }> + title?: string +} + +export function FAQSection({ faqs, title = 'Frequently Asked Questions' }: FAQSectionProps) { + const faqSchema = { + '@context': 'https://schema.org', + '@type': 'FAQPage', + mainEntity: faqs.map((faq) => ({ + '@type': 'Question', + name: faq.q, + acceptedAnswer: { + '@type': 'Answer', + text: faq.a, + }, + })), + } + + return ( + <section className="py-10 md:py-14"> + <h2 className="mb-6 text-h2 font-bold md:text-h1">{title}</h2> + <Card shadowSize="4" className="overflow-hidden"> + {faqs.map((faq, i) => ( + <details key={i} className="group border-b border-n-1 last:border-b-0"> + <summary className="flex cursor-pointer list-none items-center justify-between px-5 py-4 font-bold transition-colors hover:bg-primary-3/20 [&::-webkit-details-marker]:hidden"> + {faq.q} + <span className="ml-4 shrink-0 text-lg transition-transform group-open:rotate-45">+</span> + </summary> + <div className="border-t border-n-1/20 px-5 py-4 text-sm text-black/70">{faq.a}</div> + </details> + ))} + </Card> + <JsonLd data={faqSchema} /> + </section> + ) +} diff --git a/src/components/Marketing/JsonLd.tsx b/src/components/Marketing/JsonLd.tsx new file mode 100644 index 000000000..40e4f2ba0 --- /dev/null +++ b/src/components/Marketing/JsonLd.tsx @@ -0,0 +1,12 @@ +/** + * Server component that renders JSON-LD structured data. + * Accepts any schema.org-compatible object. + */ +export function JsonLd({ data }: { data: Record<string, unknown> }) { + return ( + <script + type="application/ld+json" + dangerouslySetInnerHTML={{ __html: JSON.stringify(data).replace(/</g, '\\u003c') }} + /> + ) +} diff --git a/src/components/Marketing/MarketingErrorBoundary.tsx b/src/components/Marketing/MarketingErrorBoundary.tsx new file mode 100644 index 000000000..d698a5dea --- /dev/null +++ b/src/components/Marketing/MarketingErrorBoundary.tsx @@ -0,0 +1,41 @@ +'use client' + +import { Component, type ReactNode } from 'react' + +interface Props { + children: ReactNode + fallback?: ReactNode +} + +interface State { + hasError: boolean +} + +export class MarketingErrorBoundary extends Component<Props, State> { + constructor(props: Props) { + super(props) + this.state = { hasError: false } + } + + static getDerivedStateFromError() { + return { hasError: true } + } + + componentDidCatch(error: Error, errorInfo: React.ErrorInfo) { + console.error('MDX rendering error:', error, errorInfo) + } + + render() { + if (this.state.hasError) { + return ( + this.props.fallback || ( + <div className="mx-auto max-w-2xl px-6 py-16 text-center"> + <h2 className="text-2xl font-bold text-n-1">Content unavailable</h2> + <p className="mt-4 text-grey-1">Please try refreshing the page.</p> + </div> + ) + ) + } + return this.props.children + } +} diff --git a/src/components/Marketing/MarketingHero.tsx b/src/components/Marketing/MarketingHero.tsx new file mode 100644 index 000000000..9c8d5d480 --- /dev/null +++ b/src/components/Marketing/MarketingHero.tsx @@ -0,0 +1,66 @@ +import Title from '@/components/0_Bruddle/Title' +import Link from 'next/link' +import { CloudsCss } from '@/components/LandingPage/CloudsCss' +import { MarqueeComp } from '@/components/Global/MarqueeWrapper' +import { HandThumbsUp } from '@/assets' + +const marketingClouds = [ + { top: '15%', width: 160, speed: '45s', direction: 'ltr' as const }, + { top: '55%', width: 180, speed: '50s', direction: 'rtl' as const }, + { top: '85%', width: 150, speed: '48s', direction: 'ltr' as const, delay: '8s' }, +] + +interface MarketingHeroProps { + title: string + subtitle: string + ctaText?: string + ctaHref?: string + image?: string +} + +export function MarketingHero({ + title, + subtitle, + ctaText = 'Get Started', + ctaHref = '/home', + image, +}: MarketingHeroProps) { + return ( + <> + <section className="relative overflow-hidden bg-primary-1 px-4 py-16 text-center md:px-8 md:py-20"> + <CloudsCss clouds={marketingClouds} /> + <div className="relative z-10 mx-auto max-w-3xl"> + {image && ( + <img + src={image} + alt="" + className="mx-auto mb-4 h-16 w-16 rounded-xl object-contain" + onError={(e) => { + e.currentTarget.style.display = 'none' + }} + /> + )} + <h1> + <Title text={title} className="text-4xl md:text-6xl" /> + </h1> + <p className="mt-4 text-lg font-bold text-black md:text-2xl">{subtitle}</p> + {ctaText && ( + <div className="mt-8"> + <Link + href={ctaHref} + className="btn btn-purple btn-shadow-primary-4 inline-flex w-auto px-8 active:translate-x-[3px] active:translate-y-[4px] active:shadow-none" + > + {ctaText} + </Link> + </div> + )} + </div> + </section> + <MarqueeComp + message={['No fees', 'Instant', '24/7', 'Dollars', 'USDT/USDC']} + imageSrc={HandThumbsUp.src} + backgroundColor="bg-secondary-1" + /> + </> + ) +} diff --git a/src/components/Marketing/MarketingNav.tsx b/src/components/Marketing/MarketingNav.tsx new file mode 100644 index 000000000..1291604b3 --- /dev/null +++ b/src/components/Marketing/MarketingNav.tsx @@ -0,0 +1,19 @@ +import Image from 'next/image' +import Link from 'next/link' +import { PEANUT_LOGO_BLACK } from '@/assets' + +export function MarketingNav() { + return ( + <nav className="flex items-center justify-between border-b border-n-1 bg-white px-4 py-3 md:px-8"> + <Link href="/"> + <Image src={PEANUT_LOGO_BLACK} alt="Peanut" width={110} height={40} /> + </Link> + <Link + href="/home" + className="btn btn-purple btn-shadow-primary-4 active:translate-x-[3px] active:translate-y-[4px] active:shadow-none" + > + Get Started + </Link> + </nav> + ) +} diff --git a/src/components/Marketing/MarketingShell.tsx b/src/components/Marketing/MarketingShell.tsx new file mode 100644 index 000000000..7ee14a00b --- /dev/null +++ b/src/components/Marketing/MarketingShell.tsx @@ -0,0 +1,8 @@ +interface MarketingShellProps { + children: React.ReactNode + className?: string +} + +export function MarketingShell({ children, className }: MarketingShellProps) { + return <div className={`mx-auto max-w-3xl px-4 py-8 md:py-12 ${className ?? ''}`}>{children}</div> +} diff --git a/src/components/Marketing/RelatedPages.tsx b/src/components/Marketing/RelatedPages.tsx new file mode 100644 index 000000000..aaf9fdd55 --- /dev/null +++ b/src/components/Marketing/RelatedPages.tsx @@ -0,0 +1,25 @@ +import Link from 'next/link' + +interface RelatedPagesProps { + pages: Array<{ title: string; href: string }> + title?: string +} + +export function RelatedPages({ pages, title = 'Related Pages' }: RelatedPagesProps) { + if (pages.length === 0) return null + + return ( + <section className="py-10 md:py-14"> + <h2 className="mb-6 text-h2 font-bold md:text-h1">{title}</h2> + <ul className="flex flex-col gap-2"> + {pages.map((page) => ( + <li key={page.href}> + <Link href={page.href} className="text-black underline"> + {page.title} + </Link> + </li> + ))} + </ul> + </section> + ) +} diff --git a/src/components/Marketing/Section.tsx b/src/components/Marketing/Section.tsx new file mode 100644 index 000000000..94bbda722 --- /dev/null +++ b/src/components/Marketing/Section.tsx @@ -0,0 +1,14 @@ +interface SectionProps { + title: string + children: React.ReactNode + id?: string +} + +export function Section({ title, children, id }: SectionProps) { + return ( + <section id={id} className="py-10 md:py-14"> + <h2 className="mb-6 text-h2 font-bold md:text-h1">{title}</h2> + {children} + </section> + ) +} diff --git a/src/components/Marketing/Steps.tsx b/src/components/Marketing/Steps.tsx new file mode 100644 index 000000000..badcb6cf9 --- /dev/null +++ b/src/components/Marketing/Steps.tsx @@ -0,0 +1,25 @@ +import { Card } from '@/components/0_Bruddle/Card' + +interface StepsProps { + steps: Array<{ title: string; description: string }> +} + +export function Steps({ steps }: StepsProps) { + return ( + <ol className="flex flex-col gap-4"> + {steps.map((step, i) => ( + <li key={i}> + <Card shadowSize="4" className="flex-row items-start gap-4 p-4"> + <span className="flex size-10 shrink-0 items-center justify-center rounded-full bg-primary-1 text-base font-bold"> + {i + 1} + </span> + <div> + <h3 className="font-bold">{step.title}</h3> + <p className="mt-1 text-sm text-black/70">{step.description}</p> + </div> + </Card> + </li> + ))} + </ol> + ) +} diff --git a/src/components/Marketing/index.ts b/src/components/Marketing/index.ts new file mode 100644 index 000000000..7d10cac3a --- /dev/null +++ b/src/components/Marketing/index.ts @@ -0,0 +1,10 @@ +export { JsonLd } from './JsonLd' +export { MarketingNav } from './MarketingNav' +export { MarketingHero } from './MarketingHero' +export { MarketingShell } from './MarketingShell' +export { Section } from './Section' +export { Steps } from './Steps' +export { ComparisonTable } from './ComparisonTable' +export { FAQSection } from './FAQSection' +export { DestinationGrid } from './DestinationGrid' +export { BlogCard } from './BlogCard' diff --git a/src/components/Marketing/mdx/CTA.tsx b/src/components/Marketing/mdx/CTA.tsx new file mode 100644 index 000000000..b26228864 --- /dev/null +++ b/src/components/Marketing/mdx/CTA.tsx @@ -0,0 +1,79 @@ +import Link from 'next/link' +import Image from 'next/image' +import { Button } from '@/components/0_Bruddle/Button' +import { Card } from '@/components/0_Bruddle/Card' +import { PeanutGuyGIF } from '@/assets' +import { PROSE_WIDTH } from './constants' + +interface CTAProps { + text: string + href: string + /** subtitle shown below the button in 'card' variant */ + subtitle?: string + variant?: 'primary' | 'secondary' | 'card' +} + +/** + * MDX call-to-action. + * + * - primary: standalone purple button within prose column (default) + * - secondary: subtle inline text link with arrow — for mid-content CTAs + * - card: bordered card with button + subtitle — for final/end-of-page CTAs + */ +export function CTA({ text, href, subtitle, variant = 'primary' }: CTAProps) { + if (variant === 'secondary') { + return ( + <div className={`mx-auto ${PROSE_WIDTH} px-6 py-4 md:px-4`}> + <Link + href={href} + className="inline-flex items-center gap-1 font-semibold text-n-1 underline decoration-n-1/30 underline-offset-2 hover:decoration-n-1" + > + {text} <span aria-hidden="true">→</span> + </Link> + </div> + ) + } + + if (variant === 'card') { + return ( + <div className={`mx-auto ${PROSE_WIDTH} px-6 py-10 md:px-4 md:py-14`}> + <div className="relative"> + <Image + src={PeanutGuyGIF} + alt="Peanut mascot" + width={200} + height={200} + className="absolute -top-24 left-1/2 -z-0 h-40 w-40 -translate-x-1/2 md:-top-28 md:h-48 md:w-48" + unoptimized + /> + <Card shadowSize="4" className="relative z-10 items-center gap-4 p-6 text-center md:p-10"> + <a href={href}> + <Button + shadowSize="4" + variant="purple" + className="w-full px-8 text-base font-bold sm:w-auto md:px-12 md:text-lg" + > + {text} + </Button> + </a> + {subtitle && <p className="mt-3 text-sm text-grey-1">{subtitle}</p>} + </Card> + </div> + </div> + ) + } + + return ( + <div className={`mx-auto ${PROSE_WIDTH} px-6 py-8 text-center md:px-4 md:py-12`}> + <a href={href}> + <Button + shadowSize="4" + variant="purple" + className="w-full px-8 text-base font-bold sm:w-auto md:px-12 md:text-lg" + > + {text} + </Button> + </a> + </div> + ) +} diff --git a/src/components/Marketing/mdx/Callout.tsx b/src/components/Marketing/mdx/Callout.tsx new file mode 100644 index 000000000..79b9c80db --- /dev/null +++ b/src/components/Marketing/mdx/Callout.tsx @@ -0,0 +1,28 @@ +import type { ReactNode } from 'react' +import { Card } from '@/components/0_Bruddle/Card' +import { PROSE_WIDTH } from './constants' + +interface CalloutProps { + type?: 'info' | 'tip' | 'warning' + children: ReactNode +} + +const STYLES: Record<string, { bg: string; border: string; label: string }> = { + info: { bg: 'bg-primary-3/20', border: 'border-primary-3', label: 'Info' }, + tip: { bg: 'bg-green-50', border: 'border-green-300', label: 'Tip' }, + warning: { bg: 'bg-yellow-50', border: 'border-yellow-300', label: 'Important' }, +} + +/** Highlighted callout box for tips, warnings, or important info. */ +export function Callout({ type = 'info', children }: CalloutProps) { + const style = STYLES[type] ?? STYLES.info + + return ( + <div className={`mx-auto ${PROSE_WIDTH} px-6 md:px-4`}> + <Card className={`${style.bg} border-l-4 ${style.border} my-8 p-5`}> + <p className="mb-1 text-xs font-bold uppercase tracking-wide text-n-1/40">{style.label}</p> + <div className="text-sm leading-relaxed text-grey-1">{children}</div> + </Card> + </div> + ) +} diff --git a/src/components/Marketing/mdx/CountryGrid.tsx b/src/components/Marketing/mdx/CountryGrid.tsx new file mode 100644 index 000000000..f25de0836 --- /dev/null +++ b/src/components/Marketing/mdx/CountryGrid.tsx @@ -0,0 +1,37 @@ +import { DestinationGrid } from '@/components/Marketing/DestinationGrid' + +interface CountryGridProps { + /** Comma-separated country slugs to show. If omitted, shows all countries. */ + countries?: string + /** Country slug to exclude (typically the current page's country). */ + exclude?: string + title?: string +} + +/** + * MDX wrapper for DestinationGrid. Renders a flag+name grid of country links. + * Like Wise's "Send money to other countries" section. + * + * Usage in MDX: + * <CountryGrid exclude="argentina" title="Send money to other countries" /> + * <CountryGrid countries="brazil,colombia,mexico" /> + */ +export function CountryGrid({ countries, exclude, title = 'Send money to other countries' }: CountryGridProps) { + let slugs: string[] | undefined + + if (countries) { + slugs = countries.split(',').map((s) => s.trim()) + } + + if (exclude && slugs) { + slugs = slugs.filter((s) => s !== exclude) + } + + return ( + <section className="px-4 py-10 md:px-8 md:py-14"> + <div className="mx-auto max-w-5xl"> + <DestinationGrid countries={slugs} title={title} exclude={exclude} /> + </div> + </section> + ) +} diff --git a/src/components/Marketing/mdx/ExchangeWidget.tsx b/src/components/Marketing/mdx/ExchangeWidget.tsx new file mode 100644 index 000000000..5f71dd49a --- /dev/null +++ b/src/components/Marketing/mdx/ExchangeWidget.tsx @@ -0,0 +1,91 @@ +'use client' + +import { Suspense, useEffect } from 'react' +import { useRouter, useSearchParams } from 'next/navigation' +import ExchangeRateWidget from '@/components/Global/ExchangeRateWidget' +import { Star } from '@/assets' +import { CloudsCss } from '@/components/LandingPage/CloudsCss' + +const widgetClouds = [ + { top: '10%', width: 140, speed: '38s', direction: 'ltr' as const }, + { top: '75%', width: 120, speed: '44s', direction: 'rtl' as const, delay: '5s' }, +] + +interface ExchangeWidgetProps { + /** ISO 4217 destination currency code, e.g. "ARS", "BRL" */ + destinationCurrency?: string + /** ISO 4217 source currency code. Defaults to "USD". */ + sourceCurrency?: string +} + +function ExchangeWidgetInner({ destinationCurrency, sourceCurrency = 'USD' }: ExchangeWidgetProps) { + const router = useRouter() + const searchParams = useSearchParams() + + // Set initial currencies in URL if not already set + useEffect(() => { + if (destinationCurrency && !searchParams.get('to')) { + const params = new URLSearchParams(searchParams.toString()) + params.set('to', destinationCurrency) + if (!params.get('from')) params.set('from', sourceCurrency) + router.replace(`?${params.toString()}`, { scroll: false }) + } + }, [destinationCurrency, sourceCurrency, searchParams, router]) + + return ( + <section className="relative my-8 w-full pb-14 pt-10 md:pb-18 md:pt-14" style={{ backgroundColor: '#90A8ED' }}> + <div className="pointer-events-none absolute inset-0 overflow-hidden"> + <CloudsCss clouds={widgetClouds} /> + <img + src={Star.src} + alt="" + width={36} + height={36} + className="absolute left-[8%] top-6 md:left-[12%] md:top-8" + /> + <img + src={Star.src} + alt="" + width={28} + height={28} + className="absolute bottom-8 right-[10%] md:bottom-10 md:right-[14%]" + /> + </div> + <div className="relative z-10 mx-auto max-w-[640px] px-6 md:px-4"> + <ExchangeRateWidget + ctaLabel="Send Money" + ctaIcon="arrow-up-right" + ctaAction={(from, to) => { + router.push(`/send?from=${from}&to=${to}`) + }} + /> + </div> + </section> + ) +} + +/** + * Embeddable exchange rate calculator for MDX content pages. + * + * Usage in MDX: + * <ExchangeWidget destinationCurrency="ARS" /> + * <ExchangeWidget destinationCurrency="BRL" sourceCurrency="EUR" /> + */ +export function ExchangeWidget({ destinationCurrency, sourceCurrency }: ExchangeWidgetProps) { + return ( + <Suspense + fallback={ + <section + className="relative my-8 w-full overflow-hidden pb-14 pt-10 md:pb-18 md:pt-14" + style={{ backgroundColor: '#90A8ED' }} + > + <div className="mx-auto flex max-w-[640px] justify-center px-6 md:px-4"> + <div className="btn btn-shadow-primary-4 h-[300px] w-full animate-pulse bg-white md:w-[420px]" /> + </div> + </section> + } + > + <ExchangeWidgetInner destinationCurrency={destinationCurrency} sourceCurrency={sourceCurrency} /> + </Suspense> + ) +} diff --git a/src/components/Marketing/mdx/FAQ.tsx b/src/components/Marketing/mdx/FAQ.tsx new file mode 100644 index 000000000..24cf62454 --- /dev/null +++ b/src/components/Marketing/mdx/FAQ.tsx @@ -0,0 +1,79 @@ +import { Children, isValidElement, type ReactNode } from 'react' +import { FAQsPanel } from '@/components/Global/FAQs' +import { PeanutsBG } from '@/assets' +import { JsonLd } from '@/components/Marketing/JsonLd' + +interface FAQItemProps { + question: string + children: ReactNode +} + +/** Individual FAQ item. Used as a child of <FAQ>. */ +export function FAQItem({ question, children }: FAQItemProps) { + // FAQItem doesn't render on its own — FAQ collects these via children. + // This exists for type safety and readability in MDX content. + return <div data-question={question}>{children}</div> +} + +interface FAQProps { + title?: string + children: ReactNode +} + +/** Extract text content from React nodes for JSON-LD plain text */ +function extractText(node: ReactNode): string { + if (typeof node === 'string') return node + if (typeof node === 'number') return String(node) + if (!node) return '' + if (Array.isArray(node)) return node.map(extractText).join('') + if (isValidElement(node)) return extractText(node.props.children) + return '' +} + +/** + * MDX FAQ component. Purple section with peanut pattern overlay, + * animated accordion, and FAQPage JSON-LD. Matches LP styling exactly. + */ +export function FAQ({ title = 'FAQ', children }: FAQProps) { + // Collect FAQItem children into question/answer pairs + const questions: Array<{ id: string; question: string; answer: string }> = [] + + Children.forEach(children, (child) => { + if (!isValidElement(child)) return + if (child.type === FAQItem || child.props?.question) { + const id = `faq-${questions.length}` + questions.push({ + id, + question: child.props.question, + answer: extractText(child.props.children), + }) + } + }) + + if (questions.length === 0) return null + + const faqSchema = { + '@context': 'https://schema.org', + '@type': 'FAQPage', + mainEntity: questions.map((q) => ({ + '@type': 'Question', + name: q.question, + acceptedAnswer: { '@type': 'Answer', text: q.answer }, + })), + } + + return ( + <section + className="overflow-x-hidden" + style={{ + backgroundColor: '#6340df', + backgroundImage: `url(${PeanutsBG.src})`, + backgroundSize: '10rem auto', + backgroundRepeat: 'repeat', + }} + > + <FAQsPanel heading={title} questions={questions} /> + <JsonLd data={faqSchema} /> + </section> + ) +} diff --git a/src/components/Marketing/mdx/Hero.tsx b/src/components/Marketing/mdx/Hero.tsx new file mode 100644 index 000000000..c27ad052a --- /dev/null +++ b/src/components/Marketing/mdx/Hero.tsx @@ -0,0 +1,58 @@ +import Link from 'next/link' +import { CloudsCss } from '@/components/LandingPage/CloudsCss' +import { MarqueeComp } from '@/components/Global/MarqueeWrapper' +import { HandThumbsUp } from '@/assets' + +const marketingClouds = [ + { top: '15%', width: 160, speed: '45s', direction: 'ltr' as const }, + { top: '55%', width: 180, speed: '50s', direction: 'rtl' as const }, + { top: '85%', width: 150, speed: '48s', direction: 'ltr' as const, delay: '8s' }, +] + +interface HeroProps { + title: string + subtitle: string + cta?: string + ctaHref?: string + /** @deprecated — ignored. Use standalone <ExchangeWidget> in MDX body instead. */ + currency?: string +} + +/** + * MDX Hero — large bold title (Roboto Flex), subtitle, white CTA button + * on pink background. + */ +export function Hero({ title, subtitle, cta, ctaHref }: HeroProps) { + return ( + <> + <section className="relative overflow-hidden bg-primary-1 px-4 py-16 text-center md:px-8 md:py-24"> + <CloudsCss clouds={marketingClouds} /> + <div className="relative z-10 mx-auto max-w-4xl"> + <h1 className="font-roboto-flex-extrabold text-[2.5rem] font-extraBlack uppercase leading-[0.95] text-black md:text-[4.5rem]"> + {title} + </h1> + <p className="font-roboto-flex-extrabold mt-6 text-[1.25rem] uppercase text-black md:mt-8 md:text-[2rem]"> + {subtitle} + </p> + {cta && ctaHref && ( + <div className="mt-8"> + <Link + href={ctaHref} + className="btn btn-shadow-primary-4 inline-flex w-auto bg-white px-8 font-extrabold hover:bg-white/90 active:translate-x-[3px] active:translate-y-[4px] active:shadow-none" + > + {cta} + </Link> + </div> + )} + </div> + </section> + <MarqueeComp + message={['No fees', 'Instant', '24/7', 'Dollars', 'USDT/USDC']} + imageSrc={HandThumbsUp.src} + backgroundColor="bg-secondary-1" + /> + {/* Spacer ensures consistent gap between Hero block and prose content */} + <div className="h-10 md:h-14" /> + </> + ) +} diff --git a/src/components/Marketing/mdx/ProseStars.tsx b/src/components/Marketing/mdx/ProseStars.tsx new file mode 100644 index 000000000..4c50edf43 --- /dev/null +++ b/src/components/Marketing/mdx/ProseStars.tsx @@ -0,0 +1,84 @@ +import { Star } from '@/assets' +import { AnimateOnView } from '@/components/Global/AnimateOnView' + +interface StarPlacement { + className: string + width: number + height: number + delay: string + x: string + rotate: string +} + +/** + * Pre-defined star placement sets. Each h2 cycles through these + * via a module-level counter so stars appear in varied positions. + */ +const placements: StarPlacement[][] = [ + [ + { + className: 'absolute -right-4 -top-2 md:right-8', + width: 40, + height: 40, + delay: '0.15s', + x: '5px', + rotate: '22deg', + }, + ], + [ + { + className: 'absolute -left-4 top-0 md:left-8', + width: 35, + height: 35, + delay: '0.25s', + x: '-5px', + rotate: '-15deg', + }, + ], + [ + { + className: 'absolute -right-2 -top-4 md:right-16', + width: 32, + height: 32, + delay: '0.1s', + x: '3px', + rotate: '45deg', + }, + { + className: 'absolute -left-6 top-4 md:left-4 hidden md:block', + width: 28, + height: 28, + delay: '0.5s', + x: '-4px', + rotate: '-10deg', + }, + ], + [ + { + className: 'absolute -left-2 -top-2 md:left-12', + width: 38, + height: 38, + delay: '0.2s', + x: '-3px', + rotate: '12deg', + }, + ], +] + +let counter = 0 + +/** Decorative stars placed in the margins around prose h2 headings. */ +export function ProseStars() { + const set = placements[counter % placements.length] + counter++ + + return ( + <> + {set.map((star, i) => ( + <AnimateOnView key={i} className={star.className} delay={star.delay} x={star.x} rotate={star.rotate}> + <img src={Star.src} alt="" width={star.width} height={star.height} /> + </AnimateOnView> + ))} + </> + ) +} diff --git a/src/components/Marketing/mdx/RelatedPages.tsx b/src/components/Marketing/mdx/RelatedPages.tsx new file mode 100644 index 000000000..7a92e1a91 --- /dev/null +++ b/src/components/Marketing/mdx/RelatedPages.tsx @@ -0,0 +1,64 @@ +import { Children, isValidElement, type ReactNode } from 'react' +import Link from 'next/link' +import { Card } from '@/components/0_Bruddle/Card' +import { PROSE_WIDTH, CARD_HOVER } from './constants' + +interface RelatedLinkProps { + href: string + children: ReactNode +} + +/** Individual related page link. Used as a child of <RelatedPages>. */ +export function RelatedLink({ href, children }: RelatedLinkProps) { + return <div data-href={href}>{children}</div> +} + +interface RelatedPagesProps { + title?: string + children: ReactNode +} + +/** + * MDX Related Pages component. Renders a grid of internal link cards + * at the bottom of content pages for SEO internal linking. + * + * Usage in MDX: + * <RelatedPages title="Related Guides"> + * <RelatedLink href="/pay-with/mercadopago">Pay with Mercado Pago</RelatedLink> + * <RelatedLink href="/compare/wise">Peanut vs Wise</RelatedLink> + * </RelatedPages> + */ +export function RelatedPages({ title = 'Related Pages', children }: RelatedPagesProps) { + const links: Array<{ href: string; text: string }> = [] + + Children.forEach(children, (child) => { + if (!isValidElement(child)) return + if (child.type === RelatedLink || child.props?.href) { + links.push({ + href: child.props.href, + text: + typeof child.props.children === 'string' + ? child.props.children + : String(child.props.children ?? ''), + }) + } + }) + + if (links.length === 0) return null + + return ( + <nav className={`mx-auto ${PROSE_WIDTH} px-6 py-10 md:px-4 md:py-14`}> + <h2 className="mb-5 text-xl font-bold text-n-1 md:text-2xl">{title}</h2> + <div className="grid grid-cols-1 gap-3 sm:grid-cols-2"> + {links.map((link) => ( + <Link key={link.href} href={link.href}> + <Card shadowSize="4" className={`flex-row items-center gap-3 p-4 ${CARD_HOVER}`}> + <span className="font-semibold">{link.text}</span> + <span className="ml-auto text-sm text-black/50">→</span> + </Card> + </Link> + ))} + </div> + </nav> + ) +} diff --git a/src/components/Marketing/mdx/Stars.tsx b/src/components/Marketing/mdx/Stars.tsx new file mode 100644 index 000000000..e031486a6 --- /dev/null +++ b/src/components/Marketing/mdx/Stars.tsx @@ -0,0 +1,57 @@ +import { Star } from '@/assets' +import { AnimateOnView } from '@/components/Global/AnimateOnView' + +interface StarConfig { + className: string + width: number + height: number + delay: string + x: string + rotate: string +} + +const defaultStars: StarConfig[] = [ + { + className: 'absolute right-6 top-6 md:right-12 md:top-10', + width: 40, + height: 40, + delay: '0.2s', + x: '5px', + rotate: '22deg', + }, + { + className: 'absolute left-8 bottom-8 md:left-16', + width: 35, + height: 35, + delay: '0.5s', + x: '-5px', + rotate: '-15deg', + }, + { + className: 'absolute right-1/4 bottom-12 hidden md:block', + width: 30, + height: 30, + delay: '0.8s', + x: '3px', + rotate: '45deg', + }, +] + +/** Decorative animated stars. Sprinkle on sections for visual interest. */ +export function Stars({ configs = defaultStars }: { configs?: StarConfig[] }) { + return ( + <> + {configs.map((config, i) => ( + <AnimateOnView + key={i} + className={config.className} + delay={config.delay} + x={config.x} + rotate={config.rotate} + > + <img src={Star.src} alt="" width={config.width} height={config.height} /> + </AnimateOnView> + ))} + </> + ) +} diff --git a/src/components/Marketing/mdx/Steps.tsx b/src/components/Marketing/mdx/Steps.tsx new file mode 100644 index 000000000..ec2797897 --- /dev/null +++ b/src/components/Marketing/mdx/Steps.tsx @@ -0,0 +1,86 @@ +import { Children, isValidElement, type ReactNode } from 'react' +import { Steps as StepsCards } from '@/components/Marketing/Steps' +import { JsonLd } from '@/components/Marketing/JsonLd' +import { CloudsCss } from '@/components/LandingPage/CloudsCss' +import { Stars } from './Stars' + +interface StepProps { + title: string + children: ReactNode +} + +/** Individual step. Used as a child of <Steps>. */ +export function Step({ title, children }: StepProps) { + return <div data-title={title}>{children}</div> +} + +interface StepsProps { + title?: string + children: ReactNode +} + +/** Extract text content from React nodes for descriptions and JSON-LD */ +function extractText(node: ReactNode): string { + if (typeof node === 'string') return node + if (typeof node === 'number') return String(node) + if (!node) return '' + if (Array.isArray(node)) return node.map(extractText).join('') + if (isValidElement(node)) return extractText(node.props.children) + return '' +} + +const stepsClouds = [ + { top: '15%', width: 160, speed: '40s', direction: 'ltr' as const }, + { top: '60%', width: 140, speed: '34s', direction: 'rtl' as const }, + { top: '85%', width: 120, speed: '46s', direction: 'ltr' as const, delay: '6s' }, +] + +/** + * MDX Steps component. Full-bleed yellow section with numbered step cards, + * clouds, and HowTo JSON-LD. Matches LP styling. + * + * Usage in MDX: + * <Steps title="How It Works"> + * <Step title="Sign up">Create a Peanut account...</Step> + * <Step title="Deposit">Send stablecoins or bank transfer.</Step> + * </Steps> + */ +export function Steps({ title = 'How It Works', children }: StepsProps) { + const steps: Array<{ title: string; description: string }> = [] + + Children.forEach(children, (child) => { + if (!isValidElement(child)) return + if (child.type === Step || child.props?.title) { + steps.push({ + title: child.props.title, + description: extractText(child.props.children), + }) + } + }) + + if (steps.length === 0) return null + + const howToSchema = { + '@context': 'https://schema.org', + '@type': 'HowTo', + name: title, + step: steps.map((step, i) => ({ + '@type': 'HowToStep', + position: i + 1, + name: step.title, + text: step.description || step.title, + })), + } + + return ( + <section className="relative overflow-hidden bg-secondary-1 px-4 py-16 md:py-24"> + <CloudsCss clouds={stepsClouds} /> + <Stars /> + <div className="relative z-10 mx-auto max-w-3xl"> + <h2 className="mb-8 text-h2 font-bold md:text-h1">{title}</h2> + <StepsCards steps={steps} /> + </div> + <JsonLd data={howToSchema} /> + </section> + ) +} diff --git a/src/components/Marketing/mdx/Tabs.tsx b/src/components/Marketing/mdx/Tabs.tsx new file mode 100644 index 000000000..1ee8403af --- /dev/null +++ b/src/components/Marketing/mdx/Tabs.tsx @@ -0,0 +1,71 @@ +'use client' + +import * as RadixTabs from '@radix-ui/react-tabs' +import { type ReactNode } from 'react' +import { PROSE_WIDTH } from './constants' + +interface TabsProps { + /** Comma-separated tab labels, e.g. "Peanut,Wise,Western Union" */ + labels: string + children: ReactNode +} + +interface TabPanelProps { + /** Must match one of the labels exactly */ + label: string + children: ReactNode +} + +const triggerClasses = + 'flex-1 rounded-xl border border-transparent px-3 py-2 text-sm font-medium text-grey-1 transition-all data-[state=active]:border-primary-1 data-[state=active]:bg-primary-1/10 data-[state=active]:text-primary-1' + +/** + * Tabbed content for MDX pages. + * + * Usage: + * ```mdx + * <Tabs labels="Peanut,Wise,Western Union"> + * <TabPanel label="Peanut"> + * Content about Peanut... + * </TabPanel> + * <TabPanel label="Wise"> + * Content about Wise... + * </TabPanel> + * <TabPanel label="Western Union"> + * Content about Western Union... + * </TabPanel> + * </Tabs> + * ``` + */ +export function Tabs({ labels, children }: TabsProps) { + const tabs = labels.split(',').map((l) => l.trim()) + return ( + <div className={`mx-auto my-8 ${PROSE_WIDTH} px-6 md:px-4`}> + <RadixTabs.Root defaultValue={tabs[0]} className="w-full"> + <RadixTabs.List + className="flex w-full items-center rounded-xl bg-white p-1 shadow-sm ring-1 ring-n-1/10" + aria-label="Content tabs" + > + {tabs.map((tab) => ( + <RadixTabs.Trigger key={tab} value={tab} className={triggerClasses}> + {tab} + </RadixTabs.Trigger> + ))} + </RadixTabs.List> + {children} + </RadixTabs.Root> + </div> + ) +} + +export function TabPanel({ label, children }: TabPanelProps) { + return ( + <RadixTabs.Content + value={label} + forceMount + className="mt-4 text-base leading-[1.75] text-grey-1 data-[state=inactive]:hidden" + > + {children} + </RadixTabs.Content> + ) +} diff --git a/src/components/Marketing/mdx/components.tsx b/src/components/Marketing/mdx/components.tsx new file mode 100644 index 000000000..6c39904dd --- /dev/null +++ b/src/components/Marketing/mdx/components.tsx @@ -0,0 +1,107 @@ +import Link from 'next/link' +import { Hero } from './Hero' +import { Steps, Step } from './Steps' +import { FAQ, FAQItem } from './FAQ' +import { CTA } from './CTA' +import { Callout } from './Callout' +import { ExchangeWidget } from './ExchangeWidget' +import { RelatedPages, RelatedLink } from './RelatedPages' +import { CountryGrid } from './CountryGrid' +import { ProseStars } from './ProseStars' +import { Tabs, TabPanel } from './Tabs' +import { PROSE_WIDTH } from './constants' + +/** + * Component map for MDX content rendering. + * These components are available in .md/.mdx files without imports. + * + * Prose column: PROSE_WIDTH (~Wise's 600px content width) + * Text color: text-grey-1 (#5F646D) for body, text-n-1 for headings + * Line-height: leading-[1.75] for generous readability + * Paragraph spacing: mb-6 (24px) matching Wise + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export const mdxComponents: Record<string, React.ComponentType<any>> = { + // Custom components + Hero, + Steps, + Step, + FAQ, + FAQItem, + CTA, + Callout, + ExchangeWidget, + RelatedPages, + RelatedLink, + CountryGrid, + Tabs, + TabPanel, + + // Element overrides — prose styling + h1: (props: React.HTMLAttributes<HTMLHeadingElement>) => ( + <h1 + className={`mx-auto mb-5 mt-10 ${PROSE_WIDTH} px-6 text-2xl font-extrabold text-n-1 md:mt-12 md:px-4 md:text-3xl`} + {...props} + /> + ), + h2: (props: React.HTMLAttributes<HTMLHeadingElement>) => ( + <div className="relative"> + <ProseStars /> + <h2 + className={`mx-auto mb-5 mt-14 ${PROSE_WIDTH} px-6 text-2xl font-extrabold text-n-1 md:mt-16 md:px-4 md:text-3xl`} + {...props} + /> + </div> + ), + h3: (props: React.HTMLAttributes<HTMLHeadingElement>) => ( + <h3 + className={`mx-auto mb-3 mt-10 ${PROSE_WIDTH} px-6 text-xl font-bold text-n-1 md:px-4 md:text-2xl`} + {...props} + /> + ), + p: (props: React.HTMLAttributes<HTMLParagraphElement>) => ( + <p className={`mx-auto mb-6 ${PROSE_WIDTH} px-6 text-base leading-[1.75] text-grey-1 md:px-4`} {...props} /> + ), + a: ({ href = '', ...props }: React.AnchorHTMLAttributes<HTMLAnchorElement>) => ( + <Link + href={href} + className="text-n-1 underline decoration-n-1/30 underline-offset-2 hover:decoration-n-1" + {...props} + /> + ), + ul: (props: React.HTMLAttributes<HTMLUListElement>) => ( + <ul className={`mx-auto my-5 ${PROSE_WIDTH} list-disc space-y-3 pl-12 pr-6 md:pl-10 md:pr-4`} {...props} /> + ), + ol: (props: React.HTMLAttributes<HTMLOListElement>) => ( + <ol className={`mx-auto my-5 ${PROSE_WIDTH} list-decimal space-y-3 pl-12 pr-6 md:pl-10 md:pr-4`} {...props} /> + ), + li: (props: React.HTMLAttributes<HTMLLIElement>) => ( + <li className="text-base leading-[1.75] text-grey-1" {...props} /> + ), + strong: (props: React.HTMLAttributes<HTMLElement>) => <strong className="font-semibold text-n-1" {...props} />, + table: (props: React.HTMLAttributes<HTMLTableElement>) => ( + <div className={`mx-auto my-8 ${PROSE_WIDTH} overflow-x-auto px-6 md:px-4`}> + <div className="overflow-hidden rounded-sm border border-n-1"> + <table className="w-full border-collapse text-left text-sm" {...props} /> + </div> + </div> + ), + th: (props: React.HTMLAttributes<HTMLTableCellElement>) => ( + <th + className="border-b border-n-1 bg-primary-1/15 px-4 py-3 text-xs font-bold uppercase tracking-wide text-n-1" + {...props} + /> + ), + td: (props: React.HTMLAttributes<HTMLTableCellElement>) => ( + <td className="border-b border-n-1/10 px-4 py-3 text-grey-1" {...props} /> + ), + blockquote: (props: React.HTMLAttributes<HTMLQuoteElement>) => ( + <blockquote + className={`mx-auto my-8 ${PROSE_WIDTH} border-l-4 border-primary-1 py-1 pl-6 pr-6 md:pr-4`} + {...props} + /> + ), + hr: (props: React.HTMLAttributes<HTMLHRElement>) => ( + <hr className={`mx-auto my-12 ${PROSE_WIDTH} border-n-1/10`} {...props} /> + ), +} diff --git a/src/components/Marketing/mdx/constants.ts b/src/components/Marketing/mdx/constants.ts new file mode 100644 index 000000000..da9a9173b --- /dev/null +++ b/src/components/Marketing/mdx/constants.ts @@ -0,0 +1,8 @@ +/** Prose content column width class. Matches Wise's ~600px content width for readability. */ +export const PROSE_WIDTH = 'max-w-[640px]' + +/** Standard hover/active classes for interactive cards with Bruddle shadow. + * Hover: card lifts up-left, shadow grows to compensate (appears stationary). + * Active: card presses into shadow. */ +export const CARD_HOVER = + 'transition-all duration-150 hover:-translate-x-0.5 hover:-translate-y-0.5 hover:shadow-[6px_6px_0_#000] active:translate-x-[3px] active:translate-y-[4px] active:shadow-none' diff --git a/src/components/Marketing/pages/ReceiveMoneyContent.tsx b/src/components/Marketing/pages/ReceiveMoneyContent.tsx new file mode 100644 index 000000000..ee37237f0 --- /dev/null +++ b/src/components/Marketing/pages/ReceiveMoneyContent.tsx @@ -0,0 +1,143 @@ +import Link from 'next/link' +import { getFlagUrl, findMappingBySlug } from '@/constants/countryCurrencyMapping' +import { CORRIDORS, getCountryName, getLocalizedSEO } from '@/data/seo' +import { getTranslations, t, localizedPath, localizedBarePath } from '@/i18n' +import type { Locale } from '@/i18n/types' +import { MarketingHero } from '@/components/Marketing/MarketingHero' +import { MarketingShell } from '@/components/Marketing/MarketingShell' +import { Section } from '@/components/Marketing/Section' +import { Steps } from '@/components/Marketing/Steps' +import { FAQSection } from '@/components/Marketing/FAQSection' +import { JsonLd } from '@/components/Marketing/JsonLd' +import { RelatedPages } from '@/components/Marketing/RelatedPages' +import { Card } from '@/components/0_Bruddle/Card' + +interface ReceiveMoneyContentProps { + sourceCountry: string + locale: Locale +} + +export function ReceiveMoneyContent({ sourceCountry, locale }: ReceiveMoneyContentProps) { + const i18n = getTranslations(locale) + const sourceName = getCountryName(sourceCountry, locale) + const sourceSeo = getLocalizedSEO(sourceCountry, locale) + + // Destinations that receive money from this source + const destinations = CORRIDORS.filter((c) => c.from === sourceCountry).map((c) => c.to) + + const sourceMapping = findMappingBySlug(sourceCountry) + + const howToSteps = [ + { + title: t(i18n.stepCreateAccount), + description: t(i18n.stepCreateAccountDesc), + }, + { + title: t(i18n.stepDepositFunds), + description: t(i18n.stepDepositFundsDesc, { method: sourceSeo?.instantPayment ?? '' }), + }, + { + title: i18n.sendMoney, + description: t(i18n.receiveMoneyFromDesc, { country: sourceName }), + }, + ] + + const baseUrl = 'https://peanut.me' + + const breadcrumbSchema = { + '@context': 'https://schema.org', + '@type': 'BreadcrumbList', + itemListElement: [ + { '@type': 'ListItem', position: 1, name: i18n.home, item: baseUrl }, + { + '@type': 'ListItem', + position: 2, + name: t(i18n.receiveMoneyFrom, { country: sourceName }), + item: `${baseUrl}/${locale}/receive-money-from/${sourceCountry}`, + }, + ], + } + + const faqs = sourceSeo?.faqs ?? [] + + // Related pages for internal linking + const relatedPages = [ + { + title: t(i18n.hubTitle, { country: sourceName }), + href: localizedBarePath(locale, sourceCountry), + }, + { + title: t(i18n.sendMoneyTo, { country: sourceName }), + href: localizedPath('send-money-to', locale, sourceCountry), + }, + ] + + // Add from-to corridor links for each destination + for (const dest of destinations.slice(0, 3)) { + const destName = getCountryName(dest, locale) + relatedPages.push({ + title: t(i18n.sendMoneyFromTo, { from: sourceName, to: destName }), + href: localizedPath('send-money-from', locale, `${sourceCountry}/to/${dest}`), + }) + } + + const today = new Date().toISOString().split('T')[0] + + return ( + <> + <JsonLd data={breadcrumbSchema} /> + + <MarketingHero + title={t(i18n.receiveMoneyFrom, { country: sourceName })} + subtitle={t(i18n.receiveMoneyFromDesc, { country: sourceName })} + /> + + <MarketingShell> + {/* Destination countries grid */} + <Section title={t(i18n.receiveMoneyFrom, { country: sourceName })}> + <div className="grid grid-cols-2 gap-3 md:grid-cols-3"> + {destinations.map((destSlug) => { + const destName = getCountryName(destSlug, locale) + const destMapping = findMappingBySlug(destSlug) + return ( + <Link + key={destSlug} + href={localizedPath('send-money-from', locale, `${sourceCountry}/to/${destSlug}`)} + > + <Card className="flex-row items-center gap-2 p-3 transition-all hover:shadow-4 hover:-translate-x-1 hover:-translate-y-1"> + {destMapping?.flagCode && ( + <img + src={getFlagUrl(destMapping.flagCode)} + alt={`${destName} flag`} + width={24} + height={18} + className="rounded-sm" + /> + )} + <span className="text-sm font-medium"> + {sourceName} → {destName} + </span> + </Card> + </Link> + ) + })} + </div> + </Section> + + {/* How it works */} + <Section title={i18n.howItWorks}> + <Steps steps={howToSteps} /> + </Section> + + {/* FAQs */} + {faqs.length > 0 && <FAQSection faqs={faqs} title={i18n.frequentlyAskedQuestions} />} + + {/* Related pages */} + <RelatedPages pages={relatedPages} title={i18n.relatedPages} /> + + {/* Last updated */} + <p className="py-4 text-xs text-gray-400">{t(i18n.lastUpdated, { date: today })}</p> + </MarketingShell> + </> + ) +} diff --git a/src/components/Points/CashCard.tsx b/src/components/Points/CashCard.tsx new file mode 100644 index 000000000..c5d825611 --- /dev/null +++ b/src/components/Points/CashCard.tsx @@ -0,0 +1,33 @@ +'use client' + +import { Icon } from '@/components/Global/Icons/Icon' +import { Tooltip } from '@/components/Tooltip' + +interface CashCardProps { + hasCashbackLeft: boolean + lifetimeEarned: number +} + +export const CashCard = ({ hasCashbackLeft, lifetimeEarned }: CashCardProps) => { + return ( + <div className="flex flex-col gap-1.5"> + <div className="flex items-center gap-1.5"> + <h2 className="text-xl font-bold text-black"> + Lifetime cashback claimed: ${lifetimeEarned.toFixed(2)} + </h2> + <Tooltip + content="The more points you have and higher Tier you are, the more cashback you get. The best way to get more cashback is to invite friends!" + position="bottom" + > + <Icon name="info" className="size-4 flex-shrink-0 text-grey-1" /> + </Tooltip> + </div> + + {hasCashbackLeft ? ( + <p className="text-sm text-grey-1">You have unclaimed cashback left! Make a payment to claim it.</p> + ) : ( + <p className="text-sm text-grey-1">Invite friends to unlock more cashback.</p> + )} + </div> + ) +} diff --git a/src/components/Points/InviteePointsBadge.tsx b/src/components/Points/InviteePointsBadge.tsx new file mode 100644 index 000000000..bd0313651 --- /dev/null +++ b/src/components/Points/InviteePointsBadge.tsx @@ -0,0 +1,21 @@ +'use client' + +import { useCountUp } from '@/hooks/useCountUp' +import { formatPoints } from '@/utils/format.utils' + +interface InviteePointsBadgeProps { + points: number + inView: boolean +} + +/** animated points badge for invitee rows — triggers when scrolled into view */ +const InviteePointsBadge = ({ points, inView }: InviteePointsBadgeProps) => { + const animated = useCountUp(points, { duration: 1.2, enabled: inView }) + return ( + <p className="text-grey-1"> + +{formatPoints(animated)} {points === 1 ? 'pt' : 'pts'} + </p> + ) +} + +export default InviteePointsBadge diff --git a/src/components/Points/PerkClaimCard.tsx b/src/components/Points/PerkClaimCard.tsx new file mode 100644 index 000000000..c81b801ae --- /dev/null +++ b/src/components/Points/PerkClaimCard.tsx @@ -0,0 +1,61 @@ +'use client' + +import { Button } from '@/components/0_Bruddle/Button' +import Card from '@/components/Global/Card' +import { useHoldToClaim } from '@/hooks/useHoldToClaim' +import { Icon } from '@/components/Global/Icons/Icon' +import { getShakeClass } from '@/utils/perk.utils' +import { extractInviteeName } from '@/utils/general.utils' +import type { PendingPerk } from '@/services/perks' + +interface PerkClaimCardProps { + perk: PendingPerk + onClaim: () => void + isClaiming: boolean +} + +export function PerkClaimCard({ perk, onClaim, isClaiming }: PerkClaimCardProps) { + const { holdProgress, isShaking, shakeIntensity, buttonProps } = useHoldToClaim({ + onComplete: onClaim, + disabled: isClaiming, + }) + + const inviteeName = extractInviteeName(perk.reason) + + return ( + <div className={getShakeClass(isShaking, shakeIntensity)}> + <Card className="border-2 border-primary-1 bg-gradient-to-r from-primary-1/10 to-primary-2/10"> + <div className="mb-3 flex items-center gap-3"> + <div className="flex items-center justify-center rounded-full bg-primary-1 p-2"> + <Icon name="gift" className="size-5 text-white" /> + </div> + <div className="flex-1"> + <p className="font-bold text-black">You earned ${perk.amountUsd}!</p> + <p className="text-sm text-grey-1">{inviteeName} became a Card Pioneer</p> + </div> + </div> + + <Button + {...buttonProps} + variant="dark" + shadowSize="4" + disabled={isClaiming} + loading={isClaiming} + className={`${buttonProps.className} w-full`} + > + {/* Progress fill from left to right */} + <div + className="absolute inset-0 bg-primary-1 transition-all duration-100" + style={{ + width: `${holdProgress}%`, + left: 0, + }} + /> + <span className="relative z-10"> + {isClaiming ? 'Claiming...' : `Hold to claim $${perk.amountUsd}`} + </span> + </Button> + </Card> + </div> + ) +} diff --git a/src/components/Profile/components/ProfileMenuItem.tsx b/src/components/Profile/components/ProfileMenuItem.tsx index 3294cf965..8cc30b28a 100644 --- a/src/components/Profile/components/ProfileMenuItem.tsx +++ b/src/components/Profile/components/ProfileMenuItem.tsx @@ -20,6 +20,7 @@ interface ProfileMenuItemProps { endIconClassName?: string showTooltip?: boolean toolTipText?: string + badge?: string } const ProfileMenuItem: React.FC<ProfileMenuItemProps> = ({ @@ -34,6 +35,7 @@ const ProfileMenuItem: React.FC<ProfileMenuItemProps> = ({ endIconClassName, showTooltip = false, toolTipText, + badge, }) => { const content = ( <div className="flex items-center justify-between py-1"> @@ -46,6 +48,7 @@ const ProfileMenuItem: React.FC<ProfileMenuItemProps> = ({ </div> )} <span className="text-base font-medium">{label}</span> + {badge && <StatusBadge status="custom" customText={badge} />} {showTooltip && ( <Tooltip content={toolTipText}> <Icon name="info" size={14} fill="black" /> diff --git a/src/components/Profile/index.tsx b/src/components/Profile/index.tsx index 7f1722aaf..09086deed 100644 --- a/src/components/Profile/index.tsx +++ b/src/components/Profile/index.tsx @@ -7,18 +7,16 @@ import NavHeader from '../Global/NavHeader' import ProfileHeader from './components/ProfileHeader' import ProfileMenuItem from './components/ProfileMenuItem' import { useRouter } from 'next/navigation' -import { checkIfInternalNavigation, generateInviteCodeLink, generateInvitesShareText } from '@/utils/general.utils' -import ActionModal from '../Global/ActionModal' +import { checkIfInternalNavigation } from '@/utils/general.utils' import { useState } from 'react' import useKycStatus from '@/hooks/useKycStatus' +import underMaintenanceConfig from '@/config/underMaintenance.config' import Card from '../Global/Card' import ShowNameToggle from './components/ShowNameToggle' -import ShareButton from '../Global/ShareButton' -import CopyToClipboard from '../Global/CopyToClipboard' import KycVerifiedOrReviewModal from '../Global/KycVerifiedOrReviewModal' +import InviteFriendsModal from '../Global/InviteFriendsModal' import { STAR_STRAIGHT_ICON } from '@/assets' import Image from 'next/image' -import QRCode from 'react-qr-code' export const Profile = () => { const { logoutUser, isLoggingOut, user } = useAuth() @@ -35,8 +33,6 @@ export const Profile = () => { // respect user's showFullName preference: use fullName only if showFullName is true, otherwise use username const displayName = user?.user.showFullName && user?.user.fullName ? user.user.fullName : username - const inviteData = generateInviteCodeLink(user?.user.username ?? '') - return ( <div className="h-full w-full bg-background"> <NavHeader @@ -63,6 +59,10 @@ export const Profile = () => { href="/dummy" // Dummy link, wont be called position="single" /> + {/* Card Pioneer Entry */} + {!underMaintenanceConfig.disableCardPioneers && ( + <ProfileMenuItem icon="wallet" label="My Card" href="/card" position="single" badge="NEW" /> + )} {/* Menu Items - First Group */} <div> <ProfileMenuItem icon="achievements" label="Your Badges" href="/badges" position="first" /> @@ -141,40 +141,10 @@ export const Profile = () => { onClose={() => setIsKycApprovedModalOpen(false)} /> - <ActionModal + <InviteFriendsModal visible={isInviteFriendsModalOpen} onClose={() => setIsInviteFriendsModalOpen(false)} - title="Invite friends!" - description="Invite friends to Peanut and help them skip ahead on the waitlist. Once they're onboarded and start using the app, you'll earn rewards from their activity too." - icon="user-plus" - content={ - <> - {inviteData.inviteLink && ( - <div className="my-2 size-44"> - <QRCode - value={inviteData.inviteLink} - size={120} - style={{ height: 'auto', maxWidth: '100%', width: '100%' }} - viewBox={`0 0 120 120`} - level="H" // Highest error correction level to allow for logo - /> - </div> - )} - <div className="flex w-full items-center justify-between gap-3"> - <Card className="flex items-center justify-between py-2"> - <p className="overflow-hidden text-ellipsis whitespace-nowrap text-sm font-bold ">{`${inviteData.inviteCode}`}</p> - - <CopyToClipboard textToCopy={`${inviteData.inviteCode}`} iconSize="4" /> - </Card> - </div> - <ShareButton - generateText={() => Promise.resolve(generateInvitesShareText(inviteData.inviteLink))} - title="Share your invite link" - > - Share Invite link - </ShareButton> - </> - } + username={user?.user.username ?? ''} /> </div> ) diff --git a/src/components/Setup/Views/SetupPasskey.tsx b/src/components/Setup/Views/SetupPasskey.tsx index f6994f14e..3f1ea1c8f 100644 --- a/src/components/Setup/Views/SetupPasskey.tsx +++ b/src/components/Setup/Views/SetupPasskey.tsx @@ -39,7 +39,7 @@ const SetupPasskey = () => { // clear any previous inline errors setInlineError(null) setErrorName(null) - capturePasskeyDebugInfo('passkey-registration-started') + //capturePasskeyDebugInfo('passkey-registration-started') try { await withWebAuthnRetry(() => handleRegister(username), 'passkey-registration') diff --git a/src/components/Setup/Views/SignTestTransaction.tsx b/src/components/Setup/Views/SignTestTransaction.tsx index 2b98eab6c..ad39241b1 100644 --- a/src/components/Setup/Views/SignTestTransaction.tsx +++ b/src/components/Setup/Views/SignTestTransaction.tsx @@ -160,13 +160,13 @@ const SignTestTransaction = () => { } } - const isLoading = isSigning || isProcessing || isFetchingUser - const isDisabled = isLoading || !user + const isLoading = isSigning || isProcessing || isFetchingUser || !user + const isDisabled = isLoading const displayError = error || setupError // determine button text based on state const getButtonText = () => { - if (isFetchingUser) return 'Loading...' + if (isFetchingUser || !user) return 'Loading...' if (testTransactionCompleted && displayError) return 'Retry account setup' return 'Sign test transaction' } diff --git a/src/components/TransactionDetails/TransactionDetailsReceipt.tsx b/src/components/TransactionDetails/TransactionDetailsReceipt.tsx index 9151ea3dd..03544ebc3 100644 --- a/src/components/TransactionDetails/TransactionDetailsReceipt.tsx +++ b/src/components/TransactionDetails/TransactionDetailsReceipt.tsx @@ -18,6 +18,7 @@ import { useUserStore } from '@/redux/hooks' import { chargesApi } from '@/services/charges' import useClaimLink from '@/components/Claim/useClaimLink' import { formatAmount, formatDate, isStableCoin, formatCurrency } from '@/utils/general.utils' +import { formatPoints } from '@/utils/format.utils' import { getAvatarUrl } from '@/utils/history.utils' import { formatIban, @@ -332,12 +333,12 @@ export const TransactionDetailsReceipt = ({ useEffect(() => { const getTokenDetails = async () => { - if (!transaction) { + if (!transaction?.tokenDisplayDetails) { setIsTokenDataLoading(false) return } - if (transaction.tokenDisplayDetails?.tokenIconUrl && transaction.tokenDisplayDetails.tokenSymbol) { + if (transaction.tokenDisplayDetails.tokenIconUrl && transaction.tokenDisplayDetails.tokenSymbol) { setTokenData({ symbol: transaction.tokenDisplayDetails.tokenSymbol, icon: transaction.tokenDisplayDetails.tokenIconUrl, @@ -346,8 +347,13 @@ export const TransactionDetailsReceipt = ({ return } + if (!transaction.tokenDisplayDetails.chainName) { + setIsTokenDataLoading(false) + return + } + try { - const chainName = slugify(transaction.tokenDisplayDetails?.chainName ?? '') + const chainName = slugify(transaction.tokenDisplayDetails.chainName) const res = await fetch( `https://api.coingecko.com/api/v3/coins/${chainName}/contract/${transaction.tokenAddress}` ) @@ -370,7 +376,7 @@ export const TransactionDetailsReceipt = ({ } getTokenDetails() - }, []) + }, [transaction?.tokenDisplayDetails]) const convertedAmount = useMemo(() => { if (!transaction) return null @@ -506,9 +512,22 @@ export const TransactionDetailsReceipt = ({ value={formatDate(new Date(transaction.date))} hideBottomBorder={false} /> + {/* + * HACK: Strip payment UUID from reason field. + * + * The backend stores the payment UUID in the reason field for idempotency + * (e.g., "Alice became a Card Pioneer! (payment: uuid)") because PerkUsage + * lacks a dedicated requestPaymentUuid field. The code in purchase-listener.ts + * uses `reason: { contains: paymentUuid }` to prevent duplicate perk issuance. + * + * Proper fix (backend): Add requestPaymentUuid field to PerkUsage model with + * a unique constraint @@unique([userId, perkId, requestPaymentUuid]), similar + * to how mantecaTransferId/bridgeTransferId/simplefiTransferId are handled. + * Then store clean reason text without the UUID suffix. + */} <PaymentInfoRow label="Reason" - value={perkRewardData.reason} + value={perkRewardData.reason.replace(/\s*\(payment:\s*[a-f0-9-]+\)/i, '')} // hideBottomBorder={!perkRewardData.originatingTxId} hideBottomBorder={true} /> @@ -1113,7 +1132,7 @@ export const TransactionDetailsReceipt = ({ value={ <div className="flex items-center gap-2"> <Image src={STAR_STRAIGHT_ICON} alt="star" width={16} height={16} /> - <span>{transaction.points}</span> + <span>{formatPoints(transaction.points)}</span> </div> } hideBottomBorder={shouldHideBorder('points')} diff --git a/src/config/underMaintenance.config.ts b/src/config/underMaintenance.config.ts index a482aa4d5..70e56cb11 100644 --- a/src/config/underMaintenance.config.ts +++ b/src/config/underMaintenance.config.ts @@ -27,6 +27,13 @@ * - shows info message explaining cross-chain is temporarily unavailable * - same-chain operations continue to work * + * 6. disableCardPioneers: hides the card pioneers waitlist feature entirely + * - /card page redirects to /home + * - /lp/card marketing page redirects to / + * - card pioneers section hidden from landing page + * - card pioneer modal, carousel cta, and perk rewards hidden from home + * - set to false to enable the feature + * * note: if either mode is enabled, the maintenance banner will show everywhere * * I HOPE WE NEVER NEED TO USE THIS... @@ -41,14 +48,16 @@ interface MaintenanceConfig { disabledPaymentProviders: PaymentProvider[] disableSquidWithdraw: boolean disableSquidSend: boolean + disableCardPioneers: boolean } const underMaintenanceConfig: MaintenanceConfig = { enableFullMaintenance: false, // set to true to redirect all pages to /maintenance enableMaintenanceBanner: false, // set to true to show maintenance banner on all pages disabledPaymentProviders: [], // set to ['MANTECA'] to disable Manteca QR payments - disableSquidWithdraw: true, // set to true to disable cross-chain withdrawals (only allows USDC on Arbitrum) - disableSquidSend: true, // set to true to disable cross-chain sends (claim, request payments - only allows USDC on Arbitrum) + disableSquidWithdraw: false, // set to true to disable cross-chain withdrawals (only allows USDC on Arbitrum) + disableSquidSend: false, // set to true to disable cross-chain sends (claim, request payments - only allows USDC on Arbitrum) + disableCardPioneers: true, // set to false to enable the Card Pioneers waitlist feature } export default underMaintenanceConfig diff --git a/src/constants/countryCurrencyMapping.ts b/src/constants/countryCurrencyMapping.ts index 0d07002d4..b82de71d9 100644 --- a/src/constants/countryCurrencyMapping.ts +++ b/src/constants/countryCurrencyMapping.ts @@ -109,3 +109,8 @@ export function isUKCountry(countryIdentifier: string | undefined): boolean { const lower = countryIdentifier.toLowerCase() return lower === 'united-kingdom' || lower === 'gb' || lower === 'gbr' } + +/** Find a currency mapping by country slug (e.g. 'argentina', 'united-kingdom'). */ +export function findMappingBySlug(slug: string): CountryCurrencyMapping | undefined { + return countryCurrencyMappings.find((m) => m.path === slug || m.country.toLowerCase().replace(/ /g, '-') === slug) +} diff --git a/src/constants/points.consts.ts b/src/constants/points.consts.ts new file mode 100644 index 000000000..6a787ea54 --- /dev/null +++ b/src/constants/points.consts.ts @@ -0,0 +1,15 @@ +/** + * Points System Constants + * + * Shared constants for points display. + * Transitivity multiplier is no longer hardcoded — use `contributedPoints` from API. + */ + +/** + * Tier thresholds for display purposes + * Note: Actual tier calculation happens on backend + */ +export const TIER_THRESHOLDS = { + TIER_1: 1000, + TIER_2: 10000, +} as const diff --git a/src/constants/routes.ts b/src/constants/routes.ts index 59411a9df..64bff38aa 100644 --- a/src/constants/routes.ts +++ b/src/constants/routes.ts @@ -10,6 +10,7 @@ * These should not be handled by catch-all routes */ export const DEDICATED_ROUTES = [ + // App routes (auth-gated) 'qr', 'api', 'setup', @@ -23,6 +24,42 @@ export const DEDICATED_ROUTES = [ 'invite', 'support', 'dev', + 'send', + 'profile', + 'kyc', + 'maintenance', + 'quests', + 'receipt', + 'crisp-proxy', + 'card-payment', + 'add-money', + 'withdraw', + 'sdk', + 'qr-pay', + + // Public pages (existing) + 'careers', + 'privacy', + 'terms', + 'lp', + 'exchange', + + // Future SEO routes (pre-register so catch-all doesn't intercept) + 'send-money-to', + 'receive-money-from', + 'deposit', + 'pay-with', + 'convert', + 'compare', + 'blog', + 'help', + 'faq', + 'how-it-works', + + // Locale prefixes + 'en', + 'es', + 'pt', ] as const /** @@ -56,6 +93,11 @@ export const RESERVED_ROUTES: readonly string[] = [...DEDICATED_ROUTES, ...STATI */ export const PUBLIC_ROUTES = ['request/pay', 'claim', 'pay', 'support', 'invite', 'qr', 'dev/payment-graph'] as const +/** + * Dev test routes that are public only in dev mode + */ +export const DEV_ONLY_PUBLIC_ROUTES = ['dev', 'dev/gift-test', 'dev/shake-test'] as const + /** * Regex pattern for public routes (used in layout.tsx) * Matches paths that don't require authentication @@ -65,6 +107,12 @@ export const PUBLIC_ROUTES = ['request/pay', 'claim', 'pay', 'support', 'invite' */ export const PUBLIC_ROUTES_REGEX = /^\/(request\/pay|claim|pay\/.+|support|invite|qr|dev\/payment-graph)/ +/** + * Regex for dev-only public routes (dev index, gift-test, shake-test) + * Only matched when IS_DEV is true + */ +export const DEV_ONLY_PUBLIC_ROUTES_REGEX = /^\/(dev$|dev\/gift-test|dev\/shake-test)/ + /** * Routes where middleware should run * @@ -104,7 +152,15 @@ export function isReservedRoute(path: string): boolean { /** * Helper to check if a path is public (no auth required) + * Dev test pages (gift-test, shake-test) are only public in dev mode */ -export function isPublicRoute(path: string): boolean { - return PUBLIC_ROUTES_REGEX.test(path) +export function isPublicRoute(path: string, isDev = false): boolean { + if (PUBLIC_ROUTES_REGEX.test(path)) { + return true + } + // Dev test pages are only public in dev mode + if (isDev && DEV_ONLY_PUBLIC_ROUTES_REGEX.test(path)) { + return true + } + return false } diff --git a/src/content b/src/content new file mode 160000 index 000000000..bbc9e2533 --- /dev/null +++ b/src/content @@ -0,0 +1 @@ +Subproject commit bbc9e25335d3754fed11eaae058fa53a9d77a128 diff --git a/src/context/OnrampFlowContext.tsx b/src/context/OnrampFlowContext.tsx index 26b51f737..14878e58e 100644 --- a/src/context/OnrampFlowContext.tsx +++ b/src/context/OnrampFlowContext.tsx @@ -23,6 +23,10 @@ export interface IOnrampData { bic?: string accountHolderName?: string clabe?: string + // uk faster payments fields + sortCode?: string + accountNumber?: string + reference?: string } } diff --git a/src/context/authContext.tsx b/src/context/authContext.tsx index 02012fa2b..69d7ad7c6 100644 --- a/src/context/authContext.tsx +++ b/src/context/authContext.tsx @@ -42,7 +42,8 @@ interface AuthContextType { } }) => Promise<void> isFetchingUser: boolean - logoutUser: () => Promise<void> + userFetchError: Error | null + logoutUser: (options?: { skipBackendCall?: boolean }) => Promise<void> isLoggingOut: boolean invitedUsernamesSet: Set<string> } @@ -60,7 +61,7 @@ export const AuthProvider = ({ children }: { children: ReactNode }) => { const queryClient = useQueryClient() const WEB_AUTHN_COOKIE_KEY = 'web-authn-key' - const { data: user, isLoading: isFetchingUser, refetch: fetchUser } = useUserQuery() + const { data: user, isLoading: isFetchingUser, refetch: fetchUser, error: userFetchError } = useUserQuery() // Pre-compute a Set of invited usernames for O(1) lookups const invitedUsernamesSet = useMemo(() => { @@ -149,84 +150,107 @@ export const AuthProvider = ({ children }: { children: ReactNode }) => { }) } - const logoutUser = useCallback(async () => { - if (isLoggingOut) return + /** + * Clears all client-side auth state (cookies, localStorage, redux, caches) + * Used by both normal logout and force logout (when backend is down) + */ + const clearLocalAuthState = useCallback(async () => { + // clear user preferences (webauthn key in localStorage) + updateUserPreferences(user?.user.userId, { webAuthnKey: undefined }) - setIsLoggingOut(true) - try { - const response = await fetchWithSentry('/api/peanut/user/logout-user', { - method: 'GET', - headers: { - 'Content-Type': 'application/json', - }, - }) + // clear cookies + removeFromCookie(WEB_AUTHN_COOKIE_KEY) + document.cookie = 'jwt-token=; path=/; expires=Thu, 01 Jan 1970 00:00:01 GMT;' + + // clear redirect url + clearRedirectUrl() + + // invalidate all queries + queryClient.invalidateQueries() - if (response.ok) { - // clear user preferences (webauthn key in localStorage) - updateUserPreferences(user?.user.userId, { webAuthnKey: undefined }) + // reset redux state (setup and zerodev) + dispatch(setupActions.resetSetup()) + dispatch(zerodevActions.resetZeroDevState()) + console.log('[Logout] Cleared redux state (setup and zerodev)') + + // Clear service worker caches to prevent user data leakage + // When User A logs out and User B logs in on the same device, cached API responses + // could expose User A's data (profile, transactions, KYC) to User B + // Only clears user-specific caches; preserves prices and external resources + if ('caches' in window) { + try { + const cacheNames = await caches.keys() + await Promise.all( + cacheNames + .filter((name) => USER_DATA_CACHE_PATTERNS.some((pattern) => name.includes(pattern))) + .map((name) => { + console.log('Logout: Clearing cache:', name) + return caches.delete(name) + }) + ) + } catch (error) { + console.error('Failed to clear caches on logout:', error) + // Non-fatal: logout continues even if cache clearing fails + } + } - // clear cookies - removeFromCookie(WEB_AUTHN_COOKIE_KEY) - document.cookie = 'jwt-token=; path=/; expires=Thu, 01 Jan 1970 00:00:01 GMT;' + // clear the iOS PWA prompt session flag + if (typeof window !== 'undefined') { + sessionStorage.removeItem('hasSeenIOSPWAPromptThisSession') + } - // clear redirect url - clearRedirectUrl() + // Reset Crisp session to prevent session merging with next user + // This resets both main window Crisp instance and any proxy page instances + if (typeof window !== 'undefined') { + resetCrispProxySessions() + } + }, [dispatch, queryClient, user?.user.userId]) - // invalidate all queries - queryClient.invalidateQueries() + /** + * Logs out the user + * @param options.skipBackendCall - If true, skips the backend logout call (useful when backend is down) + */ + const logoutUser = useCallback( + async (options?: { skipBackendCall?: boolean }) => { + if (isLoggingOut) return - // reset redux state (setup and zerodev) - dispatch(setupActions.resetSetup()) - dispatch(zerodevActions.resetZeroDevState()) - console.log('[Logout] Cleared redux state (setup and zerodev)') + setIsLoggingOut(true) + try { + // Call backend logout unless skipped (e.g., when backend is down) + if (!options?.skipBackendCall) { + const response = await fetchWithSentry('/api/peanut/user/logout-user', { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + }, + }) - // Clear service worker caches to prevent user data leakage - // When User A logs out and User B logs in on the same device, cached API responses - // could expose User A's data (profile, transactions, KYC) to User B - // Only clears user-specific caches; preserves prices and external resources - if ('caches' in window) { - try { - const cacheNames = await caches.keys() - await Promise.all( - cacheNames - .filter((name) => USER_DATA_CACHE_PATTERNS.some((pattern) => name.includes(pattern))) - .map((name) => { - console.log('Logout: Clearing cache:', name) - return caches.delete(name) - }) - ) - } catch (error) { - console.error('Failed to clear caches on logout:', error) - // Non-fatal: logout continues even if cache clearing fails + if (!response.ok) { + throw new Error('Backend logout failed') } } - // clear the iOS PWA prompt session flag - if (typeof window !== 'undefined') { - sessionStorage.removeItem('hasSeenIOSPWAPromptThisSession') - } + // Clear all client-side auth state + await clearLocalAuthState() - // Reset Crisp session to prevent session merging with next user - // This resets both main window Crisp instance and any proxy page instances - if (typeof window !== 'undefined') { - resetCrispProxySessions() + // fetch user (should return null after logout) - skip if backend call was skipped + if (!options?.skipBackendCall) { + await fetchUser() } - // fetch user (should return null after logout) - await fetchUser() - // force full page refresh to /setup to clear all state // this ensures no stale redux/react state persists after logout window.location.href = '/setup' + } catch (error) { + captureException(error) + console.error('Error logging out user', error) + toast.error('Error logging out') + } finally { + setIsLoggingOut(false) } - } catch (error) { - captureException(error) - console.error('Error logging out user', error) - toast.error('Error logging out') - } finally { - setIsLoggingOut(false) - } - }, [fetchUser, isLoggingOut, user]) + }, + [clearLocalAuthState, fetchUser, isLoggingOut, toast] + ) return ( <AuthContext.Provider @@ -237,6 +261,7 @@ export const AuthProvider = ({ children }: { children: ReactNode }) => { fetchUser: legacy_fetchUser, addAccount, isFetchingUser, + userFetchError: userFetchError ?? null, logoutUser, isLoggingOut, invitedUsernamesSet, diff --git a/src/context/kernelClient.context.tsx b/src/context/kernelClient.context.tsx index 27a243771..1710de8d6 100644 --- a/src/context/kernelClient.context.tsx +++ b/src/context/kernelClient.context.tsx @@ -172,7 +172,14 @@ export const KernelClientProvider = ({ children }: { children: ReactNode }) => { const userPreferences = getUserPreferences(user.user.userId) const storedWebAuthnKey = userPreferences?.webAuthnKey ?? getFromCookie(WEB_AUTHN_COOKIE_KEY) if (storedWebAuthnKey) { - setWebAuthnKey(storedWebAuthnKey) + // Only update if the key actually changed to avoid re-triggering kernel client init + // Note: WebAuthnKey contains BigInt fields (pubX, pubY) which JSON.stringify cannot handle, + // so we use a custom replacer that converts BigInts to strings for comparison purposes. + const bigIntSafeStringify = (obj: unknown) => + JSON.stringify(obj, (_, v) => (typeof v === 'bigint' ? v.toString() : v)) + setWebAuthnKey((prev) => + prev && bigIntSafeStringify(prev) === bigIntSafeStringify(storedWebAuthnKey) ? prev : storedWebAuthnKey + ) } else { // avoid mixed state logoutUser() diff --git a/src/data/seo/comparisons.ts b/src/data/seo/comparisons.ts new file mode 100644 index 000000000..ee17d2a46 --- /dev/null +++ b/src/data/seo/comparisons.ts @@ -0,0 +1,142 @@ +// Typed wrappers for competitor comparison data. +// Reads from peanut-content: input/data/competitors/ + content/compare/ +// Public API unchanged from previous version. + +import { readEntityData, readPageContent, listEntitySlugs, listContentSlugs, isPublished } from '@/lib/content' +import { extractFaqs } from './utils' + +// --- Entity frontmatter (input/data/competitors/{slug}.md) --- + +interface CompetitorEntityFrontmatter { + slug: string + name: string + type: string + fee_model: string + speed: string + rate_type: string + supports_mercadopago: boolean + supports_pix: boolean + local_spending_argentina: boolean + local_spending_brazil: boolean + global_availability: boolean +} + +// --- Content frontmatter (content/compare/{slug}/{lang}.md) --- + +interface CompareContentFrontmatter { + title: string + description: string + slug: string + lang: string + published: boolean + competitor: string + schema_types: string[] + alternates?: Record<string, string> +} + +// --- Public types (unchanged) --- + +export interface Competitor { + name: string + tagline: string + rows: Array<{ feature: string; peanut: string; competitor: string }> + prosCompetitor: string[] + consCompetitor: string[] + verdict: string + faqs: Array<{ q: string; a: string }> + image?: string +} + +// --- Loader --- + +function loadCompetitors(): Record<string, Competitor> { + const result: Record<string, Competitor> = {} + + // Get competitor slugs from content directory (content/compare/) + const contentSlugs = listContentSlugs('compare') + // Also check entity data for completeness + const entitySlugs = listEntitySlugs('competitors') + const allSlugs = [...new Set([...contentSlugs, ...entitySlugs])] + + for (const slug of allSlugs) { + const entity = readEntityData<CompetitorEntityFrontmatter>('competitors', slug) + if (!entity) continue + + const content = readPageContent<CompareContentFrontmatter>('compare', slug, 'en') + + if (!content || !isPublished(content)) continue + + const fm = entity.frontmatter + const body = content.body + + // Extract structured data from entity + generated content + result[slug] = { + name: fm.name, + tagline: buildTagline(fm), + rows: buildComparisonRows(fm), + prosCompetitor: buildPros(fm), + consCompetitor: buildCons(fm), + verdict: buildVerdict(fm), + faqs: extractFaqs(body), + } + } + + return result +} + +function buildTagline(fm: CompetitorEntityFrontmatter): string { + return `Compare Peanut with ${fm.name} for sending money to Latin America.` +} + +function buildComparisonRows( + fm: CompetitorEntityFrontmatter +): Array<{ feature: string; peanut: string; competitor: string }> { + return [ + { feature: 'Fee Model', peanut: 'Free deposits & payments', competitor: fm.fee_model }, + { feature: 'Speed', peanut: 'Instant local payments', competitor: fm.speed }, + { feature: 'Rate Type', peanut: 'Cripto dólar / market rate', competitor: fm.rate_type }, + { + feature: 'Mercado Pago', + peanut: 'Yes', + competitor: fm.supports_mercadopago ? 'Yes' : 'No', + }, + { feature: 'Pix', peanut: 'Yes', competitor: fm.supports_pix ? 'Yes' : 'No' }, + { + feature: 'Local Spending (Argentina)', + peanut: 'Yes — QR + ATM', + competitor: fm.local_spending_argentina ? 'Yes' : 'No', + }, + { + feature: 'Local Spending (Brazil)', + peanut: 'Yes — Pix QR', + competitor: fm.local_spending_brazil ? 'Yes' : 'No', + }, + ] +} + +function buildPros(fm: CompetitorEntityFrontmatter): string[] { + const pros: string[] = [] + if (fm.global_availability) pros.push('Available globally') + if (fm.speed.includes('instant') || fm.speed.includes('Instant')) pros.push('Fast transfers') + pros.push('Well-known brand') + return pros +} + +function buildCons(fm: CompetitorEntityFrontmatter): string[] { + const cons: string[] = [] + if (!fm.supports_mercadopago) cons.push('No Mercado Pago support') + if (!fm.supports_pix) cons.push('No Pix support') + if (!fm.local_spending_argentina) cons.push('No local spending in Argentina') + if (!fm.local_spending_brazil) cons.push('No local spending in Brazil') + if (fm.rate_type !== 'cripto-dolar') cons.push('Uses less favorable exchange rate') + return cons +} + +function buildVerdict(fm: CompetitorEntityFrontmatter): string { + if (!fm.supports_mercadopago && !fm.supports_pix) { + return `${fm.name} is a solid choice for international transfers, but if you need to pay locally in Argentina or Brazil, Peanut offers better rates and direct local payment access.` + } + return `Both services have their strengths. Peanut excels for local payments in Latin America with better exchange rates.` +} + +export const COMPETITORS: Record<string, Competitor> = loadCompetitors() diff --git a/src/data/seo/corridors.ts b/src/data/seo/corridors.ts new file mode 100644 index 000000000..d3403fdf8 --- /dev/null +++ b/src/data/seo/corridors.ts @@ -0,0 +1,236 @@ +// Typed wrappers for corridor/country SEO data. +// Reads from peanut-content: input/data/countries/ + content/countries/ + content/send-to/ +// Public API unchanged from previous version. + +import { + readEntityData, + readPageContent, + readPageContentLocalized, + listEntitySlugs, + listContentSlugs, + listCorridorOrigins, + isPublished, +} from '@/lib/content' +import type { Locale } from '@/i18n/types' +import { extractFaqs } from './utils' + +// --- Entity frontmatter schema (input/data/countries/{slug}.md) --- + +interface CountryEntityFrontmatter { + slug: string + name: string + currency: string + local_id: string + local_payment_methods: string[] + corridors: Array<{ + origin: string + priority: 'high' | 'medium' | 'low' + common_use_cases: string[] + }> +} + +// --- Content frontmatter schema (content/countries/{slug}/{lang}.md) --- + +interface CountryContentFrontmatter { + title: string + description: string + slug: string + lang: string + published: boolean + schema_types: string[] + alternates?: Record<string, string> +} + +// --- Spending method entity frontmatter --- + +interface SpendingMethodFrontmatter { + slug: string + name: string + type: string +} + +// --- Public types (matches fields consumed by page components) --- + +export interface CountrySEO { + name: string + region: string + currency: string + localPaymentMethods: string[] + context: string + instantPayment?: string + payMerchants: boolean + faqs: Array<{ q: string; a: string }> + corridors: Array<{ + origin: string + priority: 'high' | 'medium' | 'low' + }> +} + +export interface Corridor { + from: string + to: string +} + +// --- Loader --- + +function loadAll() { + const countrySlugs = listEntitySlugs('countries') + const countries: Record<string, CountrySEO> = {} + const corridors: Corridor[] = [] + const publishedCountries = new Set<string>() + + // First pass: determine which countries have published content pages + const contentSlugs = listContentSlugs('countries') + for (const slug of contentSlugs) { + const content = readPageContent<CountryContentFrontmatter>('countries', slug, 'en') + if (content && isPublished(content)) { + publishedCountries.add(slug) + } + } + + // If no published content yet, treat all countries with entity data + content as available + // This allows the site to work during the transition period when published: false + if (publishedCountries.size === 0) { + for (const slug of contentSlugs) { + const content = readPageContent<CountryContentFrontmatter>('countries', slug, 'en') + if (content) publishedCountries.add(slug) + } + } + + for (const slug of countrySlugs) { + if (!publishedCountries.has(slug)) continue + + const entity = readEntityData<CountryEntityFrontmatter>('countries', slug) + if (!entity) continue + + const content = readPageContent<CountryContentFrontmatter>('countries', slug, 'en') + const fm = entity.frontmatter + + // Resolve the first local payment method name for instantPayment display + const paymentMethods = fm.local_payment_methods ?? [] + let instantPayment: string | undefined + let payMerchants = false + + if (paymentMethods.length > 0) { + const methodEntity = readEntityData<SpendingMethodFrontmatter>('spending-methods', paymentMethods[0]) + instantPayment = methodEntity?.frontmatter.name ?? paymentMethods[0] + // QR-type methods support merchant payments + payMerchants = methodEntity?.frontmatter.type === 'qr' + } + + // Extract FAQs from the content body + const faqs = content ? extractFaqs(content.body) : [] + + countries[slug] = { + name: fm.name, + region: inferRegion(slug), + currency: fm.currency, + localPaymentMethods: paymentMethods, + context: content?.body ?? '', + instantPayment, + payMerchants, + faqs, + corridors: fm.corridors?.map((c) => ({ origin: c.origin, priority: c.priority })) ?? [], + } + + // Build corridors from entity data (some entities use destination: instead of origin:, skip those) + if (fm.corridors) { + for (const corridor of fm.corridors) { + if (corridor.origin) { + corridors.push({ from: corridor.origin, to: slug }) + } + } + } + } + + // Also add corridors discovered from content/send-to/{dest}/from/{origin}/ + for (const dest of listContentSlugs('send-to')) { + for (const origin of listCorridorOrigins(dest)) { + if (!corridors.some((c) => c.from === origin && c.to === dest)) { + corridors.push({ from: origin, to: dest }) + } + } + } + + // Deduplicate corridors + const seen = new Set<string>() + const uniqueCorridors = corridors.filter((c) => { + const key = `${c.from}→${c.to}` + if (seen.has(key)) return false + seen.add(key) + return true + }) + + return { countries, corridors: uniqueCorridors } +} + +/** Infer region from slug — simple heuristic based on known country lists */ +function inferRegion(slug: string): string { + const latam = [ + 'argentina', + 'brazil', + 'mexico', + 'colombia', + 'chile', + 'peru', + 'costa-rica', + 'panama', + 'bolivia', + 'guatemala', + ] + const northAmerica = ['united-states', 'canada'] + const asiaOceania = [ + 'australia', + 'philippines', + 'japan', + 'india', + 'indonesia', + 'malaysia', + 'singapore', + 'thailand', + 'vietnam', + 'pakistan', + 'saudi-arabia', + 'united-arab-emirates', + ] + const africa = ['kenya', 'nigeria', 'south-africa', 'tanzania'] + + if (latam.includes(slug)) return 'latam' + if (northAmerica.includes(slug)) return 'north-america' + if (asiaOceania.includes(slug)) return 'asia-oceania' + if (africa.includes(slug)) return 'africa' + return 'europe' +} + +const _loaded = loadAll() + +export const COUNTRIES_SEO: Record<string, CountrySEO> = _loaded.countries +export const CORRIDORS: Corridor[] = _loaded.corridors + +/** Get country SEO data with locale-specific content (falls back via chain) */ +export function getLocalizedSEO(country: string, locale: Locale): CountrySEO | null { + const base = COUNTRIES_SEO[country] + if (!base) return null + if (locale === 'en') return base + + const localized = readPageContentLocalized<CountryContentFrontmatter>('countries', country, locale) + if (!localized) return base + + const localizedFaqs = extractFaqs(localized.body) + + return { + ...base, + context: localized.body, + faqs: localizedFaqs.length > 0 ? localizedFaqs : base.faqs, + } +} + +/** Get localized country display name */ +export function getCountryName(slug: string, _locale: Locale): string { + // Read name from entity data + const entity = readEntityData<CountryEntityFrontmatter>('countries', slug) + if (entity) return entity.frontmatter.name + + // Fallback: title-case the slug + return slug.replace(/-/g, ' ').replace(/\b\w/g, (c) => c.toUpperCase()) +} diff --git a/src/data/seo/exchanges.ts b/src/data/seo/exchanges.ts new file mode 100644 index 000000000..9486629d6 --- /dev/null +++ b/src/data/seo/exchanges.ts @@ -0,0 +1,108 @@ +// Typed wrappers for exchange deposit data. +// Reads from peanut-content: input/data/exchanges/ + content/deposit/ +// Public API unchanged from previous version. + +import { readEntityData, readPageContent, listEntitySlugs, listContentSlugs } from '@/lib/content' +import { extractFaqs, extractSteps, extractTroubleshooting } from './utils' + +// --- Entity frontmatter (input/data/exchanges/{slug}.md) --- + +interface ExchangeEntityFrontmatter { + slug: string + name: string + type: string + supported_networks: string[] + supported_stablecoins: string[] + withdrawal_fee_usdc: string + min_withdrawal: string + kyc_required: boolean + geo_restrictions: string +} + +// --- Content frontmatter (content/deposit/{slug}/{lang}.md) --- + +interface DepositContentFrontmatter { + title: string + description: string + slug: string + deposit_source?: string + lang: string + published: boolean + schema_types: string[] +} + +// --- Public types (unchanged) --- + +export interface Exchange { + name: string + recommendedNetwork: string + alternativeNetworks: string[] + withdrawalFee: string + processingTime: string + networkFee: string + steps: string[] + troubleshooting: Array<{ issue: string; fix: string }> + faqs: Array<{ q: string; a: string }> + image?: string +} + +// --- Loader --- + +function loadExchanges(): Record<string, Exchange> { + const result: Record<string, Exchange> = {} + const entitySlugs = listEntitySlugs('exchanges') + + for (const slug of entitySlugs) { + const entity = readEntityData<ExchangeEntityFrontmatter>('exchanges', slug) + if (!entity) continue + + const fm = entity.frontmatter + + // Extract steps from entity body (numbered list under ## Deposit to Peanut Flow) + const steps = extractSteps(entity.body, /Deposit to Peanut Flow|Step-by-Step|How to Deposit/) + const troubleshooting = extractTroubleshooting(entity.body) + const faqs = extractFaqs(entity.body) + + // Determine recommended network (first in list, or common fast ones) + const networks = fm.supported_networks ?? [] + const recommended = pickRecommendedNetwork(networks) + + result[slug] = { + name: fm.name, + recommendedNetwork: recommended, + alternativeNetworks: networks.filter((n) => n !== recommended), + withdrawalFee: fm.withdrawal_fee_usdc ?? 'Varies', + processingTime: estimateProcessingTime(recommended), + networkFee: 'Covered by Peanut', + steps, + troubleshooting, + faqs, + } + } + + return result +} + +function pickRecommendedNetwork(networks: string[]): string { + // Prefer fast/cheap networks + const preference = ['polygon', 'arbitrum', 'base', 'solana', 'tron', 'avalanche', 'ethereum'] + for (const pref of preference) { + if (networks.includes(pref)) return pref + } + return networks[0] ?? 'polygon' +} + +function estimateProcessingTime(network: string): string { + const times: Record<string, string> = { + polygon: '~2 minutes', + arbitrum: '~2 minutes', + base: '~2 minutes', + solana: '~1 minute', + tron: '~3 minutes', + avalanche: '~2 minutes', + ethereum: '~5 minutes', + } + return times[network] ?? '1-10 minutes' +} + +export const EXCHANGES: Record<string, Exchange> = loadExchanges() diff --git a/src/data/seo/index.ts b/src/data/seo/index.ts new file mode 100644 index 000000000..e25b4fbe9 --- /dev/null +++ b/src/data/seo/index.ts @@ -0,0 +1,11 @@ +export { COUNTRIES_SEO, CORRIDORS, getLocalizedSEO, getCountryName } from './corridors' +export type { CountrySEO, Corridor } from './corridors' + +export { COMPETITORS } from './comparisons' +export type { Competitor } from './comparisons' + +export { EXCHANGES } from './exchanges' +export type { Exchange } from './exchanges' + +export { PAYMENT_METHODS, PAYMENT_METHOD_SLUGS } from './payment-methods' +export type { PaymentMethod } from './payment-methods' diff --git a/src/data/seo/payment-methods.ts b/src/data/seo/payment-methods.ts new file mode 100644 index 000000000..13c2dad2c --- /dev/null +++ b/src/data/seo/payment-methods.ts @@ -0,0 +1,83 @@ +// Typed wrapper for payment method data. +// Reads from peanut-content: input/data/spending-methods/ + content/pay-with/ +// Note: "payment-methods" → "spending-methods" in new repo. +// Public API unchanged from previous version. + +import { readEntityData, readPageContent, listEntitySlugs, listContentSlugs } from '@/lib/content' +import { extractFaqs, extractSteps } from './utils' + +// --- Entity frontmatter (input/data/spending-methods/{slug}.md) --- + +interface SpendingMethodEntityFrontmatter { + slug: string + name: string + type: string + countries: string[] + user_base?: string + transaction_types?: string[] + availability?: string + speed?: string +} + +// --- Content frontmatter (content/pay-with/{slug}/{lang}.md) --- + +interface PayWithContentFrontmatter { + title: string + description: string + slug: string + lang: string + published: boolean + schema_types: string[] + alternates?: Record<string, string> +} + +// --- Public types (unchanged) --- + +export interface PaymentMethod { + slug: string + name: string + countries: string[] + description: string + steps: string[] + faqs: Array<{ q: string; a: string }> +} + +// --- Loader --- + +function loadPaymentMethods(): Record<string, PaymentMethod> { + const result: Record<string, PaymentMethod> = {} + + // Get methods that have both entity data and content pages + const contentSlugs = new Set(listContentSlugs('pay-with')) + const entitySlugs = listEntitySlugs('spending-methods') + + for (const slug of entitySlugs) { + // Only include methods that have a pay-with content page + if (!contentSlugs.has(slug)) continue + + const entity = readEntityData<SpendingMethodEntityFrontmatter>('spending-methods', slug) + if (!entity) continue + + const content = readPageContent<PayWithContentFrontmatter>('pay-with', slug, 'en') + if (!content) continue + + const fm = entity.frontmatter + + result[slug] = { + slug, + name: fm.name, + countries: fm.countries ?? [], + description: content.body, + steps: extractSteps(content.body, /Merchant QR Payments|How to Pay|Steps|How It Works/, (line) => { + const match = line.match(/^\d+\.\s+\*\*(.+?)\*\*/) + return match ? match[1].trim() : null + }), + faqs: extractFaqs(content.body), + } + } + + return result +} + +export const PAYMENT_METHODS = loadPaymentMethods() +export const PAYMENT_METHOD_SLUGS = Object.keys(PAYMENT_METHODS) diff --git a/src/data/seo/utils.ts b/src/data/seo/utils.ts new file mode 100644 index 000000000..1a8989464 --- /dev/null +++ b/src/data/seo/utils.ts @@ -0,0 +1,97 @@ +// Shared extraction utilities for SEO content loaders. +// Parses structured data (FAQs, steps, troubleshooting) from markdown/MDX body text. + +export interface FAQ { + q: string + a: string +} + +/** + * Extract FAQ items from markdown/MDX body. + * Supports two formats: + * 1. Markdown: ## FAQ section with ### question headings + * 2. MDX: <FAQItem question="...">answer</FAQItem> components + */ +export function extractFaqs(body: string): FAQ[] { + const faqs: FAQ[] = [] + + // Format 1: Markdown ## FAQ section with ### headings + const faqSection = body.match(/## (?:FAQ|Frequently Asked Questions)\s*\n([\s\S]*?)(?=\n## [^#]|$)/i) + if (faqSection) { + const lines = faqSection[1].split('\n') + let currentQ = '' + let currentA = '' + + for (const line of lines) { + if (line.startsWith('### ')) { + if (currentQ && currentA.trim()) faqs.push({ q: currentQ, a: currentA.trim() }) + currentQ = line.replace(/^### /, '').replace(/\*\*/g, '').trim() + currentA = '' + } else if (currentQ) { + currentA += line + '\n' + } + } + if (currentQ && currentA.trim()) faqs.push({ q: currentQ, a: currentA.trim() }) + } + + // Format 2: MDX <FAQItem question="...">answer</FAQItem> + if (faqs.length === 0) { + const faqItems = body.matchAll(/<FAQItem\s+question="([^"]+)"[^>]*>([\s\S]*?)<\/FAQItem>/g) + for (const match of faqItems) { + faqs.push({ q: match[1], a: match[2].trim() }) + } + } + + return faqs +} + +/** + * Extract numbered steps from a markdown section. + * @param body - markdown body text + * @param headingPattern - regex pattern to match the section heading (without ## prefix) + * @param lineParser - optional custom line parser; defaults to extracting `1. step text` + */ +export function extractSteps( + body: string, + headingPattern: RegExp, + lineParser?: (line: string) => string | null +): string[] { + const steps: string[] = [] + const section = body.match( + new RegExp(`##?#?\\s+(?:${headingPattern.source})\\s*\\n([\\s\\S]*?)(?=\\n##?#?\\s|$)`, 'i') + ) + if (!section) return steps + + const defaultParser = (line: string): string | null => { + const match = line.match(/^\d+\.\s+(.+)/) + return match ? match[1].replace(/\*\*/g, '').trim() : null + } + + const parse = lineParser ?? defaultParser + + const lines = section[1].split('\n') + for (const line of lines) { + const result = parse(line) + if (result) steps.push(result) + } + return steps +} + +/** + * Extract troubleshooting items from markdown body. + * Looks for `- **issue**: fix` patterns under a ## Troubleshooting heading. + */ +export function extractTroubleshooting(body: string): Array<{ issue: string; fix: string }> { + const items: Array<{ issue: string; fix: string }> = [] + const section = body.match(/## (?:Troubleshooting|Common Issues)\s*\n([\s\S]*?)(?=\n## [^#]|$)/i) + if (!section) return items + + const lines = section[1].split('\n') + for (const line of lines) { + const match = line.match(/^[-*]\s+\*\*(.+?)\*\*[:\s]+(.+)/) + if (match) { + items.push({ issue: match[1], fix: match[2].trim() }) + } + } + return items +} diff --git a/src/data/team.ts b/src/data/team.ts new file mode 100644 index 000000000..480139e6d --- /dev/null +++ b/src/data/team.ts @@ -0,0 +1,50 @@ +/** + * Team member data for the /team page and blog author attribution. + * + * TODO (team): Fill in real team member data: + * - name: Full name + * - role: Job title + * - bio: 1-2 sentence bio focusing on expertise (builds E-E-A-T for Google) + * - slug: URL-safe identifier (used for /team/{slug} if individual pages are added later) + * - image: Path to headshot in /public/team/ (recommended: 400x400px, WebP format) + * - social: Optional links to LinkedIn, Twitter/X, GitHub + * + * Why this matters for SEO: + * - Google's E-E-A-T (Experience, Expertise, Authoritativeness, Trust) signals + * - Blog posts linked to real author profiles rank better + * - Author structured data (schema.org/Person) builds entity recognition + */ + +export interface TeamMember { + slug: string + name: string + role: string + bio: string + image?: string + social?: { + linkedin?: string + twitter?: string + github?: string + } +} + +export const TEAM_MEMBERS: TeamMember[] = [ + // TODO (team): Replace with real team data + { + slug: 'hugo', + name: 'Hugo Montenegro', + role: 'Co-Founder', + bio: 'Building Peanut to make cross-border payments accessible to everyone.', + }, + { + slug: 'konrad', + name: 'Konrad', + role: 'Co-Founder', + bio: 'Focused on growth and making Peanut the easiest way to send money internationally.', + }, +] + +/** Find a team member by slug */ +export function getTeamMember(slug: string): TeamMember | undefined { + return TEAM_MEMBERS.find((m) => m.slug === slug) +} diff --git a/src/features/payments/flows/semantic-request/SemanticRequestFlowContext.tsx b/src/features/payments/flows/semantic-request/SemanticRequestFlowContext.tsx index 401b3f927..c44c7b9e7 100644 --- a/src/features/payments/flows/semantic-request/SemanticRequestFlowContext.tsx +++ b/src/features/payments/flows/semantic-request/SemanticRequestFlowContext.tsx @@ -166,15 +166,24 @@ export function SemanticRequestFlowProvider({ const [isSuccess, setIsSuccess] = useState(false) const [isExternalWalletPayment, setIsExternalWalletPayment] = useState(false) - // derive recipient from parsed url + // derive recipient from parsed url OR charge const recipient = useMemo<SemanticRequestRecipient | null>(() => { + // If we have a charge, use its recipient address + if (charge?.requestLink?.recipientAddress) { + return { + identifier: charge.requestLink.recipientAddress, + recipientType: 'ADDRESS' as RecipientType, + resolvedAddress: charge.requestLink.recipientAddress as Address, + } + } + // Otherwise use parsed URL recipient if (!parsedUrl?.recipient) return null return { identifier: parsedUrl.recipient.identifier, recipientType: parsedUrl.recipient.recipientType, resolvedAddress: parsedUrl.recipient.resolvedAddress as Address, } - }, [parsedUrl]) + }, [parsedUrl, charge]) // reset flow const resetSemanticRequestFlow = useCallback(() => { diff --git a/src/features/payments/flows/semantic-request/SemanticRequestPageWrapper.tsx b/src/features/payments/flows/semantic-request/SemanticRequestPageWrapper.tsx index 09ac39904..ac6a382a8 100644 --- a/src/features/payments/flows/semantic-request/SemanticRequestPageWrapper.tsx +++ b/src/features/payments/flows/semantic-request/SemanticRequestPageWrapper.tsx @@ -43,6 +43,19 @@ export function SemanticRequestPageWrapper({ recipient }: SemanticRequestPageWra return } + // If we have a chargeId, skip URL parsing - charge will provide all needed data + // Use a dummy parsedUrl to satisfy the component contract + if (chargeIdFromUrl) { + setParsedUrl({ + recipient: null, // Will be populated from charge + amount: undefined, + token: undefined, + chain: undefined, + }) + setIsLoading(false) + return + } + setIsLoading(true) setError(null) @@ -66,7 +79,7 @@ export function SemanticRequestPageWrapper({ recipient }: SemanticRequestPageWra .finally(() => { setIsLoading(false) }) - }, [recipient]) + }, [recipient, chargeIdFromUrl]) // loading state if (isLoading) { diff --git a/src/features/payments/flows/semantic-request/useSemanticRequestFlow.ts b/src/features/payments/flows/semantic-request/useSemanticRequestFlow.ts index 5e8ceb2d2..dc43176f8 100644 --- a/src/features/payments/flows/semantic-request/useSemanticRequestFlow.ts +++ b/src/features/payments/flows/semantic-request/useSemanticRequestFlow.ts @@ -515,6 +515,7 @@ export function useSemanticRequestFlow() { sourceChainId: selectedChainID || undefined, sourceTokenAddress: selectedTokenAddress || undefined, sourceTokenSymbol: selectedTokenData?.symbol, + squidQuoteId: calculatedRoute?.rawResponse?.route?.quoteId, }) setPayment(paymentResult) diff --git a/src/features/payments/flows/semantic-request/views/SemanticRequestConfirmView.tsx b/src/features/payments/flows/semantic-request/views/SemanticRequestConfirmView.tsx index 4768ef23a..e0d30bcfb 100644 --- a/src/features/payments/flows/semantic-request/views/SemanticRequestConfirmView.tsx +++ b/src/features/payments/flows/semantic-request/views/SemanticRequestConfirmView.tsx @@ -29,8 +29,14 @@ import { PEANUT_WALLET_CHAIN, PEANUT_WALLET_TOKEN, PEANUT_WALLET_TOKEN_SYMBOL } import PeanutActionDetailsCard, { type PeanutActionDetailsCardRecipientType, } from '@/components/Global/PeanutActionDetailsCard' +import { useSearchParams, useRouter } from 'next/navigation' +import SendWithPeanutCta from '@/features/payments/shared/components/SendWithPeanutCta' export function SemanticRequestConfirmView() { + const router = useRouter() + const searchParams = useSearchParams() + const context = searchParams.get('context') + const isCardPioneer = context === 'card-pioneer' const { amount, usdAmount, @@ -156,6 +162,18 @@ export function SemanticRequestConfirmView() { } } + // handle back navigation - for card pioneer, go back to card flow instead of INITIAL view + // TODO: consider using router.back() for normal request flow too instead of goBackToInitial() + // which manipulates internal state. router.back() would be more consistent and handle + // browser history properly (e.g., if user came from a shared link vs navigating in-app) + const handleBack = () => { + if (isCardPioneer) { + router.push('/card?step=geo') + } else { + goBackToInitial() + } + } + // show loading if we don't have charge details yet or fetching if (!charge || isFetchingCharge) { return ( @@ -167,7 +185,7 @@ export function SemanticRequestConfirmView() { return ( <div className="flex min-h-[inherit] flex-col justify-between gap-8"> - <NavHeader onPrev={goBackToInitial} title="Confirm Payment" /> + <NavHeader onPrev={handleBack} title="Confirm Payment" /> <div className="my-auto flex h-full flex-col justify-center space-y-4 pb-5"> {recipient && recipient.recipientType && ( @@ -191,14 +209,16 @@ export function SemanticRequestConfirmView() { )} {/* payment details card */} <Card className="rounded-sm"> - <PaymentInfoRow - label="Min Received" - loading={!minReceived || isCalculatingRoute} - value={minReceived ?? '-'} - moreInfoText="This transaction may face slippage due to token conversion or cross-chain bridging." - /> + {!isCardPioneer && ( + <PaymentInfoRow + label="Min Received" + loading={!minReceived || isCalculatingRoute} + value={minReceived ?? '-'} + moreInfoText="This transaction may face slippage due to token conversion or cross-chain bridging." + /> + )} - {isCrossChainPayment && ( + {!isCardPioneer && isCrossChainPayment && ( <PaymentInfoRow label="Requested" value={ @@ -214,23 +234,30 @@ export function SemanticRequestConfirmView() { /> )} + {!isCardPioneer && ( + <PaymentInfoRow + label={isCrossChainPayment ? 'Sending' : 'Token and network'} + value={ + <TokenChainInfoDisplay + tokenIconUrl={sendingTokenIconUrl} + chainIconUrl={sendingChainIconUrl} + resolvedTokenSymbol={sendingResolvedTokenSymbol} + fallbackTokenSymbol={PEANUT_WALLET_TOKEN_SYMBOL} + resolvedChainName={sendingResolvedChainName} + fallbackChainName="Arbitrum" + /> + } + /> + )} + <PaymentInfoRow - label={isCrossChainPayment ? 'Sending' : 'Token and network'} - value={ - <TokenChainInfoDisplay - tokenIconUrl={sendingTokenIconUrl} - chainIconUrl={sendingChainIconUrl} - resolvedTokenSymbol={sendingResolvedTokenSymbol} - fallbackTokenSymbol={PEANUT_WALLET_TOKEN_SYMBOL} - resolvedChainName={sendingResolvedChainName} - fallbackChainName="Arbitrum" - /> - } + loading={isCalculatingRoute} + label="Network fee" + value={networkFee} + hideBottomBorder={isCardPioneer} /> - <PaymentInfoRow loading={isCalculatingRoute} label="Network fee" value={networkFee} /> - - <PaymentInfoRow hideBottomBorder label="Peanut fee" value="$ 0.00" /> + {!isCardPioneer && <PaymentInfoRow hideBottomBorder label="Peanut fee" value="$ 0.00" />} </Card> {/* buttons and error */} @@ -247,6 +274,12 @@ export function SemanticRequestConfirmView() { > Retry </Button> + ) : isCardPioneer ? ( + <SendWithPeanutCta + disabled={isLoading || isCalculatingRoute || isFeeEstimationError} + onClick={handleConfirm} + loading={isLoading || isCalculatingRoute} + /> ) : ( <Button disabled={isLoading || isCalculatingRoute || isFeeEstimationError} diff --git a/src/features/payments/flows/semantic-request/views/SemanticRequestSuccessView.tsx b/src/features/payments/flows/semantic-request/views/SemanticRequestSuccessView.tsx index bbd41286f..bd84a0570 100644 --- a/src/features/payments/flows/semantic-request/views/SemanticRequestSuccessView.tsx +++ b/src/features/payments/flows/semantic-request/views/SemanticRequestSuccessView.tsx @@ -9,12 +9,18 @@ * - provides reset callback on completion */ +import { useEffect } from 'react' +import { useRouter, useSearchParams } from 'next/navigation' import PaymentSuccessView from '@/features/payments/shared/components/PaymentSuccessView' import { useSemanticRequestFlow } from '../useSemanticRequestFlow' import { usePointsCalculation } from '@/hooks/usePointsCalculation' import { PointsAction } from '@/services/services.types' export function SemanticRequestSuccessView() { + const router = useRouter() + const searchParams = useSearchParams() + const context = searchParams.get('context') + const { usdAmount, recipient, @@ -26,6 +32,14 @@ export function SemanticRequestSuccessView() { isExternalWalletPayment, } = useSemanticRequestFlow() + // If this is a Card Pioneer payment, skip the generic success screen + // and redirect immediately to the Card Pioneer success page + useEffect(() => { + if (context === 'card-pioneer') { + router.push('/card?step=success') + } + }, [context, router]) + // determine recipient type from parsed url const recipientType = recipient?.recipientType || 'ADDRESS' @@ -37,6 +51,12 @@ export function SemanticRequestSuccessView() { payment?.uuid ) + // Don't render the generic success view for Card Pioneer payments + // (will redirect immediately via useEffect) + if (context === 'card-pioneer') { + return null + } + return ( <PaymentSuccessView type="SEND" diff --git a/src/features/payments/shared/hooks/usePaymentRecorder.ts b/src/features/payments/shared/hooks/usePaymentRecorder.ts index 487fd6c1f..a14932c61 100644 --- a/src/features/payments/shared/hooks/usePaymentRecorder.ts +++ b/src/features/payments/shared/hooks/usePaymentRecorder.ts @@ -30,6 +30,8 @@ export interface RecordPaymentParams { sourceChainId?: string sourceTokenAddress?: string sourceTokenSymbol?: string + // squid quote ID for cross-chain analytics + squidQuoteId?: string } // return type for the hook @@ -61,6 +63,7 @@ export const usePaymentRecorder = (): UsePaymentRecorderReturn => { sourceChainId: params.sourceChainId, sourceTokenAddress: params.sourceTokenAddress, sourceTokenSymbol: params.sourceTokenSymbol, + squidQuoteId: params.squidQuoteId, }) setPayment(paymentResponse) diff --git a/src/hooks/query/user.ts b/src/hooks/query/user.ts index d9db7651b..cd13d862a 100644 --- a/src/hooks/query/user.ts +++ b/src/hooks/query/user.ts @@ -8,6 +8,16 @@ import { usePWAStatus } from '../usePWAStatus' import { useDeviceType } from '../useGetDeviceType' import { USER } from '@/constants/query.consts' +// custom error class for backend errors (5xx) that should trigger retry +export class BackendError extends Error { + status: number + constructor(message: string, status: number) { + super(message) + this.name = 'BackendError' + this.status = status + } +} + export const useUserQuery = (dependsOn: boolean = true) => { const isPwa = usePWAStatus() const { deviceType } = useDeviceType() @@ -23,30 +33,36 @@ export const useUserQuery = (dependsOn: boolean = true) => { isPwa: isPwa, deviceType: deviceType, }) - dispatch(userActions.setUser(userData)) } - return userData - } else { - console.warn('Failed to fetch user, status:', userResponse.status) - // clear stale redux data so the app doesn't keep serving cached user - dispatch(userActions.setUser(null)) - return null } + + // 5xx = backend error, throw so tanstack retries + if (userResponse.status >= 500) { + console.error('Backend error fetching user:', userResponse.status) + throw new BackendError('Backend error fetching user', userResponse.status) + } + + // 4xx = auth failure, clear stale redux so layout redirects to /setup + console.warn('Failed to fetch user, status:', userResponse.status) + dispatch(userActions.setUser(null)) + return null } return useQuery({ queryKey: [USER], queryFn: fetchUser, - retry: 0, + retry: (failureCount, error) => { + if (error instanceof BackendError && failureCount < 2) return true + return false + }, + retryDelay: 1000, enabled: dependsOn, staleTime: 5 * 60 * 1000, gcTime: 10 * 60 * 1000, refetchOnMount: true, refetchOnWindowFocus: true, - // use redux data as placeholder while fetching (no flicker) - // but always validate against the backend placeholderData: authUser || undefined, }) } diff --git a/src/hooks/useCardPioneerInfo.ts b/src/hooks/useCardPioneerInfo.ts new file mode 100644 index 000000000..cea555a28 --- /dev/null +++ b/src/hooks/useCardPioneerInfo.ts @@ -0,0 +1,33 @@ +'use client' + +import { useQuery } from '@tanstack/react-query' +import { cardApi, type CardInfoResponse } from '@/services/card' +import { useAuth } from '@/context/authContext' +import underMaintenanceConfig from '@/config/underMaintenance.config' + +/** + * Hook to fetch Card Pioneer info for the authenticated user. + * Returns eligibility status, purchase status, and pricing. + */ +export const useCardPioneerInfo = () => { + const { user } = useAuth() + + const query = useQuery<CardInfoResponse>({ + queryKey: ['card-info', user?.user?.userId], + queryFn: () => cardApi.getInfo(), + enabled: !!user?.user?.userId && !underMaintenanceConfig.disableCardPioneers, + staleTime: 60_000, // 1 minute + retry: 1, + }) + + return { + cardInfo: query.data, + isLoading: query.isLoading, + error: query.error, + refetch: query.refetch, + // Convenience booleans - return undefined while loading to prevent flash + isEligible: query.isLoading ? undefined : (query.data?.isEligible ?? false), + hasPurchased: query.isLoading ? undefined : (query.data?.hasPurchased ?? false), + price: query.data?.price ?? 10, + } +} diff --git a/src/hooks/useCountUp.ts b/src/hooks/useCountUp.ts new file mode 100644 index 000000000..3498be3c9 --- /dev/null +++ b/src/hooks/useCountUp.ts @@ -0,0 +1,92 @@ +'use client' + +import { useEffect, useRef, useState } from 'react' +import { animate } from 'framer-motion' + +const STORAGE_PREFIX = 'peanut_points_' + +interface UseCountUpOptions { + /** localStorage key suffix for remembering last-seen value across visits */ + storageKey?: string + /** Animation duration in seconds (default: 1.5) */ + duration?: number + /** Only start when true — use with intersection observer for scroll-triggered animations */ + enabled?: boolean +} + +/** + * Animates a number from a previous value to the current value. + * + * - If `storageKey` is provided, remembers the last-seen value in localStorage + * so returning to the page animates from the old value to the new one. + * - If `enabled` is false, waits to start (useful for scroll-into-view triggers). + * - Returns the current animated integer value. + */ +export function useCountUp(target: number, options: UseCountUpOptions = {}): number { + const { storageKey, duration = 1.5, enabled = true } = options + + const [display, setDisplay] = useState(() => { + if (!storageKey) return target + if (typeof window === 'undefined') return target + const stored = localStorage.getItem(STORAGE_PREFIX + storageKey) + return stored ? parseInt(stored, 10) : target + }) + + const hasAnimated = useRef(false) + const isAnimating = useRef(false) + const controlsRef = useRef<ReturnType<typeof animate> | null>(null) + const prevTargetRef = useRef(target) + + useEffect(() => { + if (!enabled || hasAnimated.current) return + + const from = display + const to = target + + // nothing to animate + if (from === to) { + hasAnimated.current = true + if (storageKey) { + localStorage.setItem(STORAGE_PREFIX + storageKey, String(to)) + } + return + } + + hasAnimated.current = true + isAnimating.current = true + + controlsRef.current = animate(from, to, { + duration, + ease: [0.25, 0.1, 0.25, 1], + onUpdate(value) { + setDisplay(Math.round(value)) + }, + onComplete() { + isAnimating.current = false + setDisplay(to) + if (storageKey) { + localStorage.setItem(STORAGE_PREFIX + storageKey, String(to)) + } + }, + }) + + return () => { + controlsRef.current?.stop() + isAnimating.current = false + } + // eslint-disable-next-line react-hooks/exhaustive-deps -- display intentionally excluded to avoid re-triggering + }, [enabled, target, duration, storageKey]) + + // if target changes after animation completed (e.g. refetch), snap to new value + useEffect(() => { + if (prevTargetRef.current !== target && hasAnimated.current && !isAnimating.current) { + setDisplay(target) + if (storageKey) { + localStorage.setItem(STORAGE_PREFIX + storageKey, String(target)) + } + } + prevTargetRef.current = target + }, [target, storageKey]) + + return display +} diff --git a/src/hooks/useHoldToClaim.ts b/src/hooks/useHoldToClaim.ts index 27acdb961..cc73ab021 100644 --- a/src/hooks/useHoldToClaim.ts +++ b/src/hooks/useHoldToClaim.ts @@ -7,18 +7,29 @@ interface UseHoldToClaimOptions { onComplete: () => void holdDuration?: number disabled?: boolean + /** Enable tap-to-progress mode (tap + hold both add progress, with decay) */ + enableTapMode?: boolean + /** Progress added per tap (0-100), default 15 */ + tapProgress?: number + /** Progress added per second while holding (0-100), default 80 */ + holdProgressPerSec?: number + /** Progress decay per second when not interacting (0-100), default 8 */ + decayRate?: number } interface UseHoldToClaimReturn { holdProgress: number isShaking: boolean shakeIntensity: ShakeIntensity + isHolding: boolean startHold: () => void cancelHold: () => void + handleTap: () => void buttonProps: { onPointerDown: () => void onPointerUp: () => void onPointerLeave: () => void + onPointerCancel: () => void onKeyDown: (e: React.KeyboardEvent) => void onKeyUp: (e: React.KeyboardEvent) => void onContextMenu: (e: React.MouseEvent) => void @@ -29,75 +40,201 @@ interface UseHoldToClaimReturn { /** * Custom hook for hold-to-claim button interactions - * Provides progress tracking, shake animation, haptic feedback, and accessibility support + * Supports two modes: + * 1. Hold-only mode (default): Progress only while holding, resets on release + * 2. Tap mode (enableTapMode=true): Tap + hold both add progress, with slow decay */ export function useHoldToClaim({ onComplete, holdDuration = PERK_HOLD_DURATION_MS, disabled = false, + enableTapMode = false, + tapProgress = 15, + holdProgressPerSec = 80, + decayRate = 8, }: UseHoldToClaimOptions): UseHoldToClaimReturn { const [holdProgress, setHoldProgress] = useState(0) const [isShaking, setIsShaking] = useState(false) const [shakeIntensity, setShakeIntensity] = useState<ShakeIntensity>('none') + const [isHolding, setIsHolding] = useState(false) + const holdTimerRef = useRef<NodeJS.Timeout | null>(null) const progressIntervalRef = useRef<NodeJS.Timeout | null>(null) const holdStartTimeRef = useRef<number | null>(null) + const animationFrameRef = useRef<number | null>(null) + const lastUpdateTimeRef = useRef<number>(Date.now()) + const progressRef = useRef<number>(0) + const lastHapticIntensityRef = useRef<ShakeIntensity>('none') + const isCompleteRef = useRef<boolean>(false) + const lastTapTimeRef = useRef<number>(0) // Cleanup timers on unmount useEffect(() => { return () => { if (holdTimerRef.current) clearTimeout(holdTimerRef.current) if (progressIntervalRef.current) clearInterval(progressIntervalRef.current) + if (animationFrameRef.current) cancelAnimationFrame(animationFrameRef.current) holdStartTimeRef.current = null } }, []) - const cancelHold = useCallback(() => { - const PREVIEW_DURATION_MS = 500 + // Tap mode: Main update loop for progress, decay, and haptics + useEffect(() => { + if (!enableTapMode || disabled || isCompleteRef.current) return + + const update = () => { + const now = Date.now() + const deltaTime = (now - lastUpdateTimeRef.current) / 1000 + lastUpdateTimeRef.current = now + + let newProgress = progressRef.current + + // Add progress if holding + if (isHolding) { + newProgress += holdProgressPerSec * deltaTime + } + // Decay if not holding + else if (progressRef.current > 0) { + newProgress -= decayRate * deltaTime + } + + newProgress = Math.max(0, Math.min(100, newProgress)) + progressRef.current = newProgress + setHoldProgress(newProgress) + + // Only shake/vibrate when progress is INCREASING (holding or just tapped) + // Not during decay - the gift should stabilize when you let go + const recentlyTapped = Date.now() - lastTapTimeRef.current < 150 + const isProgressIncreasing = (isHolding || recentlyTapped) && newProgress > 0 + setIsShaking(isProgressIncreasing) + + // Progressive shake intensity - only when actively interacting + let newIntensity: ShakeIntensity = 'none' + if (!isProgressIncreasing || newProgress <= 0) { + newIntensity = 'none' + } else if (newProgress < 25) { + newIntensity = 'weak' + } else if (newProgress < 50) { + newIntensity = 'medium' + } else if (newProgress < 75) { + newIntensity = 'strong' + } else { + newIntensity = 'intense' + } + + // Trigger haptic feedback when intensity changes (only while holding) + if ( + isHolding && + newIntensity !== lastHapticIntensityRef.current && + newIntensity !== 'none' && + 'vibrate' in navigator + ) { + switch (newIntensity) { + case 'weak': + navigator.vibrate(50) + break + case 'medium': + navigator.vibrate([100, 40, 100]) + break + case 'strong': + navigator.vibrate([150, 40, 150, 40, 150]) + break + case 'intense': + navigator.vibrate([200, 40, 200, 40, 200, 40, 200]) + break + } + lastHapticIntensityRef.current = newIntensity + } + + // Reset haptic tracking when not holding so next hold starts fresh + if (!isHolding) { + lastHapticIntensityRef.current = 'none' + } + + setShakeIntensity(newIntensity) + + // Check for completion + if (newProgress >= 100 && !isCompleteRef.current) { + isCompleteRef.current = true + onComplete() + return + } + + animationFrameRef.current = requestAnimationFrame(update) + } - // Calculate how long the user held + lastUpdateTimeRef.current = Date.now() + animationFrameRef.current = requestAnimationFrame(update) + + return () => { + if (animationFrameRef.current) { + cancelAnimationFrame(animationFrameRef.current) + } + } + }, [enableTapMode, disabled, isHolding, holdProgressPerSec, decayRate, onComplete]) + + // Handle tap (tap mode only) + const handleTap = useCallback(() => { + if (disabled || !enableTapMode || isCompleteRef.current) return + + progressRef.current = Math.min(progressRef.current + tapProgress, 100) + setHoldProgress(progressRef.current) + lastTapTimeRef.current = Date.now() + + // Haptic feedback for tap + if ('vibrate' in navigator) { + navigator.vibrate(20) + } + + // Check for completion + if (progressRef.current >= 100 && !isCompleteRef.current) { + isCompleteRef.current = true + onComplete() + } + }, [disabled, enableTapMode, tapProgress, onComplete]) + + // Legacy hold-only mode cancel + const cancelHoldLegacy = useCallback(() => { + const PREVIEW_DURATION_MS = 500 const elapsed = holdStartTimeRef.current ? Date.now() - holdStartTimeRef.current : 0 - // Clear the completion timer if (holdTimerRef.current) clearTimeout(holdTimerRef.current) holdTimerRef.current = null - // If it was a quick tap, let the preview animation continue for 500ms before resetting if (elapsed > 0 && elapsed < PREVIEW_DURATION_MS) { const remainingPreviewTime = PREVIEW_DURATION_MS - elapsed - - // Let animations continue for the preview duration const resetTimer = setTimeout(() => { - // Clean up after preview if (progressIntervalRef.current) clearInterval(progressIntervalRef.current) progressIntervalRef.current = null setHoldProgress(0) setIsShaking(false) setShakeIntensity('none') holdStartTimeRef.current = null - - if ('vibrate' in navigator) { - navigator.vibrate(0) - } + if ('vibrate' in navigator) navigator.vibrate(0) }, remainingPreviewTime) - holdTimerRef.current = resetTimer } else { - // Released after preview duration - reset immediately if (progressIntervalRef.current) clearInterval(progressIntervalRef.current) progressIntervalRef.current = null setHoldProgress(0) setIsShaking(false) setShakeIntensity('none') holdStartTimeRef.current = null - - if ('vibrate' in navigator) { - navigator.vibrate(0) - } + if ('vibrate' in navigator) navigator.vibrate(0) } }, []) - const startHold = useCallback(() => { + const cancelHold = useCallback(() => { + if (enableTapMode) { + // Tap mode: just stop holding, decay will handle the rest + setIsHolding(false) + } else { + cancelHoldLegacy() + } + }, [enableTapMode, cancelHoldLegacy]) + + // Legacy hold-only mode start + const startHoldLegacy = useCallback(() => { if (disabled) return setHoldProgress(0) @@ -107,54 +244,41 @@ export function useHoldToClaim({ holdStartTimeRef.current = startTime let lastIntensity: ShakeIntensity = 'weak' - // Update progress and shake intensity const interval = setInterval(() => { const elapsed = Date.now() - startTime const progress = Math.min((elapsed / holdDuration) * 100, 100) setHoldProgress(progress) - // Progressive shake intensity with haptic feedback let newIntensity: ShakeIntensity = 'weak' - if (progress < 25) { - newIntensity = 'weak' - } else if (progress < 50) { - newIntensity = 'medium' - } else if (progress < 75) { - newIntensity = 'strong' - } else { - newIntensity = 'intense' - } + if (progress < 25) newIntensity = 'weak' + else if (progress < 50) newIntensity = 'medium' + else if (progress < 75) newIntensity = 'strong' + else newIntensity = 'intense' - // Trigger haptic feedback when intensity changes if (newIntensity !== lastIntensity && 'vibrate' in navigator) { - // Progressive vibration patterns that match shake intensity switch (newIntensity) { case 'weak': - navigator.vibrate(50) // Short but noticeable pulse + navigator.vibrate(50) break case 'medium': - navigator.vibrate([100, 40, 100]) // Medium pulse pattern + navigator.vibrate([100, 40, 100]) break case 'strong': - navigator.vibrate([150, 40, 150, 40, 150]) // Strong pulse pattern + navigator.vibrate([150, 40, 150, 40, 150]) break case 'intense': - navigator.vibrate([200, 40, 200, 40, 200, 40, 200]) // INTENSE pulse pattern + navigator.vibrate([200, 40, 200, 40, 200, 40, 200]) break } lastIntensity = newIntensity } setShakeIntensity(newIntensity) - - if (progress >= 100) { - clearInterval(interval) - } + if (progress >= 100) clearInterval(interval) }, 50) progressIntervalRef.current = interval - // Complete after hold duration const timer = setTimeout(() => { onComplete() }, holdDuration) @@ -162,10 +286,23 @@ export function useHoldToClaim({ holdTimerRef.current = timer }, [onComplete, holdDuration, disabled]) + const startHold = useCallback(() => { + if (disabled || isCompleteRef.current) return + + if (enableTapMode) { + // Tap mode: count as tap + start holding + handleTap() + setIsHolding(true) + } else { + startHoldLegacy() + } + }, [disabled, enableTapMode, handleTap, startHoldLegacy]) + const buttonProps = { onPointerDown: startHold, onPointerUp: cancelHold, onPointerLeave: cancelHold, + onPointerCancel: cancelHold, onKeyDown: (e: React.KeyboardEvent) => { if ((e.key === 'Enter' || e.key === ' ') && !disabled) { e.preventDefault() @@ -179,7 +316,6 @@ export function useHoldToClaim({ } }, onContextMenu: (e: React.MouseEvent) => { - // Prevent context menu from appearing e.preventDefault() }, className: 'relative touch-manipulation select-none overflow-hidden', @@ -193,8 +329,10 @@ export function useHoldToClaim({ holdProgress, isShaking, shakeIntensity, + isHolding, startHold, cancelHold, + handleTap, buttonProps, } } diff --git a/src/hooks/useHomeCarouselCTAs.tsx b/src/hooks/useHomeCarouselCTAs.tsx index 70a43822c..8613eccf9 100644 --- a/src/hooks/useHomeCarouselCTAs.tsx +++ b/src/hooks/useHomeCarouselCTAs.tsx @@ -11,7 +11,9 @@ import { useModalsContext } from '@/context/ModalsContext' import { DeviceType, useDeviceType } from './useGetDeviceType' import { usePWAStatus } from './usePWAStatus' import { useGeoLocation } from './useGeoLocation' +import { useCardPioneerInfo } from './useCardPioneerInfo' import { STAR_STRAIGHT_ICON } from '@/assets' +import underMaintenanceConfig from '@/config/underMaintenance.config' export type CarouselCTA = { id: string @@ -27,6 +29,8 @@ export type CarouselCTA = { iconContainerClassName?: string secondaryIcon?: StaticImageData | string iconSize?: number + // perk claim indicator - shows pink dot instead of X close button + isPerkClaim?: boolean } export const useHomeCarouselCTAs = () => { @@ -41,6 +45,11 @@ export const useHomeCarouselCTAs = () => { const { setIsQRScannerOpen } = useModalsContext() const { countryCode: userCountryCode } = useGeoLocation() + const { + isEligible: isCardPioneerEligible, + hasPurchased: hasCardPioneerPurchased, + isLoading: isCardPioneerLoading, + } = useCardPioneerInfo() const generateCarouselCTAs = useCallback(() => { const _carouselCTAs: CarouselCTA[] = [] @@ -49,6 +58,31 @@ export const useHomeCarouselCTAs = () => { const hasKycApproval = isUserKycApproved || isUserMantecaKycApproved const isLatamUser = userCountryCode === 'AR' || userCountryCode === 'BR' + // Card Pioneer CTA - show to all users who haven't purchased yet + // Eligibility check happens during the flow (geo screen) + // Only show when we know for sure they haven't purchased (not while loading) + if (!underMaintenanceConfig.disableCardPioneers && hasCardPioneerPurchased === false) { + _carouselCTAs.push({ + id: 'card-pioneer', + title: ( + <span> + Get your <b>Peanut Card</b> + </span> + ), + description: ( + <span> + Join Card Pioneers for <b>early access</b> and earn <b>$5</b> per referral. + </span> + ), + iconContainerClassName: 'bg-purple-1', + icon: 'credit-card', + onClick: () => { + router.push('/card') + }, + iconSize: 16, + }) + } + // Generic invite CTA for non-LATAM users if (!isLatamUser) { _carouselCTAs.push({ @@ -99,14 +133,14 @@ export const useHomeCarouselCTAs = () => { _carouselCTAs.push({ id: 'qr-payment', title: ( - <p> + <span> Pay with <b>QR code payments</b> - </p> + </span> ), description: ( - <p> + <span> Get the best exchange rate, pay like a <b>local</b> and earn <b>points</b>. - </p> + </span> ), iconContainerClassName: 'bg-secondary-1', icon: 'qr-code', @@ -124,14 +158,14 @@ export const useHomeCarouselCTAs = () => { _carouselCTAs.push({ id: 'latam-cashback-invite', title: ( - <p> + <span> Earn <b>20% cashback</b> on QR payments - </p> + </span> ), description: ( - <p> + <span> Invite friends to <b>unlock more rewards</b>. The more they use, the more you earn! - </p> + </span> ), iconContainerClassName: 'bg-secondary-1', icon: 'gift', @@ -178,6 +212,9 @@ export const useHomeCarouselCTAs = () => { deviceType, isPwa, userCountryCode, + isCardPioneerEligible, + hasCardPioneerPurchased, + isCardPioneerLoading, ]) useEffect(() => { diff --git a/src/hooks/useLongPress.ts b/src/hooks/useLongPress.ts new file mode 100644 index 000000000..e438cde8f --- /dev/null +++ b/src/hooks/useLongPress.ts @@ -0,0 +1,117 @@ +import { useCallback, useEffect, useRef, useState } from 'react' + +export interface LongPressOptions { + duration?: number // Duration in milliseconds (default: 2000) + onLongPress?: () => void + onLongPressStart?: () => void + onLongPressEnd?: () => void +} + +export interface LongPressReturn { + isLongPressed: boolean + pressProgress: number + handlers: { + onMouseDown: () => void + onMouseUp: () => void + onMouseLeave: () => void + onTouchStart: () => void + onTouchEnd: () => void + onTouchCancel: () => void + } +} + +export function useLongPress(options: LongPressOptions | undefined): LongPressReturn { + const [isLongPressed, setIsLongPressed] = useState(false) + const [pressProgress, setPressProgress] = useState(0) + + const pressTimerRef = useRef<NodeJS.Timeout | null>(null) + const progressIntervalRef = useRef<NodeJS.Timeout | null>(null) + const isLongPressedRef = useRef(false) + + // Keep ref in sync for use in callbacks without stale closures + isLongPressedRef.current = isLongPressed + + const clearTimers = useCallback(() => { + if (pressTimerRef.current) { + clearTimeout(pressTimerRef.current) + pressTimerRef.current = null + } + if (progressIntervalRef.current) { + clearInterval(progressIntervalRef.current) + progressIntervalRef.current = null + } + }, []) + + const handlePressStart = useCallback(() => { + if (!options) return + + options.onLongPressStart?.() + setPressProgress(0) + + const duration = options.duration || 2000 + const updateInterval = 16 // ~60fps + const increment = (100 / duration) * updateInterval + + const progressTimer = setInterval(() => { + setPressProgress((prev) => { + const newProgress = prev + increment + if (newProgress >= 100) { + clearInterval(progressTimer) + return 100 + } + return newProgress + }) + }, updateInterval) + + progressIntervalRef.current = progressTimer + + const timer = setTimeout(() => { + setIsLongPressed(true) + options.onLongPress?.() + clearInterval(progressTimer) + }, duration) + + pressTimerRef.current = timer + }, [options]) + + const handlePressEnd = useCallback(() => { + if (!options) return + + clearTimers() + + if (isLongPressedRef.current) { + options.onLongPressEnd?.() + setIsLongPressed(false) + } + + setPressProgress(0) + }, [options, clearTimers]) + + const handlePressCancel = useCallback(() => { + if (!options) return + + clearTimers() + setIsLongPressed(false) + setPressProgress(0) + }, [options, clearTimers]) + + // Cleanup on unmount + useEffect(() => { + return () => { + clearTimers() + } + }, [clearTimers]) + + return { + isLongPressed, + pressProgress, + handlers: { + onMouseDown: handlePressStart, + onMouseUp: handlePressEnd, + onMouseLeave: handlePressCancel, + onTouchStart: handlePressStart, + onTouchEnd: handlePressEnd, + onTouchCancel: handlePressCancel, + }, + } +} diff --git a/src/hooks/useSavedAccounts.tsx b/src/hooks/useSavedAccounts.tsx index 8f3bba74c..f34fb4a2b 100644 --- a/src/hooks/useSavedAccounts.tsx +++ b/src/hooks/useSavedAccounts.tsx @@ -16,7 +16,11 @@ export default function useSavedAccounts() { const savedAccounts = useMemo(() => { return ( user?.accounts.filter( - (acc) => acc.type === AccountType.IBAN || acc.type === AccountType.US || acc.type === AccountType.CLABE + (acc) => + acc.type === AccountType.IBAN || + acc.type === AccountType.US || + acc.type === AccountType.CLABE || + acc.type === AccountType.GB ) ?? [] ) }, [user]) diff --git a/src/hooks/useWebSocket.ts b/src/hooks/useWebSocket.ts index 68f006e7f..685adee39 100644 --- a/src/hooks/useWebSocket.ts +++ b/src/hooks/useWebSocket.ts @@ -1,5 +1,5 @@ import { useEffect, useState, useCallback, useRef } from 'react' -import { PeanutWebSocket, getWebSocketInstance } from '@/services/websocket' +import { PeanutWebSocket, getWebSocketInstance, type PendingPerk } from '@/services/websocket' import { type HistoryEntry } from './useTransactionHistory' type WebSocketStatus = 'connecting' | 'connected' | 'disconnected' | 'error' @@ -11,6 +11,7 @@ interface UseWebSocketOptions { onKycStatusUpdate?: (status: string) => void onMantecaKycStatusUpdate?: (status: string) => void onTosUpdate?: (data: { accepted: boolean }) => void + onPendingPerk?: (perk: PendingPerk) => void onConnect?: () => void onDisconnect?: () => void onError?: (error: Event) => void @@ -24,6 +25,7 @@ export const useWebSocket = (options: UseWebSocketOptions = {}) => { onKycStatusUpdate, onMantecaKycStatusUpdate, onTosUpdate, + onPendingPerk, onConnect, onDisconnect, onError, @@ -38,6 +40,7 @@ export const useWebSocket = (options: UseWebSocketOptions = {}) => { onKycStatusUpdate, onMantecaKycStatusUpdate, onTosUpdate, + onPendingPerk, onConnect, onDisconnect, onError, @@ -50,11 +53,21 @@ export const useWebSocket = (options: UseWebSocketOptions = {}) => { onKycStatusUpdate, onMantecaKycStatusUpdate, onTosUpdate, + onPendingPerk, onConnect, onDisconnect, onError, } - }, [onHistoryEntry, onKycStatusUpdate, onMantecaKycStatusUpdate, onTosUpdate, onConnect, onDisconnect, onError]) + }, [ + onHistoryEntry, + onKycStatusUpdate, + onMantecaKycStatusUpdate, + onTosUpdate, + onPendingPerk, + onConnect, + onDisconnect, + onError, + ]) // Connect to WebSocket const connect = useCallback(() => { @@ -149,6 +162,12 @@ export const useWebSocket = (options: UseWebSocketOptions = {}) => { } } + const handlePendingPerk = (perk: PendingPerk) => { + if (callbacksRef.current.onPendingPerk) { + callbacksRef.current.onPendingPerk(perk) + } + } + // Register event handlers ws.on('connect', handleConnect) ws.on('disconnect', handleDisconnect) @@ -157,6 +176,7 @@ export const useWebSocket = (options: UseWebSocketOptions = {}) => { ws.on('kyc_status_update', handleKycStatusUpdate) ws.on('manteca_kyc_status_update', handleMantecaKycStatusUpdate) ws.on('persona_tos_status_update', handleTosUpdate) + ws.on('pending_perk', handlePendingPerk) // Auto-connect if enabled if (autoConnect) { @@ -172,6 +192,7 @@ export const useWebSocket = (options: UseWebSocketOptions = {}) => { ws.off('kyc_status_update', handleKycStatusUpdate) ws.off('manteca_kyc_status_update', handleMantecaKycStatusUpdate) ws.off('persona_tos_status_update', handleTosUpdate) + ws.off('pending_perk', handlePendingPerk) } }, [autoConnect, connect, username]) diff --git a/src/i18n/config.ts b/src/i18n/config.ts new file mode 100644 index 000000000..0a580ec1e --- /dev/null +++ b/src/i18n/config.ts @@ -0,0 +1,69 @@ +import { type Locale, SUPPORTED_LOCALES, DEFAULT_LOCALE } from './types' + +/** All marketing route slugs — same across all locales (Wise pattern) */ +export const ROUTE_SLUGS = [ + 'send-money-to', + 'send-money-from', + 'convert', + 'compare', + 'deposit', + 'blog', + 'receive-money-from', + 'pay-with', + 'team', +] as const + +export type RouteSlug = (typeof ROUTE_SLUGS)[number] + +/** Map locale codes to hreflang values */ +const HREFLANG_MAP: Record<Locale, string> = { + en: 'en', + 'es-419': 'es-419', + 'es-ar': 'es-AR', + 'es-es': 'es-ES', + 'pt-br': 'pt-BR', +} + +/** Build a localized path: all locales get /{locale}/ prefix */ +export function localizedPath(route: RouteSlug, locale: Locale, ...segments: string[]): string { + const suffix = segments.length > 0 ? `/${segments.join('/')}` : '' + return `/${locale}/${route}${suffix}` +} + +/** Build a bare localized path (no route prefix): /{locale}/{segment} */ +export function localizedBarePath(locale: Locale, ...segments: string[]): string { + const suffix = segments.length > 0 ? `/${segments.join('/')}` : '' + return `/${locale}${suffix}` +} + +/** Get all alternate URLs for hreflang tags */ +export function getAlternates(route: RouteSlug, ...segments: string[]): Record<string, string> { + const alternates: Record<string, string> = {} + for (const locale of SUPPORTED_LOCALES) { + const langCode = locale === 'en' ? 'x-default' : HREFLANG_MAP[locale] + alternates[langCode] = `https://peanut.me${localizedPath(route, locale, ...segments)}` + } + // Also add 'en' explicitly alongside x-default + alternates['en'] = `https://peanut.me${localizedPath(route, 'en', ...segments)}` + return alternates +} + +/** Get alternate URLs for bare paths (hub pages at /{locale}/{country}) */ +export function getBareAlternates(...segments: string[]): Record<string, string> { + const alternates: Record<string, string> = {} + for (const locale of SUPPORTED_LOCALES) { + const langCode = locale === 'en' ? 'x-default' : HREFLANG_MAP[locale] + alternates[langCode] = `https://peanut.me${localizedBarePath(locale, ...segments)}` + } + alternates['en'] = `https://peanut.me${localizedBarePath('en', ...segments)}` + return alternates +} + +export function isValidLocale(locale: string): locale is Locale { + return SUPPORTED_LOCALES.includes(locale as Locale) +} + +/** Non-default locales (used in generateStaticParams for [locale] segment) */ +export const NON_DEFAULT_LOCALES = SUPPORTED_LOCALES.filter((l) => l !== DEFAULT_LOCALE) + +export { SUPPORTED_LOCALES, DEFAULT_LOCALE, type Locale } diff --git a/src/i18n/en.json b/src/i18n/en.json new file mode 100644 index 000000000..3a9a5e225 --- /dev/null +++ b/src/i18n/en.json @@ -0,0 +1,37 @@ +{ + "sendMoneyTo": "Send Money to {country}", + "sendMoneyToSubtitle": "Fast, affordable transfers to {country} in {currency}. Better rates than banks.", + "getStarted": "Get Started", + "howItWorks": "How It Works", + "frequentlyAskedQuestions": "Frequently Asked Questions", + "sendMoneyToOtherCountries": "Send money to other countries", + "stepCreateAccount": "Create your Peanut account", + "stepCreateAccountDesc": "Sign up in under 2 minutes with your email or wallet.", + "stepDepositFunds": "Deposit funds", + "stepDepositFundsDesc": "Add money via bank transfer, {method}, or stablecoins (USDC/USDT).", + "stepSendToDesc": "Enter the recipient's details and confirm. They receive {currency} in minutes via {method}.", + "readMore": "Read more", + "allArticles": "All articles", + "blog": "Blog", + "postedOn": "Posted on {date}", + "feature": "Feature", + "verdict": "Verdict", + "home": "Home", + "sendMoney": "Send Money", + "convertTitle": "Convert {from} to {to}", + "amount": "Amount", + "liveRate": "Live Rate", + "depositFrom": "Deposit from {exchange}", + "recommendedNetwork": "Recommended Network", + "withdrawalFee": "Withdrawal Fee", + "processingTime": "Processing Time", + "troubleshooting": "Troubleshooting", + "hubTitle": "Peanut in {country}", + "sendMoneyFromTo": "Send Money from {from} to {to}", + "receiveMoneyFrom": "Receive Money from {country}", + "receiveMoneyFromDesc": "Get money sent to you from {country}. Fast and secure.", + "teamTitle": "Our Team", + "teamSubtitle": "The people behind Peanut.", + "lastUpdated": "Last updated: {date}", + "relatedPages": "Related Pages" +} diff --git a/src/i18n/es-419.json b/src/i18n/es-419.json new file mode 100644 index 000000000..fdac76bdc --- /dev/null +++ b/src/i18n/es-419.json @@ -0,0 +1,37 @@ +{ + "sendMoneyTo": "Enviar Dinero a {country}", + "sendMoneyToSubtitle": "Transferencias rápidas y económicas a {country} en {currency}. Mejores tasas que los bancos.", + "getStarted": "Comenzar", + "howItWorks": "Cómo Funciona", + "frequentlyAskedQuestions": "Preguntas Frecuentes", + "sendMoneyToOtherCountries": "Enviar dinero a otros países", + "stepCreateAccount": "Crea tu cuenta Peanut", + "stepCreateAccountDesc": "Regístrate en menos de 2 minutos con tu email o wallet.", + "stepDepositFunds": "Deposita fondos", + "stepDepositFundsDesc": "Agrega dinero por transferencia bancaria, {method}, o stablecoins (USDC/USDT).", + "stepSendToDesc": "Ingresa los datos del destinatario y confirma. Reciben {currency} en minutos vía {method}.", + "readMore": "Leer más", + "allArticles": "Todos los artículos", + "blog": "Blog", + "postedOn": "Publicado el {date}", + "feature": "Característica", + "verdict": "Veredicto", + "home": "Inicio", + "sendMoney": "Enviar Dinero", + "convertTitle": "Convertir {from} a {to}", + "amount": "Monto", + "liveRate": "Tasa en Vivo", + "depositFrom": "Depositar desde {exchange}", + "recommendedNetwork": "Red Recomendada", + "withdrawalFee": "Comisión de Retiro", + "processingTime": "Tiempo de Procesamiento", + "troubleshooting": "Solución de Problemas", + "hubTitle": "Peanut en {country}", + "sendMoneyFromTo": "Enviar Dinero de {from} a {to}", + "receiveMoneyFrom": "Recibir Dinero de {country}", + "receiveMoneyFromDesc": "Recibe dinero enviado desde {country}. Rápido y seguro.", + "teamTitle": "Nuestro Equipo", + "teamSubtitle": "Las personas detrás de Peanut.", + "lastUpdated": "Última actualización: {date}", + "relatedPages": "Páginas Relacionadas" +} diff --git a/src/i18n/es-ar.json b/src/i18n/es-ar.json new file mode 100644 index 000000000..06b1370ea --- /dev/null +++ b/src/i18n/es-ar.json @@ -0,0 +1,37 @@ +{ + "sendMoneyTo": "Enviar Dinero a {country}", + "sendMoneyToSubtitle": "Transferencias rápidas y económicas a {country} en {currency}. Mejores tasas que los bancos.", + "getStarted": "Empezar", + "howItWorks": "Cómo Funciona", + "frequentlyAskedQuestions": "Preguntas Frecuentes", + "sendMoneyToOtherCountries": "Enviar plata a otros países", + "stepCreateAccount": "Creá tu cuenta Peanut", + "stepCreateAccountDesc": "Registrate en menos de 2 minutos con tu email o wallet.", + "stepDepositFunds": "Depositá fondos", + "stepDepositFundsDesc": "Agregá plata por transferencia bancaria, {method}, o stablecoins (USDC/USDT).", + "stepSendToDesc": "Ingresá los datos del destinatario y confirmá. Reciben {currency} en minutos vía {method}.", + "readMore": "Leer más", + "allArticles": "Todos los artículos", + "blog": "Blog", + "postedOn": "Publicado el {date}", + "feature": "Característica", + "verdict": "Veredicto", + "home": "Inicio", + "sendMoney": "Enviar Plata", + "convertTitle": "Convertir {from} a {to}", + "amount": "Monto", + "liveRate": "Cotización en Vivo", + "depositFrom": "Depositar desde {exchange}", + "recommendedNetwork": "Red Recomendada", + "withdrawalFee": "Comisión de Retiro", + "processingTime": "Tiempo de Procesamiento", + "troubleshooting": "Solución de Problemas", + "hubTitle": "Peanut en {country}", + "sendMoneyFromTo": "Enviar Plata de {from} a {to}", + "receiveMoneyFrom": "Recibir Plata de {country}", + "receiveMoneyFromDesc": "Recibí plata enviada desde {country}. Rápido y seguro.", + "teamTitle": "Nuestro Equipo", + "teamSubtitle": "Las personas detrás de Peanut.", + "lastUpdated": "Última actualización: {date}", + "relatedPages": "Páginas Relacionadas" +} diff --git a/src/i18n/es-es.json b/src/i18n/es-es.json new file mode 100644 index 000000000..fdac76bdc --- /dev/null +++ b/src/i18n/es-es.json @@ -0,0 +1,37 @@ +{ + "sendMoneyTo": "Enviar Dinero a {country}", + "sendMoneyToSubtitle": "Transferencias rápidas y económicas a {country} en {currency}. Mejores tasas que los bancos.", + "getStarted": "Comenzar", + "howItWorks": "Cómo Funciona", + "frequentlyAskedQuestions": "Preguntas Frecuentes", + "sendMoneyToOtherCountries": "Enviar dinero a otros países", + "stepCreateAccount": "Crea tu cuenta Peanut", + "stepCreateAccountDesc": "Regístrate en menos de 2 minutos con tu email o wallet.", + "stepDepositFunds": "Deposita fondos", + "stepDepositFundsDesc": "Agrega dinero por transferencia bancaria, {method}, o stablecoins (USDC/USDT).", + "stepSendToDesc": "Ingresa los datos del destinatario y confirma. Reciben {currency} en minutos vía {method}.", + "readMore": "Leer más", + "allArticles": "Todos los artículos", + "blog": "Blog", + "postedOn": "Publicado el {date}", + "feature": "Característica", + "verdict": "Veredicto", + "home": "Inicio", + "sendMoney": "Enviar Dinero", + "convertTitle": "Convertir {from} a {to}", + "amount": "Monto", + "liveRate": "Tasa en Vivo", + "depositFrom": "Depositar desde {exchange}", + "recommendedNetwork": "Red Recomendada", + "withdrawalFee": "Comisión de Retiro", + "processingTime": "Tiempo de Procesamiento", + "troubleshooting": "Solución de Problemas", + "hubTitle": "Peanut en {country}", + "sendMoneyFromTo": "Enviar Dinero de {from} a {to}", + "receiveMoneyFrom": "Recibir Dinero de {country}", + "receiveMoneyFromDesc": "Recibe dinero enviado desde {country}. Rápido y seguro.", + "teamTitle": "Nuestro Equipo", + "teamSubtitle": "Las personas detrás de Peanut.", + "lastUpdated": "Última actualización: {date}", + "relatedPages": "Páginas Relacionadas" +} diff --git a/src/i18n/index.ts b/src/i18n/index.ts new file mode 100644 index 000000000..86f9005a3 --- /dev/null +++ b/src/i18n/index.ts @@ -0,0 +1,38 @@ +import type { Locale, Translations } from './types' +import en from './en.json' +import es419 from './es-419.json' +import esAr from './es-ar.json' +import esEs from './es-es.json' +import ptBr from './pt-br.json' + +const messages: Record<Locale, Translations> = { + en: en as Translations, + 'es-419': es419 as Translations, + 'es-ar': esAr as Translations, + 'es-es': esEs as Translations, + 'pt-br': ptBr as Translations, +} + +/** Get translations for a locale (falls back to English) */ +export function getTranslations(locale: Locale): Translations { + return messages[locale] ?? messages.en +} + +/** Simple template interpolation: replaces {key} with values */ +export function t(template: string, vars?: Record<string, string>): string { + if (!vars) return template + return template.replace(/\{(\w+)\}/g, (_, key) => vars[key] ?? `{${key}}`) +} + +export { type Locale, type Translations } from './types' +export { SUPPORTED_LOCALES, DEFAULT_LOCALE } from './types' +export { + ROUTE_SLUGS, + localizedPath, + localizedBarePath, + getAlternates, + getBareAlternates, + isValidLocale, + NON_DEFAULT_LOCALES, + type RouteSlug, +} from './config' diff --git a/src/i18n/pt-br.json b/src/i18n/pt-br.json new file mode 100644 index 000000000..860c0970a --- /dev/null +++ b/src/i18n/pt-br.json @@ -0,0 +1,37 @@ +{ + "sendMoneyTo": "Enviar Dinheiro para {country}", + "sendMoneyToSubtitle": "Transferências rápidas e acessíveis para {country} em {currency}. Melhores taxas que os bancos.", + "getStarted": "Começar", + "howItWorks": "Como Funciona", + "frequentlyAskedQuestions": "Perguntas Frequentes", + "sendMoneyToOtherCountries": "Enviar dinheiro para outros países", + "stepCreateAccount": "Crie sua conta Peanut", + "stepCreateAccountDesc": "Cadastre-se em menos de 2 minutos com seu email ou carteira.", + "stepDepositFunds": "Deposite fundos", + "stepDepositFundsDesc": "Adicione dinheiro por transferência bancária, {method}, ou stablecoins (USDC/USDT).", + "stepSendToDesc": "Insira os dados do destinatário e confirme. Eles recebem {currency} em minutos via {method}.", + "readMore": "Leia mais", + "allArticles": "Todos os artigos", + "blog": "Blog", + "postedOn": "Publicado em {date}", + "feature": "Recurso", + "verdict": "Veredito", + "home": "Início", + "sendMoney": "Enviar Dinheiro", + "convertTitle": "Converter {from} para {to}", + "amount": "Valor", + "liveRate": "Taxa ao Vivo", + "depositFrom": "Depositar de {exchange}", + "recommendedNetwork": "Rede Recomendada", + "withdrawalFee": "Taxa de Saque", + "processingTime": "Tempo de Processamento", + "troubleshooting": "Solução de Problemas", + "hubTitle": "Peanut em {country}", + "sendMoneyFromTo": "Enviar Dinheiro de {from} para {to}", + "receiveMoneyFrom": "Receber Dinheiro de {country}", + "receiveMoneyFromDesc": "Receba dinheiro enviado de {country}. Rápido e seguro.", + "teamTitle": "Nossa Equipe", + "teamSubtitle": "As pessoas por trás do Peanut.", + "lastUpdated": "Última atualização: {date}", + "relatedPages": "Páginas Relacionadas" +} diff --git a/src/i18n/types.ts b/src/i18n/types.ts new file mode 100644 index 000000000..f8acfc407 --- /dev/null +++ b/src/i18n/types.ts @@ -0,0 +1,67 @@ +export type Locale = 'en' | 'es-419' | 'es-ar' | 'es-es' | 'pt-br' + +export const SUPPORTED_LOCALES: Locale[] = ['en', 'es-419', 'es-ar', 'es-es', 'pt-br'] +export const DEFAULT_LOCALE: Locale = 'en' + +export interface Translations { + // Hero / CTA + sendMoneyTo: string // "Send Money to {country}" + sendMoneyToSubtitle: string // "Fast, affordable transfers to {country} in {currency}. Better rates than banks." + getStarted: string + + // Section titles + howItWorks: string + frequentlyAskedQuestions: string + sendMoneyToOtherCountries: string + + // Steps + stepCreateAccount: string + stepCreateAccountDesc: string + stepDepositFunds: string + stepDepositFundsDesc: string // "Add money via bank transfer, {method}, or stablecoins (USDC/USDT)." + stepSendToDesc: string // "Enter the recipient's details and confirm. They receive {currency} in minutes via {method}." + + // Blog + readMore: string + allArticles: string + blog: string + postedOn: string + + // Comparison + feature: string + verdict: string + + // Navigation + home: string + sendMoney: string + + // Converter + convertTitle: string // "Convert {from} to {to}" + amount: string + liveRate: string + + // Deposit + depositFrom: string // "Deposit from {exchange}" + recommendedNetwork: string + withdrawalFee: string + processingTime: string + troubleshooting: string + + // Hub + hubTitle: string // "Peanut in {country}" + + // From-to corridors + sendMoneyFromTo: string // "Send Money from {from} to {to}" + + // Receive money + receiveMoneyFrom: string // "Receive Money from {country}" + receiveMoneyFromDesc: string // "Get money sent to you from {country}. Fast and secure." + + // Team + teamTitle: string // "Our Team" + teamSubtitle: string // "The people behind Peanut." + + // Misc + lastUpdated: string // "Last updated: {date}" + relatedPages: string // "Related Pages" +} diff --git a/src/interfaces/interfaces.ts b/src/interfaces/interfaces.ts index f121fc926..79144b4cc 100644 --- a/src/interfaces/interfaces.ts +++ b/src/interfaces/interfaces.ts @@ -165,12 +165,12 @@ export interface IBridgeAccount { id: string customer_id: string last_4: string - currency?: 'usd' | 'eur' | 'mxn' + currency?: 'usd' | 'eur' | 'mxn' | 'gbp' bank_name?: string account_owner_name: string account_number?: string routing_number?: string - account_type: 'iban' | 'us' | 'clabe' + account_type: 'iban' | 'us' | 'clabe' | 'gb' iban?: { account_number: string bic?: string @@ -181,7 +181,8 @@ export interface IBridgeAccount { } account?: { account_number: string - routing_number: string + routing_number?: string + sort_code?: string // uk bank accounts checking_or_savings?: string } account_owner_type: 'individual' | 'business' @@ -280,6 +281,7 @@ export enum AccountType { IBAN = 'iban', US = 'us', CLABE = 'clabe', + GB = 'gb', // uk bank accounts (sort code + account number) EVM_ADDRESS = 'evm-address', PEANUT_WALLET = 'peanut-wallet', BRIDGE = 'bridgeBankAccount', @@ -305,6 +307,7 @@ export interface Account { connectorUuid: string | null bic?: string routingNumber?: string + sortCode?: string // uk bank accounts connector?: { iconUrl: string name: string diff --git a/src/lib/blog.ts b/src/lib/blog.ts new file mode 100644 index 000000000..df189b600 --- /dev/null +++ b/src/lib/blog.ts @@ -0,0 +1,96 @@ +import matter from 'gray-matter' +import { marked } from 'marked' +import { createHighlighter, type Highlighter } from 'shiki' +import fs from 'fs' +import path from 'path' + +import type { Locale } from '@/i18n/types' + +function getBlogDir(locale: Locale = 'en') { + return path.join(process.cwd(), `src/content/blog/${locale}`) +} + +export interface BlogPost { + slug: string + frontmatter: { + title: string + description: string + date: string + category?: string + author?: string + faqs?: Array<{ question: string; answer: string }> + } + content: string +} + +// Singleton highlighter — created once, reused across all posts +let _highlighter: Highlighter | null = null + +async function getHighlighter(): Promise<Highlighter> { + if (_highlighter) return _highlighter + _highlighter = await createHighlighter({ + themes: ['github-light'], + langs: ['javascript', 'typescript', 'bash', 'json', 'yaml', 'html', 'css', 'python', 'solidity'], + }) + return _highlighter +} + +export function getAllPosts(locale: Locale = 'en'): BlogPost[] { + const dir = getBlogDir(locale) + if (!fs.existsSync(dir)) return [] + + const files = fs.readdirSync(dir).filter((f) => f.endsWith('.md')) + return files + .map((file) => { + const raw = fs.readFileSync(path.join(dir, file), 'utf8') + const { data, content } = matter(raw) + return { + slug: file.replace('.md', ''), + frontmatter: data as BlogPost['frontmatter'], + content, + } + }) + .sort((a, b) => new Date(b.frontmatter.date).getTime() - new Date(a.frontmatter.date).getTime()) +} + +export async function getPostBySlug( + slug: string, + locale: Locale = 'en' +): Promise<{ frontmatter: BlogPost['frontmatter']; html: string } | null> { + const filePath = path.join(getBlogDir(locale), `${slug}.md`) + if (!fs.existsSync(filePath)) return null + + const raw = fs.readFileSync(filePath, 'utf8') + const { data, content } = matter(raw) + + const highlighter = await getHighlighter() + + // Custom renderer for code blocks with shiki syntax highlighting + const renderer = new marked.Renderer() + renderer.code = ({ text, lang }: { text: string; lang?: string }) => { + const language = lang || 'text' + try { + return highlighter.codeToHtml(text, { + lang: language, + theme: 'github-light', + }) + } catch { + // Fallback for unsupported languages + return `<pre><code class="language-${language}">${text}</code></pre>` + } + } + + const html = (await marked(content, { renderer })) as string + + return { frontmatter: data as BlogPost['frontmatter'], html } +} + +export function getPostsByCategory(category: string, locale: Locale = 'en'): BlogPost[] { + return getAllPosts(locale).filter((p) => p.frontmatter.category === category) +} + +export function getAllCategories(locale: Locale = 'en'): string[] { + const posts = getAllPosts(locale) + const cats = new Set(posts.map((p) => p.frontmatter.category).filter(Boolean) as string[]) + return Array.from(cats).sort() +} diff --git a/src/lib/content.ts b/src/lib/content.ts new file mode 100644 index 000000000..c82de6dd1 --- /dev/null +++ b/src/lib/content.ts @@ -0,0 +1,210 @@ +// Unified content loader for peanutprotocol/peanut-content. +// +// Two read paths: +// readEntityData(category, slug) → input/data/{category}/{slug}.md (frontmatter only) +// readPageContent(intent, slug, lang) → content/{intent}/{slug}/{lang}.md (frontmatter + body) +// +// Discovers entities by scanning directories. No _index.yaml dependency. +// Implements locale fallback chains per BCP 47 codes. + +import fs from 'fs' +import path from 'path' +import matter from 'gray-matter' + +const CONTENT_ROOT = path.join(process.cwd(), 'src/content') + +// --- Locale fallback chains --- +// es-ar → es-419 → en +// es-es → en +// pt-br → en +// es-419 → en + +const FALLBACK_CHAINS: Record<string, string[]> = { + en: [], + 'es-419': ['en'], + 'es-ar': ['es-419', 'en'], + 'es-es': ['en'], + 'pt-br': ['en'], +} + +/** Get ordered list of locales to try (requested locale first, then fallbacks) */ +export function getLocaleFallbacks(locale: string): string[] { + return [locale, ...(FALLBACK_CHAINS[locale] ?? ['en'])] +} + +// --- Caches --- +// In development, skip caching so content changes are picked up without restart. + +const isDev = process.env.NODE_ENV === 'development' + +const entityCache = new Map<string, unknown>() +const pageCache = new Map<string, unknown>() + +// --- Core types --- + +export interface MarkdownContent<T = Record<string, unknown>> { + frontmatter: T + body: string +} + +// --- Low-level readers --- + +function parseMarkdownFile<T = Record<string, unknown>>(filePath: string): MarkdownContent<T> | null { + try { + const raw = fs.readFileSync(filePath, 'utf8') + const { data, content } = matter(raw) + return { frontmatter: data as T, body: content.trim() } + } catch { + return null + } +} + +// --- Entity data readers (input/data/{category}/{slug}.md) --- + +/** Read structured entity data from input/data/{category}/{slug}.md */ +export function readEntityData<T = Record<string, unknown>>(category: string, slug: string): MarkdownContent<T> | null { + const key = `entity:${category}/${slug}` + if (!isDev && entityCache.has(key)) return entityCache.get(key) as MarkdownContent<T> | null + + const filePath = path.join(CONTENT_ROOT, 'input/data', category, `${slug}.md`) + const result = parseMarkdownFile<T>(filePath) + entityCache.set(key, result) + return result +} + +// --- Page content readers (content/{intent}/{slug}/{lang}.md) --- + +/** Read generated page content from content/{intent}/{slug}/{lang}.md */ +export function readPageContent<T = Record<string, unknown>>( + intent: string, + slug: string, + lang: string +): MarkdownContent<T> | null { + const key = `page:${intent}/${slug}/${lang}` + if (!isDev && pageCache.has(key)) return pageCache.get(key) as MarkdownContent<T> | null + + const filePath = path.join(CONTENT_ROOT, 'content', intent, slug, `${lang}.md`) + const result = parseMarkdownFile<T>(filePath) + pageCache.set(key, result) + return result +} + +/** Read page content with locale fallback */ +export function readPageContentLocalized<T = Record<string, unknown>>( + intent: string, + slug: string, + lang: string +): MarkdownContent<T> | null { + for (const locale of getLocaleFallbacks(lang)) { + const content = readPageContent<T>(intent, slug, locale) + if (content) return content + } + return null +} + +/** Read corridor content: content/send-to/{destination}/from/{origin}/{lang}.md */ +export function readCorridorContent<T = Record<string, unknown>>( + destination: string, + origin: string, + lang: string +): MarkdownContent<T> | null { + const key = `corridor:${destination}/from/${origin}/${lang}` + if (!isDev && pageCache.has(key)) return pageCache.get(key) as MarkdownContent<T> | null + + const filePath = path.join(CONTENT_ROOT, 'content/send-to', destination, 'from', origin, `${lang}.md`) + const result = parseMarkdownFile<T>(filePath) + pageCache.set(key, result) + return result +} + +/** Read corridor content with locale fallback */ +export function readCorridorContentLocalized<T = Record<string, unknown>>( + destination: string, + origin: string, + lang: string +): MarkdownContent<T> | null { + for (const locale of getLocaleFallbacks(lang)) { + const content = readCorridorContent<T>(destination, origin, locale) + if (content) return content + } + return null +} + +// --- Directory scanners (replaces _index.yaml) --- + +/** List all entity slugs in a category by scanning input/data/{category}/ */ +export function listEntitySlugs(category: string): string[] { + const dir = path.join(CONTENT_ROOT, 'input/data', category) + try { + return fs + .readdirSync(dir) + .filter((f) => f.endsWith('.md') && f !== 'README.md') + .map((f) => f.replace('.md', '')) + } catch { + return [] + } +} + +/** List all content slugs for an intent by scanning content/{intent}/ */ +export function listContentSlugs(intent: string): string[] { + const dir = path.join(CONTENT_ROOT, 'content', intent) + try { + return fs.readdirSync(dir).filter((f) => { + const stat = fs.statSync(path.join(dir, f)) + return stat.isDirectory() + }) + } catch { + return [] + } +} + +/** List corridor origins for a destination: content/send-to/{destination}/from/ */ +export function listCorridorOrigins(destination: string): string[] { + const dir = path.join(CONTENT_ROOT, 'content/send-to', destination, 'from') + try { + return fs.readdirSync(dir).filter((f) => { + const stat = fs.statSync(path.join(dir, f)) + return stat.isDirectory() + }) + } catch { + return [] + } +} + +/** List available locales for a content page */ +export function listPageLocales(intent: string, slug: string): string[] { + const dir = path.join(CONTENT_ROOT, 'content', intent, slug) + try { + return fs + .readdirSync(dir) + .filter((f) => f.endsWith('.md')) + .map((f) => f.replace('.md', '')) + } catch { + return [] + } +} + +/** Check if a page content file exists for the given locale (no fallback) */ +export function pageLocaleExists(intent: string, slug: string, locale: string): boolean { + return fs.existsSync(path.join(CONTENT_ROOT, 'content', intent, slug, `${locale}.md`)) +} + +// --- Publication status --- + +interface PublishableContent { + published?: boolean +} + +/** Check if content is published (defaults to false if field missing) */ +export function isPublished(content: MarkdownContent<PublishableContent> | null): boolean { + if (!content) return false + return content.frontmatter.published === true +} + +/** List published content slugs for an intent */ +export function listPublishedSlugs(intent: string): string[] { + return listContentSlugs(intent).filter((slug) => { + const content = readPageContent<PublishableContent>(intent, slug, 'en') + return isPublished(content) + }) +} diff --git a/src/lib/mdx.ts b/src/lib/mdx.ts new file mode 100644 index 000000000..2686462ea --- /dev/null +++ b/src/lib/mdx.ts @@ -0,0 +1,29 @@ +import { compileMDX } from 'next-mdx-remote/rsc' +import remarkGfm from 'remark-gfm' +import { mdxComponents } from '@/components/Marketing/mdx/components' + +/** + * Compile markdown/MDX content into a React element with registered components. + * Uses next-mdx-remote/rsc for server-side rendering (zero client JS). + * + * Note: frontmatter is already stripped by content.ts (gray-matter). + * The source passed here is body-only — no parseFrontmatter needed. + * + * format: 'mdx' — enables JSX component tags in content. + * remarkGfm — enables GFM tables, strikethrough, autolinks, etc. + * + * Limitation: next-mdx-remote/rsc strips JSX expression props ({...}). + * Components that need structured data accept JSON strings instead. + */ +export async function renderContent(source: string) { + return compileMDX<Record<string, unknown>>({ + source, + components: mdxComponents, + options: { + mdxOptions: { + format: 'mdx', + remarkPlugins: [remarkGfm], + }, + }, + }) +} diff --git a/src/lib/seo/schemas.tsx b/src/lib/seo/schemas.tsx new file mode 100644 index 000000000..dcecfa0ed --- /dev/null +++ b/src/lib/seo/schemas.tsx @@ -0,0 +1,55 @@ +import { BASE_URL } from '@/constants/general.consts' + +const baseUrl = BASE_URL || 'https://peanut.me' + +export function faqSchema(faqs: { question: string; answer: string }[]) { + return { + '@context': 'https://schema.org', + '@type': 'FAQPage', + mainEntity: faqs.map((faq) => ({ + '@type': 'Question', + name: faq.question, + acceptedAnswer: { + '@type': 'Answer', + text: faq.answer, + }, + })), + } +} + +export function howToSchema(name: string, description: string, steps: { name: string; text: string }[]) { + return { + '@context': 'https://schema.org', + '@type': 'HowTo', + name, + description, + step: steps.map((step, i) => ({ + '@type': 'HowToStep', + position: i + 1, + name: step.name, + text: step.text, + })), + } +} + +export function breadcrumbSchema(items: { name: string; url: string }[]) { + return { + '@context': 'https://schema.org', + '@type': 'BreadcrumbList', + itemListElement: items.map((item, i) => ({ + '@type': 'ListItem', + position: i + 1, + name: item.name, + item: `${baseUrl}${item.url}`, + })), + } +} + +export function JsonLd({ data }: { data: object }) { + return ( + <script + type="application/ld+json" + dangerouslySetInnerHTML={{ __html: JSON.stringify(data).replace(/</g, '\\u003c') }} + /> + ) +} diff --git a/src/lib/url-parser/types/payment.ts b/src/lib/url-parser/types/payment.ts index 1c7a9b31e..5953b6dec 100644 --- a/src/lib/url-parser/types/payment.ts +++ b/src/lib/url-parser/types/payment.ts @@ -9,7 +9,7 @@ export interface ParsedURL { identifier: string recipientType: RecipientType resolvedAddress: string - } + } | null amount?: string token?: interfaces.ISquidToken chain?: interfaces.ISquidChain & { tokens: interfaces.ISquidToken[] } diff --git a/src/services/card.ts b/src/services/card.ts new file mode 100644 index 000000000..64bd890d3 --- /dev/null +++ b/src/services/card.ts @@ -0,0 +1,68 @@ +/** + * Card Pioneers API Service + * + * Handles API calls for the Card Pioneers early-access program. + * Uses server actions to securely include API keys. + */ + +import { getCardInfo, purchaseCard } from '@/app/actions/card' +import type { CardInfoResponse, CardPurchaseResponse } from '@/app/actions/card' + +export type { CardInfoResponse, CardPurchaseResponse } + +/** + * Custom error class for card purchase failures + */ +export class CardPurchaseError extends Error { + code: string + chargeUuid?: string + + constructor(code: string, message: string, chargeUuid?: string) { + super(message) + this.name = 'CardPurchaseError' + this.code = code + this.chargeUuid = chargeUuid + } +} + +export const cardApi = { + /** + * Get card pioneer info for the authenticated user + * Returns eligibility, purchase status, and pricing + */ + getInfo: async (): Promise<CardInfoResponse> => { + const result = await getCardInfo() + + if (result.error || !result.data) { + throw new Error(result.error || 'Failed to get card info') + } + + return result.data + }, + + /** + * Initiate card pioneer purchase + * Creates a charge that the user must pay + */ + purchase: async (): Promise<CardPurchaseResponse> => { + const result = await purchaseCard() + + if (result.error || !result.data) { + // Handle specific error cases + if (result.errorCode === 'ALREADY_PURCHASED') { + throw new CardPurchaseError(result.errorCode, result.error || 'Already purchased') + } + + if (result.errorCode === 'NOT_ELIGIBLE') { + throw new CardPurchaseError(result.errorCode, result.error || 'Not eligible') + } + + throw new CardPurchaseError( + result.errorCode || 'UNKNOWN_ERROR', + result.error || 'Failed to initiate purchase' + ) + } + + return result.data + }, +} diff --git a/src/services/charges.ts b/src/services/charges.ts index 409a6f332..a24255254 100644 --- a/src/services/charges.ts +++ b/src/services/charges.ts @@ -74,6 +74,7 @@ export const chargesApi = { sourceChainId, sourceTokenAddress, sourceTokenSymbol, + squidQuoteId, }: { chargeId: string chainId: string @@ -83,6 +84,7 @@ export const chargesApi = { sourceChainId?: string sourceTokenAddress?: string sourceTokenSymbol?: string + squidQuoteId?: string }): Promise<PaymentCreationResponse> => { const response = await fetchWithSentry(`/api/proxy/charges/${chargeId}/payments`, { method: 'POST', @@ -97,6 +99,7 @@ export const chargesApi = { sourceChainId, sourceTokenAddress, sourceTokenSymbol, + squidQuoteId, }), }) diff --git a/src/services/perks.ts b/src/services/perks.ts new file mode 100644 index 000000000..67fd37dbd --- /dev/null +++ b/src/services/perks.ts @@ -0,0 +1,105 @@ +import Cookies from 'js-cookie' +import { fetchWithSentry } from '@/utils/sentry.utils' +import { PEANUT_API_URL } from '@/constants/general.consts' + +export type PendingPerk = { + id: string + name?: string + description?: string + reason?: string + amountUsd: number + createdAt: string +} + +export type PendingPerksResponse = { + success: boolean + perks: PendingPerk[] + error?: string +} + +export type ClaimPerkResponse = { + success: boolean + perk?: { + sponsored: boolean + amountSponsored: number + discountPercentage: number + txHash?: string + } + error?: string + message?: string +} + +export const perksApi = { + /** + * Get pending (claimable) perks for the current user + */ + getPendingPerks: async (): Promise<PendingPerksResponse> => { + try { + const jwtToken = Cookies.get('jwt-token') + if (!jwtToken) { + console.error('getPendingPerks: No JWT token found') + return { success: false, perks: [], error: 'Not authenticated' } + } + + const response = await fetchWithSentry(`${PEANUT_API_URL}/perks/pending`, { + method: 'GET', + headers: { + Authorization: `Bearer ${jwtToken}`, + 'Content-Type': 'application/json', + }, + }) + + if (!response.ok) { + console.error('getPendingPerks: API request failed', response.status, response.statusText) + return { success: false, perks: [], error: 'Failed to fetch pending perks' } + } + + const data = await response.json() + return { success: true, perks: data.perks || [] } + } catch (error) { + console.error('getPendingPerks: Unexpected error', error) + return { success: false, perks: [], error: 'Unexpected error' } + } + }, + + /** + * Claim a perk by usage ID (V2) + */ + claimPerk: async (usageId: string): Promise<ClaimPerkResponse> => { + try { + const jwtToken = Cookies.get('jwt-token') + if (!jwtToken) { + console.error('claimPerk: No JWT token found') + return { success: false, error: 'NOT_AUTHENTICATED', message: 'Not authenticated' } + } + + const response = await fetchWithSentry(`${PEANUT_API_URL}/perks/claim`, { + method: 'POST', + headers: { + Authorization: `Bearer ${jwtToken}`, + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ usageId }), + }) + + const data = await response.json() + + if (!response.ok) { + console.error('claimPerk: API request failed', response.status, data) + return { + success: false, + error: data.error || 'CLAIM_FAILED', + message: data.message || 'Failed to claim perk', + } + } + + return { + success: true, + perk: data.perk, + } + } catch (error) { + console.error('claimPerk: Unexpected error', error) + return { success: false, error: 'UNEXPECTED_ERROR', message: 'Unexpected error' } + } + }, +} diff --git a/src/services/points.ts b/src/services/points.ts index ad2dc3748..c0f1a99eb 100644 --- a/src/services/points.ts +++ b/src/services/points.ts @@ -338,6 +338,47 @@ export const pointsApi = { return fetchInvitesGraph('/invites/user-graph') }, + getCashStatus: async (): Promise<{ + success: boolean + data: { + hasCashbackLeft: boolean + lifetimeEarned: number + lifetimeBreakdown: { + cashback: number + inviterRewards: number + withdrawPerks: number + depositPerks: number + other: number + } + } | null + }> => { + try { + const jwtToken = Cookies.get('jwt-token') + if (!jwtToken) { + console.error('getCashStatus: No JWT token found') + return { success: false, data: null } + } + + const response = await fetchWithSentry(`${PEANUT_API_URL}/points/cash-status`, { + method: 'GET', + headers: { + Authorization: `Bearer ${jwtToken}`, + 'Content-Type': 'application/json', + }, + }) + if (!response.ok) { + console.error('getCashStatus: API request failed', response.status, response.statusText) + return { success: false, data: null } + } + + const data = await response.json() + return { success: true, data } + } catch (error) { + console.error('getCashStatus: Unexpected error', error) + return { success: false, data: null } + } + }, + getExternalNodes: async ( apiKey: string, options?: { diff --git a/src/services/websocket.ts b/src/services/websocket.ts index 20933b7d7..b49418771 100644 --- a/src/services/websocket.ts +++ b/src/services/websocket.ts @@ -1,4 +1,6 @@ import { type HistoryEntry } from '@/hooks/useTransactionHistory' +import { type PendingPerk } from '@/services/perks' +export type { PendingPerk } import { jsonStringify } from '@/utils/general.utils' export type WebSocketMessage = { @@ -9,7 +11,8 @@ export type WebSocketMessage = { | 'kyc_status_update' | 'manteca_kyc_status_update' | 'persona_tos_status_update' - data?: HistoryEntry + | 'pending_perk' + data?: HistoryEntry | PendingPerk } export class PeanutWebSocket { @@ -129,6 +132,12 @@ export class PeanutWebSocket { } break + case 'pending_perk': + if (message.data && 'id' in (message.data as object)) { + this.emit('pending_perk', message.data) + } + break + default: // Handle other message types if needed this.emit(message.type, message.data) @@ -150,7 +159,6 @@ export class PeanutWebSocket { } private handleError(event: Event): void { - console.error('WebSocket error:', jsonStringify(event)) this.emit('error', event) } diff --git a/src/styles/globals.css b/src/styles/globals.css index a431af22e..c851dcfb7 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -486,3 +486,291 @@ input::placeholder { flex: 0 0 100%; min-width: 0; } + +/* Slide animations for perk claim transitions */ +@keyframes slideOutLeft { + from { + transform: translateX(0); + opacity: 1; + } + to { + transform: translateX(-100%); + opacity: 0; + } +} + +@keyframes slideInRight { + from { + transform: translateX(100%); + opacity: 0; + } + to { + transform: translateX(0); + opacity: 1; + } +} + +.animate-slide-out-left { + animation: slideOutLeft 0.3s ease-out forwards; +} + +.animate-slide-in-right { + animation: slideInRight 0.3s ease-out forwards; +} + +/* Gift box opening animations */ +@keyframes giftOpening { + 0%, + 100% { + transform: translateY(0) rotate(0deg) scale(1); + } + 10%, + 30%, + 50%, + 70%, + 90% { + transform: translateY(-4px) rotate(-2deg) scale(1.02); + } + 20%, + 40%, + 60%, + 80% { + transform: translateY(-4px) rotate(2deg) scale(1.02); + } +} + +@keyframes giftRevealed { + 0% { + transform: scale(1.05); + opacity: 0.8; + } + 50% { + transform: scale(1.02); + opacity: 1; + } + 100% { + transform: scale(1); + opacity: 1; + } +} + +@keyframes giftExit { + 0% { + transform: scale(1) translateY(0); + opacity: 1; + } + 100% { + transform: scale(0.95) translateY(-10px); + opacity: 0; + } +} + +@keyframes fadeIn { + from { + opacity: 0; + transform: translateY(10px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.animate-gift-opening { + animation: giftOpening 0.12s ease-in-out infinite; + transform-origin: center center; +} + +.animate-gift-revealed { + animation: giftRevealed 0.4s ease-out forwards; +} + +.animate-gift-exit { + animation: giftExit 0.4s ease-out forwards; +} + +.animate-fade-in { + animation: fadeIn 0.5s ease-out forwards; +} + +/* Gift arrival animation - gentle fade in with subtle scale (for initial page load) */ +@keyframes giftArriveGentle { + 0% { + transform: scale(0.95); + opacity: 0; + } + 100% { + transform: scale(1); + opacity: 1; + } +} + +.animate-gift-arrive-gentle { + animation: giftArriveGentle 0.4s ease-out forwards; +} + +/* Gift arrival animation - drops in from above with a bounce (for WebSocket real-time) */ +@keyframes giftArrive { + 0% { + transform: translateY(-50px) scale(0.9); + opacity: 0; + } + 60% { + transform: translateY(5px) scale(1.02); + opacity: 1; + } + 80% { + transform: translateY(-3px) scale(0.99); + } + 100% { + transform: translateY(0) scale(1); + opacity: 1; + } +} + +.animate-gift-arrive { + animation: giftArrive 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) forwards; +} + +/* Gift attention animation - very subtle pulse to draw attention after idle */ +@keyframes giftAttention { + /* Gentle pulsate - very subtle */ + 0% { + transform: scale(1); + } + 15% { + transform: scale(1.02); + } + 30% { + transform: scale(1); + } + 45% { + transform: scale(1.02); + } + 60% { + transform: scale(1); + } + /* Rest before loop */ + 100% { + transform: scale(1); + } +} + +.animate-gift-attention { + animation: giftAttention 4s ease-in-out infinite; + transform-origin: center center; +} + +/* Gift box holographic shine effect */ +@keyframes giftShine { + 0% { + left: -100%; + } + 50%, + 100% { + left: 150%; + } +} + +.gift-box-shine::before { + content: ''; + position: absolute; + top: 0; + left: -100%; + width: 50%; + height: 100%; + background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.4), transparent); + animation: giftShine 3s ease-in-out infinite; + pointer-events: none; + z-index: 5; + border-radius: inherit; +} + +/* ── Landing page: CSS cloud drift animations ── */ +@keyframes cloud-drift-ltr { + from { + transform: translateX(-300px); + } + to { + transform: translateX(100vw); + } +} + +@keyframes cloud-drift-rtl { + from { + transform: translateX(100vw); + } + to { + transform: translateX(-300px); + } +} + +.cloud-ltr { + animation: cloud-drift-ltr var(--cloud-speed, 35s) linear infinite; + animation-delay: var(--cloud-delay, 0s); +} + +.cloud-rtl { + animation: cloud-drift-rtl var(--cloud-speed, 35s) linear infinite; + animation-delay: var(--cloud-delay, 0s); +} + +/* ── Landing page: entrance animations (replaces framer-motion whileInView) ── */ +/* Spring animation approximating framer-motion { type: 'spring', damping: 5, stiffness: 100 } + damping:5 is heavily underdamped — large overshoot with visible bounces. + Sampled from spring physics: e^(-ζωt) * cos(ωd*t) with ζ=0.25, ω=10 */ +@keyframes fade-in-up-spring { + 0% { + opacity: 0; + transform: translateY(var(--aov-y, 20px)) translateX(var(--aov-x, 0px)) rotate(var(--aov-rotate, 0deg)); + } + 12% { + opacity: 1; + transform: translateY(calc(var(--aov-y, 20px) * -1.2)) translateX(calc(var(--aov-x, 0px) * -1.2)) + rotate(var(--aov-rotate, 0deg)); + } + 24% { + transform: translateY(calc(var(--aov-y, 20px) * 0.6)) translateX(calc(var(--aov-x, 0px) * 0.6)) + rotate(var(--aov-rotate, 0deg)); + } + 38% { + transform: translateY(calc(var(--aov-y, 20px) * -0.35)) translateX(calc(var(--aov-x, 0px) * -0.35)) + rotate(var(--aov-rotate, 0deg)); + } + 52% { + transform: translateY(calc(var(--aov-y, 20px) * 0.18)) translateX(calc(var(--aov-x, 0px) * 0.18)) + rotate(var(--aov-rotate, 0deg)); + } + 68% { + transform: translateY(calc(var(--aov-y, 20px) * -0.08)) translateX(calc(var(--aov-x, 0px) * -0.08)) + rotate(var(--aov-rotate, 0deg)); + } + 82% { + transform: translateY(calc(var(--aov-y, 20px) * 0.03)) translateX(calc(var(--aov-x, 0px) * 0.03)) + rotate(var(--aov-rotate, 0deg)); + } + 100% { + opacity: 1; + transform: translateY(0) translateX(0) rotate(var(--aov-rotate, 0deg)); + } +} + +.animate-on-view { + opacity: 0; +} + +.animate-on-view.in-view { + animation: fade-in-up-spring 1.8s linear forwards; + animation-delay: var(--aov-delay, 0s); +} + +/* ── Marketing content pages ── */ + +/* + * Prose styling is handled via MDX element mappings in components.tsx. + * Only structural and zebra-stripe styles remain here (can't be done via components). + */ + +.content-page tbody tr:nth-child(even) { + @apply bg-primary-3/30; +} diff --git a/src/utils/__tests__/bridge.utils.test.ts b/src/utils/__tests__/bridge.utils.test.ts index b18efe4e3..6ca21339e 100644 --- a/src/utils/__tests__/bridge.utils.test.ts +++ b/src/utils/__tests__/bridge.utils.test.ts @@ -35,8 +35,30 @@ describe('bridge.utils', () => { }) }) + it('should return GBP with Faster Payments for UK', () => { + const onrampConfig = getCurrencyConfig('GB', 'onramp') + expect(onrampConfig).toEqual({ + currency: 'gbp', + paymentRail: 'faster_payments', + }) + + const offrampConfig = getCurrencyConfig('GB', 'offramp') + expect(offrampConfig).toEqual({ + currency: 'gbp', + paymentRail: 'faster_payments', + }) + }) + + it('should handle GBR country code for UK', () => { + const config = getCurrencyConfig('GBR', 'onramp') + expect(config).toEqual({ + currency: 'gbp', + paymentRail: 'faster_payments', + }) + }) + it('should return EUR with SEPA for other countries', () => { - const countries = ['DE', 'FR', 'IT', 'ES', 'NL', 'CA', 'GB', 'AU', 'JP'] + const countries = ['DE', 'FR', 'IT', 'ES', 'NL', 'CA', 'AU', 'JP'] countries.forEach((country) => { const onrampConfig = getCurrencyConfig(country, 'onramp') @@ -124,6 +146,16 @@ describe('bridge.utils', () => { expect(minimum).toBe(1) }) + it('should return 3 for UK', () => { + const minimum = getMinimumAmount('GB') + expect(minimum).toBe(3) + }) + + it('should return 3 for GBR country code', () => { + const minimum = getMinimumAmount('GBR') + expect(minimum).toBe(3) + }) + it('should return 1 for other countries', () => { const minimum = getMinimumAmount('DE') expect(minimum).toBe(1) @@ -156,6 +188,7 @@ describe('bridge.utils', () => { expect(getPaymentRailDisplayName('sepa')).toBe('SEPA Transfer') expect(getPaymentRailDisplayName('spei')).toBe('SPEI Transfer') expect(getPaymentRailDisplayName('wire')).toBe('Wire Transfer') + expect(getPaymentRailDisplayName('faster_payments')).toBe('Faster Payments') }) it('should return uppercase payment rail for unsupported rails', () => { @@ -187,6 +220,15 @@ describe('bridge.utils', () => { expect(onrampConfig.currency).toBe(offrampConfig.currency) }) + it('should use same payment rails for UK onramp vs offramp', () => { + const onrampConfig = getCurrencyConfig('GB', 'onramp') + const offrampConfig = getCurrencyConfig('GB', 'offramp') + + expect(onrampConfig.paymentRail).toBe('faster_payments') + expect(offrampConfig.paymentRail).toBe('faster_payments') + expect(onrampConfig.currency).toBe(offrampConfig.currency) + }) + it('should use same payment rails for EU countries onramp vs offramp', () => { const onrampConfig = getCurrencyConfig('DE', 'onramp') const offrampConfig = getCurrencyConfig('DE', 'offramp') diff --git a/src/utils/bridge-accounts.utils.ts b/src/utils/bridge-accounts.utils.ts index 61bd013c6..1fffc7be3 100644 --- a/src/utils/bridge-accounts.utils.ts +++ b/src/utils/bridge-accounts.utils.ts @@ -118,3 +118,23 @@ export function isValidRoutingNumber(routingNumber: string): boolean { return sum % 10 === 0 } + +/** + * Validates a UK sort code (6 digits, optionally formatted as XX-XX-XX) + */ +export function isValidSortCode(sortCode: string): boolean { + // remove dashes and spaces + const cleaned = sortCode.replace(/[-\s]/g, '') + // must be exactly 6 digits + return /^\d{6}$/.test(cleaned) +} + +/** + * Validates a UK bank account number (6-8 digits, zero-padded to 8 for processing) + */ +export function isValidUKAccountNumber(accountNumber: string): boolean { + // remove spaces + const cleaned = accountNumber.replace(/\s/g, '') + // uk account numbers are 6-8 digits (legacy accounts may have 6-7, padded to 8 downstream) + return /^\d{6,8}$/.test(cleaned) +} diff --git a/src/utils/bridge.utils.ts b/src/utils/bridge.utils.ts index d022b6e41..ba9cb7eba 100644 --- a/src/utils/bridge.utils.ts +++ b/src/utils/bridge.utils.ts @@ -28,6 +28,13 @@ export const getCurrencyConfig = (countryId: string, operationType: BridgeOperat } } + if (countryId === 'GB' || countryId === 'GBR') { + return { + currency: 'gbp', + paymentRail: 'faster_payments', // UK Faster Payments + } + } + // All other countries use EUR/SEPA return { currency: 'eur', @@ -50,6 +57,7 @@ export const getCurrencySymbol = (currency: string): string => { usd: '$', eur: '€', mxn: 'MX$', + gbp: '£', } return symbols[currency.toLowerCase()] || currency.toUpperCase() } @@ -62,6 +70,11 @@ export const getMinimumAmount = (countryId: string): number => { return 50 } + // UK has a minimum of 3 GBP + if (countryId === 'GB' || countryId === 'GBR') { + return 3 + } + // Default minimum for all other countries (including US and EU) return 1 } @@ -76,10 +89,15 @@ export const getPaymentRailDisplayName = (paymentRail: string): string => { sepa: 'SEPA Transfer', spei: 'SPEI Transfer', wire: 'Wire Transfer', + faster_payments: 'Faster Payments', } return displayNames[paymentRail] || paymentRail.toUpperCase() } +export function getCountryFromPath(countryPath: string): CountryData | undefined { + return ALL_METHODS_DATA.find((c) => c.path.toLowerCase() === countryPath.toLowerCase()) +} + export function getCountryFromAccount(account: Account): CountryData | undefined { const threeLetterCountryCode = (account.details.countryCode ?? '').toUpperCase() @@ -156,6 +174,11 @@ export const inferBankAccountType = (accountId: string): string => { return 'ACH' } + // UK Faster Payments: 8-digit account number (sort code stored separately) + if (/^\d{8}$/.test(accountId)) { + return 'Faster Payments (UK)' + } + // Fallback for other numeric formats if (/^\d+$/.test(accountId)) { return 'Bank Account' diff --git a/src/utils/cookie-migration.utils.ts b/src/utils/cookie-migration.utils.ts index 46a810139..dec62cf6b 100644 --- a/src/utils/cookie-migration.utils.ts +++ b/src/utils/cookie-migration.utils.ts @@ -9,21 +9,5 @@ import { cookies } from 'next/headers' export async function getJWTCookie() { const cookieStore = await cookies() - const cookie = cookieStore.get('jwt-token') - - if (cookie?.value) { - try { - cookieStore.set('jwt-token', cookie.value, { - httpOnly: false, // Required for client-side services to read token (see TODO above) - secure: process.env.NODE_ENV === 'production', - path: '/', - sameSite: 'lax', - maxAge: 30 * 24 * 60 * 60, - }) - } catch (error) { - console.warn('Failed to refresh JWT cookie:', error) - } - } - - return cookie + return cookieStore.get('jwt-token') } diff --git a/src/utils/format.utils.ts b/src/utils/format.utils.ts index 7059a2143..c0f0b2742 100644 --- a/src/utils/format.utils.ts +++ b/src/utils/format.utils.ts @@ -1,3 +1,26 @@ +/** + * Format points for display with thousands separators (e.g. 564,554). + */ +export function formatPoints(points: number): string { + return points.toLocaleString('en-US') +} + +/** + * Shorten large point values to compact form. + * Returns { number, suffix } so the suffix (K/M) can be styled separately. + */ +export function shortenPoints(points: number): { number: string; suffix: string } { + if (points >= 1_000_000) { + const m = points / 1_000_000 + return { number: m >= 10 ? Math.round(m).toString() : m.toFixed(1).replace(/\.0$/, ''), suffix: 'M' } + } + if (points >= 1_000) { + const k = points / 1_000 + return { number: k >= 10 ? Math.round(k).toString() : k.toFixed(1).replace(/\.0$/, ''), suffix: 'K' } + } + return { number: points.toString(), suffix: '' } +} + export const sanitizeBankAccount = (value: string | undefined): string => { if (!value) return '' return value.replace(/[\s\-\._]/g, '').toLowerCase() diff --git a/src/utils/general.utils.ts b/src/utils/general.utils.ts index afb85130a..87ea6ce20 100644 --- a/src/utils/general.utils.ts +++ b/src/utils/general.utils.ts @@ -936,6 +936,20 @@ export const generateInviteCodeLink = (username: string) => { return { inviteLink, inviteCode } } +/** + * Extract invitee name from perk reason string. + * Perk reasons follow the format: "Username became a Card Pioneer! (payment: uuid)" + * + * @param reason - The perk reason string + * @param fallback - Fallback name if extraction fails (default: 'Your friend') + * @returns The extracted invitee name or fallback + */ +export const extractInviteeName = (reason: string | undefined | null, fallback = 'Your friend'): string => { + if (!reason) return fallback + const name = reason.split(' became')[0] + return name || fallback +} + export const getValidRedirectUrl = (redirectUrl: string, fallbackRoute: string) => { let decodedRedirect = redirectUrl try { diff --git a/src/utils/sentry.utils.ts b/src/utils/sentry.utils.ts index 3eb59e6b9..2e100e95f 100644 --- a/src/utils/sentry.utils.ts +++ b/src/utils/sentry.utils.ts @@ -8,9 +8,10 @@ import { type JSONValue } from '../interfaces/interfaces' * Pattern can be a string (exact match) or regex. */ const SKIP_REPORTING: Array<{ pattern: string | RegExp; statuses: number[] }> = [ - // 400 on get-user-from-cookie is expected when no valid session { pattern: /get-user-from-cookie/, statuses: [400, 401, 403, 404] }, { pattern: /users/, statuses: [400, 401, 403, 404] }, + { pattern: /perks/, statuses: [400, 401, 403, 404] }, + { pattern: /qr-payment\/init/, statuses: [400] }, ] /**