@hasna/skills 0.1.32 → 0.1.33
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 +1 -16
- package/bin/index.js +57 -14
- package/bin/mcp.js +57 -13
- package/dist/cli/commands/runtime.d.ts +1 -1
- package/dist/index.js +51 -5
- package/dist/lib/skill-validation.d.ts +2 -0
- package/package.json +1 -1
- package/skills/ad-creative-pack/package.json +4 -7
- package/skills/api-docs-portal/package.json +5 -3
- package/skills/audio/package.json +4 -22
- package/skills/audio-transcript-pack/package.json +3 -2
- package/skills/blog-article/package.json +5 -21
- package/skills/brand-kit/package.json +4 -7
- package/skills/brand-photo-shoot/package.json +3 -2
- package/skills/browse/package.json +4 -33
- package/skills/contract-review-report/package.json +3 -2
- package/skills/customer-feedback-report/package.json +3 -2
- package/skills/deepresearch/package.json +4 -37
- package/skills/domainpurchase/SKILL.md +14 -31
- package/skills/domainpurchase/package.json +3 -8
- package/skills/email-sequence/package.json +4 -7
- package/skills/generate-book-cover/package.json +5 -23
- package/skills/icon-pack/package.json +4 -22
- package/skills/image/package.json +4 -22
- package/skills/invoice-reconciliation/package.json +3 -2
- package/skills/landing-page-pack/package.json +4 -7
- package/skills/logo-design/package.json +4 -2
- package/skills/managemcp/CLAUDE.md +9 -43
- package/skills/managemcp/README.md +12 -198
- package/skills/managemcp/package.json +2 -10
- package/skills/managemcp/tsconfig.json +1 -3
- package/skills/market-research-report/package.json +5 -4
- package/skills/meeting-pack/package.json +3 -2
- package/skills/migration-plan-pack/package.json +3 -2
- package/skills/music/package.json +4 -20
- package/skills/music-album/package.json +3 -2
- package/skills/one-page-website/package.json +3 -2
- package/skills/pdf-read/package.json +5 -23
- package/skills/pdf-to-dataset/package.json +5 -4
- package/skills/pdf-to-markdown/package.json +5 -4
- package/skills/performance-audit-report/package.json +3 -2
- package/skills/photo-album/package.json +4 -2
- package/skills/pitch-deck/package.json +5 -3
- package/skills/playlist-maker/package.json +4 -2
- package/skills/product-mockup/package.json +3 -2
- package/skills/proposal-pack/package.json +5 -4
- package/skills/read-pdf/package.json +4 -29
- package/skills/remove-background/package.json +5 -21
- package/skills/repo-onboarding-report/package.json +3 -2
- package/skills/sdk-generator/package.json +3 -2
- package/skills/security-audit-report/package.json +5 -4
- package/skills/seo-content-pack/package.json +5 -3
- package/skills/short-video-pack/package.json +3 -2
- package/skills/slide-deck-generator/package.json +3 -2
- package/skills/sms/README.md +18 -56
- package/skills/sms/package.json +1 -3
- package/skills/sms/tsconfig.json +1 -2
- package/skills/social-content-calendar/package.json +4 -7
- package/skills/test-suite-generator/package.json +5 -4
- package/skills/transcript/package.json +4 -23
- package/skills/video/package.json +4 -24
- package/skills/video-highlight-pack/package.json +3 -2
- package/skills/voiceover-jingle-pack/package.json +3 -2
- package/skills/webcrawling/package.json +4 -32
- package/skills/domainpurchase/.env.example +0 -7
- package/skills/domainpurchase/src/lib/api-client.ts +0 -571
- package/skills/domainpurchase/src/lib/config.ts +0 -209
- package/skills/domainpurchase/src/lib/installer.ts +0 -165
- package/skills/managemcp/.env.example +0 -16
- package/skills/managemcp/scripts/migrate.ts +0 -57
- package/skills/managemcp/scripts/seed.ts +0 -58
- package/skills/managemcp/src/db/index.ts +0 -37
- package/skills/managemcp/src/lib/api-client.ts +0 -108
- package/skills/managemcp/src/lib/config.ts +0 -34
- package/skills/managemcp/src/lib/installer.ts +0 -140
- package/skills/managemcp/src/lib/service-dir.ts +0 -119
- package/skills/sms/scripts/buy-number.ts +0 -63
- package/skills/sms/scripts/test-send.ts +0 -67
- package/skills/sms/src/server.ts +0 -351
- package/skills/sms/src/sse-server.ts +0 -279
|
@@ -2,20 +2,12 @@
|
|
|
2
2
|
"name": "managemcp",
|
|
3
3
|
"version": "0.1.0",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"description": "Manage MCP
|
|
5
|
+
"description": "Public Manage MCP skill contract and local CLI stub",
|
|
6
6
|
"bin": {
|
|
7
7
|
"managemcp": "src/index.ts"
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
|
-
"
|
|
11
|
-
"start": "bun run src/server/index.ts",
|
|
12
|
-
"cli": "bun run bin/cli.ts",
|
|
13
|
-
"db:migrate": "bun run scripts/migrate.ts",
|
|
14
|
-
"db:seed": "bun run scripts/seed.ts",
|
|
15
|
-
"db:reset": "bun run scripts/migrate.ts && bun run scripts/seed.ts"
|
|
16
|
-
},
|
|
17
|
-
"dependencies": {
|
|
18
|
-
"postgres": "^3.4.5"
|
|
10
|
+
"start": "bun run src/index.ts"
|
|
19
11
|
},
|
|
20
12
|
"devDependencies": {
|
|
21
13
|
"@types/bun": "^1.1.14",
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "market-research-report",
|
|
3
3
|
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
4
5
|
"description": "Generate market research report artifacts through the hosted Skills runtime",
|
|
5
6
|
"type": "module",
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
"skills": {
|
|
8
|
+
"runtime": "hosted",
|
|
9
|
+
"source": "remote"
|
|
10
|
+
}
|
|
10
11
|
}
|
|
@@ -1,27 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "music",
|
|
3
3
|
"version": "1.0.0",
|
|
4
|
+
"private": true,
|
|
4
5
|
"description": "Generate music using provider-cost AI backends",
|
|
5
|
-
"main": "src/index.ts",
|
|
6
6
|
"type": "module",
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
|
|
10
|
-
"scripts": {
|
|
11
|
-
"start": "bun run src/index.ts",
|
|
12
|
-
"generate": "bun run src/index.ts generate"
|
|
13
|
-
},
|
|
14
|
-
"keywords": [
|
|
15
|
-
"music-generation",
|
|
16
|
-
"ai",
|
|
17
|
-
"minimax",
|
|
18
|
-
"gemini",
|
|
19
|
-
"lyria"
|
|
20
|
-
],
|
|
21
|
-
"devDependencies": {
|
|
22
|
-
"@types/bun": "latest"
|
|
23
|
-
},
|
|
24
|
-
"peerDependencies": {
|
|
25
|
-
"typescript": "^5.0.0"
|
|
7
|
+
"skills": {
|
|
8
|
+
"runtime": "hosted",
|
|
9
|
+
"source": "remote"
|
|
26
10
|
}
|
|
27
11
|
}
|
|
@@ -1,29 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pdf-read",
|
|
3
3
|
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
4
5
|
"description": "Read and extract text from PDF files with page-range selection and parallel processing",
|
|
5
6
|
"type": "module",
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
"dev": "bun run src/index.ts",
|
|
11
|
-
"build": "bun build src/index.ts --outdir dist --target node",
|
|
12
|
-
"typecheck": "tsc --noEmit"
|
|
13
|
-
},
|
|
14
|
-
"dependencies": {
|
|
15
|
-
"pdf-parse": "^1.1.1"
|
|
16
|
-
},
|
|
17
|
-
"devDependencies": {
|
|
18
|
-
"@types/bun": "latest",
|
|
19
|
-
"typescript": "^5.7.0"
|
|
20
|
-
},
|
|
21
|
-
"publishConfig": {
|
|
22
|
-
"access": "restricted",
|
|
23
|
-
"registry": "https://registry.npmjs.org/"
|
|
24
|
-
},
|
|
25
|
-
"files": [
|
|
26
|
-
"src",
|
|
27
|
-
"tsconfig.json"
|
|
28
|
-
]
|
|
7
|
+
"skills": {
|
|
8
|
+
"runtime": "hosted",
|
|
9
|
+
"source": "remote"
|
|
10
|
+
}
|
|
29
11
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pdf-to-dataset",
|
|
3
3
|
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
4
5
|
"description": "Extract PDF tables and forms into CSV and JSON datasets through the hosted Skills runtime",
|
|
5
6
|
"type": "module",
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
"skills": {
|
|
8
|
+
"runtime": "hosted",
|
|
9
|
+
"source": "remote"
|
|
10
|
+
}
|
|
10
11
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pdf-to-markdown",
|
|
3
3
|
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
4
5
|
"description": "Convert PDFs into clean markdown through the hosted Skills runtime",
|
|
5
6
|
"type": "module",
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
"skills": {
|
|
8
|
+
"runtime": "hosted",
|
|
9
|
+
"source": "remote"
|
|
10
|
+
}
|
|
10
11
|
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pitch-deck",
|
|
3
3
|
"version": "0.1.0",
|
|
4
|
-
"type": "module",
|
|
5
4
|
"private": true,
|
|
6
|
-
"
|
|
7
|
-
|
|
5
|
+
"description": "Hosted skill metadata for pitch-deck",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"skills": {
|
|
8
|
+
"runtime": "hosted",
|
|
9
|
+
"source": "remote"
|
|
8
10
|
}
|
|
9
11
|
}
|
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
"name": "playlist-maker",
|
|
3
3
|
"version": "0.1.0",
|
|
4
4
|
"private": true,
|
|
5
|
+
"description": "Hosted skill metadata for playlist-maker",
|
|
5
6
|
"type": "module",
|
|
6
|
-
"
|
|
7
|
-
"
|
|
7
|
+
"skills": {
|
|
8
|
+
"runtime": "hosted",
|
|
9
|
+
"source": "remote"
|
|
8
10
|
}
|
|
9
11
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "proposal-pack",
|
|
3
3
|
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
4
5
|
"description": "Generate client proposal packages through the hosted Skills runtime",
|
|
5
6
|
"type": "module",
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
"skills": {
|
|
8
|
+
"runtime": "hosted",
|
|
9
|
+
"source": "remote"
|
|
10
|
+
}
|
|
10
11
|
}
|
|
@@ -1,36 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "read-pdf",
|
|
3
3
|
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
4
5
|
"description": "Analyze PDFs with Claude document blocks and merge chunked output",
|
|
5
6
|
"type": "module",
|
|
6
|
-
"
|
|
7
|
-
|
|
8
|
-
"
|
|
9
|
-
},
|
|
10
|
-
"files": [
|
|
11
|
-
"src",
|
|
12
|
-
"SKILL.md",
|
|
13
|
-
"tsconfig.json"
|
|
14
|
-
],
|
|
15
|
-
"publishConfig": {
|
|
16
|
-
"access": "restricted"
|
|
17
|
-
},
|
|
18
|
-
"keywords": [
|
|
19
|
-
"pdf",
|
|
20
|
-
"claude",
|
|
21
|
-
"document",
|
|
22
|
-
"ocr",
|
|
23
|
-
"skill"
|
|
24
|
-
],
|
|
25
|
-
"scripts": {
|
|
26
|
-
"start": "bun run src/index.ts",
|
|
27
|
-
"typecheck": "tsc --noEmit"
|
|
28
|
-
},
|
|
29
|
-
"dependencies": {
|
|
30
|
-
"pdf-lib": "^1.17.1"
|
|
31
|
-
},
|
|
32
|
-
"devDependencies": {
|
|
33
|
-
"@types/bun": "latest",
|
|
34
|
-
"typescript": "^5.7.0"
|
|
7
|
+
"skills": {
|
|
8
|
+
"runtime": "hosted",
|
|
9
|
+
"source": "remote"
|
|
35
10
|
}
|
|
36
11
|
}
|
|
@@ -1,27 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "remove-background",
|
|
3
3
|
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
4
5
|
"description": "Remove Background skill",
|
|
5
6
|
"type": "module",
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
"dev": "bun run src/index.ts",
|
|
11
|
-
"build": "bun build src/index.ts --outdir dist --target node",
|
|
12
|
-
"typecheck": "tsc --noEmit"
|
|
13
|
-
},
|
|
14
|
-
"dependencies": {},
|
|
15
|
-
"devDependencies": {
|
|
16
|
-
"@types/bun": "latest",
|
|
17
|
-
"typescript": "^5.7.0"
|
|
18
|
-
},
|
|
19
|
-
"publishConfig": {
|
|
20
|
-
"access": "restricted",
|
|
21
|
-
"registry": "https://registry.npmjs.org/"
|
|
22
|
-
},
|
|
23
|
-
"files": [
|
|
24
|
-
"src",
|
|
25
|
-
"tsconfig.json"
|
|
26
|
-
]
|
|
7
|
+
"skills": {
|
|
8
|
+
"runtime": "hosted",
|
|
9
|
+
"source": "remote"
|
|
10
|
+
}
|
|
27
11
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "security-audit-report",
|
|
3
3
|
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
4
5
|
"description": "Generate security hardening report artifacts through the hosted Skills runtime",
|
|
5
6
|
"type": "module",
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
"skills": {
|
|
8
|
+
"runtime": "hosted",
|
|
9
|
+
"source": "remote"
|
|
10
|
+
}
|
|
10
11
|
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "seo-content-pack",
|
|
3
3
|
"version": "0.1.0",
|
|
4
|
-
"type": "module",
|
|
5
4
|
"private": true,
|
|
6
|
-
"
|
|
7
|
-
|
|
5
|
+
"description": "Hosted skill metadata for seo-content-pack",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"skills": {
|
|
8
|
+
"runtime": "hosted",
|
|
9
|
+
"source": "remote"
|
|
8
10
|
}
|
|
9
11
|
}
|
package/skills/sms/README.md
CHANGED
|
@@ -1,71 +1,33 @@
|
|
|
1
|
-
#
|
|
1
|
+
# SMS
|
|
2
2
|
|
|
3
|
-
MCP SMS
|
|
3
|
+
Local MCP SMS skill for AI agents using user-provided Twilio credentials.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Boundary
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
- Send SMS messages
|
|
12
|
-
- List messages for a phone number
|
|
13
|
-
- Read specific messages
|
|
14
|
-
- List phone numbers
|
|
15
|
-
- Buy new phone numbers
|
|
16
|
-
- HTTP API with Bearer token authentication
|
|
17
|
-
|
|
18
|
-
## Agent Phone Numbers
|
|
19
|
-
|
|
20
|
-
| Agent | Phone Number | Display Name |
|
|
21
|
-
|-------|--------------|--------------|
|
|
22
|
-
| Claude | +1 (555) 000-0000 | Claude (AI Agent) |
|
|
7
|
+
The OSS package ships only the stdio MCP implementation. It does not ship an
|
|
8
|
+
HTTP server, SSE server, phone-number purchasing scripts, hosted account state,
|
|
9
|
+
or billing logic.
|
|
23
10
|
|
|
24
11
|
## Usage
|
|
25
12
|
|
|
26
|
-
### HTTP Server
|
|
27
|
-
|
|
28
13
|
```bash
|
|
29
|
-
|
|
30
|
-
export TWILIO_ACCOUNT_SID="your_account_sid"
|
|
31
|
-
export TWILIO_AUTH_TOKEN="your_auth_token"
|
|
32
|
-
export MCP_SMS_API_KEY="your_api_key"
|
|
33
|
-
|
|
34
|
-
# Start server
|
|
35
|
-
bun run server
|
|
14
|
+
skills run sms --help
|
|
36
15
|
```
|
|
37
16
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
- `GET /health` - Health check
|
|
41
|
-
- `POST /send` - Send SMS
|
|
42
|
-
- `GET /messages/:phone` - List messages
|
|
43
|
-
- `GET /message/:sid` - Get specific message
|
|
44
|
-
- `GET /numbers` - List phone numbers
|
|
45
|
-
- `POST /numbers/buy` - Buy a phone number
|
|
46
|
-
- `GET /agent/:name` - Get agent info
|
|
47
|
-
|
|
48
|
-
### Send SMS Example
|
|
17
|
+
To run the MCP server directly:
|
|
49
18
|
|
|
50
19
|
```bash
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
-d '{
|
|
55
|
-
"agent_name": "claude",
|
|
56
|
-
"from_number": "+15550000000",
|
|
57
|
-
"to": "+15550000001",
|
|
58
|
-
"body": "Hello from the SMS agent!"
|
|
59
|
-
}'
|
|
20
|
+
export TWILIO_ACCOUNT_SID="your_account_sid"
|
|
21
|
+
export TWILIO_AUTH_TOKEN="your_auth_token"
|
|
22
|
+
bun run src/index.ts
|
|
60
23
|
```
|
|
61
24
|
|
|
62
|
-
##
|
|
63
|
-
|
|
64
|
-
```bash
|
|
65
|
-
bun install
|
|
66
|
-
bun run dev
|
|
67
|
-
```
|
|
25
|
+
## Environment Variables
|
|
68
26
|
|
|
69
|
-
|
|
27
|
+
| Variable | Description |
|
|
28
|
+
| --- | --- |
|
|
29
|
+
| `TWILIO_ACCOUNT_SID` | Twilio account SID |
|
|
30
|
+
| `TWILIO_AUTH_TOKEN` | Twilio auth token |
|
|
70
31
|
|
|
71
|
-
|
|
32
|
+
Hosted SMS workflows, number purchase approvals, billing, and tenant-level
|
|
33
|
+
message history belong in the hosted platform or an external connector.
|
package/skills/sms/package.json
CHANGED
|
@@ -11,9 +11,7 @@
|
|
|
11
11
|
"start": "bun run src/index.ts",
|
|
12
12
|
"dev": "bun --watch src/index.ts",
|
|
13
13
|
"build": "bun build src/index.ts --outdir dist --target node",
|
|
14
|
-
"test": "bun test"
|
|
15
|
-
"test:send": "bun run scripts/test-send.ts",
|
|
16
|
-
"server": "bun run src/server.ts"
|
|
14
|
+
"test": "bun test"
|
|
17
15
|
},
|
|
18
16
|
"keywords": [
|
|
19
17
|
"mcp",
|
package/skills/sms/tsconfig.json
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "social-content-calendar",
|
|
3
3
|
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
4
5
|
"description": "Hosted premium social content calendar artifact generator",
|
|
5
6
|
"type": "module",
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
"dependencies": {},
|
|
10
|
-
"devDependencies": {
|
|
11
|
-
"@types/bun": "latest",
|
|
12
|
-
"typescript": "^5.7.0"
|
|
7
|
+
"skills": {
|
|
8
|
+
"runtime": "hosted",
|
|
9
|
+
"source": "remote"
|
|
13
10
|
}
|
|
14
11
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "test-suite-generator",
|
|
3
3
|
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
4
5
|
"description": "Generate runnable SaaS test suite artifacts through the hosted Skills runtime",
|
|
5
6
|
"type": "module",
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
"skills": {
|
|
8
|
+
"runtime": "hosted",
|
|
9
|
+
"source": "remote"
|
|
10
|
+
}
|
|
10
11
|
}
|
|
@@ -1,30 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "transcript",
|
|
3
3
|
"version": "1.0.0",
|
|
4
|
+
"private": true,
|
|
4
5
|
"description": "Audio/video transcription skill supporting ElevenLabs, OpenAI Whisper, and Google Gemini with automatic chunking for large files",
|
|
5
6
|
"type": "module",
|
|
6
|
-
"
|
|
7
|
-
|
|
8
|
-
"
|
|
9
|
-
},
|
|
10
|
-
"scripts": {
|
|
11
|
-
"start": "bun run src/index.ts",
|
|
12
|
-
"dev": "bun run --watch src/index.ts"
|
|
13
|
-
},
|
|
14
|
-
"keywords": [
|
|
15
|
-
"transcription",
|
|
16
|
-
"speech-to-text",
|
|
17
|
-
"whisper",
|
|
18
|
-
"elevenlabs",
|
|
19
|
-
"gemini",
|
|
20
|
-
"audio",
|
|
21
|
-
"ai"
|
|
22
|
-
],
|
|
23
|
-
"author": "",
|
|
24
|
-
"devDependencies": {
|
|
25
|
-
"@types/bun": "latest"
|
|
26
|
-
},
|
|
27
|
-
"peerDependencies": {
|
|
28
|
-
"typescript": "^5.0.0"
|
|
7
|
+
"skills": {
|
|
8
|
+
"runtime": "hosted",
|
|
9
|
+
"source": "remote"
|
|
29
10
|
}
|
|
30
11
|
}
|