A React component library for rendering common AT Protocol records for applications such as Bluesky and Leaflet.

init

+26
.gitignore
··· 1 + # Logs 2 + logs 3 + *.log 4 + npm-debug.log* 5 + yarn-debug.log* 6 + yarn-error.log* 7 + pnpm-debug.log* 8 + lerna-debug.log* 9 + 10 + node_modules 11 + dist 12 + lib-dist 13 + dist-ssr 14 + *.local 15 + *.zip 16 + 17 + # Editor directories and files 18 + .vscode/* 19 + !.vscode/extensions.json 20 + .idea 21 + .DS_Store 22 + *.suo 23 + *.ntvs* 24 + *.njsproj 25 + *.sln 26 + *.sw?
+131
README.md
··· 1 + # atproto-ui 2 + 3 + atproto-ui is a component library and set of hooks for rendering records from the AT Protocol (Bluesky, Leaflet, and friends) in React applications. It handles DID resolution, PDS endpoint discovery, and record fetching so you can focus on UI. 4 + 5 + ## Features 6 + 7 + - Drop-in components for common record types (`BlueskyPost`, `BlueskyProfile`, `TangledString`, etc.). 8 + - Hooks and helpers for composing your own renderers for your own applications, (PRs welcome!) 9 + - Built on the lightweight [`@atcute/*`](https://github.com/atcute) clients. 10 + 11 + ## Installation 12 + 13 + ```bash 14 + npm install atproto-ui 15 + ``` 16 + 17 + ## Quick start 18 + 19 + 1. Wrap your app (once) with the `AtProtoProvider`. 20 + 2. Drop any of the ready-made components inside that provider. 21 + 3. Use the hooks to prefetch handles, blobs, or latest records when you want to control the render flow yourself. 22 + 23 + ```tsx 24 + import { AtProtoProvider, BlueskyPost } from 'atproto-ui'; 25 + 26 + export function App() { 27 + return ( 28 + <AtProtoProvider> 29 + <BlueskyPost did="did:plc:example" rkey="3k2aexample" /> 30 + {/* you can use handles in the components as well. */} 31 + <LeafletDocument did="nekomimi.pet" rkey="3m2seagm2222c" /> 32 + </AtProtoProvider> 33 + ); 34 + } 35 + ``` 36 + 37 + ### Available building blocks 38 + 39 + | Component / Hook | What it does | 40 + | --- | --- | 41 + | `AtProtoProvider` | Configures PLC directory (defaults to `https://plc.directory`) and shares protocol clients via React context. | 42 + | `BlueskyProfile` | Renders a profile card for a DID/handle. Accepts `fallback`, `loadingIndicator`, `renderer`, and `colorScheme`. | 43 + | `BlueskyPost` / `BlueskyQuotePost` | Shows a single Bluesky post, with quotation support, custom renderer overrides, and the same loading/fallback knobs. | 44 + | `BlueskyPostList` | Lists the latest posts with built-in pagination (defaults: 5 per page, pagination controls on). | 45 + | `TangledString` | Renders a Tangled string (gist-like record) with optional renderer overrides. | 46 + | `LeafletDocument` | Displays long-form Leaflet documents with blocks, theme support, and renderer overrides. | 47 + | `useDidResolution`, `useLatestRecord`, `usePaginatedRecords`, … | Hook-level access to records if you want to own the markup or prefill components. | 48 + 49 + All components accept a `colorScheme` of `'light' | 'dark' | 'system'` so they can blend into your design. They also accept `fallback` and `loadingIndicator` props to control what renders before or during network work, and most expose a `renderer` override when you need total control of the final markup. 50 + 51 + ### Prefill components with the latest record 52 + 53 + `useLatestRecord` gives you the most recent record for any collection along with its `rkey`. You can use that key to pre-populate components like `BlueskyPost`, `LeafletDocument`, or `TangledString`. 54 + 55 + ```tsx 56 + import { useLatestRecord, BlueskyPost } from 'atproto-ui'; 57 + import type { FeedPostRecord } from 'atproto-ui'; 58 + 59 + const LatestBlueskyPost: React.FC<{ did: string }> = ({ did }) => { 60 + const { rkey, loading, error, empty } = useLatestRecord<FeedPostRecord>(did, 'app.bsky.feed.post'); 61 + 62 + if (loading) return <p>Fetching latest post…</p>; 63 + if (error) return <p>Could not load: {error.message}</p>; 64 + if (empty || !rkey) return <p>No posts yet.</p>; 65 + 66 + return ( 67 + <BlueskyPost 68 + did={did} 69 + rkey={rkey} 70 + colorScheme="system" 71 + /> 72 + ); 73 + }; 74 + ``` 75 + 76 + The same pattern works for other components: swap the collection NSID and the component you render once you have an `rkey`. 77 + 78 + ```tsx 79 + const LatestLeafletDocument: React.FC<{ did: string }> = ({ did }) => { 80 + const { rkey } = useLatestRecord(did, 'pub.leaflet.document'); 81 + return rkey ? <LeafletDocument did={did} rkey={rkey} colorScheme="light" /> : null; 82 + }; 83 + ``` 84 + 85 + ## Compose your own component 86 + 87 + The helpers let you stitch together custom experiences without reimplementing protocol plumbing. The example below pulls a creator’s latest post and renders a minimal summary: 88 + 89 + ```tsx 90 + import { useLatestRecord, useColorScheme, AtProtoRecord } from 'atproto-ui'; 91 + import type { FeedPostRecord } from 'atproto-ui'; 92 + 93 + const LatestPostSummary: React.FC<{ did: string }> = ({ did }) => { 94 + const scheme = useColorScheme('system'); 95 + const { rkey, loading, error } = useLatestRecord<FeedPostRecord>(did, 'app.bsky.feed.post'); 96 + 97 + if (loading) return <span>Loading…</span>; 98 + if (error || !rkey) return <span>No post yet.</span>; 99 + 100 + return ( 101 + <AtProtoRecord<FeedPostRecord> 102 + did={did} 103 + collection="app.bsky.feed.post" 104 + rkey={rkey} 105 + renderer={({ record }) => ( 106 + <article data-color-scheme={scheme}> 107 + <strong>{record?.text ?? 'Empty post'}</strong> 108 + </article> 109 + )} 110 + /> 111 + ); 112 + }; 113 + ``` 114 + 115 + There is a [demo](https://wisp.place/s/ana.pds.nkp.pet/ATComponents) where you can see the components in live action. 116 + 117 + ## Running the demo locally 118 + 119 + ```bash 120 + npm install 121 + npm run dev 122 + ``` 123 + 124 + Then open the printed Vite URL and try entering a Bluesky handle to see the components in action. 125 + 126 + ## Next steps 127 + 128 + - Expand renderer coverage (e.g., Grain.social photos). 129 + - Expand documentation with TypeScript API references and theming guidelines. 130 + 131 + Contributions and ideas are welcome—feel free to open an issue or PR!
+23
eslint.config.js
··· 1 + import js from '@eslint/js' 2 + import globals from 'globals' 3 + import reactHooks from 'eslint-plugin-react-hooks' 4 + import reactRefresh from 'eslint-plugin-react-refresh' 5 + import tseslint from 'typescript-eslint' 6 + import { defineConfig, globalIgnores } from 'eslint/config' 7 + 8 + export default defineConfig([ 9 + globalIgnores(['dist']), 10 + { 11 + files: ['**/*.{ts,tsx}'], 12 + extends: [ 13 + js.configs.recommended, 14 + tseslint.configs.recommended, 15 + reactHooks.configs['recommended-latest'], 16 + reactRefresh.configs.vite, 17 + ], 18 + languageOptions: { 19 + ecmaVersion: 2020, 20 + globals: globals.browser, 21 + }, 22 + }, 23 + ])
+1
global.d.ts
··· 1 + declare module '*.css';
+13
index.html
··· 1 + <!doctype html> 2 + <html lang="en"> 3 + <head> 4 + <meta charset="UTF-8" /> 5 + <link rel="icon" type="image/svg+xml" href="/vite.svg" /> 6 + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 7 + <title>atproto-ui</title> 8 + </head> 9 + <body> 10 + <div id="root"></div> 11 + <script type="module" src="/src/main.tsx"></script> 12 + </body> 13 + </html>
+50
lib/components/BlueskyIcon.tsx
··· 1 + import React from 'react'; 2 + 3 + /** 4 + * Configuration for the `BlueskyIcon` component. 5 + */ 6 + export interface BlueskyIconProps { 7 + /** 8 + * Pixel dimensions applied to both the width and height of the SVG element. 9 + * Defaults to `16`. 10 + */ 11 + size?: number; 12 + /** 13 + * Hex, RGB, or any valid CSS color string used to fill the icon path. 14 + * Defaults to the standard Bluesky blue `#1185fe`. 15 + */ 16 + color?: string; 17 + /** 18 + * Accessible title that will be exposed via `aria-label` for screen readers. 19 + * Defaults to `'Bluesky'`. 20 + */ 21 + title?: string; 22 + } 23 + 24 + /** 25 + * Renders the Bluesky butterfly glyph as a scalable, accessible SVG. 26 + * 27 + * @param size - Pixel dimensions applied to both width and height of the SVG. 28 + * @param color - CSS color string used to fill the icon path. 29 + * @param title - Accessible label exposed via `aria-label`. 30 + * @returns A JSX `<svg>` element suitable for inline usage. 31 + */ 32 + export const BlueskyIcon: React.FC<BlueskyIconProps> = ({ size = 16, color = '#1185fe', title = 'Bluesky' }) => ( 33 + <svg 34 + xmlns="http://www.w3.org/2000/svg" 35 + width={size} 36 + height={size} 37 + viewBox="0 0 16 16" 38 + role="img" 39 + aria-label={title} 40 + focusable="false" 41 + style={{ display: 'block' }} 42 + > 43 + <path 44 + fill={color} 45 + d="M3.468 1.948C5.303 3.325 7.276 6.118 8 7.616c.725-1.498 2.698-4.29 4.532-5.668C13.855.955 16 .186 16 2.632c0 .489-.28 4.105-.444 4.692-.572 2.04-2.653 2.561-4.504 2.246 3.236.551 4.06 2.375 2.281 4.2-3.376 3.464-4.852-.87-5.23-1.98-.07-.204-.103-.3-.103-.218 0-.081-.033.014-.102.218-.379 1.11-1.855 5.444-5.231 1.98-1.778-1.825-.955-3.65 2.28-4.2-1.85.315-3.932-.205-4.503-2.246C.28 6.737 0 3.12 0 2.632 0 .186 2.145.955 3.468 1.948" 46 + /> 47 + </svg> 48 + ); 49 + 50 + export default BlueskyIcon;
+159
lib/components/BlueskyPost.tsx
··· 1 + import React from 'react'; 2 + import { AtProtoRecord } from '../core/AtProtoRecord'; 3 + import { BlueskyPostRenderer } from '../renderers/BlueskyPostRenderer'; 4 + import type { FeedPostRecord, ProfileRecord } from '../types/bluesky'; 5 + import { useDidHandle } from '../hooks/useDidHandle'; 6 + import { useAtProtoRecord } from '../hooks/useAtProtoRecord'; 7 + import { useBlob } from '../hooks/useBlob'; 8 + import { BLUESKY_PROFILE_COLLECTION } from './BlueskyProfile'; 9 + import { getAvatarCid } from '../utils/profile'; 10 + 11 + /** 12 + * Props for rendering a single Bluesky post with optional customization hooks. 13 + */ 14 + export interface BlueskyPostProps { 15 + /** 16 + * Decentralized identifier for the repository that owns the post. 17 + */ 18 + did: string; 19 + /** 20 + * Record key identifying the specific post within the collection. 21 + */ 22 + rkey: string; 23 + /** 24 + * Custom renderer component that receives resolved post data and status flags. 25 + */ 26 + renderer?: React.ComponentType<BlueskyPostRendererInjectedProps>; 27 + /** 28 + * React node shown while the post query has not yet produced data or an error. 29 + */ 30 + fallback?: React.ReactNode; 31 + /** 32 + * React node displayed while the post fetch is actively loading. 33 + */ 34 + loadingIndicator?: React.ReactNode; 35 + /** 36 + * Preferred color scheme to pass through to renderers. 37 + */ 38 + colorScheme?: 'light' | 'dark' | 'system'; 39 + /** 40 + * Whether the default renderer should show the Bluesky icon. 41 + * Defaults to `true`. 42 + */ 43 + showIcon?: boolean; 44 + /** 45 + * Placement strategy for the icon when it is rendered. 46 + * Defaults to `'timestamp'`. 47 + */ 48 + iconPlacement?: 'cardBottomRight' | 'timestamp' | 'linkInline'; 49 + } 50 + 51 + /** 52 + * Values injected by `BlueskyPost` into a downstream renderer component. 53 + */ 54 + export type BlueskyPostRendererInjectedProps = { 55 + /** 56 + * Resolved record payload for the post. 57 + */ 58 + record: FeedPostRecord; 59 + /** 60 + * `true` while network operations are in-flight. 61 + */ 62 + loading: boolean; 63 + /** 64 + * Error encountered during loading, if any. 65 + */ 66 + error?: Error; 67 + /** 68 + * The author's public handle derived from the DID. 69 + */ 70 + authorHandle: string; 71 + /** 72 + * The DID that owns the post record. 73 + */ 74 + authorDid: string; 75 + /** 76 + * Resolved URL for the author's avatar blob, if available. 77 + */ 78 + avatarUrl?: string; 79 + /** 80 + * Preferred color scheme bubbled down to children. 81 + */ 82 + colorScheme?: 'light' | 'dark' | 'system'; 83 + /** 84 + * Placement strategy for the Bluesky icon. 85 + */ 86 + iconPlacement?: 'cardBottomRight' | 'timestamp' | 'linkInline'; 87 + /** 88 + * Controls whether the icon should render at all. 89 + */ 90 + showIcon?: boolean; 91 + /** 92 + * Fully qualified AT URI of the post. 93 + */ 94 + atUri: string; 95 + /** 96 + * Optional override for the rendered embed contents. 97 + */ 98 + embed?: React.ReactNode; 99 + }; 100 + 101 + /** NSID for the canonical Bluesky feed post collection. */ 102 + export const BLUESKY_POST_COLLECTION = 'app.bsky.feed.post'; 103 + 104 + /** 105 + * Fetches a Bluesky feed post, resolves metadata such as author handle and avatar, 106 + * and renders it via a customizable renderer component. 107 + * 108 + * @param did - DID of the repository that stores the post. 109 + * @param rkey - Record key for the post within the feed collection. 110 + * @param renderer - Optional renderer component to override the default. 111 + * @param fallback - Node rendered before the first fetch attempt resolves. 112 + * @param loadingIndicator - Node rendered while the post is loading. 113 + * @param colorScheme - Preferred color scheme forwarded to downstream components. 114 + * @param showIcon - Controls whether the Bluesky icon should render alongside the post. Defaults to `true`. 115 + * @param iconPlacement - Determines where the icon is positioned in the rendered post. Defaults to `'timestamp'`. 116 + * @returns A component that renders loading/fallback states and the resolved post. 117 + */ 118 + export const BlueskyPost: React.FC<BlueskyPostProps> = ({ did, rkey, renderer, fallback, loadingIndicator, colorScheme, showIcon = true, iconPlacement = 'timestamp' }) => { 119 + const { handle, loading: handleLoading } = useDidHandle(did); 120 + const { record: profile } = useAtProtoRecord<ProfileRecord>({ did, collection: BLUESKY_PROFILE_COLLECTION, rkey: 'self' }); 121 + const avatarCid = getAvatarCid(profile); 122 + const { url: avatarUrl } = useBlob(did, avatarCid); 123 + 124 + const Comp: React.ComponentType<BlueskyPostRendererInjectedProps> = renderer ?? ((props) => <BlueskyPostRenderer {...props} />); 125 + 126 + if (!handle && handleLoading) { 127 + return <div style={{ padding: 8 }}>Resolving handle…</div>; 128 + } 129 + if (!handle) { 130 + return <div style={{ padding: 8, color: 'crimson' }}>Could not resolve handle.</div>; 131 + } 132 + 133 + const atUri = `at://${did}/${BLUESKY_POST_COLLECTION}/${rkey}`; 134 + 135 + const Wrapped: React.FC<{ record: FeedPostRecord; loading: boolean; error?: Error }> = (props) => ( 136 + <Comp 137 + {...props} 138 + authorHandle={handle} 139 + authorDid={did} 140 + avatarUrl={avatarUrl} 141 + colorScheme={colorScheme} 142 + iconPlacement={iconPlacement} 143 + showIcon={showIcon} 144 + atUri={atUri} 145 + /> 146 + ); 147 + return ( 148 + <AtProtoRecord<FeedPostRecord> 149 + did={did} 150 + collection={BLUESKY_POST_COLLECTION} 151 + rkey={rkey} 152 + renderer={Wrapped} 153 + fallback={fallback} 154 + loadingIndicator={loadingIndicator} 155 + /> 156 + ); 157 + }; 158 + 159 + export default BlueskyPost;
+421
lib/components/BlueskyPostList.tsx
··· 1 + import React, { useMemo } from 'react'; 2 + import { usePaginatedRecords } from '../hooks/usePaginatedRecords'; 3 + import { useColorScheme } from '../hooks/useColorScheme'; 4 + import type { FeedPostRecord } from '../types/bluesky'; 5 + import { useDidHandle } from '../hooks/useDidHandle'; 6 + import { BlueskyIcon } from './BlueskyIcon'; 7 + 8 + /** 9 + * Options for rendering a paginated list of Bluesky posts. 10 + */ 11 + export interface BlueskyPostListProps { 12 + /** 13 + * DID whose feed posts should be fetched. 14 + */ 15 + did: string; 16 + /** 17 + * Maximum number of records to list per page. Defaults to `5`. 18 + */ 19 + limit?: number; 20 + /** 21 + * Enables pagination controls when `true`. Defaults to `true`. 22 + */ 23 + enablePagination?: boolean; 24 + /** 25 + * Preferred color scheme passed through to styling helpers. 26 + * Defaults to `'system'` which follows the OS preference. 27 + */ 28 + colorScheme?: 'light' | 'dark' | 'system'; 29 + } 30 + 31 + /** 32 + * Fetches a DID's feed posts and renders them with rich pagination and theming. 33 + * 34 + * @param did - DID whose posts should be displayed. 35 + * @param limit - Maximum number of posts per page. Default `5`. 36 + * @param enablePagination - Whether pagination controls should render. Default `true`. 37 + * @param colorScheme - Preferred color scheme used for styling. Default `'system'`. 38 + * @returns A card-like list element with loading, empty, and error handling. 39 + */ 40 + export const BlueskyPostList: React.FC<BlueskyPostListProps> = ({ did, limit = 5, enablePagination = true, colorScheme = 'system' }) => { 41 + const scheme = useColorScheme(colorScheme); 42 + const palette: ListPalette = scheme === 'dark' ? darkPalette : lightPalette; 43 + const { handle } = useDidHandle(did); 44 + 45 + const { records, loading, error, hasNext, hasPrev, loadNext, loadPrev, pageIndex, pagesCount } = usePaginatedRecords<FeedPostRecord>({ did, collection: 'app.bsky.feed.post', limit }); 46 + 47 + const pageLabel = useMemo(() => { 48 + const knownTotal = Math.max(pageIndex + 1, pagesCount); 49 + if (!enablePagination) return undefined; 50 + if (hasNext && knownTotal === pageIndex + 1) return `${pageIndex + 1}/…`; 51 + return `${pageIndex + 1}/${knownTotal}`; 52 + }, [enablePagination, hasNext, pageIndex, pagesCount]); 53 + 54 + if (error) return <div style={{ padding: 8, color: 'crimson' }}>Failed to load posts.</div>; 55 + 56 + return ( 57 + <div style={{ ...listStyles.card, ...palette.card }}> 58 + <div style={{ ...listStyles.header, ...palette.header }}> 59 + <div style={listStyles.headerInfo}> 60 + <div style={listStyles.headerIcon}> 61 + <BlueskyIcon size={20} /> 62 + </div> 63 + <div style={listStyles.headerText}> 64 + <span style={listStyles.title}>Latest Posts</span> 65 + <span style={{ ...listStyles.subtitle, ...palette.subtitle }}>@{handle ?? formatDid(did)}</span> 66 + </div> 67 + </div> 68 + {pageLabel && <span style={{ ...listStyles.pageMeta, ...palette.pageMeta }}>{pageLabel}</span>} 69 + </div> 70 + <div style={listStyles.items}> 71 + {loading && records.length === 0 && <div style={{ ...listStyles.empty, ...palette.empty }}>Loading posts…</div>} 72 + {records.map((record, idx) => ( 73 + <ListRow 74 + key={record.rkey} 75 + record={record.value} 76 + rkey={record.rkey} 77 + did={did} 78 + palette={palette} 79 + hasDivider={idx < records.length - 1} 80 + /> 81 + ))} 82 + {!loading && records.length === 0 && <div style={{ ...listStyles.empty, ...palette.empty }}>No posts found.</div>} 83 + </div> 84 + {enablePagination && ( 85 + <div style={{ ...listStyles.footer, ...palette.footer }}> 86 + <button 87 + type="button" 88 + style={{ 89 + ...listStyles.navButton, 90 + ...palette.navButton, 91 + cursor: hasPrev ? 'pointer' : 'not-allowed', 92 + opacity: hasPrev ? 1 : 0.5 93 + }} 94 + onClick={loadPrev} 95 + disabled={!hasPrev} 96 + > 97 + ‹ Prev 98 + </button> 99 + <div style={listStyles.pageChips}> 100 + <span style={{ ...listStyles.pageChipActive, ...palette.pageChipActive }}>{pageIndex + 1}</span> 101 + {(hasNext || pagesCount > pageIndex + 1) && ( 102 + <span style={{ ...listStyles.pageChip, ...palette.pageChip }}>{pageIndex + 2}</span> 103 + )} 104 + </div> 105 + <button 106 + type="button" 107 + style={{ 108 + ...listStyles.navButton, 109 + ...palette.navButton, 110 + cursor: hasNext ? 'pointer' : 'not-allowed', 111 + opacity: hasNext ? 1 : 0.5 112 + }} 113 + onClick={loadNext} 114 + disabled={!hasNext} 115 + > 116 + Next › 117 + </button> 118 + </div> 119 + )} 120 + {loading && records.length > 0 && <div style={{ ...listStyles.loadingBar, ...palette.loadingBar }}>Updating…</div>} 121 + </div> 122 + ); 123 + }; 124 + 125 + interface ListRowProps { 126 + record: FeedPostRecord; 127 + rkey: string; 128 + did: string; 129 + palette: ListPalette; 130 + hasDivider: boolean; 131 + } 132 + 133 + const ListRow: React.FC<ListRowProps> = ({ record, rkey, did, palette, hasDivider }) => { 134 + const text = record.text?.trim() ?? ''; 135 + const relative = record.createdAt ? formatRelativeTime(record.createdAt) : undefined; 136 + const absolute = record.createdAt ? new Date(record.createdAt).toLocaleString() : undefined; 137 + const href = `https://bsky.app/profile/${did}/post/${rkey}`; 138 + 139 + return ( 140 + <a href={href} target="_blank" rel="noopener noreferrer" style={{ ...listStyles.row, ...palette.row, borderBottom: hasDivider ? `1px solid ${palette.divider}` : 'none' }}> 141 + {relative && ( 142 + <span style={{ ...listStyles.rowTime, ...palette.rowTime }} title={absolute}> 143 + {relative} 144 + </span> 145 + )} 146 + {text && <p style={{ ...listStyles.rowBody, ...palette.rowBody }}>{text}</p>} 147 + {!text && <p style={{ ...listStyles.rowBody, ...palette.rowBody, fontStyle: 'italic' }}>No text content.</p>} 148 + </a> 149 + ); 150 + }; 151 + 152 + function formatDid(did: string) { 153 + return did.replace(/^did:(plc:)?/, ''); 154 + } 155 + 156 + function formatRelativeTime(iso: string): string { 157 + const date = new Date(iso); 158 + const diffSeconds = (date.getTime() - Date.now()) / 1000; 159 + const absSeconds = Math.abs(diffSeconds); 160 + const thresholds: Array<{ limit: number; unit: Intl.RelativeTimeFormatUnit; divisor: number }> = [ 161 + { limit: 60, unit: 'second', divisor: 1 }, 162 + { limit: 3600, unit: 'minute', divisor: 60 }, 163 + { limit: 86400, unit: 'hour', divisor: 3600 }, 164 + { limit: 604800, unit: 'day', divisor: 86400 }, 165 + { limit: 2629800, unit: 'week', divisor: 604800 }, 166 + { limit: 31557600, unit: 'month', divisor: 2629800 }, 167 + { limit: Infinity, unit: 'year', divisor: 31557600 } 168 + ]; 169 + const threshold = thresholds.find(t => absSeconds < t.limit) ?? thresholds[thresholds.length - 1]; 170 + const value = diffSeconds / threshold.divisor; 171 + const rtf = new Intl.RelativeTimeFormat('en', { numeric: 'auto' }); 172 + return rtf.format(Math.round(value), threshold.unit); 173 + } 174 + 175 + interface ListPalette { 176 + card: { background: string; borderColor: string }; 177 + header: { borderBottomColor: string; color: string }; 178 + pageMeta: { color: string }; 179 + subtitle: { color: string }; 180 + empty: { color: string }; 181 + row: { color: string }; 182 + rowTime: { color: string }; 183 + rowBody: { color: string }; 184 + divider: string; 185 + footer: { borderTopColor: string; color: string }; 186 + navButton: { color: string; background: string }; 187 + pageChip: { color: string; borderColor: string; background: string }; 188 + pageChipActive: { color: string; background: string; borderColor: string }; 189 + loadingBar: { color: string }; 190 + } 191 + 192 + const listStyles = { 193 + card: { 194 + borderRadius: 16, 195 + border: '1px solid transparent', 196 + boxShadow: '0 8px 18px -12px rgba(15, 23, 42, 0.25)', 197 + overflow: 'hidden', 198 + display: 'flex', 199 + flexDirection: 'column' 200 + } satisfies React.CSSProperties, 201 + header: { 202 + display: 'flex', 203 + alignItems: 'center', 204 + justifyContent: 'space-between', 205 + padding: '14px 18px', 206 + fontSize: 14, 207 + fontWeight: 500, 208 + borderBottom: '1px solid transparent' 209 + } satisfies React.CSSProperties, 210 + headerInfo: { 211 + display: 'flex', 212 + alignItems: 'center', 213 + gap: 12 214 + } satisfies React.CSSProperties, 215 + headerIcon: { 216 + width: 28, 217 + height: 28, 218 + display: 'flex', 219 + alignItems: 'center', 220 + justifyContent: 'center', 221 + //background: 'rgba(17, 133, 254, 0.14)', 222 + borderRadius: '50%' 223 + } satisfies React.CSSProperties, 224 + headerText: { 225 + display: 'flex', 226 + flexDirection: 'column', 227 + gap: 2 228 + } satisfies React.CSSProperties, 229 + title: { 230 + fontSize: 15, 231 + fontWeight: 600 232 + } satisfies React.CSSProperties, 233 + subtitle: { 234 + fontSize: 12, 235 + fontWeight: 500 236 + } satisfies React.CSSProperties, 237 + pageMeta: { 238 + fontSize: 12 239 + } satisfies React.CSSProperties, 240 + items: { 241 + display: 'flex', 242 + flexDirection: 'column' 243 + } satisfies React.CSSProperties, 244 + empty: { 245 + padding: '24px 18px', 246 + fontSize: 13, 247 + textAlign: 'center' 248 + } satisfies React.CSSProperties, 249 + row: { 250 + padding: '18px', 251 + textDecoration: 'none', 252 + display: 'flex', 253 + flexDirection: 'column', 254 + gap: 6, 255 + transition: 'background-color 120ms ease' 256 + } satisfies React.CSSProperties, 257 + rowHeader: { 258 + display: 'flex', 259 + gap: 6, 260 + alignItems: 'baseline', 261 + fontSize: 13 262 + } satisfies React.CSSProperties, 263 + rowTime: { 264 + fontSize: 12, 265 + fontWeight: 500 266 + } satisfies React.CSSProperties, 267 + rowBody: { 268 + margin: 0, 269 + whiteSpace: 'pre-wrap', 270 + fontSize: 14, 271 + lineHeight: 1.45 272 + } satisfies React.CSSProperties, 273 + footer: { 274 + display: 'flex', 275 + alignItems: 'center', 276 + justifyContent: 'space-between', 277 + padding: '12px 18px', 278 + borderTop: '1px solid transparent', 279 + fontSize: 13 280 + } satisfies React.CSSProperties, 281 + navButton: { 282 + border: 'none', 283 + borderRadius: 999, 284 + padding: '6px 12px', 285 + fontSize: 13, 286 + fontWeight: 500, 287 + background: 'transparent', 288 + display: 'flex', 289 + alignItems: 'center', 290 + gap: 4, 291 + transition: 'background-color 120ms ease' 292 + } satisfies React.CSSProperties, 293 + pageChips: { 294 + display: 'flex', 295 + gap: 6, 296 + alignItems: 'center' 297 + } satisfies React.CSSProperties, 298 + pageChip: { 299 + padding: '4px 10px', 300 + borderRadius: 999, 301 + fontSize: 13, 302 + border: '1px solid transparent' 303 + } satisfies React.CSSProperties, 304 + pageChipActive: { 305 + padding: '4px 10px', 306 + borderRadius: 999, 307 + fontSize: 13, 308 + fontWeight: 600, 309 + border: '1px solid transparent' 310 + } satisfies React.CSSProperties, 311 + loadingBar: { 312 + padding: '4px 18px 14px', 313 + fontSize: 12, 314 + textAlign: 'right', 315 + color: '#64748b' 316 + } satisfies React.CSSProperties 317 + }; 318 + 319 + const lightPalette: ListPalette = { 320 + card: { 321 + background: '#ffffff', 322 + borderColor: '#e2e8f0' 323 + }, 324 + header: { 325 + borderBottomColor: '#e2e8f0', 326 + color: '#0f172a' 327 + }, 328 + pageMeta: { 329 + color: '#64748b' 330 + }, 331 + subtitle: { 332 + color: '#475569' 333 + }, 334 + empty: { 335 + color: '#64748b' 336 + }, 337 + row: { 338 + color: '#0f172a' 339 + }, 340 + rowTime: { 341 + color: '#94a3b8' 342 + }, 343 + rowBody: { 344 + color: '#0f172a' 345 + }, 346 + divider: '#e2e8f0', 347 + footer: { 348 + borderTopColor: '#e2e8f0', 349 + color: '#0f172a' 350 + }, 351 + navButton: { 352 + color: '#0f172a', 353 + background: '#f1f5f9' 354 + }, 355 + pageChip: { 356 + color: '#475569', 357 + borderColor: '#e2e8f0', 358 + background: '#ffffff' 359 + }, 360 + pageChipActive: { 361 + color: '#ffffff', 362 + background: '#0f172a', 363 + borderColor: '#0f172a' 364 + }, 365 + loadingBar: { 366 + color: '#64748b' 367 + } 368 + }; 369 + 370 + const darkPalette: ListPalette = { 371 + card: { 372 + background: '#0f172a', 373 + borderColor: '#1e293b' 374 + }, 375 + header: { 376 + borderBottomColor: '#1e293b', 377 + color: '#e2e8f0' 378 + }, 379 + pageMeta: { 380 + color: '#94a3b8' 381 + }, 382 + subtitle: { 383 + color: '#94a3b8' 384 + }, 385 + empty: { 386 + color: '#94a3b8' 387 + }, 388 + row: { 389 + color: '#e2e8f0' 390 + }, 391 + rowTime: { 392 + color: '#94a3b8' 393 + }, 394 + rowBody: { 395 + color: '#e2e8f0' 396 + }, 397 + divider: '#1e293b', 398 + footer: { 399 + borderTopColor: '#1e293b', 400 + color: '#e2e8f0' 401 + }, 402 + navButton: { 403 + color: '#e2e8f0', 404 + background: '#111c31' 405 + }, 406 + pageChip: { 407 + color: '#cbd5f5', 408 + borderColor: '#1e293b', 409 + background: '#0f172a' 410 + }, 411 + pageChipActive: { 412 + color: '#0f172a', 413 + background: '#38bdf8', 414 + borderColor: '#38bdf8' 415 + }, 416 + loadingBar: { 417 + color: '#94a3b8' 418 + } 419 + }; 420 + 421 + export default BlueskyPostList;
+112
lib/components/BlueskyProfile.tsx
··· 1 + import React from 'react'; 2 + import { AtProtoRecord } from '../core/AtProtoRecord'; 3 + import { BlueskyProfileRenderer } from '../renderers/BlueskyProfileRenderer'; 4 + import type { ProfileRecord } from '../types/bluesky'; 5 + import { useBlob } from '../hooks/useBlob'; 6 + import { getAvatarCid } from '../utils/profile'; 7 + 8 + /** 9 + * Props used to render a Bluesky actor profile record. 10 + */ 11 + export interface BlueskyProfileProps { 12 + /** 13 + * DID of the target actor whose profile should be loaded. 14 + */ 15 + did: string; 16 + /** 17 + * Record key within the profile collection. Typically `'self'`. 18 + */ 19 + rkey?: string; 20 + /** 21 + * Optional renderer override for custom presentation. 22 + */ 23 + renderer?: React.ComponentType<BlueskyProfileRendererInjectedProps>; 24 + /** 25 + * Fallback node shown before a request begins yielding data. 26 + */ 27 + fallback?: React.ReactNode; 28 + /** 29 + * Loading indicator shown during in-flight fetches. 30 + */ 31 + loadingIndicator?: React.ReactNode; 32 + /** 33 + * Pre-resolved handle to display when available externally. 34 + */ 35 + handle?: string; 36 + /** 37 + * Preferred color scheme forwarded to renderer implementations. 38 + */ 39 + colorScheme?: 'light' | 'dark' | 'system'; 40 + } 41 + 42 + /** 43 + * Props injected into custom profile renderer implementations. 44 + */ 45 + export type BlueskyProfileRendererInjectedProps = { 46 + /** 47 + * Loaded profile record value. 48 + */ 49 + record: ProfileRecord; 50 + /** 51 + * Indicates whether the record is currently being fetched. 52 + */ 53 + loading: boolean; 54 + /** 55 + * Any error encountered while fetching the profile. 56 + */ 57 + error?: Error; 58 + /** 59 + * DID associated with the profile. 60 + */ 61 + did: string; 62 + /** 63 + * Human-readable handle for the DID, when known. 64 + */ 65 + handle?: string; 66 + /** 67 + * Blob URL for the user's avatar, when available. 68 + */ 69 + avatarUrl?: string; 70 + /** 71 + * Preferred color scheme for theming downstream components. 72 + */ 73 + colorScheme?: 'light' | 'dark' | 'system'; 74 + }; 75 + 76 + /** NSID for the canonical Bluesky profile collection. */ 77 + export const BLUESKY_PROFILE_COLLECTION = 'app.bsky.actor.profile'; 78 + 79 + /** 80 + * Fetches and renders a Bluesky actor profile, optionally injecting custom presentation 81 + * and providing avatar resolution support. 82 + * 83 + * @param did - DID whose profile record should be fetched. 84 + * @param rkey - Record key within the profile collection (default `'self'`). 85 + * @param renderer - Optional component override for custom rendering. 86 + * @param fallback - Node rendered prior to loading state initialization. 87 + * @param loadingIndicator - Node rendered while the profile request is in-flight. 88 + * @param handle - Optional pre-resolved handle to display. 89 + * @param colorScheme - Preferred color scheme forwarded to the renderer. 90 + * @returns A rendered profile component with loading/error states handled. 91 + */ 92 + export const BlueskyProfile: React.FC<BlueskyProfileProps> = ({ did, rkey = 'self', renderer, fallback, loadingIndicator, handle, colorScheme }) => { 93 + const Component: React.ComponentType<BlueskyProfileRendererInjectedProps> = renderer ?? ((props) => <BlueskyProfileRenderer {...props} />); 94 + 95 + const Wrapped: React.FC<{ record: ProfileRecord; loading: boolean; error?: Error }> = (props) => { 96 + const avatarCid = getAvatarCid(props.record); 97 + const { url: avatarUrl } = useBlob(did, avatarCid); 98 + return <Component {...props} did={did} handle={handle} avatarUrl={avatarUrl} colorScheme={colorScheme} />; 99 + }; 100 + return ( 101 + <AtProtoRecord<ProfileRecord> 102 + did={did} 103 + collection={BLUESKY_PROFILE_COLLECTION} 104 + rkey={rkey} 105 + renderer={Wrapped} 106 + fallback={fallback} 107 + loadingIndicator={loadingIndicator} 108 + /> 109 + ); 110 + }; 111 + 112 + export default BlueskyProfile;
+110
lib/components/BlueskyQuotePost.tsx
··· 1 + import React, { useMemo } from 'react'; 2 + import { BlueskyPost, type BlueskyPostRendererInjectedProps, BLUESKY_POST_COLLECTION } from './BlueskyPost'; 3 + import { BlueskyPostRenderer } from '../renderers/BlueskyPostRenderer'; 4 + import type { FeedPostRecord } from '../types/bluesky'; 5 + import { parseAtUri } from '../utils/at-uri'; 6 + 7 + /** 8 + * Props for rendering a Bluesky post that quotes another Bluesky post. 9 + */ 10 + export interface BlueskyQuotePostProps { 11 + /** 12 + * DID of the repository that owns the parent post. 13 + */ 14 + did: string; 15 + /** 16 + * Record key of the parent post. 17 + */ 18 + rkey: string; 19 + /** 20 + * Preferred color scheme propagated to nested renders. 21 + */ 22 + colorScheme?: 'light' | 'dark' | 'system'; 23 + /** 24 + * Custom renderer override applied to the parent post. 25 + */ 26 + renderer?: React.ComponentType<BlueskyPostRendererInjectedProps>; 27 + /** 28 + * Fallback content rendered before any request completes. 29 + */ 30 + fallback?: React.ReactNode; 31 + /** 32 + * Loading indicator rendered while the parent post is resolving. 33 + */ 34 + loadingIndicator?: React.ReactNode; 35 + /** 36 + * Controls whether the Bluesky icon is shown. Defaults to `true`. 37 + */ 38 + showIcon?: boolean; 39 + /** 40 + * Placement for the Bluesky icon. Defaults to `'timestamp'`. 41 + */ 42 + iconPlacement?: 'cardBottomRight' | 'timestamp' | 'linkInline'; 43 + } 44 + 45 + /** 46 + * Renders a Bluesky post while embedding its quoted post inline via a nested `BlueskyPost`. 47 + * 48 + * @param did - DID that owns the quoted parent post. 49 + * @param rkey - Record key identifying the parent post. 50 + * @param colorScheme - Preferred color scheme for both parent and quoted posts. 51 + * @param renderer - Optional renderer override applied to the parent post. 52 + * @param fallback - Node rendered before parent post data loads. 53 + * @param loadingIndicator - Node rendered while the parent post request is in-flight. 54 + * @param showIcon - Controls whether the Bluesky icon renders. Defaults to `true`. 55 + * @param iconPlacement - Placement location for the icon. Defaults to `'timestamp'`. 56 + * @returns A `BlueskyPost` element configured with an augmented renderer. 57 + */ 58 + export const BlueskyQuotePost: React.FC<BlueskyQuotePostProps> = ({ did, rkey, colorScheme, renderer, fallback, loadingIndicator, showIcon = true, iconPlacement = 'timestamp' }) => { 59 + const BaseRenderer = renderer ?? BlueskyPostRenderer; 60 + const Renderer = useMemo(() => { 61 + const QuoteRenderer: React.FC<BlueskyPostRendererInjectedProps> = (props) => { 62 + const embedNode = createQuoteEmbed(props.record, props.colorScheme ?? colorScheme); 63 + return <BaseRenderer {...props} embed={embedNode} />; 64 + }; 65 + QuoteRenderer.displayName = 'BlueskyQuotePostRenderer'; 66 + return QuoteRenderer; 67 + }, [BaseRenderer, colorScheme]); 68 + 69 + return ( 70 + <BlueskyPost 71 + did={did} 72 + rkey={rkey} 73 + colorScheme={colorScheme} 74 + renderer={Renderer} 75 + fallback={fallback} 76 + loadingIndicator={loadingIndicator} 77 + showIcon={showIcon} 78 + iconPlacement={iconPlacement} 79 + /> 80 + ); 81 + }; 82 + 83 + /** 84 + * Builds the quoted post embed node when the parent record contains a record embed. 85 + * 86 + * @param record - Feed post containing a possible quote reference. 87 + * @param colorScheme - Desired visual theme for the nested quote. 88 + * @returns A nested `BlueskyPost` or `null` if no compatible embed exists. 89 + */ 90 + function createQuoteEmbed(record: FeedPostRecord, colorScheme?: 'light' | 'dark' | 'system') { 91 + const embed = record.embed as { $type?: string; record?: { uri?: string } } | undefined; 92 + if (!embed || embed.$type !== 'app.bsky.embed.record') return null; 93 + const quoted = embed.record; 94 + const quotedUri = quoted?.uri; 95 + const parsed = parseAtUri(quotedUri); 96 + if (!parsed || parsed.collection !== BLUESKY_POST_COLLECTION) return null; 97 + return ( 98 + <div style={quoteWrapperStyle}> 99 + <BlueskyPost did={parsed.did} rkey={parsed.rkey} colorScheme={colorScheme} showIcon={false} /> 100 + </div> 101 + ); 102 + } 103 + 104 + const quoteWrapperStyle: React.CSSProperties = { 105 + display: 'flex', 106 + flexDirection: 'column', 107 + gap: 8 108 + }; 109 + 110 + export default BlueskyQuotePost;
+116
lib/components/ColorSchemeToggle.tsx
··· 1 + import React from 'react'; 2 + import type { ColorSchemePreference } from '../hooks/useColorScheme'; 3 + 4 + /** 5 + * Props for the `ColorSchemeToggle` segmented control. 6 + */ 7 + export interface ColorSchemeToggleProps { 8 + /** 9 + * Current color scheme preference selection. 10 + */ 11 + value: ColorSchemePreference; 12 + /** 13 + * Change handler invoked when the user selects a new scheme. 14 + */ 15 + onChange: (value: ColorSchemePreference) => void; 16 + /** 17 + * Theme used to style the control itself; defaults to `'light'`. 18 + */ 19 + scheme?: 'light' | 'dark'; 20 + } 21 + 22 + const options: Array<{ label: string; value: ColorSchemePreference; description: string }> = [ 23 + { label: 'System', value: 'system', description: 'Follow OS preference' }, 24 + { label: 'Light', value: 'light', description: 'Always light mode' }, 25 + { label: 'Dark', value: 'dark', description: 'Always dark mode' } 26 + ]; 27 + 28 + /** 29 + * A button group that lets users choose between light, dark, or system color modes. 30 + * 31 + * @param value - Current scheme selection displayed as active. 32 + * @param onChange - Callback fired when a new option is selected. 33 + * @param scheme - Theme used to style the control itself. Defaults to `'light'`. 34 + * @returns A fully keyboard-accessible toggle rendered as a radio group. 35 + */ 36 + export const ColorSchemeToggle: React.FC<ColorSchemeToggleProps> = ({ value, onChange, scheme = 'light' }) => { 37 + const palette = scheme === 'dark' ? darkTheme : lightTheme; 38 + 39 + return ( 40 + <div aria-label="Color scheme" role="radiogroup" style={{ ...containerStyle, ...palette.container }}> 41 + {options.map(option => { 42 + const isActive = option.value === value; 43 + const activeStyles = isActive ? palette.active : undefined; 44 + return ( 45 + <button 46 + key={option.value} 47 + role="radio" 48 + aria-checked={isActive} 49 + type="button" 50 + onClick={() => onChange(option.value)} 51 + style={{ 52 + ...buttonStyle, 53 + ...palette.button, 54 + ...(activeStyles ?? {}) 55 + }} 56 + title={option.description} 57 + > 58 + {option.label} 59 + </button> 60 + ); 61 + })} 62 + </div> 63 + ); 64 + }; 65 + 66 + const containerStyle: React.CSSProperties = { 67 + display: 'inline-flex', 68 + borderRadius: 999, 69 + padding: 4, 70 + gap: 4, 71 + border: '1px solid transparent', 72 + background: '#f8fafc' 73 + }; 74 + 75 + const buttonStyle: React.CSSProperties = { 76 + border: '1px solid transparent', 77 + borderRadius: 999, 78 + padding: '4px 12px', 79 + fontSize: 12, 80 + fontWeight: 500, 81 + cursor: 'pointer', 82 + background: 'transparent', 83 + transition: 'background-color 160ms ease, border-color 160ms ease, color 160ms ease' 84 + }; 85 + 86 + const lightTheme = { 87 + container: { 88 + borderColor: '#e2e8f0', 89 + background: 'rgba(241, 245, 249, 0.8)' 90 + }, 91 + button: { 92 + color: '#334155' 93 + }, 94 + active: { 95 + background: '#2563eb', 96 + borderColor: '#2563eb', 97 + color: '#f8fafc' 98 + } 99 + } satisfies Record<string, React.CSSProperties>; 100 + 101 + const darkTheme = { 102 + container: { 103 + borderColor: '#2e3540ff', 104 + background: 'rgba(30, 38, 49, 0.6)' 105 + }, 106 + button: { 107 + color: '#e2e8f0' 108 + }, 109 + active: { 110 + background: '#38bdf8', 111 + borderColor: '#38bdf8', 112 + color: '#020617' 113 + } 114 + } satisfies Record<string, React.CSSProperties>; 115 + 116 + export default ColorSchemeToggle;
+117
lib/components/LeafletDocument.tsx
··· 1 + import React, { useMemo } from 'react'; 2 + import { AtProtoRecord } from '../core/AtProtoRecord'; 3 + import { LeafletDocumentRenderer, type LeafletDocumentRendererProps } from '../renderers/LeafletDocumentRenderer'; 4 + import type { LeafletDocumentRecord, LeafletPublicationRecord } from '../types/leaflet'; 5 + import type { ColorSchemePreference } from '../hooks/useColorScheme'; 6 + import { parseAtUri, toBlueskyPostUrl, leafletRkeyUrl, normalizeLeafletBasePath } from '../utils/at-uri'; 7 + import { useAtProtoRecord } from '../hooks/useAtProtoRecord'; 8 + 9 + /** 10 + * Props for rendering a Leaflet document record. 11 + */ 12 + export interface LeafletDocumentProps { 13 + /** 14 + * DID of the Leaflet publisher. 15 + */ 16 + did: string; 17 + /** 18 + * Record key of the document within the Leaflet collection. 19 + */ 20 + rkey: string; 21 + /** 22 + * Optional custom renderer for advanced layouts. 23 + */ 24 + renderer?: React.ComponentType<LeafletDocumentRendererInjectedProps>; 25 + /** 26 + * React node rendered before data begins loading. 27 + */ 28 + fallback?: React.ReactNode; 29 + /** 30 + * Indicator rendered while data is being fetched from the PDS. 31 + */ 32 + loadingIndicator?: React.ReactNode; 33 + /** 34 + * Preferred color scheme to forward to the renderer. 35 + */ 36 + colorScheme?: ColorSchemePreference; 37 + } 38 + 39 + /** 40 + * Props provided to renderer overrides for Leaflet documents. 41 + */ 42 + export type LeafletDocumentRendererInjectedProps = LeafletDocumentRendererProps; 43 + 44 + /** NSID for Leaflet document records. */ 45 + export const LEAFLET_DOCUMENT_COLLECTION = 'pub.leaflet.document'; 46 + 47 + /** 48 + * Loads a Leaflet document along with its associated publication record and renders it 49 + * using the provided or default renderer. 50 + * 51 + * @param did - DID of the Leaflet publisher. 52 + * @param rkey - Record key of the Leaflet document. 53 + * @param renderer - Optional renderer override used in place of the default. 54 + * @param fallback - Node rendered before loading begins. 55 + * @param loadingIndicator - Node rendered while the document or publication records are loading. 56 + * @param colorScheme - Preferred color scheme forwarded to the renderer. 57 + * @returns A JSX subtree that renders a Leaflet document with contextual metadata. 58 + */ 59 + export const LeafletDocument: React.FC<LeafletDocumentProps> = ({ did, rkey, renderer, fallback, loadingIndicator, colorScheme }) => { 60 + const Comp: React.ComponentType<LeafletDocumentRendererInjectedProps> = renderer ?? ((props) => <LeafletDocumentRenderer {...props} />); 61 + 62 + const Wrapped: React.FC<{ record: LeafletDocumentRecord; loading: boolean; error?: Error }> = (props) => { 63 + const publicationUri = useMemo(() => parseAtUri(props.record.publication), [props.record.publication]); 64 + const { record: publicationRecord } = useAtProtoRecord<LeafletPublicationRecord>({ 65 + did: publicationUri?.did, 66 + collection: publicationUri?.collection ?? 'pub.leaflet.publication', 67 + rkey: publicationUri?.rkey ?? '' 68 + }); 69 + const publicationBaseUrl = normalizeLeafletBasePath(publicationRecord?.base_path); 70 + const canonicalUrl = resolveCanonicalUrl(props.record, did, rkey, publicationRecord?.base_path); 71 + return ( 72 + <Comp 73 + {...props} 74 + colorScheme={colorScheme} 75 + did={did} 76 + rkey={rkey} 77 + canonicalUrl={canonicalUrl} 78 + publicationBaseUrl={publicationBaseUrl} 79 + publicationRecord={publicationRecord} 80 + /> 81 + ); 82 + }; 83 + 84 + return ( 85 + <AtProtoRecord<LeafletDocumentRecord> 86 + did={did} 87 + collection={LEAFLET_DOCUMENT_COLLECTION} 88 + rkey={rkey} 89 + renderer={Wrapped} 90 + fallback={fallback} 91 + loadingIndicator={loadingIndicator} 92 + /> 93 + ); 94 + }; 95 + 96 + /** 97 + * Determines the best canonical URL to expose for a Leaflet document. 98 + * 99 + * @param record - Leaflet document record under review. 100 + * @param did - Publisher DID. 101 + * @param rkey - Record key for the document. 102 + * @param publicationBasePath - Optional base path configured by the publication. 103 + * @returns A URL to use for canonical links. 104 + */ 105 + function resolveCanonicalUrl(record: LeafletDocumentRecord, did: string, rkey: string, publicationBasePath?: string): string { 106 + const publicationUrl = leafletRkeyUrl(publicationBasePath, rkey); 107 + if (publicationUrl) return publicationUrl; 108 + const postUri = record.postRef?.uri; 109 + if (postUri) { 110 + const parsed = parseAtUri(postUri); 111 + const href = parsed ? toBlueskyPostUrl(parsed) : undefined; 112 + if (href) return href; 113 + } 114 + return `https://bsky.app/leaflet/${encodeURIComponent(did)}/${encodeURIComponent(rkey)}`; 115 + } 116 + 117 + export default LeafletDocument;
+81
lib/components/TangledString.tsx
··· 1 + import React from 'react'; 2 + import { AtProtoRecord } from '../core/AtProtoRecord'; 3 + import { TangledStringRenderer } from '../renderers/TangledStringRenderer'; 4 + import type { TangledStringRecord } from '../renderers/TangledStringRenderer'; 5 + 6 + /** 7 + * Props for rendering Tangled String records. 8 + */ 9 + export interface TangledStringProps { 10 + /** DID of the repository that stores the string record. */ 11 + did: string; 12 + /** Record key within the `sh.tangled.string` collection. */ 13 + rkey: string; 14 + /** Optional renderer override for custom presentation. */ 15 + renderer?: React.ComponentType<TangledStringRendererInjectedProps>; 16 + /** Fallback node displayed before loading begins. */ 17 + fallback?: React.ReactNode; 18 + /** Indicator node shown while data is loading. */ 19 + loadingIndicator?: React.ReactNode; 20 + /** Preferred color scheme for theming. */ 21 + colorScheme?: 'light' | 'dark' | 'system'; 22 + } 23 + 24 + /** 25 + * Values injected into custom Tangled String renderer implementations. 26 + */ 27 + export type TangledStringRendererInjectedProps = { 28 + /** Loaded Tangled String record value. */ 29 + record: TangledStringRecord; 30 + /** Indicates whether the record is currently loading. */ 31 + loading: boolean; 32 + /** Fetch error, if any. */ 33 + error?: Error; 34 + /** Preferred color scheme for downstream components. */ 35 + colorScheme?: 'light' | 'dark' | 'system'; 36 + /** DID associated with the record. */ 37 + did: string; 38 + /** Record key for the string. */ 39 + rkey: string; 40 + /** Canonical external URL for linking to the string. */ 41 + canonicalUrl: string; 42 + }; 43 + 44 + /** NSID for Tangled String records. */ 45 + export const TANGLED_COLLECTION = 'sh.tangled.string'; 46 + 47 + /** 48 + * Resolves a Tangled String record and renders it with optional overrides while computing a canonical link. 49 + * 50 + * @param did - DID whose Tangled String should be fetched. 51 + * @param rkey - Record key within the Tangled String collection. 52 + * @param renderer - Optional component override that will receive injected props. 53 + * @param fallback - Node rendered before the first load begins. 54 + * @param loadingIndicator - Node rendered while the Tangled String is loading. 55 + * @param colorScheme - Preferred color scheme for theming the renderer. 56 + * @returns A JSX subtree representing the Tangled String record with loading states handled. 57 + */ 58 + export const TangledString: React.FC<TangledStringProps> = ({ did, rkey, renderer, fallback, loadingIndicator, colorScheme }) => { 59 + const Comp: React.ComponentType<TangledStringRendererInjectedProps> = renderer ?? ((props) => <TangledStringRenderer {...props} />); 60 + const Wrapped: React.FC<{ record: TangledStringRecord; loading: boolean; error?: Error }> = (props) => ( 61 + <Comp 62 + {...props} 63 + colorScheme={colorScheme} 64 + did={did} 65 + rkey={rkey} 66 + canonicalUrl={`https://tangled.org/strings/${did}/${encodeURIComponent(rkey)}`} 67 + /> 68 + ); 69 + return ( 70 + <AtProtoRecord<TangledStringRecord> 71 + did={did} 72 + collection={TANGLED_COLLECTION} 73 + rkey={rkey} 74 + renderer={Wrapped} 75 + fallback={fallback} 76 + loadingIndicator={loadingIndicator} 77 + /> 78 + ); 79 + }; 80 + 81 + export default TangledString;
+25
lib/core/AtProtoRecord.tsx
··· 1 + import React from 'react'; 2 + import { useAtProtoRecord } from '../hooks/useAtProtoRecord'; 3 + import { useDidResolution } from '../hooks/useDidResolution'; 4 + 5 + export interface AtProtoRecordProps<T = unknown> { 6 + did: string; 7 + collection: string; 8 + rkey: string; 9 + renderer?: React.ComponentType<{ record: T; loading: boolean; error?: Error }>; 10 + fallback?: React.ReactNode; 11 + loadingIndicator?: React.ReactNode; 12 + } 13 + 14 + export function AtProtoRecord<T = unknown>({ did: handleOrDid, collection, rkey, renderer: Renderer, fallback = null, loadingIndicator = 'Loading…' }: AtProtoRecordProps<T>) { 15 + const { did, error: resolutionError, loading: resolving } = useDidResolution(handleOrDid); 16 + const { record, error: recordError, loading: recordLoading } = useAtProtoRecord<T>({ did, collection, rkey }); 17 + 18 + const loading = resolving || recordLoading; 19 + const error = resolutionError || recordError; 20 + 21 + if (error) return <>{fallback}</>; 22 + if (!record) return <>{loading ? loadingIndicator : fallback}</>; 23 + if (Renderer) return <Renderer record={record} loading={loading} error={error} />; 24 + return <pre style={{ fontSize: 12, padding: 8, background: '#f5f5f5', overflow: 'auto' }}>{JSON.stringify(record, null, 2)}</pre>; 25 + }
+65
lib/hooks/useAtProtoRecord.ts
··· 1 + import { useEffect, useState } from 'react'; 2 + import { usePdsEndpoint } from './usePdsEndpoint'; 3 + import { createAtprotoClient } from '../utils/atproto-client'; 4 + 5 + /** 6 + * Identifier trio required to address an AT Protocol record. 7 + */ 8 + export interface AtProtoRecordKey { 9 + /** Repository DID (or handle prior to resolution) containing the record. */ 10 + did?: string; 11 + /** NSID collection in which the record resides. */ 12 + collection: string; 13 + /** Record key string uniquely identifying the record within the collection. */ 14 + rkey: string; 15 + } 16 + 17 + /** 18 + * Loading state returned by {@link useAtProtoRecord}. 19 + */ 20 + export interface AtProtoRecordState<T = unknown> { 21 + /** Resolved record value when fetch succeeds. */ 22 + record?: T; 23 + /** Error thrown while loading, if any. */ 24 + error?: Error; 25 + /** Indicates whether the hook is in a loading state. */ 26 + loading: boolean; 27 + } 28 + 29 + /** 30 + * React hook that fetches a single AT Protocol record and tracks loading/error state. 31 + * 32 + * @param did - DID (or handle before resolution) that owns the record. 33 + * @param collection - NSID collection from which to fetch the record. 34 + * @param rkey - Record key identifying the record within the collection. 35 + * @returns {AtProtoRecordState<T>} Object containing the resolved record, any error, and a loading flag. 36 + */ 37 + export function useAtProtoRecord<T = unknown>({ did, collection, rkey }: AtProtoRecordKey): AtProtoRecordState<T> { 38 + const { endpoint, error: endpointError } = usePdsEndpoint(did); 39 + const [state, setState] = useState<AtProtoRecordState<T>>({ loading: !!did }); 40 + 41 + useEffect(() => { 42 + let cancelled = false; 43 + async function load() { 44 + if (!did || !endpoint) return; 45 + setState(s => ({ ...s, loading: true })); 46 + try { 47 + const { rpc } = await createAtprotoClient({ service: endpoint }); 48 + // Type of getRecord lexicon not available in generic Client here, so cast through unknown. 49 + const res = await (rpc as unknown as { get: (nsid: string, opts: { params: { repo: string; collection: string; rkey: string } }) => Promise<{ ok: boolean; data: { value: T } }> }).get('com.atproto.repo.getRecord', { 50 + params: { repo: did, collection, rkey } 51 + }); 52 + if (!res.ok) throw new Error('Failed to load record'); 53 + const record = (res.data as { value: T }).value; 54 + if (!cancelled) setState({ record, loading: false }); 55 + } catch (e) { 56 + if (!cancelled) setState({ error: e as Error, loading: false }); 57 + } 58 + } 59 + load(); 60 + return () => { cancelled = true; }; 61 + }, [did, endpoint, collection, rkey]); 62 + 63 + if (endpointError && !state.error) return { ...state, error: endpointError }; 64 + return state; 65 + }
+51
lib/hooks/useBlob.ts
··· 1 + import { useEffect, useState } from 'react'; 2 + import { usePdsEndpoint } from './usePdsEndpoint'; 3 + 4 + /** 5 + * Status returned by {@link useBlob} containing blob URL and metadata flags. 6 + */ 7 + export interface UseBlobState { 8 + /** Object URL pointing to the fetched blob, when available. */ 9 + url?: string; 10 + /** Indicates whether a fetch is in progress. */ 11 + loading: boolean; 12 + /** Error encountered while fetching the blob. */ 13 + error?: Error; 14 + } 15 + 16 + /** 17 + * Fetches a blob from the DID's PDS, exposes it as an object URL, and cleans up on unmount. 18 + * 19 + * @param did - DID whose PDS hosts the blob. 20 + * @param cid - Content identifier for the desired blob. 21 + * @returns {UseBlobState} Object containing the object URL, loading flag, and any error. 22 + */ 23 + export function useBlob(did: string | undefined, cid: string | undefined): UseBlobState { 24 + const { endpoint } = usePdsEndpoint(did); 25 + const [state, setState] = useState<UseBlobState>({ loading: !!(did && cid) }); 26 + 27 + useEffect(() => { 28 + let cancelled = false; 29 + let objectUrl: string | undefined; 30 + async function run() { 31 + if (!did || !cid || !endpoint) { setState({ loading: false }); return; } 32 + setState(s => ({ ...s, loading: true })); 33 + try { 34 + const res = await fetch(`${endpoint}/xrpc/com.atproto.sync.getBlob?did=${encodeURIComponent(did)}&cid=${encodeURIComponent(cid)}`); 35 + if (!res.ok) throw new Error('Blob fetch failed'); 36 + const blob = await res.blob(); 37 + objectUrl = URL.createObjectURL(blob); 38 + if (!cancelled) setState({ url: objectUrl, loading: false }); 39 + } catch (e) { 40 + if (!cancelled) setState({ error: e as Error, loading: false }); 41 + } 42 + } 43 + run(); 44 + return () => { 45 + cancelled = true; 46 + if (objectUrl) URL.revokeObjectURL(objectUrl); 47 + }; 48 + }, [did, cid, endpoint]); 49 + 50 + return state; 51 + }
+61
lib/hooks/useBlueskyProfile.ts
··· 1 + import { useEffect, useState } from 'react'; 2 + import { usePdsEndpoint } from './usePdsEndpoint'; 3 + import { createAtprotoClient } from '../utils/atproto-client'; 4 + 5 + /** 6 + * Minimal profile fields returned by the Bluesky actor profile endpoint. 7 + */ 8 + export interface BlueskyProfileData { 9 + /** Actor DID. */ 10 + did: string; 11 + /** Actor handle. */ 12 + handle: string; 13 + /** Display name configured by the actor. */ 14 + displayName?: string; 15 + /** Profile description/bio. */ 16 + description?: string; 17 + /** Avatar blob (CID reference). */ 18 + avatar?: string; 19 + /** Banner image blob (CID reference). */ 20 + banner?: string; 21 + /** Creation timestamp for the profile. */ 22 + createdAt?: string; 23 + } 24 + 25 + /** 26 + * Fetches a Bluesky actor profile for a DID and exposes loading/error state. 27 + * 28 + * @param did - Actor DID whose profile should be retrieved. 29 + * @returns {{ data: BlueskyProfileData | undefined; loading: boolean; error: Error | undefined }} Object exposing the profile payload, loading flag, and any error. 30 + */ 31 + export function useBlueskyProfile(did: string | undefined) { 32 + const { endpoint } = usePdsEndpoint(did); 33 + const [data, setData] = useState<BlueskyProfileData | undefined>(); 34 + const [loading, setLoading] = useState<boolean>(!!did); 35 + const [error, setError] = useState<Error | undefined>(); 36 + 37 + useEffect(() => { 38 + let cancelled = false; 39 + async function run() { 40 + if (!did || !endpoint) return; 41 + setLoading(true); 42 + try { 43 + const { rpc } = await createAtprotoClient({ service: endpoint }); 44 + const client = rpc as unknown as { 45 + get: (nsid: string, options: { params: { actor: string } }) => Promise<{ ok: boolean; data: unknown }>; 46 + }; 47 + const res = await client.get('app.bsky.actor.getProfile', { params: { actor: did } }); 48 + if (!res.ok) throw new Error('Profile request failed'); 49 + if (!cancelled) setData(res.data as BlueskyProfileData); 50 + } catch (e) { 51 + if (!cancelled) setError(e as Error); 52 + } finally { 53 + if (!cancelled) setLoading(false); 54 + } 55 + } 56 + run(); 57 + return () => { cancelled = true; }; 58 + }, [did, endpoint]); 59 + 60 + return { data, loading, error }; 61 + }
+56
lib/hooks/useColorScheme.ts
··· 1 + import { useEffect, useState } from 'react'; 2 + 3 + /** 4 + * Possible user-facing color scheme preferences. 5 + */ 6 + export type ColorSchemePreference = 'light' | 'dark' | 'system'; 7 + 8 + const MEDIA_QUERY = '(prefers-color-scheme: dark)'; 9 + 10 + /** 11 + * Resolves a persisted preference into an explicit light/dark value. 12 + * 13 + * @param pref - Stored preference value (`light`, `dark`, or `system`). 14 + * @returns Explicit light/dark scheme suitable for rendering. 15 + */ 16 + function resolveScheme(pref: ColorSchemePreference): 'light' | 'dark' { 17 + if (pref === 'light' || pref === 'dark') return pref; 18 + if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') { 19 + return 'light'; 20 + } 21 + return window.matchMedia(MEDIA_QUERY).matches ? 'dark' : 'light'; 22 + } 23 + 24 + /** 25 + * React hook that returns the effective light/dark scheme, respecting system preferences. 26 + * 27 + * @param preference - User preference; defaults to following the OS setting. 28 + * @returns {'light' | 'dark'} Explicit scheme that should be used for rendering. 29 + */ 30 + export function useColorScheme(preference: ColorSchemePreference = 'system'): 'light' | 'dark' { 31 + const [scheme, setScheme] = useState<'light' | 'dark'>(() => resolveScheme(preference)); 32 + 33 + useEffect(() => { 34 + if (preference === 'light' || preference === 'dark') { 35 + setScheme(preference); 36 + return; 37 + } 38 + if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') { 39 + setScheme('light'); 40 + return; 41 + } 42 + const media = window.matchMedia(MEDIA_QUERY); 43 + const update = (event: MediaQueryListEvent | MediaQueryList) => { 44 + setScheme(event.matches ? 'dark' : 'light'); 45 + }; 46 + update(media); 47 + if (typeof media.addEventListener === 'function') { 48 + media.addEventListener('change', update); 49 + return () => media.removeEventListener('change', update); 50 + } 51 + media.addListener(update); 52 + return () => media.removeListener(update); 53 + }, [preference]); 54 + 55 + return scheme; 56 + }
+41
lib/hooks/useDidHandle.ts
··· 1 + import { useEffect, useState } from 'react'; 2 + import { useAtProto } from '../providers/AtProtoProvider'; 3 + 4 + /** 5 + * Resolves a DID document and extracts the associated Bluesky handle from `alsoKnownAs`. 6 + * 7 + * @param did - DID to resolve. 8 + * @returns {{ handle: string | undefined; loading: boolean }} Object containing the derived handle and a loading flag. 9 + */ 10 + export function useDidHandle(did: string | undefined) { 11 + const { resolver } = useAtProto(); 12 + const [handle, setHandle] = useState<string | undefined>(); 13 + const [loading, setLoading] = useState<boolean>(!!did); 14 + 15 + useEffect(() => { 16 + let cancelled = false; 17 + if (!did) { 18 + setHandle(undefined); 19 + setLoading(false); 20 + return () => { cancelled = true; }; 21 + } 22 + setLoading(true); 23 + const input = did; 24 + async function run() { 25 + try { 26 + const doc = await resolver.resolveDidDoc(input); 27 + const aka = doc.alsoKnownAs?.find(a => a.startsWith('at://')); 28 + const extracted = aka ? aka.replace('at://', '') : undefined; 29 + if (!cancelled) setHandle(extracted); 30 + } catch { 31 + if (!cancelled) setHandle(undefined); 32 + } finally { 33 + if (!cancelled) setLoading(false); 34 + } 35 + } 36 + run(); 37 + return () => { cancelled = true; }; 38 + }, [did, resolver]); 39 + 40 + return { handle, loading }; 41 + }
+46
lib/hooks/useDidResolution.ts
··· 1 + import { useEffect, useState } from 'react'; 2 + import { useAtProto } from '../providers/AtProtoProvider'; 3 + 4 + /** 5 + * Resolves a handle to its DID, or returns the DID immediately when provided. 6 + * 7 + * @param handleOrDid - Bluesky handle or DID string. 8 + * @returns {{ did: string | undefined; error: Error | undefined; loading: boolean }} Object containing the resolved DID, error (if any), and loading state. 9 + */ 10 + export function useDidResolution(handleOrDid: string | undefined) { 11 + const { resolver } = useAtProto(); 12 + const [did, setDid] = useState<string | undefined>(); 13 + const [error, setError] = useState<Error | undefined>(); 14 + const [loading, setLoading] = useState(false); 15 + 16 + useEffect(() => { 17 + let cancelled = false; 18 + if (!handleOrDid) { 19 + setDid(undefined); 20 + setLoading(false); 21 + return () => { cancelled = true; }; 22 + } 23 + setLoading(true); 24 + setError(undefined); 25 + const input = handleOrDid; 26 + async function run() { 27 + try { 28 + if (input.startsWith('did:')) { 29 + if (!cancelled) setDid(input); 30 + } else { 31 + const resolved = await resolver.resolveHandle(input); 32 + if (!cancelled) setDid(resolved); 33 + } 34 + } catch (e) { 35 + if (!cancelled) setError(e as Error); 36 + if (!cancelled) setDid(undefined); 37 + } finally { 38 + if (!cancelled) setLoading(false); 39 + } 40 + } 41 + run(); 42 + return () => { cancelled = true; }; 43 + }, [handleOrDid, resolver]); 44 + 45 + return { did, error, loading }; 46 + }
+67
lib/hooks/useLatestRecord.ts
··· 1 + import { usePdsEndpoint } from './usePdsEndpoint'; 2 + import { createAtprotoClient } from '../utils/atproto-client'; 3 + import { useEffect, useState } from 'react'; 4 + 5 + /** 6 + * Shape of the state returned by {@link useLatestRecord}. 7 + */ 8 + export interface LatestRecordState<T = unknown> { 9 + /** Latest record value if one exists. */ 10 + record?: T; 11 + /** Record key for the fetched record, when derivable. */ 12 + rkey?: string; 13 + /** Error encountered while fetching. */ 14 + error?: Error; 15 + /** Indicates whether a fetch is in progress. */ 16 + loading: boolean; 17 + /** `true` when the collection has zero records. */ 18 + empty: boolean; 19 + } 20 + 21 + /** 22 + * Fetches the most recent record from a collection using `listRecords(limit=1)`. 23 + * 24 + * @param did - DID that owns the collection. 25 + * @param collection - NSID of the collection to query. 26 + * @returns {LatestRecordState<T>} Object reporting the latest record value, derived rkey, loading status, emptiness, and any error. 27 + */ 28 + export function useLatestRecord<T = unknown>(did: string | undefined, collection: string): LatestRecordState<T> { 29 + const { endpoint, error: endpointError } = usePdsEndpoint(did); 30 + const [state, setState] = useState<LatestRecordState<T>>({ loading: !!did, empty: false }); 31 + // simple one-shot fetch; no refresh logic 32 + 33 + useEffect(() => { 34 + let cancelled = false; 35 + async function run() { 36 + if (!did || !endpoint) return; 37 + setState(s => ({ ...s, loading: true })); 38 + try { 39 + const { rpc } = await createAtprotoClient({ service: endpoint }); 40 + const res = await (rpc as unknown as { get: (nsid: string, opts: { params: Record<string, string | number | boolean> }) => Promise<{ ok: boolean; data: { records: Array<{ uri: string; rkey?: string; value: T }> } }> }).get('com.atproto.repo.listRecords', { 41 + params: { repo: did, collection, limit: 1, reverse: false } 42 + }); 43 + if (!res.ok) throw new Error('Failed to list records'); 44 + const list = res.data.records; 45 + if (list.length === 0) { 46 + if (!cancelled) setState({ loading: false, empty: true }); 47 + return; 48 + } 49 + const first = list[0]; 50 + // derive rkey if not present 51 + let rkey = first.rkey; 52 + if (!rkey && first.uri) { 53 + const parts = first.uri.split('/'); 54 + rkey = parts[parts.length - 1]; 55 + } 56 + if (!cancelled) setState({ record: first.value, rkey, loading: false, empty: false }); 57 + } catch (e) { 58 + if (!cancelled) setState({ error: e as Error, loading: false, empty: false }); 59 + } 60 + } 61 + run(); 62 + return () => { cancelled = true; }; 63 + }, [did, endpoint, collection]); 64 + 65 + if (endpointError && !state.error) return { ...state, error: endpointError }; 66 + return state; 67 + }
+186
lib/hooks/usePaginatedRecords.ts
··· 1 + import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; 2 + import { usePdsEndpoint } from './usePdsEndpoint'; 3 + import { createAtprotoClient } from '../utils/atproto-client'; 4 + 5 + /** 6 + * Record envelope returned by paginated AT Protocol queries. 7 + */ 8 + export interface PaginatedRecord<T> { 9 + /** Fully qualified AT URI for the record. */ 10 + uri: string; 11 + /** Record key extracted from the URI or provided by the API. */ 12 + rkey: string; 13 + /** Raw record value. */ 14 + value: T; 15 + } 16 + 17 + interface PageData<T> { 18 + records: PaginatedRecord<T>[]; 19 + cursor?: string; 20 + } 21 + 22 + /** 23 + * Options accepted by {@link usePaginatedRecords}. 24 + */ 25 + export interface UsePaginatedRecordsOptions { 26 + /** DID whose repository should be queried. */ 27 + did?: string; 28 + /** NSID collection containing the target records. */ 29 + collection: string; 30 + /** Maximum page size to request; defaults to `5`. */ 31 + limit?: number; 32 + } 33 + 34 + /** 35 + * Result returned from {@link usePaginatedRecords} describing records and pagination state. 36 + */ 37 + export interface UsePaginatedRecordsResult<T> { 38 + /** Records for the active page. */ 39 + records: PaginatedRecord<T>[]; 40 + /** Indicates whether a page load is in progress. */ 41 + loading: boolean; 42 + /** Error produced during the latest fetch, if any. */ 43 + error?: Error; 44 + /** `true` when another page can be fetched forward. */ 45 + hasNext: boolean; 46 + /** `true` when a previous page exists in memory. */ 47 + hasPrev: boolean; 48 + /** Requests the next page (if available). */ 49 + loadNext: () => void; 50 + /** Returns to the previous page when possible. */ 51 + loadPrev: () => void; 52 + /** Index of the currently displayed page. */ 53 + pageIndex: number; 54 + /** Number of pages fetched so far (or inferred total when known). */ 55 + pagesCount: number; 56 + } 57 + 58 + /** 59 + * React hook that fetches a repository collection with cursor-based pagination and prefetching. 60 + * 61 + * @param did - DID whose repository should be queried. 62 + * @param collection - NSID collection to read from. 63 + * @param limit - Maximum number of records to request per page. Defaults to `5`. 64 + * @returns {UsePaginatedRecordsResult<T>} Object containing the current page, pagination metadata, and navigation callbacks. 65 + */ 66 + export function usePaginatedRecords<T>({ did, collection, limit = 5 }: UsePaginatedRecordsOptions): UsePaginatedRecordsResult<T> { 67 + const { endpoint, error: endpointError } = usePdsEndpoint(did); 68 + const [pages, setPages] = useState<PageData<T>[]>([]); 69 + const [pageIndex, setPageIndex] = useState(0); 70 + const [loading, setLoading] = useState(false); 71 + const [error, setError] = useState<Error | undefined>(undefined); 72 + const inFlight = useRef<Set<string>>(new Set()); 73 + 74 + const resetState = useCallback(() => { 75 + setPages([]); 76 + setPageIndex(0); 77 + setError(undefined); 78 + }, []); 79 + 80 + const fetchPage = useCallback(async (cursor: string | undefined, targetIndex: number, mode: 'active' | 'prefetch') => { 81 + if (!did || !endpoint) return; 82 + const key = `${targetIndex}:${cursor ?? 'start'}`; 83 + if (inFlight.current.has(key)) return; 84 + inFlight.current.add(key); 85 + if (mode === 'active') { 86 + setLoading(true); 87 + setError(undefined); 88 + } 89 + try { 90 + const { rpc } = await createAtprotoClient({ service: endpoint }); 91 + const res = await (rpc as unknown as { 92 + get: ( 93 + nsid: string, 94 + opts: { params: Record<string, string | number | boolean | undefined> } 95 + ) => Promise<{ ok: boolean; data: { records: Array<{ uri: string; rkey?: string; value: T }>; cursor?: string } }>; 96 + }).get('com.atproto.repo.listRecords', { 97 + params: { 98 + repo: did, 99 + collection, 100 + limit, 101 + cursor, 102 + reverse: false 103 + } 104 + }); 105 + if (!res.ok) throw new Error('Failed to list records'); 106 + const { records, cursor: nextCursor } = res.data; 107 + const mapped: PaginatedRecord<T>[] = records.map((item) => ({ 108 + uri: item.uri, 109 + rkey: item.rkey ?? extractRkey(item.uri), 110 + value: item.value 111 + })); 112 + setPages(prev => { 113 + const next = [...prev]; 114 + next[targetIndex] = { records: mapped, cursor: nextCursor }; 115 + return next; 116 + }); 117 + if (mode === 'active') setPageIndex(targetIndex); 118 + return nextCursor; 119 + } catch (e) { 120 + if (mode === 'active') setError(e as Error); 121 + } finally { 122 + if (mode === 'active') setLoading(false); 123 + inFlight.current.delete(key); 124 + } 125 + return undefined; 126 + }, [did, endpoint, collection, limit]); 127 + 128 + useEffect(() => { 129 + resetState(); 130 + if (!did || !endpoint) return; 131 + fetchPage(undefined, 0, 'active').catch(() => { 132 + /* error handled in state */ 133 + }); 134 + }, [did, endpoint, fetchPage, resetState]); 135 + 136 + const currentPage = pages[pageIndex]; 137 + const hasNext = !!currentPage?.cursor || !!pages[pageIndex + 1]; 138 + const hasPrev = pageIndex > 0; 139 + 140 + const loadNext = useCallback(() => { 141 + const page = pages[pageIndex]; 142 + if (!page?.cursor && !pages[pageIndex + 1]) return; 143 + if (pages[pageIndex + 1]) { 144 + setPageIndex(pageIndex + 1); 145 + return; 146 + } 147 + fetchPage(page.cursor, pageIndex + 1, 'active').catch(() => { 148 + /* handled via error state */ 149 + }); 150 + }, [fetchPage, pageIndex, pages]); 151 + 152 + const loadPrev = useCallback(() => { 153 + if (pageIndex === 0) return; 154 + setPageIndex(pageIndex - 1); 155 + }, [pageIndex]); 156 + 157 + const records = useMemo(() => currentPage?.records ?? [], [currentPage]); 158 + 159 + const effectiveError = error ?? (endpointError as Error | undefined); 160 + 161 + useEffect(() => { 162 + const cursor = pages[pageIndex]?.cursor; 163 + if (!cursor) return; 164 + if (pages[pageIndex + 1]) return; 165 + fetchPage(cursor, pageIndex + 1, 'prefetch').catch(() => { 166 + /* ignore prefetch errors */ 167 + }); 168 + }, [fetchPage, pageIndex, pages]); 169 + 170 + return { 171 + records, 172 + loading, 173 + error: effectiveError, 174 + hasNext, 175 + hasPrev, 176 + loadNext, 177 + loadPrev, 178 + pageIndex, 179 + pagesCount: pages.length || (currentPage ? pageIndex + 1 : 0) 180 + }; 181 + } 182 + 183 + function extractRkey(uri: string): string { 184 + const parts = uri.split('/'); 185 + return parts[parts.length - 1]; 186 + }
+28
lib/hooks/usePdsEndpoint.ts
··· 1 + import { useEffect, useState } from 'react'; 2 + import { useAtProto } from '../providers/AtProtoProvider'; 3 + 4 + /** 5 + * Resolves the PDS service endpoint for a given DID and tracks loading state. 6 + * 7 + * @param did - DID whose PDS endpoint should be discovered. 8 + * @returns {{ endpoint: string | undefined; error: Error | undefined; loading: boolean }} Object containing the resolved endpoint, error (if any), and loading flag. 9 + */ 10 + export function usePdsEndpoint(did: string | undefined) { 11 + const { resolver } = useAtProto(); 12 + const [endpoint, setEndpoint] = useState<string | undefined>(); 13 + const [error, setError] = useState<Error | undefined>(); 14 + const [loading, setLoading] = useState(false); 15 + 16 + useEffect(() => { 17 + let cancelled = false; 18 + if (!did) return; 19 + setLoading(true); 20 + resolver.pdsEndpointForDid(did) 21 + .then(url => { if (!cancelled) setEndpoint(url); }) 22 + .catch(e => { if (!cancelled) setError(e as Error); }) 23 + .finally(() => { if (!cancelled) setLoading(false); }); 24 + return () => { cancelled = true; }; 25 + }, [did, resolver]); 26 + 27 + return { endpoint, error, loading }; 28 + }
+41
lib/index.ts
··· 1 + // Master exporter for the AT React component library. 2 + 3 + // Providers & core primitives 4 + export * from './providers/AtProtoProvider'; 5 + export * from './core/AtProtoRecord'; 6 + 7 + // Components 8 + export * from './components/BlueskyIcon'; 9 + export * from './components/BlueskyPost'; 10 + export * from './components/BlueskyPostList'; 11 + export * from './components/BlueskyProfile'; 12 + export * from './components/BlueskyQuotePost'; 13 + export * from './components/ColorSchemeToggle'; 14 + export * from './components/LeafletDocument'; 15 + export * from './components/TangledString'; 16 + 17 + // Hooks 18 + export * from './hooks/useAtProtoRecord'; 19 + export * from './hooks/useBlob'; 20 + export * from './hooks/useBlueskyProfile'; 21 + export * from './hooks/useColorScheme'; 22 + export * from './hooks/useDidHandle'; 23 + export * from './hooks/useDidResolution'; 24 + export * from './hooks/useLatestRecord'; 25 + export * from './hooks/usePaginatedRecords'; 26 + export * from './hooks/usePdsEndpoint'; 27 + 28 + // Renderers 29 + export * from './renderers/BlueskyPostRenderer'; 30 + export * from './renderers/BlueskyProfileRenderer'; 31 + export * from './renderers/LeafletDocumentRenderer'; 32 + export * from './renderers/TangledStringRenderer'; 33 + 34 + // Types 35 + export * from './types/bluesky'; 36 + export * from './types/leaflet'; 37 + 38 + // Utilities 39 + export * from './utils/at-uri'; 40 + export * from './utils/atproto-client'; 41 + export * from './utils/profile';
+24
lib/lexicons/pub/leaflet/blocks/blockquote.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "pub.leaflet.blocks.blockquote", 4 + "defs": { 5 + "main": { 6 + "type": "object", 7 + "required": [ 8 + "plaintext" 9 + ], 10 + "properties": { 11 + "plaintext": { 12 + "type": "string" 13 + }, 14 + "facets": { 15 + "type": "array", 16 + "items": { 17 + "type": "ref", 18 + "ref": "pub.leaflet.richtext.facet" 19 + } 20 + } 21 + } 22 + } 23 + } 24 + }
+18
lib/lexicons/pub/leaflet/blocks/bskyPost.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "pub.leaflet.blocks.bskyPost", 4 + "defs": { 5 + "main": { 6 + "type": "object", 7 + "required": [ 8 + "postRef" 9 + ], 10 + "properties": { 11 + "postRef": { 12 + "type": "ref", 13 + "ref": "com.atproto.repo.strongRef" 14 + } 15 + } 16 + } 17 + } 18 + }
+23
lib/lexicons/pub/leaflet/blocks/code.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "pub.leaflet.blocks.code", 4 + "defs": { 5 + "main": { 6 + "type": "object", 7 + "required": [ 8 + "plaintext" 9 + ], 10 + "properties": { 11 + "plaintext": { 12 + "type": "string" 13 + }, 14 + "language": { 15 + "type": "string" 16 + }, 17 + "syntaxHighlightingTheme": { 18 + "type": "string" 19 + } 20 + } 21 + } 22 + } 23 + }
+29
lib/lexicons/pub/leaflet/blocks/header.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "pub.leaflet.blocks.header", 4 + "defs": { 5 + "main": { 6 + "type": "object", 7 + "required": [ 8 + "plaintext" 9 + ], 10 + "properties": { 11 + "level": { 12 + "type": "integer", 13 + "minimum": 1, 14 + "maximum": 6 15 + }, 16 + "plaintext": { 17 + "type": "string" 18 + }, 19 + "facets": { 20 + "type": "array", 21 + "items": { 22 + "type": "ref", 23 + "ref": "pub.leaflet.richtext.facet" 24 + } 25 + } 26 + } 27 + } 28 + } 29 + }
+11
lib/lexicons/pub/leaflet/blocks/horizontalRule.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "pub.leaflet.blocks.horizontalRule", 4 + "defs": { 5 + "main": { 6 + "type": "object", 7 + "required": [], 8 + "properties": {} 9 + } 10 + } 11 + }
+23
lib/lexicons/pub/leaflet/blocks/iframe.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "pub.leaflet.blocks.iframe", 4 + "defs": { 5 + "main": { 6 + "type": "object", 7 + "required": [ 8 + "url" 9 + ], 10 + "properties": { 11 + "url": { 12 + "type": "string", 13 + "format": "uri" 14 + }, 15 + "height": { 16 + "type": "integer", 17 + "minimum": 16, 18 + "maximum": 1600 19 + } 20 + } 21 + } 22 + } 23 + }
+45
lib/lexicons/pub/leaflet/blocks/image.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "pub.leaflet.blocks.image", 4 + "defs": { 5 + "main": { 6 + "type": "object", 7 + "required": [ 8 + "image", 9 + "aspectRatio" 10 + ], 11 + "properties": { 12 + "image": { 13 + "type": "blob", 14 + "accept": [ 15 + "image/*" 16 + ], 17 + "maxSize": 1000000 18 + }, 19 + "alt": { 20 + "type": "string", 21 + "description": "Alt text description of the image, for accessibility." 22 + }, 23 + "aspectRatio": { 24 + "type": "ref", 25 + "ref": "#aspectRatio" 26 + } 27 + } 28 + }, 29 + "aspectRatio": { 30 + "type": "object", 31 + "required": [ 32 + "width", 33 + "height" 34 + ], 35 + "properties": { 36 + "width": { 37 + "type": "integer" 38 + }, 39 + "height": { 40 + "type": "integer" 41 + } 42 + } 43 + } 44 + } 45 + }
+17
lib/lexicons/pub/leaflet/blocks/math.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "pub.leaflet.blocks.math", 4 + "defs": { 5 + "main": { 6 + "type": "object", 7 + "required": [ 8 + "tex" 9 + ], 10 + "properties": { 11 + "tex": { 12 + "type": "string" 13 + } 14 + } 15 + } 16 + } 17 + }
+24
lib/lexicons/pub/leaflet/blocks/text.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "pub.leaflet.blocks.text", 4 + "defs": { 5 + "main": { 6 + "type": "object", 7 + "required": [ 8 + "plaintext" 9 + ], 10 + "properties": { 11 + "plaintext": { 12 + "type": "string" 13 + }, 14 + "facets": { 15 + "type": "array", 16 + "items": { 17 + "type": "ref", 18 + "ref": "pub.leaflet.richtext.facet" 19 + } 20 + } 21 + } 22 + } 23 + } 24 + }
+44
lib/lexicons/pub/leaflet/blocks/unorderedList.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "pub.leaflet.blocks.unorderedList", 4 + "defs": { 5 + "main": { 6 + "type": "object", 7 + "required": [ 8 + "children" 9 + ], 10 + "properties": { 11 + "children": { 12 + "type": "array", 13 + "items": { 14 + "type": "ref", 15 + "ref": "#listItem" 16 + } 17 + } 18 + } 19 + }, 20 + "listItem": { 21 + "type": "object", 22 + "required": [ 23 + "content" 24 + ], 25 + "properties": { 26 + "content": { 27 + "type": "union", 28 + "refs": [ 29 + "pub.leaflet.blocks.text", 30 + "pub.leaflet.blocks.header", 31 + "pub.leaflet.blocks.image" 32 + ] 33 + }, 34 + "children": { 35 + "type": "array", 36 + "items": { 37 + "type": "ref", 38 + "ref": "#listItem" 39 + } 40 + } 41 + } 42 + } 43 + } 44 + }
+31
lib/lexicons/pub/leaflet/blocks/website.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "pub.leaflet.blocks.website", 4 + "defs": { 5 + "main": { 6 + "type": "object", 7 + "required": [ 8 + "src" 9 + ], 10 + "properties": { 11 + "previewImage": { 12 + "type": "blob", 13 + "accept": [ 14 + "image/*" 15 + ], 16 + "maxSize": 1000000 17 + }, 18 + "title": { 19 + "type": "string" 20 + }, 21 + "description": { 22 + "type": "string" 23 + }, 24 + "src": { 25 + "type": "string", 26 + "format": "uri" 27 + } 28 + } 29 + } 30 + } 31 + }
+80
lib/lexicons/pub/leaflet/comment.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "pub.leaflet.comment", 4 + "revision": 1, 5 + "description": "A lexicon for comments on documents", 6 + "defs": { 7 + "main": { 8 + "type": "record", 9 + "key": "tid", 10 + "description": "Record containing a comment", 11 + "record": { 12 + "type": "object", 13 + "required": [ 14 + "subject", 15 + "plaintext", 16 + "createdAt" 17 + ], 18 + "properties": { 19 + "subject": { 20 + "type": "string", 21 + "format": "at-uri" 22 + }, 23 + "createdAt": { 24 + "type": "string", 25 + "format": "datetime" 26 + }, 27 + "reply": { 28 + "type": "ref", 29 + "ref": "#replyRef" 30 + }, 31 + "plaintext": { 32 + "type": "string" 33 + }, 34 + "facets": { 35 + "type": "array", 36 + "items": { 37 + "type": "ref", 38 + "ref": "pub.leaflet.richtext.facet" 39 + } 40 + }, 41 + "attachment": { 42 + "type": "union", 43 + "refs": [ 44 + "#linearDocumentQuote" 45 + ] 46 + } 47 + } 48 + } 49 + }, 50 + "linearDocumentQuote": { 51 + "type": "object", 52 + "required": [ 53 + "document", 54 + "quote" 55 + ], 56 + "properties": { 57 + "document": { 58 + "type": "string", 59 + "format": "at-uri" 60 + }, 61 + "quote": { 62 + "type": "ref", 63 + "ref": "pub.leaflet.pages.linearDocument#quote" 64 + } 65 + } 66 + }, 67 + "replyRef": { 68 + "type": "object", 69 + "required": [ 70 + "parent" 71 + ], 72 + "properties": { 73 + "parent": { 74 + "type": "string", 75 + "format": "at-uri" 76 + } 77 + } 78 + } 79 + } 80 + }
+59
lib/lexicons/pub/leaflet/document.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "pub.leaflet.document", 4 + "revision": 1, 5 + "description": "A lexicon for long form rich media documents", 6 + "defs": { 7 + "main": { 8 + "type": "record", 9 + "key": "tid", 10 + "description": "Record containing a document", 11 + "record": { 12 + "type": "object", 13 + "required": [ 14 + "pages", 15 + "author", 16 + "title", 17 + "publication" 18 + ], 19 + "properties": { 20 + "title": { 21 + "type": "string", 22 + "maxLength": 1280, 23 + "maxGraphemes": 128 24 + }, 25 + "postRef": { 26 + "type": "ref", 27 + "ref": "com.atproto.repo.strongRef" 28 + }, 29 + "description": { 30 + "type": "string", 31 + "maxLength": 3000, 32 + "maxGraphemes": 300 33 + }, 34 + "publishedAt": { 35 + "type": "string", 36 + "format": "datetime" 37 + }, 38 + "publication": { 39 + "type": "string", 40 + "format": "at-uri" 41 + }, 42 + "author": { 43 + "type": "string", 44 + "format": "at-identifier" 45 + }, 46 + "pages": { 47 + "type": "array", 48 + "items": { 49 + "type": "union", 50 + "refs": [ 51 + "pub.leaflet.pages.linearDocument" 52 + ] 53 + } 54 + } 55 + } 56 + } 57 + } 58 + } 59 + }
+23
lib/lexicons/pub/leaflet/graph/subscription.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "pub.leaflet.graph.subscription", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "key": "tid", 8 + "description": "Record declaring a subscription to a publication", 9 + "record": { 10 + "type": "object", 11 + "required": [ 12 + "publication" 13 + ], 14 + "properties": { 15 + "publication": { 16 + "type": "string", 17 + "format": "at-uri" 18 + } 19 + } 20 + } 21 + } 22 + } 23 + }
+95
lib/lexicons/pub/leaflet/pages/linearDocument.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "pub.leaflet.pages.linearDocument", 4 + "defs": { 5 + "main": { 6 + "type": "object", 7 + "properties": { 8 + "blocks": { 9 + "type": "array", 10 + "items": { 11 + "type": "ref", 12 + "ref": "#block" 13 + } 14 + } 15 + } 16 + }, 17 + "block": { 18 + "type": "object", 19 + "required": [ 20 + "block" 21 + ], 22 + "properties": { 23 + "block": { 24 + "type": "union", 25 + "refs": [ 26 + "pub.leaflet.blocks.iframe", 27 + "pub.leaflet.blocks.text", 28 + "pub.leaflet.blocks.blockquote", 29 + "pub.leaflet.blocks.header", 30 + "pub.leaflet.blocks.image", 31 + "pub.leaflet.blocks.unorderedList", 32 + "pub.leaflet.blocks.website", 33 + "pub.leaflet.blocks.math", 34 + "pub.leaflet.blocks.code", 35 + "pub.leaflet.blocks.horizontalRule", 36 + "pub.leaflet.blocks.bskyPost" 37 + ] 38 + }, 39 + "alignment": { 40 + "type": "string", 41 + "knownValues": [ 42 + "#textAlignLeft", 43 + "#textAlignCenter", 44 + "#textAlignRight", 45 + "#textAlignJustify" 46 + ] 47 + } 48 + } 49 + }, 50 + "textAlignLeft": { 51 + "type": "token" 52 + }, 53 + "textAlignCenter": { 54 + "type": "token" 55 + }, 56 + "textAlignRight": { 57 + "type": "token" 58 + }, 59 + "quote": { 60 + "type": "object", 61 + "required": [ 62 + "start", 63 + "end" 64 + ], 65 + "properties": { 66 + "start": { 67 + "type": "ref", 68 + "ref": "#position" 69 + }, 70 + "end": { 71 + "type": "ref", 72 + "ref": "#position" 73 + } 74 + } 75 + }, 76 + "position": { 77 + "type": "object", 78 + "required": [ 79 + "block", 80 + "offset" 81 + ], 82 + "properties": { 83 + "block": { 84 + "type": "array", 85 + "items": { 86 + "type": "integer" 87 + } 88 + }, 89 + "offset": { 90 + "type": "integer" 91 + } 92 + } 93 + } 94 + } 95 + }
+107
lib/lexicons/pub/leaflet/publication.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "pub.leaflet.publication", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "key": "tid", 8 + "description": "Record declaring a publication", 9 + "record": { 10 + "type": "object", 11 + "required": [ 12 + "name" 13 + ], 14 + "properties": { 15 + "name": { 16 + "type": "string", 17 + "maxLength": 2000 18 + }, 19 + "base_path": { 20 + "type": "string", 21 + "format": "uri" 22 + }, 23 + "description": { 24 + "type": "string", 25 + "maxLength": 2000 26 + }, 27 + "icon": { 28 + "type": "blob", 29 + "accept": [ 30 + "image/*" 31 + ], 32 + "maxSize": 1000000 33 + }, 34 + "theme": { 35 + "type": "ref", 36 + "ref": "#theme" 37 + }, 38 + "preferences": { 39 + "type": "ref", 40 + "ref": "#preferences" 41 + } 42 + } 43 + } 44 + }, 45 + "preferences": { 46 + "type": "object", 47 + "properties": { 48 + "showInDiscover": { 49 + "type": "boolean", 50 + "default": true 51 + }, 52 + "showComments": { 53 + "type": "boolean", 54 + "default": true 55 + } 56 + } 57 + }, 58 + "theme": { 59 + "type": "object", 60 + "properties": { 61 + "backgroundColor": { 62 + "type": "union", 63 + "refs": [ 64 + "pub.leaflet.theme.color#rgba", 65 + "pub.leaflet.theme.color#rgb" 66 + ] 67 + }, 68 + "backgroundImage": { 69 + "type": "ref", 70 + "ref": "pub.leaflet.theme.backgroundImage" 71 + }, 72 + "primary": { 73 + "type": "union", 74 + "refs": [ 75 + "pub.leaflet.theme.color#rgba", 76 + "pub.leaflet.theme.color#rgb" 77 + ] 78 + }, 79 + "pageBackground": { 80 + "type": "union", 81 + "refs": [ 82 + "pub.leaflet.theme.color#rgba", 83 + "pub.leaflet.theme.color#rgb" 84 + ] 85 + }, 86 + "showPageBackground": { 87 + "type": "boolean", 88 + "default": false 89 + }, 90 + "accentBackground": { 91 + "type": "union", 92 + "refs": [ 93 + "pub.leaflet.theme.color#rgba", 94 + "pub.leaflet.theme.color#rgb" 95 + ] 96 + }, 97 + "accentText": { 98 + "type": "union", 99 + "refs": [ 100 + "pub.leaflet.theme.color#rgba", 101 + "pub.leaflet.theme.color#rgb" 102 + ] 103 + } 104 + } 105 + } 106 + } 107 + }
+112
lib/lexicons/pub/leaflet/richtext/facet.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "pub.leaflet.richtext.facet", 4 + "defs": { 5 + "main": { 6 + "type": "object", 7 + "description": "Annotation of a sub-string within rich text.", 8 + "required": [ 9 + "index", 10 + "features" 11 + ], 12 + "properties": { 13 + "index": { 14 + "type": "ref", 15 + "ref": "#byteSlice" 16 + }, 17 + "features": { 18 + "type": "array", 19 + "items": { 20 + "type": "union", 21 + "refs": [ 22 + "#link", 23 + "#code", 24 + "#highlight", 25 + "#underline", 26 + "#strikethrough", 27 + "#id", 28 + "#bold", 29 + "#italic" 30 + ] 31 + } 32 + } 33 + } 34 + }, 35 + "byteSlice": { 36 + "type": "object", 37 + "description": "Specifies the sub-string range a facet feature applies to. Start index is inclusive, end index is exclusive. Indices are zero-indexed, counting bytes of the UTF-8 encoded text. NOTE: some languages, like Javascript, use UTF-16 or Unicode codepoints for string slice indexing; in these languages, convert to byte arrays before working with facets.", 38 + "required": [ 39 + "byteStart", 40 + "byteEnd" 41 + ], 42 + "properties": { 43 + "byteStart": { 44 + "type": "integer", 45 + "minimum": 0 46 + }, 47 + "byteEnd": { 48 + "type": "integer", 49 + "minimum": 0 50 + } 51 + } 52 + }, 53 + "link": { 54 + "type": "object", 55 + "description": "Facet feature for a URL. The text URL may have been simplified or truncated, but the facet reference should be a complete URL.", 56 + "required": [ 57 + "uri" 58 + ], 59 + "properties": { 60 + "uri": { 61 + "type": "string" 62 + } 63 + } 64 + }, 65 + "code": { 66 + "type": "object", 67 + "description": "Facet feature for inline code.", 68 + "required": [], 69 + "properties": {} 70 + }, 71 + "highlight": { 72 + "type": "object", 73 + "description": "Facet feature for highlighted text.", 74 + "required": [], 75 + "properties": {} 76 + }, 77 + "underline": { 78 + "type": "object", 79 + "description": "Facet feature for underline markup", 80 + "required": [], 81 + "properties": {} 82 + }, 83 + "strikethrough": { 84 + "type": "object", 85 + "description": "Facet feature for strikethrough markup", 86 + "required": [], 87 + "properties": {} 88 + }, 89 + "id": { 90 + "type": "object", 91 + "description": "Facet feature for an identifier. Used for linking to a segment", 92 + "required": [], 93 + "properties": { 94 + "id": { 95 + "type": "string" 96 + } 97 + } 98 + }, 99 + "bold": { 100 + "type": "object", 101 + "description": "Facet feature for bold text", 102 + "required": [], 103 + "properties": {} 104 + }, 105 + "italic": { 106 + "type": "object", 107 + "description": "Facet feature for italic text", 108 + "required": [], 109 + "properties": {} 110 + } 111 + } 112 + }
+27
lib/lexicons/pub/leaflet/theme/backgroundImage.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "pub.leaflet.theme.backgroundImage", 4 + "defs": { 5 + "main": { 6 + "type": "object", 7 + "required": [ 8 + "image" 9 + ], 10 + "properties": { 11 + "image": { 12 + "type": "blob", 13 + "accept": [ 14 + "image/*" 15 + ], 16 + "maxSize": 1000000 17 + }, 18 + "width": { 19 + "type": "integer" 20 + }, 21 + "repeat": { 22 + "type": "boolean" 23 + } 24 + } 25 + } 26 + } 27 + }
+62
lib/lexicons/pub/leaflet/theme/color.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "pub.leaflet.theme.color", 4 + "defs": { 5 + "rgba": { 6 + "type": "object", 7 + "required": [ 8 + "r", 9 + "g", 10 + "b", 11 + "a" 12 + ], 13 + "properties": { 14 + "r": { 15 + "type": "integer", 16 + "maximum": 255, 17 + "minimum": 0 18 + }, 19 + "g": { 20 + "type": "integer", 21 + "maximum": 255, 22 + "minimum": 0 23 + }, 24 + "b": { 25 + "type": "integer", 26 + "maximum": 255, 27 + "minimum": 0 28 + }, 29 + "a": { 30 + "type": "integer", 31 + "maximum": 100, 32 + "minimum": 0 33 + } 34 + } 35 + }, 36 + "rgb": { 37 + "type": "object", 38 + "required": [ 39 + "r", 40 + "g", 41 + "b" 42 + ], 43 + "properties": { 44 + "r": { 45 + "type": "integer", 46 + "maximum": 255, 47 + "minimum": 0 48 + }, 49 + "g": { 50 + "type": "integer", 51 + "maximum": 255, 52 + "minimum": 0 53 + }, 54 + "b": { 55 + "type": "integer", 56 + "maximum": 255, 57 + "minimum": 0 58 + } 59 + } 60 + } 61 + } 62 + }
+28
lib/providers/AtProtoProvider.tsx
··· 1 + /* eslint-disable react-refresh/only-export-components */ 2 + import React, { createContext, useContext, useMemo } from 'react'; 3 + import { ServiceResolver, normalizeBaseUrl } from '../utils/atproto-client'; 4 + 5 + export interface AtProtoProviderProps { 6 + children: React.ReactNode; 7 + plcDirectory?: string; 8 + } 9 + 10 + interface AtProtoContextValue { 11 + resolver: ServiceResolver; 12 + plcDirectory: string; 13 + } 14 + 15 + const AtProtoContext = createContext<AtProtoContextValue | undefined>(undefined); 16 + 17 + export function AtProtoProvider({ children, plcDirectory }: AtProtoProviderProps) { 18 + const normalizedPlc = useMemo(() => normalizeBaseUrl(plcDirectory && plcDirectory.trim() ? plcDirectory : 'https://plc.directory'), [plcDirectory]); 19 + const resolver = useMemo(() => new ServiceResolver({ plcDirectory: normalizedPlc }), [normalizedPlc]); 20 + const value = useMemo<AtProtoContextValue>(() => ({ resolver, plcDirectory: normalizedPlc }), [resolver, normalizedPlc]); 21 + return <AtProtoContext.Provider value={value}>{children}</AtProtoContext.Provider>; 22 + } 23 + 24 + export function useAtProto() { 25 + const ctx = useContext(AtProtoContext); 26 + if (!ctx) throw new Error('useAtProto must be used within AtProtoProvider'); 27 + return ctx; 28 + }
+472
lib/renderers/BlueskyPostRenderer.tsx
··· 1 + import React from 'react'; 2 + import type { FeedPostRecord } from '../types/bluesky'; 3 + import { useColorScheme, type ColorSchemePreference } from '../hooks/useColorScheme'; 4 + import { parseAtUri, toBlueskyPostUrl, formatDidForLabel, type ParsedAtUri } from '../utils/at-uri'; 5 + import { useDidHandle } from '../hooks/useDidHandle'; 6 + import { useBlob } from '../hooks/useBlob'; 7 + import { BlueskyIcon } from '../components/BlueskyIcon'; 8 + 9 + export interface BlueskyPostRendererProps { 10 + record: FeedPostRecord; 11 + loading: boolean; 12 + error?: Error; 13 + // Optionally pass in actor display info if pre-fetched 14 + authorHandle?: string; 15 + authorDisplayName?: string; 16 + avatarUrl?: string; 17 + colorScheme?: ColorSchemePreference; 18 + authorDid?: string; 19 + embed?: React.ReactNode; 20 + iconPlacement?: 'cardBottomRight' | 'timestamp' | 'linkInline'; 21 + showIcon?: boolean; 22 + atUri?: string; 23 + } 24 + 25 + export const BlueskyPostRenderer: React.FC<BlueskyPostRendererProps> = ({ record, loading, error, authorDisplayName, authorHandle, avatarUrl, colorScheme = 'system', authorDid, embed, iconPlacement = 'timestamp', showIcon = true, atUri }) => { 26 + const scheme = useColorScheme(colorScheme); 27 + const replyParentUri = record.reply?.parent?.uri; 28 + const replyTarget = replyParentUri ? parseAtUri(replyParentUri) : undefined; 29 + const { handle: parentHandle, loading: parentHandleLoading } = useDidHandle(replyTarget?.did); 30 + 31 + if (error) return <div style={{ padding: 8, color: 'crimson' }}>Failed to load post.</div>; 32 + if (loading && !record) return <div style={{ padding: 8 }}>Loading…</div>; 33 + 34 + const palette = scheme === 'dark' ? themeStyles.dark : themeStyles.light; 35 + 36 + const text = record.text; 37 + const createdDate = new Date(record.createdAt); 38 + const created = createdDate.toLocaleString(undefined, { 39 + dateStyle: 'medium', 40 + timeStyle: 'short' 41 + }); 42 + const primaryName = authorDisplayName || authorHandle || '…'; 43 + const replyHref = replyTarget ? toBlueskyPostUrl(replyTarget) : undefined; 44 + const replyLabel = replyTarget ? formatReplyLabel(replyTarget, parentHandle, parentHandleLoading) : undefined; 45 + 46 + const makeIcon = () => (showIcon ? <BlueskyIcon size={16} /> : null); 47 + const resolvedEmbed = embed ?? createAutoEmbed(record, authorDid, scheme); 48 + const parsedSelf = atUri ? parseAtUri(atUri) : undefined; 49 + const postUrl = parsedSelf ? toBlueskyPostUrl(parsedSelf) : undefined; 50 + const cardPadding = typeof baseStyles.card.padding === 'number' ? baseStyles.card.padding : 12; 51 + const cardStyle: React.CSSProperties = { 52 + ...baseStyles.card, 53 + ...palette.card, 54 + ...(iconPlacement === 'cardBottomRight' && showIcon ? { paddingBottom: cardPadding + 16 } : {}) 55 + }; 56 + 57 + return ( 58 + <article style={cardStyle} aria-busy={loading}> 59 + <header style={baseStyles.header}> 60 + {avatarUrl ? ( 61 + <img src={avatarUrl} alt="avatar" style={baseStyles.avatarImg} /> 62 + ) : ( 63 + <div style={{ ...baseStyles.avatarPlaceholder, ...palette.avatarPlaceholder }} aria-hidden /> 64 + )} 65 + <div style={{ display: 'flex', flexDirection: 'column' }}> 66 + <strong style={{ fontSize: 14 }}>{primaryName}</strong> 67 + {authorDisplayName && authorHandle && <span style={{ ...baseStyles.handle, ...palette.handle }}>@{authorHandle}</span>} 68 + </div> 69 + {iconPlacement === 'timestamp' && showIcon && ( 70 + <div style={baseStyles.headerIcon}>{makeIcon()}</div> 71 + )} 72 + </header> 73 + {replyHref && replyLabel && ( 74 + <div style={{ ...baseStyles.replyLine, ...palette.replyLine }}> 75 + Replying to{' '} 76 + <a href={replyHref} target="_blank" rel="noopener noreferrer" style={{ ...baseStyles.replyLink, ...palette.replyLink }}> 77 + {replyLabel} 78 + </a> 79 + </div> 80 + )} 81 + <div style={baseStyles.body}> 82 + <p style={{ ...baseStyles.text, ...palette.text }}>{text}</p> 83 + {record.facets && record.facets.length > 0 && ( 84 + <div style={baseStyles.facets}> 85 + {record.facets.map((_, idx) => ( 86 + <span key={idx} style={{ ...baseStyles.facetTag, ...palette.facetTag }}>facet</span> 87 + ))} 88 + </div> 89 + )} 90 + <div style={baseStyles.timestampRow}> 91 + <time style={{ ...baseStyles.time, ...palette.time }} dateTime={record.createdAt}>{created}</time> 92 + {postUrl && ( 93 + <span style={baseStyles.linkWithIcon}> 94 + <a href={postUrl} target="_blank" rel="noopener noreferrer" style={{ ...baseStyles.postLink, ...palette.postLink }}> 95 + View on Bluesky 96 + </a> 97 + {iconPlacement === 'linkInline' && showIcon && ( 98 + <span style={baseStyles.inlineIcon} aria-hidden> 99 + {makeIcon()} 100 + </span> 101 + )} 102 + </span> 103 + )} 104 + </div> 105 + {resolvedEmbed && ( 106 + <div style={{ ...baseStyles.embedContainer, ...palette.embedContainer }}> 107 + {resolvedEmbed} 108 + </div> 109 + )} 110 + </div> 111 + {iconPlacement === 'cardBottomRight' && showIcon && ( 112 + <div style={baseStyles.iconCorner} aria-hidden> 113 + {makeIcon()} 114 + </div> 115 + )} 116 + </article> 117 + ); 118 + }; 119 + 120 + const baseStyles: Record<string, React.CSSProperties> = { 121 + card: { 122 + borderRadius: 12, 123 + padding: 12, 124 + fontFamily: 'system-ui, sans-serif', 125 + display: 'flex', 126 + flexDirection: 'column', 127 + gap: 8, 128 + maxWidth: 600, 129 + transition: 'background-color 180ms ease, border-color 180ms ease, color 180ms ease', 130 + position: 'relative' 131 + }, 132 + header: { 133 + display: 'flex', 134 + alignItems: 'center', 135 + gap: 8 136 + }, 137 + headerIcon: { 138 + marginLeft: 'auto', 139 + display: 'flex', 140 + alignItems: 'center' 141 + }, 142 + avatarPlaceholder: { 143 + width: 40, 144 + height: 40, 145 + borderRadius: '50%' 146 + }, 147 + avatarImg: { 148 + width: 40, 149 + height: 40, 150 + borderRadius: '50%', 151 + objectFit: 'cover' 152 + }, 153 + handle: { 154 + fontSize: 12 155 + }, 156 + time: { 157 + fontSize: 11 158 + }, 159 + timestampIcon: { 160 + display: 'flex', 161 + alignItems: 'center', 162 + justifyContent: 'center' 163 + }, 164 + body: { 165 + fontSize: 14, 166 + lineHeight: 1.4 167 + }, 168 + text: { 169 + margin: 0, 170 + whiteSpace: 'pre-wrap' 171 + }, 172 + facets: { 173 + marginTop: 8, 174 + display: 'flex', 175 + gap: 4 176 + }, 177 + embedContainer: { 178 + marginTop: 12, 179 + padding: 8, 180 + borderRadius: 12, 181 + display: 'flex', 182 + flexDirection: 'column', 183 + gap: 8 184 + }, 185 + timestampRow: { 186 + display: 'flex', 187 + justifyContent: 'flex-end', 188 + alignItems: 'center', 189 + gap: 12, 190 + marginTop: 12, 191 + flexWrap: 'wrap' 192 + }, 193 + linkWithIcon: { 194 + display: 'inline-flex', 195 + alignItems: 'center', 196 + gap: 6 197 + }, 198 + postLink: { 199 + fontSize: 11, 200 + textDecoration: 'none', 201 + fontWeight: 600 202 + }, 203 + inlineIcon: { 204 + display: 'inline-flex', 205 + alignItems: 'center' 206 + }, 207 + facetTag: { 208 + padding: '2px 6px', 209 + borderRadius: 4, 210 + fontSize: 11 211 + }, 212 + replyLine: { 213 + fontSize: 12 214 + }, 215 + replyLink: { 216 + textDecoration: 'none', 217 + fontWeight: 500 218 + }, 219 + iconCorner: { 220 + position: 'absolute', 221 + right: 12, 222 + bottom: 12, 223 + display: 'flex', 224 + alignItems: 'center', 225 + justifyContent: 'flex-end' 226 + } 227 + }; 228 + 229 + const themeStyles = { 230 + light: { 231 + card: { 232 + border: '1px solid #e2e8f0', 233 + background: '#ffffff', 234 + color: '#0f172a' 235 + }, 236 + avatarPlaceholder: { 237 + background: '#cbd5e1' 238 + }, 239 + handle: { 240 + color: '#64748b' 241 + }, 242 + time: { 243 + color: '#94a3b8' 244 + }, 245 + text: { 246 + color: '#0f172a' 247 + }, 248 + facetTag: { 249 + background: '#f1f5f9', 250 + color: '#475569' 251 + }, 252 + replyLine: { 253 + color: '#475569' 254 + }, 255 + replyLink: { 256 + color: '#2563eb' 257 + }, 258 + embedContainer: { 259 + border: '1px solid #e2e8f0', 260 + borderRadius: 12, 261 + background: '#f8fafc' 262 + }, 263 + postLink: { 264 + color: '#2563eb' 265 + } 266 + }, 267 + dark: { 268 + card: { 269 + border: '1px solid #1e293b', 270 + background: '#0f172a', 271 + color: '#e2e8f0' 272 + }, 273 + avatarPlaceholder: { 274 + background: '#1e293b' 275 + }, 276 + handle: { 277 + color: '#cbd5f5' 278 + }, 279 + time: { 280 + color: '#94a3ff' 281 + }, 282 + text: { 283 + color: '#e2e8f0' 284 + }, 285 + facetTag: { 286 + background: '#1e293b', 287 + color: '#e0f2fe' 288 + }, 289 + replyLine: { 290 + color: '#cbd5f5' 291 + }, 292 + replyLink: { 293 + color: '#38bdf8' 294 + }, 295 + embedContainer: { 296 + border: '1px solid #1e293b', 297 + borderRadius: 12, 298 + background: '#0b1120' 299 + }, 300 + postLink: { 301 + color: '#38bdf8' 302 + } 303 + } 304 + } satisfies Record<'light' | 'dark', Record<string, React.CSSProperties>>; 305 + 306 + function formatReplyLabel(target: ParsedAtUri, resolvedHandle?: string, loading?: boolean): string { 307 + if (resolvedHandle) return `@${resolvedHandle}`; 308 + if (loading) return '…'; 309 + return `@${formatDidForLabel(target.did)}`; 310 + } 311 + 312 + function createAutoEmbed(record: FeedPostRecord, authorDid: string | undefined, scheme: 'light' | 'dark'): React.ReactNode { 313 + const embed = record.embed as { $type?: string } | undefined; 314 + if (!embed) return null; 315 + if (embed.$type === 'app.bsky.embed.images') { 316 + return <ImagesEmbed embed={embed as ImagesEmbedType} did={authorDid} scheme={scheme} />; 317 + } 318 + if (embed.$type === 'app.bsky.embed.recordWithMedia') { 319 + const media = (embed as RecordWithMediaEmbed).media; 320 + if (media?.$type === 'app.bsky.embed.images') { 321 + return <ImagesEmbed embed={media as ImagesEmbedType} did={authorDid} scheme={scheme} />; 322 + } 323 + } 324 + return null; 325 + } 326 + 327 + type ImagesEmbedType = { 328 + $type: 'app.bsky.embed.images'; 329 + images: Array<{ 330 + alt?: string; 331 + mime?: string; 332 + size?: number; 333 + image?: { 334 + $type?: string; 335 + ref?: { $link?: string }; 336 + cid?: string; 337 + }; 338 + aspectRatio?: { 339 + width: number; 340 + height: number; 341 + }; 342 + }>; 343 + }; 344 + 345 + type RecordWithMediaEmbed = { 346 + $type: 'app.bsky.embed.recordWithMedia'; 347 + record?: unknown; 348 + media?: { $type?: string }; 349 + }; 350 + 351 + interface ImagesEmbedProps { 352 + embed: ImagesEmbedType; 353 + did?: string; 354 + scheme: 'light' | 'dark'; 355 + } 356 + 357 + const ImagesEmbed: React.FC<ImagesEmbedProps> = ({ embed, did, scheme }) => { 358 + if (!embed.images || embed.images.length === 0) return null; 359 + const palette = scheme === 'dark' ? imagesPalette.dark : imagesPalette.light; 360 + const columns = embed.images.length > 1 ? 'repeat(auto-fit, minmax(160px, 1fr))' : '1fr'; 361 + return ( 362 + <div style={{ ...imagesBase.container, ...palette.container, gridTemplateColumns: columns }}> 363 + {embed.images.map((image, idx) => ( 364 + <PostImage key={idx} image={image} did={did} scheme={scheme} /> 365 + ))} 366 + </div> 367 + ); 368 + }; 369 + 370 + interface PostImageProps { 371 + image: ImagesEmbedType['images'][number]; 372 + did?: string; 373 + scheme: 'light' | 'dark'; 374 + } 375 + 376 + const PostImage: React.FC<PostImageProps> = ({ image, did, scheme }) => { 377 + const cid = image.image?.ref?.$link ?? image.image?.cid; 378 + const { url, loading, error } = useBlob(did, cid); 379 + const alt = image.alt?.trim() || 'Bluesky attachment'; 380 + const palette = scheme === 'dark' ? imagesPalette.dark : imagesPalette.light; 381 + const aspect = image.aspectRatio && image.aspectRatio.height > 0 382 + ? `${image.aspectRatio.width} / ${image.aspectRatio.height}` 383 + : undefined; 384 + 385 + return ( 386 + <figure style={{ ...imagesBase.item, ...palette.item }}> 387 + <div style={{ ...imagesBase.media, ...palette.media, aspectRatio: aspect }}> 388 + {url ? ( 389 + <img src={url} alt={alt} style={imagesBase.img} /> 390 + ) : ( 391 + <div style={{ ...imagesBase.placeholder, ...palette.placeholder }}> 392 + {loading ? 'Loading image…' : error ? 'Image failed to load' : 'Image unavailable'} 393 + </div> 394 + )} 395 + </div> 396 + {image.alt && image.alt.trim().length > 0 && ( 397 + <figcaption style={{ ...imagesBase.caption, ...palette.caption }}>{image.alt}</figcaption> 398 + )} 399 + </figure> 400 + ); 401 + }; 402 + 403 + const imagesBase = { 404 + container: { 405 + display: 'grid', 406 + gap: 8, 407 + width: '100%' 408 + } satisfies React.CSSProperties, 409 + item: { 410 + margin: 0, 411 + display: 'flex', 412 + flexDirection: 'column', 413 + gap: 4 414 + } satisfies React.CSSProperties, 415 + media: { 416 + position: 'relative', 417 + width: '100%', 418 + borderRadius: 12, 419 + overflow: 'hidden' 420 + } satisfies React.CSSProperties, 421 + img: { 422 + width: '100%', 423 + height: '100%', 424 + objectFit: 'cover' 425 + } satisfies React.CSSProperties, 426 + placeholder: { 427 + display: 'flex', 428 + alignItems: 'center', 429 + justifyContent: 'center', 430 + width: '100%', 431 + height: '100%' 432 + } satisfies React.CSSProperties, 433 + caption: { 434 + fontSize: 12, 435 + lineHeight: 1.3 436 + } satisfies React.CSSProperties 437 + }; 438 + 439 + const imagesPalette = { 440 + light: { 441 + container: { 442 + padding: 0 443 + } satisfies React.CSSProperties, 444 + item: {}, 445 + media: { 446 + background: '#e2e8f0' 447 + } satisfies React.CSSProperties, 448 + placeholder: { 449 + color: '#475569' 450 + } satisfies React.CSSProperties, 451 + caption: { 452 + color: '#475569' 453 + } satisfies React.CSSProperties 454 + }, 455 + dark: { 456 + container: { 457 + padding: 0 458 + } satisfies React.CSSProperties, 459 + item: {}, 460 + media: { 461 + background: '#1e293b' 462 + } satisfies React.CSSProperties, 463 + placeholder: { 464 + color: '#cbd5f5' 465 + } satisfies React.CSSProperties, 466 + caption: { 467 + color: '#94a3b8' 468 + } satisfies React.CSSProperties 469 + } 470 + } as const; 471 + 472 + export default BlueskyPostRenderer;
+190
lib/renderers/BlueskyProfileRenderer.tsx
··· 1 + import React from 'react'; 2 + import type { ProfileRecord } from '../types/bluesky'; 3 + import { useColorScheme, type ColorSchemePreference } from '../hooks/useColorScheme'; 4 + import { BlueskyIcon } from '../components/BlueskyIcon'; 5 + 6 + export interface BlueskyProfileRendererProps { 7 + record: ProfileRecord; 8 + loading: boolean; 9 + error?: Error; 10 + did: string; 11 + handle?: string; 12 + avatarUrl?: string; 13 + colorScheme?: ColorSchemePreference; 14 + } 15 + 16 + export const BlueskyProfileRenderer: React.FC<BlueskyProfileRendererProps> = ({ record, loading, error, did, handle, avatarUrl, colorScheme = 'system' }) => { 17 + const scheme = useColorScheme(colorScheme); 18 + 19 + if (error) return <div style={{ padding: 8, color: 'crimson' }}>Failed to load profile.</div>; 20 + if (loading && !record) return <div style={{ padding: 8 }}>Loading…</div>; 21 + 22 + const palette = scheme === 'dark' ? theme.dark : theme.light; 23 + const profileUrl = `https://bsky.app/profile/${encodeURIComponent(did)}`; 24 + const rawWebsite = record.website?.trim(); 25 + const websiteHref = rawWebsite ? (rawWebsite.match(/^https?:\/\//i) ? rawWebsite : `https://${rawWebsite}`) : undefined; 26 + const websiteLabel = rawWebsite ? rawWebsite.replace(/^https?:\/\//i, '') : undefined; 27 + 28 + return ( 29 + <div style={{ ...base.card, ...palette.card }}> 30 + <div style={base.header}> 31 + {avatarUrl ? <img src={avatarUrl} alt="avatar" style={base.avatarImg} /> : <div style={{ ...base.avatar, ...palette.avatar }} aria-label="avatar" />} 32 + <div style={{ flex: 1 }}> 33 + <div style={{ ...base.display, ...palette.display }}>{record.displayName ?? handle ?? did}</div> 34 + <div style={{ ...base.handleLine, ...palette.handleLine }}>@{handle ?? did}</div> 35 + {record.pronouns && <div style={{ ...base.pronouns, ...palette.pronouns }}>{record.pronouns}</div>} 36 + </div> 37 + </div> 38 + {record.description && <p style={{ ...base.desc, ...palette.desc }}>{record.description}</p>} 39 + {record.createdAt && <div style={{ ...base.meta, ...palette.meta }}>Joined {new Date(record.createdAt).toLocaleDateString()}</div>} 40 + <div style={base.links}> 41 + {websiteHref && websiteLabel && ( 42 + <a href={websiteHref} target="_blank" rel="noopener noreferrer" style={{ ...base.link, ...palette.link }}> 43 + {websiteLabel} 44 + </a> 45 + )} 46 + <a href={profileUrl} target="_blank" rel="noopener noreferrer" style={{ ...base.link, ...palette.link }}> 47 + View on Bluesky 48 + </a> 49 + </div> 50 + <div style={base.iconCorner} aria-hidden> 51 + <BlueskyIcon size={18} /> 52 + </div> 53 + </div> 54 + ); 55 + }; 56 + 57 + const base: Record<string, React.CSSProperties> = { 58 + card: { 59 + borderRadius: 12, 60 + padding: 16, 61 + fontFamily: 'system-ui, sans-serif', 62 + maxWidth: 480, 63 + transition: 'background-color 180ms ease, border-color 180ms ease, color 180ms ease', 64 + position: 'relative' 65 + }, 66 + header: { 67 + display: 'flex', 68 + gap: 12, 69 + marginBottom: 8 70 + }, 71 + avatar: { 72 + width: 64, 73 + height: 64, 74 + borderRadius: '50%' 75 + }, 76 + avatarImg: { 77 + width: 64, 78 + height: 64, 79 + borderRadius: '50%', 80 + objectFit: 'cover' 81 + }, 82 + display: { 83 + fontSize: 20, 84 + fontWeight: 600 85 + }, 86 + handleLine: { 87 + fontSize: 13 88 + }, 89 + desc: { 90 + whiteSpace: 'pre-wrap', 91 + fontSize: 14, 92 + lineHeight: 1.4 93 + }, 94 + meta: { 95 + marginTop: 12, 96 + fontSize: 12 97 + }, 98 + pronouns: { 99 + display: 'inline-flex', 100 + alignItems: 'center', 101 + gap: 4, 102 + fontSize: 12, 103 + fontWeight: 500, 104 + borderRadius: 999, 105 + padding: '2px 8px', 106 + marginTop: 6 107 + }, 108 + links: { 109 + display: 'flex', 110 + flexDirection: 'column', 111 + gap: 8, 112 + marginTop: 12 113 + }, 114 + link: { 115 + display: 'inline-flex', 116 + alignItems: 'center', 117 + gap: 4, 118 + fontSize: 12, 119 + fontWeight: 600, 120 + textDecoration: 'none' 121 + }, 122 + iconCorner: { 123 + position: 'absolute', 124 + right: 12, 125 + bottom: 12 126 + } 127 + }; 128 + 129 + const theme = { 130 + light: { 131 + card: { 132 + border: '1px solid #e2e8f0', 133 + background: '#ffffff', 134 + color: '#0f172a' 135 + }, 136 + avatar: { 137 + background: '#cbd5e1' 138 + }, 139 + display: { 140 + color: '#0f172a' 141 + }, 142 + handleLine: { 143 + color: '#64748b' 144 + }, 145 + desc: { 146 + color: '#0f172a' 147 + }, 148 + meta: { 149 + color: '#94a3b8' 150 + }, 151 + pronouns: { 152 + background: '#e2e8f0', 153 + color: '#1e293b' 154 + }, 155 + link: { 156 + color: '#2563eb' 157 + } 158 + }, 159 + dark: { 160 + card: { 161 + border: '1px solid #1e293b', 162 + background: '#0b1120', 163 + color: '#e2e8f0' 164 + }, 165 + avatar: { 166 + background: '#1e293b' 167 + }, 168 + display: { 169 + color: '#e2e8f0' 170 + }, 171 + handleLine: { 172 + color: '#cbd5f5' 173 + }, 174 + desc: { 175 + color: '#e2e8f0' 176 + }, 177 + meta: { 178 + color: '#a5b4fc' 179 + }, 180 + pronouns: { 181 + background: '#1e293b', 182 + color: '#e2e8f0' 183 + }, 184 + link: { 185 + color: '#38bdf8' 186 + } 187 + } 188 + } satisfies Record<'light' | 'dark', Record<string, React.CSSProperties>>; 189 + 190 + export default BlueskyProfileRenderer;
+944
lib/renderers/LeafletDocumentRenderer.tsx
··· 1 + import React, { useMemo, useRef } from 'react'; 2 + import { useColorScheme, type ColorSchemePreference } from '../hooks/useColorScheme'; 3 + import { useDidHandle } from '../hooks/useDidHandle'; 4 + import { useBlob } from '../hooks/useBlob'; 5 + import { parseAtUri, formatDidForLabel, toBlueskyPostUrl, leafletRkeyUrl, normalizeLeafletBasePath } from '../utils/at-uri'; 6 + import { BlueskyPost } from '../components/BlueskyPost'; 7 + import type { 8 + LeafletDocumentRecord, 9 + LeafletLinearDocumentPage, 10 + LeafletLinearDocumentBlock, 11 + LeafletBlock, 12 + LeafletTextBlock, 13 + LeafletHeaderBlock, 14 + LeafletBlockquoteBlock, 15 + LeafletImageBlock, 16 + LeafletUnorderedListBlock, 17 + LeafletListItem, 18 + LeafletWebsiteBlock, 19 + LeafletIFrameBlock, 20 + LeafletMathBlock, 21 + LeafletCodeBlock, 22 + LeafletBskyPostBlock, 23 + LeafletAlignmentValue, 24 + LeafletRichTextFacet, 25 + LeafletRichTextFeature, 26 + LeafletPublicationRecord 27 + } from '../types/leaflet'; 28 + 29 + export interface LeafletDocumentRendererProps { 30 + record: LeafletDocumentRecord; 31 + loading: boolean; 32 + error?: Error; 33 + colorScheme?: ColorSchemePreference; 34 + did: string; 35 + rkey: string; 36 + canonicalUrl?: string; 37 + publicationBaseUrl?: string; 38 + publicationRecord?: LeafletPublicationRecord; 39 + } 40 + 41 + export const LeafletDocumentRenderer: React.FC<LeafletDocumentRendererProps> = ({ record, loading, error, colorScheme = 'system', did, rkey, canonicalUrl, publicationBaseUrl, publicationRecord }) => { 42 + const scheme = useColorScheme(colorScheme); 43 + const palette = scheme === 'dark' ? theme.dark : theme.light; 44 + const authorDid = record.author?.startsWith('did:') ? record.author : undefined; 45 + const publicationUri = useMemo(() => parseAtUri(record.publication), [record.publication]); 46 + const postUrl = useMemo(() => { 47 + const postRefUri = record.postRef?.uri; 48 + if (!postRefUri) return undefined; 49 + const parsed = parseAtUri(postRefUri); 50 + return parsed ? toBlueskyPostUrl(parsed) : undefined; 51 + }, [record.postRef?.uri]); 52 + const { handle: publicationHandle } = useDidHandle(publicationUri?.did); 53 + const fallbackAuthorLabel = useAuthorLabel(record.author, authorDid); 54 + const resolvedPublicationLabel = publicationRecord?.name?.trim() 55 + ?? (publicationHandle ? `@${publicationHandle}` : publicationUri ? formatDidForLabel(publicationUri.did) : undefined); 56 + const authorLabel = resolvedPublicationLabel ?? fallbackAuthorLabel; 57 + const authorHref = publicationUri ? `https://bsky.app/profile/${publicationUri.did}` : undefined; 58 + 59 + if (error) return <div style={{ padding: 12, color: 'crimson' }}>Failed to load leaflet.</div>; 60 + if (loading && !record) return <div style={{ padding: 12 }}>Loading leaflet…</div>; 61 + if (!record) return <div style={{ padding: 12, color: 'crimson' }}>Leaflet record missing.</div>; 62 + 63 + const publishedAt = record.publishedAt ? new Date(record.publishedAt) : undefined; 64 + const publishedLabel = publishedAt ? publishedAt.toLocaleString(undefined, { dateStyle: 'long', timeStyle: 'short' }) : undefined; 65 + const fallbackLeafletUrl = `https://bsky.app/leaflet/${encodeURIComponent(did)}/${encodeURIComponent(rkey)}`; 66 + const publicationRoot = publicationBaseUrl ?? (publicationRecord?.base_path ?? undefined); 67 + const resolvedPublicationRoot = publicationRoot ? normalizeLeafletBasePath(publicationRoot) : undefined; 68 + const publicationLeafletUrl = leafletRkeyUrl(publicationRoot, rkey); 69 + const viewUrl = canonicalUrl ?? publicationLeafletUrl ?? postUrl ?? (publicationUri ? `https://bsky.app/profile/${publicationUri.did}` : undefined) ?? fallbackLeafletUrl; 70 + 71 + const metaItems: React.ReactNode[] = []; 72 + if (authorLabel) { 73 + const authorNode = authorHref 74 + ? ( 75 + <a href={authorHref} target="_blank" rel="noopener noreferrer" style={palette.metaLink}> 76 + {authorLabel} 77 + </a> 78 + ) 79 + : authorLabel; 80 + metaItems.push(<span>By {authorNode}</span>); 81 + } 82 + if (publishedLabel) metaItems.push(<time dateTime={record.publishedAt}>{publishedLabel}</time>); 83 + if (resolvedPublicationRoot) { 84 + metaItems.push( 85 + <a href={resolvedPublicationRoot} target="_blank" rel="noopener noreferrer" style={palette.metaLink}> 86 + {resolvedPublicationRoot.replace(/^https?:\/\//, '')} 87 + </a> 88 + ); 89 + } 90 + if (viewUrl) { 91 + metaItems.push( 92 + <a href={viewUrl} target="_blank" rel="noopener noreferrer" style={palette.metaLink}> 93 + View source 94 + </a> 95 + ); 96 + } 97 + 98 + return ( 99 + <article style={{ ...base.container, ...palette.container }}> 100 + <header style={{ ...base.header, ...palette.header }}> 101 + <div style={base.headerContent}> 102 + <h1 style={{ ...base.title, ...palette.title }}>{record.title}</h1> 103 + {record.description && ( 104 + <p style={{ ...base.subtitle, ...palette.subtitle }}>{record.description}</p> 105 + )} 106 + </div> 107 + <div style={{ ...base.meta, ...palette.meta }}> 108 + {metaItems.map((item, idx) => ( 109 + <React.Fragment key={`meta-${idx}`}> 110 + {idx > 0 && <span style={palette.metaSeparator}>•</span>} 111 + {item} 112 + </React.Fragment> 113 + ))} 114 + </div> 115 + </header> 116 + <div style={base.body}> 117 + {record.pages?.map((page, pageIndex) => ( 118 + <LeafletPageRenderer 119 + key={`page-${pageIndex}`} 120 + page={page} 121 + documentDid={did} 122 + colorScheme={scheme} 123 + /> 124 + ))} 125 + </div> 126 + </article> 127 + ); 128 + }; 129 + 130 + const LeafletPageRenderer: React.FC<{ page: LeafletLinearDocumentPage; documentDid: string; colorScheme: 'light' | 'dark' }> = ({ page, documentDid, colorScheme }) => { 131 + if (!page.blocks?.length) return null; 132 + return ( 133 + <div style={base.page}> 134 + {page.blocks.map((blockWrapper, idx) => ( 135 + <LeafletBlockRenderer 136 + key={`block-${idx}`} 137 + wrapper={blockWrapper} 138 + documentDid={documentDid} 139 + colorScheme={colorScheme} 140 + isFirst={idx === 0} 141 + /> 142 + ))} 143 + </div> 144 + ); 145 + }; 146 + 147 + interface LeafletBlockRendererProps { 148 + wrapper: LeafletLinearDocumentBlock; 149 + documentDid: string; 150 + colorScheme: 'light' | 'dark'; 151 + isFirst?: boolean; 152 + } 153 + 154 + const LeafletBlockRenderer: React.FC<LeafletBlockRendererProps> = ({ wrapper, documentDid, colorScheme, isFirst }) => { 155 + const block = wrapper.block; 156 + if (!block || !('$type' in block) || !block.$type) { 157 + return null; 158 + } 159 + const alignment = alignmentValue(wrapper.alignment); 160 + 161 + switch (block.$type) { 162 + case 'pub.leaflet.blocks.header': 163 + return <LeafletHeaderBlockView block={block} alignment={alignment} colorScheme={colorScheme} isFirst={isFirst} />; 164 + case 'pub.leaflet.blocks.blockquote': 165 + return <LeafletBlockquoteBlockView block={block} alignment={alignment} colorScheme={colorScheme} isFirst={isFirst} />; 166 + case 'pub.leaflet.blocks.image': 167 + return <LeafletImageBlockView block={block} alignment={alignment} documentDid={documentDid} colorScheme={colorScheme} />; 168 + case 'pub.leaflet.blocks.unorderedList': 169 + return <LeafletListBlockView block={block} alignment={alignment} documentDid={documentDid} colorScheme={colorScheme} />; 170 + case 'pub.leaflet.blocks.website': 171 + return <LeafletWebsiteBlockView block={block} alignment={alignment} documentDid={documentDid} colorScheme={colorScheme} />; 172 + case 'pub.leaflet.blocks.iframe': 173 + return <LeafletIframeBlockView block={block} alignment={alignment} />; 174 + case 'pub.leaflet.blocks.math': 175 + return <LeafletMathBlockView block={block} alignment={alignment} colorScheme={colorScheme} />; 176 + case 'pub.leaflet.blocks.code': 177 + return <LeafletCodeBlockView block={block} alignment={alignment} colorScheme={colorScheme} />; 178 + case 'pub.leaflet.blocks.horizontalRule': 179 + return <LeafletHorizontalRuleBlockView alignment={alignment} colorScheme={colorScheme} />; 180 + case 'pub.leaflet.blocks.bskyPost': 181 + return <LeafletBskyPostBlockView block={block} colorScheme={colorScheme} />; 182 + case 'pub.leaflet.blocks.text': 183 + default: 184 + return <LeafletTextBlockView block={block as LeafletTextBlock} alignment={alignment} colorScheme={colorScheme} isFirst={isFirst} />; 185 + } 186 + }; 187 + 188 + const LeafletTextBlockView: React.FC<{ block: LeafletTextBlock; alignment?: React.CSSProperties['textAlign']; colorScheme: 'light' | 'dark'; isFirst?: boolean }> = ({ block, alignment, colorScheme, isFirst }) => { 189 + const segments = useMemo(() => createFacetedSegments(block.plaintext, block.facets), [block.plaintext, block.facets]); 190 + const textContent = block.plaintext ?? ''; 191 + if (!textContent.trim() && segments.length === 0) { 192 + return null; 193 + } 194 + const palette = colorScheme === 'dark' ? theme.dark : theme.light; 195 + const style: React.CSSProperties = { 196 + ...base.paragraph, 197 + ...palette.paragraph, 198 + ...(alignment ? { textAlign: alignment } : undefined), 199 + ...(isFirst ? { marginTop: 0 } : undefined) 200 + }; 201 + return ( 202 + <p style={style}> 203 + {segments.map((segment, idx) => ( 204 + <React.Fragment key={`text-${idx}`}> 205 + {renderSegment(segment, colorScheme)} 206 + </React.Fragment> 207 + ))} 208 + </p> 209 + ); 210 + }; 211 + 212 + const LeafletHeaderBlockView: React.FC<{ block: LeafletHeaderBlock; alignment?: React.CSSProperties['textAlign']; colorScheme: 'light' | 'dark'; isFirst?: boolean }> = ({ block, alignment, colorScheme, isFirst }) => { 213 + const palette = colorScheme === 'dark' ? theme.dark : theme.light; 214 + const level = block.level && block.level >= 1 && block.level <= 6 ? block.level : 2; 215 + const segments = useMemo(() => createFacetedSegments(block.plaintext, block.facets), [block.plaintext, block.facets]); 216 + const normalizedLevel = Math.min(Math.max(level, 1), 6) as 1 | 2 | 3 | 4 | 5 | 6; 217 + const headingTag = (['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] as const)[normalizedLevel - 1]; 218 + const headingStyles = palette.heading[normalizedLevel]; 219 + const style: React.CSSProperties = { 220 + ...base.heading, 221 + ...headingStyles, 222 + ...(alignment ? { textAlign: alignment } : undefined), 223 + ...(isFirst ? { marginTop: 0 } : undefined) 224 + }; 225 + 226 + return React.createElement( 227 + headingTag, 228 + { style }, 229 + segments.map((segment, idx) => ( 230 + <React.Fragment key={`header-${idx}`}> 231 + {renderSegment(segment, colorScheme)} 232 + </React.Fragment> 233 + )) 234 + ); 235 + }; 236 + 237 + const LeafletBlockquoteBlockView: React.FC<{ block: LeafletBlockquoteBlock; alignment?: React.CSSProperties['textAlign']; colorScheme: 'light' | 'dark'; isFirst?: boolean }> = ({ block, alignment, colorScheme, isFirst }) => { 238 + const segments = useMemo(() => createFacetedSegments(block.plaintext, block.facets), [block.plaintext, block.facets]); 239 + const textContent = block.plaintext ?? ''; 240 + if (!textContent.trim() && segments.length === 0) { 241 + return null; 242 + } 243 + const palette = colorScheme === 'dark' ? theme.dark : theme.light; 244 + return ( 245 + <blockquote style={{ ...base.blockquote, ...palette.blockquote, ...(alignment ? { textAlign: alignment } : undefined), ...(isFirst ? { marginTop: 0 } : undefined) }}> 246 + {segments.map((segment, idx) => ( 247 + <React.Fragment key={`quote-${idx}`}> 248 + {renderSegment(segment, colorScheme)} 249 + </React.Fragment> 250 + ))} 251 + </blockquote> 252 + ); 253 + }; 254 + 255 + const LeafletImageBlockView: React.FC<{ block: LeafletImageBlock; alignment?: React.CSSProperties['textAlign']; documentDid: string; colorScheme: 'light' | 'dark' }> = ({ block, alignment, documentDid, colorScheme }) => { 256 + const palette = colorScheme === 'dark' ? theme.dark : theme.light; 257 + const cid = block.image?.ref?.$link ?? block.image?.cid; 258 + const { url, loading, error } = useBlob(documentDid, cid); 259 + const aspectRatio = block.aspectRatio?.height && block.aspectRatio?.width 260 + ? `${block.aspectRatio.width} / ${block.aspectRatio.height}` 261 + : undefined; 262 + 263 + return ( 264 + <figure style={{ ...base.figure, ...palette.figure, ...(alignment ? { textAlign: alignment } : undefined) }}> 265 + <div style={{ ...base.imageWrapper, ...palette.imageWrapper, ...(aspectRatio ? { aspectRatio } : {}) }}> 266 + {url && !error ? ( 267 + <img src={url} alt={block.alt ?? ''} style={{ ...base.image, ...palette.image }} /> 268 + ) : ( 269 + <div style={{ ...base.imagePlaceholder, ...palette.imagePlaceholder }}> 270 + {loading ? 'Loading image…' : error ? 'Image unavailable' : 'No image'} 271 + </div> 272 + )} 273 + </div> 274 + {block.alt && block.alt.trim().length > 0 && ( 275 + <figcaption style={{ ...base.caption, ...palette.caption }}>{block.alt}</figcaption> 276 + )} 277 + </figure> 278 + ); 279 + }; 280 + 281 + const LeafletListBlockView: React.FC<{ block: LeafletUnorderedListBlock; alignment?: React.CSSProperties['textAlign']; documentDid: string; colorScheme: 'light' | 'dark' }> = ({ block, alignment, documentDid, colorScheme }) => { 282 + const palette = colorScheme === 'dark' ? theme.dark : theme.light; 283 + return ( 284 + <ul style={{ ...base.list, ...palette.list, ...(alignment ? { textAlign: alignment } : undefined) }}> 285 + {block.children?.map((child, idx) => ( 286 + <LeafletListItemRenderer 287 + key={`list-item-${idx}`} 288 + item={child} 289 + documentDid={documentDid} 290 + colorScheme={colorScheme} 291 + alignment={alignment} 292 + /> 293 + ))} 294 + </ul> 295 + ); 296 + }; 297 + 298 + const LeafletListItemRenderer: React.FC<{ item: LeafletListItem; documentDid: string; colorScheme: 'light' | 'dark'; alignment?: React.CSSProperties['textAlign'] }> = ({ item, documentDid, colorScheme, alignment }) => { 299 + return ( 300 + <li style={{ ...base.listItem, ...(alignment ? { textAlign: alignment } : undefined) }}> 301 + <div> 302 + <LeafletInlineBlock block={item.content} colorScheme={colorScheme} documentDid={documentDid} alignment={alignment} /> 303 + </div> 304 + {item.children && item.children.length > 0 && ( 305 + <ul style={{ ...base.nestedList, ...(alignment ? { textAlign: alignment } : undefined) }}> 306 + {item.children.map((child, idx) => ( 307 + <LeafletListItemRenderer key={`nested-${idx}`} item={child} documentDid={documentDid} colorScheme={colorScheme} alignment={alignment} /> 308 + ))} 309 + </ul> 310 + )} 311 + </li> 312 + ); 313 + }; 314 + 315 + const LeafletInlineBlock: React.FC<{ block: LeafletBlock; colorScheme: 'light' | 'dark'; documentDid: string; alignment?: React.CSSProperties['textAlign'] }> = ({ block, colorScheme, documentDid, alignment }) => { 316 + switch (block.$type) { 317 + case 'pub.leaflet.blocks.header': 318 + return <LeafletHeaderBlockView block={block as LeafletHeaderBlock} colorScheme={colorScheme} alignment={alignment} />; 319 + case 'pub.leaflet.blocks.blockquote': 320 + return <LeafletBlockquoteBlockView block={block as LeafletBlockquoteBlock} colorScheme={colorScheme} alignment={alignment} />; 321 + case 'pub.leaflet.blocks.image': 322 + return <LeafletImageBlockView block={block as LeafletImageBlock} documentDid={documentDid} colorScheme={colorScheme} alignment={alignment} />; 323 + default: 324 + return <LeafletTextBlockView block={block as LeafletTextBlock} colorScheme={colorScheme} alignment={alignment} />; 325 + } 326 + }; 327 + 328 + const LeafletWebsiteBlockView: React.FC<{ block: LeafletWebsiteBlock; alignment?: React.CSSProperties['textAlign']; documentDid: string; colorScheme: 'light' | 'dark' }> = ({ block, alignment, documentDid, colorScheme }) => { 329 + const palette = colorScheme === 'dark' ? theme.dark : theme.light; 330 + const previewCid = block.previewImage?.ref?.$link ?? block.previewImage?.cid; 331 + const { url, loading, error } = useBlob(documentDid, previewCid); 332 + 333 + return ( 334 + <a href={block.src} target="_blank" rel="noopener noreferrer" style={{ ...base.linkCard, ...palette.linkCard, ...(alignment ? { textAlign: alignment } : undefined) }}> 335 + {url && !error ? ( 336 + <img src={url} alt={block.title ?? 'Website preview'} style={{ ...base.linkPreview, ...palette.linkPreview }} /> 337 + ) : ( 338 + <div style={{ ...base.linkPreviewPlaceholder, ...palette.linkPreviewPlaceholder }}> 339 + {loading ? 'Loading preview…' : 'Open link'} 340 + </div> 341 + )} 342 + <div style={base.linkContent}> 343 + {block.title && <strong style={palette.linkTitle}>{block.title}</strong>} 344 + {block.description && <p style={palette.linkDescription}>{block.description}</p>} 345 + <span style={palette.linkUrl}>{block.src}</span> 346 + </div> 347 + </a> 348 + ); 349 + }; 350 + 351 + const LeafletIframeBlockView: React.FC<{ block: LeafletIFrameBlock; alignment?: React.CSSProperties['textAlign'] }> = ({ block, alignment }) => { 352 + return ( 353 + <div style={{ ...(alignment ? { textAlign: alignment } : undefined) }}> 354 + <iframe 355 + src={block.url} 356 + title={block.url} 357 + style={{ ...base.iframe, ...(block.height ? { height: Math.min(Math.max(block.height, 120), 800) } : {}) }} 358 + loading="lazy" 359 + allowFullScreen 360 + /> 361 + </div> 362 + ); 363 + }; 364 + 365 + const LeafletMathBlockView: React.FC<{ block: LeafletMathBlock; alignment?: React.CSSProperties['textAlign']; colorScheme: 'light' | 'dark' }> = ({ block, alignment, colorScheme }) => { 366 + const palette = colorScheme === 'dark' ? theme.dark : theme.light; 367 + return ( 368 + <pre style={{ ...base.math, ...palette.math, ...(alignment ? { textAlign: alignment } : undefined) }}>{block.tex}</pre> 369 + ); 370 + }; 371 + 372 + const LeafletCodeBlockView: React.FC<{ block: LeafletCodeBlock; alignment?: React.CSSProperties['textAlign']; colorScheme: 'light' | 'dark' }> = ({ block, alignment, colorScheme }) => { 373 + const palette = colorScheme === 'dark' ? theme.dark : theme.light; 374 + const codeRef = useRef<HTMLElement | null>(null); 375 + const langClass = block.language ? `language-${block.language.toLowerCase()}` : undefined; 376 + return ( 377 + <pre style={{ ...base.code, ...palette.code, ...(alignment ? { textAlign: alignment } : undefined) }}> 378 + <code ref={codeRef} className={langClass}>{block.plaintext}</code> 379 + </pre> 380 + ); 381 + }; 382 + 383 + const LeafletHorizontalRuleBlockView: React.FC<{ alignment?: React.CSSProperties['textAlign']; colorScheme: 'light' | 'dark' }> = ({ alignment, colorScheme }) => { 384 + const palette = colorScheme === 'dark' ? theme.dark : theme.light; 385 + return <hr style={{ ...base.hr, ...palette.hr, marginLeft: alignment ? 'auto' : undefined, marginRight: alignment ? 'auto' : undefined }} />; 386 + }; 387 + 388 + const LeafletBskyPostBlockView: React.FC<{ block: LeafletBskyPostBlock; colorScheme: 'light' | 'dark' }> = ({ block, colorScheme }) => { 389 + const parsed = parseAtUri(block.postRef?.uri); 390 + if (!parsed) { 391 + return <div style={base.embedFallback}>Referenced post unavailable.</div>; 392 + } 393 + return <BlueskyPost did={parsed.did} rkey={parsed.rkey} colorScheme={colorScheme} iconPlacement="linkInline" />; 394 + }; 395 + 396 + function alignmentValue(value?: LeafletAlignmentValue): React.CSSProperties['textAlign'] | undefined { 397 + if (!value) return undefined; 398 + let normalized = value.startsWith('#') ? value.slice(1) : value; 399 + if (normalized.includes('#')) { 400 + normalized = normalized.split('#').pop() ?? normalized; 401 + } 402 + if (normalized.startsWith('lex:')) { 403 + normalized = normalized.split(':').pop() ?? normalized; 404 + } 405 + switch (normalized) { 406 + case 'textAlignLeft': 407 + return 'left'; 408 + case 'textAlignCenter': 409 + return 'center'; 410 + case 'textAlignRight': 411 + return 'right'; 412 + case 'textAlignJustify': 413 + return 'justify'; 414 + default: 415 + return undefined; 416 + } 417 + } 418 + 419 + function useAuthorLabel(author: string | undefined, authorDid: string | undefined): string | undefined { 420 + const { handle } = useDidHandle(authorDid); 421 + if (!author) return undefined; 422 + if (handle) return `@${handle}`; 423 + if (authorDid) return formatDidForLabel(authorDid); 424 + return author; 425 + } 426 + 427 + interface Segment { 428 + text: string; 429 + features: LeafletRichTextFeature[]; 430 + } 431 + 432 + function createFacetedSegments(plaintext: string, facets?: LeafletRichTextFacet[]): Segment[] { 433 + if (!facets?.length) { 434 + return [{ text: plaintext, features: [] }]; 435 + } 436 + const prefix = buildBytePrefix(plaintext); 437 + const startEvents = new Map<number, LeafletRichTextFeature[]>(); 438 + const endEvents = new Map<number, LeafletRichTextFeature[]>(); 439 + const boundaries = new Set<number>([0, prefix.length - 1]); 440 + for (const facet of facets) { 441 + const { byteStart, byteEnd } = facet.index ?? {}; 442 + if (typeof byteStart !== 'number' || typeof byteEnd !== 'number' || byteStart >= byteEnd) continue; 443 + const start = byteOffsetToCharIndex(prefix, byteStart); 444 + const end = byteOffsetToCharIndex(prefix, byteEnd); 445 + if (start >= end) continue; 446 + boundaries.add(start); 447 + boundaries.add(end); 448 + if (facet.features?.length) { 449 + startEvents.set(start, [...(startEvents.get(start) ?? []), ...facet.features]); 450 + endEvents.set(end, [...(endEvents.get(end) ?? []), ...facet.features]); 451 + } 452 + } 453 + const sortedBounds = [...boundaries].sort((a, b) => a - b); 454 + const segments: Segment[] = []; 455 + let active: LeafletRichTextFeature[] = []; 456 + for (let i = 0; i < sortedBounds.length - 1; i++) { 457 + const boundary = sortedBounds[i]; 458 + const next = sortedBounds[i + 1]; 459 + const endFeatures = endEvents.get(boundary); 460 + if (endFeatures?.length) { 461 + active = active.filter((feature) => !endFeatures.includes(feature)); 462 + } 463 + const startFeatures = startEvents.get(boundary); 464 + if (startFeatures?.length) { 465 + active = [...active, ...startFeatures]; 466 + } 467 + if (boundary === next) continue; 468 + const text = sliceByCharRange(plaintext, boundary, next); 469 + segments.push({ text, features: active.slice() }); 470 + } 471 + return segments; 472 + } 473 + 474 + function buildBytePrefix(text: string): number[] { 475 + const encoder = new TextEncoder(); 476 + const prefix: number[] = [0]; 477 + let byteCount = 0; 478 + for (let i = 0; i < text.length;) { 479 + const codePoint = text.codePointAt(i)!; 480 + const char = String.fromCodePoint(codePoint); 481 + const encoded = encoder.encode(char); 482 + byteCount += encoded.length; 483 + prefix.push(byteCount); 484 + i += codePoint > 0xffff ? 2 : 1; 485 + } 486 + return prefix; 487 + } 488 + 489 + function byteOffsetToCharIndex(prefix: number[], byteOffset: number): number { 490 + for (let i = 0; i < prefix.length; i++) { 491 + if (prefix[i] === byteOffset) return i; 492 + if (prefix[i] > byteOffset) return Math.max(0, i - 1); 493 + } 494 + return prefix.length - 1; 495 + } 496 + 497 + function sliceByCharRange(text: string, start: number, end: number): string { 498 + if (start <= 0 && end >= text.length) return text; 499 + let result = ''; 500 + let charIndex = 0; 501 + for (let i = 0; i < text.length && charIndex < end;) { 502 + const codePoint = text.codePointAt(i)!; 503 + const char = String.fromCodePoint(codePoint); 504 + if (charIndex >= start && charIndex < end) result += char; 505 + i += codePoint > 0xffff ? 2 : 1; 506 + charIndex++; 507 + } 508 + return result; 509 + } 510 + 511 + function renderSegment(segment: Segment, colorScheme: 'light' | 'dark'): React.ReactNode { 512 + const parts = segment.text.split('\n'); 513 + return parts.flatMap((part, idx) => { 514 + const key = `${segment.text}-${idx}-${part.length}`; 515 + const wrapped = applyFeatures(part.length ? part : '\u00a0', segment.features, key, colorScheme); 516 + if (idx === parts.length - 1) return wrapped; 517 + return [wrapped, <br key={`${key}-br`} />]; 518 + }); 519 + } 520 + 521 + function applyFeatures(content: React.ReactNode, features: LeafletRichTextFeature[], key: string, colorScheme: 'light' | 'dark'): React.ReactNode { 522 + if (!features?.length) return <React.Fragment key={key}>{content}</React.Fragment>; 523 + return ( 524 + <React.Fragment key={key}> 525 + {features.reduce<React.ReactNode>((child, feature, idx) => wrapFeature(child, feature, `${key}-feature-${idx}`, colorScheme), content)} 526 + </React.Fragment> 527 + ); 528 + } 529 + 530 + function wrapFeature(child: React.ReactNode, feature: LeafletRichTextFeature, key: string, colorScheme: 'light' | 'dark'): React.ReactNode { 531 + switch (feature.$type) { 532 + case 'pub.leaflet.richtext.facet#link': 533 + return <a key={key} href={feature.uri} target="_blank" rel="noopener noreferrer" style={linkStyles[colorScheme]}>{child}</a>; 534 + case 'pub.leaflet.richtext.facet#code': 535 + return <code key={key} style={inlineCodeStyles[colorScheme]}>{child}</code>; 536 + case 'pub.leaflet.richtext.facet#highlight': 537 + return <mark key={key} style={highlightStyles[colorScheme]}>{child}</mark>; 538 + case 'pub.leaflet.richtext.facet#underline': 539 + return <span key={key} style={{ textDecoration: 'underline' }}>{child}</span>; 540 + case 'pub.leaflet.richtext.facet#strikethrough': 541 + return <span key={key} style={{ textDecoration: 'line-through' }}>{child}</span>; 542 + case 'pub.leaflet.richtext.facet#bold': 543 + return <strong key={key}>{child}</strong>; 544 + case 'pub.leaflet.richtext.facet#italic': 545 + return <em key={key}>{child}</em>; 546 + case 'pub.leaflet.richtext.facet#id': 547 + return <span key={key} id={feature.id}>{child}</span>; 548 + default: 549 + return <span key={key}>{child}</span>; 550 + } 551 + } 552 + 553 + const base: Record<string, React.CSSProperties> = { 554 + container: { 555 + display: 'flex', 556 + flexDirection: 'column', 557 + gap: 24, 558 + padding: '24px 28px', 559 + borderRadius: 20, 560 + border: '1px solid transparent', 561 + maxWidth: 720, 562 + width: '100%', 563 + fontFamily: 'system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif' 564 + }, 565 + header: { 566 + display: 'flex', 567 + flexDirection: 'column', 568 + gap: 16 569 + }, 570 + headerContent: { 571 + display: 'flex', 572 + flexDirection: 'column', 573 + gap: 8 574 + }, 575 + title: { 576 + fontSize: 32, 577 + margin: 0, 578 + lineHeight: 1.15 579 + }, 580 + subtitle: { 581 + margin: 0, 582 + fontSize: 16, 583 + lineHeight: 1.5 584 + }, 585 + meta: { 586 + display: 'flex', 587 + flexWrap: 'wrap', 588 + gap: 8, 589 + alignItems: 'center', 590 + fontSize: 14 591 + }, 592 + body: { 593 + display: 'flex', 594 + flexDirection: 'column', 595 + gap: 18 596 + }, 597 + page: { 598 + display: 'flex', 599 + flexDirection: 'column', 600 + gap: 18 601 + }, 602 + paragraph: { 603 + margin: '1em 0 0', 604 + lineHeight: 1.65, 605 + fontSize: 16 606 + }, 607 + heading: { 608 + margin: '0.5em 0 0', 609 + fontWeight: 700 610 + }, 611 + blockquote: { 612 + margin: '1em 0 0', 613 + padding: '0.6em 1em', 614 + borderLeft: '4px solid' 615 + }, 616 + figure: { 617 + margin: '1.2em 0 0', 618 + display: 'flex', 619 + flexDirection: 'column', 620 + gap: 12 621 + }, 622 + imageWrapper: { 623 + borderRadius: 16, 624 + overflow: 'hidden', 625 + width: '100%', 626 + position: 'relative', 627 + background: '#e2e8f0' 628 + }, 629 + image: { 630 + width: '100%', 631 + height: '100%', 632 + objectFit: 'cover', 633 + display: 'block' 634 + }, 635 + imagePlaceholder: { 636 + width: '100%', 637 + padding: '24px 16px', 638 + textAlign: 'center' 639 + }, 640 + caption: { 641 + fontSize: 13, 642 + lineHeight: 1.4 643 + }, 644 + list: { 645 + paddingLeft: 28, 646 + margin: '1em 0 0', 647 + listStyleType: 'disc', 648 + listStylePosition: 'outside' 649 + }, 650 + nestedList: { 651 + paddingLeft: 20, 652 + marginTop: 8, 653 + listStyleType: 'circle', 654 + listStylePosition: 'outside' 655 + }, 656 + listItem: { 657 + marginTop: 8, 658 + display: 'list-item' 659 + }, 660 + linkCard: { 661 + borderRadius: 16, 662 + border: '1px solid', 663 + display: 'flex', 664 + flexDirection: 'column', 665 + overflow: 'hidden', 666 + textDecoration: 'none' 667 + }, 668 + linkPreview: { 669 + width: '100%', 670 + height: 180, 671 + objectFit: 'cover' 672 + }, 673 + linkPreviewPlaceholder: { 674 + width: '100%', 675 + height: 180, 676 + display: 'flex', 677 + alignItems: 'center', 678 + justifyContent: 'center', 679 + fontSize: 14 680 + }, 681 + linkContent: { 682 + display: 'flex', 683 + flexDirection: 'column', 684 + gap: 6, 685 + padding: '16px 18px' 686 + }, 687 + iframe: { 688 + width: '100%', 689 + height: 360, 690 + border: '1px solid #cbd5f5', 691 + borderRadius: 16 692 + }, 693 + math: { 694 + margin: '1em 0 0', 695 + padding: '14px 16px', 696 + borderRadius: 12, 697 + fontFamily: 'Menlo, Consolas, "SFMono-Regular", ui-monospace', 698 + overflowX: 'auto' 699 + }, 700 + code: { 701 + margin: '1em 0 0', 702 + padding: '14px 16px', 703 + borderRadius: 12, 704 + overflowX: 'auto', 705 + fontSize: 14 706 + }, 707 + hr: { 708 + border: 0, 709 + borderTop: '1px solid', 710 + margin: '24px 0 0' 711 + }, 712 + embedFallback: { 713 + padding: '12px 16px', 714 + borderRadius: 12, 715 + border: '1px solid #e2e8f0', 716 + fontSize: 14 717 + } 718 + }; 719 + 720 + const theme = { 721 + light: { 722 + container: { 723 + background: '#ffffff', 724 + borderColor: '#e2e8f0', 725 + color: '#0f172a', 726 + boxShadow: '0 4px 18px rgba(15, 23, 42, 0.06)' 727 + }, 728 + header: {}, 729 + title: { 730 + color: '#0f172a' 731 + }, 732 + subtitle: { 733 + color: '#475569' 734 + }, 735 + meta: { 736 + color: '#64748b' 737 + }, 738 + metaLink: { 739 + color: '#2563eb', 740 + textDecoration: 'none' 741 + } satisfies React.CSSProperties, 742 + metaSeparator: { 743 + margin: '0 4px' 744 + } satisfies React.CSSProperties, 745 + paragraph: { 746 + color: '#1f2937' 747 + }, 748 + heading: { 749 + 1: { color: '#0f172a', fontSize: 30 }, 750 + 2: { color: '#0f172a', fontSize: 28 }, 751 + 3: { color: '#0f172a', fontSize: 24 }, 752 + 4: { color: '#0f172a', fontSize: 20 }, 753 + 5: { color: '#0f172a', fontSize: 18 }, 754 + 6: { color: '#0f172a', fontSize: 16 } 755 + } satisfies Record<number, React.CSSProperties>, 756 + blockquote: { 757 + background: '#f8fafc', 758 + borderColor: '#cbd5f5', 759 + color: '#1f2937' 760 + }, 761 + figure: {}, 762 + imageWrapper: { 763 + background: '#e2e8f0' 764 + }, 765 + image: {}, 766 + imagePlaceholder: { 767 + color: '#475569' 768 + }, 769 + caption: { 770 + color: '#475569' 771 + }, 772 + list: { 773 + color: '#1f2937' 774 + }, 775 + linkCard: { 776 + borderColor: '#e2e8f0', 777 + background: '#f8fafc', 778 + color: '#0f172a' 779 + }, 780 + linkPreview: {}, 781 + linkPreviewPlaceholder: { 782 + background: '#e2e8f0', 783 + color: '#475569' 784 + }, 785 + linkTitle: { 786 + fontSize: 16, 787 + color: '#0f172a' 788 + } satisfies React.CSSProperties, 789 + linkDescription: { 790 + margin: 0, 791 + fontSize: 14, 792 + color: '#475569', 793 + lineHeight: 1.5 794 + } satisfies React.CSSProperties, 795 + linkUrl: { 796 + fontSize: 13, 797 + color: '#2563eb', 798 + wordBreak: 'break-all' 799 + } satisfies React.CSSProperties, 800 + math: { 801 + background: '#f1f5f9', 802 + color: '#1f2937', 803 + border: '1px solid #e2e8f0' 804 + }, 805 + code: { 806 + background: '#0f172a', 807 + color: '#e2e8f0' 808 + }, 809 + hr: { 810 + borderColor: '#e2e8f0' 811 + } 812 + }, 813 + dark: { 814 + container: { 815 + background: 'rgba(15, 23, 42, 0.6)', 816 + borderColor: 'rgba(148, 163, 184, 0.3)', 817 + color: '#e2e8f0', 818 + backdropFilter: 'blur(8px)', 819 + boxShadow: '0 10px 40px rgba(2, 6, 23, 0.45)' 820 + }, 821 + header: {}, 822 + title: { 823 + color: '#f8fafc' 824 + }, 825 + subtitle: { 826 + color: '#cbd5f5' 827 + }, 828 + meta: { 829 + color: '#94a3b8' 830 + }, 831 + metaLink: { 832 + color: '#38bdf8', 833 + textDecoration: 'none' 834 + } satisfies React.CSSProperties, 835 + metaSeparator: { 836 + margin: '0 4px' 837 + } satisfies React.CSSProperties, 838 + paragraph: { 839 + color: '#e2e8f0' 840 + }, 841 + heading: { 842 + 1: { color: '#f8fafc', fontSize: 30 }, 843 + 2: { color: '#f8fafc', fontSize: 28 }, 844 + 3: { color: '#f8fafc', fontSize: 24 }, 845 + 4: { color: '#e2e8f0', fontSize: 20 }, 846 + 5: { color: '#e2e8f0', fontSize: 18 }, 847 + 6: { color: '#e2e8f0', fontSize: 16 } 848 + } satisfies Record<number, React.CSSProperties>, 849 + blockquote: { 850 + background: 'rgba(30, 41, 59, 0.6)', 851 + borderColor: '#38bdf8', 852 + color: '#e2e8f0' 853 + }, 854 + figure: {}, 855 + imageWrapper: { 856 + background: '#1e293b' 857 + }, 858 + image: {}, 859 + imagePlaceholder: { 860 + color: '#94a3b8' 861 + }, 862 + caption: { 863 + color: '#94a3b8' 864 + }, 865 + list: { 866 + color: '#f1f5f9' 867 + }, 868 + linkCard: { 869 + borderColor: 'rgba(148, 163, 184, 0.3)', 870 + background: 'rgba(15, 23, 42, 0.8)', 871 + color: '#e2e8f0' 872 + }, 873 + linkPreview: {}, 874 + linkPreviewPlaceholder: { 875 + background: '#1e293b', 876 + color: '#94a3b8' 877 + }, 878 + linkTitle: { 879 + fontSize: 16, 880 + color: '#e0f2fe' 881 + } satisfies React.CSSProperties, 882 + linkDescription: { 883 + margin: 0, 884 + fontSize: 14, 885 + color: '#cbd5f5', 886 + lineHeight: 1.5 887 + } satisfies React.CSSProperties, 888 + linkUrl: { 889 + fontSize: 13, 890 + color: '#38bdf8', 891 + wordBreak: 'break-all' 892 + } satisfies React.CSSProperties, 893 + math: { 894 + background: 'rgba(15, 23, 42, 0.8)', 895 + color: '#e2e8f0', 896 + border: '1px solid rgba(148, 163, 184, 0.35)' 897 + }, 898 + code: { 899 + background: '#020617', 900 + color: '#e2e8f0' 901 + }, 902 + hr: { 903 + borderColor: 'rgba(148, 163, 184, 0.3)' 904 + } 905 + } 906 + } as const; 907 + 908 + const linkStyles = { 909 + light: { 910 + color: '#2563eb', 911 + textDecoration: 'underline' 912 + } satisfies React.CSSProperties, 913 + dark: { 914 + color: '#38bdf8', 915 + textDecoration: 'underline' 916 + } satisfies React.CSSProperties 917 + } as const; 918 + 919 + const inlineCodeStyles = { 920 + light: { 921 + fontFamily: 'Menlo, Consolas, "SFMono-Regular", ui-monospace', 922 + background: '#f1f5f9', 923 + padding: '0 4px', 924 + borderRadius: 4 925 + } satisfies React.CSSProperties, 926 + dark: { 927 + fontFamily: 'Menlo, Consolas, "SFMono-Regular", ui-monospace', 928 + background: '#1e293b', 929 + padding: '0 4px', 930 + borderRadius: 4 931 + } satisfies React.CSSProperties 932 + } as const; 933 + 934 + const highlightStyles = { 935 + light: { 936 + background: '#fef08a' 937 + } satisfies React.CSSProperties, 938 + dark: { 939 + background: '#facc15', 940 + color: '#0f172a' 941 + } satisfies React.CSSProperties 942 + } as const; 943 + 944 + export default LeafletDocumentRenderer;
+166
lib/renderers/TangledStringRenderer.tsx
··· 1 + import React from 'react'; 2 + import type { ShTangledString } from '@atcute/tangled'; 3 + import { useColorScheme, type ColorSchemePreference } from '../hooks/useColorScheme'; 4 + 5 + export type TangledStringRecord = ShTangledString.Main; 6 + 7 + export interface TangledStringRendererProps { 8 + record: TangledStringRecord; 9 + error?: Error; 10 + loading: boolean; 11 + colorScheme?: ColorSchemePreference; 12 + did: string; 13 + rkey: string; 14 + canonicalUrl?: string; 15 + } 16 + 17 + export const TangledStringRenderer: React.FC<TangledStringRendererProps> = ({ record, error, loading, colorScheme = 'system', did, rkey, canonicalUrl }) => { 18 + const scheme = useColorScheme(colorScheme); 19 + 20 + if (error) return <div style={{ padding: 8, color: 'crimson' }}>Failed to load snippet.</div>; 21 + if (loading && !record) return <div style={{ padding: 8 }}>Loading…</div>; 22 + 23 + const palette = scheme === 'dark' ? theme.dark : theme.light; 24 + const viewUrl = canonicalUrl ?? `https://tangled.org/strings/${did}/${encodeURIComponent(rkey)}`; 25 + const timestamp = new Date(record.createdAt).toLocaleString(undefined, { dateStyle: 'medium', timeStyle: 'short' }); 26 + return ( 27 + <div style={{ ...base.container, ...palette.container }}> 28 + <div style={{ ...base.header, ...palette.header }}> 29 + <strong style={{ ...base.filename, ...palette.filename }}>{record.filename}</strong> 30 + <div style={{ ...base.headerRight, ...palette.headerRight }}> 31 + <time style={{ ...base.timestamp, ...palette.timestamp }} dateTime={record.createdAt}>{timestamp}</time> 32 + <a href={viewUrl} target="_blank" rel="noopener noreferrer" style={{ ...base.headerLink, ...palette.headerLink }}> 33 + View on Tangled 34 + </a> 35 + </div> 36 + </div> 37 + {record.description && ( 38 + <div style={{ ...base.description, ...palette.description }}>{record.description}</div> 39 + )} 40 + <pre style={{ ...base.codeBlock, ...palette.codeBlock }}> 41 + <code>{record.contents}</code> 42 + </pre> 43 + </div> 44 + ); 45 + }; 46 + 47 + const base: Record<string, React.CSSProperties> = { 48 + container: { 49 + fontFamily: 'system-ui, sans-serif', 50 + borderRadius: 6, 51 + overflow: 'hidden', 52 + transition: 'background-color 180ms ease, border-color 180ms ease, color 180ms ease, box-shadow 180ms ease', 53 + width: '100%' 54 + }, 55 + header: { 56 + padding: '10px 16px', 57 + display: 'flex', 58 + justifyContent: 'space-between', 59 + alignItems: 'center', 60 + gap: 12 61 + }, 62 + headerRight: { 63 + display: 'flex', 64 + alignItems: 'center', 65 + gap: 12, 66 + flexWrap: 'wrap', 67 + justifyContent: 'flex-end' 68 + }, 69 + filename: { 70 + fontFamily: 'SFMono-Regular, ui-monospace, Menlo, Monaco, "Courier New", monospace', 71 + fontSize: 13, 72 + wordBreak: 'break-all' 73 + }, 74 + timestamp: { 75 + fontSize: 12 76 + }, 77 + headerLink: { 78 + fontSize: 12, 79 + fontWeight: 600, 80 + textDecoration: 'none' 81 + }, 82 + description: { 83 + padding: '10px 16px', 84 + fontSize: 13, 85 + borderTop: '1px solid transparent' 86 + }, 87 + codeBlock: { 88 + margin: 0, 89 + padding: '16px', 90 + fontSize: 13, 91 + overflowX: 'auto', 92 + borderTop: '1px solid transparent', 93 + fontFamily: 'SFMono-Regular, ui-monospace, Menlo, Monaco, "Courier New", monospace' 94 + } 95 + }; 96 + 97 + const theme = { 98 + light: { 99 + container: { 100 + border: '1px solid #d0d7de', 101 + background: '#f6f8fa', 102 + color: '#1f2328', 103 + boxShadow: '0 1px 2px rgba(31,35,40,0.05)' 104 + }, 105 + header: { 106 + background: '#f6f8fa', 107 + borderBottom: '1px solid #d0d7de' 108 + }, 109 + headerRight: {}, 110 + filename: { 111 + color: '#1f2328' 112 + }, 113 + timestamp: { 114 + color: '#57606a' 115 + }, 116 + headerLink: { 117 + color: '#2563eb' 118 + }, 119 + description: { 120 + background: '#ffffff', 121 + borderBottom: '1px solid #d0d7de', 122 + borderTopColor: '#d0d7de', 123 + color: '#1f2328' 124 + }, 125 + codeBlock: { 126 + background: '#ffffff', 127 + color: '#1f2328', 128 + borderTopColor: '#d0d7de' 129 + } 130 + }, 131 + dark: { 132 + container: { 133 + border: '1px solid #30363d', 134 + background: '#0d1117', 135 + color: '#c9d1d9', 136 + boxShadow: '0 0 0 1px rgba(1,4,9,0.3) inset' 137 + }, 138 + header: { 139 + background: '#161b22', 140 + borderBottom: '1px solid #30363d' 141 + }, 142 + headerRight: {}, 143 + filename: { 144 + color: '#c9d1d9' 145 + }, 146 + timestamp: { 147 + color: '#8b949e' 148 + }, 149 + headerLink: { 150 + color: '#58a6ff' 151 + }, 152 + description: { 153 + background: '#161b22', 154 + borderBottom: '1px solid #30363d', 155 + borderTopColor: '#30363d', 156 + color: '#c9d1d9' 157 + }, 158 + codeBlock: { 159 + background: '#0d1117', 160 + color: '#c9d1d9', 161 + borderTopColor: '#30363d' 162 + } 163 + } 164 + } satisfies Record<'light' | 'dark', Record<string, React.CSSProperties>>; 165 + 166 + export default TangledStringRenderer;
+120
lib/styles/highlight.css
··· 1 + :root { 2 + --hljs-foreground: #1f2328; 3 + --hljs-background: transparent; 4 + --hljs-comment: #6e7781; 5 + --hljs-keyword: #cf222e; 6 + --hljs-attr: #0550ae; 7 + --hljs-string: #0a3069; 8 + --hljs-title: #24292f; 9 + --hljs-number: #953800; 10 + --hljs-addition: #116329; 11 + --hljs-deletion: #cf222e; 12 + } 13 + 14 + :root[data-color-scheme='light'], 15 + [data-color-scheme='light'] { 16 + --hljs-foreground: #1f2328; 17 + --hljs-background: rgba(15, 23, 42, 0.03); 18 + --hljs-comment: #6e7781; 19 + --hljs-keyword: #0f59d1; 20 + --hljs-attr: #1d4ed8; 21 + --hljs-string: #0f766e; 22 + --hljs-title: #1f2937; 23 + --hljs-number: #b45309; 24 + --hljs-addition: #15803d; 25 + --hljs-deletion: #dc2626; 26 + } 27 + 28 + :root[data-color-scheme='dark'], 29 + [data-color-scheme='dark'] { 30 + --hljs-foreground: #c9d1d9; 31 + --hljs-background: rgba(8, 16, 32, 0.55); 32 + --hljs-comment: #8b949e; 33 + --hljs-keyword: #ff7b72; 34 + --hljs-attr: #79c0ff; 35 + --hljs-string: #a5d6ff; 36 + --hljs-title: #d2a8ff; 37 + --hljs-number: #ffa657; 38 + --hljs-addition: #1a7f37; 39 + --hljs-deletion: #ff7b72; 40 + } 41 + 42 + :root:not([data-color-scheme]), 43 + [data-color-scheme]:not([data-color-scheme='light']):not([data-color-scheme='dark']) { 44 + --hljs-foreground: #1f2328; 45 + --hljs-background: transparent; 46 + --hljs-comment: #6e7781; 47 + --hljs-keyword: #cf222e; 48 + --hljs-attr: #0550ae; 49 + --hljs-string: #0a3069; 50 + --hljs-title: #24292f; 51 + --hljs-number: #953800; 52 + --hljs-addition: #116329; 53 + --hljs-deletion: #cf222e; 54 + } 55 + 56 + .hljs { 57 + display: block; 58 + overflow-x: auto; 59 + padding: 0; 60 + background: var(--hljs-background); 61 + color: var(--hljs-foreground); 62 + } 63 + 64 + .hljs-comment, 65 + .hljs-quote { 66 + color: var(--hljs-comment); 67 + font-style: italic; 68 + } 69 + 70 + .hljs-keyword, 71 + .hljs-selector-tag, 72 + .hljs-literal { 73 + color: var(--hljs-keyword); 74 + } 75 + 76 + .hljs-attr, 77 + .hljs-attribute, 78 + .hljs-symbol, 79 + .hljs-bullet, 80 + .hljs-built_in, 81 + .hljs-link, 82 + .hljs-meta, 83 + .hljs-selector-attr, 84 + .hljs-selector-pseudo { 85 + color: var(--hljs-attr); 86 + } 87 + 88 + .hljs-number, 89 + .hljs-variable, 90 + .hljs-template-variable, 91 + .hljs-title, 92 + .hljs-name, 93 + .hljs-tag { 94 + color: var(--hljs-number); 95 + } 96 + 97 + .hljs-string, 98 + .hljs-doctag, 99 + .hljs-regexp, 100 + .hljs-addition { 101 + color: var(--hljs-string); 102 + } 103 + 104 + .hljs-type, 105 + .hljs-class .hljs-title { 106 + color: var(--hljs-title); 107 + font-weight: 600; 108 + } 109 + 110 + .hljs-deletion { 111 + color: var(--hljs-deletion); 112 + } 113 + 114 + .hljs-emphasis { 115 + font-style: italic; 116 + } 117 + 118 + .hljs-strong { 119 + font-weight: 600; 120 + }
+6
lib/types/bluesky.ts
··· 1 + // Re-export precise lexicon types from @atcute/bluesky instead of redefining. 2 + import type { AppBskyFeedPost, AppBskyActorProfile } from '@atcute/bluesky'; 3 + 4 + // The atcute lexicon modules expose Main interface for record input shapes. 5 + export type FeedPostRecord = AppBskyFeedPost.Main; 6 + export type ProfileRecord = AppBskyActorProfile.Main;
+240
lib/types/leaflet.ts
··· 1 + export interface StrongRef { 2 + uri: string; 3 + cid: string; 4 + } 5 + 6 + export interface LeafletDocumentRecord { 7 + $type?: "pub.leaflet.document"; 8 + title: string; 9 + postRef?: StrongRef; 10 + description?: string; 11 + publishedAt?: string; 12 + publication: string; 13 + author: string; 14 + pages: LeafletDocumentPage[]; 15 + } 16 + 17 + export type LeafletDocumentPage = LeafletLinearDocumentPage; 18 + 19 + export interface LeafletLinearDocumentPage { 20 + $type?: "pub.leaflet.pages.linearDocument"; 21 + blocks?: LeafletLinearDocumentBlock[]; 22 + } 23 + 24 + export type LeafletAlignmentValue = 25 + | "#textAlignLeft" 26 + | "#textAlignCenter" 27 + | "#textAlignRight" 28 + | "#textAlignJustify" 29 + | "textAlignLeft" 30 + | "textAlignCenter" 31 + | "textAlignRight" 32 + | "textAlignJustify"; 33 + 34 + export interface LeafletLinearDocumentBlock { 35 + block: LeafletBlock; 36 + alignment?: LeafletAlignmentValue; 37 + } 38 + 39 + export type LeafletBlock = 40 + | LeafletTextBlock 41 + | LeafletHeaderBlock 42 + | LeafletBlockquoteBlock 43 + | LeafletImageBlock 44 + | LeafletUnorderedListBlock 45 + | LeafletWebsiteBlock 46 + | LeafletIFrameBlock 47 + | LeafletMathBlock 48 + | LeafletCodeBlock 49 + | LeafletHorizontalRuleBlock 50 + | LeafletBskyPostBlock; 51 + 52 + export interface LeafletBaseTextBlock { 53 + plaintext: string; 54 + facets?: LeafletRichTextFacet[]; 55 + } 56 + 57 + export interface LeafletTextBlock extends LeafletBaseTextBlock { 58 + $type?: "pub.leaflet.blocks.text"; 59 + } 60 + 61 + export interface LeafletHeaderBlock extends LeafletBaseTextBlock { 62 + $type?: "pub.leaflet.blocks.header"; 63 + level?: number; 64 + } 65 + 66 + export interface LeafletBlockquoteBlock extends LeafletBaseTextBlock { 67 + $type?: "pub.leaflet.blocks.blockquote"; 68 + } 69 + 70 + export interface LeafletImageBlock { 71 + $type?: "pub.leaflet.blocks.image"; 72 + image: LeafletBlobRef; 73 + alt?: string; 74 + aspectRatio: { 75 + width: number; 76 + height: number; 77 + }; 78 + } 79 + 80 + export interface LeafletUnorderedListBlock { 81 + $type?: "pub.leaflet.blocks.unorderedList"; 82 + children: LeafletListItem[]; 83 + } 84 + 85 + export interface LeafletListItem { 86 + content: LeafletListContent; 87 + children?: LeafletListItem[]; 88 + } 89 + 90 + export type LeafletListContent = LeafletTextBlock | LeafletHeaderBlock | LeafletImageBlock; 91 + 92 + export interface LeafletWebsiteBlock { 93 + $type?: "pub.leaflet.blocks.website"; 94 + src: string; 95 + title?: string; 96 + description?: string; 97 + previewImage?: LeafletBlobRef; 98 + } 99 + 100 + export interface LeafletIFrameBlock { 101 + $type?: "pub.leaflet.blocks.iframe"; 102 + url: string; 103 + height?: number; 104 + } 105 + 106 + export interface LeafletMathBlock { 107 + $type?: "pub.leaflet.blocks.math"; 108 + tex: string; 109 + } 110 + 111 + export interface LeafletCodeBlock { 112 + $type?: "pub.leaflet.blocks.code"; 113 + plaintext: string; 114 + language?: string; 115 + syntaxHighlightingTheme?: string; 116 + } 117 + 118 + export interface LeafletHorizontalRuleBlock { 119 + $type?: "pub.leaflet.blocks.horizontalRule"; 120 + } 121 + 122 + export interface LeafletBskyPostBlock { 123 + $type?: "pub.leaflet.blocks.bskyPost"; 124 + postRef: StrongRef; 125 + } 126 + 127 + export interface LeafletRichTextFacet { 128 + index: LeafletByteSlice; 129 + features: LeafletRichTextFeature[]; 130 + } 131 + 132 + export interface LeafletByteSlice { 133 + byteStart: number; 134 + byteEnd: number; 135 + } 136 + 137 + export type LeafletRichTextFeature = 138 + | LeafletRichTextLinkFeature 139 + | LeafletRichTextCodeFeature 140 + | LeafletRichTextHighlightFeature 141 + | LeafletRichTextUnderlineFeature 142 + | LeafletRichTextStrikethroughFeature 143 + | LeafletRichTextIdFeature 144 + | LeafletRichTextBoldFeature 145 + | LeafletRichTextItalicFeature; 146 + 147 + export interface LeafletRichTextLinkFeature { 148 + $type: "pub.leaflet.richtext.facet#link"; 149 + uri: string; 150 + } 151 + 152 + export interface LeafletRichTextCodeFeature { 153 + $type: "pub.leaflet.richtext.facet#code"; 154 + } 155 + 156 + export interface LeafletRichTextHighlightFeature { 157 + $type: "pub.leaflet.richtext.facet#highlight"; 158 + } 159 + 160 + export interface LeafletRichTextUnderlineFeature { 161 + $type: "pub.leaflet.richtext.facet#underline"; 162 + } 163 + 164 + export interface LeafletRichTextStrikethroughFeature { 165 + $type: "pub.leaflet.richtext.facet#strikethrough"; 166 + } 167 + 168 + export interface LeafletRichTextIdFeature { 169 + $type: "pub.leaflet.richtext.facet#id"; 170 + id?: string; 171 + } 172 + 173 + export interface LeafletRichTextBoldFeature { 174 + $type: "pub.leaflet.richtext.facet#bold"; 175 + } 176 + 177 + export interface LeafletRichTextItalicFeature { 178 + $type: "pub.leaflet.richtext.facet#italic"; 179 + } 180 + 181 + export interface LeafletBlobRef { 182 + $type?: string; 183 + ref?: { 184 + $link?: string; 185 + }; 186 + cid?: string; 187 + mimeType?: string; 188 + size?: number; 189 + } 190 + 191 + export interface LeafletPublicationRecord { 192 + $type?: "pub.leaflet.publication"; 193 + name: string; 194 + base_path?: string; 195 + description?: string; 196 + icon?: LeafletBlobRef; 197 + theme?: LeafletTheme; 198 + preferences?: LeafletPublicationPreferences; 199 + } 200 + 201 + export interface LeafletPublicationPreferences { 202 + showInDiscover?: boolean; 203 + showComments?: boolean; 204 + } 205 + 206 + export interface LeafletTheme { 207 + backgroundColor?: LeafletThemeColor; 208 + backgroundImage?: LeafletThemeBackgroundImage; 209 + primary?: LeafletThemeColor; 210 + pageBackground?: LeafletThemeColor; 211 + showPageBackground?: boolean; 212 + accentBackground?: LeafletThemeColor; 213 + accentText?: LeafletThemeColor; 214 + } 215 + 216 + export type LeafletThemeColor = LeafletThemeColorRgb | LeafletThemeColorRgba; 217 + 218 + export interface LeafletThemeColorRgb { 219 + $type?: "pub.leaflet.theme.color#rgb"; 220 + r: number; 221 + g: number; 222 + b: number; 223 + } 224 + 225 + export interface LeafletThemeColorRgba { 226 + $type?: "pub.leaflet.theme.color#rgba"; 227 + r: number; 228 + g: number; 229 + b: number; 230 + a: number; 231 + } 232 + 233 + export interface LeafletThemeBackgroundImage { 234 + $type?: "pub.leaflet.theme.backgroundImage"; 235 + image: LeafletBlobRef; 236 + width?: number; 237 + repeat?: boolean; 238 + } 239 + 240 + export type LeafletInlineRenderable = LeafletTextBlock | LeafletHeaderBlock | LeafletBlockquoteBlock;
+44
lib/utils/at-uri.ts
··· 1 + export interface ParsedAtUri { 2 + did: string; 3 + collection: string; 4 + rkey: string; 5 + } 6 + 7 + export function parseAtUri(uri?: string): ParsedAtUri | undefined { 8 + if (!uri || !uri.startsWith('at://')) return undefined; 9 + const withoutScheme = uri.slice('at://'.length); 10 + const [did, collection, rkey] = withoutScheme.split('/'); 11 + if (!did || !collection || !rkey) return undefined; 12 + return { did, collection, rkey }; 13 + } 14 + 15 + export function toBlueskyPostUrl(target: ParsedAtUri): string | undefined { 16 + if (target.collection !== 'app.bsky.feed.post') return undefined; 17 + return `https://bsky.app/profile/${target.did}/post/${target.rkey}`; 18 + } 19 + 20 + export function formatDidForLabel(did: string): string { 21 + return did.replace(/^did:(plc:)?/, ''); 22 + } 23 + 24 + const ABSOLUTE_URL_PATTERN = /^[a-zA-Z][a-zA-Z\d+\-.]*:/; 25 + 26 + export function normalizeLeafletBasePath(basePath?: string): string | undefined { 27 + if (!basePath) return undefined; 28 + const trimmed = basePath.trim(); 29 + if (!trimmed) return undefined; 30 + const withScheme = ABSOLUTE_URL_PATTERN.test(trimmed) ? trimmed : `https://${trimmed}`; 31 + try { 32 + const url = new URL(withScheme); 33 + url.hash = ''; 34 + return url.href.replace(/\/?$/, ''); 35 + } catch { 36 + return undefined; 37 + } 38 + } 39 + 40 + export function leafletRkeyUrl(basePath: string | undefined, rkey: string): string | undefined { 41 + const normalized = normalizeLeafletBasePath(basePath); 42 + if (!normalized) return undefined; 43 + return `${normalized}/${encodeURIComponent(rkey)}`; 44 + }
+90
lib/utils/atproto-client.ts
··· 1 + import { Client, simpleFetchHandler } from '@atcute/client'; 2 + import { CompositeDidDocumentResolver, PlcDidDocumentResolver, WebDidDocumentResolver, XrpcHandleResolver } from '@atcute/identity-resolver'; 3 + import type { DidDocument } from '@atcute/identity'; 4 + import type { Did, Handle } from '@atcute/lexicons/syntax'; 5 + import type {} from '@atcute/tangled'; 6 + import type {} from '@atcute/atproto'; 7 + 8 + export interface ServiceResolverOptions { 9 + plcDirectory?: string; 10 + identityService?: string; 11 + fetch?: typeof fetch; 12 + } 13 + 14 + const DEFAULT_PLC = 'https://plc.directory'; 15 + const DEFAULT_IDENTITY_SERVICE = 'https://public.api.bsky.app'; 16 + const ABSOLUTE_URL_RE = /^[a-zA-Z][a-zA-Z\d+\-.]*:/; 17 + const SUPPORTED_DID_METHODS = ['plc', 'web'] as const; 18 + type SupportedDidMethod = (typeof SUPPORTED_DID_METHODS)[number]; 19 + type SupportedDid = Did<SupportedDidMethod>; 20 + 21 + export const normalizeBaseUrl = (input: string): string => { 22 + const trimmed = input.trim(); 23 + if (!trimmed) throw new Error('Service URL cannot be empty'); 24 + const withScheme = ABSOLUTE_URL_RE.test(trimmed) ? trimmed : `https://${trimmed.replace(/^\/+/, '')}`; 25 + const url = new URL(withScheme); 26 + const pathname = url.pathname.replace(/\/+$/, ''); 27 + return pathname ? `${url.origin}${pathname}` : url.origin; 28 + }; 29 + 30 + export class ServiceResolver { 31 + private plc: string; 32 + private didResolver: CompositeDidDocumentResolver<SupportedDidMethod>; 33 + private handleResolver: XrpcHandleResolver; 34 + constructor(opts: ServiceResolverOptions = {}) { 35 + const plcSource = opts.plcDirectory && opts.plcDirectory.trim() ? opts.plcDirectory : DEFAULT_PLC; 36 + const identitySource = opts.identityService && opts.identityService.trim() ? opts.identityService : DEFAULT_IDENTITY_SERVICE; 37 + this.plc = normalizeBaseUrl(plcSource); 38 + const identityBase = normalizeBaseUrl(identitySource); 39 + const fetchImpl = opts.fetch ?? fetch; 40 + const plcResolver = new PlcDidDocumentResolver({ apiUrl: this.plc, fetch: fetchImpl }); 41 + const webResolver = new WebDidDocumentResolver({ fetch: fetchImpl }); 42 + this.didResolver = new CompositeDidDocumentResolver({ methods: { plc: plcResolver, web: webResolver } }); 43 + this.handleResolver = new XrpcHandleResolver({ serviceUrl: identityBase, fetch: fetchImpl }); 44 + } 45 + 46 + async resolveDidDoc(did: string): Promise<DidDocument> { 47 + const trimmed = did.trim(); 48 + if (!trimmed.startsWith('did:')) throw new Error(`Invalid DID ${did}`); 49 + const methodEnd = trimmed.indexOf(':', 4); 50 + const method = (methodEnd === -1 ? trimmed.slice(4) : trimmed.slice(4, methodEnd)) as string; 51 + if (!SUPPORTED_DID_METHODS.includes(method as SupportedDidMethod)) { 52 + throw new Error(`Unsupported DID method ${method ?? '<unknown>'}`); 53 + } 54 + return this.didResolver.resolve(trimmed as SupportedDid); 55 + } 56 + 57 + async pdsEndpointForDid(did: string): Promise<string> { 58 + const doc = await this.resolveDidDoc(did); 59 + const svc = doc.service?.find(s => s.type === 'AtprotoPersonalDataServer'); 60 + if (!svc || !svc.serviceEndpoint || typeof svc.serviceEndpoint !== 'string') { 61 + throw new Error(`No PDS endpoint in DID doc for ${did}`); 62 + } 63 + return svc.serviceEndpoint.replace(/\/$/, ''); 64 + } 65 + 66 + async resolveHandle(handle: string): Promise<string> { 67 + const normalized = handle.trim().toLowerCase(); 68 + if (!normalized) throw new Error('Handle cannot be empty'); 69 + return this.handleResolver.resolve(normalized as Handle); 70 + } 71 + } 72 + 73 + export interface CreateClientOptions extends ServiceResolverOptions { 74 + did?: string; // optional to create a DID-scoped client 75 + service?: string; // override service base url 76 + } 77 + 78 + export async function createAtprotoClient(opts: CreateClientOptions = {}) { 79 + let service = opts.service; 80 + const resolver = new ServiceResolver(opts); 81 + if (!service && opts.did) { 82 + service = await resolver.pdsEndpointForDid(opts.did); 83 + } 84 + if (!service) throw new Error('service or did required'); 85 + const handler = simpleFetchHandler({ service: normalizeBaseUrl(service) }); 86 + const rpc = new Client({ handler }); 87 + return { rpc, service, resolver }; 88 + } 89 + 90 + export type AtprotoClient = Awaited<ReturnType<typeof createAtprotoClient>>['rpc'];
+13
lib/utils/profile.ts
··· 1 + import type { ProfileRecord } from '../types/bluesky'; 2 + 3 + interface LegacyBlobRef { 4 + ref?: { $link?: string }; 5 + cid?: string; 6 + } 7 + 8 + export function getAvatarCid(record: ProfileRecord | undefined): string | undefined { 9 + const avatar = record?.avatar as LegacyBlobRef | undefined; 10 + if (!avatar) return undefined; 11 + if (typeof avatar.cid === 'string') return avatar.cid; 12 + return avatar.ref?.$link; 13 + }
+2863
package-lock.json
··· 1 + { 2 + "name": "atproto-ui", 3 + "version": "0.1.1", 4 + "lockfileVersion": 3, 5 + "requires": true, 6 + "packages": { 7 + "": { 8 + "name": "atproto-ui", 9 + "version": "0.1.0", 10 + "dependencies": { 11 + "@atcute/atproto": "^3.1.7", 12 + "@atcute/bluesky": "^3.2.3", 13 + "@atcute/client": "^4.0.3", 14 + "@atcute/identity-resolver": "^1.1.3", 15 + "@atcute/tangled": "^1.0.6" 16 + }, 17 + "devDependencies": { 18 + "@eslint/js": "^9.36.0", 19 + "@types/node": "^24.6.0", 20 + "@types/react": "^19.1.16", 21 + "@types/react-dom": "^19.1.9", 22 + "@vitejs/plugin-react": "^5.0.4", 23 + "eslint": "^9.36.0", 24 + "eslint-plugin-react-hooks": "^5.2.0", 25 + "eslint-plugin-react-refresh": "^0.4.22", 26 + "globals": "^16.4.0", 27 + "react": "^19.1.1", 28 + "react-dom": "^19.1.1", 29 + "typescript": "~5.9.3", 30 + "typescript-eslint": "^8.45.0", 31 + "vite": "npm:rolldown-vite@7.1.14" 32 + }, 33 + "peerDependencies": { 34 + "react": "^18.2.0 || ^19.0.0", 35 + "react-dom": "^18.2.0 || ^19.0.0" 36 + }, 37 + "peerDependenciesMeta": { 38 + "react-dom": { 39 + "optional": true 40 + } 41 + } 42 + }, 43 + "node_modules/@atcute/atproto": { 44 + "version": "3.1.7", 45 + "resolved": "https://registry.npmjs.org/@atcute/atproto/-/atproto-3.1.7.tgz", 46 + "integrity": "sha512-3Ym8qaVZg2vf8qw0KO1aue39z/5oik5J+UDoSes1vr8ddw40UVLA5sV4bXSKmLnhzQHiLLgoVZXe4zaKfozPoQ==", 47 + "license": "0BSD", 48 + "dependencies": { 49 + "@atcute/lexicons": "^1.2.2" 50 + } 51 + }, 52 + "node_modules/@atcute/bluesky": { 53 + "version": "3.2.3", 54 + "resolved": "https://registry.npmjs.org/@atcute/bluesky/-/bluesky-3.2.3.tgz", 55 + "integrity": "sha512-IdPQQ54F1BLhW5z49k81ZUC/GQl/tVygZ+CzLHYvQySHA6GJRcvPzwEf8aV21u0SZOJF+yF4CWEGNgtryyxPmg==", 56 + "license": "0BSD", 57 + "dependencies": { 58 + "@atcute/atproto": "^3.1.4", 59 + "@atcute/lexicons": "^1.1.1" 60 + } 61 + }, 62 + "node_modules/@atcute/client": { 63 + "version": "4.0.3", 64 + "resolved": "https://registry.npmjs.org/@atcute/client/-/client-4.0.3.tgz", 65 + "integrity": "sha512-RIOZWFVLca/HiPAAUDqQPOdOreCxTbL5cb+WUf5yqQOKIu5yEAP3eksinmlLmgIrlr5qVOE7brazUUzaskFCfw==", 66 + "license": "MIT", 67 + "dependencies": { 68 + "@atcute/identity": "^1.0.2", 69 + "@atcute/lexicons": "^1.0.3" 70 + } 71 + }, 72 + "node_modules/@atcute/identity": { 73 + "version": "1.1.0", 74 + "resolved": "https://registry.npmjs.org/@atcute/identity/-/identity-1.1.0.tgz", 75 + "integrity": "sha512-6vRvRqJatDB+JUQsb+UswYmtBGQnSZcqC3a2y6H5DB/v5KcIh+6nFFtc17G0+3W9rxdk7k9M4KkgkdKf/YDNoQ==", 76 + "license": "0BSD", 77 + "dependencies": { 78 + "@atcute/lexicons": "^1.1.1", 79 + "@badrap/valita": "^0.4.5" 80 + } 81 + }, 82 + "node_modules/@atcute/identity-resolver": { 83 + "version": "1.1.4", 84 + "resolved": "https://registry.npmjs.org/@atcute/identity-resolver/-/identity-resolver-1.1.4.tgz", 85 + "integrity": "sha512-/SVh8vf2cXFJenmBnGeYF2aY3WGQm3cJeew5NWTlkqoy3LvJ5wkvKq9PWu4Tv653VF40rPOp6LOdVr9Fa+q5rA==", 86 + "license": "0BSD", 87 + "dependencies": { 88 + "@atcute/lexicons": "^1.2.2", 89 + "@atcute/util-fetch": "^1.0.3", 90 + "@badrap/valita": "^0.4.6" 91 + }, 92 + "peerDependencies": { 93 + "@atcute/identity": "^1.0.0" 94 + } 95 + }, 96 + "node_modules/@atcute/lexicons": { 97 + "version": "1.2.2", 98 + "resolved": "https://registry.npmjs.org/@atcute/lexicons/-/lexicons-1.2.2.tgz", 99 + "integrity": "sha512-bgEhJq5Z70/0TbK5sx+tAkrR8FsCODNiL2gUEvS5PuJfPxmFmRYNWaMGehxSPaXWpU2+Oa9ckceHiYbrItDTkA==", 100 + "license": "0BSD", 101 + "dependencies": { 102 + "@standard-schema/spec": "^1.0.0", 103 + "esm-env": "^1.2.2" 104 + } 105 + }, 106 + "node_modules/@atcute/tangled": { 107 + "version": "1.0.6", 108 + "resolved": "https://registry.npmjs.org/@atcute/tangled/-/tangled-1.0.6.tgz", 109 + "integrity": "sha512-eEOtrKRbjKfeLYtb5hmkhE45w8h4sV6mT4E2CQzJmhOMGCiK31GX7Vqfh59rhNLb9AlbW72RcQTV737pxx+ksw==", 110 + "license": "0BSD", 111 + "dependencies": { 112 + "@atcute/atproto": "^3.1.4", 113 + "@atcute/lexicons": "^1.1.1" 114 + } 115 + }, 116 + "node_modules/@atcute/util-fetch": { 117 + "version": "1.0.3", 118 + "resolved": "https://registry.npmjs.org/@atcute/util-fetch/-/util-fetch-1.0.3.tgz", 119 + "integrity": "sha512-f8zzTb/xlKIwv2OQ31DhShPUNCmIIleX6p7qIXwWwEUjX6x8skUtpdISSjnImq01LXpltGV5y8yhV4/Mlb7CRQ==", 120 + "license": "0BSD", 121 + "dependencies": { 122 + "@badrap/valita": "^0.4.6" 123 + } 124 + }, 125 + "node_modules/@babel/code-frame": { 126 + "version": "7.27.1", 127 + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", 128 + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", 129 + "dev": true, 130 + "license": "MIT", 131 + "dependencies": { 132 + "@babel/helper-validator-identifier": "^7.27.1", 133 + "js-tokens": "^4.0.0", 134 + "picocolors": "^1.1.1" 135 + }, 136 + "engines": { 137 + "node": ">=6.9.0" 138 + } 139 + }, 140 + "node_modules/@babel/compat-data": { 141 + "version": "7.28.4", 142 + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.4.tgz", 143 + "integrity": "sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==", 144 + "dev": true, 145 + "license": "MIT", 146 + "engines": { 147 + "node": ">=6.9.0" 148 + } 149 + }, 150 + "node_modules/@babel/core": { 151 + "version": "7.28.4", 152 + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz", 153 + "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", 154 + "dev": true, 155 + "license": "MIT", 156 + "dependencies": { 157 + "@babel/code-frame": "^7.27.1", 158 + "@babel/generator": "^7.28.3", 159 + "@babel/helper-compilation-targets": "^7.27.2", 160 + "@babel/helper-module-transforms": "^7.28.3", 161 + "@babel/helpers": "^7.28.4", 162 + "@babel/parser": "^7.28.4", 163 + "@babel/template": "^7.27.2", 164 + "@babel/traverse": "^7.28.4", 165 + "@babel/types": "^7.28.4", 166 + "@jridgewell/remapping": "^2.3.5", 167 + "convert-source-map": "^2.0.0", 168 + "debug": "^4.1.0", 169 + "gensync": "^1.0.0-beta.2", 170 + "json5": "^2.2.3", 171 + "semver": "^6.3.1" 172 + }, 173 + "engines": { 174 + "node": ">=6.9.0" 175 + }, 176 + "funding": { 177 + "type": "opencollective", 178 + "url": "https://opencollective.com/babel" 179 + } 180 + }, 181 + "node_modules/@babel/generator": { 182 + "version": "7.28.3", 183 + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", 184 + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", 185 + "dev": true, 186 + "license": "MIT", 187 + "dependencies": { 188 + "@babel/parser": "^7.28.3", 189 + "@babel/types": "^7.28.2", 190 + "@jridgewell/gen-mapping": "^0.3.12", 191 + "@jridgewell/trace-mapping": "^0.3.28", 192 + "jsesc": "^3.0.2" 193 + }, 194 + "engines": { 195 + "node": ">=6.9.0" 196 + } 197 + }, 198 + "node_modules/@babel/helper-compilation-targets": { 199 + "version": "7.27.2", 200 + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", 201 + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", 202 + "dev": true, 203 + "license": "MIT", 204 + "dependencies": { 205 + "@babel/compat-data": "^7.27.2", 206 + "@babel/helper-validator-option": "^7.27.1", 207 + "browserslist": "^4.24.0", 208 + "lru-cache": "^5.1.1", 209 + "semver": "^6.3.1" 210 + }, 211 + "engines": { 212 + "node": ">=6.9.0" 213 + } 214 + }, 215 + "node_modules/@babel/helper-globals": { 216 + "version": "7.28.0", 217 + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", 218 + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", 219 + "dev": true, 220 + "license": "MIT", 221 + "engines": { 222 + "node": ">=6.9.0" 223 + } 224 + }, 225 + "node_modules/@babel/helper-module-imports": { 226 + "version": "7.27.1", 227 + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", 228 + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", 229 + "dev": true, 230 + "license": "MIT", 231 + "dependencies": { 232 + "@babel/traverse": "^7.27.1", 233 + "@babel/types": "^7.27.1" 234 + }, 235 + "engines": { 236 + "node": ">=6.9.0" 237 + } 238 + }, 239 + "node_modules/@babel/helper-module-transforms": { 240 + "version": "7.28.3", 241 + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", 242 + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", 243 + "dev": true, 244 + "license": "MIT", 245 + "dependencies": { 246 + "@babel/helper-module-imports": "^7.27.1", 247 + "@babel/helper-validator-identifier": "^7.27.1", 248 + "@babel/traverse": "^7.28.3" 249 + }, 250 + "engines": { 251 + "node": ">=6.9.0" 252 + }, 253 + "peerDependencies": { 254 + "@babel/core": "^7.0.0" 255 + } 256 + }, 257 + "node_modules/@babel/helper-plugin-utils": { 258 + "version": "7.27.1", 259 + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", 260 + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", 261 + "dev": true, 262 + "license": "MIT", 263 + "engines": { 264 + "node": ">=6.9.0" 265 + } 266 + }, 267 + "node_modules/@babel/helper-string-parser": { 268 + "version": "7.27.1", 269 + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", 270 + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", 271 + "dev": true, 272 + "license": "MIT", 273 + "engines": { 274 + "node": ">=6.9.0" 275 + } 276 + }, 277 + "node_modules/@babel/helper-validator-identifier": { 278 + "version": "7.27.1", 279 + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", 280 + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", 281 + "dev": true, 282 + "license": "MIT", 283 + "engines": { 284 + "node": ">=6.9.0" 285 + } 286 + }, 287 + "node_modules/@babel/helper-validator-option": { 288 + "version": "7.27.1", 289 + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", 290 + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", 291 + "dev": true, 292 + "license": "MIT", 293 + "engines": { 294 + "node": ">=6.9.0" 295 + } 296 + }, 297 + "node_modules/@babel/helpers": { 298 + "version": "7.28.4", 299 + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", 300 + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", 301 + "dev": true, 302 + "license": "MIT", 303 + "dependencies": { 304 + "@babel/template": "^7.27.2", 305 + "@babel/types": "^7.28.4" 306 + }, 307 + "engines": { 308 + "node": ">=6.9.0" 309 + } 310 + }, 311 + "node_modules/@babel/parser": { 312 + "version": "7.28.4", 313 + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", 314 + "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", 315 + "dev": true, 316 + "license": "MIT", 317 + "dependencies": { 318 + "@babel/types": "^7.28.4" 319 + }, 320 + "bin": { 321 + "parser": "bin/babel-parser.js" 322 + }, 323 + "engines": { 324 + "node": ">=6.0.0" 325 + } 326 + }, 327 + "node_modules/@babel/plugin-transform-react-jsx-self": { 328 + "version": "7.27.1", 329 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", 330 + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", 331 + "dev": true, 332 + "license": "MIT", 333 + "dependencies": { 334 + "@babel/helper-plugin-utils": "^7.27.1" 335 + }, 336 + "engines": { 337 + "node": ">=6.9.0" 338 + }, 339 + "peerDependencies": { 340 + "@babel/core": "^7.0.0-0" 341 + } 342 + }, 343 + "node_modules/@babel/plugin-transform-react-jsx-source": { 344 + "version": "7.27.1", 345 + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", 346 + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", 347 + "dev": true, 348 + "license": "MIT", 349 + "dependencies": { 350 + "@babel/helper-plugin-utils": "^7.27.1" 351 + }, 352 + "engines": { 353 + "node": ">=6.9.0" 354 + }, 355 + "peerDependencies": { 356 + "@babel/core": "^7.0.0-0" 357 + } 358 + }, 359 + "node_modules/@babel/template": { 360 + "version": "7.27.2", 361 + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", 362 + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", 363 + "dev": true, 364 + "license": "MIT", 365 + "dependencies": { 366 + "@babel/code-frame": "^7.27.1", 367 + "@babel/parser": "^7.27.2", 368 + "@babel/types": "^7.27.1" 369 + }, 370 + "engines": { 371 + "node": ">=6.9.0" 372 + } 373 + }, 374 + "node_modules/@babel/traverse": { 375 + "version": "7.28.4", 376 + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz", 377 + "integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==", 378 + "dev": true, 379 + "license": "MIT", 380 + "dependencies": { 381 + "@babel/code-frame": "^7.27.1", 382 + "@babel/generator": "^7.28.3", 383 + "@babel/helper-globals": "^7.28.0", 384 + "@babel/parser": "^7.28.4", 385 + "@babel/template": "^7.27.2", 386 + "@babel/types": "^7.28.4", 387 + "debug": "^4.3.1" 388 + }, 389 + "engines": { 390 + "node": ">=6.9.0" 391 + } 392 + }, 393 + "node_modules/@babel/types": { 394 + "version": "7.28.4", 395 + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", 396 + "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", 397 + "dev": true, 398 + "license": "MIT", 399 + "dependencies": { 400 + "@babel/helper-string-parser": "^7.27.1", 401 + "@babel/helper-validator-identifier": "^7.27.1" 402 + }, 403 + "engines": { 404 + "node": ">=6.9.0" 405 + } 406 + }, 407 + "node_modules/@badrap/valita": { 408 + "version": "0.4.6", 409 + "resolved": "https://registry.npmjs.org/@badrap/valita/-/valita-0.4.6.tgz", 410 + "integrity": "sha512-4kdqcjyxo/8RQ8ayjms47HCWZIF5981oE5nIenbfThKDxWXtEHKipAOWlflpPJzZx9y/JWYQkp18Awr7VuepFg==", 411 + "license": "MIT", 412 + "engines": { 413 + "node": ">= 18" 414 + } 415 + }, 416 + "node_modules/@eslint-community/eslint-utils": { 417 + "version": "4.9.0", 418 + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", 419 + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", 420 + "dev": true, 421 + "license": "MIT", 422 + "dependencies": { 423 + "eslint-visitor-keys": "^3.4.3" 424 + }, 425 + "engines": { 426 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 427 + }, 428 + "funding": { 429 + "url": "https://opencollective.com/eslint" 430 + }, 431 + "peerDependencies": { 432 + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" 433 + } 434 + }, 435 + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { 436 + "version": "3.4.3", 437 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 438 + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 439 + "dev": true, 440 + "license": "Apache-2.0", 441 + "engines": { 442 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 443 + }, 444 + "funding": { 445 + "url": "https://opencollective.com/eslint" 446 + } 447 + }, 448 + "node_modules/@eslint-community/regexpp": { 449 + "version": "4.12.1", 450 + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", 451 + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", 452 + "dev": true, 453 + "license": "MIT", 454 + "engines": { 455 + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 456 + } 457 + }, 458 + "node_modules/@eslint/config-array": { 459 + "version": "0.21.0", 460 + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", 461 + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", 462 + "dev": true, 463 + "license": "Apache-2.0", 464 + "dependencies": { 465 + "@eslint/object-schema": "^2.1.6", 466 + "debug": "^4.3.1", 467 + "minimatch": "^3.1.2" 468 + }, 469 + "engines": { 470 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 471 + } 472 + }, 473 + "node_modules/@eslint/config-helpers": { 474 + "version": "0.4.0", 475 + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.0.tgz", 476 + "integrity": "sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog==", 477 + "dev": true, 478 + "license": "Apache-2.0", 479 + "dependencies": { 480 + "@eslint/core": "^0.16.0" 481 + }, 482 + "engines": { 483 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 484 + } 485 + }, 486 + "node_modules/@eslint/core": { 487 + "version": "0.16.0", 488 + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.16.0.tgz", 489 + "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==", 490 + "dev": true, 491 + "license": "Apache-2.0", 492 + "dependencies": { 493 + "@types/json-schema": "^7.0.15" 494 + }, 495 + "engines": { 496 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 497 + } 498 + }, 499 + "node_modules/@eslint/eslintrc": { 500 + "version": "3.3.1", 501 + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", 502 + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", 503 + "dev": true, 504 + "license": "MIT", 505 + "dependencies": { 506 + "ajv": "^6.12.4", 507 + "debug": "^4.3.2", 508 + "espree": "^10.0.1", 509 + "globals": "^14.0.0", 510 + "ignore": "^5.2.0", 511 + "import-fresh": "^3.2.1", 512 + "js-yaml": "^4.1.0", 513 + "minimatch": "^3.1.2", 514 + "strip-json-comments": "^3.1.1" 515 + }, 516 + "engines": { 517 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 518 + }, 519 + "funding": { 520 + "url": "https://opencollective.com/eslint" 521 + } 522 + }, 523 + "node_modules/@eslint/eslintrc/node_modules/globals": { 524 + "version": "14.0.0", 525 + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", 526 + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", 527 + "dev": true, 528 + "license": "MIT", 529 + "engines": { 530 + "node": ">=18" 531 + }, 532 + "funding": { 533 + "url": "https://github.com/sponsors/sindresorhus" 534 + } 535 + }, 536 + "node_modules/@eslint/js": { 537 + "version": "9.37.0", 538 + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.37.0.tgz", 539 + "integrity": "sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg==", 540 + "dev": true, 541 + "license": "MIT", 542 + "engines": { 543 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 544 + }, 545 + "funding": { 546 + "url": "https://eslint.org/donate" 547 + } 548 + }, 549 + "node_modules/@eslint/object-schema": { 550 + "version": "2.1.6", 551 + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", 552 + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", 553 + "dev": true, 554 + "license": "Apache-2.0", 555 + "engines": { 556 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 557 + } 558 + }, 559 + "node_modules/@eslint/plugin-kit": { 560 + "version": "0.4.0", 561 + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz", 562 + "integrity": "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==", 563 + "dev": true, 564 + "license": "Apache-2.0", 565 + "dependencies": { 566 + "@eslint/core": "^0.16.0", 567 + "levn": "^0.4.1" 568 + }, 569 + "engines": { 570 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 571 + } 572 + }, 573 + "node_modules/@humanfs/core": { 574 + "version": "0.19.1", 575 + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", 576 + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", 577 + "dev": true, 578 + "license": "Apache-2.0", 579 + "engines": { 580 + "node": ">=18.18.0" 581 + } 582 + }, 583 + "node_modules/@humanfs/node": { 584 + "version": "0.16.7", 585 + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", 586 + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", 587 + "dev": true, 588 + "license": "Apache-2.0", 589 + "dependencies": { 590 + "@humanfs/core": "^0.19.1", 591 + "@humanwhocodes/retry": "^0.4.0" 592 + }, 593 + "engines": { 594 + "node": ">=18.18.0" 595 + } 596 + }, 597 + "node_modules/@humanwhocodes/module-importer": { 598 + "version": "1.0.1", 599 + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 600 + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 601 + "dev": true, 602 + "license": "Apache-2.0", 603 + "engines": { 604 + "node": ">=12.22" 605 + }, 606 + "funding": { 607 + "type": "github", 608 + "url": "https://github.com/sponsors/nzakas" 609 + } 610 + }, 611 + "node_modules/@humanwhocodes/retry": { 612 + "version": "0.4.3", 613 + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", 614 + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", 615 + "dev": true, 616 + "license": "Apache-2.0", 617 + "engines": { 618 + "node": ">=18.18" 619 + }, 620 + "funding": { 621 + "type": "github", 622 + "url": "https://github.com/sponsors/nzakas" 623 + } 624 + }, 625 + "node_modules/@jridgewell/gen-mapping": { 626 + "version": "0.3.13", 627 + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", 628 + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", 629 + "dev": true, 630 + "license": "MIT", 631 + "dependencies": { 632 + "@jridgewell/sourcemap-codec": "^1.5.0", 633 + "@jridgewell/trace-mapping": "^0.3.24" 634 + } 635 + }, 636 + "node_modules/@jridgewell/remapping": { 637 + "version": "2.3.5", 638 + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", 639 + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", 640 + "dev": true, 641 + "license": "MIT", 642 + "dependencies": { 643 + "@jridgewell/gen-mapping": "^0.3.5", 644 + "@jridgewell/trace-mapping": "^0.3.24" 645 + } 646 + }, 647 + "node_modules/@jridgewell/resolve-uri": { 648 + "version": "3.1.2", 649 + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 650 + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 651 + "dev": true, 652 + "license": "MIT", 653 + "engines": { 654 + "node": ">=6.0.0" 655 + } 656 + }, 657 + "node_modules/@jridgewell/sourcemap-codec": { 658 + "version": "1.5.5", 659 + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", 660 + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", 661 + "dev": true, 662 + "license": "MIT" 663 + }, 664 + "node_modules/@jridgewell/trace-mapping": { 665 + "version": "0.3.31", 666 + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", 667 + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", 668 + "dev": true, 669 + "license": "MIT", 670 + "dependencies": { 671 + "@jridgewell/resolve-uri": "^3.1.0", 672 + "@jridgewell/sourcemap-codec": "^1.4.14" 673 + } 674 + }, 675 + "node_modules/@nodelib/fs.scandir": { 676 + "version": "2.1.5", 677 + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 678 + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 679 + "dev": true, 680 + "license": "MIT", 681 + "dependencies": { 682 + "@nodelib/fs.stat": "2.0.5", 683 + "run-parallel": "^1.1.9" 684 + }, 685 + "engines": { 686 + "node": ">= 8" 687 + } 688 + }, 689 + "node_modules/@nodelib/fs.stat": { 690 + "version": "2.0.5", 691 + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 692 + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 693 + "dev": true, 694 + "license": "MIT", 695 + "engines": { 696 + "node": ">= 8" 697 + } 698 + }, 699 + "node_modules/@nodelib/fs.walk": { 700 + "version": "1.2.8", 701 + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 702 + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 703 + "dev": true, 704 + "license": "MIT", 705 + "dependencies": { 706 + "@nodelib/fs.scandir": "2.1.5", 707 + "fastq": "^1.6.0" 708 + }, 709 + "engines": { 710 + "node": ">= 8" 711 + } 712 + }, 713 + "node_modules/@oxc-project/runtime": { 714 + "version": "0.92.0", 715 + "resolved": "https://registry.npmjs.org/@oxc-project/runtime/-/runtime-0.92.0.tgz", 716 + "integrity": "sha512-Z7x2dZOmznihvdvCvLKMl+nswtOSVxS2H2ocar+U9xx6iMfTp0VGIrX6a4xB1v80IwOPC7dT1LXIJrY70Xu3Jw==", 717 + "dev": true, 718 + "license": "MIT", 719 + "engines": { 720 + "node": "^20.19.0 || >=22.12.0" 721 + } 722 + }, 723 + "node_modules/@oxc-project/types": { 724 + "version": "0.93.0", 725 + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.93.0.tgz", 726 + "integrity": "sha512-yNtwmWZIBtJsMr5TEfoZFDxIWV6OdScOpza/f5YxbqUMJk+j6QX3Cf3jgZShGEFYWQJ5j9mJ6jM0tZHu2J9Yrg==", 727 + "dev": true, 728 + "license": "MIT", 729 + "funding": { 730 + "url": "https://github.com/sponsors/Boshen" 731 + } 732 + }, 733 + "node_modules/@rolldown/binding-darwin-arm64": { 734 + "version": "1.0.0-beta.41", 735 + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-beta.41.tgz", 736 + "integrity": "sha512-XGCzqfjdk7550PlyZRTBKbypXrB7ATtXhw/+bjtxnklLQs0mKP/XkQVOKyn9qGKSlvH8I56JLYryVxl0PCvSNw==", 737 + "cpu": [ 738 + "arm64" 739 + ], 740 + "dev": true, 741 + "license": "MIT", 742 + "optional": true, 743 + "os": [ 744 + "darwin" 745 + ], 746 + "engines": { 747 + "node": "^20.19.0 || >=22.12.0" 748 + } 749 + }, 750 + "node_modules/@rolldown/pluginutils": { 751 + "version": "1.0.0-beta.38", 752 + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.38.tgz", 753 + "integrity": "sha512-N/ICGKleNhA5nc9XXQG/kkKHJ7S55u0x0XUJbbkmdCnFuoRkM1Il12q9q0eX19+M7KKUEPw/daUPIRnxhcxAIw==", 754 + "dev": true, 755 + "license": "MIT" 756 + }, 757 + "node_modules/@standard-schema/spec": { 758 + "version": "1.0.0", 759 + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", 760 + "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", 761 + "license": "MIT" 762 + }, 763 + "node_modules/@types/babel__core": { 764 + "version": "7.20.5", 765 + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", 766 + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", 767 + "dev": true, 768 + "license": "MIT", 769 + "dependencies": { 770 + "@babel/parser": "^7.20.7", 771 + "@babel/types": "^7.20.7", 772 + "@types/babel__generator": "*", 773 + "@types/babel__template": "*", 774 + "@types/babel__traverse": "*" 775 + } 776 + }, 777 + "node_modules/@types/babel__generator": { 778 + "version": "7.27.0", 779 + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", 780 + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", 781 + "dev": true, 782 + "license": "MIT", 783 + "dependencies": { 784 + "@babel/types": "^7.0.0" 785 + } 786 + }, 787 + "node_modules/@types/babel__template": { 788 + "version": "7.4.4", 789 + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", 790 + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", 791 + "dev": true, 792 + "license": "MIT", 793 + "dependencies": { 794 + "@babel/parser": "^7.1.0", 795 + "@babel/types": "^7.0.0" 796 + } 797 + }, 798 + "node_modules/@types/babel__traverse": { 799 + "version": "7.28.0", 800 + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", 801 + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", 802 + "dev": true, 803 + "license": "MIT", 804 + "dependencies": { 805 + "@babel/types": "^7.28.2" 806 + } 807 + }, 808 + "node_modules/@types/estree": { 809 + "version": "1.0.8", 810 + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", 811 + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", 812 + "dev": true, 813 + "license": "MIT" 814 + }, 815 + "node_modules/@types/json-schema": { 816 + "version": "7.0.15", 817 + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", 818 + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", 819 + "dev": true, 820 + "license": "MIT" 821 + }, 822 + "node_modules/@types/node": { 823 + "version": "24.7.0", 824 + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.7.0.tgz", 825 + "integrity": "sha512-IbKooQVqUBrlzWTi79E8Fw78l8k1RNtlDDNWsFZs7XonuQSJ8oNYfEeclhprUldXISRMLzBpILuKgPlIxm+/Yw==", 826 + "dev": true, 827 + "license": "MIT", 828 + "dependencies": { 829 + "undici-types": "~7.14.0" 830 + } 831 + }, 832 + "node_modules/@types/react": { 833 + "version": "19.2.2", 834 + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.2.tgz", 835 + "integrity": "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==", 836 + "dev": true, 837 + "license": "MIT", 838 + "dependencies": { 839 + "csstype": "^3.0.2" 840 + } 841 + }, 842 + "node_modules/@types/react-dom": { 843 + "version": "19.2.1", 844 + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.1.tgz", 845 + "integrity": "sha512-/EEvYBdT3BflCWvTMO7YkYBHVE9Ci6XdqZciZANQgKpaiDRGOLIlRo91jbTNRQjgPFWVaRxcYc0luVNFitz57A==", 846 + "dev": true, 847 + "license": "MIT", 848 + "peerDependencies": { 849 + "@types/react": "^19.2.0" 850 + } 851 + }, 852 + "node_modules/@typescript-eslint/eslint-plugin": { 853 + "version": "8.46.0", 854 + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.0.tgz", 855 + "integrity": "sha512-hA8gxBq4ukonVXPy0OKhiaUh/68D0E88GSmtC1iAEnGaieuDi38LhS7jdCHRLi6ErJBNDGCzvh5EnzdPwUc0DA==", 856 + "dev": true, 857 + "license": "MIT", 858 + "dependencies": { 859 + "@eslint-community/regexpp": "^4.10.0", 860 + "@typescript-eslint/scope-manager": "8.46.0", 861 + "@typescript-eslint/type-utils": "8.46.0", 862 + "@typescript-eslint/utils": "8.46.0", 863 + "@typescript-eslint/visitor-keys": "8.46.0", 864 + "graphemer": "^1.4.0", 865 + "ignore": "^7.0.0", 866 + "natural-compare": "^1.4.0", 867 + "ts-api-utils": "^2.1.0" 868 + }, 869 + "engines": { 870 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 871 + }, 872 + "funding": { 873 + "type": "opencollective", 874 + "url": "https://opencollective.com/typescript-eslint" 875 + }, 876 + "peerDependencies": { 877 + "@typescript-eslint/parser": "^8.46.0", 878 + "eslint": "^8.57.0 || ^9.0.0", 879 + "typescript": ">=4.8.4 <6.0.0" 880 + } 881 + }, 882 + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { 883 + "version": "7.0.5", 884 + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", 885 + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", 886 + "dev": true, 887 + "license": "MIT", 888 + "engines": { 889 + "node": ">= 4" 890 + } 891 + }, 892 + "node_modules/@typescript-eslint/parser": { 893 + "version": "8.46.0", 894 + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.0.tgz", 895 + "integrity": "sha512-n1H6IcDhmmUEG7TNVSspGmiHHutt7iVKtZwRppD7e04wha5MrkV1h3pti9xQLcCMt6YWsncpoT0HMjkH1FNwWQ==", 896 + "dev": true, 897 + "license": "MIT", 898 + "dependencies": { 899 + "@typescript-eslint/scope-manager": "8.46.0", 900 + "@typescript-eslint/types": "8.46.0", 901 + "@typescript-eslint/typescript-estree": "8.46.0", 902 + "@typescript-eslint/visitor-keys": "8.46.0", 903 + "debug": "^4.3.4" 904 + }, 905 + "engines": { 906 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 907 + }, 908 + "funding": { 909 + "type": "opencollective", 910 + "url": "https://opencollective.com/typescript-eslint" 911 + }, 912 + "peerDependencies": { 913 + "eslint": "^8.57.0 || ^9.0.0", 914 + "typescript": ">=4.8.4 <6.0.0" 915 + } 916 + }, 917 + "node_modules/@typescript-eslint/project-service": { 918 + "version": "8.46.0", 919 + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.0.tgz", 920 + "integrity": "sha512-OEhec0mH+U5Je2NZOeK1AbVCdm0ChyapAyTeXVIYTPXDJ3F07+cu87PPXcGoYqZ7M9YJVvFnfpGg1UmCIqM+QQ==", 921 + "dev": true, 922 + "license": "MIT", 923 + "dependencies": { 924 + "@typescript-eslint/tsconfig-utils": "^8.46.0", 925 + "@typescript-eslint/types": "^8.46.0", 926 + "debug": "^4.3.4" 927 + }, 928 + "engines": { 929 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 930 + }, 931 + "funding": { 932 + "type": "opencollective", 933 + "url": "https://opencollective.com/typescript-eslint" 934 + }, 935 + "peerDependencies": { 936 + "typescript": ">=4.8.4 <6.0.0" 937 + } 938 + }, 939 + "node_modules/@typescript-eslint/scope-manager": { 940 + "version": "8.46.0", 941 + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.0.tgz", 942 + "integrity": "sha512-lWETPa9XGcBes4jqAMYD9fW0j4n6hrPtTJwWDmtqgFO/4HF4jmdH/Q6wggTw5qIT5TXjKzbt7GsZUBnWoO3dqw==", 943 + "dev": true, 944 + "license": "MIT", 945 + "dependencies": { 946 + "@typescript-eslint/types": "8.46.0", 947 + "@typescript-eslint/visitor-keys": "8.46.0" 948 + }, 949 + "engines": { 950 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 951 + }, 952 + "funding": { 953 + "type": "opencollective", 954 + "url": "https://opencollective.com/typescript-eslint" 955 + } 956 + }, 957 + "node_modules/@typescript-eslint/tsconfig-utils": { 958 + "version": "8.46.0", 959 + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.0.tgz", 960 + "integrity": "sha512-WrYXKGAHY836/N7zoK/kzi6p8tXFhasHh8ocFL9VZSAkvH956gfeRfcnhs3xzRy8qQ/dq3q44v1jvQieMFg2cw==", 961 + "dev": true, 962 + "license": "MIT", 963 + "engines": { 964 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 965 + }, 966 + "funding": { 967 + "type": "opencollective", 968 + "url": "https://opencollective.com/typescript-eslint" 969 + }, 970 + "peerDependencies": { 971 + "typescript": ">=4.8.4 <6.0.0" 972 + } 973 + }, 974 + "node_modules/@typescript-eslint/type-utils": { 975 + "version": "8.46.0", 976 + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.0.tgz", 977 + "integrity": "sha512-hy+lvYV1lZpVs2jRaEYvgCblZxUoJiPyCemwbQZ+NGulWkQRy0HRPYAoef/CNSzaLt+MLvMptZsHXHlkEilaeg==", 978 + "dev": true, 979 + "license": "MIT", 980 + "dependencies": { 981 + "@typescript-eslint/types": "8.46.0", 982 + "@typescript-eslint/typescript-estree": "8.46.0", 983 + "@typescript-eslint/utils": "8.46.0", 984 + "debug": "^4.3.4", 985 + "ts-api-utils": "^2.1.0" 986 + }, 987 + "engines": { 988 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 989 + }, 990 + "funding": { 991 + "type": "opencollective", 992 + "url": "https://opencollective.com/typescript-eslint" 993 + }, 994 + "peerDependencies": { 995 + "eslint": "^8.57.0 || ^9.0.0", 996 + "typescript": ">=4.8.4 <6.0.0" 997 + } 998 + }, 999 + "node_modules/@typescript-eslint/types": { 1000 + "version": "8.46.0", 1001 + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.0.tgz", 1002 + "integrity": "sha512-bHGGJyVjSE4dJJIO5yyEWt/cHyNwga/zXGJbJJ8TiO01aVREK6gCTu3L+5wrkb1FbDkQ+TKjMNe9R/QQQP9+rA==", 1003 + "dev": true, 1004 + "license": "MIT", 1005 + "engines": { 1006 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1007 + }, 1008 + "funding": { 1009 + "type": "opencollective", 1010 + "url": "https://opencollective.com/typescript-eslint" 1011 + } 1012 + }, 1013 + "node_modules/@typescript-eslint/typescript-estree": { 1014 + "version": "8.46.0", 1015 + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.0.tgz", 1016 + "integrity": "sha512-ekDCUfVpAKWJbRfm8T1YRrCot1KFxZn21oV76v5Fj4tr7ELyk84OS+ouvYdcDAwZL89WpEkEj2DKQ+qg//+ucg==", 1017 + "dev": true, 1018 + "license": "MIT", 1019 + "dependencies": { 1020 + "@typescript-eslint/project-service": "8.46.0", 1021 + "@typescript-eslint/tsconfig-utils": "8.46.0", 1022 + "@typescript-eslint/types": "8.46.0", 1023 + "@typescript-eslint/visitor-keys": "8.46.0", 1024 + "debug": "^4.3.4", 1025 + "fast-glob": "^3.3.2", 1026 + "is-glob": "^4.0.3", 1027 + "minimatch": "^9.0.4", 1028 + "semver": "^7.6.0", 1029 + "ts-api-utils": "^2.1.0" 1030 + }, 1031 + "engines": { 1032 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1033 + }, 1034 + "funding": { 1035 + "type": "opencollective", 1036 + "url": "https://opencollective.com/typescript-eslint" 1037 + }, 1038 + "peerDependencies": { 1039 + "typescript": ">=4.8.4 <6.0.0" 1040 + } 1041 + }, 1042 + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { 1043 + "version": "2.0.2", 1044 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", 1045 + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", 1046 + "dev": true, 1047 + "license": "MIT", 1048 + "dependencies": { 1049 + "balanced-match": "^1.0.0" 1050 + } 1051 + }, 1052 + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { 1053 + "version": "9.0.5", 1054 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", 1055 + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 1056 + "dev": true, 1057 + "license": "ISC", 1058 + "dependencies": { 1059 + "brace-expansion": "^2.0.1" 1060 + }, 1061 + "engines": { 1062 + "node": ">=16 || 14 >=14.17" 1063 + }, 1064 + "funding": { 1065 + "url": "https://github.com/sponsors/isaacs" 1066 + } 1067 + }, 1068 + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { 1069 + "version": "7.7.3", 1070 + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", 1071 + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", 1072 + "dev": true, 1073 + "license": "ISC", 1074 + "bin": { 1075 + "semver": "bin/semver.js" 1076 + }, 1077 + "engines": { 1078 + "node": ">=10" 1079 + } 1080 + }, 1081 + "node_modules/@typescript-eslint/utils": { 1082 + "version": "8.46.0", 1083 + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.0.tgz", 1084 + "integrity": "sha512-nD6yGWPj1xiOm4Gk0k6hLSZz2XkNXhuYmyIrOWcHoPuAhjT9i5bAG+xbWPgFeNR8HPHHtpNKdYUXJl/D3x7f5g==", 1085 + "dev": true, 1086 + "license": "MIT", 1087 + "dependencies": { 1088 + "@eslint-community/eslint-utils": "^4.7.0", 1089 + "@typescript-eslint/scope-manager": "8.46.0", 1090 + "@typescript-eslint/types": "8.46.0", 1091 + "@typescript-eslint/typescript-estree": "8.46.0" 1092 + }, 1093 + "engines": { 1094 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1095 + }, 1096 + "funding": { 1097 + "type": "opencollective", 1098 + "url": "https://opencollective.com/typescript-eslint" 1099 + }, 1100 + "peerDependencies": { 1101 + "eslint": "^8.57.0 || ^9.0.0", 1102 + "typescript": ">=4.8.4 <6.0.0" 1103 + } 1104 + }, 1105 + "node_modules/@typescript-eslint/visitor-keys": { 1106 + "version": "8.46.0", 1107 + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.0.tgz", 1108 + "integrity": "sha512-FrvMpAK+hTbFy7vH5j1+tMYHMSKLE6RzluFJlkFNKD0p9YsUT75JlBSmr5so3QRzvMwU5/bIEdeNrxm8du8l3Q==", 1109 + "dev": true, 1110 + "license": "MIT", 1111 + "dependencies": { 1112 + "@typescript-eslint/types": "8.46.0", 1113 + "eslint-visitor-keys": "^4.2.1" 1114 + }, 1115 + "engines": { 1116 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1117 + }, 1118 + "funding": { 1119 + "type": "opencollective", 1120 + "url": "https://opencollective.com/typescript-eslint" 1121 + } 1122 + }, 1123 + "node_modules/@vitejs/plugin-react": { 1124 + "version": "5.0.4", 1125 + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.0.4.tgz", 1126 + "integrity": "sha512-La0KD0vGkVkSk6K+piWDKRUyg8Rl5iAIKRMH0vMJI0Eg47bq1eOxmoObAaQG37WMW9MSyk7Cs8EIWwJC1PtzKA==", 1127 + "dev": true, 1128 + "license": "MIT", 1129 + "dependencies": { 1130 + "@babel/core": "^7.28.4", 1131 + "@babel/plugin-transform-react-jsx-self": "^7.27.1", 1132 + "@babel/plugin-transform-react-jsx-source": "^7.27.1", 1133 + "@rolldown/pluginutils": "1.0.0-beta.38", 1134 + "@types/babel__core": "^7.20.5", 1135 + "react-refresh": "^0.17.0" 1136 + }, 1137 + "engines": { 1138 + "node": "^20.19.0 || >=22.12.0" 1139 + }, 1140 + "peerDependencies": { 1141 + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" 1142 + } 1143 + }, 1144 + "node_modules/acorn": { 1145 + "version": "8.15.0", 1146 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", 1147 + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", 1148 + "dev": true, 1149 + "license": "MIT", 1150 + "bin": { 1151 + "acorn": "bin/acorn" 1152 + }, 1153 + "engines": { 1154 + "node": ">=0.4.0" 1155 + } 1156 + }, 1157 + "node_modules/acorn-jsx": { 1158 + "version": "5.3.2", 1159 + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 1160 + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 1161 + "dev": true, 1162 + "license": "MIT", 1163 + "peerDependencies": { 1164 + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 1165 + } 1166 + }, 1167 + "node_modules/ajv": { 1168 + "version": "6.12.6", 1169 + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 1170 + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 1171 + "dev": true, 1172 + "license": "MIT", 1173 + "dependencies": { 1174 + "fast-deep-equal": "^3.1.1", 1175 + "fast-json-stable-stringify": "^2.0.0", 1176 + "json-schema-traverse": "^0.4.1", 1177 + "uri-js": "^4.2.2" 1178 + }, 1179 + "funding": { 1180 + "type": "github", 1181 + "url": "https://github.com/sponsors/epoberezkin" 1182 + } 1183 + }, 1184 + "node_modules/ansi-styles": { 1185 + "version": "4.3.0", 1186 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1187 + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1188 + "dev": true, 1189 + "license": "MIT", 1190 + "dependencies": { 1191 + "color-convert": "^2.0.1" 1192 + }, 1193 + "engines": { 1194 + "node": ">=8" 1195 + }, 1196 + "funding": { 1197 + "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1198 + } 1199 + }, 1200 + "node_modules/ansis": { 1201 + "version": "4.2.0", 1202 + "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.2.0.tgz", 1203 + "integrity": "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==", 1204 + "dev": true, 1205 + "license": "ISC", 1206 + "engines": { 1207 + "node": ">=14" 1208 + } 1209 + }, 1210 + "node_modules/argparse": { 1211 + "version": "2.0.1", 1212 + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1213 + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1214 + "dev": true, 1215 + "license": "Python-2.0" 1216 + }, 1217 + "node_modules/balanced-match": { 1218 + "version": "1.0.2", 1219 + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1220 + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1221 + "dev": true, 1222 + "license": "MIT" 1223 + }, 1224 + "node_modules/baseline-browser-mapping": { 1225 + "version": "2.8.13", 1226 + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.13.tgz", 1227 + "integrity": "sha512-7s16KR8io8nIBWQyCYhmFhd+ebIzb9VKTzki+wOJXHTxTnV6+mFGH3+Jwn1zoKaY9/H9T/0BcKCZnzXljPnpSQ==", 1228 + "dev": true, 1229 + "license": "Apache-2.0", 1230 + "bin": { 1231 + "baseline-browser-mapping": "dist/cli.js" 1232 + } 1233 + }, 1234 + "node_modules/brace-expansion": { 1235 + "version": "1.1.12", 1236 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", 1237 + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", 1238 + "dev": true, 1239 + "license": "MIT", 1240 + "dependencies": { 1241 + "balanced-match": "^1.0.0", 1242 + "concat-map": "0.0.1" 1243 + } 1244 + }, 1245 + "node_modules/braces": { 1246 + "version": "3.0.3", 1247 + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 1248 + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 1249 + "dev": true, 1250 + "license": "MIT", 1251 + "dependencies": { 1252 + "fill-range": "^7.1.1" 1253 + }, 1254 + "engines": { 1255 + "node": ">=8" 1256 + } 1257 + }, 1258 + "node_modules/browserslist": { 1259 + "version": "4.26.3", 1260 + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.3.tgz", 1261 + "integrity": "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==", 1262 + "dev": true, 1263 + "funding": [ 1264 + { 1265 + "type": "opencollective", 1266 + "url": "https://opencollective.com/browserslist" 1267 + }, 1268 + { 1269 + "type": "tidelift", 1270 + "url": "https://tidelift.com/funding/github/npm/browserslist" 1271 + }, 1272 + { 1273 + "type": "github", 1274 + "url": "https://github.com/sponsors/ai" 1275 + } 1276 + ], 1277 + "license": "MIT", 1278 + "dependencies": { 1279 + "baseline-browser-mapping": "^2.8.9", 1280 + "caniuse-lite": "^1.0.30001746", 1281 + "electron-to-chromium": "^1.5.227", 1282 + "node-releases": "^2.0.21", 1283 + "update-browserslist-db": "^1.1.3" 1284 + }, 1285 + "bin": { 1286 + "browserslist": "cli.js" 1287 + }, 1288 + "engines": { 1289 + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 1290 + } 1291 + }, 1292 + "node_modules/callsites": { 1293 + "version": "3.1.0", 1294 + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1295 + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 1296 + "dev": true, 1297 + "license": "MIT", 1298 + "engines": { 1299 + "node": ">=6" 1300 + } 1301 + }, 1302 + "node_modules/caniuse-lite": { 1303 + "version": "1.0.30001748", 1304 + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001748.tgz", 1305 + "integrity": "sha512-5P5UgAr0+aBmNiplks08JLw+AW/XG/SurlgZLgB1dDLfAw7EfRGxIwzPHxdSCGY/BTKDqIVyJL87cCN6s0ZR0w==", 1306 + "dev": true, 1307 + "funding": [ 1308 + { 1309 + "type": "opencollective", 1310 + "url": "https://opencollective.com/browserslist" 1311 + }, 1312 + { 1313 + "type": "tidelift", 1314 + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 1315 + }, 1316 + { 1317 + "type": "github", 1318 + "url": "https://github.com/sponsors/ai" 1319 + } 1320 + ], 1321 + "license": "CC-BY-4.0" 1322 + }, 1323 + "node_modules/chalk": { 1324 + "version": "4.1.2", 1325 + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1326 + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1327 + "dev": true, 1328 + "license": "MIT", 1329 + "dependencies": { 1330 + "ansi-styles": "^4.1.0", 1331 + "supports-color": "^7.1.0" 1332 + }, 1333 + "engines": { 1334 + "node": ">=10" 1335 + }, 1336 + "funding": { 1337 + "url": "https://github.com/chalk/chalk?sponsor=1" 1338 + } 1339 + }, 1340 + "node_modules/color-convert": { 1341 + "version": "2.0.1", 1342 + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1343 + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1344 + "dev": true, 1345 + "license": "MIT", 1346 + "dependencies": { 1347 + "color-name": "~1.1.4" 1348 + }, 1349 + "engines": { 1350 + "node": ">=7.0.0" 1351 + } 1352 + }, 1353 + "node_modules/color-name": { 1354 + "version": "1.1.4", 1355 + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1356 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1357 + "dev": true, 1358 + "license": "MIT" 1359 + }, 1360 + "node_modules/concat-map": { 1361 + "version": "0.0.1", 1362 + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1363 + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 1364 + "dev": true, 1365 + "license": "MIT" 1366 + }, 1367 + "node_modules/convert-source-map": { 1368 + "version": "2.0.0", 1369 + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", 1370 + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", 1371 + "dev": true, 1372 + "license": "MIT" 1373 + }, 1374 + "node_modules/cross-spawn": { 1375 + "version": "7.0.6", 1376 + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", 1377 + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", 1378 + "dev": true, 1379 + "license": "MIT", 1380 + "dependencies": { 1381 + "path-key": "^3.1.0", 1382 + "shebang-command": "^2.0.0", 1383 + "which": "^2.0.1" 1384 + }, 1385 + "engines": { 1386 + "node": ">= 8" 1387 + } 1388 + }, 1389 + "node_modules/csstype": { 1390 + "version": "3.1.3", 1391 + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", 1392 + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", 1393 + "dev": true, 1394 + "license": "MIT" 1395 + }, 1396 + "node_modules/debug": { 1397 + "version": "4.4.3", 1398 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", 1399 + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", 1400 + "dev": true, 1401 + "license": "MIT", 1402 + "dependencies": { 1403 + "ms": "^2.1.3" 1404 + }, 1405 + "engines": { 1406 + "node": ">=6.0" 1407 + }, 1408 + "peerDependenciesMeta": { 1409 + "supports-color": { 1410 + "optional": true 1411 + } 1412 + } 1413 + }, 1414 + "node_modules/deep-is": { 1415 + "version": "0.1.4", 1416 + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 1417 + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 1418 + "dev": true, 1419 + "license": "MIT" 1420 + }, 1421 + "node_modules/detect-libc": { 1422 + "version": "2.1.2", 1423 + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", 1424 + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", 1425 + "dev": true, 1426 + "license": "Apache-2.0", 1427 + "engines": { 1428 + "node": ">=8" 1429 + } 1430 + }, 1431 + "node_modules/electron-to-chromium": { 1432 + "version": "1.5.232", 1433 + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.232.tgz", 1434 + "integrity": "sha512-ENirSe7wf8WzyPCibqKUG1Cg43cPaxH4wRR7AJsX7MCABCHBIOFqvaYODSLKUuZdraxUTHRE/0A2Aq8BYKEHOg==", 1435 + "dev": true, 1436 + "license": "ISC" 1437 + }, 1438 + "node_modules/escalade": { 1439 + "version": "3.2.0", 1440 + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", 1441 + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", 1442 + "dev": true, 1443 + "license": "MIT", 1444 + "engines": { 1445 + "node": ">=6" 1446 + } 1447 + }, 1448 + "node_modules/escape-string-regexp": { 1449 + "version": "4.0.0", 1450 + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 1451 + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 1452 + "dev": true, 1453 + "license": "MIT", 1454 + "engines": { 1455 + "node": ">=10" 1456 + }, 1457 + "funding": { 1458 + "url": "https://github.com/sponsors/sindresorhus" 1459 + } 1460 + }, 1461 + "node_modules/eslint": { 1462 + "version": "9.37.0", 1463 + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.37.0.tgz", 1464 + "integrity": "sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig==", 1465 + "dev": true, 1466 + "license": "MIT", 1467 + "dependencies": { 1468 + "@eslint-community/eslint-utils": "^4.8.0", 1469 + "@eslint-community/regexpp": "^4.12.1", 1470 + "@eslint/config-array": "^0.21.0", 1471 + "@eslint/config-helpers": "^0.4.0", 1472 + "@eslint/core": "^0.16.0", 1473 + "@eslint/eslintrc": "^3.3.1", 1474 + "@eslint/js": "9.37.0", 1475 + "@eslint/plugin-kit": "^0.4.0", 1476 + "@humanfs/node": "^0.16.6", 1477 + "@humanwhocodes/module-importer": "^1.0.1", 1478 + "@humanwhocodes/retry": "^0.4.2", 1479 + "@types/estree": "^1.0.6", 1480 + "@types/json-schema": "^7.0.15", 1481 + "ajv": "^6.12.4", 1482 + "chalk": "^4.0.0", 1483 + "cross-spawn": "^7.0.6", 1484 + "debug": "^4.3.2", 1485 + "escape-string-regexp": "^4.0.0", 1486 + "eslint-scope": "^8.4.0", 1487 + "eslint-visitor-keys": "^4.2.1", 1488 + "espree": "^10.4.0", 1489 + "esquery": "^1.5.0", 1490 + "esutils": "^2.0.2", 1491 + "fast-deep-equal": "^3.1.3", 1492 + "file-entry-cache": "^8.0.0", 1493 + "find-up": "^5.0.0", 1494 + "glob-parent": "^6.0.2", 1495 + "ignore": "^5.2.0", 1496 + "imurmurhash": "^0.1.4", 1497 + "is-glob": "^4.0.0", 1498 + "json-stable-stringify-without-jsonify": "^1.0.1", 1499 + "lodash.merge": "^4.6.2", 1500 + "minimatch": "^3.1.2", 1501 + "natural-compare": "^1.4.0", 1502 + "optionator": "^0.9.3" 1503 + }, 1504 + "bin": { 1505 + "eslint": "bin/eslint.js" 1506 + }, 1507 + "engines": { 1508 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1509 + }, 1510 + "funding": { 1511 + "url": "https://eslint.org/donate" 1512 + }, 1513 + "peerDependencies": { 1514 + "jiti": "*" 1515 + }, 1516 + "peerDependenciesMeta": { 1517 + "jiti": { 1518 + "optional": true 1519 + } 1520 + } 1521 + }, 1522 + "node_modules/eslint-plugin-react-hooks": { 1523 + "version": "5.2.0", 1524 + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", 1525 + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", 1526 + "dev": true, 1527 + "license": "MIT", 1528 + "engines": { 1529 + "node": ">=10" 1530 + }, 1531 + "peerDependencies": { 1532 + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" 1533 + } 1534 + }, 1535 + "node_modules/eslint-plugin-react-refresh": { 1536 + "version": "0.4.23", 1537 + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.23.tgz", 1538 + "integrity": "sha512-G4j+rv0NmbIR45kni5xJOrYvCtyD3/7LjpVH8MPPcudXDcNu8gv+4ATTDXTtbRR8rTCM5HxECvCSsRmxKnWDsA==", 1539 + "dev": true, 1540 + "license": "MIT", 1541 + "peerDependencies": { 1542 + "eslint": ">=8.40" 1543 + } 1544 + }, 1545 + "node_modules/eslint-scope": { 1546 + "version": "8.4.0", 1547 + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", 1548 + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", 1549 + "dev": true, 1550 + "license": "BSD-2-Clause", 1551 + "dependencies": { 1552 + "esrecurse": "^4.3.0", 1553 + "estraverse": "^5.2.0" 1554 + }, 1555 + "engines": { 1556 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1557 + }, 1558 + "funding": { 1559 + "url": "https://opencollective.com/eslint" 1560 + } 1561 + }, 1562 + "node_modules/eslint-visitor-keys": { 1563 + "version": "4.2.1", 1564 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", 1565 + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", 1566 + "dev": true, 1567 + "license": "Apache-2.0", 1568 + "engines": { 1569 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1570 + }, 1571 + "funding": { 1572 + "url": "https://opencollective.com/eslint" 1573 + } 1574 + }, 1575 + "node_modules/esm-env": { 1576 + "version": "1.2.2", 1577 + "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", 1578 + "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", 1579 + "license": "MIT" 1580 + }, 1581 + "node_modules/espree": { 1582 + "version": "10.4.0", 1583 + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", 1584 + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", 1585 + "dev": true, 1586 + "license": "BSD-2-Clause", 1587 + "dependencies": { 1588 + "acorn": "^8.15.0", 1589 + "acorn-jsx": "^5.3.2", 1590 + "eslint-visitor-keys": "^4.2.1" 1591 + }, 1592 + "engines": { 1593 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1594 + }, 1595 + "funding": { 1596 + "url": "https://opencollective.com/eslint" 1597 + } 1598 + }, 1599 + "node_modules/esquery": { 1600 + "version": "1.6.0", 1601 + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", 1602 + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", 1603 + "dev": true, 1604 + "license": "BSD-3-Clause", 1605 + "dependencies": { 1606 + "estraverse": "^5.1.0" 1607 + }, 1608 + "engines": { 1609 + "node": ">=0.10" 1610 + } 1611 + }, 1612 + "node_modules/esrecurse": { 1613 + "version": "4.3.0", 1614 + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 1615 + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 1616 + "dev": true, 1617 + "license": "BSD-2-Clause", 1618 + "dependencies": { 1619 + "estraverse": "^5.2.0" 1620 + }, 1621 + "engines": { 1622 + "node": ">=4.0" 1623 + } 1624 + }, 1625 + "node_modules/estraverse": { 1626 + "version": "5.3.0", 1627 + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1628 + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1629 + "dev": true, 1630 + "license": "BSD-2-Clause", 1631 + "engines": { 1632 + "node": ">=4.0" 1633 + } 1634 + }, 1635 + "node_modules/esutils": { 1636 + "version": "2.0.3", 1637 + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1638 + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1639 + "dev": true, 1640 + "license": "BSD-2-Clause", 1641 + "engines": { 1642 + "node": ">=0.10.0" 1643 + } 1644 + }, 1645 + "node_modules/fast-deep-equal": { 1646 + "version": "3.1.3", 1647 + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1648 + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1649 + "dev": true, 1650 + "license": "MIT" 1651 + }, 1652 + "node_modules/fast-glob": { 1653 + "version": "3.3.3", 1654 + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", 1655 + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", 1656 + "dev": true, 1657 + "license": "MIT", 1658 + "dependencies": { 1659 + "@nodelib/fs.stat": "^2.0.2", 1660 + "@nodelib/fs.walk": "^1.2.3", 1661 + "glob-parent": "^5.1.2", 1662 + "merge2": "^1.3.0", 1663 + "micromatch": "^4.0.8" 1664 + }, 1665 + "engines": { 1666 + "node": ">=8.6.0" 1667 + } 1668 + }, 1669 + "node_modules/fast-glob/node_modules/glob-parent": { 1670 + "version": "5.1.2", 1671 + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1672 + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1673 + "dev": true, 1674 + "license": "ISC", 1675 + "dependencies": { 1676 + "is-glob": "^4.0.1" 1677 + }, 1678 + "engines": { 1679 + "node": ">= 6" 1680 + } 1681 + }, 1682 + "node_modules/fast-json-stable-stringify": { 1683 + "version": "2.1.0", 1684 + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1685 + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 1686 + "dev": true, 1687 + "license": "MIT" 1688 + }, 1689 + "node_modules/fast-levenshtein": { 1690 + "version": "2.0.6", 1691 + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1692 + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 1693 + "dev": true, 1694 + "license": "MIT" 1695 + }, 1696 + "node_modules/fastq": { 1697 + "version": "1.19.1", 1698 + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", 1699 + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", 1700 + "dev": true, 1701 + "license": "ISC", 1702 + "dependencies": { 1703 + "reusify": "^1.0.4" 1704 + } 1705 + }, 1706 + "node_modules/file-entry-cache": { 1707 + "version": "8.0.0", 1708 + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", 1709 + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", 1710 + "dev": true, 1711 + "license": "MIT", 1712 + "dependencies": { 1713 + "flat-cache": "^4.0.0" 1714 + }, 1715 + "engines": { 1716 + "node": ">=16.0.0" 1717 + } 1718 + }, 1719 + "node_modules/fill-range": { 1720 + "version": "7.1.1", 1721 + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 1722 + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 1723 + "dev": true, 1724 + "license": "MIT", 1725 + "dependencies": { 1726 + "to-regex-range": "^5.0.1" 1727 + }, 1728 + "engines": { 1729 + "node": ">=8" 1730 + } 1731 + }, 1732 + "node_modules/find-up": { 1733 + "version": "5.0.0", 1734 + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 1735 + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 1736 + "dev": true, 1737 + "license": "MIT", 1738 + "dependencies": { 1739 + "locate-path": "^6.0.0", 1740 + "path-exists": "^4.0.0" 1741 + }, 1742 + "engines": { 1743 + "node": ">=10" 1744 + }, 1745 + "funding": { 1746 + "url": "https://github.com/sponsors/sindresorhus" 1747 + } 1748 + }, 1749 + "node_modules/flat-cache": { 1750 + "version": "4.0.1", 1751 + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", 1752 + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", 1753 + "dev": true, 1754 + "license": "MIT", 1755 + "dependencies": { 1756 + "flatted": "^3.2.9", 1757 + "keyv": "^4.5.4" 1758 + }, 1759 + "engines": { 1760 + "node": ">=16" 1761 + } 1762 + }, 1763 + "node_modules/flatted": { 1764 + "version": "3.3.3", 1765 + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", 1766 + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", 1767 + "dev": true, 1768 + "license": "ISC" 1769 + }, 1770 + "node_modules/fsevents": { 1771 + "version": "2.3.3", 1772 + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1773 + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1774 + "dev": true, 1775 + "hasInstallScript": true, 1776 + "license": "MIT", 1777 + "optional": true, 1778 + "os": [ 1779 + "darwin" 1780 + ], 1781 + "engines": { 1782 + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1783 + } 1784 + }, 1785 + "node_modules/gensync": { 1786 + "version": "1.0.0-beta.2", 1787 + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", 1788 + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", 1789 + "dev": true, 1790 + "license": "MIT", 1791 + "engines": { 1792 + "node": ">=6.9.0" 1793 + } 1794 + }, 1795 + "node_modules/glob-parent": { 1796 + "version": "6.0.2", 1797 + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1798 + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1799 + "dev": true, 1800 + "license": "ISC", 1801 + "dependencies": { 1802 + "is-glob": "^4.0.3" 1803 + }, 1804 + "engines": { 1805 + "node": ">=10.13.0" 1806 + } 1807 + }, 1808 + "node_modules/globals": { 1809 + "version": "16.4.0", 1810 + "resolved": "https://registry.npmjs.org/globals/-/globals-16.4.0.tgz", 1811 + "integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==", 1812 + "dev": true, 1813 + "license": "MIT", 1814 + "engines": { 1815 + "node": ">=18" 1816 + }, 1817 + "funding": { 1818 + "url": "https://github.com/sponsors/sindresorhus" 1819 + } 1820 + }, 1821 + "node_modules/graphemer": { 1822 + "version": "1.4.0", 1823 + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", 1824 + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", 1825 + "dev": true, 1826 + "license": "MIT" 1827 + }, 1828 + "node_modules/has-flag": { 1829 + "version": "4.0.0", 1830 + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1831 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1832 + "dev": true, 1833 + "license": "MIT", 1834 + "engines": { 1835 + "node": ">=8" 1836 + } 1837 + }, 1838 + "node_modules/ignore": { 1839 + "version": "5.3.2", 1840 + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", 1841 + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", 1842 + "dev": true, 1843 + "license": "MIT", 1844 + "engines": { 1845 + "node": ">= 4" 1846 + } 1847 + }, 1848 + "node_modules/import-fresh": { 1849 + "version": "3.3.1", 1850 + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", 1851 + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", 1852 + "dev": true, 1853 + "license": "MIT", 1854 + "dependencies": { 1855 + "parent-module": "^1.0.0", 1856 + "resolve-from": "^4.0.0" 1857 + }, 1858 + "engines": { 1859 + "node": ">=6" 1860 + }, 1861 + "funding": { 1862 + "url": "https://github.com/sponsors/sindresorhus" 1863 + } 1864 + }, 1865 + "node_modules/imurmurhash": { 1866 + "version": "0.1.4", 1867 + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1868 + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 1869 + "dev": true, 1870 + "license": "MIT", 1871 + "engines": { 1872 + "node": ">=0.8.19" 1873 + } 1874 + }, 1875 + "node_modules/is-extglob": { 1876 + "version": "2.1.1", 1877 + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1878 + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1879 + "dev": true, 1880 + "license": "MIT", 1881 + "engines": { 1882 + "node": ">=0.10.0" 1883 + } 1884 + }, 1885 + "node_modules/is-glob": { 1886 + "version": "4.0.3", 1887 + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1888 + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1889 + "dev": true, 1890 + "license": "MIT", 1891 + "dependencies": { 1892 + "is-extglob": "^2.1.1" 1893 + }, 1894 + "engines": { 1895 + "node": ">=0.10.0" 1896 + } 1897 + }, 1898 + "node_modules/is-number": { 1899 + "version": "7.0.0", 1900 + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1901 + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1902 + "dev": true, 1903 + "license": "MIT", 1904 + "engines": { 1905 + "node": ">=0.12.0" 1906 + } 1907 + }, 1908 + "node_modules/isexe": { 1909 + "version": "2.0.0", 1910 + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1911 + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 1912 + "dev": true, 1913 + "license": "ISC" 1914 + }, 1915 + "node_modules/js-tokens": { 1916 + "version": "4.0.0", 1917 + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1918 + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1919 + "dev": true, 1920 + "license": "MIT" 1921 + }, 1922 + "node_modules/js-yaml": { 1923 + "version": "4.1.0", 1924 + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 1925 + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 1926 + "dev": true, 1927 + "license": "MIT", 1928 + "dependencies": { 1929 + "argparse": "^2.0.1" 1930 + }, 1931 + "bin": { 1932 + "js-yaml": "bin/js-yaml.js" 1933 + } 1934 + }, 1935 + "node_modules/jsesc": { 1936 + "version": "3.1.0", 1937 + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", 1938 + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", 1939 + "dev": true, 1940 + "license": "MIT", 1941 + "bin": { 1942 + "jsesc": "bin/jsesc" 1943 + }, 1944 + "engines": { 1945 + "node": ">=6" 1946 + } 1947 + }, 1948 + "node_modules/json-buffer": { 1949 + "version": "3.0.1", 1950 + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 1951 + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 1952 + "dev": true, 1953 + "license": "MIT" 1954 + }, 1955 + "node_modules/json-schema-traverse": { 1956 + "version": "0.4.1", 1957 + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1958 + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1959 + "dev": true, 1960 + "license": "MIT" 1961 + }, 1962 + "node_modules/json-stable-stringify-without-jsonify": { 1963 + "version": "1.0.1", 1964 + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 1965 + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 1966 + "dev": true, 1967 + "license": "MIT" 1968 + }, 1969 + "node_modules/json5": { 1970 + "version": "2.2.3", 1971 + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", 1972 + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 1973 + "dev": true, 1974 + "license": "MIT", 1975 + "bin": { 1976 + "json5": "lib/cli.js" 1977 + }, 1978 + "engines": { 1979 + "node": ">=6" 1980 + } 1981 + }, 1982 + "node_modules/keyv": { 1983 + "version": "4.5.4", 1984 + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", 1985 + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", 1986 + "dev": true, 1987 + "license": "MIT", 1988 + "dependencies": { 1989 + "json-buffer": "3.0.1" 1990 + } 1991 + }, 1992 + "node_modules/levn": { 1993 + "version": "0.4.1", 1994 + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 1995 + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 1996 + "dev": true, 1997 + "license": "MIT", 1998 + "dependencies": { 1999 + "prelude-ls": "^1.2.1", 2000 + "type-check": "~0.4.0" 2001 + }, 2002 + "engines": { 2003 + "node": ">= 0.8.0" 2004 + } 2005 + }, 2006 + "node_modules/lightningcss": { 2007 + "version": "1.30.2", 2008 + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz", 2009 + "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==", 2010 + "dev": true, 2011 + "license": "MPL-2.0", 2012 + "dependencies": { 2013 + "detect-libc": "^2.0.3" 2014 + }, 2015 + "engines": { 2016 + "node": ">= 12.0.0" 2017 + }, 2018 + "funding": { 2019 + "type": "opencollective", 2020 + "url": "https://opencollective.com/parcel" 2021 + }, 2022 + "optionalDependencies": { 2023 + "lightningcss-android-arm64": "1.30.2", 2024 + "lightningcss-darwin-arm64": "1.30.2", 2025 + "lightningcss-darwin-x64": "1.30.2", 2026 + "lightningcss-freebsd-x64": "1.30.2", 2027 + "lightningcss-linux-arm-gnueabihf": "1.30.2", 2028 + "lightningcss-linux-arm64-gnu": "1.30.2", 2029 + "lightningcss-linux-arm64-musl": "1.30.2", 2030 + "lightningcss-linux-x64-gnu": "1.30.2", 2031 + "lightningcss-linux-x64-musl": "1.30.2", 2032 + "lightningcss-win32-arm64-msvc": "1.30.2", 2033 + "lightningcss-win32-x64-msvc": "1.30.2" 2034 + } 2035 + }, 2036 + "node_modules/lightningcss-darwin-arm64": { 2037 + "version": "1.30.2", 2038 + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz", 2039 + "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==", 2040 + "cpu": [ 2041 + "arm64" 2042 + ], 2043 + "dev": true, 2044 + "license": "MPL-2.0", 2045 + "optional": true, 2046 + "os": [ 2047 + "darwin" 2048 + ], 2049 + "engines": { 2050 + "node": ">= 12.0.0" 2051 + }, 2052 + "funding": { 2053 + "type": "opencollective", 2054 + "url": "https://opencollective.com/parcel" 2055 + } 2056 + }, 2057 + "node_modules/locate-path": { 2058 + "version": "6.0.0", 2059 + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 2060 + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 2061 + "dev": true, 2062 + "license": "MIT", 2063 + "dependencies": { 2064 + "p-locate": "^5.0.0" 2065 + }, 2066 + "engines": { 2067 + "node": ">=10" 2068 + }, 2069 + "funding": { 2070 + "url": "https://github.com/sponsors/sindresorhus" 2071 + } 2072 + }, 2073 + "node_modules/lodash.merge": { 2074 + "version": "4.6.2", 2075 + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 2076 + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 2077 + "dev": true, 2078 + "license": "MIT" 2079 + }, 2080 + "node_modules/lru-cache": { 2081 + "version": "5.1.1", 2082 + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", 2083 + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 2084 + "dev": true, 2085 + "license": "ISC", 2086 + "dependencies": { 2087 + "yallist": "^3.0.2" 2088 + } 2089 + }, 2090 + "node_modules/merge2": { 2091 + "version": "1.4.1", 2092 + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 2093 + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 2094 + "dev": true, 2095 + "license": "MIT", 2096 + "engines": { 2097 + "node": ">= 8" 2098 + } 2099 + }, 2100 + "node_modules/micromatch": { 2101 + "version": "4.0.8", 2102 + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", 2103 + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", 2104 + "dev": true, 2105 + "license": "MIT", 2106 + "dependencies": { 2107 + "braces": "^3.0.3", 2108 + "picomatch": "^2.3.1" 2109 + }, 2110 + "engines": { 2111 + "node": ">=8.6" 2112 + } 2113 + }, 2114 + "node_modules/minimatch": { 2115 + "version": "3.1.2", 2116 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 2117 + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 2118 + "dev": true, 2119 + "license": "ISC", 2120 + "dependencies": { 2121 + "brace-expansion": "^1.1.7" 2122 + }, 2123 + "engines": { 2124 + "node": "*" 2125 + } 2126 + }, 2127 + "node_modules/ms": { 2128 + "version": "2.1.3", 2129 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 2130 + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 2131 + "dev": true, 2132 + "license": "MIT" 2133 + }, 2134 + "node_modules/nanoid": { 2135 + "version": "3.3.11", 2136 + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", 2137 + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", 2138 + "dev": true, 2139 + "funding": [ 2140 + { 2141 + "type": "github", 2142 + "url": "https://github.com/sponsors/ai" 2143 + } 2144 + ], 2145 + "license": "MIT", 2146 + "bin": { 2147 + "nanoid": "bin/nanoid.cjs" 2148 + }, 2149 + "engines": { 2150 + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 2151 + } 2152 + }, 2153 + "node_modules/natural-compare": { 2154 + "version": "1.4.0", 2155 + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 2156 + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 2157 + "dev": true, 2158 + "license": "MIT" 2159 + }, 2160 + "node_modules/node-releases": { 2161 + "version": "2.0.23", 2162 + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.23.tgz", 2163 + "integrity": "sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg==", 2164 + "dev": true, 2165 + "license": "MIT" 2166 + }, 2167 + "node_modules/optionator": { 2168 + "version": "0.9.4", 2169 + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", 2170 + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", 2171 + "dev": true, 2172 + "license": "MIT", 2173 + "dependencies": { 2174 + "deep-is": "^0.1.3", 2175 + "fast-levenshtein": "^2.0.6", 2176 + "levn": "^0.4.1", 2177 + "prelude-ls": "^1.2.1", 2178 + "type-check": "^0.4.0", 2179 + "word-wrap": "^1.2.5" 2180 + }, 2181 + "engines": { 2182 + "node": ">= 0.8.0" 2183 + } 2184 + }, 2185 + "node_modules/p-limit": { 2186 + "version": "3.1.0", 2187 + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 2188 + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 2189 + "dev": true, 2190 + "license": "MIT", 2191 + "dependencies": { 2192 + "yocto-queue": "^0.1.0" 2193 + }, 2194 + "engines": { 2195 + "node": ">=10" 2196 + }, 2197 + "funding": { 2198 + "url": "https://github.com/sponsors/sindresorhus" 2199 + } 2200 + }, 2201 + "node_modules/p-locate": { 2202 + "version": "5.0.0", 2203 + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 2204 + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 2205 + "dev": true, 2206 + "license": "MIT", 2207 + "dependencies": { 2208 + "p-limit": "^3.0.2" 2209 + }, 2210 + "engines": { 2211 + "node": ">=10" 2212 + }, 2213 + "funding": { 2214 + "url": "https://github.com/sponsors/sindresorhus" 2215 + } 2216 + }, 2217 + "node_modules/parent-module": { 2218 + "version": "1.0.1", 2219 + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 2220 + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 2221 + "dev": true, 2222 + "license": "MIT", 2223 + "dependencies": { 2224 + "callsites": "^3.0.0" 2225 + }, 2226 + "engines": { 2227 + "node": ">=6" 2228 + } 2229 + }, 2230 + "node_modules/path-exists": { 2231 + "version": "4.0.0", 2232 + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 2233 + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 2234 + "dev": true, 2235 + "license": "MIT", 2236 + "engines": { 2237 + "node": ">=8" 2238 + } 2239 + }, 2240 + "node_modules/path-key": { 2241 + "version": "3.1.1", 2242 + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 2243 + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 2244 + "dev": true, 2245 + "license": "MIT", 2246 + "engines": { 2247 + "node": ">=8" 2248 + } 2249 + }, 2250 + "node_modules/picocolors": { 2251 + "version": "1.1.1", 2252 + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 2253 + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 2254 + "dev": true, 2255 + "license": "ISC" 2256 + }, 2257 + "node_modules/picomatch": { 2258 + "version": "2.3.1", 2259 + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 2260 + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 2261 + "dev": true, 2262 + "license": "MIT", 2263 + "engines": { 2264 + "node": ">=8.6" 2265 + }, 2266 + "funding": { 2267 + "url": "https://github.com/sponsors/jonschlinkert" 2268 + } 2269 + }, 2270 + "node_modules/postcss": { 2271 + "version": "8.5.6", 2272 + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", 2273 + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", 2274 + "dev": true, 2275 + "funding": [ 2276 + { 2277 + "type": "opencollective", 2278 + "url": "https://opencollective.com/postcss/" 2279 + }, 2280 + { 2281 + "type": "tidelift", 2282 + "url": "https://tidelift.com/funding/github/npm/postcss" 2283 + }, 2284 + { 2285 + "type": "github", 2286 + "url": "https://github.com/sponsors/ai" 2287 + } 2288 + ], 2289 + "license": "MIT", 2290 + "dependencies": { 2291 + "nanoid": "^3.3.11", 2292 + "picocolors": "^1.1.1", 2293 + "source-map-js": "^1.2.1" 2294 + }, 2295 + "engines": { 2296 + "node": "^10 || ^12 || >=14" 2297 + } 2298 + }, 2299 + "node_modules/prelude-ls": { 2300 + "version": "1.2.1", 2301 + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 2302 + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 2303 + "dev": true, 2304 + "license": "MIT", 2305 + "engines": { 2306 + "node": ">= 0.8.0" 2307 + } 2308 + }, 2309 + "node_modules/punycode": { 2310 + "version": "2.3.1", 2311 + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 2312 + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 2313 + "dev": true, 2314 + "license": "MIT", 2315 + "engines": { 2316 + "node": ">=6" 2317 + } 2318 + }, 2319 + "node_modules/queue-microtask": { 2320 + "version": "1.2.3", 2321 + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 2322 + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 2323 + "dev": true, 2324 + "funding": [ 2325 + { 2326 + "type": "github", 2327 + "url": "https://github.com/sponsors/feross" 2328 + }, 2329 + { 2330 + "type": "patreon", 2331 + "url": "https://www.patreon.com/feross" 2332 + }, 2333 + { 2334 + "type": "consulting", 2335 + "url": "https://feross.org/support" 2336 + } 2337 + ], 2338 + "license": "MIT" 2339 + }, 2340 + "node_modules/react": { 2341 + "version": "19.2.0", 2342 + "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", 2343 + "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", 2344 + "dev": true, 2345 + "license": "MIT", 2346 + "engines": { 2347 + "node": ">=0.10.0" 2348 + } 2349 + }, 2350 + "node_modules/react-dom": { 2351 + "version": "19.2.0", 2352 + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", 2353 + "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", 2354 + "dev": true, 2355 + "license": "MIT", 2356 + "dependencies": { 2357 + "scheduler": "^0.27.0" 2358 + }, 2359 + "peerDependencies": { 2360 + "react": "^19.2.0" 2361 + } 2362 + }, 2363 + "node_modules/react-refresh": { 2364 + "version": "0.17.0", 2365 + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", 2366 + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", 2367 + "dev": true, 2368 + "license": "MIT", 2369 + "engines": { 2370 + "node": ">=0.10.0" 2371 + } 2372 + }, 2373 + "node_modules/resolve-from": { 2374 + "version": "4.0.0", 2375 + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 2376 + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 2377 + "dev": true, 2378 + "license": "MIT", 2379 + "engines": { 2380 + "node": ">=4" 2381 + } 2382 + }, 2383 + "node_modules/reusify": { 2384 + "version": "1.1.0", 2385 + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", 2386 + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", 2387 + "dev": true, 2388 + "license": "MIT", 2389 + "engines": { 2390 + "iojs": ">=1.0.0", 2391 + "node": ">=0.10.0" 2392 + } 2393 + }, 2394 + "node_modules/rolldown": { 2395 + "version": "1.0.0-beta.41", 2396 + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-beta.41.tgz", 2397 + "integrity": "sha512-U+NPR0Bkg3wm61dteD2L4nAM1U9dtaqVrpDXwC36IKRHpEO/Ubpid4Nijpa2imPchcVNHfxVFwSSMJdwdGFUbg==", 2398 + "dev": true, 2399 + "license": "MIT", 2400 + "dependencies": { 2401 + "@oxc-project/types": "=0.93.0", 2402 + "@rolldown/pluginutils": "1.0.0-beta.41", 2403 + "ansis": "=4.2.0" 2404 + }, 2405 + "bin": { 2406 + "rolldown": "bin/cli.mjs" 2407 + }, 2408 + "engines": { 2409 + "node": "^20.19.0 || >=22.12.0" 2410 + }, 2411 + "optionalDependencies": { 2412 + "@rolldown/binding-android-arm64": "1.0.0-beta.41", 2413 + "@rolldown/binding-darwin-arm64": "1.0.0-beta.41", 2414 + "@rolldown/binding-darwin-x64": "1.0.0-beta.41", 2415 + "@rolldown/binding-freebsd-x64": "1.0.0-beta.41", 2416 + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-beta.41", 2417 + "@rolldown/binding-linux-arm64-gnu": "1.0.0-beta.41", 2418 + "@rolldown/binding-linux-arm64-musl": "1.0.0-beta.41", 2419 + "@rolldown/binding-linux-x64-gnu": "1.0.0-beta.41", 2420 + "@rolldown/binding-linux-x64-musl": "1.0.0-beta.41", 2421 + "@rolldown/binding-openharmony-arm64": "1.0.0-beta.41", 2422 + "@rolldown/binding-wasm32-wasi": "1.0.0-beta.41", 2423 + "@rolldown/binding-win32-arm64-msvc": "1.0.0-beta.41", 2424 + "@rolldown/binding-win32-ia32-msvc": "1.0.0-beta.41", 2425 + "@rolldown/binding-win32-x64-msvc": "1.0.0-beta.41" 2426 + } 2427 + }, 2428 + "node_modules/rolldown/node_modules/@rolldown/pluginutils": { 2429 + "version": "1.0.0-beta.41", 2430 + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.41.tgz", 2431 + "integrity": "sha512-ycMEPrS3StOIeb87BT3/+bu+blEtyvwQ4zmo2IcJQy0Rd1DAAhKksA0iUZ3MYSpJtjlPhg0Eo6mvVS6ggPhRbw==", 2432 + "dev": true, 2433 + "license": "MIT" 2434 + }, 2435 + "node_modules/run-parallel": { 2436 + "version": "1.2.0", 2437 + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 2438 + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 2439 + "dev": true, 2440 + "funding": [ 2441 + { 2442 + "type": "github", 2443 + "url": "https://github.com/sponsors/feross" 2444 + }, 2445 + { 2446 + "type": "patreon", 2447 + "url": "https://www.patreon.com/feross" 2448 + }, 2449 + { 2450 + "type": "consulting", 2451 + "url": "https://feross.org/support" 2452 + } 2453 + ], 2454 + "license": "MIT", 2455 + "dependencies": { 2456 + "queue-microtask": "^1.2.2" 2457 + } 2458 + }, 2459 + "node_modules/scheduler": { 2460 + "version": "0.27.0", 2461 + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", 2462 + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", 2463 + "dev": true, 2464 + "license": "MIT" 2465 + }, 2466 + "node_modules/semver": { 2467 + "version": "6.3.1", 2468 + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 2469 + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 2470 + "dev": true, 2471 + "license": "ISC", 2472 + "bin": { 2473 + "semver": "bin/semver.js" 2474 + } 2475 + }, 2476 + "node_modules/shebang-command": { 2477 + "version": "2.0.0", 2478 + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 2479 + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 2480 + "dev": true, 2481 + "license": "MIT", 2482 + "dependencies": { 2483 + "shebang-regex": "^3.0.0" 2484 + }, 2485 + "engines": { 2486 + "node": ">=8" 2487 + } 2488 + }, 2489 + "node_modules/shebang-regex": { 2490 + "version": "3.0.0", 2491 + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 2492 + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 2493 + "dev": true, 2494 + "license": "MIT", 2495 + "engines": { 2496 + "node": ">=8" 2497 + } 2498 + }, 2499 + "node_modules/source-map-js": { 2500 + "version": "1.2.1", 2501 + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 2502 + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 2503 + "dev": true, 2504 + "license": "BSD-3-Clause", 2505 + "engines": { 2506 + "node": ">=0.10.0" 2507 + } 2508 + }, 2509 + "node_modules/strip-json-comments": { 2510 + "version": "3.1.1", 2511 + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 2512 + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 2513 + "dev": true, 2514 + "license": "MIT", 2515 + "engines": { 2516 + "node": ">=8" 2517 + }, 2518 + "funding": { 2519 + "url": "https://github.com/sponsors/sindresorhus" 2520 + } 2521 + }, 2522 + "node_modules/supports-color": { 2523 + "version": "7.2.0", 2524 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2525 + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2526 + "dev": true, 2527 + "license": "MIT", 2528 + "dependencies": { 2529 + "has-flag": "^4.0.0" 2530 + }, 2531 + "engines": { 2532 + "node": ">=8" 2533 + } 2534 + }, 2535 + "node_modules/tinyglobby": { 2536 + "version": "0.2.15", 2537 + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", 2538 + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", 2539 + "dev": true, 2540 + "license": "MIT", 2541 + "dependencies": { 2542 + "fdir": "^6.5.0", 2543 + "picomatch": "^4.0.3" 2544 + }, 2545 + "engines": { 2546 + "node": ">=12.0.0" 2547 + }, 2548 + "funding": { 2549 + "url": "https://github.com/sponsors/SuperchupuDev" 2550 + } 2551 + }, 2552 + "node_modules/tinyglobby/node_modules/fdir": { 2553 + "version": "6.5.0", 2554 + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", 2555 + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", 2556 + "dev": true, 2557 + "license": "MIT", 2558 + "engines": { 2559 + "node": ">=12.0.0" 2560 + }, 2561 + "peerDependencies": { 2562 + "picomatch": "^3 || ^4" 2563 + }, 2564 + "peerDependenciesMeta": { 2565 + "picomatch": { 2566 + "optional": true 2567 + } 2568 + } 2569 + }, 2570 + "node_modules/tinyglobby/node_modules/picomatch": { 2571 + "version": "4.0.3", 2572 + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", 2573 + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", 2574 + "dev": true, 2575 + "license": "MIT", 2576 + "engines": { 2577 + "node": ">=12" 2578 + }, 2579 + "funding": { 2580 + "url": "https://github.com/sponsors/jonschlinkert" 2581 + } 2582 + }, 2583 + "node_modules/to-regex-range": { 2584 + "version": "5.0.1", 2585 + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2586 + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2587 + "dev": true, 2588 + "license": "MIT", 2589 + "dependencies": { 2590 + "is-number": "^7.0.0" 2591 + }, 2592 + "engines": { 2593 + "node": ">=8.0" 2594 + } 2595 + }, 2596 + "node_modules/ts-api-utils": { 2597 + "version": "2.1.0", 2598 + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", 2599 + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", 2600 + "dev": true, 2601 + "license": "MIT", 2602 + "engines": { 2603 + "node": ">=18.12" 2604 + }, 2605 + "peerDependencies": { 2606 + "typescript": ">=4.8.4" 2607 + } 2608 + }, 2609 + "node_modules/type-check": { 2610 + "version": "0.4.0", 2611 + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 2612 + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 2613 + "dev": true, 2614 + "license": "MIT", 2615 + "dependencies": { 2616 + "prelude-ls": "^1.2.1" 2617 + }, 2618 + "engines": { 2619 + "node": ">= 0.8.0" 2620 + } 2621 + }, 2622 + "node_modules/typescript": { 2623 + "version": "5.9.3", 2624 + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", 2625 + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", 2626 + "dev": true, 2627 + "license": "Apache-2.0", 2628 + "bin": { 2629 + "tsc": "bin/tsc", 2630 + "tsserver": "bin/tsserver" 2631 + }, 2632 + "engines": { 2633 + "node": ">=14.17" 2634 + } 2635 + }, 2636 + "node_modules/typescript-eslint": { 2637 + "version": "8.46.0", 2638 + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.46.0.tgz", 2639 + "integrity": "sha512-6+ZrB6y2bT2DX3K+Qd9vn7OFOJR+xSLDj+Aw/N3zBwUt27uTw2sw2TE2+UcY1RiyBZkaGbTkVg9SSdPNUG6aUw==", 2640 + "dev": true, 2641 + "license": "MIT", 2642 + "dependencies": { 2643 + "@typescript-eslint/eslint-plugin": "8.46.0", 2644 + "@typescript-eslint/parser": "8.46.0", 2645 + "@typescript-eslint/typescript-estree": "8.46.0", 2646 + "@typescript-eslint/utils": "8.46.0" 2647 + }, 2648 + "engines": { 2649 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2650 + }, 2651 + "funding": { 2652 + "type": "opencollective", 2653 + "url": "https://opencollective.com/typescript-eslint" 2654 + }, 2655 + "peerDependencies": { 2656 + "eslint": "^8.57.0 || ^9.0.0", 2657 + "typescript": ">=4.8.4 <6.0.0" 2658 + } 2659 + }, 2660 + "node_modules/undici-types": { 2661 + "version": "7.14.0", 2662 + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.14.0.tgz", 2663 + "integrity": "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==", 2664 + "dev": true, 2665 + "license": "MIT" 2666 + }, 2667 + "node_modules/update-browserslist-db": { 2668 + "version": "1.1.3", 2669 + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", 2670 + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", 2671 + "dev": true, 2672 + "funding": [ 2673 + { 2674 + "type": "opencollective", 2675 + "url": "https://opencollective.com/browserslist" 2676 + }, 2677 + { 2678 + "type": "tidelift", 2679 + "url": "https://tidelift.com/funding/github/npm/browserslist" 2680 + }, 2681 + { 2682 + "type": "github", 2683 + "url": "https://github.com/sponsors/ai" 2684 + } 2685 + ], 2686 + "license": "MIT", 2687 + "dependencies": { 2688 + "escalade": "^3.2.0", 2689 + "picocolors": "^1.1.1" 2690 + }, 2691 + "bin": { 2692 + "update-browserslist-db": "cli.js" 2693 + }, 2694 + "peerDependencies": { 2695 + "browserslist": ">= 4.21.0" 2696 + } 2697 + }, 2698 + "node_modules/uri-js": { 2699 + "version": "4.4.1", 2700 + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 2701 + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 2702 + "dev": true, 2703 + "license": "BSD-2-Clause", 2704 + "dependencies": { 2705 + "punycode": "^2.1.0" 2706 + } 2707 + }, 2708 + "node_modules/vite": { 2709 + "name": "rolldown-vite", 2710 + "version": "7.1.14", 2711 + "resolved": "https://registry.npmjs.org/rolldown-vite/-/rolldown-vite-7.1.14.tgz", 2712 + "integrity": "sha512-eSiiRJmovt8qDJkGyZuLnbxAOAdie6NCmmd0NkTC0RJI9duiSBTfr8X2mBYJOUFzxQa2USaHmL99J9uMxkjCyw==", 2713 + "dev": true, 2714 + "license": "MIT", 2715 + "dependencies": { 2716 + "@oxc-project/runtime": "0.92.0", 2717 + "fdir": "^6.5.0", 2718 + "lightningcss": "^1.30.1", 2719 + "picomatch": "^4.0.3", 2720 + "postcss": "^8.5.6", 2721 + "rolldown": "1.0.0-beta.41", 2722 + "tinyglobby": "^0.2.15" 2723 + }, 2724 + "bin": { 2725 + "vite": "bin/vite.js" 2726 + }, 2727 + "engines": { 2728 + "node": "^20.19.0 || >=22.12.0" 2729 + }, 2730 + "funding": { 2731 + "url": "https://github.com/vitejs/vite?sponsor=1" 2732 + }, 2733 + "optionalDependencies": { 2734 + "fsevents": "~2.3.3" 2735 + }, 2736 + "peerDependencies": { 2737 + "@types/node": "^20.19.0 || >=22.12.0", 2738 + "esbuild": "^0.25.0", 2739 + "jiti": ">=1.21.0", 2740 + "less": "^4.0.0", 2741 + "sass": "^1.70.0", 2742 + "sass-embedded": "^1.70.0", 2743 + "stylus": ">=0.54.8", 2744 + "sugarss": "^5.0.0", 2745 + "terser": "^5.16.0", 2746 + "tsx": "^4.8.1", 2747 + "yaml": "^2.4.2" 2748 + }, 2749 + "peerDependenciesMeta": { 2750 + "@types/node": { 2751 + "optional": true 2752 + }, 2753 + "esbuild": { 2754 + "optional": true 2755 + }, 2756 + "jiti": { 2757 + "optional": true 2758 + }, 2759 + "less": { 2760 + "optional": true 2761 + }, 2762 + "sass": { 2763 + "optional": true 2764 + }, 2765 + "sass-embedded": { 2766 + "optional": true 2767 + }, 2768 + "stylus": { 2769 + "optional": true 2770 + }, 2771 + "sugarss": { 2772 + "optional": true 2773 + }, 2774 + "terser": { 2775 + "optional": true 2776 + }, 2777 + "tsx": { 2778 + "optional": true 2779 + }, 2780 + "yaml": { 2781 + "optional": true 2782 + } 2783 + } 2784 + }, 2785 + "node_modules/vite/node_modules/fdir": { 2786 + "version": "6.5.0", 2787 + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", 2788 + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", 2789 + "dev": true, 2790 + "license": "MIT", 2791 + "engines": { 2792 + "node": ">=12.0.0" 2793 + }, 2794 + "peerDependencies": { 2795 + "picomatch": "^3 || ^4" 2796 + }, 2797 + "peerDependenciesMeta": { 2798 + "picomatch": { 2799 + "optional": true 2800 + } 2801 + } 2802 + }, 2803 + "node_modules/vite/node_modules/picomatch": { 2804 + "version": "4.0.3", 2805 + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", 2806 + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", 2807 + "dev": true, 2808 + "license": "MIT", 2809 + "engines": { 2810 + "node": ">=12" 2811 + }, 2812 + "funding": { 2813 + "url": "https://github.com/sponsors/jonschlinkert" 2814 + } 2815 + }, 2816 + "node_modules/which": { 2817 + "version": "2.0.2", 2818 + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 2819 + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 2820 + "dev": true, 2821 + "license": "ISC", 2822 + "dependencies": { 2823 + "isexe": "^2.0.0" 2824 + }, 2825 + "bin": { 2826 + "node-which": "bin/node-which" 2827 + }, 2828 + "engines": { 2829 + "node": ">= 8" 2830 + } 2831 + }, 2832 + "node_modules/word-wrap": { 2833 + "version": "1.2.5", 2834 + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", 2835 + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", 2836 + "dev": true, 2837 + "license": "MIT", 2838 + "engines": { 2839 + "node": ">=0.10.0" 2840 + } 2841 + }, 2842 + "node_modules/yallist": { 2843 + "version": "3.1.1", 2844 + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 2845 + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", 2846 + "dev": true, 2847 + "license": "ISC" 2848 + }, 2849 + "node_modules/yocto-queue": { 2850 + "version": "0.1.0", 2851 + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 2852 + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 2853 + "dev": true, 2854 + "license": "MIT", 2855 + "engines": { 2856 + "node": ">=10" 2857 + }, 2858 + "funding": { 2859 + "url": "https://github.com/sponsors/sindresorhus" 2860 + } 2861 + } 2862 + } 2863 + }
+67
package.json
··· 1 + { 2 + "name": "atproto-ui", 3 + "version": "0.1.1", 4 + "type": "module", 5 + "description": "React components and hooks for rendering AT Protocol records.", 6 + "main": "./lib-dist/index.js", 7 + "module": "./lib-dist/index.js", 8 + "types": "./lib-dist/index.d.ts", 9 + "exports": { 10 + ".": { 11 + "types": "./lib-dist/index.d.ts", 12 + "import": "./lib-dist/index.js", 13 + "default": "./lib-dist/index.js" 14 + }, 15 + "./styles/highlight.css": "./lib/styles/highlight.css" 16 + }, 17 + "files": [ 18 + "lib-dist", 19 + "lib/styles", 20 + "README.md" 21 + ], 22 + "sideEffects": [ 23 + "./lib/styles/highlight.css" 24 + ], 25 + "scripts": { 26 + "dev": "vite", 27 + "build": "tsc -b && vite build", 28 + "lint": "eslint .", 29 + "preview": "vite preview", 30 + "prepublishOnly": "npm run build" 31 + }, 32 + "peerDependencies": { 33 + "react": "^18.2.0 || ^19.0.0", 34 + "react-dom": "^18.2.0 || ^19.0.0" 35 + }, 36 + "peerDependenciesMeta": { 37 + "react-dom": { 38 + "optional": true 39 + } 40 + }, 41 + "dependencies": { 42 + "@atcute/atproto": "^3.1.7", 43 + "@atcute/bluesky": "^3.2.3", 44 + "@atcute/client": "^4.0.3", 45 + "@atcute/identity-resolver": "^1.1.3", 46 + "@atcute/tangled": "^1.0.6" 47 + }, 48 + "devDependencies": { 49 + "@eslint/js": "^9.36.0", 50 + "@types/node": "^24.6.0", 51 + "@types/react": "^19.1.16", 52 + "@types/react-dom": "^19.1.9", 53 + "@vitejs/plugin-react": "^5.0.4", 54 + "eslint": "^9.36.0", 55 + "eslint-plugin-react-hooks": "^5.2.0", 56 + "eslint-plugin-react-refresh": "^0.4.22", 57 + "globals": "^16.4.0", 58 + "react": "^19.1.1", 59 + "react-dom": "^19.1.1", 60 + "typescript": "~5.9.3", 61 + "typescript-eslint": "^8.45.0", 62 + "vite": "npm:rolldown-vite@7.1.14" 63 + }, 64 + "overrides": { 65 + "vite": "npm:rolldown-vite@7.1.14" 66 + } 67 + }
+385
src/App.tsx
··· 1 + import React, { useState, useCallback, useEffect, useMemo, useRef } from 'react'; 2 + import { AtProtoProvider } from '../lib/providers/AtProtoProvider'; 3 + import { AtProtoRecord } from '../lib/core/AtProtoRecord'; 4 + import { TangledString } from '../lib/components/TangledString'; 5 + import { LeafletDocument } from '../lib/components/LeafletDocument'; 6 + import { BlueskyProfile } from '../lib/components/BlueskyProfile'; 7 + import { BlueskyPost, BLUESKY_POST_COLLECTION } from '../lib/components/BlueskyPost'; 8 + import { BlueskyPostList } from '../lib/components/BlueskyPostList'; 9 + import { BlueskyQuotePost } from '../lib/components/BlueskyQuotePost'; 10 + import { useDidResolution } from '../lib/hooks/useDidResolution'; 11 + import { useLatestRecord } from '../lib/hooks/useLatestRecord'; 12 + import { ColorSchemeToggle } from '../lib/components/ColorSchemeToggle.tsx'; 13 + import { useColorScheme, type ColorSchemePreference } from '../lib/hooks/useColorScheme'; 14 + import type { FeedPostRecord } from '../lib/types/bluesky'; 15 + 16 + const COLOR_SCHEME_STORAGE_KEY = 'atproto-ui-color-scheme'; 17 + 18 + const basicUsageSnippet = `import { AtProtoProvider, BlueskyPost } from 'atproto-ui'; 19 + 20 + export function App() { 21 + return ( 22 + <AtProtoProvider> 23 + <BlueskyPost did="did:plc:example" rkey="3k2aexample" /> 24 + </AtProtoProvider> 25 + ); 26 + }`; 27 + 28 + const customComponentSnippet = `import { useLatestRecord, useColorScheme, AtProtoRecord } from 'atproto-ui'; 29 + import type { FeedPostRecord } from 'atproto-ui'; 30 + 31 + const LatestPostSummary: React.FC<{ did: string }> = ({ did }) => { 32 + const scheme = useColorScheme('system'); 33 + const { rkey, loading, error } = useLatestRecord<FeedPostRecord>(did, 'app.bsky.feed.post'); 34 + 35 + if (loading) return <span>Loading…</span>; 36 + if (error || !rkey) return <span>No post yet.</span>; 37 + 38 + return ( 39 + <AtProtoRecord<FeedPostRecord> 40 + did={did} 41 + collection="app.bsky.feed.post" 42 + rkey={rkey} 43 + renderer={({ record }) => ( 44 + <article data-color-scheme={scheme}> 45 + <strong>{record?.text ?? 'Empty post'}</strong> 46 + </article> 47 + )} 48 + /> 49 + ); 50 + };`; 51 + 52 + const codeBlockBase: React.CSSProperties = { 53 + fontFamily: 'Menlo, Consolas, "SFMono-Regular", ui-monospace, monospace', 54 + fontSize: 12, 55 + whiteSpace: 'pre', 56 + overflowX: 'auto', 57 + borderRadius: 10, 58 + padding: '12px 14px', 59 + lineHeight: 1.6 60 + }; 61 + 62 + const FullDemo: React.FC = () => { 63 + const handleInputRef = useRef<HTMLInputElement | null>(null); 64 + const [submitted, setSubmitted] = useState<string | null>(null); 65 + const [colorSchemePreference, setColorSchemePreference] = useState<ColorSchemePreference>(() => { 66 + if (typeof window === 'undefined') return 'system'; 67 + try { 68 + const stored = window.localStorage.getItem(COLOR_SCHEME_STORAGE_KEY); 69 + if (stored === 'light' || stored === 'dark' || stored === 'system') return stored; 70 + } catch { 71 + /* ignore */ 72 + } 73 + return 'system'; 74 + }); 75 + const scheme = useColorScheme(colorSchemePreference); 76 + const { did, loading: resolvingDid } = useDidResolution(submitted ?? undefined); 77 + const onSubmit = useCallback<React.FormEventHandler>((e) => { 78 + e.preventDefault(); 79 + const rawValue = handleInputRef.current?.value; 80 + const nextValue = rawValue?.trim(); 81 + if (!nextValue) return; 82 + if (handleInputRef.current) { 83 + handleInputRef.current.value = nextValue; 84 + } 85 + setSubmitted(nextValue); 86 + }, []); 87 + 88 + useEffect(() => { 89 + if (typeof window === 'undefined') return; 90 + try { 91 + window.localStorage.setItem(COLOR_SCHEME_STORAGE_KEY, colorSchemePreference); 92 + } catch { 93 + /* ignore */ 94 + } 95 + }, [colorSchemePreference]); 96 + 97 + useEffect(() => { 98 + if (typeof document === 'undefined') return; 99 + const root = document.documentElement; 100 + const body = document.body; 101 + const prevScheme = root.dataset.colorScheme; 102 + const prevBg = body.style.backgroundColor; 103 + const prevColor = body.style.color; 104 + root.dataset.colorScheme = scheme; 105 + body.style.backgroundColor = scheme === 'dark' ? '#020617' : '#f8fafc'; 106 + body.style.color = scheme === 'dark' ? '#e2e8f0' : '#0f172a'; 107 + return () => { 108 + root.dataset.colorScheme = prevScheme ?? ''; 109 + body.style.backgroundColor = prevBg; 110 + body.style.color = prevColor; 111 + }; 112 + }, [scheme]); 113 + 114 + const showHandle = submitted && !submitted.startsWith('did:') ? submitted : undefined; 115 + 116 + const mutedTextColor = useMemo(() => (scheme === 'dark' ? '#94a3b8' : '#555'), [scheme]); 117 + const panelStyle = useMemo<React.CSSProperties>(() => ({ 118 + display: 'flex', 119 + flexDirection: 'column', 120 + gap: 8, 121 + padding: 10, 122 + borderRadius: 12, 123 + borderColor: scheme === 'dark' ? '#1e293b' : '#e2e8f0', 124 + }), [scheme]); 125 + const baseTextColor = useMemo(() => (scheme === 'dark' ? '#e2e8f0' : '#0f172a'), [scheme]); 126 + const gistPanelStyle = useMemo<React.CSSProperties>(() => ({ 127 + ...panelStyle, 128 + padding: 0, 129 + border: 'none', 130 + background: 'transparent', 131 + backdropFilter: 'none', 132 + marginTop: 32 133 + }), [panelStyle]); 134 + const leafletPanelStyle = useMemo<React.CSSProperties>(() => ({ 135 + ...panelStyle, 136 + padding: 0, 137 + border: 'none', 138 + background: 'transparent', 139 + backdropFilter: 'none', 140 + marginTop: 32, 141 + alignItems: 'center' 142 + }), [panelStyle]); 143 + const primaryGridStyle = useMemo<React.CSSProperties>(() => ({ 144 + display: 'grid', 145 + gap: 32, 146 + gridTemplateColumns: 'repeat(auto-fit, minmax(320px, 1fr))' 147 + }), []); 148 + const columnStackStyle = useMemo<React.CSSProperties>(() => ({ 149 + display: 'flex', 150 + flexDirection: 'column', 151 + gap: 32 152 + }), []); 153 + const codeBlockStyle = useMemo<React.CSSProperties>(() => ({ 154 + ...codeBlockBase, 155 + background: scheme === 'dark' ? '#0b1120' : '#f1f5f9', 156 + border: `1px solid ${scheme === 'dark' ? '#1e293b' : '#e2e8f0'}` 157 + }), [scheme]); 158 + const codeTextStyle = useMemo<React.CSSProperties>(() => ({ 159 + margin: 0, 160 + display: 'block', 161 + fontFamily: codeBlockBase.fontFamily, 162 + fontSize: 12, 163 + lineHeight: 1.6, 164 + whiteSpace: 'pre' 165 + }), []); 166 + const basicCodeRef = useRef<HTMLElement | null>(null); 167 + const customCodeRef = useRef<HTMLElement | null>(null); 168 + 169 + // Latest Bluesky post 170 + const { 171 + rkey: latestPostRkey, 172 + loading: loadingLatestPost, 173 + empty: noPosts, 174 + error: latestPostError 175 + } = useLatestRecord<unknown>(did, BLUESKY_POST_COLLECTION); 176 + 177 + const quoteSampleDid = 'did:plc:ttdrpj45ibqunmfhdsb4zdwq'; 178 + const quoteSampleRkey = '3m2prlq6xxc2v'; 179 + 180 + return ( 181 + <div style={{ display: 'flex', flexDirection: 'column', gap: 20, color: baseTextColor }}> 182 + <div style={{ display: 'flex', flexWrap: 'wrap', gap: 12, alignItems: 'center', justifyContent: 'space-between' }}> 183 + <form onSubmit={onSubmit} style={{ display: 'flex', gap: 8, flexWrap: 'wrap', flex: '1 1 320px' }}> 184 + <input 185 + placeholder="Handle or DID (e.g. alice.bsky.social or did:plc:...)" 186 + ref={handleInputRef} 187 + style={{ flex: '1 1 260px', padding: '6px 8px', borderRadius: 8, border: '1px solid', borderColor: scheme === 'dark' ? '#1e293b' : '#cbd5f5', background: scheme === 'dark' ? '#0b1120' : '#fff', color: scheme === 'dark' ? '#e2e8f0' : '#0f172a' }} 188 + /> 189 + <button type="submit" style={{ padding: '6px 16px', borderRadius: 8, border: 'none', background: '#2563eb', color: '#fff', cursor: 'pointer' }}>Load</button> 190 + </form> 191 + <ColorSchemeToggle value={colorSchemePreference} onChange={setColorSchemePreference} scheme={scheme} /> 192 + </div> 193 + {!submitted && <p style={{ color: mutedTextColor }}>Enter a handle to fetch your profile, latest Bluesky post, a Tangled string, and a Leaflet document.</p>} 194 + {submitted && resolvingDid && <p style={{ color: mutedTextColor }}>Resolving DID…</p>} 195 + {did && ( 196 + <> 197 + <div style={primaryGridStyle}> 198 + <div style={columnStackStyle}> 199 + <section style={panelStyle}> 200 + <h3 style={sectionHeaderStyle}>Profile</h3> 201 + <BlueskyProfile did={did} handle={showHandle} colorScheme={colorSchemePreference} /> 202 + </section> 203 + <section style={panelStyle}> 204 + <h3 style={sectionHeaderStyle}>Recent Posts</h3> 205 + <BlueskyPostList did={did} colorScheme={colorSchemePreference} /> 206 + </section> 207 + </div> 208 + <div style={columnStackStyle}> 209 + <section style={panelStyle}> 210 + <h3 style={sectionHeaderStyle}>Latest Bluesky Post</h3> 211 + {loadingLatestPost && <div style={loadingBox}>Loading latest post…</div>} 212 + {latestPostError && <div style={errorBox}>Failed to load latest post.</div>} 213 + {noPosts && <div style={{ ...infoBox, color: mutedTextColor }}>No posts found.</div>} 214 + {!loadingLatestPost && latestPostRkey && ( 215 + <BlueskyPost did={did} rkey={latestPostRkey} colorScheme={colorSchemePreference} /> 216 + )} 217 + </section> 218 + <section style={panelStyle}> 219 + <h3 style={sectionHeaderStyle}>Quote Post Demo</h3> 220 + <BlueskyQuotePost did={quoteSampleDid} rkey={quoteSampleRkey} colorScheme={colorSchemePreference} /> 221 + </section> 222 + </div> 223 + </div> 224 + <section style={gistPanelStyle}> 225 + <h3 style={sectionHeaderStyle}>A Tangled String</h3> 226 + <TangledString did="nekomimi.pet" rkey="3m2p4gjptg522" colorScheme={colorSchemePreference} /> 227 + </section> 228 + <section style={leafletPanelStyle}> 229 + <h3 style={sectionHeaderStyle}>A Leaflet Document.</h3> 230 + <div style={{ width: '100%', display: 'flex', justifyContent: 'center' }}> 231 + <LeafletDocument did={"did:plc:ttdrpj45ibqunmfhdsb4zdwq"} rkey={"3m2seagm2222c"} colorScheme={colorSchemePreference} /> 232 + </div> 233 + </section> 234 + </> 235 + )} 236 + <section style={{ ...panelStyle, marginTop: 32 }}> 237 + <h3 style={sectionHeaderStyle}>Build your own component</h3> 238 + <p style={{ color: mutedTextColor, margin: '4px 0 8px' }}> 239 + Wrap your app with the provider once and drop the ready-made components wherever you need them. 240 + </p> 241 + <pre style={codeBlockStyle}> 242 + <code ref={basicCodeRef} className="language-tsx" style={codeTextStyle}>{basicUsageSnippet}</code> 243 + </pre> 244 + <p style={{ color: mutedTextColor, margin: '16px 0 8px' }}> 245 + Need to make your own component? Compose your own renderer with the hooks and utilities that ship with the library. 246 + </p> 247 + <pre style={codeBlockStyle}> 248 + <code ref={customCodeRef} className="language-tsx" style={codeTextStyle}>{customComponentSnippet}</code> 249 + </pre> 250 + {did && ( 251 + <div style={{ marginTop: 16, display: 'flex', flexDirection: 'column', gap: 12 }}> 252 + <p style={{ color: mutedTextColor, margin: 0 }}> 253 + Live example with your handle: 254 + </p> 255 + <LatestPostSummary did={did} handle={showHandle} colorScheme={colorSchemePreference} /> 256 + </div> 257 + )} 258 + </section> 259 + </div> 260 + ); 261 + }; 262 + 263 + const LatestPostSummary: React.FC<{ did: string; handle?: string; colorScheme: ColorSchemePreference }> = ({ did, colorScheme }) => { 264 + const { rkey, loading, error } = useLatestRecord<FeedPostRecord>(did, BLUESKY_POST_COLLECTION); 265 + const scheme = useColorScheme(colorScheme); 266 + const palette = scheme === 'dark' ? latestSummaryPalette.dark : latestSummaryPalette.light; 267 + 268 + if (loading) return <div style={palette.muted}>Loading summary…</div>; 269 + if (error) return <div style={palette.error}>Failed to load the latest post.</div>; 270 + if (!rkey) return <div style={palette.muted}>No posts published yet.</div>; 271 + 272 + return ( 273 + <AtProtoRecord<FeedPostRecord> 274 + did={did} 275 + collection="app.bsky.feed.post" 276 + rkey={rkey} 277 + renderer={({ record }) => ( 278 + <article data-color-scheme={scheme}> 279 + <strong>{record?.text ?? 'Empty post'}</strong> 280 + </article> 281 + )} 282 + /> 283 + ); 284 + }; 285 + 286 + const sectionHeaderStyle: React.CSSProperties = { margin: '4px 0', fontSize: 16 }; 287 + const loadingBox: React.CSSProperties = { padding: 8 }; 288 + const errorBox: React.CSSProperties = { padding: 8, color: 'crimson' }; 289 + const infoBox: React.CSSProperties = { padding: 8, color: '#555' }; 290 + 291 + const latestSummaryPalette = { 292 + light: { 293 + card: { 294 + border: '1px solid #e2e8f0', 295 + background: '#ffffff', 296 + borderRadius: 12, 297 + padding: 12, 298 + display: 'flex', 299 + flexDirection: 'column', 300 + gap: 8 301 + } satisfies React.CSSProperties, 302 + header: { 303 + display: 'flex', 304 + alignItems: 'baseline', 305 + justifyContent: 'space-between', 306 + gap: 12, 307 + color: '#0f172a' 308 + } satisfies React.CSSProperties, 309 + time: { 310 + fontSize: 12, 311 + color: '#64748b' 312 + } satisfies React.CSSProperties, 313 + text: { 314 + margin: 0, 315 + color: '#1f2937', 316 + whiteSpace: 'pre-wrap' 317 + } satisfies React.CSSProperties, 318 + link: { 319 + color: '#2563eb', 320 + fontWeight: 600, 321 + fontSize: 12, 322 + textDecoration: 'none' 323 + } satisfies React.CSSProperties, 324 + muted: { 325 + color: '#64748b' 326 + } satisfies React.CSSProperties, 327 + error: { 328 + color: 'crimson' 329 + } satisfies React.CSSProperties 330 + }, 331 + dark: { 332 + card: { 333 + border: '1px solid #1e293b', 334 + background: '#0f172a', 335 + borderRadius: 12, 336 + padding: 12, 337 + display: 'flex', 338 + flexDirection: 'column', 339 + gap: 8 340 + } satisfies React.CSSProperties, 341 + header: { 342 + display: 'flex', 343 + alignItems: 'baseline', 344 + justifyContent: 'space-between', 345 + gap: 12, 346 + color: '#e2e8f0' 347 + } satisfies React.CSSProperties, 348 + time: { 349 + fontSize: 12, 350 + color: '#cbd5f5' 351 + } satisfies React.CSSProperties, 352 + text: { 353 + margin: 0, 354 + color: '#e2e8f0', 355 + whiteSpace: 'pre-wrap' 356 + } satisfies React.CSSProperties, 357 + link: { 358 + color: '#38bdf8', 359 + fontWeight: 600, 360 + fontSize: 12, 361 + textDecoration: 'none' 362 + } satisfies React.CSSProperties, 363 + muted: { 364 + color: '#94a3b8' 365 + } satisfies React.CSSProperties, 366 + error: { 367 + color: '#f472b6' 368 + } satisfies React.CSSProperties 369 + } 370 + } as const; 371 + 372 + export const App: React.FC = () => { 373 + return ( 374 + <AtProtoProvider> 375 + <div style={{ maxWidth: 860, margin: '40px auto', padding: '0 20px', fontFamily: 'system-ui, sans-serif' }}> 376 + <h1 style={{ marginTop: 0 }}>atproto-ui Demo</h1> 377 + <p style={{ lineHeight: 1.4 }}>A component library for rendering common AT Protocol records for applications such as Bluesky and Tangled.</p> 378 + <hr style={{ margin: '32px 0' }} /> 379 + <FullDemo /> 380 + </div> 381 + </AtProtoProvider> 382 + ); 383 + }; 384 + 385 + export default App;
+8
src/main.tsx
··· 1 + import { createRoot } from 'react-dom/client'; 2 + import App from './App'; 3 + 4 + const el = document.getElementById('root'); 5 + if (el) { 6 + const root = createRoot(el); 7 + root.render(<App />); 8 + }
+28
tsconfig.app.json
··· 1 + { 2 + "compilerOptions": { 3 + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", 4 + "target": "ES2022", 5 + "useDefineForClassFields": true, 6 + "lib": ["ES2022", "DOM", "DOM.Iterable"], 7 + "module": "ESNext", 8 + "types": ["vite/client"], 9 + "skipLibCheck": true, 10 + 11 + /* Bundler mode */ 12 + "moduleResolution": "bundler", 13 + "allowImportingTsExtensions": true, 14 + "verbatimModuleSyntax": true, 15 + "moduleDetection": "force", 16 + "noEmit": true, 17 + "jsx": "react-jsx", 18 + 19 + /* Linting */ 20 + "strict": true, 21 + "noUnusedLocals": true, 22 + "noUnusedParameters": true, 23 + "erasableSyntaxOnly": true, 24 + "noFallthroughCasesInSwitch": true, 25 + "noUncheckedSideEffectImports": true 26 + }, 27 + "include": ["src"] 28 + }
+8
tsconfig.json
··· 1 + { 2 + "files": [], 3 + "references": [ 4 + { "path": "./tsconfig.app.json" }, 5 + { "path": "./tsconfig.lib.json" }, 6 + { "path": "./tsconfig.node.json" } 7 + ] 8 + }
+22
tsconfig.lib.json
··· 1 + { 2 + "compilerOptions": { 3 + "composite": true, 4 + "target": "ES2020", 5 + "module": "ESNext", 6 + "lib": ["ES2020", "DOM", "DOM.Iterable"], 7 + "moduleResolution": "bundler", 8 + "moduleDetection": "force", 9 + "jsx": "react-jsx", 10 + "strict": true, 11 + "skipLibCheck": true, 12 + "allowSyntheticDefaultImports": true, 13 + "esModuleInterop": true, 14 + "resolveJsonModule": true, 15 + "declaration": true, 16 + "declarationMap": false, 17 + "sourceMap": false, 18 + "outDir": "./lib-dist", 19 + "rootDir": "./lib" 20 + }, 21 + "include": ["lib/**/*.ts", "lib/**/*.tsx"] 22 + }
+1
tsconfig.lib.tsbuildinfo
··· 1 + {"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/typescript/lib/lib.esnext.float16.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/@types/react/jsx-runtime.d.ts","./node_modules/@atcute/lexicons/dist/syntax/did.d.ts","./node_modules/@atcute/lexicons/dist/syntax/handle.d.ts","./node_modules/@atcute/lexicons/dist/syntax/at-identifier.d.ts","./node_modules/@atcute/lexicons/dist/syntax/nsid.d.ts","./node_modules/@atcute/lexicons/dist/syntax/record-key.d.ts","./node_modules/@atcute/lexicons/dist/utils.d.ts","./node_modules/@atcute/lexicons/dist/syntax/at-uri.d.ts","./node_modules/@atcute/lexicons/dist/syntax/cid.d.ts","./node_modules/@atcute/lexicons/dist/syntax/datetime.d.ts","./node_modules/@atcute/lexicons/dist/syntax/language.d.ts","./node_modules/@atcute/lexicons/dist/syntax/tid.d.ts","./node_modules/@atcute/lexicons/dist/syntax/uri.d.ts","./node_modules/@atcute/lexicons/dist/interfaces/cid-link.d.ts","./node_modules/@atcute/lexicons/dist/interfaces/blob.d.ts","./node_modules/@atcute/lexicons/dist/interfaces/bytes.d.ts","./node_modules/@atcute/lexicons/dist/types/brand.d.ts","./node_modules/@standard-schema/spec/dist/index.d.ts","./node_modules/@atcute/lexicons/dist/syntax/index.d.ts","./node_modules/@atcute/lexicons/dist/interfaces/index.d.ts","./node_modules/@atcute/lexicons/dist/validations/index.d.ts","./node_modules/@atcute/lexicons/dist/index.d.ts","./node_modules/@atcute/lexicons/dist/ambient.d.ts","./node_modules/@atcute/client/dist/fetch-handler.d.ts","./node_modules/@atcute/client/dist/client.d.ts","./node_modules/@atcute/client/dist/credential-manager.d.ts","./node_modules/@atcute/client/dist/index.d.ts","./node_modules/@badrap/valita/dist/mjs/index.d.mts","./node_modules/@atcute/identity/dist/types.d.ts","./node_modules/@atcute/identity/dist/typedefs.d.ts","./node_modules/@atcute/identity/dist/utils.d.ts","./node_modules/@atcute/identity/dist/did.d.ts","./node_modules/@atcute/identity/dist/methods/key.d.ts","./node_modules/@atcute/identity/dist/methods/plc.d.ts","./node_modules/@atcute/identity/dist/methods/web.d.ts","./node_modules/@atcute/identity/dist/index.d.ts","./node_modules/@atcute/identity-resolver/dist/types.d.ts","./node_modules/@atcute/identity-resolver/dist/did/composite.d.ts","./node_modules/@atcute/identity-resolver/dist/did/methods/plc.d.ts","./node_modules/@atcute/identity-resolver/dist/did/methods/web.d.ts","./node_modules/@atcute/identity-resolver/dist/did/methods/xrpc.d.ts","./node_modules/@atcute/identity-resolver/dist/handle/composite.d.ts","./node_modules/@atcute/identity-resolver/dist/handle/methods/doh-json.d.ts","./node_modules/@atcute/identity-resolver/dist/handle/methods/well-known.d.ts","./node_modules/@atcute/identity-resolver/dist/handle/methods/xrpc.d.ts","./node_modules/@atcute/identity-resolver/dist/errors.d.ts","./node_modules/@atcute/identity-resolver/dist/index.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/actor/profile.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/feed/reaction.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/feed/star.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/git/refupdate.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/graph/follow.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/knot.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/knot/listkeys.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/knot/member.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/knot/version.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/owner.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/pipeline.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/pipeline/status.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/publickey.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/addsecret.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/archive.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/artifact.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/blob.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/branch.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/branches.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/collaborator.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/compare.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/create.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/delete.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/diff.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/forkstatus.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/forksync.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/getdefaultbranch.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/hiddenref.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/issue.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/issue/comment.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/issue/state.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/issue/state/closed.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/issue/state/open.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/languages.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/listsecrets.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/log.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/merge.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/mergecheck.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/pull.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/pull/comment.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/pull/status.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/pull/status/closed.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/pull/status/merged.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/pull/status/open.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/removesecret.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/setdefaultbranch.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/tags.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/repo/tree.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/spindle.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/spindle/member.d.ts","./node_modules/@atcute/tangled/dist/lexicons/types/sh/tangled/string.d.ts","./node_modules/@atcute/tangled/dist/lexicons/index.d.ts","./node_modules/@atcute/tangled/dist/index.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/server/defs.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/admin/defs.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/admin/deleteaccount.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/admin/disableaccountinvites.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/admin/disableinvitecodes.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/admin/enableaccountinvites.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/admin/getaccountinfo.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/admin/getaccountinfos.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/admin/getinvitecodes.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/repo/strongref.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/admin/getsubjectstatus.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/admin/searchaccounts.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/admin/sendemail.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/admin/updateaccountemail.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/admin/updateaccounthandle.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/admin/updateaccountpassword.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/admin/updateaccountsigningkey.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/admin/updatesubjectstatus.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/identity/defs.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/identity/getrecommendeddidcredentials.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/identity/refreshidentity.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/identity/requestplcoperationsignature.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/identity/resolvedid.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/identity/resolvehandle.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/identity/resolveidentity.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/identity/signplcoperation.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/identity/submitplcoperation.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/identity/updatehandle.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/label/defs.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/label/querylabels.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/label/subscribelabels.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/lexicon/schema.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/moderation/defs.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/moderation/createreport.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/repo/defs.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/repo/applywrites.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/repo/createrecord.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/repo/deleterecord.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/repo/describerepo.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/repo/getrecord.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/repo/importrepo.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/repo/listmissingblobs.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/repo/listrecords.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/repo/putrecord.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/repo/uploadblob.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/server/activateaccount.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/server/checkaccountstatus.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/server/confirmemail.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/server/createaccount.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/server/createapppassword.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/server/createinvitecode.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/server/createinvitecodes.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/server/createsession.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/server/deactivateaccount.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/server/deleteaccount.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/server/deletesession.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/server/describeserver.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/server/getaccountinvitecodes.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/server/getserviceauth.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/server/getsession.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/server/listapppasswords.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/server/refreshsession.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/server/requestaccountdelete.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/server/requestemailconfirmation.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/server/requestemailupdate.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/server/requestpasswordreset.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/server/reservesigningkey.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/server/resetpassword.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/server/revokeapppassword.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/server/updateemail.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/sync/defs.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/sync/getblob.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/sync/getblocks.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/sync/getcheckout.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/sync/gethead.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/sync/gethoststatus.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/sync/getlatestcommit.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/sync/getrecord.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/sync/getrepo.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/sync/getrepostatus.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/sync/listblobs.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/sync/listhosts.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/sync/listrepos.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/sync/listreposbycollection.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/sync/notifyofupdate.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/sync/requestcrawl.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/sync/subscriberepos.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/temp/addreservedhandle.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/temp/checkhandleavailability.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/temp/checksignupqueue.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/temp/dereferencescope.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/temp/fetchlabels.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/temp/requestphoneverification.d.ts","./node_modules/@atcute/atproto/dist/lexicons/types/com/atproto/temp/revokeaccountcredentials.d.ts","./node_modules/@atcute/atproto/dist/lexicons/index.d.ts","./node_modules/@atcute/atproto/dist/index.d.ts","./lib/utils/atproto-client.ts","./lib/providers/atprotoprovider.tsx","./lib/hooks/usepdsendpoint.ts","./lib/hooks/useatprotorecord.ts","./lib/hooks/usedidresolution.ts","./lib/core/atprotorecord.tsx","./lib/components/blueskyicon.tsx","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/embed/external.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/feed/postgate.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/feed/threadgate.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/embed/defs.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/embed/images.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/embed/video.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/embed/recordwithmedia.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/labeler/defs.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/embed/record.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/richtext/facet.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/feed/defs.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/defs.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/notification/defs.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/actor/defs.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/actor/getpreferences.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/actor/getprofile.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/actor/getprofiles.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/actor/getsuggestions.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/actor/profile.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/actor/putpreferences.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/actor/searchactors.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/actor/searchactorstypeahead.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/actor/status.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/bookmark/createbookmark.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/bookmark/defs.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/bookmark/deletebookmark.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/bookmark/getbookmarks.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/feed/describefeedgenerator.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/feed/generator.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/feed/getactorfeeds.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/feed/getactorlikes.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/feed/getauthorfeed.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/feed/getfeed.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/feed/getfeedgenerator.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/feed/getfeedgenerators.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/feed/getfeedskeleton.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/feed/getlikes.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/feed/getlistfeed.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/feed/getpostthread.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/feed/getposts.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/feed/getquotes.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/feed/getrepostedby.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/feed/getsuggestedfeeds.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/feed/gettimeline.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/feed/like.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/feed/post.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/feed/repost.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/feed/searchposts.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/feed/sendinteractions.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/block.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/follow.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/getactorstarterpacks.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/getblocks.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/getfollowers.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/getfollows.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/getknownfollowers.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/getlist.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/getlistblocks.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/getlistmutes.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/getlists.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/getlistswithmembership.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/getmutes.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/getrelationships.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/getstarterpack.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/getstarterpacks.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/getstarterpackswithmembership.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/getsuggestedfollowsbyactor.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/list.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/listblock.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/listitem.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/muteactor.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/muteactorlist.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/mutethread.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/searchstarterpacks.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/starterpack.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/unmuteactor.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/unmuteactorlist.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/unmutethread.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/graph/verification.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/labeler/getservices.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/labeler/service.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/notification/declaration.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/notification/getpreferences.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/notification/getunreadcount.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/notification/listactivitysubscriptions.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/notification/listnotifications.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/notification/putactivitysubscription.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/notification/putpreferences.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/notification/putpreferencesv2.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/notification/registerpush.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/notification/unregisterpush.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/notification/updateseen.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/unspecced/defs.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/unspecced/getageassurancestate.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/unspecced/getconfig.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/unspecced/getpopularfeedgenerators.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/unspecced/getpostthreadotherv2.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/unspecced/getpostthreadv2.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/unspecced/getsuggestedfeeds.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/unspecced/getsuggestedfeedsskeleton.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/unspecced/getsuggestedstarterpacks.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/unspecced/getsuggestedstarterpacksskeleton.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/unspecced/getsuggestedusers.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/unspecced/getsuggestedusersskeleton.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/unspecced/getsuggestionsskeleton.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/unspecced/gettaggedsuggestions.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/unspecced/gettrendingtopics.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/unspecced/gettrends.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/unspecced/gettrendsskeleton.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/unspecced/initageassurance.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/unspecced/searchactorsskeleton.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/unspecced/searchpostsskeleton.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/unspecced/searchstarterpacksskeleton.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/video/defs.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/video/getjobstatus.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/video/getuploadlimits.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/app/bsky/video/uploadvideo.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/chat/bsky/actor/declaration.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/chat/bsky/actor/defs.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/chat/bsky/actor/deleteaccount.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/chat/bsky/actor/exportaccountdata.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/chat/bsky/convo/acceptconvo.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/chat/bsky/convo/defs.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/chat/bsky/convo/addreaction.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/chat/bsky/convo/deletemessageforself.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/chat/bsky/convo/getconvo.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/chat/bsky/convo/getconvoavailability.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/chat/bsky/convo/getconvoformembers.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/chat/bsky/convo/getlog.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/chat/bsky/convo/getmessages.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/chat/bsky/convo/leaveconvo.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/chat/bsky/convo/listconvos.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/chat/bsky/convo/muteconvo.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/chat/bsky/convo/removereaction.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/chat/bsky/convo/sendmessage.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/chat/bsky/convo/sendmessagebatch.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/chat/bsky/convo/unmuteconvo.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/chat/bsky/convo/updateallread.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/chat/bsky/convo/updateread.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/chat/bsky/moderation/getactormetadata.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/chat/bsky/moderation/getmessagecontext.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/types/chat/bsky/moderation/updateactoraccess.d.ts","./node_modules/@atcute/bluesky/dist/lexicons/index.d.ts","./node_modules/@atcute/bluesky/dist/utilities/embeds.d.ts","./node_modules/@atcute/bluesky/dist/utilities/list.d.ts","./node_modules/@atcute/bluesky/dist/utilities/profile.d.ts","./node_modules/@atcute/bluesky/dist/utilities/starterpack.d.ts","./node_modules/@atcute/bluesky/dist/index.d.ts","./lib/types/bluesky.ts","./lib/hooks/usecolorscheme.ts","./lib/utils/at-uri.ts","./lib/hooks/usedidhandle.ts","./lib/hooks/useblob.ts","./lib/renderers/blueskypostrenderer.tsx","./lib/renderers/blueskyprofilerenderer.tsx","./lib/utils/profile.ts","./lib/components/blueskyprofile.tsx","./lib/components/blueskypost.tsx","./lib/hooks/usepaginatedrecords.ts","./lib/components/blueskypostlist.tsx","./lib/components/blueskyquotepost.tsx","./lib/components/colorschemetoggle.tsx","./lib/types/leaflet.ts","./lib/renderers/leafletdocumentrenderer.tsx","./lib/components/leafletdocument.tsx","./lib/renderers/tangledstringrenderer.tsx","./lib/components/tangledstring.tsx","./lib/hooks/useblueskyprofile.ts","./lib/hooks/uselatestrecord.ts","./lib/index.ts","./node_modules/@babel/types/lib/index.d.ts","./node_modules/@types/babel__generator/index.d.ts","./node_modules/@babel/parser/typings/babel-parser.d.ts","./node_modules/@types/babel__template/index.d.ts","./node_modules/@types/babel__traverse/index.d.ts","./node_modules/@types/babel__core/index.d.ts","./node_modules/@types/estree/index.d.ts","./node_modules/@types/json-schema/index.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/crypto.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/undici-types/utility.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client-stats.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/h2c-client.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-call-history.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/snapshot-agent.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/cache-interceptor.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/web-globals/navigator.d.ts","./node_modules/@types/node/web-globals/storage.d.ts","./node_modules/@types/node/web-globals/streams.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/sqlite.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/@types/react-dom/index.d.ts"],"fileIdsList":[[52,53,437,491,508,509],[52,53,253,255,405,408,409,410,412,413,437,491,508,509],[52,53,256,405,406,408,415,437,491,508,509],[52,53,255,405,409,411,412,437,491,508,509],[52,53,405,407,410,414,437,491,508,509],[52,53,406,437,491,508,509],[52,53,253,255,406,407,419,420,437,491,508,509],[52,53,255,422,437,491,508,509],[52,53,253,254,437,491,508,509],[52,53,250,252,437,491,508,509],[52,53,252,437,491,508,509],[52,53,251,437,491,508,509],[53,250,251,252,253,254,255,256,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,437,491,508,509],[52,53,250,437,491,508,509],[52,53,256,405,406,407,408,409,437,491,508,509],[52,53,256,405,406,437,491,508,509],[52,53,406,407,408,409,414,419,437,491,508,509],[52,53,153,406,437,491,508,509],[53,404,437,491,508,509],[53,437,491,508,509],[53,71,79,88,99,153,249,437,491,508,509],[53,405,437,491,508,509],[248,437,491,508,509],[154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,437,491,508,509],[73,154,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,155,156,157,158,159,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,155,156,157,158,159,160,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,154,156,157,158,159,160,161,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,155,156,157,158,159,160,161,162,163,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,155,156,157,158,159,160,161,162,164,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,172,173,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,182,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,182,183,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,186,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,188,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,188,189,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,188,189,190,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,188,189,190,191,192,193,194,195,196,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,154,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,182,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[399,400,401,402,403,437,491,508,509],[257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,163,182,257,258,259,268,269,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,270,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,270,271,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,270,271,272,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,270,271,272,273,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,182,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,270,271,272,273,274,275,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,270,271,272,273,274,275,276,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,270,271,272,273,274,275,276,277,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,257,258,259,271,272,273,274,275,276,277,278,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,163,267,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,281,282,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,260,437,491,508,509],[73,163,182,257,261,262,263,264,267,268,270,437,491,508,509],[73,257,261,262,265,437,491,508,509],[73,182,257,261,262,263,265,266,268,270,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,182,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,266,271,272,273,274,275,276,277,278,279,280,282,283,284,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,267,271,272,273,274,275,276,277,278,279,280,282,283,284,285,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,267,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,267,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,267,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,267,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,267,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,267,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,270,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,267,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,267,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,267,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,267,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,270,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,267,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,267,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,182,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,257,258,259,261,262,263,265,266,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,267,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,267,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,182,266,267,270,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,268,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,270,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,270,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,270,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,270,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,268,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,268,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,268,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,268,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,268,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,270,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,268,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,268,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,268,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,268,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,270,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,182,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,266,268,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,268,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,266,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,182,186,270,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,264,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,264,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,269,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,270,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,182,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,270,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,269,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,269,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,267,270,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,267,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,267,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,267,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,268,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,270,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,182,270,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,379,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,265,266,375,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,379,380,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,379,380,381,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,379,380,381,382,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,379,380,381,382,383,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,379,380,381,382,383,384,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,379,380,381,382,383,384,385,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,379,380,381,382,383,384,385,386,387,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,379,380,381,382,383,384,385,386,387,388,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,379,380,381,382,383,384,385,386,387,388,389,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,437,491,508,509],[74,263,265,267,302,437,491,508,509],[399,437,491,508,509],[73,74,75,76,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[74,76,437,491,508,509],[437,491,508,509],[76,77,78,437,491,508,509],[71,88,89,437,491,508,509],[71,437,491,508,509],[71,89,437,491,508,509],[89,90,91,92,93,94,95,96,97,98,437,491,508,509],[71,88,437,491,508,509],[81,82,83,84,85,86,87,437,491,508,509],[74,437,491,508,509],[80,81,437,491,508,509],[74,81,437,491,508,509],[54,55,56,57,58,60,61,62,63,64,65,66,67,68,69,73,437,491,508,509],[61,66,437,491,508,509],[61,437,491,508,509],[66,67,68,437,491,508,509],[54,55,437,491,508,509],[54,56,57,58,59,437,491,508,509],[54,55,56,57,58,60,61,62,63,64,65,437,491,508,509],[69,70,71,72,437,491,508,509],[152,437,491,508,509],[100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,437,491,508,509],[73,75,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,134,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,135,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,136,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,137,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,138,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,139,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,140,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,141,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,145,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,146,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,147,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,148,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,149,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,150,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,151,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[73,75,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,134,135,136,137,138,139,140,141,145,146,147,148,149,150,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,183,184,185,187,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,258,259,271,272,273,274,275,276,277,278,279,280,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,371,372,373,374,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,437,491,508,509],[427,437,491,508,509],[427,428,429,430,431,437,491,508,509],[427,429,437,491,508,509],[437,488,489,491,508,509],[437,490,491,508,509],[491,508,509],[437,491,496,508,509,526],[437,491,492,497,502,508,509,511,523,534],[437,491,492,493,502,508,509,511],[437,491,494,508,509,535],[437,491,495,496,503,508,509,512],[437,491,496,508,509,523,531],[437,491,497,499,502,508,509,511],[437,490,491,498,508,509],[437,491,499,500,508,509],[437,491,501,502,508,509],[437,490,491,502,508,509],[437,491,502,503,504,508,509,523,534],[437,491,502,503,504,508,509,518,523,526],[437,483,491,499,502,505,508,509,511,523,534],[437,491,502,503,505,506,508,509,511,523,531,534],[437,491,505,507,508,509,523,531,534],[435,436,437,438,439,440,441,442,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540],[437,491,502,508,509],[437,491,508,509,510,534],[437,491,499,502,508,509,511,523],[437,491,508,509,512],[437,491,508,509,513],[437,490,491,508,509,514],[437,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540],[437,491,508,509,516],[437,491,508,509,517],[437,491,502,508,509,518,519],[437,491,508,509,518,520,535,537],[437,491,502,508,509,523,524,526],[437,491,508,509,525,526],[437,491,508,509,523,524],[437,491,508,509,526],[437,491,508,509,527],[437,488,491,508,509,523,528],[437,491,502,508,509,529,530],[437,491,508,509,529,530],[437,491,496,508,509,511,523,531],[437,491,508,509,532],[437,491,508,509,511,533],[437,491,505,508,509,517,534],[437,491,496,508,509,535],[437,491,508,509,523,536],[437,491,508,509,510,537],[437,491,508,509,538],[437,491,496,508,509],[437,483,491,508,509],[437,491,508,509,539],[437,483,491,502,504,508,509,514,523,526,534,536,537,539],[437,491,508,509,523,540],[52,437,491,508,509],[50,51,437,491,508,509],[437,449,452,455,456,491,508,509,534],[437,452,491,508,509,523,534],[437,452,456,491,508,509,534],[437,491,508,509,523],[437,446,491,508,509],[437,450,491,508,509],[437,448,449,452,491,508,509,534],[437,491,508,509,511,531],[437,491,508,509,541],[437,446,491,508,509,541],[437,448,452,491,508,509,511,534],[437,443,444,445,447,451,491,502,508,509,523,534],[437,452,460,468,491,508,509],[437,444,450,491,508,509],[437,452,477,478,491,508,509],[437,444,447,452,491,508,509,526,534,541],[437,452,491,508,509],[437,448,452,491,508,509,534],[437,443,491,508,509],[437,446,447,448,450,451,452,453,454,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,478,479,480,481,482,491,508,509],[437,452,470,473,491,499,508,509],[437,452,460,461,462,491,508,509],[437,450,452,461,463,491,508,509],[437,451,491,508,509],[437,444,446,452,491,508,509],[437,452,456,461,463,491,508,509],[437,456,491,508,509],[437,450,452,455,491,508,509,534],[437,444,448,452,460,491,508,509],[437,452,470,491,508,509],[437,463,491,508,509],[437,446,452,477,491,508,509,526,539,541]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"170d4db14678c68178ee8a3d5a990d5afb759ecb6ec44dbd885c50f6da6204f6","affectsGlobalScope":true,"impliedFormat":1},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"0ff1b165090b491f5e1407ae680b9a0bc3806dc56827ec85f93c57390491e732","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"ea72cc9550b89d2fd7b8ac2ab4a6ad5b179bf897de7859bba0dc7a934bbca734","impliedFormat":99},{"version":"aa45d08c94931e0b7a9a4c418b33ab895aaf240e192839b36866ad84198c062a","impliedFormat":99},{"version":"dbddbfd48c1d54d619891c895f6e8ff16d30717f4a0952e701387e8040d99f85","impliedFormat":99},{"version":"3361e3db8cb33aa91beaf33b3c79c108f2410e6414498e79d2c7da1838fdfc4d","impliedFormat":99},{"version":"4d54ec33bb701c533741e8abc4233d5f378805166d3a5999d234ae189702d93f","impliedFormat":99},{"version":"f1eed69ccd2798f31d0996306c51d648e19e6e09088f9a7f57c3dcb4367cef51","impliedFormat":99},{"version":"da276fcfe4fb73d74245eee5d1dfb7776bd450d77c591f6e03b54d60be5299b4","impliedFormat":99},{"version":"b402b88cf99c4dc208e5fd337e198e9ee703f48b239dbc8d08ec3b6389e5b55b","impliedFormat":99},{"version":"6f99fbd5ea27a199f84fbc41105525d207d8c6838d62babcbe12e5be0c4a0271","impliedFormat":99},{"version":"528939385e62838eb5631e339475ba93c2ce3ba7e3819cacd42d8ba9adfe5025","impliedFormat":99},{"version":"ef7d56a3fff2aa6476c694027c4844905d40ecc7e8b775dd8743dfd8378353fe","impliedFormat":99},{"version":"3894b5833c452b46d1c59f7d58a8c45e55bcc75a0248af65e1c9c9dd88afeac7","impliedFormat":99},{"version":"1ef2ed1e48da7d651f705bc0131d1028725841d4a97652ef0905367360ba3f73","impliedFormat":99},{"version":"47c221ec0b8802eb5887d6a1be6d7a33ddcd10116185a15c36803e0ae1c0539c","impliedFormat":99},{"version":"0d42fe6c9f1fab8c308ab1ec0ec2ad814a1bd2fb685e2f12cabc0c7732c089b9","impliedFormat":99},{"version":"74967284243720aad05a852617f2891ae384d7a6470c824169a351ad31cab9fb","impliedFormat":99},{"version":"76af14c3cce62da183aaf30375e3a4613109d16c7f16d30702f16d625a95e62c","impliedFormat":99},{"version":"19bc69921209ad7269f886c69e5f812499e133ce318e1aa5d53ac82427c1a477","impliedFormat":99},{"version":"31c17a52735cb1f6cc5a4c452857f568341f95424f07fdb5ee2fbcd6a4a4c094","impliedFormat":99},{"version":"06b419067158787fe33af288531a1df891b452a11e485896bded780b2ef70732","impliedFormat":99},{"version":"44c976b666ef022c74dc1405abb2b167346f9b8ebed3ab4bd9464711c8caa1f5","impliedFormat":99},{"version":"8e52008b516a7a7301f9d43884dc899019695eab471312b72be8a72f89850327","impliedFormat":99},{"version":"f47d865499c8b58d931d7f16e4432c69a3501cb324ead037804e8f292ff195a3","impliedFormat":99},{"version":"1e2f699820214b98d8d16c57137c7adb04b13f3ac573b4f0bbe7b7a601d09495","impliedFormat":99},{"version":"3fc902025baa4cbc0b4648466ac6be6117dc4b0e5b56d245d959839e58fdca8f","impliedFormat":99},{"version":"8ca7d6aee90a5a1d40d356c70c8d5b0ca55ab31a3d17ba73ffb51604674c48f4","impliedFormat":99},{"version":"8de5552b84830fba2143c18d43ebfc3c1289c67402c51a378c32daa7ff7adf32","impliedFormat":99},{"version":"651b59286248bd10267c630f728172866ae427f4036372bcd63f1502532454f8","impliedFormat":99},{"version":"1be150449268e28edc1a1d31acb2b9fa030aee87897a41856d50ddccc124ea53","impliedFormat":99},{"version":"ae0bff9b2245fc399295d0572519a2833ff1a47550b7fdddf96e648eca5271ea","impliedFormat":99},{"version":"0b903757cdc9fe17029ff023c454ae06941499fbf9ae0f733c5e7314555797aa","impliedFormat":99},{"version":"f7ff68ca4ababc2bea9fe21a476be0f6096b8f9f54d34f3408f921850b770e24","impliedFormat":99},{"version":"fa689046e96fc6bd92d2f6edcdb9c0c45efedcfe23443ae1fd4a470bf6e9eda3","impliedFormat":99},{"version":"cb54ec232cad4e0c94cebfd4f560de0907e65c1b55b62a7c1063ab73fe2b014d","impliedFormat":99},{"version":"39f0d3b66804b002c2f462c9ee61bfca709b607559893cccb4ade202f01028d6","impliedFormat":99},{"version":"1f0316a5da01034b17aed99fdd5ec8fe805bb65c5181587c8da353e7c1c31466","impliedFormat":99},{"version":"56442d4cc6dbee39651e056fa1497720913f1f801791b84e50e892cfbe078bd4","impliedFormat":99},{"version":"03cd861598cd715ca2bac8148c04a5f0ed2d21e90bf8db13de771be632f28c66","impliedFormat":99},{"version":"bd1578e4ca78d8de0d3dc05f95d147e45b4dfda47186ce874b3c0d7539e2098f","impliedFormat":99},{"version":"735c117db157cdfd07b4a18b777995e5ce23e535f49cbb12f5fd2c9111c5db18","impliedFormat":99},{"version":"303e57dc66fb6f7e6a79344e5135d48c73ed024cb311d2babf4df5b89fbcf3c8","impliedFormat":99},{"version":"d334f6d54e3907bf5a76f95119c4cc3f91220e96eb113487062d416c3bb70667","impliedFormat":99},{"version":"41178e3f5b546481e0a44eb7aaee78751843dffd525360d953550e8704880445","impliedFormat":99},{"version":"6d0cffb06c980b1ded7ed62302284696b2e9c88ed2608a36acee3ae30cebf88c","impliedFormat":99},{"version":"c57d47d923b6851e8880b395d0935d0b3bccc5c3691e7ce33abb247195b262ba","impliedFormat":99},{"version":"aedbbff1a84bb4cc113b3aa603afd19ea5a53e505744f971b715c412dae0505d","impliedFormat":99},{"version":"e04ad05711a15421294f32c07c87f23a99e792e44a2109700cec6e031038e5a8","impliedFormat":99},{"version":"05b4b78a0fe3f591b9f46700396ec760bf4785c238f8a27cbf78037357615994","impliedFormat":99},{"version":"54469d80797325cac80ddf053a12afe121953b9f327a3865925c1ea5fedc1e04","impliedFormat":99},{"version":"8ac43b3a5564c1b963aa0598ce3fe1d2b5673f220a2d0900a05cc03a2098433c","impliedFormat":99},{"version":"9555fc148c875680bb94cf7afd8c96cb6bd39575833f4d57755a3b8e3639937e","impliedFormat":99},{"version":"2dd5d9fe6995942adf82fff82e624e5aac2965a605587cc777c852981670f7c7","impliedFormat":99},{"version":"09ded16b94109529ea27304a7292084332eea0fec7960361650feaa57f738763","impliedFormat":99},{"version":"89bfc04207450b25e880200f4b1548391b539fc60bc2f2945fc0edfb23e23634","impliedFormat":99},{"version":"7c9600f96f56cb5356fb26046a60d5ea86f4e3a48709d316244395a8ca007029","impliedFormat":99},{"version":"8b10bff76988431e8f68b2a0dbb79df3ee0331753c4fac29b40ab62801f2aa06","impliedFormat":99},{"version":"724ce9a87bbacc89ff4ab317df599f77a55ee6545d76e056d8b36bb55f24c58b","impliedFormat":99},{"version":"79ddbd060c4878d83b491a4f8469794c8184f59ec9d1b022bc5b14c29215f590","impliedFormat":99},{"version":"c80b21e0bc14336675fe80924a468b9ecbda995c0b4705988f53c38dddf41922","impliedFormat":99},{"version":"aefa7fd02617fd165f8f06e921b8c0d8e60867af6634a622ddd017c158c5a505","impliedFormat":99},{"version":"bab81fad10b35ea3ec3886895b7b2e44716d7c73e009b1b3c6aabcff8dd28b42","impliedFormat":99},{"version":"78c2b0c973739c69dc21745ccb2c8dfaabd0bc97f27675a11eec5ddcb44f04e2","impliedFormat":99},{"version":"8883a6e862b5f07b07fccf8a0100ca73d35a2117fa2656d4368fbe089dc45ad5","impliedFormat":99},{"version":"9262edf59574bb4b69221a2289c08e9d8d9b83f51ac9838191dc43c176e26312","impliedFormat":99},{"version":"8f3e70c49f9abb6115f25ad78fc1d65edaa463f2d6d5a5a1554cc83bae5fb284","impliedFormat":99},{"version":"17aa7e05470aee99f362246e3b2fbccb3833d155b103bc85fcf3cd0166e8385d","impliedFormat":99},{"version":"c47eedce9426b4a330be6cc94f31ab0430557bf3d66b2f6fdaa8bc2a9fe3dc63","impliedFormat":99},{"version":"8fc134de25055444c3f7cf24895245a20009342b7d27fefe046a23f06050775d","impliedFormat":99},{"version":"5f291db565a8a521639a3f6414c1d7484b1692ced3fab25d5f6d9c7622412239","impliedFormat":99},{"version":"9d97d4c094e8fb4a39dc3c9c61a5ab3750df7f640f10d7cc1f0cc95254867a46","impliedFormat":99},{"version":"13b381b958471357ea0e5d55331fe8da40ef6dd444c765620f5ac6ed8604fea5","impliedFormat":99},{"version":"c7b04352ef5338a362cb852b254bcef5fd9f299611830722ca96bef2272a727d","impliedFormat":99},{"version":"5b7cc254748cfad68a29f1708899c3c053ab74088d08ab4a55488eb2a2a6ffc3","impliedFormat":99},{"version":"32d7684d69e6fb0d6b0b9526c81791c866e379d890969248ec033b76014e5ae3","impliedFormat":99},{"version":"3004fd440a0ce893bde0047ded249354f17fc5bf5f0e18cb443ad5875ce624af","impliedFormat":99},{"version":"616bd5a947e0f6c9b3b1115ff93e6bf6bde37f0f8874ad22ce1b94972210ecbb","impliedFormat":99},{"version":"e93070a564ab221196230b074e5316c1780fd97e32d134984662d77686a03da0","impliedFormat":99},{"version":"f14fb34a1756869066dcf0101061dc28a3125165a19033870b99da489aef7b8a","impliedFormat":99},{"version":"d8c6ddb39e8570cfe28b4bff78b60c3b0f8989b18f1cff11b65b3bce72cc8b7b","impliedFormat":99},{"version":"bc676aee1c0487b866e6c4879c44b4022726bd4aabdda10d8a869bfff2fc4fd1","impliedFormat":99},{"version":"94fdd74bb75c869bb49cff84e2cc0d96847e54550d07f190e6aa2f66f48df3cd","impliedFormat":99},{"version":"df87131c4e90121f3735d75f8687fd6593a2cf532f584f1c007929b2a30a5f9b","impliedFormat":99},{"version":"ede4c4fa5909299b5ef08f59bdca60f233b267dbd1cba1dad89977aca2d2a832","impliedFormat":99},{"version":"64e5054bb3a621b29863c2af6682d288c14635b2d14ffb5b446a17a63b88dd87","impliedFormat":99},{"version":"bb1fb4df5b57dd20edc2b411f0b0149f15ab5a106cdc8a953b4209f645034785","impliedFormat":99},{"version":"060c85a4fc9199e1f44449c4496e50da8803b007aa3fdd20f2285978060c33c0","impliedFormat":99},{"version":"0acc2626aeba6dec96b73ec578bc3bc823af3fce72c12c5309ac1863604c076b","impliedFormat":99},{"version":"9a761443a08143aab9c4de9693e72f6d8d23247186eb8889bcd10393dc3532c0","impliedFormat":99},{"version":"da1417971dd43589cf2f64e5f39da372a9413bbdaf4fc535b0a3bb132b1657e3","impliedFormat":99},{"version":"8889a09c6af3130c89f3447054fa5460754471e0a1f98a527e71fdfde899cb2f","impliedFormat":99},{"version":"ba77a7192b018f6e461de533baed7b4c7e574d708bb65217c42201c2ed10abfb","impliedFormat":99},{"version":"78ac78b6372510eeba34d59c12baf2f2d3e711b466161dce30d73c935340a8f7","impliedFormat":99},{"version":"a8d4f94ba30bf367db014cbef8d6ece4cb664e69aeba758567acb8c02b0bfe2c","impliedFormat":99},{"version":"8f489b6a9e3d21271875f468482bc0418341e23a0688734c3ee7e6b9ff74d7c4","impliedFormat":99},{"version":"787633e9a13f49fe7403439b33388a99637c899236a6cfbf381a063cdbe92542","impliedFormat":99},{"version":"e78023dc028d670a73c72661acbed753764a505e2f464d9d7e118046508c26bb","impliedFormat":99},{"version":"b0486c6fe4f9e68f2105cabed1c388aaf94c06774305d712013fdb5043e46bb7","impliedFormat":99},{"version":"b617febcd2b87748a5896415458836838cc7a047c9ba3c1f93e145ba972117bc","impliedFormat":99},{"version":"c2ed7a65f90e182168b8946ec12ff5aec58c10e9927b04745875843c0568846f","impliedFormat":99},{"version":"e4813e26203d7c6caee2675461cb8694d0a5a2a692fe955b3becdffb1b229726","impliedFormat":99},{"version":"90740a4740eb94a7cfa4c346de4ce38329d161423444f13d86153ad503571cc8","impliedFormat":99},{"version":"f419f04277f873a6c9cddb78465d66a7fc89453768283bc66610f4d563c1fa16","impliedFormat":99},{"version":"85c11e5e250abb4a591509a61e9db2202e7a186cadbd4184d77357f6d768ed1d","impliedFormat":99},{"version":"5fe57966bc656055ea2e4c1657dcc16edc32a08ef87dc30c09671004bdd4cc14","impliedFormat":99},{"version":"ead716385d47a7d5ee147bd5a7fdc0d156c989b4c8806a76f220649c6accde95","impliedFormat":99},{"version":"bc16ae537239eb39d5020afb0958f401befba9d0aa17bb8f895984c6c688569f","impliedFormat":99},{"version":"e551cfaaa5020ea281dbe01991d644059e60cb22b1dcc9634192db9238542723","impliedFormat":99},{"version":"21fc8b8d6387a8a5cc9e62c31fee3c8da8249fb3bc4a8ba79c5092057c892f7d","impliedFormat":99},{"version":"19082f3df1f25f7fb304a911d1a153c9391f464e3001080a524c995e4028a3c4","impliedFormat":99},{"version":"e0f6aafed1acaba5854688e6fdaf8d124383a9282c111b41e22c63f3eb3634ce","impliedFormat":99},{"version":"6562b25cdd9cf562a6d9c614d6294a5b4a5d53013a337b684198672aaa1d61e7","impliedFormat":99},{"version":"3a99f401d0459a24124f6510c9fd84c3ddc94cc9dda88bc092b2c328a2316f10","impliedFormat":99},{"version":"25f8badc9dcd1b4ed1b670442a5cb3bce3855aa2273600123ca82f7105cbd05f","impliedFormat":99},{"version":"df348ecd79b09037176daee7995ddd749a1862a11ed6ac4b0c8a3e7a27cfad27","impliedFormat":99},{"version":"36b1f70dafde83b308cf0d9605fe43900cd340320a5943c79085e39b7ce9c344","impliedFormat":99},{"version":"d5631a56aeb2279698572bf985113de7e1deee43c56cd9dd85aa2be1a41bb998","impliedFormat":99},{"version":"108a85619ed468d15c2f5ea49aa19be365c18a123d2c096cdb682533cafddee5","impliedFormat":99},{"version":"e8e65217abc06cbbd6f5d331cc2fecc278491350423f03ac47aec6978456716b","impliedFormat":99},{"version":"0ae17e04bf71b5eaa46a509bccf6d58cf793a33e39c27077820fb010d4f9521a","impliedFormat":99},{"version":"60d25f66f4b6ef80e0f66f3b2ffbdc88b9ee98d925838d5964fccaa792bb7bc6","impliedFormat":99},{"version":"fce7a2dfbc5f0e8cc50b843e3b4dc606a98832cd6d4a5ebe6ddd054a92dc2597","impliedFormat":99},{"version":"c30274fdea2366b5a293415a6a09124c85b42cc6c02b8d0fc72af5a05351f55e","impliedFormat":99},{"version":"5dd427cc3c26d8e97c7dc0b287e06297717f7a148829fb7fc5875e93bf40956c","impliedFormat":99},{"version":"3abfe64fea01a095950c9f1782ca2ef01ae5391fe5b7fe6443222e5a6adc5d08","impliedFormat":99},{"version":"17a168032c270ec761481e277ac16efeac6530b01870720c17ea6649c9db518b","impliedFormat":99},{"version":"b9e54097ce2e07b1911e42f1c578d9304ca3e2c824f989759bc2199d54e4db0a","impliedFormat":99},{"version":"52256083681cca90fcbf3796937308d94e1c8e3ced04a7974b49ec4209f2ab4f","impliedFormat":99},{"version":"7086e03c6bbd58177835da26104c3124e985afbd9a91b3a148e0cb88fbadcbf0","impliedFormat":99},{"version":"d46dc9978eefe051bc8f6679dc6b6a8be7594247effd2563ac488afee31ce9c7","impliedFormat":99},{"version":"2baba9d417f5388ecf1f2b1a9a58a4b6d4ed7df15509d60de9d7caf1f0043ba1","impliedFormat":99},{"version":"fa412c9f26d7be8ccbbd56ab3f1fad78eb9cf87af63fd8c6fb29dd0450b47622","impliedFormat":99},{"version":"4da7dcbb288a72cb7488728930efa47e46fb3dc042f25aa7d50468f0949bd1a0","impliedFormat":99},{"version":"b0b15e47e8d7e2875b28284ea08678baf6f4dcd420241046fc91743c905d0947","impliedFormat":99},{"version":"7eef51f067c640ef085973e8e13608a0b91c912297514e3264fa6596f328c9fe","impliedFormat":99},{"version":"4afc590f38f8051eec35231e6946ecf2151d7a23ad4e138047b01c800d94d9d0","impliedFormat":99},{"version":"4c42c37e1f02b327024ecb1edf1b5a12e4d45092bc51b405985a791ce32598e0","impliedFormat":99},{"version":"8adbcb728b2d3bd8282e1a657a45f6f9103a7eb43f6fbe36c554bfef17df9656","impliedFormat":99},{"version":"ae061bc7af2f9ea15a742b07e471c27fc4d82e2b940509f9e7da3f129595e03e","impliedFormat":99},{"version":"d15f78dca6c2afbdd2596cb17983fc60a79d95dc0142408d224d671f8b6564dc","impliedFormat":99},{"version":"2307f448951cae8a6b9bf7b09c114369e42d590c53fb99c99fb1cc34ead0f0dc","impliedFormat":99},{"version":"71ceec981852d2a8b0fb281799199344a6ec90aa55e13302916f38b48debd10a","impliedFormat":99},{"version":"5c943d5009f2f31841d04d8ba9e853a13201a9e81fb96234c90191f00a50a713","impliedFormat":99},{"version":"cf7f50328f9916c083247e28d938b986a9d9fd60ba956a90ce540ff676e3deff","impliedFormat":99},{"version":"9005e5cc014620c428d72c3333d6430f4be9ab113c7c41400ea4babe458907fb","impliedFormat":99},{"version":"5040c1eb043d900faf3cbc181831b7aefda2fa75bc08cac59897baefe2666e43","impliedFormat":99},{"version":"83e5ae91867c4b4d94ef5c43b9652401642b80f3a4b86af579390dc2fa97ed10","impliedFormat":99},{"version":"b87b16115bb301284968c766678ee98ab1c2276f1bc4e437945db172718a22b3","impliedFormat":99},{"version":"ec78470f53dc3905513b87992cae127a1d5b793ea42cd48c8ff809ebf576f19a","impliedFormat":99},{"version":"a22df7d38217bf9917cd51c7df7da7965d6a5f57b56b5e612f48ecb34a693c1e","impliedFormat":99},{"version":"df740e512060283334dc9f4d608bb7ddf9097b6e1613dd2b3145d1455bc4f73d","impliedFormat":99},{"version":"b7eea3116456adebb14baa549db35cd82759bdf2f5b161e8ba12768e634b10e8","impliedFormat":99},{"version":"930612d51e2a0cb1402f15a758d8bd025ee29b4c47a13d038faa3fc8ee16e3ba","impliedFormat":99},{"version":"da4d4b60a3c4a12f155b1ca908ff6500c81262168dd39bf6b7f2a632661beb4a","impliedFormat":99},{"version":"1c7a163091d67b9af010e10f5c43ceccde78320486d2901053b4d5af2b751b2a","impliedFormat":99},{"version":"6fb3541ebbb5e2a930fea38603d4c0cbfb4dfbbb7df8999396a8a90939131ef1","impliedFormat":99},{"version":"545dc958d8101a8e3c9932370a7b6c2f8599df0cd53449114fadd7f59fa9d6f6","impliedFormat":99},{"version":"cc8b39d1f46ad8e39ebbc27d5664594a82625199459a9ddbe54ef17b4239ce24","impliedFormat":99},{"version":"08c3b01490d49ce93d06bcb7593ef9ad02dc2d91cd583eb9cd0f3d2fa75e440a","impliedFormat":99},{"version":"6ba19623201e7dda0bda2eb91bc7d1ee6ed719be167f999564a42ad8535e2f9b","impliedFormat":99},{"version":"482f77de2d4972e66c7c6a3aa53b524e20eca97cdaa3220cd2ab7acd3a7a54f3","impliedFormat":99},{"version":"634708acac0aa7d170f03a37a9d8cf6a9febefad220477649f6ec3e1ac1f7adc","impliedFormat":99},{"version":"89b2f499dba3c24fdb44acef871860328553cc46a4802874e17de01d530056f8","impliedFormat":99},{"version":"0288e5f29c1d2b678afce4d682a7ce94c323b86c479f28a4a33928261a5fe4ef","impliedFormat":99},{"version":"4e0c84783c17101df536fa4018dad2c210ba3a41daca0c1df4957f7e8dbabbaf","impliedFormat":99},{"version":"bf17c4d237818052f7f3bdd00fa2433e5ee151e1dbbaa1700edd2d229bacfb03","impliedFormat":99},{"version":"862052995b61cdf46e9fdf9b83acb076975dcfe2f44e45c07b23ffa70f9dde0a","impliedFormat":99},{"version":"8a85e856fe6d7a45e4acac5406bf440ec274ac46171d08567d38a7ff36796c3b","impliedFormat":99},{"version":"b48976ad99fc88001f7c2757d84a6bcc5e8830f7e95fb3c73d774e7710b51aa0","impliedFormat":99},{"version":"40ec8dd574cfdd80de30ba61a0dda32c83d6b60b783ddd5c9afe21187a8b0353","impliedFormat":99},{"version":"4ef67ffb70b66a188eb391c50965ce59a997e5995a060cb0eb803e7937f80cc1","impliedFormat":99},{"version":"bd3f53621504b6b6fb460130652d71bedc7b48c4fe26e81a62f9976de519700a","impliedFormat":99},{"version":"1a94fffe1807952952587e8d392df98582a90f034abdce57217cdf8409a0a16d","impliedFormat":99},{"version":"b7b4608cddbb582012556d2016b1704bb77c9b320770cbde8b98ebbaccdc6056","impliedFormat":99},{"version":"7ff126c2720906e2edc4917be8a00ff52597dd050a0ba8deb82ae1dfff440432","impliedFormat":99},{"version":"53aaccfcf252817f557afc4e9aa18084dcc90e5c096411b9f60b6b7de4fcc41c","impliedFormat":99},{"version":"a7f0bf6a7172f6c4a33877693190c8dca6b5ca0bf0deb5130bfad368b61e16c8","impliedFormat":99},{"version":"fe428bc5c0d6ce416defb7a7e67fa6a10b182b7ee2c16b42419f9538cac0fe10","impliedFormat":99},{"version":"5f19171239190089286ae47ff6d0c9d6fd2b29342dfd0acf6cc6f66f9d1bb4d5","impliedFormat":99},{"version":"d2a502e2c30b775339bfea8c1d51d3dd5244980a3cd5063ba12227cfe03fef44","impliedFormat":99},{"version":"a64913d689476c4743b020c801672718d1a736ab243907396312b832b65cbdc4","impliedFormat":99},{"version":"2d7bd36015925a348793ebfbc2e2a1fbd390bf335be8b9ec780696ed6dde26d4","impliedFormat":99},{"version":"336e86ff9f1abe22105776c7e757e9580446aac47cf8429ca78e6ce980f284e9","impliedFormat":99},{"version":"1416b07f727c918e532f4134a45e3b07b0a116d9def6d9d347a00c50dc01060e","impliedFormat":99},{"version":"a44330e93e4a7f8759a73736215eef4590b74b3421d955d980ba3db8e6b5a7fe","impliedFormat":99},{"version":"ac84b7a6fdece6cbb0ee141a09b505890c3f11c83446f6304ab9d8e972eee60b","impliedFormat":99},{"version":"97ce0d7c831f1fa7934651c878f1af14090ba5d9ee471db035f465a7dc113202","impliedFormat":99},{"version":"cbcc2f6b5fa06c91e2a35cec35066fd14dacccf185dc8c64c5143381bc2d4b30","impliedFormat":99},{"version":"02bfa3730c6288cac5928a0fb08f01f8c236992b0ef57806c478f0f7bdb6eb83","impliedFormat":99},{"version":"5af40b9066886960f300ad8efd6dd8f77eddeb475903989841cf0385a1edf4c7","impliedFormat":99},{"version":"09d52052be4f3e0f4c8fd5d4954cb215a96e20bf6fade80f95706fbdd5cee318","impliedFormat":99},{"version":"f61822dc28d52652fd897fa846364a0c6e2f9d18c4488c104f4887b4627b3fb4","impliedFormat":99},{"version":"55a4f8c04961c6cb99a6d2c79a375e4ef107339c3ccfabd8d986f2a177dface2","impliedFormat":99},{"version":"a5433e2b1359ac2672f3dd287d58e0733fe778ef7dd71a4f913b01e794104119","impliedFormat":99},{"version":"19d3750d9f8f570936cea4be2a6feac27e1cb88391d7c54e3209f479019c1bb1","impliedFormat":99},{"version":"acc3dd66b849dbe92d07581baef23754c6bd3d4cc453d6d8f5d52e261304a3bc","impliedFormat":99},{"version":"e4813e26203d7c6caee2675461cb8694d0a5a2a692fe955b3becdffb1b229726","impliedFormat":99},{"version":"63e92d208753fa0737072880b8ebfc8a054b8bd4c7af89b620605b7438d7a9d7","signature":"0c1a5de0fe6a22e6065eea7dcbb344229ab4e0f07e5f92f14a9db66cf751df8d"},{"version":"1c1daf58c1c6dd6a31251c58281451563d72fef70981c26f088c175ac531bb1b","signature":"fc1a017c014bc3d02e347c6c45cbb9b2f446bcbddf1444be8885635ce9c10d55"},{"version":"cbd765214348178d45423a3d2b490ecc208c1b14161bcee412e1c675fe8f85f1","signature":"201d60dd52e618046236c6d3fcbc68b5cc0265267c6e3cf680f414666b21ab44"},{"version":"0f4d743600482c51737fda2a6595aac1673da0d2bc468bef49352d3892f9745b","signature":"f4ffdeecb5c6637cebbd072c6b157c4ddebb2de8738d7be1e5456b34bdb5e3dc"},{"version":"dd56a5146cceacc25f0da3ed5210792064e755be6b670f7c9ba0aa82a329dbed","signature":"f5086f68cea44c2b66d7bad5000fcfdbcc08d5fd0ad46461376023d966d04e23"},{"version":"077cddec2a22d3eb1ecb4455d5b488d84270858537e795ac0c51d37e3b8f4cf3","signature":"62c681fe11c849a28fd2ec36e7dd717a90b3892de59b68123594fdfa0b2f7ab0"},{"version":"959734acd7d29267ec7e15a4975ac091e0e806c65fe3367c19c791412720bd99","signature":"fb151c164a917f6ada3b9783fbee8518a8ea80695189b66920aa777aa76419af"},{"version":"b06d9380eb2fb5c35f16d03445b1963e8fef5647c592642f5d8dfbb11cebc1d0","impliedFormat":99},{"version":"33e160560eddf2de63ec16a76b8c1d91cba0f5906ff2f29819e07521d6382f6c","impliedFormat":99},{"version":"c35a50ae47731c15c54b6f359590d24776fdd74374bc85031afb800212181af0","impliedFormat":99},{"version":"f34a1a6965c0bbfa374873432849ec319413414ec186261e97ea70d5dc4d4654","impliedFormat":99},{"version":"a3f4b311af4127148f5dbb1a1ea80468a20725f10ae78001a8dada6e4a618696","impliedFormat":99},{"version":"790d03a802369d9a8ff78db3ece0cab418ec75a120dd5ab9aaeeb1c534493d3a","impliedFormat":99},{"version":"2aba871159bc6021308c5f1d05d7917e0c896c7436dcc3619038f381859fbd68","impliedFormat":99},{"version":"adaa0d941bbf9d3f11262c3739579aef70fea7af193718f8fd67e10a771fff8b","impliedFormat":99},{"version":"f178ad620e827581f2baf23c9c7fabb77d36ead92c15e149012934a30151dcf3","impliedFormat":99},{"version":"ef73187b0072b9b148b03acb62dd12615d704589772ce88e2e2e1bbf0255c802","impliedFormat":99},{"version":"417f252d9e1048c6b47d8a8a5a8e7ff5e9a4de37d6d3468152f2e8eb35b88c29","impliedFormat":99},{"version":"f3b2ef02288170cb72b7d412a7cc67dfd85dd24c168b78b77554f1ec515b5701","impliedFormat":99},{"version":"590460ef9a2cf9ab9e34504aba42d6daffe4ff7c347ded7bd8d9a989e0920c3b","impliedFormat":99},{"version":"da45f9cde46eaf3ef2d3135b5354bd3739897d72b406e0f0ec1f5455108580a1","impliedFormat":99},{"version":"cdfaab58a31962eb873192959e14bca891669fa0edfd469c9c35babc36e490a3","impliedFormat":99},{"version":"206d171772d21c82353069668d680a40df7489bde0446fb70f378256ad9d33ff","impliedFormat":99},{"version":"b6104978f6a9921d214c58df950900dc2a9319815a843d354881fd1bad7e62f0","impliedFormat":99},{"version":"1202e02184a9fcfafad7333bfac2da836eaff83653845e00c9495d9c82c9f635","impliedFormat":99},{"version":"6899200d51b7d7491d15521da878142c5fe50d711afe22e60e359f6db6c98088","impliedFormat":99},{"version":"c5e79b84695297cc596924039842c2ab7821470f1c97c4b1aa9d6a7f5f2d2e3f","impliedFormat":99},{"version":"630927db336d1990af0f696dec46f8844c44c507e3a72069f50754541dfcdf5b","impliedFormat":99},{"version":"b4e7867fcdc8d3c7a23b45cd2d705d2dc576a7f7a70156b17aadd7e01f334315","impliedFormat":99},{"version":"c89ac8740afdfc27b2166cad337e716fe843eba690167cbec823bd689f613e6b","impliedFormat":99},{"version":"23c280c11bce285e8f022b0009e083a1bdfc3839f348a38df9dde0c3c571820c","impliedFormat":99},{"version":"dd5be7220598df4a07b6281e01170d0dad5fcd74bcd27daad19619b1fdacc6e0","impliedFormat":99},{"version":"c526474a2770a981d08d9f00644e2a390475b0f9910888d426a6b2e6686b77ec","impliedFormat":99},{"version":"d5cd7c1300ee1f45cc7ef5afef746a1a34c701b94958532a88d265a9f0068063","impliedFormat":99},{"version":"a01c5aaacdd5362cda056105f2acea8b8c4699ce28ccfe641399dd0b49239419","impliedFormat":99},{"version":"6ca50db42bff8c322c4a7449cb09545ff575a1c4bd4fe6d32a9adb563f3fac2b","impliedFormat":99},{"version":"2a45ce8c09f2f343ac47fede405b833cd0ccb325f9b313fd2febfff8ccebd8bd","impliedFormat":99},{"version":"c67e3783cb681d6277dec8ada124cea535c8c7f4d99f5d6f0fed69bca38f3807","impliedFormat":99},{"version":"76ff4e5304fd22a8ebe6cb01ca297feaa0dbe14988ff43746345b55ab3504e19","impliedFormat":99},{"version":"361cb330385d846fbabf3d4db59be3655d45d7c76a483a03c71b0082014f4e9d","impliedFormat":99},{"version":"43b526d382577c18840fb6c10030753b82eb60a377c50233959437dc6493b047","impliedFormat":99},{"version":"7529eb5b698818410c1858e22ddd689fc3fb6f86d54af06872e40423574d15ab","impliedFormat":99},{"version":"3ee6957c2293a69d9f7ff232da8425d396e3115e9ba261a3e532d350e2bebdb0","impliedFormat":99},{"version":"6f70230fab4be1aebb2ef95828669b89dda35280965c55ce88aecaf94848f036","impliedFormat":99},{"version":"8d87cfe48ed90323bac6da16f46aff7fa293e32057cee38d14aab11e9f66e4c5","impliedFormat":99},{"version":"eaa88006a1ba314595330bf47f08eb4a468e7764a1060d6e133183aed7babe13","impliedFormat":99},{"version":"0645cd3e93a26c8a7c16595dc63a169d137f6b58bf50cca98449ea23b333475f","impliedFormat":99},{"version":"1586cdd29126d1a54dee78b46eae7b26c7d473bfd7eaa8bbfc5bf2a76946c545","impliedFormat":99},{"version":"accf489fbfb2dac5d38e71b2fe81687fd44d64b21b5631f6084b9acff57b4d48","impliedFormat":99},{"version":"0c5390e201ce2722d720a82c2105e07606576903e599ed3af15fb8e4e45ea2f4","impliedFormat":99},{"version":"b556cdad15c625405519814fac6ef355484a25c1cc9344e6e5dc110d57a8cdff","impliedFormat":99},{"version":"3e810c39b288e419bc933c293cf5703b948b73bbf07050527c9d73f7107c0c4e","impliedFormat":99},{"version":"9278bac0ed6d0d99fcee6f0f217399ec12edc1d10a9b3c0873c7b97a25223384","impliedFormat":99},{"version":"6f3dccb219fdfb3816c02e9a99d959c853c855c7b7beadecd3a3d3b0a374d953","impliedFormat":99},{"version":"2eeaf63552fd9c5d3ab821464d8f4a5db0de7132331acafafce577f58d871a39","impliedFormat":99},{"version":"9025d4254c18b31d9220e4d33dad5035507ee1e863d1858891e56ffe0eb2ff13","impliedFormat":99},{"version":"001a2571401e839a4b68cec0af11c6188f766ebba01cc1e1895027e3d35030b1","impliedFormat":99},{"version":"846715a4679c9be48434e2b6dfcc466588301a733f51ba0ea15e348fc7312528","impliedFormat":99},{"version":"0b77894d2bbddb9024a230e9d00eb9df633c8d190887f92959d9683a81286c39","impliedFormat":99},{"version":"fe438b40de8ec7fb4a1734f8a3c8315aafcc90dcd15512484e7dcafac310e856","impliedFormat":99},{"version":"96d53f66b4fa3ab1ef688b676450895730863e298e62dc6bc051442195aa1a5f","impliedFormat":99},{"version":"877f538909bb2120565ca0c39e93341e5a4a737bc5fda014c5148c3676fec8df","impliedFormat":99},{"version":"fba10fca31d18ed5fafacb21e2ed389ae5b347b552c5b7a69023a563e27fdf5d","impliedFormat":99},{"version":"600beaefece9011d792a4e165db46b9de5563e025e941aebd069b95cb30e7af5","impliedFormat":99},{"version":"bdc387fdccb98bd48da4cd4cbc8f29342586c2f8ac7215396547442c3b0ff8be","impliedFormat":99},{"version":"7ed291bf246832b2745528de9e68b2bd3e2fe7cdf32631665a326740c3905836","impliedFormat":99},{"version":"e61bc77843da1980c2b6851df589e730bbbdada172986ecb47101974f44aeb5a","impliedFormat":99},{"version":"00d79566e3d5682a968b44aed9eba1557b1f62c884546fee2bca88be8c477104","impliedFormat":99},{"version":"f82d26f23d5e3093ca86458544b54befaf0957a5535149f673976187a60f9e6b","impliedFormat":99},{"version":"9f0d621f43198d0db510779ba65ca3d1a8fbca37f408efa5e25ac5ca01f74875","impliedFormat":99},{"version":"9bc53a206914661c0f98bb869eeda7214778367683a5e3e0fe7c6eaa6c474556","impliedFormat":99},{"version":"71987002d6409ea81e705fbfb97afc644851c16d9fbb5e90fcb3bc3e00e4ac5d","impliedFormat":99},{"version":"70e86eda2938040292fac398debcbe47114a3b9bd6eb8f632a89dcd23ac0e2f0","impliedFormat":99},{"version":"6241345f59b24be6e85c159db51cfd937f853aa8020b38b2aac5345813b25a8d","impliedFormat":99},{"version":"583eb3b56fc84b730641e623070f6eefa3fbacae4e15a6a3f19e1b09c81a7685","impliedFormat":99},{"version":"1c96afc9b678d9f15ec1b045864ea6cff25c134fd594cdddd42d66d99c8663b5","impliedFormat":99},{"version":"cd37c2470a4ac1ad7e1bdbd29bc8953589a4da6a7326a3bfd885bb7b220ffcde","impliedFormat":99},{"version":"ce82368397e5c926481222b9adb2547e4f9e0206982ac71c301284d107e77ebb","impliedFormat":99},{"version":"602a7beeec46d5f481d8f017adc1e01314101dea37f8f9ba3debcf88c83a44d5","impliedFormat":99},{"version":"d4e62d466b6302ad6419cf38669dda1eabe141200b15928a120ec32423904fdb","impliedFormat":99},{"version":"7baac7cf35ef7ef1b049fdfaa215f66891fd677bd617ec7e9a89ca9d430406d1","impliedFormat":99},{"version":"7869a702c21d4fe08180df0919c6365d4662cbdd9e0cbfd17bae7222d10fae58","impliedFormat":99},{"version":"e2944368a3fc08ea1ecde61384f2aea35d8551f02e20373f26f19a1e15f33c01","impliedFormat":99},{"version":"1e13585db16f3406755c1f7a3b32a2003d0b04f83df215fafae61c665de938a1","impliedFormat":99},{"version":"5dbbbf480819904753f84c454eba9bebc455b19966195e97f6b365e7cdcae4b6","impliedFormat":99},{"version":"a96af1a20dbd8aeffb9dc6c2461c7d9d131979390a8b41ca6975f652e2a897a4","impliedFormat":99},{"version":"46f1bf29bd4165fe2bff54eecd23a31f45b1432ab50ba3a0304100697dce91b0","impliedFormat":99},{"version":"1b5cbd26dd659f174a672c6d81b3088c9f46ae0dfd160ce93d2afad5bb7151a6","impliedFormat":99},{"version":"261790ad96cccfe94b94e4825a11a719210f9251d430e05829ed4f0b3d90fe48","impliedFormat":99},{"version":"55eca0dcf8f3192e5906e73aa8c7b88d898b1351bba84c69f4c5c38ab4e43f6f","impliedFormat":99},{"version":"686832a82159a4ea4dd25329c3a99c0a94d9b2a83e7b4ceeb6dfa58bd6707aa6","impliedFormat":99},{"version":"ac339c5b90464b77c2f28dcc686944c9d084f62e680960619f6832471da398ef","impliedFormat":99},{"version":"5090c4c9eb11d488fe455e985891f55e90d65365933d5797b30c188fdbe8015c","impliedFormat":99},{"version":"959c4529d03aebf8f76af7e58797800a25a6a14f560228a69235edcac4e8bfde","impliedFormat":99},{"version":"e893479eb9d99a9c479248a70650f43d3630614ccd0ef07352e208a23988f7cd","impliedFormat":99},{"version":"04d51092411e37e0df07828195cf9e0462861523461eba25eb9dc52344ead7d6","impliedFormat":99},{"version":"a2bf25976a0749263db4e003c2db061217b6e63aaa674f3f2e9dbaeb75f0cf87","impliedFormat":99},{"version":"92bf26f78ac596c9f643b340974854edb633f4719c7d9ad812367883e90272b0","impliedFormat":99},{"version":"afc885e843cf91a18e1c9b674d958c5c71ad3b8d2c9762c6983025d4a30d0918","impliedFormat":99},{"version":"01ff8948288663a825d5d4b5a48fc4dd54adfd4136c00c11d2a01eaf19084340","impliedFormat":99},{"version":"fc61c6168137297ec33f5720835a8f1e7fc424b00e0faab2d24e980dd0bd03c2","impliedFormat":99},{"version":"0b1cdbb2aef2c6ce308de85e80148059f7e16bf727eb3830a2e3e744c4aba6ad","impliedFormat":99},{"version":"1568200178c3ffe44819798eab91cbede3b302ff487149b18aa814a9410645c9","impliedFormat":99},{"version":"3ccf7553bce15ff3fd0b3a0cf4ee9177e9835577aeaeff17c1c6e04a5fa60b4b","impliedFormat":99},{"version":"44182cb6be79f471d6c4a40937a8d6d183af1a87cb26a3bad310c613d006351e","impliedFormat":99},{"version":"261e48dbb899ec4e2de4b9a72b8127a3314d28828b357288bcdebf39be32c126","impliedFormat":99},{"version":"80b3a4c879b86f31611611d628c61546a3924a17609d2abce5af75ab1526bd17","impliedFormat":99},{"version":"69260d8b8cd174b1fa69eb05cad51051da0cb9bad809cf391c1d8234d4b403a6","impliedFormat":99},{"version":"79992568ff244f34b7112942a3d52eb9375885d7e1d8099fc1a17552d14c6fe5","impliedFormat":99},{"version":"dde1fa7a49e820b8801d01bfe9e9b7829d9c62e8eb82a29ef2c28f239aadb5f2","impliedFormat":99},{"version":"e0cd63cf24da521cea60545e5573cbd7eb13d024cca52cc342032e2db987e7b0","impliedFormat":99},{"version":"b1c80011f3a457bbf2e1dec4b6016e63121e60de3b4ff805f261f69016aeada5","impliedFormat":99},{"version":"0bc0511027cff18f7025fdb354850e43083e16d2af2a48da869e095b8df05616","impliedFormat":99},{"version":"70aa4b70c1ebd45e76e4dc63b414d0a7e12fd41ed860da7d9e42737e2a11559b","impliedFormat":99},{"version":"7602bb9744aa13918f0dc9713e4a84e9e97cb099317eaf164c042a636311963d","impliedFormat":99},{"version":"de557ce115571688c6a8dbd486281e4d5a8068ba9c8339ab483014d4aee792a0","impliedFormat":99},{"version":"d942ff22d0bd25a2f26c50d2cc59d6cde2bf7a6cd428e3dd26356033015391ad","impliedFormat":99},{"version":"06e3997ff9c559d21c94113cb949cd03bc44f16cd77c2d7bd42f85c9be29a70f","impliedFormat":99},{"version":"f0029f53c3acc648f4215bc446cd60d92e8c29a8e73cd4008c1e1b37f91eb811","impliedFormat":99},{"version":"b59791581c6df3f62a81a0e96fb3e833a2f5b36304bcb074d765fd79d2fba320","impliedFormat":99},{"version":"627109c27f42261a2148c5758e5529e0694e09ffb74c2cb20e86a7a3682134c5","impliedFormat":99},{"version":"233ab9a64155ad15a070b03a52f8192ace79a29c03a9d4f7cea88929afeb1d45","impliedFormat":99},{"version":"fa7781b202e5845b1609eb84653dfc54189ce4e891909259a9aea73cba9859e9","impliedFormat":99},{"version":"a54b716354950f63c6e8ad298bdc90f94dab416eaecb3d32e9c6dd1bccc79eb0","impliedFormat":99},{"version":"38e6306d5a856a848f6737da319f79b703006b16ced089b2c4e80d04efa58adf","impliedFormat":99},{"version":"0f1434bb4e24cb50e9e73f0144414af44c1610514cb1ba0665936fb4993a3db3","impliedFormat":99},{"version":"1f15564e79f492da5842d1fd5f29cae75d37737e5abb4690b3b4bb9e7e856f3b","impliedFormat":99},{"version":"91d60e5b5441b738133c095fa2d6a809a3c3c4b75556d7f13cc19df48e20de12","impliedFormat":99},{"version":"6beeccd58698b2f72df8cff766e658f4adf98ef39ce1402799d4c18db1b2d803","impliedFormat":99},{"version":"980b920f853e57fd46983d0f5a2e7164f2d2e9dac780aa04d4325aa235c0a75e","impliedFormat":99},{"version":"3a39f3263b853937eca381775fb7558b4867a2714a89d770ea98c30dd1fadaa7","impliedFormat":99},{"version":"ced0b20e13a057c20d802a11870ff310579c6e80a5e5e45166de9e5f0e88f8d3","impliedFormat":99},{"version":"62f73fab1b97e50ee8092499cd5a8b5085abf700b372c24aa53e1879a3d68979","impliedFormat":99},{"version":"a393c298d0678e3e0b610c1069e3721de31dcdf1f885d6ecd813b837330156aa","impliedFormat":99},{"version":"e4784320828932df26b306ec4839c8f9496b959173179a29b29163efe301a7b6","impliedFormat":99},{"version":"5dbb45a20780dd90e28869e05035e681c90afa007364f01c3c3cf14c4cc04467","impliedFormat":99},{"version":"c9e1e15b8ab027dbbe4a2d85c0669905497e0d55a09c702f06c79e57645e347b","impliedFormat":99},{"version":"4078ccf4490cf97463a7ff2f9e02ff30a36ed2e4b18e8566445838d0d4d603a3","impliedFormat":99},{"version":"727d10cd972ba9b52da4defa702f65739323f9ff9949a7e9c7bd55fa76c37ac5","impliedFormat":99},{"version":"9420bd92184bda15c9a04daf532afae98df4fbbb17a930983ca664e929fe6c6a","impliedFormat":99},{"version":"684ad94c713c5f22951e9f433d52786c8508447510005459b6d9764c75cd2c74","impliedFormat":99},{"version":"3e00971f3dcbbe00de774d5387485454c98b8873bb636b8e6bcd4d9915ee0a2d","impliedFormat":99},{"version":"931674e02ae4a041ad822756dd4dbd30236bb3b52e21201aabe678b734baedbf","impliedFormat":99},{"version":"940961ea4bd1da98cef1edca26d6380eeb0c3e06df2e9d7a29dcb57303fb0326","impliedFormat":99},{"version":"581f0278df053736226f58d9a4671e2bdba6508f8be23751247c846e82736a0a","impliedFormat":99},{"version":"ff7eebe9610f96732e29782294ee55529ca5ff804e2325ba992cab0c2ca4c05f","impliedFormat":99},{"version":"e0138d7c2408df5bcc623e3e3b496ffbc405421c7dd7ae6ecf897a657926e2c4","impliedFormat":99},{"version":"18bbffdecf7eed3cefa4a37f34dc879050e629231ba0bd011e2ec6f7503a6cfa","impliedFormat":99},{"version":"fd2e67b97e27962b7c2a6083a2ebf936e7dc2b2335286df2ef5cfc09eb8522b9","impliedFormat":99},{"version":"2e1ccba239f8919e62f83719bc95b4d47b1d1e0187cc6968b5481c86dbbffe3c","impliedFormat":99},{"version":"983bd1482518c10b3e7549f6fe3f51cb7b9868f38ea715cc0c19c8ad6c5c34ca","impliedFormat":99},{"version":"728cf2a025de44eb3e43b3e87d9c8bb2feafe8a34de5ba9b2158317b265125f0","impliedFormat":99},{"version":"54977f121205ea7c7a6c86b42d813dc55d7db6e69c9554a262fc64cae0c7eacf","impliedFormat":99},{"version":"2f94e898529d71f48c841206140ac13988a5ab275bddf852922ad75b7021537d","impliedFormat":99},{"version":"d27f8ee9a610635b566109a359d00923f7e8f286ab7936894671c39a006e8b1a","impliedFormat":99},{"version":"5822d798e08ca6c321c2e5deb337e3b6d6472f2133440c4a2468f0ddee71ab75","signature":"f3688333654359ade219d4e94fb2a91f12339e46c19e03e451714a21e577435c"},{"version":"8db3f96517a120bade1643b55b24ed75a18970f4d38221402d9eccdbb5106fdb","signature":"f9a16b54b8913022325e94f69c48805664e20b6556089e3f3506306b97fe129e"},{"version":"e34e93f5498ed7bc9c53a9ee97d679f90fb941b9ab4190b5ba0747184ef12ad3","signature":"6411762007a15dd690acee3a833c9d06863ca69119d48bca9527fe1f81789e17"},{"version":"826dbed35d26577d6f4b5e24f43c7872739c3f2e2710c611bd916c71e7ead76c","signature":"0fce6ce21d226f06ee4ec92d02505e204c3923a1142ca5f35b337057129b8945"},{"version":"188689411ae7835d75f866021a4ee438a20786cf2b2713ddc5ea50da56e8dcb1","signature":"77686fe8104e5c58fe273a2e8d3e7b423f26cd950395ddf4f453921c66060073"},{"version":"cecf275eda8f9503ed2596ae41c9af7bf59d56ab70f57dcd65ebfcbbb876a1c5","signature":"a0cee837e5373cf7095c21e187a4580b8216a64ecd64aa80d19a6967e6d1bb59"},{"version":"e7434e5f90aaa3c85f4658f7e3d3dbe8fc90d286ec4338c282f90d3a6bda0e60","signature":"006d76e50e7f1e25a37da6d436aad571aeb2d646c47f833f9bff146080c9605d"},{"version":"f5c96a4ee0e61f5664d81620d619f5db8aee48c11dd320d767701570438cf0f4","signature":"52a7d02b1fe8db0b42f5259d721b5c7f6bea6d862b8c5ba4331b7169d058305f"},{"version":"bbf69504a153645773109c5955c205947bab3599ee4040e23435f29b528f3b79","signature":"652b463ed1eaf99f278d254973cffb72ea7ef2e76ed166857abe2161fc04d04c"},{"version":"0dac072a14e3269d00b11eae5125b109761eb554887e30a44cc32d669643372d","signature":"ce9182df67b7ff5fd39e4b85aa35925a415d42f479d042c6798ab79a302fc3da"},{"version":"3efdcb8d23bbac7462611f4c50817e856d8e705886412a99c6c60e5fd56578db","signature":"16e36f8bdc965f654e88ae74de905ed84df7bc77cd00bf8f1cee2a20a5a77783"},{"version":"55f15686670e197a8ead330f882ab203109f0386b928bd9b19d1d7291f0f22aa","signature":"cafc2d90a1946bf6b9447683f11a384aeca03cb10c38b8945e4ceb287f8a97fb"},{"version":"695ec5bc819d592000baba9c4e6b34770a1853a60eb27ea02582412698db23f4","signature":"a15b80466a1f3ed8be589bff280561373c2b0dfa7b22f14ce7dbdd0b0d64ec49"},{"version":"64e4a36aabd778ea468c12dba55fb5990d2c711b295f1b580c6c859e667492d0","signature":"404049eff8654148369e62fb3e430ac039e762b0f5e25f1aeec5b5c35499710e"},{"version":"002a6f95435929fb339cf9495f6faecc314a30fc0b434f08b7ece78e5152339f","signature":"b46a7be2bec9c094170bd64ff5e51062de78828862893ccb070c57c58948abf4"},{"version":"f6cd17ae210c40fb0bd4105e9053842942956a8434d55755f1630313c71f658d","signature":"b0f87819f7baf6659bf4531fcf0687f9333c26d56bf86c00a5162165d68a2aeb"},{"version":"9628ac25df4cabcb3d7510fb0c46609851fd475327917bbedcd2b4f258657212","signature":"a0ad37ab2c1f847fe8bb1e9bdfef18ee4719429f1ed808f8aa543d363f23069a"},{"version":"fb7a0827a700b2998bc668b649c22d0cb606ff9557b0990672449e9f518fda72","signature":"e034180f88ee9195af896f639e7cee117b277e3b765995424f8991b3f6b4dda2"},{"version":"d6bc387f53aaf1f3d8cb4c5ea4e4c84865e4fa26d42472ee446bac50e0f7125b","signature":"b871a827a3198ec8b0e0281e1a5dad54d3a3cd2b319f4fd162d55c35833d91f8"},{"version":"ab596340e3c0d463ad4207a8c70118746d30d011de74dc13cd576754169b3b8f","signature":"842f5c6f3899cd852c58d006876c188b06c9093b7372f967948198882a9c32ba"},{"version":"2dbbbcc4278e15615c72a84c5fc531eb40c20251e1957fbc0940cb10ac54adc0","signature":"7a17b7e9cc71135e7ef3bc471a24c78944735953b2854b2f04ee038af64d1a5a"},{"version":"31cfe5c565546aa6c6499ddc519adabe52a4bb5aefcffaefb3aa87f4a9b191a5","signature":"641ebb426775fd4f2777542ad3e5d27181fb14d48d2817282d598262a540ffc4"},{"version":"a28ac3e717907284b3910b8e9b3f9844a4e0b0a861bea7b923e5adf90f620330","impliedFormat":1},{"version":"b6d03c9cfe2cf0ba4c673c209fcd7c46c815b2619fd2aad59fc4229aaef2ed43","impliedFormat":1},{"version":"82e5a50e17833a10eb091923b7e429dc846d42f1c6161eb6beeb964288d98a15","impliedFormat":1},{"version":"670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","impliedFormat":1},{"version":"13b77ab19ef7aadd86a1e54f2f08ea23a6d74e102909e3c00d31f231ed040f62","impliedFormat":1},{"version":"069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9","impliedFormat":1},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0671b50bb99cc7ad46e9c68fa0e7f15ba4bc898b59c31a17ea4611fab5095da","affectsGlobalScope":true,"impliedFormat":1},{"version":"d802f0e6b5188646d307f070d83512e8eb94651858de8a82d1e47f60fb6da4e2","affectsGlobalScope":true,"impliedFormat":1},{"version":"aa83e100f0c74a06c9d24f40a096c9e9cc3c02704250d01541e22c0ae9264eda","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"387a023d363f755eb63450a66c28b14cdd7bc30a104565e2dbf0a8988bb4a56c","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"3a80bc85f38526ca3b08007ee80712e7bb0601df178b23fbf0bf87036fce40ce","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"2931540c47ee0ff8a62860e61782eb17b155615db61e36986e54645ec67f67c2","impliedFormat":1},{"version":"3c8e93af4d6ce21eb4c8d005ad6dc02e7b5e6781f429d52a35290210f495a674","impliedFormat":1},{"version":"f6faf5f74e4c4cc309a6c6a6c4da02dbb840be5d3e92905a23dcd7b2b0bd1986","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"33e981bf6376e939f99bd7f89abec757c64897d33c005036b9a10d9587d80187","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"3bacf516d686d08682751a3bd2519ea3b8041a164bfb4f1d35728993e70a2426","impliedFormat":1},{"version":"00b21ef538da5a2bbe419e2144f3be50661768e1e039ef2b57bb89f96aff9b18","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"e843e840f484f7e59b2ef9488501a301e3300a8e3e56aa84a02ddf915c7ce07d","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"78b29846349d4dfdd88bd6650cc5d2baaa67f2e89dc8a80c8e26ef7995386583","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"48cc3ec153b50985fb95153258a710782b25975b10dd4ac8a4f3920632d10790","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"18f8cfbb14ba9405e67d30968ae67b8d19133867d13ebc49c8ed37ec64ce9bdb","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"866078923a56d026e39243b4392e282c1c63159723996fa89243140e1388a98d","impliedFormat":1},{"version":"830171b27c5fdf9bcbe4cf7d428fcf3ae2c67780fb7fbdccdf70d1623d938bc4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d97fb21da858fb18b8ae72c314e9743fd52f73ebe2764e12af1db32fc03f853f","affectsGlobalScope":true,"impliedFormat":1},{"version":"f68328826a275104d92bd576c796c570f66365f25ea8bbaaa208727bce132d5f","impliedFormat":1},{"version":"7cf69dd5502c41644c9e5106210b5da7144800670cbe861f66726fa209e231c4","impliedFormat":1},{"version":"72c1f5e0a28e473026074817561d1bc9647909cf253c8d56c41d1df8d95b85f7","impliedFormat":1},{"version":"18334defc3d0a0e1966f5f3c23c7c83b62c77811e51045c5a7ff3883b446f81f","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b17fcd63aa13734bf1d01419f4d6031b1c6a5fb2cbdb45e9839fb1762bdf0df","impliedFormat":1},{"version":"c4e8e8031808b158cfb5ac5c4b38d4a26659aec4b57b6a7e2ba0a141439c208c","impliedFormat":1},{"version":"2c91d8366ff2506296191c26fd97cc1990bab3ee22576275d28b654a21261a44","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"beb77fcd86c8cee62c32b2fb82753f5bc0e171d938e20af3cb0b8925db78d60b","impliedFormat":1},{"version":"289e9894a4668c61b5ffed09e196c1f0c2f87ca81efcaebdf6357cfb198dac14","impliedFormat":1},{"version":"25a1105595236f09f5bce42398be9f9ededc8d538c258579ab662d509aa3b98e","impliedFormat":1},{"version":"aa9224557befad144262c85b463c0a7ba8a3a0ad2a7c907349f8bb8bc3fe4abc","impliedFormat":1},{"version":"a2e2bbde231b65c53c764c12313897ffdfb6c49183dd31823ee2405f2f7b5378","impliedFormat":1},{"version":"ad1cc0ed328f3f708771272021be61ab146b32ecf2b78f3224959ff1e2cd2a5c","impliedFormat":1},{"version":"8d86c8d8c43e04cc3dde9953e571656812c8964a3651203af7b3a1df832a34df","affectsGlobalScope":true,"impliedFormat":1},{"version":"0121911fcc364eb821d058cf4c3b9339f197eccbe298098a4c6be0396b607d90","impliedFormat":1},{"version":"c6176c7b9f3769ba7f076c7a791588562c653cc0ba08fb2184f87bf78db2a87c","impliedFormat":1},{"version":"6def204d0b267101d3a42300a7363f53406c5d86b932e76e2365bf89689a85c4","impliedFormat":1},{"version":"4f766affd1281935fe5f7fd5d7af693a7c26d81adef7c1aefb84b9cd573a9cbb","impliedFormat":1},{"version":"165a0c1f95bc939c72f18a280fc707fba6f2f349539246b050cfc09eb1d9f446","impliedFormat":1},{"version":"bbf42f98a5819f4f06e18c8b669a994afe9a17fe520ae3454a195e6eabf7700d","impliedFormat":1},{"version":"c0bb1b65757c72bbf8ddf7eaa532223bacf58041ff16c883e76f45506596e925","impliedFormat":1},{"version":"c8b85f7aed29f8f52b813f800611406b0bfe5cf3224d20a4bdda7c7f73ce368e","affectsGlobalScope":true,"impliedFormat":1},{"version":"7baae9bf5b50e572e7742c886c73c6f8fa50b34190bc5f0fd20dd7e706fda832","impliedFormat":1},{"version":"e99b0e71f07128fc32583e88ccd509a1aaa9524c290efb2f48c22f9bf8ba83b1","impliedFormat":1},{"version":"76957a6d92b94b9e2852cf527fea32ad2dc0ef50f67fe2b14bd027c9ceef2d86","impliedFormat":1},{"version":"5e9f8c1e042b0f598a9be018fc8c3cb670fe579e9f2e18e3388b63327544fe16","affectsGlobalScope":true,"impliedFormat":1},{"version":"a8a99a5e6ed33c4a951b67cc1fd5b64fd6ad719f5747845c165ca12f6c21ba16","affectsGlobalScope":true,"impliedFormat":1},{"version":"a58a15da4c5ba3df60c910a043281256fa52d36a0fcdef9b9100c646282e88dd","impliedFormat":1},{"version":"b36beffbf8acdc3ebc58c8bb4b75574b31a2169869c70fc03f82895b93950a12","impliedFormat":1},{"version":"de263f0089aefbfd73c89562fb7254a7468b1f33b61839aafc3f035d60766cb4","impliedFormat":1},{"version":"70b57b5529051497e9f6482b76d91c0dcbb103d9ead8a0549f5bab8f65e5d031","impliedFormat":1},{"version":"8c81fd4a110490c43d7c578e8c6f69b3af01717189196899a6a44f93daa57a3a","impliedFormat":1},{"version":"1013eb2e2547ad8c100aca52ef9df8c3f209edee32bb387121bb3227f7c00088","impliedFormat":1},{"version":"b827f8800f42858f0a751a605c003b7ab571ff7af184436f36cef9bdfebae808","impliedFormat":1},{"version":"363eedb495912790e867da6ff96e81bf792c8cfe386321e8163b71823a35719a","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"6b306cd4282bbb54d4a6bb23cfb7a271160983dfc38c67b5a132504cfcc34896","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea713aa14a670b1ea0fbaaca4fd204e645f71ca7653a834a8ec07ee889c45de6","impliedFormat":1},{"version":"450172a56b944c2d83f45cc11c9a388ea967cd301a21202aa0a23c34c7506a18","impliedFormat":1},{"version":"9705cd157ffbb91c5cab48bdd2de5a437a372e63f870f8a8472e72ff634d47c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ae86f30d5d10e4f75ce8dcb6e1bd3a12ecec3d071a21e8f462c5c85c678efb41","impliedFormat":1},{"version":"3af7d02e5d6ecbf363e61fb842ee55d3518a140fd226bdfb24a3bca6768c58df","impliedFormat":1},{"version":"e03460fe72b259f6d25ad029f085e4bedc3f90477da4401d8fbc1efa9793230e","impliedFormat":1},{"version":"4286a3a6619514fca656089aee160bb6f2e77f4dd53dc5a96b26a0b4fc778055","impliedFormat":1},{"version":"7dfa742c23851808a77ec27062fbbd381c8c36bb3cfdff46cb8af6c6c233bfc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb078cfcd14dc0b1700a48272958f803f30f13f99111c5978c75c3a0aa07e40e","affectsGlobalScope":true,"impliedFormat":1},{"version":"784490137935e1e38c49b9289110e74a1622baf8a8907888dcbe9e476d7c5e44","impliedFormat":1},{"version":"420fdd37c51263be9db3fcac35ffd836216c71e6000e6a9740bb950fb0540654","impliedFormat":1},{"version":"73b0bff83ee76e3a9320e93c7fc15596e858b33c687c39a57567e75c43f2a324","impliedFormat":1},{"version":"3c947600f6f5664cca690c07fcf8567ca58d029872b52c31c2f51d06fbdb581b","affectsGlobalScope":true,"impliedFormat":1},{"version":"493c64d062139b1849b0e9c4c3a6465e1227d2b42be9e26ec577ca728984c041","impliedFormat":1},{"version":"d7e9ab1b0996639047c61c1e62f85c620e4382206b3abb430d9a21fb7bc23c77","impliedFormat":1},{"version":"be1cc4d94ea60cbe567bc29ed479d42587bf1e6cba490f123d329976b0fe4ee5","impliedFormat":1}],"root":[[250,256],[405,426]],"options":{"allowSyntheticDefaultImports":true,"composite":true,"declaration":true,"declarationMap":false,"esModuleInterop":true,"jsx":4,"module":99,"outDir":"./lib-dist","rootDir":"./lib","skipLibCheck":true,"sourceMap":false,"strict":true,"target":7},"referencedMap":[[256,1],[414,2],[416,3],[413,4],[417,5],[418,6],[421,7],[423,8],[255,9],[253,10],[409,11],[424,10],[406,1],[408,12],[254,12],[425,10],[415,10],[252,12],[426,13],[251,14],[410,15],[411,16],[420,17],[422,18],[405,19],[419,20],[407,20],[250,21],[412,22],[249,23],[248,24],[155,25],[156,26],[157,27],[158,28],[159,29],[160,30],[161,31],[162,32],[164,33],[165,34],[166,35],[167,36],[168,37],[169,38],[170,39],[171,40],[172,41],[173,42],[174,43],[175,44],[176,45],[177,46],[178,47],[179,48],[180,49],[181,50],[182,41],[183,51],[184,52],[185,53],[187,54],[186,41],[189,55],[190,56],[188,41],[191,57],[192,58],[193,59],[194,60],[195,61],[196,62],[197,63],[163,41],[198,64],[199,65],[200,66],[201,67],[202,68],[203,69],[204,70],[205,71],[206,72],[207,73],[154,41],[208,74],[209,75],[210,76],[211,77],[212,78],[213,79],[214,80],[215,81],[216,82],[217,83],[218,84],[219,85],[220,86],[221,87],[222,88],[223,89],[224,41],[225,90],[226,91],[227,92],[228,93],[229,94],[230,95],[231,96],[232,97],[233,98],[234,99],[235,100],[236,101],[237,102],[238,103],[239,104],[240,105],[241,106],[242,107],[243,108],[244,109],[245,110],[246,111],[247,112],[404,113],[399,114],[270,115],[271,116],[272,117],[273,118],[274,119],[275,120],[276,121],[277,122],[278,123],[279,124],[280,125],[281,126],[282,127],[283,128],[260,41],[257,41],[261,129],[265,130],[263,131],[262,129],[267,132],[284,133],[285,134],[286,135],[287,136],[288,137],[289,138],[290,139],[291,140],[292,141],[293,142],[294,143],[296,144],[295,145],[297,146],[298,147],[299,148],[300,149],[301,150],[302,151],[258,152],[303,153],[304,154],[305,155],[259,156],[306,157],[268,158],[307,159],[308,160],[309,161],[310,162],[311,163],[312,164],[313,165],[314,166],[315,167],[316,168],[317,169],[318,170],[319,171],[320,172],[321,173],[322,174],[323,175],[324,176],[325,177],[326,178],[327,179],[328,180],[329,181],[330,182],[331,183],[332,184],[333,185],[334,186],[335,187],[264,188],[336,189],[337,190],[338,191],[269,41],[339,192],[340,193],[341,194],[342,195],[343,196],[344,197],[345,198],[346,199],[347,200],[348,201],[266,41],[349,202],[350,203],[351,204],[352,205],[353,206],[354,207],[355,208],[356,209],[357,210],[358,211],[359,212],[360,213],[361,214],[362,215],[363,216],[364,217],[365,218],[366,219],[367,220],[368,221],[369,222],[370,41],[371,223],[372,224],[373,225],[374,226],[375,227],[376,228],[377,229],[378,230],[380,231],[379,232],[381,233],[382,234],[383,235],[384,236],[385,237],[386,238],[387,239],[388,240],[389,241],[390,242],[391,243],[392,244],[393,245],[394,246],[395,247],[396,248],[397,249],[398,250],[400,251],[401,252],[402,252],[403,252],[77,253],[78,254],[76,255],[79,256],[90,257],[91,257],[92,257],[93,257],[98,258],[94,259],[95,259],[96,259],[97,259],[99,260],[89,261],[84,258],[88,262],[85,263],[86,258],[87,258],[82,264],[81,263],[83,265],[75,255],[74,266],[67,267],[68,255],[66,268],[72,269],[56,270],[60,271],[61,255],[62,255],[54,255],[55,255],[71,272],[63,255],[57,255],[58,255],[64,255],[65,255],[69,255],[59,255],[73,273],[153,274],[152,275],[100,276],[101,277],[102,278],[103,279],[104,280],[105,281],[106,282],[107,283],[108,284],[109,285],[110,286],[111,287],[112,288],[113,289],[114,290],[115,291],[116,292],[117,293],[118,294],[119,295],[120,296],[121,297],[122,298],[123,299],[124,300],[125,301],[126,302],[127,303],[128,304],[129,305],[130,306],[131,307],[132,41],[133,41],[134,308],[135,309],[136,310],[137,311],[138,312],[139,313],[140,314],[141,315],[142,41],[143,41],[144,41],[145,316],[146,317],[147,318],[148,319],[149,320],[150,321],[151,322],[429,323],[427,255],[80,255],[70,255],[432,324],[428,323],[430,325],[431,323],[433,255],[434,255],[488,326],[489,326],[490,327],[437,328],[491,329],[492,330],[493,331],[435,255],[494,332],[495,333],[496,334],[497,335],[498,336],[499,337],[500,337],[501,338],[502,339],[503,340],[504,341],[438,255],[436,255],[505,342],[506,343],[507,344],[541,345],[508,346],[509,255],[510,347],[511,348],[512,349],[513,350],[514,351],[515,352],[516,353],[517,354],[518,355],[519,355],[520,356],[521,255],[522,255],[523,357],[525,358],[524,359],[526,360],[527,361],[528,362],[529,363],[530,364],[531,365],[532,366],[533,367],[534,368],[535,369],[536,370],[537,371],[538,372],[439,255],[440,373],[441,255],[442,255],[484,374],[485,375],[486,255],[487,360],[539,376],[540,377],[542,378],[50,255],[52,379],[53,378],[51,255],[48,255],[49,255],[8,255],[9,255],[11,255],[10,255],[2,255],[12,255],[13,255],[14,255],[15,255],[16,255],[17,255],[18,255],[19,255],[3,255],[20,255],[21,255],[4,255],[22,255],[26,255],[23,255],[24,255],[25,255],[27,255],[28,255],[29,255],[5,255],[30,255],[31,255],[32,255],[33,255],[6,255],[37,255],[34,255],[35,255],[36,255],[38,255],[7,255],[39,255],[44,255],[45,255],[40,255],[41,255],[42,255],[43,255],[1,255],[46,255],[47,255],[460,380],[472,381],[458,382],[473,383],[482,384],[449,385],[450,386],[448,387],[481,388],[476,389],[480,390],[452,391],[469,392],[451,393],[479,394],[446,395],[447,389],[453,396],[454,255],[459,397],[457,396],[444,398],[483,399],[474,400],[463,401],[462,396],[464,402],[467,403],[461,404],[465,405],[477,388],[455,406],[456,407],[468,408],[445,383],[471,409],[470,396],[466,410],[475,255],[443,255],[478,411]],"latestChangedDtsFile":"./lib-dist/index.d.ts","version":"5.9.3"}
+26
tsconfig.node.json
··· 1 + { 2 + "compilerOptions": { 3 + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", 4 + "target": "ES2023", 5 + "lib": ["ES2023"], 6 + "module": "ESNext", 7 + "types": ["node"], 8 + "skipLibCheck": true, 9 + 10 + /* Bundler mode */ 11 + "moduleResolution": "bundler", 12 + "allowImportingTsExtensions": true, 13 + "verbatimModuleSyntax": true, 14 + "moduleDetection": "force", 15 + "noEmit": true, 16 + 17 + /* Linting */ 18 + "strict": true, 19 + "noUnusedLocals": true, 20 + "noUnusedParameters": true, 21 + "erasableSyntaxOnly": true, 22 + "noFallthroughCasesInSwitch": true, 23 + "noUncheckedSideEffectImports": true 24 + }, 25 + "include": ["vite.config.ts"] 26 + }
+7
vite.config.ts
··· 1 + import { defineConfig } from 'vite' 2 + import react from '@vitejs/plugin-react' 3 + 4 + // https://vite.dev/config/ 5 + export default defineConfig({ 6 + plugins: [react()], 7 + })