create-alistt69-kit 0.3.1 โ†’ 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -38,6 +38,7 @@ It generates a ready-to-run **React + TypeScript + Webpack** starter with a prac
38
38
  | [Stylelint](https://stylelint.io/) | Stylesheet linting | Optional |
39
39
  | [Autoprefixer](https://github.com/postcss/autoprefixer) | Automatic CSS vendor prefixes | Optional |
40
40
  | [React Router](https://reactrouter.com/) | Client-side routing | Optional |
41
+ | [AGENTS.md](https://agents.md/) | Root instructions file for AI coding agents | Optional |
41
42
  | [Puppeteer](https://pptr.dev/) + [serve-handler](https://github.com/vercel/serve-handler) | Static HTML prerender after production build | Optional |
42
43
 
43
44
  ## ๐ŸŽฏ Why use it?
@@ -166,14 +167,14 @@ npm create alistt69-kit@latest my-app -- --defaults --overwrite
166
167
 
167
168
  ## โš™๏ธ CLI options
168
169
 
169
- | Option | Alias | Description |
170
- |--------|--------|-------------|
171
- | `--defaults` | `-def` | Skip prompts, use defaults |
172
- | `--overwrite` | โ€” | Overwrite target directory if it exists |
173
- | `--no-install` | โ€” | Skip dependency installation |
174
- | `--features <list>` | โ€” | Enable specific features (`eslint`, `react-router`, `all`) |
175
- | `--pm <name>` | โ€” | Choose package manager (`npm`, `pnpm`, `yarn`) |
176
- | `--help` | `-h` | Show help |
170
+ | Option | Alias | Description |
171
+ |---------------------|--------|-------------|
172
+ | `--defaults` | `-def` | Skip prompts, use defaults |
173
+ | `--overwrite` | โ€” | Overwrite target directory if it exists |
174
+ | `--no-install` | โ€” | Skip dependency installation |
175
+ | `--features <list>` | โ€” | Enable specific features (`agents-md`, `eslint`, `stylelint`, `autoprefixer`, `react-router`, `prerender`) |
176
+ | `--pm <name>` | โ€” | Choose package manager (`npm`, `pnpm`, `yarn`) |
177
+ | `--help` | `-h` | Show help |
177
178
 
178
179
  ## ๐Ÿงช Default behavior
179
180
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-alistt69-kit",
3
- "version": "0.3.1",
3
+ "version": "0.3.3",
4
4
  "description": "Opinionated React + TypeScript + Webpack project generator by alistt69",
5
5
  "keywords": [
6
6
  "create",
@@ -31,7 +31,7 @@ export function formatHelpMessage() {
31
31
  ' -def, --defaults Skip prompts and use defaults',
32
32
  ' --overwrite Overwrite target directory if it exists',
33
33
  ' --no-install Do not install dependencies',
34
- ' --features <comma-list> Example: eslint,stylelint,react-router,prerender',
34
+ ' --features <comma-list> Example: agents-md,eslint,stylelint,react-router,prerender',
35
35
  ' --features all Enable all features',
36
36
  ' --pm <npm|pnpm|yarn> Package manager',
37
37
  ' -h, --help Show help',
@@ -150,6 +150,17 @@ function formatProjectStructure(selectedFeatureIds) {
150
150
  function formatFeatureSpecificSections({ selectedFeatureIds, packageManager }) {
151
151
  const sections = [];
152
152
 
153
+ if (selectedFeatureIds.includes('agents-md')) {
154
+ sections.push([
155
+ '## AGENTS.md',
156
+ '',
157
+ 'When `AGENTS.md` is enabled, the project includes a root instruction file for AI coding agents.',
158
+ '',
159
+ '- Base file: `AGENTS.md`',
160
+ '- Other selected features may append their own sections into this file automatically during scaffolding.',
161
+ ].join('\n'));
162
+ }
163
+
153
164
  if (selectedFeatureIds.includes('react-router')) {
154
165
  sections.push([
155
166
  '## Page generator',
@@ -0,0 +1,37 @@
1
+ # AGENTS.md
2
+
3
+ ## Overview
4
+
5
+ This project was scaffolded with `create-alistt69-kit`.
6
+
7
+ ## Setup
8
+
9
+ - Install dependencies with the selected package manager.
10
+ - Start dev server with `npm run start`.
11
+ - Type-check with `npm run typecheck`.
12
+
13
+ ## Base stack
14
+
15
+ - React
16
+ - TypeScript
17
+ - Webpack
18
+ - SCSS Modules
19
+
20
+ ## General rules
21
+
22
+ - Keep code readable and explicit.
23
+ - Prefer small targeted changes over broad refactors.
24
+ - Do not rename public files or exported symbols unless required.
25
+ - Reuse existing project structure and conventions.
26
+
27
+ ## Validation
28
+
29
+ Before finishing a task, run the relevant checks available in `package.json`.
30
+
31
+ ## Project structure
32
+
33
+ - `src/app/` โ€” app bootstrap and providers
34
+ - `src/styles/` โ€” global styles
35
+ - `config/build/` โ€” webpack config parts
36
+
37
+ <!-- @agents-sections -->
@@ -0,0 +1,14 @@
1
+ import { dirname, resolve } from 'node:path';
2
+ import { fileURLToPath } from 'node:url';
3
+
4
+ import { defineFeature } from '../define-feature.js';
5
+
6
+ const currentFilePath = fileURLToPath(import.meta.url);
7
+ const currentDirPath = dirname(currentFilePath);
8
+
9
+ export const agentsMdFeature = defineFeature({
10
+ id: 'agents-md',
11
+ title: 'AGENTS.md',
12
+ hint: 'Root instructions file for AI coding agents',
13
+ copyFiles: resolve(currentDirPath, 'files'),
14
+ });
@@ -2,6 +2,7 @@ import { dirname, resolve } from 'node:path';
2
2
  import { fileURLToPath } from 'node:url';
3
3
 
4
4
  import { defineFeature } from '../define-feature.js';
5
+ import { appendAgentsSection } from '../../utils/agents-md.js';
5
6
 
6
7
  const currentFilePath = fileURLToPath(import.meta.url);
7
8
  const currentDirPath = dirname(currentFilePath);
@@ -16,4 +17,16 @@ export const autoprefixerFeature = defineFeature({
16
17
  },
17
18
  },
18
19
  copyFiles: resolve(currentDirPath, 'files'),
20
+ async apply({ projectPath }) {
21
+ await appendAgentsSection(
22
+ projectPath,
23
+ 'autoprefixer',
24
+ `
25
+ ## CSS compatibility
26
+
27
+ - Vendor prefixing is handled by Autoprefixer.
28
+ - Do not add manual prefixes unless there is a confirmed need.
29
+ `,
30
+ );
31
+ },
19
32
  });
@@ -2,6 +2,7 @@ import { dirname, resolve } from 'node:path';
2
2
  import { fileURLToPath } from 'node:url';
3
3
 
4
4
  import { defineFeature } from '../define-feature.js';
5
+ import { appendAgentsSection } from '../../utils/agents-md.js';
5
6
 
6
7
  const currentFilePath = fileURLToPath(import.meta.url);
7
8
  const currentDirPath = dirname(currentFilePath);
@@ -27,4 +28,17 @@ export const eslintFeature = defineFeature({
27
28
  },
28
29
  },
29
30
  copyFiles: resolve(currentDirPath, 'files'),
31
+ async apply({ projectPath }) {
32
+ await appendAgentsSection(
33
+ projectPath,
34
+ 'eslint',
35
+ `
36
+ ## ESLint
37
+
38
+ - Lint code with \`npm run lint\`.
39
+ - Apply safe autofixes with \`npm run lint:fix\`.
40
+ - Prefer fixing root-cause issues instead of disabling rules.
41
+ `,
42
+ );
43
+ },
30
44
  });
@@ -1,3 +1,4 @@
1
+ import { agentsMdFeature } from './agents-md/index.js';
1
2
  import { autoprefixerFeature } from './autoprefixer/index.js';
2
3
  import { eslintFeature } from './eslint/index.js';
3
4
  import { prerenderFeature } from './prerender/index.js';
@@ -5,6 +6,7 @@ import { reactRouterFeature } from './react-router/index.js';
5
6
  import { stylelintFeature } from './stylelint/index.js';
6
7
 
7
8
  export const features = [
9
+ agentsMdFeature,
8
10
  autoprefixerFeature,
9
11
  eslintFeature,
10
12
  prerenderFeature,
@@ -2,6 +2,7 @@ import { dirname, resolve } from 'node:path';
2
2
  import { fileURLToPath } from 'node:url';
3
3
 
4
4
  import { defineFeature } from '../define-feature.js';
5
+ import { appendAgentsSection } from '../../utils/agents-md.js';
5
6
 
6
7
  const currentFilePath = fileURLToPath(import.meta.url);
7
8
  const currentDirPath = dirname(currentFilePath);
@@ -16,10 +17,25 @@ export const prerenderFeature = defineFeature({
16
17
  'serve-handler': '^6.1.6',
17
18
  },
18
19
  scripts: {
20
+ build: 'npm run build:assets && npm run prerender',
19
21
  'build:assets': 'webpack --env mode=production',
22
+ 'build:prod': 'npm run build',
20
23
  prerender: 'node ./scripts/prerender.mjs',
21
- build: 'npm run build:assets && npm run prerender',
22
24
  },
23
25
  },
24
26
  copyFiles: resolve(currentDirPath, 'files'),
27
+ async apply({ projectPath }) {
28
+ await appendAgentsSection(
29
+ projectPath,
30
+ 'prerender',
31
+ `
32
+ ## Prerender
33
+
34
+ - Production build runs in two steps: \`npm run build:assets\` then \`npm run prerender\`.
35
+ - Prerender route manifest lives in \`prerender.routes.mjs\`.
36
+ - Prerender script lives in \`scripts/prerender.mjs\`.
37
+ - When adding static routes, keep \`prerender.routes.mjs\` updated.
38
+ `,
39
+ );
40
+ },
25
41
  });
@@ -1,5 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
- import Logo from '../../public/alistt69-packages-logo.svg';
2
+ import CreatedBy from '@/widgets/created-by';
3
3
  import styles from './styles.module.scss';
4
4
 
5
5
  interface AppProps {
@@ -9,13 +9,8 @@ interface AppProps {
9
9
  function App({ router }: AppProps) {
10
10
  return (
11
11
  <div className={styles.app_wrapper}>
12
- <div className={styles.created_by_section}>
13
- <Logo className={styles.logo} />
14
- <p className={styles.promo}>
15
- created by create-alistt69-kit
16
- </p>
17
- </div>
18
12
  {router}
13
+ <CreatedBy />
19
14
  </div>
20
15
  );
21
16
  }
@@ -1,10 +1,10 @@
1
1
  .layout_wrapper {
2
2
  display: flex;
3
3
  justify-content: space-between;
4
- min-width: 210px;
4
+ min-width: 196px;
5
5
 
6
6
  .sidebar > nav > a {
7
- opacity: .7;
7
+ opacity: .6;
8
8
  color: inherit;
9
9
  transition: opacity .2s ease;
10
10
 
@@ -2,6 +2,7 @@ import { dirname, resolve } from 'node:path';
2
2
  import { fileURLToPath } from 'node:url';
3
3
 
4
4
  import { defineFeature } from '../define-feature.js';
5
+ import { appendAgentsSection } from '../../utils/agents-md.js';
5
6
 
6
7
  const currentFilePath = fileURLToPath(import.meta.url);
7
8
  const currentDirPath = dirname(currentFilePath);
@@ -19,4 +20,18 @@ export const reactRouterFeature = defineFeature({
19
20
  },
20
21
  },
21
22
  copyFiles: resolve(currentDirPath, 'files'),
23
+ async apply({ projectPath }) {
24
+ await appendAgentsSection(
25
+ projectPath,
26
+ 'react-router',
27
+ `
28
+ ## React Router
29
+
30
+ - Routing is configured under \`src/app/providers/router/\`.
31
+ - Route-level pages live in \`src/pages/\`.
32
+ - Generate a new page with \`npm run generate:page -- <page-name>\`.
33
+ - Do not remove router marker comments used by the page generator unless you also disable auto-registration.
34
+ `,
35
+ );
36
+ },
22
37
  });
@@ -2,6 +2,7 @@ import { dirname, resolve } from 'node:path';
2
2
  import { fileURLToPath } from 'node:url';
3
3
 
4
4
  import { defineFeature } from '../define-feature.js';
5
+ import { appendAgentsSection } from '../../utils/agents-md.js';
5
6
 
6
7
  const currentFilePath = fileURLToPath(import.meta.url);
7
8
  const currentDirPath = dirname(currentFilePath);
@@ -21,4 +22,17 @@ export const stylelintFeature = defineFeature({
21
22
  },
22
23
  },
23
24
  copyFiles: resolve(currentDirPath, 'files'),
25
+ async apply({ projectPath }) {
26
+ await appendAgentsSection(
27
+ projectPath,
28
+ 'stylelint',
29
+ `
30
+ ## Stylelint
31
+
32
+ - Lint styles with \`npm run lint:styles\`.
33
+ - Apply autofixes with \`npm run lint:styles:fix\`.
34
+ - Keep styles compatible with the existing SCSS modules setup.
35
+ `,
36
+ );
37
+ },
24
38
  });
@@ -1,15 +1,10 @@
1
- import Logo from '../../public/alistt69-packages-logo.svg';
1
+ import CreatedBy from '@/widgets/created-by';
2
2
  import styles from './styles.module.scss';
3
3
 
4
4
  function App() {
5
5
  return (
6
6
  <div className={styles.app_wrapper}>
7
- <div className={styles.created_by_section}>
8
- <Logo className={styles.logo} />
9
- <p className={styles.promo}>
10
- created by create-alistt69-kit
11
- </p>
12
- </div>
7
+ <CreatedBy />
13
8
  </div>
14
9
  );
15
10
  }
@@ -1,27 +1,8 @@
1
1
  .app_wrapper {
2
- height: 90vh;
3
2
  width: 100vw;
3
+ height: 100vh;
4
4
  display: flex;
5
5
  align-items: center;
6
- justify-content: center;
7
6
  flex-direction: column;
8
-
9
- .created_by_section {
10
- position: relative;
11
- height: 270px;
12
- width: 210px;
13
-
14
- .logo {
15
- top: -360px;
16
- right: 50%;
17
- left: 50%;
18
- transform: translateX(-50%) scale(0.19);
19
- position: absolute;
20
- }
21
-
22
- .promo {
23
- position: absolute;
24
- bottom: 0;
25
- }
26
- }
7
+ justify-content: center;
27
8
  }
@@ -0,0 +1,33 @@
1
+ import { memo } from 'react';
2
+ import styles from './styles.module.scss';
3
+
4
+ /**
5
+ * Note for developers:
6
+ * This tiny label is the only built-in way to support the author of this package.
7
+ *
8
+ * create-alistt69-kit is fully free to use.
9
+ * There is no paid version, no donations, no monetization, and nothing is asked in return.
10
+ *
11
+ * If this kit helped you, please consider leaving this label in your project.
12
+ * It helps more developers discover a useful package through real usage in the wild.
13
+ *
14
+ * Of course, you can remove it โ€” but keeping it is a small way to support the project.
15
+ *
16
+ * Have a nice day! :D
17
+ */
18
+ function CreatedBy() {
19
+ return (
20
+ <a
21
+ target="_blank"
22
+ rel="noopener noreferrer"
23
+ href="https://github.com/alistt69/create-alistt69-kit"
24
+ className={styles.created_by}
25
+ >
26
+ <code className={styles.promo}>
27
+ created by alistt69-kit
28
+ </code>
29
+ </a>
30
+ );
31
+ }
32
+
33
+ export default memo(CreatedBy);
@@ -0,0 +1,29 @@
1
+ .created_by {
2
+ position: fixed;
3
+ right: 6px;
4
+ bottom: 6px;
5
+ font-size: 11px;
6
+ cursor: pointer;
7
+ color: currentColor;
8
+ text-decoration: none;
9
+ transition: color .2s ease;
10
+
11
+ &::after {
12
+ content: '';
13
+ left: 0;
14
+ bottom: 0;
15
+ right: 100%;
16
+ height: 1px;
17
+ position: absolute;
18
+ background: currentColor;
19
+ transition: right .2s ease;
20
+ }
21
+
22
+ &:hover {
23
+ color: #6a7bb1; // change it to any color u like :D
24
+
25
+ &::after {
26
+ right: 0;
27
+ }
28
+ }
29
+ }
@@ -0,0 +1,53 @@
1
+ import { access, readFile, writeFile } from 'node:fs/promises';
2
+ import { resolve } from 'node:path';
3
+
4
+ const AGENTS_MD_PATH = 'AGENTS.md';
5
+ const SECTIONS_MARKER = '<!-- @agents-sections -->';
6
+
7
+ export function getAgentsMdPath(projectPath) {
8
+ return resolve(projectPath, AGENTS_MD_PATH);
9
+ }
10
+
11
+ export async function hasAgentsMd(projectPath) {
12
+ try {
13
+ await access(getAgentsMdPath(projectPath));
14
+ return true;
15
+ } catch (_) {
16
+ return false;
17
+ }
18
+ }
19
+
20
+ export async function appendAgentsSection(projectPath, sectionKey, content) {
21
+ if (!(await hasAgentsMd(projectPath))) {
22
+ return false;
23
+ }
24
+
25
+ const filepath = getAgentsMdPath(projectPath);
26
+ const fileContent = await readFile(filepath, 'utf8');
27
+
28
+ if (fileContent.includes(`<!-- @agents:${sectionKey} -->`)) {
29
+ return false;
30
+ }
31
+
32
+ const block = [
33
+ `<!-- @agents:${sectionKey} -->`,
34
+ content.trim(),
35
+ `<!-- /@agents:${sectionKey} -->`,
36
+ ].join('\n');
37
+
38
+ let nextContent;
39
+
40
+ if (fileContent.includes(SECTIONS_MARKER)) {
41
+ nextContent = fileContent.replace(
42
+ SECTIONS_MARKER,
43
+ `${block}\n\n${SECTIONS_MARKER}`,
44
+ );
45
+ } else {
46
+ const trimmed = fileContent.trimEnd();
47
+ nextContent = `${trimmed}\n\n${block}\n`;
48
+ }
49
+
50
+ await writeFile(filepath, nextContent, 'utf8');
51
+
52
+ return true;
53
+ }
@@ -1,27 +0,0 @@
1
- .app_wrapper {
2
- height: 90vh;
3
- width: 100vw;
4
- display: flex;
5
- align-items: center;
6
- justify-content: center;
7
- flex-direction: column;
8
-
9
- .created_by_section {
10
- position: relative;
11
- height: 270px;
12
- width: 210px;
13
-
14
- .logo {
15
- top: -360px;
16
- right: 50%;
17
- left: 50%;
18
- transform: translateX(-50%) scale(0.19);
19
- position: absolute;
20
- }
21
-
22
- .promo {
23
- position: absolute;
24
- bottom: 0;
25
- }
26
- }
27
- }
@@ -1,10 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="898" height="791">
3
- <path d="M0 0 C296.34 0 592.68 0 898 0 C898 261.03 898 522.06 898 791 C601.66 791 305.32 791 0 791 C0 529.97 0 268.94 0 0 Z " fill="#000000" transform="translate(0,0)"/>
4
- <path d="M0 0 C3.09949081 0.01605072 6.19766786 0.0000577 9.29711914 -0.01904297 C27.69872159 -0.03865827 45.98082348 1.74702287 63.98657227 5.64111328 C65.45018188 5.95254272 65.45018188 5.95254272 66.94335938 6.27026367 C77.15755174 8.54201104 86.99509941 11.76047273 96.79907227 15.39111328 C97.48791504 15.64505859 98.17675781 15.89900391 98.88647461 16.16064453 C128.64145129 27.27511273 154.7896972 43.72443318 178.79907227 64.39111328 C179.38237305 64.89175293 179.96567383 65.39239258 180.56665039 65.90820312 C186.93080932 71.41767129 192.58679562 77.2244624 197.79125977 83.85595703 C199.52914591 86.05029187 201.3334997 88.09199096 203.23657227 90.14111328 C226.19610208 116.22907787 238.28352641 151.31505478 241.79907227 185.39111328 C241.92926758 186.58994141 242.05946289 187.78876953 242.19360352 189.02392578 C244.85649038 217.92512455 241.99558022 252.61447768 227.64648438 278.46777344 C226.0860106 282.0095229 227.81797552 285.80670401 228.79907227 289.39111328 C229.38918179 291.60718836 229.97900099 293.82334076 230.56860352 296.03955078 C231.06251587 297.89386719 231.06251587 297.89386719 231.56640625 299.78564453 C236.49829895 318.48654917 239.43412391 337.21235401 241.79907227 356.39111328 C241.98083008 357.64730469 242.16258789 358.90349609 242.34985352 360.19775391 C242.95501364 365.06278538 242.92416137 369.90130713 242.89672852 374.79736328 C242.89531357 375.76266968 242.89389862 376.72797607 242.8924408 377.72253418 C242.88688306 380.77875993 242.87433856 383.83491001 242.86157227 386.89111328 C242.8565518 388.97444555 242.85198985 391.05777898 242.84790039 393.14111328 C242.83692751 398.22447538 242.81969237 403.30778154 242.79907227 408.39111328 C236.85907227 408.39111328 230.91907227 408.39111328 224.79907227 408.39111328 C223.35594195 400.33996521 221.93835511 392.28913652 220.62719727 384.21533203 C216.88920628 361.21658873 211.89347194 339.60887295 204.79907227 317.39111328 C200.26683095 321.09090211 196.36564341 324.89119394 192.57202148 329.33837891 C183.10784621 340.29607454 172.50840712 349.70888856 160.69995117 358.04150391 C158.8744066 359.33762648 157.07452523 360.66247355 155.27954102 362.00048828 C136.37260842 375.99485035 115.34456026 386.15733271 93.79907227 395.39111328 C92.80278809 395.82085449 92.80278809 395.82085449 91.78637695 396.25927734 C82.65433131 400.1677375 73.46179847 403.07750278 63.79907227 405.39111328 C62.74333008 405.64505859 61.68758789 405.89900391 60.59985352 406.16064453 C58.49431939 406.65466571 56.3861205 407.13744312 54.27563477 407.60986328 C51.76428146 408.17421234 49.26215029 408.75756147 46.76000977 409.35986328 C17.06446624 416.4027358 -13.76278401 418.07989657 -44.20092773 417.39111328 C-45.21316406 417.37177734 -46.22540039 417.35244141 -47.26831055 417.33251953 C-62.73677052 417.00412263 -77.89525977 415.62379681 -93.20092773 413.39111328 C-94.57643799 413.19316162 -94.57643799 413.19316162 -95.97973633 412.99121094 C-98.5758972 412.6134937 -101.17004981 412.22495875 -103.76342773 411.82861328 C-104.51865723 411.71404785 -105.27388672 411.59948242 -106.05200195 411.48144531 C-109.44232797 410.93933149 -112.61315359 410.27259294 -115.92358398 409.32080078 C-122.78593246 407.37415127 -128.88854237 407.96561207 -135.50952148 410.40673828 C-155.56325825 417.74134157 -177.12966691 421.49184142 -198.46655273 421.59423828 C-199.42124451 421.59993835 -200.37593628 421.60563843 -201.35955811 421.61151123 C-203.37307653 421.6208997 -205.3866099 421.6274705 -207.40014648 421.63134766 C-210.40174125 421.64095583 -213.40262082 421.67199846 -216.40405273 421.70361328 C-234.15858882 421.80177974 -251.52016509 420.00028925 -268.76342773 415.64111328 C-270.31646606 415.25596558 -270.31646606 415.25596558 -271.90087891 414.86303711 C-305.5573482 406.30019677 -336.43204179 391.22817251 -364.20092773 370.39111328 C-364.89879395 369.8696875 -365.59666016 369.34826172 -366.31567383 368.81103516 C-374.84973528 362.35639124 -382.61152615 355.24142138 -390.20092773 347.70361328 C-390.97831299 346.93186768 -391.75569824 346.16012207 -392.55664062 345.36499023 C-401.60121713 336.20559285 -409.07365982 326.06946715 -416.20092773 315.39111328 C-416.87124023 314.40755859 -417.54155273 313.42400391 -418.23217773 312.41064453 C-424.57794233 302.67795399 -428.90715626 292.15138212 -433.20092773 281.39111328 C-433.47066406 280.71870605 -433.74040039 280.04629883 -434.01831055 279.35351562 C-441.61295806 260.14080449 -444.43403847 239.92670367 -445.20092773 219.39111328 C-445.2434668 218.28638672 -445.28600586 217.18166016 -445.32983398 216.04345703 C-445.77008671 191.88825724 -441.33267101 169.71447471 -433.43530273 147.01611328 C-431.31606657 141.16137435 -431.31606657 141.16137435 -432.31030273 135.23095703 C-432.70088867 134.03889648 -432.70088867 134.03889648 -433.09936523 132.82275391 C-433.52088867 131.5881543 -433.52088867 131.5881543 -433.95092773 130.32861328 C-437.59034209 119.41920374 -440.52114543 108.712652 -442.26342773 97.32861328 C-442.43334229 96.23589111 -442.60325684 95.14316895 -442.77832031 94.01733398 C-446.88642523 67.12236196 -447.34743109 40.54306767 -447.20092773 13.39111328 C-440.93092773 13.39111328 -434.66092773 13.39111328 -428.20092773 13.39111328 C-428.11842773 16.46423828 -428.03592773 19.53736328 -427.95092773 22.70361328 C-426.80581408 51.20590343 -420.74847913 78.92861748 -410.20092773 105.39111328 C-409.54092773 105.39111328 -408.88092773 105.39111328 -408.20092773 105.39111328 C-407.0004191 104.17179773 -405.86911501 102.88452562 -404.76342773 101.57861328 C-393.90547805 89.26003179 -382.25579486 77.37925795 -369.20092773 67.39111328 C-367.57523671 66.05862257 -365.95024348 64.72528012 -364.32592773 63.39111328 C-334.99426592 40.10910672 -300.42629737 23.64960619 -264.20092773 14.39111328 C-262.63842325 13.97836983 -261.07592363 13.565608 -259.51342773 13.15283203 C-205.82771829 -0.84065617 -144.66925851 -0.97438289 -90.65332031 11.12109375 C-82.19944297 12.98278121 -75.85583066 12.25035815 -67.70092773 9.57861328 C-59.24248627 6.93636169 -50.94295593 4.87884781 -42.20092773 3.39111328 C-41.47913834 3.26549011 -40.75734894 3.13986694 -40.01368713 3.01043701 C-26.63320556 0.72866718 -13.56547557 -0.08308654 0 0 Z " fill="#FDFDFD" transform="translate(545.200927734375,178.60888671875)"/>
5
- <path d="M0 0 C14.15766411 2.83153282 27.89802295 7.51546782 41.52197266 12.22949219 C43.76175373 13.00406474 46.00374588 13.77195632 48.24609375 14.5390625 C98.31550447 31.73001567 144.44543464 56.30070298 184.18237305 91.40356445 C185.40577883 92.47809104 186.63660152 93.54422506 187.87426758 94.60229492 C193.53033047 99.45937064 198.80426635 104.65549137 204.0625 109.9375 C204.92166016 110.79279297 205.78082031 111.64808594 206.66601562 112.52929688 C211.65291443 117.52381508 216.42762656 122.62459582 221 128 C221.93597042 129.07962435 222.87215599 130.15906223 223.80859375 131.23828125 C229.55622339 137.93690371 234.93727632 144.76132059 240 152 C232.00103364 169.95921773 199.07800439 181.72211886 181.82421875 188.44140625 C140.63556138 203.98328348 97.22411979 211.48505382 53.25 211.125 C51.07682711 211.1149345 48.90364963 211.10581506 46.73046875 211.09765625 C41.48686236 211.07596146 36.2434844 211.04163529 31 211 C32.27915756 207.0561042 33.71969754 203.31343097 35.46191406 199.54833984 C44.93656738 178.94223554 47.9105409 156.53844493 47 134 C46.97389648 133.27973633 46.94779297 132.55947266 46.92089844 131.81738281 C46.72839038 126.8674918 46.40618908 121.93666545 46 117 C45.91234375 115.86175781 45.8246875 114.72351563 45.734375 113.55078125 C41.57167844 73.86942383 23.31363904 36.15229715 1.51171875 3.3515625 C0 1 0 1 0 0 Z " fill="#000000" transform="translate(482,292)"/>
6
- <path d="M0 0 C2.21759796 0.00539144 4.43499575 -0.00000122 6.65258789 -0.00634766 C14.48737447 -0.00961828 22.23116758 0.21038286 30.02172852 1.13037109 C28.78983353 4.96604411 27.40310384 8.63640079 25.77172852 12.31787109 C23.54313618 17.64136317 21.61993525 23.02109358 19.83422852 28.50537109 C19.58447266 29.24682373 19.3347168 29.98827637 19.07739258 30.75219727 C14.96936041 43.67642129 14.67370412 56.76674374 14.70605469 70.19702148 C14.70921187 72.92846764 14.68567442 75.65882363 14.66040039 78.39013672 C14.60168587 94.74720845 17.18436399 109.48315587 22.02172852 125.13037109 C22.36848633 126.34724609 22.71524414 127.56412109 23.07250977 128.81787109 C26.40673582 140.33931124 31.09076144 151.21194626 36.02172852 162.13037109 C36.57932861 163.3673877 36.57932861 163.3673877 37.14819336 164.62939453 C44.51731099 180.8538384 52.77219537 196.52908086 63.02172852 211.13037109 C59.70527077 212.78859996 56.41315582 211.03315872 53.01000977 210.04052734 C52.20557938 209.81083755 51.40114899 209.58114777 50.57234192 209.34449768 C42.07259269 206.89673184 33.62487542 204.28982801 25.20922852 201.56787109 C24.41757294 201.31192169 23.62591736 201.05597229 22.81027222 200.79226685 C-46.50610393 178.25134847 -117.14389581 135.95988792 -163.97827148 79.13037109 C-164.4777832 78.53401855 -164.97729492 77.93766602 -165.49194336 77.32324219 C-167.2662697 75.20301284 -169.02970459 73.0741229 -170.79077148 70.94287109 C-171.36706299 70.25273926 -171.94335449 69.56260742 -172.53710938 68.8515625 C-175.34364168 65.42186446 -177.66406854 62.44129159 -178.97827148 58.13037109 C-164.89526803 46.35406648 -150.31535495 36.82918603 -133.72387695 28.96044922 C-132.219652 28.24515344 -130.72492808 27.50993937 -129.23217773 26.77099609 C-123.36086692 23.94983583 -117.30099346 21.73544249 -111.16577148 19.56787109 C-110.37203125 19.2867749 -109.57829102 19.00567871 -108.76049805 18.71606445 C-73.75738558 6.60583269 -37.04361151 -0.10693171 0 0 Z " fill="#010101" transform="translate(339.978271484375,274.86962890625)"/>
7
- <path d="M0 0 C16.0535452 28.34156763 16.0535452 28.34156763 21 39 C21.37125 39.78890625 21.7425 40.5778125 22.125 41.390625 C33.2020619 66.83325155 35.30603165 98.12413828 25.45703125 124.15234375 C16.67131318 146.16031063 0.83257795 161.64237183 -18.33691406 174.84130859 C-19.97464074 175.98233191 -21.57769347 177.17261001 -23.1796875 178.36328125 C-26 180 -26 180 -28.04199219 179.79638672 C-31.46872741 178.40261985 -32.71392948 174.93797317 -34.375 171.8125 C-34.9642627 170.73198364 -34.9642627 170.73198364 -35.56542969 169.62963867 C-39.16049959 162.92605522 -42.18309615 156.06711467 -45 149 C-45.41765625 148.01386719 -45.8353125 147.02773438 -46.265625 146.01171875 C-49.09086053 139.11850168 -51.20383629 132.11255678 -53.1875 124.9375 C-53.43757813 124.03966797 -53.68765625 123.14183594 -53.9453125 122.21679688 C-56.98842323 110.89149018 -58.39113373 99.98083715 -58.375 88.25 C-58.37338867 87.02297363 -58.37177734 85.79594727 -58.37011719 84.53173828 C-58.24286301 75.08872996 -57.1513956 66.91084274 -54 58 C-53.68804687 57.06671875 -53.37609375 56.1334375 -53.0546875 55.171875 C-49.29298777 44.86671439 -43.03392536 36.30809298 -36 28 C-35.33355469 27.18660156 -34.66710937 26.37320312 -33.98046875 25.53515625 C-27.44797726 17.86341763 -10.63671359 0 0 0 Z " fill="#010101" transform="translate(456,299)"/>
8
- <path d="M0 0 C2.71454051 2.44711821 4.3883539 5.12066797 6.22265625 8.26953125 C6.83842529 9.31633057 7.45419434 10.36312988 8.08862305 11.44165039 C8.74000244 12.55403076 9.39138184 13.66641113 10.0625 14.8125 C15.26856876 23.61282975 20.57234942 32.17344749 26.74023438 40.33251953 C28.13608307 42.18012546 29.51370205 44.04059516 30.890625 45.90234375 C33.89840629 49.95687952 36.94091341 53.98407125 40 58 C40.47083008 58.61939453 40.94166016 59.23878906 41.42675781 59.87695312 C47.06668695 67.26775024 52.93013239 74.30906729 59.296875 81.0859375 C61.29108648 83.23576664 63.20858061 85.40309573 65.11328125 87.62890625 C69.49048054 92.6538312 74.19590594 97.34605202 78.9152832 102.0456543 C80.43491668 103.5599258 81.94912517 105.0794743 83.46289062 106.59960938 C88.80281135 111.94356628 94.23584891 117.11151567 100 122 C101.12995458 122.98447513 102.25889111 123.97012019 103.38671875 124.95703125 C109.76612018 130.48819411 116.2189384 135.84405254 123.00073242 140.87817383 C126.89878421 143.79756842 126.89878421 143.79756842 128 146 C84.95997136 143.288167 46.82388721 130.33376418 16.625 98.5625 C11.60560074 92.84252778 7.71207117 86.6251315 4 80 C3.52820313 79.18015625 3.05640625 78.3603125 2.5703125 77.515625 C-1.43543095 70.10126756 -3.68554859 62.06497299 -6 54 C-6.18248291 53.38439209 -6.36496582 52.76878418 -6.55297852 52.13452148 C-7.55650085 47.34271603 -7.184784 42.31271152 -7.1875 37.4375 C-7.19974609 36.30763672 -7.21199219 35.17777344 -7.22460938 34.01367188 C-7.24123868 24.38530188 -6.10341446 15.49957477 -2.9375 6.375 C-2.59589844 5.37210937 -2.25429687 4.36921875 -1.90234375 3.3359375 C-1 1 -1 1 0 0 Z " fill="#020202" transform="translate(135,367)"/>
9
- <path d="M0 0 C15.46814886 -0.73787989 30.32045914 2.23601259 45 7 C45.65822754 7.20995605 46.31645508 7.41991211 46.99462891 7.63623047 C79.30390148 18.04321721 105.90081485 37.43917146 122.27734375 67.61328125 C128.00913166 78.8818983 130.2542112 90.46364544 131 103 C131.05414062 103.82757813 131.10828125 104.65515625 131.1640625 105.5078125 C131.3661203 111.51443983 130.63692309 117.27293234 129.6875 123.1875 C129.56987305 123.93588135 129.45224609 124.6842627 129.33105469 125.45532227 C128.44454799 130.5924132 126.95415512 135.16661352 125 140 C124.34 140 123.68 140 123 140 C121.47824013 137.58926074 120.07178533 135.17622202 118.6875 132.6875 C106.8828571 112.07410601 92.57672457 92.90456576 77 75 C76.36449219 74.26394531 75.72898437 73.52789062 75.07421875 72.76953125 C71.1999415 68.30743263 67.24633768 63.91657814 63.28125 59.53515625 C61.87327734 57.97047431 60.47522286 56.39672136 59.09375 54.80859375 C48.49030695 42.7114117 37.10606664 30.79083803 24.3984375 20.8984375 C21.83913887 18.87267344 19.45911573 16.71516848 17.0625 14.5 C12.37559847 10.21310778 7.40798039 6.47480693 2.2734375 2.75 C1.52320313 2.1725 0.77296875 1.595 0 1 C0 0.67 0 0.34 0 0 Z " fill="#020202" transform="translate(625,267)"/>
10
- </svg>