tylersong 1.0.8 → 1.0.10

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.
@@ -2,319 +2,52 @@ name: Publish to NPM
2
2
 
3
3
  on:
4
4
  push:
5
- branches: [main]
6
- tags: ["v*"]
7
- workflow_run:
8
- workflows: ["Continuous Integration"]
9
- types: [completed]
10
- branches: [main]
11
-
12
- permissions:
13
- contents: write
14
- packages: write
5
+ tags:
6
+ - 'v*'
15
7
 
16
8
  jobs:
17
- check-ci:
18
- name: Check CI Status
19
- runs-on: ubuntu-latest
20
- if: always()
21
- outputs:
22
- ci-success: ${{ steps.ci-check.outputs.success }}
23
-
24
- steps:
25
- - name: Check CI workflow status
26
- id: ci-check
27
- run: |
28
- if [ "${{ github.event_name }}" == "workflow_run" ]; then
29
- if [ "${{ github.event.workflow_run.conclusion }}" == "success" ]; then
30
- echo "success=true" >> $GITHUB_OUTPUT
31
- else
32
- echo "success=false" >> $GITHUB_OUTPUT
33
- exit 1
34
- fi
35
- else
36
- # For push and tag events, assume CI will run or has run
37
- echo "success=true" >> $GITHUB_OUTPUT
38
- fi
39
-
40
- auto-version:
41
- name: Auto Version Update
42
- runs-on: ubuntu-latest
43
- if: |
44
- (github.event_name == 'push' && github.ref == 'refs/heads/main') ||
45
- (github.event_name == 'workflow_run' && needs.check-ci.outputs.ci-success == 'true')
46
- needs:
47
- - check-ci
48
- outputs:
49
- should-publish: ${{ steps.version-update.outputs.should-publish }}
50
- current-version: ${{ steps.version-update.outputs.current-version }}
51
- version-updated: ${{ steps.version-update.outputs.version-updated }}
52
-
53
- steps:
54
- - name: Checkout code
55
- uses: actions/checkout@v4
56
- with:
57
- token: ${{ secrets.GITHUB_TOKEN }}
58
- fetch-depth: 0
59
-
60
- - name: Setup Node.js environment
61
- uses: ./.github/actions/setup-runtime
62
- with:
63
- runtime: node
64
-
65
- - name: Configure Git
66
- run: |
67
- git config user.name "github-actions[bot]"
68
- git config user.email "github-actions[bot]@users.noreply.github.com"
69
-
70
- - name: Auto version update and check
71
- id: version-update
72
- run: |
73
- CURRENT_VERSION=$(node -p "require('./package.json').version")
74
- PUBLISHED_VERSION=$(npm view tylersong version 2>/dev/null || echo "0.0.0")
75
-
76
- echo "Current version: $CURRENT_VERSION"
77
- echo "Published version: $PUBLISHED_VERSION"
78
-
79
- # Tag push는 항상 배포 (버전 체크만)
80
- if [[ "${{ github.ref }}" == refs/tags/v* ]]; then
81
- echo "should-publish=true" >> $GITHUB_OUTPUT
82
- echo "current-version=$CURRENT_VERSION" >> $GITHUB_OUTPUT
83
- echo "version-updated=false" >> $GITHUB_OUTPUT
84
- echo "Tag push detected: will publish without version update"
85
- exit 0
86
- fi
87
-
88
- # 이미 같은 버전이 배포되어 있으면 자동으로 버전 업데이트
89
- if [ "$CURRENT_VERSION" == "$PUBLISHED_VERSION" ]; then
90
- echo "Same version exists, auto-updating version..."
91
-
92
- # 최근 커밋 메시지 분석하여 semantic versioning 적용
93
- LAST_COMMIT_MSG=$(git log -1 --pretty=%B)
94
- echo "Last commit: $LAST_COMMIT_MSG"
95
-
96
- # 커밋 메시지에 따라 버전 업데이트 타입 결정
97
- if echo "$LAST_COMMIT_MSG" | grep -qE "BREAKING CHANGE|feat!|fix!"; then
98
- VERSION_TYPE="major"
99
- elif echo "$LAST_COMMIT_MSG" | grep -qE "^feat(\(.+\))?:"; then
100
- VERSION_TYPE="minor"
101
- else
102
- VERSION_TYPE="patch"
103
- fi
104
-
105
- echo "Detected version type: $VERSION_TYPE"
106
-
107
- # package.json 버전 업데이트
108
- npm version $VERSION_TYPE --no-git-tag-version
109
- NEW_VERSION=$(node -p "require('./package.json').version")
110
-
111
- # TypeScript 소스 코드의 하드코딩된 버전도 업데이트
112
- if [ -f "src/index.ts" ]; then
113
- sed -i.bak "s/program\.version(\".*\")/program.version(\"$NEW_VERSION\")/g" src/index.ts
114
- rm -f src/index.ts.bak
115
- fi
116
-
117
- echo "Updated version to: $NEW_VERSION"
118
- echo "current-version=$NEW_VERSION" >> $GITHUB_OUTPUT
119
- echo "should-publish=true" >> $GITHUB_OUTPUT
120
- echo "version-updated=true" >> $GITHUB_OUTPUT
121
-
122
- # 변경사항 커밋 및 푸시
123
- git add package.json package-lock.json src/index.ts
124
- git commit -m "chore: bump version to v$NEW_VERSION [skip ci]"
125
- git push origin main
126
-
127
- else
128
- echo "Version already different: will publish"
129
- echo "current-version=$CURRENT_VERSION" >> $GITHUB_OUTPUT
130
- echo "should-publish=true" >> $GITHUB_OUTPUT
131
- echo "version-updated=false" >> $GITHUB_OUTPUT
132
- fi
133
-
134
- version-check:
135
- name: Check Version Changes (for tags)
9
+ publish:
10
+ name: NPM 패키지 배포
136
11
  runs-on: ubuntu-latest
137
- if: startsWith(github.ref, 'refs/tags/v')
138
- outputs:
139
- should-publish: ${{ steps.version-check.outputs.should-publish }}
140
- current-version: ${{ steps.version-check.outputs.current-version }}
141
-
12
+
13
+ permissions:
14
+ contents: read
15
+ id-token: write
16
+
142
17
  steps:
143
- - name: Checkout code
18
+ - name: 코드 체크아웃
144
19
  uses: actions/checkout@v4
145
20
 
146
- - name: Setup Node.js environment
147
- uses: ./.github/actions/setup-runtime
21
+ - name: Bun 설치
22
+ uses: oven-sh/setup-bun@v1
148
23
  with:
149
- runtime: node
24
+ bun-version: latest
150
25
 
151
- - name: Check version for tag
152
- id: version-check
153
- run: |
154
- CURRENT_VERSION=$(node -p "require('./package.json').version")
155
- echo "current-version=$CURRENT_VERSION" >> $GITHUB_OUTPUT
156
- echo "should-publish=true" >> $GITHUB_OUTPUT
157
- echo "Tag push detected: will publish"
158
-
159
- publish:
160
- name: Publish Package
161
- runs-on: ubuntu-latest
162
- needs: [auto-version, version-check]
163
- if: |
164
- always() &&
165
- (
166
- (needs.auto-version.outputs.should-publish == 'true') ||
167
- (needs.version-check.outputs.should-publish == 'true')
168
- )
169
-
170
- steps:
171
- - name: Checkout code
172
- uses: actions/checkout@v4
173
-
174
- - name: Setup Node.js for publishing
26
+ - name: Node.js 설치 (NPM 배포용)
175
27
  uses: actions/setup-node@v4
176
28
  with:
177
- node-version: "20.x"
178
- registry-url: "https://registry.npmjs.org/"
179
- cache: "npm"
29
+ node-version: '20.x'
30
+ registry-url: 'https://registry.npmjs.org'
180
31
 
181
- - name: Install dependencies
182
- run: npm ci
32
+ - name: 의존성 설치
33
+ run: bun install
183
34
 
184
- - name: Build for publishing
185
- run: npm run build
35
+ - name: 테스트 실행
36
+ run: bun run test
186
37
 
187
- - name: Verify build artifacts
188
- run: |
189
- ls -la dist/
190
- test -f dist/index.js || (echo "Build artifact missing!" && exit 1)
38
+ - name: 린트 실행
39
+ run: bun run lint
191
40
 
192
- - name: Publish to NPM (Dry Run)
193
- if: github.event_name == 'pull_request'
194
- run: npm publish --dry-run
195
- env:
196
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
41
+ - name: TypeScript 빌드
42
+ run: bun run build
197
43
 
198
- - name: Publish to NPM
199
- if: github.event_name != 'pull_request'
200
- run: npm publish
44
+ - name: NPM에 배포
45
+ run: npm publish --provenance --access public
201
46
  env:
202
47
  NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
203
48
 
204
- - name: Create GitHub Release
205
- if: startsWith(github.ref, 'refs/tags/v')
206
- uses: actions/github-script@v7
207
- with:
208
- github-token: ${{ secrets.GITHUB_TOKEN }}
209
- script: |
210
- const { owner, repo } = context.repo;
211
- const tagName = context.ref.replace('refs/tags/', '');
212
- const version = '${{ needs.auto-version.outputs.current-version || needs.version-check.outputs.current-version }}';
213
-
214
- await github.rest.repos.createRelease({
215
- owner,
216
- repo,
217
- tag_name: tagName,
218
- name: `Release v${version}`,
219
- body: `🚀 **tylersong CLI v${version}**
220
-
221
- ### 설치
222
- \`\`\`bash
223
- npx tylersong
224
- \`\`\`
225
-
226
- ### 변경사항
227
- 이 릴리스의 전체 변경사항은 [커밋 히스토리](https://github.com/${owner}/${repo}/commits/v${version})를 확인해주세요.`,
228
- draft: false,
229
- prerelease: false
230
- });
231
-
232
- notify:
233
- name: Notification
234
- runs-on: ubuntu-latest
235
- needs: [publish, auto-version, version-check]
236
- if: |
237
- always() &&
238
- (
239
- (needs.auto-version.outputs.should-publish == 'true') ||
240
- (needs.version-check.outputs.should-publish == 'true')
241
- )
242
-
243
- steps:
244
- - name: Checkout code
245
- uses: actions/checkout@v4
246
-
247
- - name: Determine publish status
248
- id: status
249
- run: |
250
- if [ "${{ needs.publish.result }}" == "success" ]; then
251
- echo "status=success" >> $GITHUB_OUTPUT
252
- echo "title=패키지 배포 성공 🚀" >> $GITHUB_OUTPUT
253
- echo "description=tylersong v${{ needs.auto-version.outputs.current-version || needs.version-check.outputs.current-version }}이 NPM에 성공적으로 배포되었습니다!" >> $GITHUB_OUTPUT
254
- else
255
- echo "status=failure" >> $GITHUB_OUTPUT
256
- echo "title=패키지 배포 실패 💥" >> $GITHUB_OUTPUT
257
- echo "description=tylersong v${{ needs.auto-version.outputs.current-version || needs.version-check.outputs.current-version }} 배포 중 오류가 발생했습니다." >> $GITHUB_OUTPUT
258
- fi
259
-
260
- - name: Create fields JSON
261
- id: fields
262
- run: |
263
- RELEASE_TYPE="${{ startsWith(github.ref, 'refs/tags/v') && 'Tag Release' || 'Auto Deploy' }}"
264
- FIELDS=$(cat << EOF
265
- [
266
- {
267
- "name": "버전",
268
- "value": "v${{ needs.auto-version.outputs.current-version || needs.version-check.outputs.current-version }}",
269
- "inline": true
270
- },
271
- {
272
- "name": "배포 타입",
273
- "value": "$RELEASE_TYPE",
274
- "inline": true
275
- },
276
- {
277
- "name": "브랜치/태그",
278
- "value": "${{ github.ref_name }}",
279
- "inline": true
280
- },
281
- {
282
- "name": "NPM",
283
- "value": "[tylersong 패키지](https://www.npmjs.com/package/tylersong)",
284
- "inline": false
285
- },
286
- {
287
- "name": "설치 명령어",
288
- "value": "\`npx tylersong\`",
289
- "inline": false
290
- },
291
- {
292
- "name": "배포자",
293
- "value": "${{ github.actor }}",
294
- "inline": true
295
- }
296
- ]
297
- EOF
298
- )
299
- echo "fields<<EOF" >> $GITHUB_OUTPUT
300
- echo "$FIELDS" >> $GITHUB_OUTPUT
301
- echo "EOF" >> $GITHUB_OUTPUT
302
-
303
- - name: Send Discord notification
304
- uses: ./.github/actions/discord-notify
305
- with:
306
- webhook-url: ${{ secrets.DISCORD_WEBHOOK_URL }}
307
- status: ${{ steps.status.outputs.status }}
308
- title: ${{ steps.status.outputs.title }}
309
- description: ${{ steps.status.outputs.description }}
310
- fields: ${{ steps.fields.outputs.fields }}
311
-
312
- - name: Console output
49
+ - name: 배포 알림
50
+ if: success()
313
51
  run: |
314
- if [ "${{ needs.publish.result }}" == "success" ]; then
315
- echo " Package v${{ needs.auto-version.outputs.current-version || needs.version-check.outputs.current-version }} published successfully!"
316
- echo "📦 NPM: https://www.npmjs.com/package/tylersong"
317
- else
318
- echo "❌ Package publish failed!"
319
- exit 1
320
- fi
52
+ echo " 패키지가 NPM에 성공적으로 배포되었습니다!"
53
+ echo "버전: ${{ github.ref_name }}"
package/.prettierrc ADDED
@@ -0,0 +1,13 @@
1
+ {
2
+ "semi": true,
3
+ "trailingComma": "es5",
4
+ "singleQuote": false,
5
+ "printWidth": 80,
6
+ "tabWidth": 2,
7
+ "useTabs": false,
8
+ "arrowParens": "always",
9
+ "endOfLine": "lf",
10
+ "bracketSpacing": true,
11
+ "quoteProps": "as-needed"
12
+ }
13
+
package/README.md CHANGED
@@ -1,99 +1,187 @@
1
+ <div align="center">
2
+
1
3
  # 📝 tylersong
2
4
 
3
- > 안녕하세요! 프론트엔드 개발자 **송민성**의 자기소개 CLI 도구입니다 ✨
5
+ ### 🚀 개발자 포트폴리오를 터미널에서 만나보세요
6
+
7
+ [![NPM Version](https://img.shields.io/npm/v/tylersong?style=for-the-badge&logo=npm&color=CB3837)](https://www.npmjs.com/package/tylersong)
8
+ [![NPM Downloads](https://img.shields.io/npm/dm/tylersong?style=for-the-badge&logo=npm&color=CB3837)](https://www.npmjs.com/package/tylersong)
9
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge)](https://opensource.org/licenses/MIT)
10
+ [![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge&logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
4
11
 
5
- [![NPM Version](https://img.shields.io/npm/v/tylersong)](https://www.npmjs.com/package/tylersong)
6
- [![NPM Downloads](https://img.shields.io/npm/dm/tylersong)](https://www.npmjs.com/package/tylersong)
7
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
12
+ **송민성(Tyler Song)** 개발자의 대화형 CLI 자기소개 도구
8
13
 
9
- 터미널에서 간단한 명령어로 개발자 프로필을 확인하고, GitHub 링크에 빠르게 접근할 수 있습니다.
14
+ [빠른 시작](#-빠른-시작) [사용법](#-사용법) [기능](#-주요-기능) [개발자 정보](#-개발자-정보)
15
+
16
+ </div>
17
+
18
+ ---
19
+
20
+ ## ✨ 주요 기능
21
+
22
+ <table>
23
+ <tr>
24
+ <td width="33%" align="center">
25
+ <h3>🎨 대화형 UI</h3>
26
+ <p>아름다운 터미널 인터페이스로<br/>개발자 정보를 표시합니다</p>
27
+ </td>
28
+ <td width="33%" align="center">
29
+ <h3>⚡ 즉시 실행</h3>
30
+ <p>설치 없이 npx로<br/>바로 실행 가능합니다</p>
31
+ </td>
32
+ <td width="33%" align="center">
33
+ <h3>🔗 빠른 링크</h3>
34
+ <p>GitHub 프로필을<br/>원클릭으로 열어봅니다</p>
35
+ </td>
36
+ </tr>
37
+ </table>
10
38
 
11
39
  ## 🚀 빠른 시작
12
40
 
13
- ### 즉시 실행 (권장)
41
+ ### 💡 즉시 실행 (추천!)
42
+
43
+ 설치 없이 바로 실행하세요:
14
44
 
15
45
  ```bash
16
46
  npx tylersong
17
47
  ```
18
48
 
19
- ### 전역 설치
49
+ ### 📦 전역 설치
50
+
51
+ 자주 사용한다면 전역으로 설치하세요:
20
52
 
21
53
  ```bash
54
+ # npm 사용
22
55
  npm install -g tylersong
56
+
57
+ # bun 사용 (권장)
58
+ bun install -g tylersong
59
+
60
+ # 실행
23
61
  tylersong
24
62
  ```
25
63
 
26
64
  ## 💻 사용법
27
65
 
28
- ### 기본 실행
66
+ ### 📍 기본 실행
67
+
68
+ 터미널에서 실행하면 대화형 프롬프트가 나타납니다:
29
69
 
30
70
  ```bash
31
71
  tylersong
32
- # ✨ 저에 대해 궁금하신가요? 라는 질문에 답하면 프로필이 표시됩니다
33
72
  ```
34
73
 
35
- ### 명령어 옵션
74
+ "✨ 저에 대해 궁금하신가요?" 질문에 답하면 아래와 같은 프로필이 표시됩니다.
75
+
76
+ ### ⚙️ 명령어 옵션
77
+
78
+ | 명령어 | 단축키 | 설명 |
79
+ |--------|--------|------|
80
+ | `tylersong --help` | `-h` | 도움말 표시 |
81
+ | `tylersong --version` | `-v` | 버전 정보 확인 |
82
+ | `tylersong --github` | `-g` | GitHub 프로필 브라우저에서 열기 |
83
+
84
+ ### 🎬 실행 예시
36
85
 
37
86
  ```bash
38
- tylersong --help # 도움말 보기
39
- tylersong --version # 버전 정보 확인
40
- tylersong --github # GitHub 프로필 바로 열기
41
- tylersong -g # GitHub 프로필 바로 열기 (단축)
87
+ # 기본 실행
88
+ $ npx tylersong
89
+
90
+ # GitHub 프로필 바로 열기
91
+ $ npx tylersong --github
92
+
93
+ # 도움말 보기
94
+ $ npx tylersong --help
42
95
  ```
43
96
 
44
- ## 🎨 스크린샷
97
+ ## 🎨 미리보기
45
98
 
46
99
  ```
47
- ╭───────────────────────────────────────────╮
48
- │ 🚀 Frontend Developer Profile 🚀 │
49
- ╰───────────────────────────────────────────╯
100
+ ╭───────────────────────────────────────────╮
101
+ │ 🚀 Frontend Developer Profile 🚀 │
102
+ ╰───────────────────────────────────────────╯
50
103
 
51
- 👋 안녕하세요!
52
- 💻 프론트엔드 개발자 송민성입니다.
104
+ 👋 안녕하세요!
105
+ 💻 개발자 송민성입니다.
53
106
 
54
- 📌 Github: https://github.com/alstjd0051
55
- ✉️ E-mail: wsc7202@gmail.com
107
+ 📌 Github: https://github.com/alstjd0051
108
+ ✉️ E-mail: wsc7202@gmail.com
56
109
 
57
- 💡 더 많은 정보는 --help를 통해 확인해주세요.
110
+ 💡 더 많은 정보는 --help를 통해 확인해주세요.
58
111
  ```
59
112
 
60
113
  ## 👨‍💻 개발자 정보
61
114
 
62
- - **이름**: 송민성 (Tyler Song)
63
- - **직업**: Frontend Developer
64
- - **GitHub**: [@alstjd0051](https://github.com/alstjd0051)
65
- - **Email**: wsc7202@gmail.com
115
+ <div align="center">
116
+
117
+ | | |
118
+ |:---:|:---|
119
+ | 👤 **이름** | 송민성 (Tyler Song) |
120
+ | 💼 **직업** | Frontend Developer |
121
+ | 🐙 **GitHub** | [@alstjd0051](https://github.com/alstjd0051) |
122
+ | 📧 **Email** | wsc7202@gmail.com |
123
+
124
+ </div>
66
125
 
67
126
  ## 🛠️ 기술 스택
68
127
 
69
128
  이 CLI 도구는 다음 기술로 제작되었습니다:
70
129
 
71
- - **TypeScript** - 타입 안전성
72
- - **Node.js** - 크로스 플랫폼 실행
73
- - **Commander.js** - CLI 인터페이스
74
- - **Inquirer.js** - 대화형 프롬프트
75
- - **Chalk** - 터미널 색상 및 스타일링
130
+ <table>
131
+ <tr>
132
+ <td align="center" width="20%">
133
+ <img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/typescript/typescript-original.svg" width="48" height="48" alt="TypeScript" />
134
+ <br><b>TypeScript</b>
135
+ <br><sub>타입 안전성</sub>
136
+ </td>
137
+ <td align="center" width="20%">
138
+ <img src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/nodejs/nodejs-original.svg" width="48" height="48" alt="Node.js" />
139
+ <br><b>Node.js</b>
140
+ <br><sub>크로스 플랫폼</sub>
141
+ </td>
142
+
143
+ <td align="center" width="20%">
144
+ <img src="https://raw.githubusercontent.com/SBoudrias/Inquirer.js/main/assets/inquirer_readme.svg?sanitize=true" width="48" height="48" alt="Inquirer.js" />
145
+ <br><b>Inquirer.js</b>
146
+ <br><sub>대화형 프롬프트</sub>
147
+ </td>
148
+ <td align="center" width="20%">
149
+ <img src="https://raw.githubusercontent.com/chalk/chalk/main/media/logo.svg" width="48" height="48" alt="Chalk" />
150
+ <br><b>Chalk</b>
151
+ <br><sub>터미널 스타일링</sub>
152
+ </td>
153
+ </tr>
154
+ </table>
76
155
 
77
156
  ## 📦 패키지 정보
78
157
 
79
- - **크기**: 작고 가벼운 패키지 (~20KB)
80
- - **의존성**: 최소한의 검증된 의존성만 사용
81
- - **호환성**: Node.js 14+ 지원
82
- - **플랫폼**: Windows, macOS, Linux 모두 지원
158
+ <div align="center">
83
159
 
84
- ## 🤝 피드백 연락
160
+ | 항목 | 상세 |
161
+ |:---:|:---|
162
+ | 📦 **크기** | 작고 가벼운 패키지 (~20KB) |
163
+ | 🔗 **의존성** | 최소한의 검증된 의존성만 사용 |
164
+ | ✅ **호환성** | Node.js 14+ |
165
+ | 🌍 **플랫폼** | Windows, macOS, Linux |
166
+ | 🧪 **테스트** | Vitest로 검증됨 |
85
167
 
86
- 버그 리포트나 기능 제안은 언제든 환영합니다!
168
+ </div>
87
169
 
88
- - **GitHub Issues**: [npm_readMe/issues](https://github.com/alstjd0051/npm_readMe/issues)
89
- - **Email**: wsc7202@gmail.com
170
+ ## 🤝 기여 & 피드백
90
171
 
91
- ## 📄 라이센스
172
+ 버그 리포트나 기능 제안은 언제든 환영합니다! 💬
92
173
 
93
- MIT License - 자유롭게 사용하세요!
94
174
 
95
- ---
96
175
 
97
- **Made with ❤️ by Tyler Song**
98
176
 
99
- <!-- Last updated: $(date) -->
177
+
178
+
179
+
180
+ <div align="center">
181
+
182
+ **Made with ❤️ by [Tyler Song](https://github.com/alstjd0051)**
183
+
184
+ [![GitHub](https://img.shields.io/badge/GitHub-alstjd0051-181717?style=flat&logo=github)](https://github.com/alstjd0051)
185
+ [![Email](https://img.shields.io/badge/Email-wsc7202@gmail.com-EA4335?style=flat&logo=gmail&logoColor=white)](mailto:wsc7202@gmail.com)
186
+
187
+ </div>