From cb126a36a697c97055e46f02e23d6fbacb4809b4 Mon Sep 17 00:00:00 2001 From: Minju Kim Date: Sun, 6 Aug 2023 16:16:37 +0900 Subject: [PATCH] V1.0.0 (#36) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Overview onboarding과 웹뷰를 위한 falling 페이지 구현 --------- Co-authored-by: Jonghyeon Ko --- .eslintignore | 4 +- .gitignore | 6 + .vscode/settings.json | 3 +- apps/falling/package.json | 2 +- apps/falling/public/images/bubble-beer.png | Bin 0 -> 18205 bytes .../falling/public/images/bubble-goryanju.png | Bin 0 -> 8481 bytes apps/falling/public/images/bubble-soju.png | Bin 0 -> 9529 bytes apps/falling/public/images/bubble-whisky.png | Bin 0 -> 9922 bytes apps/falling/public/images/bubble-wine.png | Bin 0 -> 13488 bytes apps/falling/src/app/components/Falling.tsx | 39 + apps/falling/src/app/constants/drinks.ts | 24 + apps/falling/src/app/layout.tsx | 29 +- apps/falling/src/app/page.tsx | 4 +- .../src/contexts/androidWeview/index.tsx | 72 + apps/onboarding/.eslintrc.js | 3 + apps/onboarding/emotion.tsx | 26 - apps/onboarding/env.d.ts | 6 + apps/onboarding/next.config.js | 11 +- apps/onboarding/openapi-config.json | 3 + apps/onboarding/openapitools.json | 7 + apps/onboarding/package.json | 11 +- .../favicons/android-chrome-192x192.png | Bin 0 -> 55359 bytes .../favicons/android-chrome-512x512.png | Bin 0 -> 386093 bytes .../public/favicons/apple-touch-icon.png | Bin 0 -> 49650 bytes .../public/favicons/favicon-16x16.png | Bin 0 -> 594 bytes .../public/favicons/favicon-32x32.png | Bin 0 -> 1694 bytes .../public/favicons/site.webmanifest | 19 + apps/onboarding/public/images/bubble-beer.png | Bin 0 -> 18205 bytes .../public/images/bubble-goryanju.png | Bin 0 -> 8481 bytes apps/onboarding/public/images/bubble-soju.png | Bin 0 -> 9529 bytes .../public/images/bubble-whisky.png | Bin 0 -> 9922 bytes apps/onboarding/public/images/bubble-wine.png | Bin 0 -> 13488 bytes .../public/metadata/images/baby.png | Bin 0 -> 197063 bytes .../public/metadata/images/common.png | Bin .../onboarding/public/metadata/images/god.png | Bin .../public/metadata/images/heaven.png | Bin .../public/metadata/images/master.png | Bin .../public/metadata/images/monster.png | Bin .../public/metadata}/main_image.png | Bin apps/onboarding/public/next.svg | 1 - apps/onboarding/public/svgs/grainy.svg | 11 + apps/onboarding/public/vercel.svg | 1 - apps/onboarding/src/.babelrc | 8 + apps/onboarding/src/GlobalCSS.tsx | 339 ++ apps/onboarding/src/KakaoScript.tsx | 18 + apps/onboarding/src/api/.gitignore | 4 + apps/onboarding/src/api/.npmignore | 1 + .../src/api/.openapi-generator-ignore | 23 + .../src/api/.openapi-generator/FILES | 8 + .../src/api/.openapi-generator/VERSION | 1 + apps/onboarding/src/api/api.ts | 1526 +++++++++ apps/onboarding/src/api/base.ts | 75 + apps/onboarding/src/api/common.ts | 200 ++ apps/onboarding/src/api/configuration.ts | 122 + apps/onboarding/src/api/git_push.sh | 57 + apps/onboarding/src/api/index.ts | 16 + apps/onboarding/src/app/favicon.ico | Bin 39535 -> 15406 bytes apps/onboarding/src/app/layout.tsx | 68 +- apps/onboarding/src/app/measure/page.tsx | 355 ++ apps/onboarding/src/app/page.tsx | 91 +- .../src/app/result/components/ResultCard.tsx | 77 + .../app/result/components/ResultContents.tsx | 263 ++ .../app/result/components/ResultFallback.tsx | 39 + apps/onboarding/src/app/result/page.tsx | 42 + .../src/app/tests/react-hook-step/page.tsx | 137 - apps/onboarding/src/app/utils/share.ts | 13 + apps/onboarding/src/assets/card/card-baby.svg | 93 + .../src/assets/card/card-common.svg | 124 + .../onboarding/src/assets/card/card-ghost.svg | 107 + apps/onboarding/src/assets/card/card-god.svg | 172 + .../src/assets/card/card-heaven.svg | 137 + .../src/assets/card/card-master.svg | 98 + .../src/assets}/icons/ic-goryanju-m.svg | 0 .../src/assets}/icons/ic-macju-m.svg | 0 .../src/assets}/icons/ic-soju-m.svg | 0 .../src/assets/icons/ic-whisky-m.svg | 57 + .../src/assets}/icons/ic-wine-m.svg | 0 .../assets/icons/ic_doublechevron_left.svg | 4 + .../assets/icons/ic_doublechevron_right.svg | 4 + apps/onboarding/src/assets/icons/main.svg | 586 ++++ .../src/assets/icons/navigations/ic-back.svg | 4 + .../assets/icons/navigations/ic-refresh.svg | 4 + .../src/assets/icons/sulsul-text.svg | 33 + apps/onboarding/src/assets/result_loading.gif | Bin 0 -> 12051738 bytes apps/onboarding/src/components/SVGWrapper.tsx | 30 + .../src/components/SuspenseQuery.tsx | 17 + apps/onboarding/src/constants/alcohol.tsx | 121 + apps/onboarding/src/constants/provider.tsx | 36 + apps/onboarding/svgr.d.ts | 6 + apps/onboarding/tsconfig.json | 6 +- configs/babel/.eslintrc.js | 5 + configs/babel/index.js | 7 + configs/babel/package.json | 16 + configs/eslint-config/react.js | 1 + configs/rollup/.eslintrc.js | 5 + configs/rollup/index.js | 159 + configs/rollup/package.json | 26 + openapispec.json | 823 +++++ package.json | 9 +- packages/ui/.eslintignore | 4 + packages/ui/babel.config.js | 6 + packages/ui/global.css | 329 -- packages/ui/package.json | 39 +- packages/ui/rollup.config.js | 6 + packages/ui/src/Button.tsx | 5 +- packages/ui/src/StackView/StackView.tsx | 73 + packages/ui/src/StackView/TouchButton.tsx | 15 + packages/ui/src/StackView/index.ts | 2 + packages/ui/src/StackView/useStackBall.ts | 180 ++ packages/ui/src/assets/bubble-wine.png | Bin 0 -> 13488 bytes packages/ui/src/index.ts | 1 + packages/ui/tsconfig.build.json | 4 + packages/ui/tsconfig.json | 5 +- pnpm-lock.yaml | 2855 +++++++++++++++-- public/images/result/card/card_1_baby.png | Bin 197336 -> 0 bytes public/images/result/illust/illust_1_baby.png | Bin 63877 -> 0 bytes .../images/result/illust/illust_2_common.png | Bin 59188 -> 0 bytes .../images/result/illust/illust_3_master.png | Bin 69306 -> 0 bytes .../images/result/illust/illust_4_ghost.png | Bin 74694 -> 0 bytes .../images/result/illust/illust_5_heaven.png | Bin 85802 -> 0 bytes public/images/result/illust/illust_6_god.png | Bin 116174 -> 0 bytes turbo.json | 7 +- 122 files changed, 9181 insertions(+), 805 deletions(-) create mode 100644 apps/falling/public/images/bubble-beer.png create mode 100644 apps/falling/public/images/bubble-goryanju.png create mode 100644 apps/falling/public/images/bubble-soju.png create mode 100644 apps/falling/public/images/bubble-whisky.png create mode 100644 apps/falling/public/images/bubble-wine.png create mode 100644 apps/falling/src/app/components/Falling.tsx create mode 100644 apps/falling/src/app/constants/drinks.ts create mode 100644 apps/falling/src/contexts/androidWeview/index.tsx delete mode 100644 apps/onboarding/emotion.tsx create mode 100644 apps/onboarding/env.d.ts create mode 100644 apps/onboarding/openapi-config.json create mode 100644 apps/onboarding/openapitools.json create mode 100644 apps/onboarding/public/favicons/android-chrome-192x192.png create mode 100644 apps/onboarding/public/favicons/android-chrome-512x512.png create mode 100644 apps/onboarding/public/favicons/apple-touch-icon.png create mode 100644 apps/onboarding/public/favicons/favicon-16x16.png create mode 100644 apps/onboarding/public/favicons/favicon-32x32.png create mode 100644 apps/onboarding/public/favicons/site.webmanifest create mode 100644 apps/onboarding/public/images/bubble-beer.png create mode 100644 apps/onboarding/public/images/bubble-goryanju.png create mode 100644 apps/onboarding/public/images/bubble-soju.png create mode 100644 apps/onboarding/public/images/bubble-whisky.png create mode 100644 apps/onboarding/public/images/bubble-wine.png create mode 100644 apps/onboarding/public/metadata/images/baby.png rename public/images/result/card/card_2_common.png => apps/onboarding/public/metadata/images/common.png (100%) rename public/images/result/card/card_6_god.png => apps/onboarding/public/metadata/images/god.png (100%) rename public/images/result/card/card_5_heaven.png => apps/onboarding/public/metadata/images/heaven.png (100%) rename public/images/result/card/card_3_master.png => apps/onboarding/public/metadata/images/master.png (100%) rename public/images/result/card/card_4_ghost.png => apps/onboarding/public/metadata/images/monster.png (100%) rename {public/images => apps/onboarding/public/metadata}/main_image.png (100%) delete mode 100644 apps/onboarding/public/next.svg create mode 100644 apps/onboarding/public/svgs/grainy.svg delete mode 100644 apps/onboarding/public/vercel.svg create mode 100644 apps/onboarding/src/.babelrc create mode 100644 apps/onboarding/src/GlobalCSS.tsx create mode 100644 apps/onboarding/src/KakaoScript.tsx create mode 100644 apps/onboarding/src/api/.gitignore create mode 100644 apps/onboarding/src/api/.npmignore create mode 100644 apps/onboarding/src/api/.openapi-generator-ignore create mode 100644 apps/onboarding/src/api/.openapi-generator/FILES create mode 100644 apps/onboarding/src/api/.openapi-generator/VERSION create mode 100644 apps/onboarding/src/api/api.ts create mode 100644 apps/onboarding/src/api/base.ts create mode 100644 apps/onboarding/src/api/common.ts create mode 100644 apps/onboarding/src/api/configuration.ts create mode 100644 apps/onboarding/src/api/git_push.sh create mode 100644 apps/onboarding/src/api/index.ts create mode 100644 apps/onboarding/src/app/measure/page.tsx create mode 100644 apps/onboarding/src/app/result/components/ResultCard.tsx create mode 100644 apps/onboarding/src/app/result/components/ResultContents.tsx create mode 100644 apps/onboarding/src/app/result/components/ResultFallback.tsx create mode 100644 apps/onboarding/src/app/result/page.tsx delete mode 100644 apps/onboarding/src/app/tests/react-hook-step/page.tsx create mode 100644 apps/onboarding/src/app/utils/share.ts create mode 100644 apps/onboarding/src/assets/card/card-baby.svg create mode 100644 apps/onboarding/src/assets/card/card-common.svg create mode 100644 apps/onboarding/src/assets/card/card-ghost.svg create mode 100644 apps/onboarding/src/assets/card/card-god.svg create mode 100644 apps/onboarding/src/assets/card/card-heaven.svg create mode 100644 apps/onboarding/src/assets/card/card-master.svg rename {public => apps/onboarding/src/assets}/icons/ic-goryanju-m.svg (100%) rename {public => apps/onboarding/src/assets}/icons/ic-macju-m.svg (100%) rename {public => apps/onboarding/src/assets}/icons/ic-soju-m.svg (100%) create mode 100644 apps/onboarding/src/assets/icons/ic-whisky-m.svg rename {public => apps/onboarding/src/assets}/icons/ic-wine-m.svg (100%) create mode 100644 apps/onboarding/src/assets/icons/ic_doublechevron_left.svg create mode 100644 apps/onboarding/src/assets/icons/ic_doublechevron_right.svg create mode 100644 apps/onboarding/src/assets/icons/main.svg create mode 100644 apps/onboarding/src/assets/icons/navigations/ic-back.svg create mode 100644 apps/onboarding/src/assets/icons/navigations/ic-refresh.svg create mode 100644 apps/onboarding/src/assets/icons/sulsul-text.svg create mode 100644 apps/onboarding/src/assets/result_loading.gif create mode 100644 apps/onboarding/src/components/SVGWrapper.tsx create mode 100644 apps/onboarding/src/components/SuspenseQuery.tsx create mode 100644 apps/onboarding/src/constants/alcohol.tsx create mode 100644 apps/onboarding/src/constants/provider.tsx create mode 100644 apps/onboarding/svgr.d.ts create mode 100644 configs/babel/.eslintrc.js create mode 100644 configs/babel/index.js create mode 100644 configs/babel/package.json create mode 100644 configs/rollup/.eslintrc.js create mode 100644 configs/rollup/index.js create mode 100644 configs/rollup/package.json create mode 100644 openapispec.json create mode 100644 packages/ui/.eslintignore create mode 100644 packages/ui/babel.config.js delete mode 100644 packages/ui/global.css create mode 100644 packages/ui/rollup.config.js create mode 100644 packages/ui/src/StackView/StackView.tsx create mode 100644 packages/ui/src/StackView/TouchButton.tsx create mode 100644 packages/ui/src/StackView/index.ts create mode 100644 packages/ui/src/StackView/useStackBall.ts create mode 100644 packages/ui/src/assets/bubble-wine.png create mode 100644 packages/ui/tsconfig.build.json delete mode 100644 public/images/result/card/card_1_baby.png delete mode 100644 public/images/result/illust/illust_1_baby.png delete mode 100644 public/images/result/illust/illust_2_common.png delete mode 100644 public/images/result/illust/illust_3_master.png delete mode 100644 public/images/result/illust/illust_4_ghost.png delete mode 100644 public/images/result/illust/illust_5_heaven.png delete mode 100644 public/images/result/illust/illust_6_god.png diff --git a/.eslintignore b/.eslintignore index 5a8bfc2..21feb23 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,4 +1,6 @@ .vscode .eslintrc.js packlint.config.mjs -node_modules \ No newline at end of file +node_modules +esm +dist diff --git a/.gitignore b/.gitignore index d1595af..e17b911 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,9 @@ yarn-error.log* # vercel .vercel + +# bundled +dist +esm + +stats.html diff --git a/.vscode/settings.json b/.vscode/settings.json index 2fde182..d0b855d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,9 +1,8 @@ { "typescript.tsdk": "node_modules/typescript/lib", "editor.defaultFormatter": "esbenp.prettier-vscode", - "eslint.packageManager": "pnpm", "eslint.validate": ["javascript", "javascriptreact", "typescript", "typescriptreact"], - "cSpell.words": ["packlint", "nextjs", "sulsul"], + "cSpell.words": ["packlint", "nextjs", "sulsul", "jsxcss"], "editor.codeActionsOnSave": { "source.fixAll.eslint": true }, diff --git a/apps/falling/package.json b/apps/falling/package.json index 8144113..2b392e5 100644 --- a/apps/falling/package.json +++ b/apps/falling/package.json @@ -22,7 +22,7 @@ "@tanstack/react-query-devtools": "^4.29.3", "axios": "^1.3.6", "framer-motion": "^10.12.4", - "next": "13.4.4", + "next": "13.4.12", "react": "^18.2.0", "react-dom": "^18.2.0", "react-hook-form": "^7.43.9", diff --git a/apps/falling/public/images/bubble-beer.png b/apps/falling/public/images/bubble-beer.png new file mode 100644 index 0000000000000000000000000000000000000000..a3224141776f0c4271420f2747d68fc1139f1915 GIT binary patch literal 18205 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 UV_wIEZ~y=R07*qoM6N<$f??+6rvLx| literal 0 HcmV?d00001 diff --git a/apps/falling/public/images/bubble-goryanju.png b/apps/falling/public/images/bubble-goryanju.png new file mode 100644 index 0000000000000000000000000000000000000000..16e4584bac9817a3bb3aff5fd6d2e03e8787be3e GIT binary patch literal 8481 zcmV++A>Q7JP)k4LljAC`^#U|rXd=YkGX?DOj^_G z|0Y_iqGJ;)`oqK~7c`pIS{?LKKTtspQa(Dv$IQL=oW0lT^E~g`=bnK9hGD=o@xY$F z&p!L^z1Fjy_xnA^?6uw{Kq= z_Ly-vaKT!*?Y8Bzwzd{7z0~Zs+YS&S{mt6iN?2ZADY|yyRvK`4dWZb9-o37BAPYFz z3jhL75D2r?xVmb#mnZPgD&FkfOE4}i%ggtMwYBGBzbugUt&k#hz)!P|dD;M(gAp8z zTR-sk=Z-`7T1#P1$@v^e>mIX=T{x%YVKk7EV!yzs4rBj74tCITxfL?=z4IsUKe%sY zh05jsCm@%9;GENQy#FmF+QpdMn}N?xlfLBir4}-=Dj6~rILQcomIY%BA!d9Wc_EHL ziU4i*ATGPbLb_=qr7wPQDxd#YlJ*J#7<*ff)pYpv- zNhTm12Gx5R##4k!5W4^=;RrmFc{bq~TlrMV_VLf$aO8V-3SXxTkau3ab9wvr zr7*?gH}S~~^w^A6W`Jjk{WOGs82|ikk|zobqGurzglJ+&&{h&YX(NG&<;&KLuDEgK z@E!IPUMCI6TUU1P9?z!l#l)`y3%~{dkqsb(9@Fl~3;@wrAbRNz>JUKoz6;Jg>(#q< z?zW9&b`)T&0|abgJ?WU|-n#9-)}%rBM-msY0~ZMt{8t)h2=)ublin?9Ipc~Todsb-s3y~=nEzt zW-cZKh9KAiC;)Jy?+X8B!=Dj(-*uhKy3abEh0o(=uFu7FoA?Z$mou?o-+sqcOMh)o z@|B*<#qYR!+clvNe~Sr5Y*Tz}pb`Ddr`X=2BwGX&7NrNQy$G|z4v|M~}|q~5`hzQE>tli|S~EjUxe2zjuw z-Ge)$f9dK6d)aR{8Oiv=fN07^%5Ycna>!t;e}kW!@|0=o3o zoq#iz^Wo+>Z@~&~FY|%WUG;Z6`-i_aD(m-Tb8kM-z|uhjnxTnqS>TU=JXlazmt?Ro znF@6jW5AYqZj9?jAr-tg?#HkIRtDp_CxEANCa|8wdo&!HELDp3{NEwT0=ga9}cmxc>*B_SA4v8`Qp(p!IXnf8W5S*KK-*4XiuF{ zTxYoAbiKi2fB{#XN_A7B(N!J7bMQ?t6)Mu1OfSR*10z%V+4iLiEyc0GfboZg)oA#> z*_{1%>ia`RC5meahuN)o+8he!UMFjc|ar!UG;~~RQI2vKyL<*wAa7<_1h2p zV0GiTvCw0hU99QXpg6aY8Mr^$FvH}r`h&Pcu>_MRFq>T`<`5K!4@~0}0Ab&2>u5Ts zI6v)XU=hq@XyIUtFvbxE(E^mVXwMC=DLA&-VZ%LOR?BAJ!)(KxgKZml&W81gz~jAb zkf|JlKi|j3XJwt|cxCx!V0YJZPVk}VSRQZQ$92rAMR`GyO*h_1)}t!NsVi5pqgoeG z8!8cl15;p4z##ghSURzR^v>C17{lzk9*VTZadcYyt13b+XvE+Fbb`X@fC&FM1^iKy zQl7z!!v|0+xVvF}$POx)L?^gFU(h9%fq_eCqz?2)P)v;pV9Z#FvOJnj>7(p_LXn}U z0P!yr_a&y9aPP>Q0HGt~=<~hn5_zlD%E0H$6(qUv5R+aCSFU`DBYN?(e8%=yg*Hww zIf+Y{Z@}ZB*>}@=f4|YP1Zh%CEz#qpnN>hYG0AR%O#z}OWX<18QXB+VEsCduA|k42 zzA3NY^P163-~amT?#E|H7e7kB!6)nN;J)a+*dgaDNO_h`tBMwnnnF9wa89Py80FH; z_SA)R*ReP-qKGyaa#$Goax9v;D((bkM$wE6?ZCZ~u%^YM7{Ld(5Izdr_{JcP1t7{D z!{_EsN-sb>URKP^{0i6`L7>dBLiK>j2uktTH!M#77#+e~22lM|(6ti?ideZtMz1sX zLg{VF>l}QKDT6y&m5zYX%{H=%X4*g3-(n9-ISbT3UEYk;AysE+8@X~d=n_OG4O}=} z%lr8j$h<L@Qm%Rq^ALkEJ}%;XE_GfIOM5lb7LUV_ za#-C)NnRA^;{R>q zrShD~Sz!#d4eUGdZ$x^Wvpt+tt3*cD5Jd zsY`a8SFth|8@*=vSLH}|d$?!w)_lk2Pczja1tUh>yhq>*!2|k$WQ1vtQUc6$z#_Li z#`{TV$~ZM;f?Ntdvn6~!;paHV<1tXgXYq|gf@#i>rnC3<)Z27?u*V8BKImLTnClS5 znDdZ6p({>{V-zEkC`mLR?lUZ@7#4RmyVEOnUY;h+*%-vqBh$mmsg`*o3lru(q)A>8@5BE%0yKf)9B{yQ8pnx}wwT6)aW${d?2znbx&_?Qw(%_#&)>9yn zdEnSmWZs1HP(B4|3Zy*oxYapB{t`BMeKxyy2(=knd-%?<9vj$#{d$iO9=E1>Rmcy= zO+JE~-z1q=L<n~tT4%OJF!XAVoNrG-k3Dm?s@2lZO8lbpS=rC zMzr-V*#;EpQ7VRx4@JyB-N5+`EKxqXe&C)f;Ikl8CO}}k;kuI{ZE^QJfF%u99mjwK z$6*QQ^**Jt1SU<$7-&!Ic^z4kH#XbROPRP9LpJm5EuPh~A^pdosxQtA>4Ti*cK3Z% zwoDN!D^{pe$Q%a(>ain3D4!tg2&9%IP`|e=0*p~>+p#Ud`fh8pO(sj>_Ir=m_YXaY zn=pJ0bS^X)8YQLN@Mt=2;PW;p;LcN#4FaSNRN(m(d#qw)<{se_ELws~3Ofx3Fs7oe z5G#U?aUKjSE)CReCG1=R27uy|0t6@DA~)GxWcoq82tZ&=Wh+lgfI{8VzXEaPl3R^p zVOVE~;$~R5&X@vf;DNNY$PlVEQOrV4L*q3}f|YUVN3@d|UC{qliXwXg1RCuG51>-6vJ^@4!kIgg0B7ijjWCyaM+gh8~xQkg> zWXzD^crZh=C3U8*V<4J^I?~%hw1xjzPm14 z*?n%)%xq836J9Fl#TRpnUgRKxSV+{E7{sIul{b?zSvp1)f=K-$n!*=s@L(_+ZWAWl zK`I!11_uJ52ml8md4db)ie2)OvAyjaSmTGwF+RznCrirgEq8aRD2|2t;+-hM@F}o3 za!89De9Qskiz6n$LvDP{c9U=Y0pqEsn5(c9j6=QtW+KIn0*yp zh46(X2Ikef2KFHLsgI%_<&oMB%htnqlve3YGJ_6i(T3AZlhe~yoI$bD#J>zZ@dfju z)!h6pG}FjLBdy43F-CJg#iiie(H_eE6F zdx8>hWzZkRHLt+&(7=h6#ZV8SgfiBhw8eN*>FB?Th6uI;^;+)ntUO8rqO=1$1Pt9o zI1*xw>y}Vg!b?)aUc~hGI!BkIA^q_j1<~*YGkucGSeC2Y)4x`^g8+o=`cJ9o%5X2E z`l1t(JdgqRDCgj@VYe=-x_@fAvNy=b&Dm zS$!B;y7?!l;{Kc(6owOFZX_WCU3prJbcX<;&`N3P-{+oYo7cVrs6A|9;~qt90f6L-U&NGkrg=+97IoQ`P>1k0!Jczs zF{-Da0+7of9x=>2kjjEy($t0+0++q0sfu(cWVnfwbU6iv{6J>OotlUl1&N*BSLhK! zrWSMQIQFbW1Z(~vS6j;@sfxx3lb3Hs5wgL`RDVOwA;mV|^Cq+L6t&*_5hWd_A;F9$ z(t`}TkX-jEAYmKoOBf|hfR)y za&bi>5S+%mwZLfRix8!w1QiRfs?l2w*c!U)(F1(iMb{s4#8gK}l^Mq}1e3S`vEat9 z0LCHIZSFJGI@2~UJoUa1tSnf!iEtp&QKIPr$S@z-^-y%zRwIjYdPRo8oq0r{iG=?F` z&U=d?1CganHsRVGLHK_dnU?!-WB80MlxrMggTlyEE7QXGzf;FeAQ;ZvR3%+BiAub3 zt|={GP;6e;@-(BE!W;?}eYw+W*lJ?8(P0EP{QOUH9t36C8pRBy@5TT=aXTkpt481Vy5g zHzYc=sLGKR$ea!RBR%U!0ZfRB34I}>>RFmo?Lo>}%Nx9$6^1lSrTGI)+8$KB zM|PG?DMqf73fgM%OPRc?XV|X7)ILK9f)v@aky<(i;4qH4FuC4K-l;Pp45qe`$I8@K zmOmnfl&V8wnF~47(Fl zk^W@ZR^5E-cqFLars5K9#v0i!UK;)Uswm_18z1g<0)me@&Gunf|X zzeu*0G=bG=yavS^QlqgpWz7~tq+Q%~mz{H^F2@W}9xGT-q@~%Vd_ig8kHFG^u5gTz z{o)>)ip^?3)N6iOH5-Wzb0aWy%A7I49lD~cq%av7qg&yjv7D;&R`{28kOEP(xjK@! z8-gqIFjv&cZ0Pr*YD-ke9Vp7MyP-1;rl@C#&e;r#5fn~sl+g>`Avdt4%$+my;}8bb z&tU<~(rgn5W&9l62jbH1a8N8FgUyM9DG-`2PwCb%5{M0RX!y_bu1X^NSk>|=b|lrb z#0F=Dd1n&!4Hx8l$WHb*8uCvjPS&0Jvi{kjKg@EAb(TNjC0z zXMo#E1;dl1QVmt#w}b9*^DA+weu%WYH+x`u>)F8=?Up7BJ<_#g%jh)L${S7{i3hGR zQ;8%eN;JrVAk$unt8A{L^1A% zG++G|%o1d8K?jz@FD3>wXjd;4*o*qS#%}BW@MT!^i7Bx~#oC_6 zJOpn8XBD*>uq8FfTEki8La25ZId+YK-Xq4TeiDGzJ42|1qs7|RIcE~~x42{GKFrM+ z{pGdpnfwOcoRGaymimHQi%&Z`njPEZ@EPN9=C6u75TyZuyD4-=qk8n9L!_0rLjF=S zW(sp`l-%KQv+K^^=pPSQ{NXDtzv4VAOGu{Q|ByA`{4UciEh0wB3d#yB_|BwD2mlz~ zB64Uds~f9~X5x;8|nXvtxD3s`eVgHVul)HRiS3A#&g4YR?OH1g!2tb4u*VClg7Yh#A_)&LzZkb z_#hIMJQta!=2+)3>O2>6Y+htI2Oi{+1kWM_Sr;cl(-&)S2Xsm4J4P=b= zK|qD3N6)8S7e3@Wg>;_^tnUtkp6lL9m|ACZJ1wn04fh)j=P=RuAEeGkJv*(L_ zUN%ky5;K2C!h&rZn`P z(M6InZOAL1i#niXFz8Fc_4xRJ!yFLSHbISVIC5?|yluKrMq6X;G&(TM`&5RsZ3||w z8jS(M^p03XD_lVi3<^uug(f%F>{v}MlO@fNYYp=>swuxcFeEOprJjdf1`7k9H-@4l z7-9@0SmO~u7+(cKtcenTh3H(+w$!$80*FU{WAPgmkEs5K596j^6-#<+SwzE1_iT0p z#He{=@=V1A_m4R`B*$RD8|J=gNmPHLj5Ey$lLV1*%(+W3Y>7$q(nL)V={o>(kW@e7(UgP;%vcGCjgy!jFC(sW4O54tz?iGHFb_( z{_KYzzIhRYM|BXz#;$-R`41IjO7R3)QH`CMO;7<3m5(#;oHd0`Fh$+8XL+(=jfV1x zKTVCoVfB1@wN86y3%%E%EE;l{xhAgSVuo+7;A}`bL4l%xT{BTlk%fS%Wk`w4g6j_g zKnG1qKgi-#w&ccpO8mWbqbpEWx5s1%U!Pey@;!*f^(wkiDTP5XWtLLdbK#A!cvvJI zLmo+|fF&@1v@l~R+EK$*1c0Mh&FzA6-Lf)POPuPPtND;eDAu^3Pv|l>%q8~HX`uVq zTz`#yJQWNdo0@pt5}I#hwgZLh!u2WHkEN#%y*8{`hz0n^JEirnptk zQ{t8^VG$=OQedn@y}`H^zDZk@P$Q5{P0GZoGvuI!tz)bHiHl6tu8Uc`V{3PeVMmlT zvXAkk%qS+vZ=IL}KyeX3RJaaCah6nn1!KDl>S6!!=6>8hRrw`-|28n;sQVeB;7AH9 z)K=*TpJRA%;9d`A`!raT$PQS6>W2*aBQBIO=YgJ!j8Ava7qv`uJby$zAl&$T>MdFs zDNS|>jRr7uEcTd>SM10f;}N(lZ?MOBJ!a!BgFZa}eL;%JL_s00J)9#cEgt|xWu)d5 z_#RYj8Z_IL0v6wPb>j_3K5^MqJ6?o`e30*zVk&NLm5=wN0Yrt<*ouQx z3S}Eba4Vy~twpKmSr#|B$GGmr?%Or7pPaq(QAO^->gxRAqZ4)4>FZ>fVH$#JH=**C z663DAaO^9a>k;a}cmqV`V~;oIC;W;TW$m3;?_hJqm0Y}9u2Ft5_ex{9ktyoU@XQtU z2wQo;%^|o`xD(xAgbF~csa?7DV8kzrPuGou3 z!$`4kLm<5oDvQ;S2QWT+-NV;D(R@$nJ9n_v*8&v!30G=5zOtGdlSYX0X6y}OBOFX1 z0z!5(W#*COy1PEuVoA-}dCtmQq+WK~ecEi8|8NkF;fj4uor843vlz)XZ^lgShP$s6 z>Sod()N$d4&tCt;VDJ^~1YZON54j=I`3W|$D!u~Q0@9iSN@5E$18+v33%Q4p>u17MzGjqe|P7sVI1qfd^ zUUzgqR{H%I&{4QwV+1M_fssu8pz8mORC*Yse>UQTMgs^#mdvUT61K8wv^1l-pIfAQ zPPLt(I8MC)(4i|P>@Jk0!Sf>&y(~?`@d%_1IP~xS-1SFK7>p+k2w$JO?#RcWDqjVb z+#Nz+6<3C(F||HIgDi<5IQOmFyY&Z;RRchWj+)tX{N2&&Jk57mO4H<&E?1U@Oyja z8ichKMdJwZ8l@;&1#K~0|4^4c{*{kBaL7*Lb<%(gKa2COt9PF}EB#0D{!O({USQO3 zcjwybBu7HcHnqvk^X#R5dC;r$wTu{Q4+GQwUPw|7G}J^b*~-3^`s*YPhMnx|sRF_uP>L%nD`jQH@3ppOVfo&@ z;m!+xc>4Oz2QLBNFTtcP#-%%4GBnk^<);geQftU{R3Qw0jyEfiA@&e}`Z6eT%k-gm z)AIL!|IpfVR||iu2+XL({bEl=TuucbPS5&&Wq+tlxilQW{`Av-rWqeP^qnv{Z`<$9 zvh4wL_FyG1#9!{h;7`NoU$g}TZ<_B^#8Y|{;o~o$EpJ7^nn3iHlNB0U#&!>k#wtZ#A4_oEHzS{;>K~U1TGr5jYPusLlD~$DH=u4G)~dJ#kGw(ueE|I z?Neg|j@!4kKxzbN14v{I0de36krco{5+raCzkT*>JRkm!w(lx{4X{|^L%8$9wbr8m z1TUoutPqO+>8*CY;1s|M6mb~sO>8v(aZlET_&h#6Q)Bvi$l>YlCZOLH08f5uJP~vE zIRNlbjAgfA116+b0eV0v^RK`opvJsf=L_&1VI-2olORTchtG*HcKSA?4u^S#|5H=? z`q{_h*>ID$n+BlRmdfXGgUxt29zXlq*(bXH z9QJwJR{&2wGX2|F;}=1uBQ;EfV5)T@Sh*UA#X-yszz_^P9IEBOlyI(5#lc_Tzu{?$rlh-+iNd9r)G5 zf3@@U;a7mCa0Gb4DA`4m@s23sAVEz%0S&=`&Q>_H65H#E*0nyrHV4*@XMH}tteiT4H zbozAtnaAHD8{am7)O8S`M}g0O05BBQQLGCDFAGG9F974`;%uD33os-gYB5P20R{v) z0_@8}NQ)`-*ef`-y~v?YC0q)o;c&k)<>gYcTf3Bl?1jV_M?iJ3Ef%s2KxSIyl0#Qg z?7CVy=vV1n4&5yP_kW%`l^-~Bru#y8o7>w0kRl85djdWGe&94#u`X`{=M2ooKK5Gr z4|Jmo6LdZeFSe;lAL4U-`IZuH$J-qc`Icpf0I^W;A>La<4I@Tuh`h&gq@}6UeGpH8 zLvIp800vf4Gj-KOTw==;F*rS~Ka>Z4RQi-aMtI_&?`KY)q%)r$c{?KgmH`xau{;G) zJ%VvWM*x<UKQwlrlPQet%3NK0F<$a`6+;NFTkM4js(pZ$oIv8#4C>xI2jFort?hD0A!qK zL(C^kI6X{Y4{XoTzs~i6tVUh0VSOSPtC4Qy6o;BBeZDTr8v+~2LbJY*SKI?kgEp;{ zU0!l_n=o$pj{c8a_5o6IZ(Mdyp^qPZD@?p$D{RcmPXT~?01kRPPOkgbyO@@>i+$jc zjXd8|W+!3>07r@~z5r1u-Bgot72!4Zhd=hgj}(fq?piHq^GGC*({$li{^&Q->%&Ml zhGgn!XsPmIpX9kfFH&@CR8-POx-pT=>v}R0=YxU0zQbn#*HfHv5$vHKz}}a_R(Hcp zydegfn^K;_;N2Um}44h`rW)apa-I)=Jt;($-^8{p^%<@M1iNG$5+{wUDFXXXb z0+`D?bFg92hyvzNmgD&9h1ErRK^>Yd(S~Xzj1*-=bRG2~j6;UE(!&rVv?+!(Bp^~3 zGTNd0ge&l>`~%sjj9-+u2;IGD6>nIaZwNq`yT<{}5vaV;L{~tKW-P|sbm1Dr(e>ao z#o3)H1|l76fS2hwXS}D25@>O!n6~0#W}UJOijC#v=#`=uR%ALy17Z4bYBp%J7wv+O5cTg5tm71AD|$Bbp;c9U`qj-LSgUGW;6$p z&tK9Y%x-d@Kz-yaJpNteQ5&8K3p)Zj5x|#GkP*cm>E%kBPQ$ zMOffPz<`EvVu#ka8Hgew_HKJP0H)IVz<9_Zg1~0jSU5L017eLKqKh)nIfux`j#ev~ z3sXI3RxR06=qb*3Vo(j?RMsy`cc+~Bdi%>B2DAD91{Zz zig2Pc1b+@l;TR#p?|ULe#}G^>`}nI~G9EHAkzG~ZM+po4nFcyjev?^&c>WBy$47z1 z|G%DPzAk_er7z)52+xYUC)r-jy1MAP_?A)M7apgMDm-6oGLQxQDl7Y;r6s2L zjyw$z!0}tqlFlL(_P(i>f5G*$!ot3KZ$)%m5W0`yo17)+!b<&zgB|r-QI?R=PF?Ui z%uM*u^h)HIn$^E#@G?n}sBdqOdG~2^oAaQK#&f5=7^Z@KP^B$pt%XE2F3&6uY5bfap^cp7L z$61d<|BfCV2~3x$8MHNF3{YWF%A?A4z8QcgAIU!p5ROV$c|xFBU-$78cNvI0MxPL| zS#h0LbaUuMumM0$U<*3{QKjJ+W53D-EVH8!>k?OJDZo3ld&};TqyMzAuR352NOLht zxa<2r_%HgMuAj(aUOUpN8?$j8GHc}ERIyQRmX5J~>w$&3u^4^~rq316$J!Dhimd#7 z&Zd&e5uo+?EAiSBiL^Ku9lZxPqX?|*=6E0cl{eFSipZ#uMR2i_f2I+}XEAXUpkSL> z-v4Zbn&lV{MNH);Z?s{ zr-V3Uf!qc>LZlk-ACfYNH0r=e4bjGcsAGWp()B6!@cV`y-!I@J4w0YZV&L(hV+%$u zeC2lwo|pVRydEfz;cpd`p?>G{g4Q=tr*lmsSB;o zC0hcxWX~?$rs<07if}EDGFELrD$1Y~b3x_{E1J;7i)UbHeaoB^RFopUh&%~9A_WZv zg_f>d-_ds*r`zB6z3)BzzW4uV*brAa5y^mCI~CP~Iu~iW%8UNseINeee|_NH@45|x z0fsMg>_#L_C&t6!~4sXR_~+j(Pap zH32;Jsfu~pa-RUQ>}|2syk$`IYRu$k%lFBVL*sc~@${7`VH4wGqdQF_Ei;r2zgwc^ zW7)p*;BANh$@hIMhB6xq3*C%`HZNikhgdl?(5*3!!_nA2^25jfO}b?Sl7COgB%V6%bd&lV3cgA$WcOI5FutgNXBO9FF7%zsyGRMr#6pyZTV3>`?UP~NjBNNu*TMfYI zx^w4_+wZP097rFS-aOM34K&OPqFXZJ(h$T{dO z6IuX?O=5a%=;>LDY$`^=s3S++7t`~a?j$2PLx*HeR=zL=D|%udqf$OWbv(v68rZ~4 zHtTmto}B5nwn6Pm18f_C{}9q(latxQ-ZjNlTM=UH7=fTZ^|08HOiY(j%0cB zEanqW;LOl=v#@an&QYrF12&L0!P_{{zHfl4ZY!}d)ELybISUeqG^e1Elp!e*jwlqO zsizo9$%FZw8_FsYMeB1=0=S#?M74Q?;?jWW`*flYQx5~Os%tKYd1kp?gbi4x-HJ?> zrU^4?Pv|{WPpOcj$?v2eSszfA*(cO7=dC%&j`I&`ry%%y^>=T(@oBBi@UGF0^Tl_q z!h!F(Y*~3#Iglp_4au0mV;LMWSsb`L6i%&EzA%GgqmP#MJ(wo_PnoU8LY3SV=@kK{ z8AVP97{?4m$^HGz)ZQ=6Q@m2jWi>P)LokL}?OD-$zbOMJEC7*fALjBkoCScWI&x$Y?!9*rUU_*6-{Jn9>6+)|*Sm1wA6*id$kHG?3VH1? zD@R=nWh>2v&Ua)4IEV?jjy+APP@uq|PhIc&E?GC}aU@5}OYSVA&1ys=qu5%@4N9MYAoY&jo!+rS7Pv0F59_;0k zU%qT2%AfEWciy!KKk*ZHh?&3q%P()BXQ3ZQrUaX}2NRLE=qjm51=wqDj1gZI+_@77!Uuw0t!D`}|4z`pYe8~l>&q_F(I z4G^0zNgd0I56&}XGFMVWM~cOrL${IH-Wb8Pgt5;_;MO+VS*zdYSb4$$~Q29?aTN7(>kyo~5gMmNtBZtE7Zm&G? zYGpeaxV&tymzV3~Nc@KrCw9a8-nTu&=TQphS1PCajF?p}t-efNP&@x8O_@)VH zYj}qoTU!|@M8(uezPW5vR7bV^zzZ^BY(BQl+g7S3LE{`rZoT; zCJ9#UH=0hQ#U^`S4<;(r>Q!R^_|$)ken@2XKy8!ccFTHTzEeb`q@)H~Y=SsD>DTa1 z4WN|Tckb#jdd)G;nU}D( zB`t}@^ClPPCdRAL8QK!_mceVBnB!x*@&eJ5Pl!5_yf~?v#PN>uiD$NH8aWm(W+$Uq zC0tts8Es99!xh)KJ#^~z|?7e_uy|R>Gn?v)J zMS<>v)^G5&x4N{jp;I?BON+n_td$#&Ry>?HYWqub%{-H%On+9rCLOxOUZWuLnRm~E}#Z=Wlw{B*hNqKyZh&<RQe{wIwweHrlZqBoY|5{n^{kjU6N}jVxyjeEOeWMIWyyVy5`Tv zd9zh2?h?w`Ft$lsv?(9uPNIN__NDnVI@rjjj39mfUKOM&IirE*e9$_LZ$LG}Fz@gg zIT5+o!oFAo+C*W)g>=KmzZst1fEy)_7<#%^jpL1uf8VviKd6l5PzUBi5Q}aJ!%Dan0vQbsuL*X|ahzBQ8}} z*5MQy+lta0szr`kk1?t7NV9cN2MI?gX@R894CRzuYJB9l(i5md92=HYg^DW-M4tPNUp?;uMQyDNdUk3&GX^q zm)H40o554(dnB{Sa!|j=pDh5@tNk2Y>EGx(1Y87&YBv`uvP+$VB}STv6NAoplV(;@ zCp}|6OHiTz(`J>V4`Os3D5W2wufx@7b@K=rpj}%H6sdd?bs$DrAc+Z7`_x*Hscz6Y zI@V_1!py=iefclKg$t80(8YFpYYk>&;WvNneE7yU&ToL{!MQS2pdff=ssi_-NaOxm zzCZ~`wu_DUo>l!Rx}+$^(2CA({oeBDid(7!=eB|ix`iG8Owxnt0!}($;6wq2X~>Qi zi^ik4uHdj#r3pBFT?j^&Az`AN3F}0MRm%uCxr5OdGQXL)$d8o|T$&L!st$Z(#`(Ye z*FOs%`N(egp?`jBIE3k%+-5fc(jWivWr^*d{K@68cWd*=vQ`)!R`>R%O{j0f0Nn^w z6LRBVr!o!zwK_;lGejLDIedw%1vH&YA0@L}t3Lyjj~18#q%5C$q&|x;J|6rc1P8A< z`RYgfLcnni1{JmPxojo$P2uv3RJ4T3z@rN(o1x2vInGa*)lTV)4 z&cx}?j`^}LzPOUbz22s@OJM{&fK3Z@ik8^&(kV8xW6bPi^BIuO(jln|8w_L&TB{oy zjYM*03P|e2ubnw#C2n(#G)(d@;3A(4T5nrA`NAdHdNZcPl`G<+6?})3IIW0h^Z8xR zk{X+cp>+4v!cS&FA=QZ&TJW`HF~XG@=_@yac4M2dIbWV$>(T-W5Sk=xY4uW)<3sgA zQ3drQS1B2o>=$*Pt*2vz*>}wl`T|Dldt*Vg@03r7CcfO}eBjx$!_zqFwPrAaStz@p zk3f)CwGq`h{629+O$TzsE8+oLIz>NWkkLqSpvi_#>b1Noih(8U-=;W^YG#OZiVA%w zR&3e5A<|qYY+j`4YU)9OCh%xb#Kvyc>F($Hy1U+WpGf$^;~NjNNPC-+e!R9KaKu{$LWFwV`ReRcbT7MQ*^_k@1$@feAjHzwD&Se_=2OtgKA}v^HiXA>6 z?n%Q1-9mFb(4EqXbplF*61WgYRjUHez%oNPlfkUehQ@ zS!w~FFWT$&%5&;LU=ivMQ}j=wRij#}aF(VSl!kSf<4^ zYl}X>V)TQxla3G5;K@pPWsQ5SWTKNAf-w>8HGh_UismgO@4M?sUgP=d?#nd+lv5qk zS7YjYDrXj1rYA&ud*(oA5k-<786*+}jI69{M&i2#LaB~o)v+VhJLVnVug&~GB?{oI zBlb|;GgZZ)cA))()QE{LjwgXDG4`FJoT54XX|3=2_PhmQQp4A-TyS&sLL0I$c0UQn z2YL9b!t zWNmTNVF4AQ`>QHHQTO%6K*Td~?h9WBwZDpSis60zu=QP17}I0dy7x5~+Q7&8Mcm+7 z^PhOr)X)0Qf!(+<8{`_yU%wyH$DOogkSe@Sr`?0m6OAE>u1O!TV z5w!*mMocc8)_>5IkvMv2XRFjH%9i%+hH3_8Xd)cU)wuwHx$ctJ>jFq+dGd6944D1A zS0Y$Ng4KCZUVNqZI)4|fup{Uh1$8xrqzo*x_#I0>k|t`=jlK^3t(U@W-}{&01|SMo z8=UpAoqJw&5apMW={9%_=cLyL(}U7|y}2z>dQm_|U+!<7#0=gb_L+C_GiTo5847Q> zUYP4-Po2v55H zAMU;3JV|sVTxKf58^Y`bBwB>dPny^N{QO6-g>XqLUqjy*OANq(fgt3p;)XS!{qIz z5vl&ilB031PPO}+o@*1`_TBo+btMJN9Ce@`I<^S1yoo8bg*m|%)-|^Ev!O5mCE}*r zhvpmp{+TDze|$51(wm(i->{@dAcZg44F}T~43C0`X3`;pjiQXmLOYTO9BnA1g`8+I zgobACl7@9vew%EHSAM_oU8}}Y71?IBKA(U9T^HoA55C^b(yt8b*gmvDI?ln9wGL*L z%{r&Seck>=aNu;ff$dEJbP%5d6F-UzzeJ0wMx{=ky#dCBdbDZ--34fIF4F5{5mVY4 ztV07kg4eBKJ+a<^X`konsW7kBY=ua51L)*SBsL1q8Kx(?EgGl=%>A%HRJ7k4ZK6Yj2r-HljqgctP7H2MH9 zkQHEKz7&_udTxT&CQe&HV{9dP4qR>QYt{WesZMb7Wv0?-ZMPH)SGg}_`!Hxw5mMIb zt2J!}rV$`@p66D){1TMY$KJ}*i*6XeO%QRz7YxKvO|;E`(1E$d{gf*M$yjN9+w5UTjex1~T5- z$ca%{XltK~D@EBPLk#R+V&C5C^RwPoJkTCK24njHUj;t-;=cKTV_KV*wNl&`+QhNi z)7)75JJv%V`ir}6d+#fEq($!b7}yQt5jT!)E^FBIY^F=Y>N~%A&kM^J4_@TdX@?B7 zyCBgrNVLR*62Img&!Jl%*P-0+hplw_tv)wvqq%QygNyTJu;jD0-d4bkzRuX!*YaT# zEMv9R?zV!7&&?Y75W6CaT=g8S+V3tGVO`g#$BL;$uG$n{s~&50JXWWJIr9rUqmrkz zxPiq)Jz(@IX*~w2_k?P{PRq@fS4oloj=MhgcAxzFjw4cgwoLqQT8!+=<=a}@pvRo} z8eBfKZ3b}im5@whD@dt&xR5^#R2gQj+1aF^O>SGol+u5!QPNzw&qZ@qQS(;GpO>Y? zx=n6*WT6SM-Wix)2O)p%jh+c}Bip`&^!8M@@Fj@tkLj5Swt~qXc^7;Ew=W^J#fy5D zmY$o%6-HEcRYl)SRTtNNL5mDj0U&?H%PQmxCacWT6l8Bze=1<=RaU~pbkcMx7g@9i z(e@taiiN*{k^6W1@d(g;%?qD8ReuV-`68HgwD_uaTfE#BD{`HZJ^m?aDMiuJonViU zE*=JY(VP}h__N1cgllM%-NE-rv9*#l%?*i(QIked51$Q+MmkStr5Bi0`Fr;e+AFt{ zkJO)qIQ}Hqb+l*|d)1;oTks&!&3c5i7V6Yu0mii9JzMxuTCM9m32N0ktyaY+c#@Um z^}hIQ&j7V2m)i=+ zs+>(Vf?7yn7pUtZwkjjSU^}&_(Sq(0=W-PTua{*>R{2ceUWF<8DwD)F>+$e64M1+P z2k7VN)AeDn>Bn&7)74jfdPO=HzH5rk+~LwD$*bpoyz(G;ful<8LTuHH!NF5SP-hh` zA-;z5o`nPdl_#FSYY^P~H-B)&c2fatnV4MRQ-B0UT(_aJaP<`3q!g*;8` z?J4>VGkRV`n`Ubqyrwv&b2#(s7=~xYv3uspC&MfIn(}^w?YncAYiwlaCq5Al?d*gH z;OU$IiH-*Q-(hg!&oO*`(2Itwp)s6uLOzH692oa)e0UB4;OX2*@WZ6G#H*x!0 X4p0ZN4vK&*4kV=WxmC`URk|>eL#zo<_Y-%(sM|NBH0Ru(q%0TN>w(OX@ zO6s_RjW#j*KngTa(^`tyIEd90EnJJFV&!4PfhA{^#1UXQw&@2Y@wI#Jotg8<_x)#P z?=CGxBt<0-prJ-{_daIM`Og1;|8qvESGHHSSGHHS%ipy6bJ$W!!*$az2CX&UPx+-D zKKnD@jCz^3e)5`gQf7|OB5<9=Ehu0aezku5?@cyW`Pi}Q})$EukLAhY! z+rQJlulSz&bCT$nylq?2=bflbPL9ez7V_u)XD3o7VLT|Ly@%GagAj=Uh=xt_UClS8#l*{R+xE{NLKD zK8i_klAPSp0fQ|t@^_Auy|}NAfAtmPHz_!0TQyP_8H-Yg>{45f=$r z#e4jV62WV&%zlJjOY5YI*r+8dT{B!GS<#ff2R*)&b-~ zpMrm^im31{09@n=zZ~R5CZy?=ae2M{bF|=v$S(ggKtYG|y<8 zp3qS}fl+?;?|tm&pWx>Z97s+EXSG+O!Kz&eV6K#eh;&dY)>akuM*Y|OzkSbF+`hv` z$J;Q{zoS!JQXvI=J%V*3e!?SBh$>}zz%MnKL0%caq%}>gNyZwyyAic|6z1oDU(XgU+QGA|wMq1WX;^L;?Xo1eDmHAQNRCkrtW+AOV;dqihm+(KZ-kadgTW z2Y|2}XLR}veEFyRorjLAE3my}K#GTseYcP1Lpp|A0Yaxj>=b~|+yM&S=j0(B$~%03 z|3cdG!vP-wQoVSXj7=0x!E}K~AS93u00b#9dAGX2dqpHT#uUn#B3boofcIVM&O=YD zm#|$vAir{Kw`%lVnAkm-c&mH>2&y$PW>5r-xh1fV2MAQYv;DrW%#q(hq`KvD<{04kNW1f_)Xen9=$!F$zZ zZkGqh1IPA5@BbGj_gy-u1^~1=gbtH#EI?2mfTY;LFNc)G*h@{c6o(jtUYJ(;&{ID& zQ+Yi*@U5>co=l(K|9d3WNFp)h5KGCh_(BmKfxr$RqP9+eu%_Puj?rJmY2I)-(&E&m zZohQwZD4}?Fv$`2F~Kk~HOeO(2}*2j(2$nsAuXPgq6kt5K`SBEXu&Q{jj}`}wbQ*9 zObYMYZX8Lg+S+IViNaI?3KXXRH-S`fbhwUH1++`92k1Rsdq~r(wKcz;9y;~`b;qHf zRhO_`5+LTG)F~x)-9Z96bKr$dDZHm4HXFw_dLLey7)6|-*J^=v6 zD%EOBGIoUZ8rZrn_^_eLDzG`mh(th2f(6VDxIii*fPk9BSU^=N838)waryvNB6C;x z{lC)>9NQi5JhXPPbG&#!KKjV}RTlw9nqb5YLEvjG5)xZ{){3{XT;ZmI=$OGcs#|6OPeJms||sH z^7H5^%G?VWUxj6N5C_;(UBy}rzKhyYnUt-rik)qnv7%LllsK@5A~+V;FqY=FfP2^B z-NFIzkTg_9i@Lz%LlPm2bnYY1h)jbr?^X{!qSTN5^%n)jz9O z=^-WXR7%PmOnQI{MNL*o2CpC|E?_M!F{ER!Q)%9#K6>nF^_D~TUpgQ#t>A)tR92BG zkI+gU8{>P`86*N=;MiaojSU{&X%ax7GM$0ixJ31ae)|s2CIIPTtW@P|SeobKkt(Ul zwCy$=JyEcT3nf_=rv{6bWkJ8DgXCC~;C~QdB{7nc5Q(@&d4oD>==%lwGT1yB$lQmy zop>RW{DOdB#r{7gJmTbWNl1d2)+wX~sshQNs&x1)b4X)Jsxjcb(0WLW3!TT>a26of zt~0UYDtdqie=LPMF7B={pRKL;SIH~3slYLQ8UhwPI9Txj9&rxK>;j3@xdP)UQsG20 zAY5gnIT9@)aWDkhiVK)YH_-@ewBK`}=c8~e|Aut;Iu_dM+tTT{0arf{QlO%(w!6!b@&1KFO(g9fmUO|bs z3-2c0lp1pvu6FN>141t}#`h8on$+xt(i>G%NFODG>On9j7N8J_h@p0aVt@@Wbjo2O4G(~TikaZS#fpASx(ANi$Kkkr_D=-_ zzx$A;8KrLl57Y=KiKN-mAxpw3Vo}88LRCnxl$fRn`8x)Frsf_yue+|by7f?@U;@=9 z#0taJ=jP^yc>ltrbY+UBPE%|xW>MRUD~z#%D?!VuC?aD%*kCv}kO0vP?``ahJCG1Y z$uKd9IwR8vOdn`UM}*pGvW~-20hsh*jNyl07?1~!9mJRawz%W~LsRTUI>ZwNI0)yk zlR%SLm`t)(d6-iWEF=U@R|9hiGVNOKm8NxRIyepis)I94y)xHd^E*F#HV1SxD}1pn zBLZQ#YLA*snD$@**I{C=1S(z?5Ja#xmH?20SL!x73JB&MYO)0!RvHwE5L8K@A3iOF z3H}QagSCnd(R2gr1n###pdNbkc6G;XC!QA&NXPrcIv{F=o5T1(B3LY_>{tr`0;ekn zbC3jhrZLdh0C*i#rE91{z(c%N9i}bVFVb-vnJLCK@s%FO)9J?V>gj^Uu&>tX#HCD< zC|SC>Q0K?6mPR+EL;C94(XKmNyNFZ?6AAbq_?6j5&^Ls!Rb&lg#3g|wFpq$9Si1d+ z@lQ~2ev^$ssZK4Oux_fFZd!p?s?avJos36nvvJ*cGM6?cMLaiY)vIpJ4%4i3!Pf*s zB*u)s$EVj{wJVM%b(l=&6r?VWrz5D5>ZVicTkNlgQ6K1N(fl^F6J!g8Pd*Yw_7nh84cnyHq*8GT)+yznO5AqQo0vrX?nJ8Mq zEf7Oy!a8QgFegktv<1FLueAUeNKrHnU=$OGdDk{qjhe0wUz=X#zcl^I!d>6 z06i`-=Y?J6Ju3Oz@~Gs!*6jHwPpJETyhNuje~1fs@VclGQ4L%HAzNm|Ff89<6>(7obKL-p)V9`)r=>mLHQ{yj$zA{QUv+8z zM-iegGRbbpgOW0oqJvZ;5aDXorxA1TYnI08x)1-6d)J4pYJRf{Cx78J=l}C3J^Wk) zS8tI)ASfciGlOusNvEheSTEBut5!uMDihNKlx{@cK+TAXi1bUqnCRsqN=CYhbG{81 zyis(0QS)Z7Y62I4Bwp)is!hHV5GOfk>bM(@9-1{VWm%wmdT(+;mwYTD}i zCt?5hf30}i9oL@uAHP#{^ZK0Gg!92%Ggu8Dz}?z@nDYK%x6=1!Au5W{RhO(xAeJ}josw6AvO5O-AHXR>M_`w5YRewD~&)kv7lgIX7`lcYd! z^d6KPdw#*7@jiSom)}?J>etli>upjSO*!I1w7!m3u1y~Y^X@>aGB!AcAxaJ=5{NEK zJ{MWBBocYldC~Kcg*15S$i0|bA}zWQ4ZkQ70?E>H0;c;|abpmLG11e+1sIcPZ|M|6 zihxIl7(7rqQrPTt(R8KVYzzAhPd>;SkxpV!5O(Gih00<7M&s3Io;o+!-&x735BOx| zNVvG{wTtI`ICDmy2~{@^$#&Dim|eRNQbqbsNJGPY!vrG@1f>{Sgar+Zw<${i7v8NV zHE_`>08D&GX55f%yB*PEy2U6_>Lg#n7YGb=I!S^iCuxHGOZh^QonpSUiylUS7e=(u zF|rN2=89PR^M28u^2`#_g5=(@T%%-k(dAm55QYRBlz@KfeKA7ozV%GplC5_+%uThl za0=Pm-EIROFmedRX44=iY0HWkZiL2=uwaq6#EM~&5njhK&p{+2@n6X0)S*~rWZrNE zZlN1+OUmj(Af&36MTx7gY2GDM&fuAhqH!U^PvE#P4n+_fnDeMQ*5`cJjn8$Xrtx(( zjcUB93bXltb#F?=f*85Jh~E?|j$J?_D8qMfOoIhtz&3ogr~TdE>Z+s{H=Ye~a}$=O z!8PfTbj&!*Sn$(exp+Ks*pfDioNUwsC|vX)fP`FDWxZLlDf_6YOFGwAx6*Kt8FGml z1gc_j*gd7}-1mipU7Uq0+sq8bSzSASB98mCI(plg^ zL^Rt<7zIgPNzviDu}H$efi5Eh59B=XHMp=-WbCRM^);57C>18Vp|mnaTy-%siq?k_ zMa*h+`+>2#^@eNIz#g%$hi^{(xlesA(@a%IJ@IG5-r}10^)Q7aG7n~BC9De-Jc$;O zZ?LRi2&lwba|Po2r?|bUrHySytrhlEjA~vX+P}oX!H4q|U)#Qin=cS=P~}u&)~)VcldGy(A3|WH>Jw zO=G0JMSzgklp5|vBHe^AK-7gh0cj{DP@M@RWsKJo0D_dVoO2Ul%(SUZhw4VPFhVV2 z1Q19TB5x!IRCKg}gzBCph`R4z<7a)ll2I9ne$H|{!`VKOsa6!b{~(zRlJs;*;~Nbp zgwW<68zu%RIfyo4>Lv}i3WG#`5K0e7g5vV}Z30H_^ z=|Q2|5Qs7M4M@qP=Y$f3ZI)hJG-<(YG?+5#VUd*Y;J0h(N;5(1C~R-!AeD`Ifkh@| zKDu`T^gwU2L}y8_U(7&c<;Yz-MoV_uuwextFk_9^J`1dc1LCj(juPUjt*kvkWeQ}o zCf=BF+>O*wg>#N1!60A&2vbm}L{hT4P+}yYgNbc3AT+TVlpv%^V31l7P(Z9CC`?^AQ>6?s#)J7|ycS^^($6ek7!mVcLF709u{Gxmqke)dNslw^Q93hE z5={gvh+)i8dJhuB5}|e9tbqc)dXyDZ!G%JW zUVvd!jg_teEI*s{EZGY4k`ZZ>I~$pd&JKZq_Bi~kctVL{NDh*^#+;;)xG`|aEWX zv+A1^=^p1WM63@Vc3E zX>*QMJkxs}znVmkG>bV-#7GfcwnOS7=0;fvg(@L@NI<9p> z5><5bm3K>3o0clgb=ity8P^PX)IRCcn_mJV>MahNmPLh8$11VjRH%_D^@hEwK0BT- zJhD#XwkUjA7pkgo4P8|z@S%2&1p-r*a8ImoT!A?iMoV97LE6m{Bht3u#iK+V!SB5p=^5$@@2L@7LiSE(G@JtB0Je(b`F$QB4-wu2x}oMp+S<2 zP8y048cs=Jq|G+R5km*Jo~e(@)#=hNZOD79AI_P$eYU5uiv3w^V(R4%cfyzbla>T;k!ut7S6*Bt!x{ zA_mn^R1ZpqAgs*LC~Gn}KpuG0?J5CM2{3D2l~s$unZngws;aRnss=|zm2sjnIpL-gM{;KKMmYr-)G!5fe3$lL#0% z5yV-<6QWnb{DHg@y=WXw37@G_6$a?4y1{^;&ZCyuQ^3*t8rl5X-VY&n^hf@U^a@7n zWG_*ltON`I;cD!ans+sFmUFc(cGnYJq@j8i0LEr8Fmbqo2|LDu@xk12>?ODdYEHGs z_>CkZDD5su(=QutL}Gq%=oOjOc2jy76Z{v<=)nH5_p<=a7mBI^DrCb!ERZh)00HGV zHe4ha7U0Hol;m$|oKSy2ajK@n$R?6o6*$))RpQvELu^3b&3Ec!#wLL{1GLKq-4>sfEARLV2E^pyJ&q%st~{^ z*kC2izg%#eJ~F^C1LV#_$Mpk`JciZ&tJ3)vkaV)lxHB)Q*;Ns&9O-T{lwj?U$)dn| zAO)m^-SyG}+GmF|CanMpPHB{Y6A1)?p-RaO1XLsasqH-?JF5S% z5clfj|DROuY;JR8wF{`0hG0m223|2Y0YW7Srf2hcDDI*3c040~ma3bjq^Gx2@ z*-I9)bDa9utZj6i06@+dIwWXyz~pRgWx`K4h7po;9%fcq2l8ZpJAG7=Dy$q;$3ZfT zsqu}G2QUNz{u!iNl_Eg|g{|P^MJr+EPj4UD&KsHUxa|aV@Ugyc9LV#>B7V?I=qN94 zRSic-P)B;9#)^yr+#;+<9UVm)e0cAMe1}1=hn6SRJSi@O@Sy|%xG-eAY7NoG;0g}V z)bv9TO4OkOsp3epX0|fu{Vv{4>_HNXllHy!4eF_DYqj7gzR<=Y9DD_7bIFE$xuT=YPKBlC<`ajlYvmOn1(k7R5CAe3vVa6VEg7CGw4%# z@c0KnOm{Q$m}@m`nAMVWR#u9*iH4o&WD5s6kV2X6AonJAld`D_m49}mo8-2;?gNix zw|&SvOJ+|k-S}GdcE;+Vo3@|iLSXQ ziU4t89IcJv_NBt=PBdoD6U zC6;I`?`vXPk7h%gMQYc0w%~)=k;ciSs%LY{$!5v%4?*4xuIt}=n`)+Q?oHk*expQq zdU7@%`zqA3M3h^&$o4xDs;Gc1MS8P3R8$+P3nhm>5`1ZK5%?PXLZH6-Lif}>KOnTp zzx)`g_06XNK`nV8&2pbfxkO?mZN-pKe9*vlIC7$6sl_yG)~y`9++as$epb%xjg3f# z5$iGlG5}^4vDgd6&hfApbFtbJtLNr$83+uA<7mt($_fgP-J zC=vxd77kJBbE^Ok2dq7ZVaiI2Ae=uFdJu??`zl;tzk$vzHWE0HY(g}*e=7N1<1j!t?Vb{Gu z4hQaQ7uZ&X1p}3!7=aoET(j*H+uF80Jz~4(Hv7)Zq2t#e4RwHvB7r9yG^TLj1~7+1 zr%dj-gA-YqLQHHe?*SN$@Pik71JT7iVJ7>NcmD9bNd4VMazaEfmr64Sww}YPj6i5} z(A5!N<9#?sZUHMZ2OY1U{-f@x$Qu%SA4J>PZu)H6_N4QL`|!JSXZ>?0zYxwhi<``3X!5r~ywgg4**Q|cl&tuAfT=A)l{Cl0)Aq~;w}C~mij zZQtzs@Ona5NTBp z`SA}%vgne{17Y(vRk@Lfi5>~g+;Gn>13ZTOR2ev8zhAW7%Jd)o&8Jfy_{C21q5;`@ zAkrGne$&c|escL}y7$IU{v;-TPm&&Z7Dqy-ePYiUK@ea77;jhQ<}0ifACwM<fR6JwT7ozg%3Pv3JJoT2yPOSkHLCpRS{u+d3NM985OAxu_O>a9_HVW|+xlOdu!1Hk0epUro71E$|_UGr}bKl}?PmY4Gr zY2^xwbzUAK&j@*PMZy@h2z zkReGnV8X#l15XNl&kFB$Npb^}wCAu-(qy#dE~wmIlf<<)-DtAu2mIlp)?`io!Mw)L!#{90{)%+C7ysy=l}={s*YppSgt+jgHB z-FVnXa~NOyK_Ixmz)&2~DBU@1giHM?Q(s+Hxr2taVyR6_;Vemet~w7X`#<=?qgOxo zhY$brkKJ{e&*fQPKc1GCIq6ja1HzGp9>&Xg9M2`I%=SB<20r0Km+rV@IjyX$Yd$k* z`P4yu@`mI3+Rv+W@&=_(KenuY?e4Xkm91|y!rU9@u^R}dsRIYpwV(e?THm`O6Q!Emw7w3KUrtAktZsR7 zm-~Q~OO_CoEl%%i?>q}1e?uvefkIM_tApx>8_sJ^;NoOk0b2)%~ zliE-~SHUYs@b{X^&mI%9#j43enLxVy?s4olKyrrjoIb7eo;_T}1B#Q*$Jt*5QXW^u zb3!%#6F~m)AJ3A(M|$ykDnEZ{OMM4Iz1(LKT^1nQf4lv8VtF8{Unr>3(b;p$vIRJ9 zPM*vXBaiCBfBCkZ<7$1cN|dVn?SorS@>*Rz7*|$$soO!E{4AyILa}X;F3B1Drb)e& zZM(E^?wDHBwhIAyTOdkw%NH>kIb;>pR5~7z5 z?(EgWQT0SNkQ#JcbMSop-)w@b+s?2of9KUds&+mPaamrGALz31T=F;0C+gW-xNXly z{MOwrcv2?clE38%nLD3+DerCnd+UjsYTJ`CFL(l{dYQJD?Zg*uX_ouAs0YPfzyVuf ziQ1wF{jDz*7rUjMPvPDEp4uh_uWYYu--6qp0IA@Xkqca|VgLXD07*qoM6N<$g0aef ALjV8( literal 0 HcmV?d00001 diff --git a/apps/falling/public/images/bubble-wine.png b/apps/falling/public/images/bubble-wine.png new file mode 100644 index 0000000000000000000000000000000000000000..46498687baff63968e740c39eee360bb5afccdee GIT binary patch literal 13488 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 emm1(RZ~qUf1(!5PQDxl#0000 { + const [isFirstTouch, setIsFirstTouch] = useState(false); + const { addBall, boxRef, canvasRef } = useStackBall(); + + useEffect(() => { + const addItem = (event: any) => { + if (!isFirstTouch) { + setIsFirstTouch(true); + return; + } + + if (event.detail.data === undefined) { + throw new Error('event.detail.data is undefined'); + } + + const { image, size } = drinkImage[event.detail.data as drinks]; + addBall(image, size); + + window.sulsulBridge.onAddBallSuccess(event.detail.data as drinks); + }; + window.addEventListener('addBall', addItem); + + return () => { + window.removeEventListener('addBall', addItem); + }; + }, [addBall, isFirstTouch]); + + return ( +

+ +
+ ); +}; diff --git a/apps/falling/src/app/constants/drinks.ts b/apps/falling/src/app/constants/drinks.ts new file mode 100644 index 0000000..9855f47 --- /dev/null +++ b/apps/falling/src/app/constants/drinks.ts @@ -0,0 +1,24 @@ +export const drinkImage = { + 소주: { + image: '/images/bubble-soju.png', + size: 80, + }, + 맥주: { + image: '/images/bubble-beer.png', + size: 100, + }, + 와인: { + image: '/images/bubble-wine.png', + size: 92, + }, + 고량주: { + image: '/images/bubble-goryanju.png', + size: 68, + }, + 위스키: { + image: '/images/bubble-whisky.png', + size: 68, + }, +} as const; + +export type drinks = keyof typeof drinkImage; diff --git a/apps/falling/src/app/layout.tsx b/apps/falling/src/app/layout.tsx index 2d68a84..6af4fe0 100644 --- a/apps/falling/src/app/layout.tsx +++ b/apps/falling/src/app/layout.tsx @@ -7,10 +7,17 @@ import { SuspensiveConfigs, SuspensiveProvider } from '@suspensive/react'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import { Inter } from 'next/font/google'; +import { AndroidWebviewProvider } from '~/contexts/androidWeview'; import RootStyleRegistry from '../../emotion'; import './globals.css'; +declare global { + interface Window { + sulsulBridge: any; + } +} + const queryClient = new QueryClient({ defaultOptions: { queries: { @@ -34,16 +41,18 @@ export default function RootLayout({ children }: { children: React.ReactNode }) return ( - - - - - {children} - - - - - + + + + + + {children} + + + + + + ); diff --git a/apps/falling/src/app/page.tsx b/apps/falling/src/app/page.tsx index 7a58bf6..ff91014 100644 --- a/apps/falling/src/app/page.tsx +++ b/apps/falling/src/app/page.tsx @@ -1,5 +1,7 @@ 'use client'; +import { Falling } from './components/Falling'; + export default function Home() { - return
explore amplify test
; + return ; } diff --git a/apps/falling/src/contexts/androidWeview/index.tsx b/apps/falling/src/contexts/androidWeview/index.tsx new file mode 100644 index 0000000..9810949 --- /dev/null +++ b/apps/falling/src/contexts/androidWeview/index.tsx @@ -0,0 +1,72 @@ +import { + createContext, + PropsWithChildren, + ReactNode, + Suspense, + useContext, + useEffect, + useState, +} from 'react'; + +const AndroidWebviewContext = createContext(null); +export const AndroidWebviewProvider = (props: PropsWithChildren) => { + const [androidWebview, setAndroidWebview] = useState(null); + useEffect(() => { + if ((window as any).android) { + setAndroidWebview((window as any).android); + } + }, []); + return ; +}; + +export const AndroidWebviewGuaranteed = ({ + render, + fallback, +}: { + render: (androidWebview: AndroidWebview) => ReactNode; + fallback?: ReactNode; +}) => { + const androidWebviewContextValue = useContext(AndroidWebviewContext); + + if (androidWebviewContextValue === null) { + return <>{fallback}; + } + const androidWebview = androidWebviewContextValue; + return <>{render(androidWebview)}; +}; + +interface AndroidWebview { + showToastMessage(): void; +} + +export const useAndroidWebview = (): AndroidWebview => { + const androidWebviewContextValue = useContext(AndroidWebviewContext); + + if (androidWebviewContextValue === null) { + throw new Promise(() => {}); + } + + return androidWebviewContextValue; +}; + +export const Comp = () => { + return ( + <> + hihihih jijojooj + loading...}> + + + } + /> + + ); +}; + +const AndroidWebviewUser = () => { + const androidWebview = useAndroidWebview(); + + const handleClick = () => androidWebview.showToastMessage(); + + return ; +}; diff --git a/apps/onboarding/.eslintrc.js b/apps/onboarding/.eslintrc.js index a01a20e..907cb2a 100644 --- a/apps/onboarding/.eslintrc.js +++ b/apps/onboarding/.eslintrc.js @@ -1,4 +1,7 @@ module.exports = { root: true, extends: ['@sulsul/eslint-config/react-ts-noimport', 'plugin:@next/next/recommended'], + rules: { + 'react/no-unknown-property': ['error', { ignore: ['css'] }], + }, }; diff --git a/apps/onboarding/emotion.tsx b/apps/onboarding/emotion.tsx deleted file mode 100644 index 521f6a2..0000000 --- a/apps/onboarding/emotion.tsx +++ /dev/null @@ -1,26 +0,0 @@ -'use client'; - -import { useState } from 'react'; -import createCache from '@emotion/cache'; -import { CacheProvider } from '@emotion/react'; -import { useServerInsertedHTML } from 'next/navigation'; - -export default function RootStyleRegistry({ children }: { children: JSX.Element }) { - const [cache] = useState(() => { - const cache = createCache({ key: 'css' }); - cache.compat = true; - return cache; - }); - - useServerInsertedHTML(() => ( -