From f8068ba54c12fe870603b45512a337e800bb29ec Mon Sep 17 00:00:00 2001 From: Local Server Date: Mon, 19 Jan 2026 01:17:43 -0600 Subject: [PATCH] webupdate --- backend/routes/admin.js | 14 +- backend/routes/public.js | 9 +- backend/server.js | 34 +- config/nginx-skyartshop-secured.conf | 4 +- website/admin/blog.html | 1 + website/admin/customers.html | 1 + website/admin/dashboard-example.html | 1 + website/admin/dashboard.html | 2 +- website/admin/favicon.png | Bin 0 -> 26017 bytes website/admin/homepage.html | 2 +- website/admin/login.html | 1 + website/admin/logout-debug.html | 1 + website/admin/media-library-old.html | 2 +- website/admin/media-library.html | 2 +- website/admin/menu-old.html | 1 + website/admin/menu.html | 1 + website/admin/pages-old.html | 1 + website/admin/pages.html | 1 + website/admin/portfolio.html | 1 + website/admin/products.html | 1 + website/admin/settings-old.html | 1 + website/admin/settings.html | 10 +- website/admin/team-members.html | 1 + website/admin/test-all-logout.html | 1 + website/admin/test-inline-logout.html | 1 + website/admin/test-logout-click.html | 1 + website/admin/test-logout-fix.html | 1 + website/admin/test-logout-simple.html | 1 + website/admin/test-logout.html | 1 + website/admin/test-notifications.html | 1 + website/admin/test-products-button.html | 1 + website/admin/test-toast.html | 1 + website/admin/test-user-api.html | 1 + website/admin/users.html | 1 + website/assets/css/modern-theme.css | 19 +- website/public/about.html | 136 ++++- website/public/account.html | 1 + website/public/assets/css/mobile-fixes.css | 591 +++++++++++++++++---- website/public/assets/css/modern-theme.css | 47 +- website/public/assets/js/modern-theme.js | 44 ++ website/public/blog.html | 35 +- website/public/checkout.html | 86 ++- website/public/contact.html | 350 ++++++++++-- website/public/faq-old.html | 1 + website/public/faq.html | 29 +- website/public/favicon.png | Bin 0 -> 26017 bytes website/public/home.html | 143 ++++- website/public/index.html | 1 + website/public/logo-preview.html | 1 + website/public/page.html | 1 + website/public/portfolio.html | 35 +- website/public/privacy-old.html | 1 + website/public/privacy.html | 100 +++- website/public/product.html | 163 +++++- website/public/returns-old.html | 1 + website/public/returns.html | 88 ++- website/public/safeguard-tests.html | 1 + website/public/shipping-info-old.html | 1 + website/public/shipping-info.html | 114 +++- website/public/shop.html | 588 +++++++++++++++----- website/public/signin.html | 1 + website/public/signup.html | 1 + website/public/sticky-test-inline.html | 1 + website/public/test-sticky-navbar.html | 1 + website/public/test-sticky.html | 1 + 65 files changed, 2165 insertions(+), 520 deletions(-) create mode 100644 website/admin/favicon.png create mode 100644 website/public/favicon.png diff --git a/backend/routes/admin.js b/backend/routes/admin.js index e1b16fc..f52a4cf 100644 --- a/backend/routes/admin.js +++ b/backend/routes/admin.js @@ -891,12 +891,22 @@ const settingsHandler = (key) => ({ sendSuccess(res, { settings }); }), post: asyncHandler(async (req, res) => { - const settings = req.body; + const newSettings = req.body; + // Get existing settings first and merge + const existingResult = await query( + "SELECT settings FROM site_settings WHERE key = $1", + [key], + ); + const existingSettings = + existingResult.rows.length > 0 ? existingResult.rows[0].settings : {}; + // Merge new settings with existing (new settings overwrite existing for same keys) + const mergedSettings = { ...existingSettings, ...newSettings }; + await query( `INSERT INTO site_settings (key, settings, updatedat) VALUES ($1, $2, NOW()) ON CONFLICT (key) DO UPDATE SET settings = $2, updatedat = NOW()`, - [key, JSON.stringify(settings)], + [key, JSON.stringify(mergedSettings)], ); sendSuccess(res, { message: `${key} settings saved successfully` }); }), diff --git a/backend/routes/public.js b/backend/routes/public.js index 613e7ce..9d8f7b3 100644 --- a/backend/routes/public.js +++ b/backend/routes/public.js @@ -83,12 +83,15 @@ router.get( }), ); -// Get site settings +// Get site settings (from site_settings table with key='general') router.get( "/settings", asyncHandler(async (req, res) => { - const result = await query("SELECT * FROM sitesettings LIMIT 1"); - sendSuccess(res, { settings: result.rows[0] || {} }); + const result = await query( + "SELECT settings FROM site_settings WHERE key = 'general'", + ); + const settings = result.rows.length > 0 ? result.rows[0].settings : {}; + sendSuccess(res, settings); }), ); diff --git a/backend/server.js b/backend/server.js index a9943ad..f0cb4bc 100644 --- a/backend/server.js +++ b/backend/server.js @@ -64,6 +64,12 @@ app.use( ], connectSrc: ["'self'", "https://cdn.jsdelivr.net"], objectSrc: ["'none'"], + frameSrc: [ + "'self'", + "https://www.google.com", + "https://maps.google.com", + "https://www.openstreetmap.org", + ], upgradeInsecureRequests: !isDevelopment() ? [] : null, }, }, @@ -72,11 +78,11 @@ app.use( includeSubDomains: true, preload: true, }, - frameguard: { action: "deny" }, + frameguard: { action: "sameorigin" }, xssFilter: true, noSniff: true, referrerPolicy: { policy: "strict-origin-when-cross-origin" }, - }) + }), ); // CORS configuration @@ -85,7 +91,7 @@ if (process.env.CORS_ORIGIN) { cors({ origin: process.env.CORS_ORIGIN.split(","), credentials: true, - }) + }), ); } @@ -95,7 +101,7 @@ app.set("trust proxy", 1); // Body parsers app.use(express.json({ limit: BODY_PARSER_LIMITS.JSON })); app.use( - express.urlencoded({ extended: true, limit: BODY_PARSER_LIMITS.URLENCODED }) + express.urlencoded({ extended: true, limit: BODY_PARSER_LIMITS.URLENCODED }), ); // Fallback middleware for missing product images @@ -105,7 +111,7 @@ const productImageFallback = (req, res, next) => { "assets", "images", "products", - req.path + req.path, ); if (fs.existsSync(imagePath)) { @@ -117,7 +123,7 @@ const productImageFallback = (req, res, next) => { "assets", "images", "products", - "placeholder.jpg" + "placeholder.jpg", ); logger.debug("Serving placeholder image", { requested: req.path }); res.sendFile(placeholderPath); @@ -150,7 +156,7 @@ app.use( res.setHeader("Cache-Control", "public, max-age=86400"); // 1 day default } }, - }) + }), ); app.use( "/assets", @@ -172,7 +178,7 @@ app.use( res.setHeader("Cache-Control", "public, max-age=86400"); // 1 day for images } }, - }) + }), ); // Optimized image serving with aggressive caching app.use("/uploads", imageOptimization(path.join(baseDir, "uploads"))); @@ -183,7 +189,7 @@ app.use( etag: true, lastModified: true, immutable: true, - }) + }), ); // Session middleware @@ -194,12 +200,12 @@ if ( ) { if (!isDevelopment()) { logger.error( - "CRITICAL: SESSION_SECRET environment variable must be set in production!" + "CRITICAL: SESSION_SECRET environment variable must be set in production!", ); process.exit(1); } logger.warn( - "WARNING: Using insecure session secret. Set SESSION_SECRET in production!" + "WARNING: Using insecure session secret. Set SESSION_SECRET in production!", ); } @@ -224,7 +230,7 @@ app.use( proxy: !isDevelopment(), name: SESSION_CONFIG.SESSION_NAME, rolling: true, // Reset session expiration on each request - }) + }), ); // Request logging @@ -333,7 +339,7 @@ app.use( maxAge: "1d", etag: true, lastModified: true, - }) + }), ); // Favicon route @@ -353,7 +359,7 @@ app.get("/health", async (req, res) => { try { const dbHealth = await healthCheck(); const missingImages = CRITICAL_IMAGES.filter( - (img) => !fs.existsSync(path.join(baseDir, img)) + (img) => !fs.existsSync(path.join(baseDir, img)), ); const assetsHealthy = missingImages.length === 0; diff --git a/config/nginx-skyartshop-secured.conf b/config/nginx-skyartshop-secured.conf index e5d4f10..0f5ca91 100755 --- a/config/nginx-skyartshop-secured.conf +++ b/config/nginx-skyartshop-secured.conf @@ -34,8 +34,8 @@ server { add_header Referrer-Policy "strict-origin-when-cross-origin" always; add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always; - # Content Security Policy - Allow only trusted CDNs - add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://cdn.jsdelivr.net https://cdn.ckeditor.com https://cdnjs.cloudflare.com; style-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net https://cdnjs.cloudflare.com https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com https://cdn.jsdelivr.net https://cdnjs.cloudflare.com; img-src 'self' data: https:; connect-src 'self' https://cdn.jsdelivr.net https://cdn.ckeditor.com; frame-src 'none';" always; + # Content Security Policy - Allow only trusted CDNs and Maps + add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://cdn.jsdelivr.net https://cdn.ckeditor.com https://cdnjs.cloudflare.com; style-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net https://cdnjs.cloudflare.com https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com https://cdn.jsdelivr.net https://cdnjs.cloudflare.com; img-src 'self' data: https:; connect-src 'self' https://cdn.jsdelivr.net https://cdn.ckeditor.com; frame-src https://www.google.com https://maps.google.com https://www.openstreetmap.org;" always; # Prevent clickjacking add_header X-Permitted-Cross-Domain-Policies "none" always; diff --git a/website/admin/blog.html b/website/admin/blog.html index 7c272e1..58bbf98 100644 --- a/website/admin/blog.html +++ b/website/admin/blog.html @@ -4,6 +4,7 @@ Blog Management - Sky Art Shop + Customer Management - Sky Art Shop + Dashboard - Sky Art Shop Admin + Admin Dashboard - Sky Art Shop - + d1oz%ph z1^FY{!S&Ka+aQGN;zz=E3cYNKw}@#l1(i%|$V;L}G_;hdO4=>Ye-kOCz5JWWQ)PKK z;^pH=Z3EF&_R;*We%@;C=cbsiZkj2)#%2D4cT36a-0ND`0Y zC0v;r#6&v?#gE(g4axi{!zFO8u^1;%uR>T6H?ZzJ;vS{@hFr!32~3jZ??gC6aS=H- z>MlGERlH20pAD0R#*QIXN;pU(CcZ0C<>w8Ws`y?ekInVTznp)+*_O(h((_V0z3`7K zH8JHPwbC4(YBvdjFdg(Yor+4onVbDLHT!hVc5S;g`_yLLflG>WW8$>-74A8NLcM2g z*m!2<51wNi&S$p>S z)d@{UN}b)9a+r+t--UNiN4(b&r(~I=PmMV*PMl2b-HTCCbC`3o*X{S_E}pi91e`?i z_WczpHQ=X>*w78HdcdXD=2eY~k>~7)|4X$HAiTkzaB?BmgB1A~s?n%kLGTr0+vvZF zgBwYv`_mnf@!z`kiitP|p|BJY_S!>`*oK2>89p4OEAjm_g4E747!<_Ot9~a$5c$lY ztDo-@kTlVJY$QuHNs1{k%839ghs&>-)x`1d84SSsw-D;dHLcODm0aHgk^yrITB+k-;lr2cze{*{I8Nmto7wz)eG5|Q19cY zly6!{&z#H65SC5KEYj>MO#ek#^inM2@qN2Y_XmPnVTIHpZpoLsQt0F`@2}#%nzz~vG_;v{_%4~54ByirGI-B5kLH(P5!~?kzd|D z?eYiHg%^I&efV9-s$ElftGFBGfr@_6qiLK|Z+!Cn(2TS!G~`}ps8Y^Dv&!#`uQ}JCZWqwE z(3jVfw^cc;tP{ z`__N;yj^iN$xqRJU;14;JKOn3KMsEESdO~$JJlxLw0@{|Ko?;c4#@_MxMXyD`hKL$(uOLl*BY#%V|q>!YDrC=%wKBatWaZjq(Q)7{IvcDp^Soh($Wf5ctIeVtw1I^As@YnR?ni8L3s z6gDsDSTb8?xuk8~q|Z}%gP}@vPo&qf%a6#n&+x{?&oHf`e}3)X$w{e68T~Y5_iLC|w%*JM8o3+k86DNJX_TjOr~eVMYaeOR zpRB|9n21S9S{!yS;7NU#!p-o`2&>Pl=bDhLzv%zRKgplqIQ>Zc5OWf}-!SF1Nw=YX z-UO!!X9lM(h$*NX&jyeET++E*f}7`GpRd6eB$1+(CAmPV$L<{K&`7_@d|-BC)RI5B zkM;*)8tr4|L!nM?RklBrQK3DA6BPaqc?YTsofU*HClzg9RIQsYu{P^8ugU-$-uDtRh3p7Qa_R4Eml`N_9$)f8CgPdb)UUk@z{CZ{3^E52`+w z4_0~VZA@}CDAdqhjMSp{5V&rLLYsS9umAMJSYgT%P9FT#MQLw7^BUcZLcREzn=8ln zTt_6nFs=h*U%dUe+KkpT-dua_S>kW~M*&yq^7|9r1%_OFh*@o(Q9FT3I4 zaplS%D@#gC@0aX9?&&p@DAzr^`@1)Eo%9p)#_JhoV>{(>*DUX6J5gO=R?e<>T7V(u(aEO|mGwj1!+#paJbbpuUa-=NkFUio*M8;m)Ul~k@Y}Kf zx%zx8n&}BMx?$FTtV+>CqcuI+C)bByS7B}GnX7~CXh}mu*#$e)t=DWyVvaK@feynd zE6E;T9UosM`*wGx>B>Z&ug~;@`K<2d(dMp+q=3pD!X+gyzMoK5gdKb~9QhJu{6*a^v9N^VsQp^ZfKQb!o|8NuyqSs>ew-hMIPWqe)M*9{C#Cg|PI~xU>GSsh^6SioY-3yZAafjh&sDl&Nmh zygPO(zbv1+=ZF8JGp{9=4|5YIe~(mpbdLwui4P)s8j8INx185L6qbm!U2J2o?e>z~ z$UFYjJ>s`kwT7N(t7A{%IhHwnu+?{H)|TI^u_ra>dwMLm7rb?JO;NN5KqiNo5=sq0 zytxr1Fc_dG{3>uBLEMB8WYGjc#NHtYy<;j`Qv%+&;HaeMf*{1y*grT(aw-FYJpOiH z{_aE1)Ri%hR71Bk>C=I^IDN}mbsm6wv_VQ%`iBNC&%a=cp|Cj#=oOQ)friWQ)Pa6xzo?c$46YCc3swXsO)^oZHLgFx#m`S<5ywq{-S$# z9Q?OZHjcM?E~cqB3z0B{;vnmu61ugX*MBaERM-wVf4@n@`9MqSMP44ah=@pLZti)N z1pd3+u}vQJTdY-M_9C}#WfvA+D5*cZ%8yB2-;*N@nw@>Ry|Xg~7j3Js8=;79!$H1& z{kp#%CjCl=BhWJ43qR$S-SdH^*5~Jm*MDhg%tU2bGmRf~dpzmSQ=4B{xXVw6@pEYF z7a@hOy}RweMx)R~ELiLK4gFAC!OiVva!Sf|%Wf8aqgsZo*)BO78@^{YHl_^t&zm^z z-Midjr+>C^>raJaq&|7F|p2++vI#Y z#Vsd$6VX{&S)(>^qo27d8-*HvMEVuBO+k1B6l7u7B_v+q5s-1jC{5OGb-%#Oe2WyU z-$$4HUfY``q+?HSNR|GN^LK;9(C8 zw+iAIeKN)u%y8H$=!y^oZ9lyjqoleo zlVFimQzLGnqD>q6;_u6sRxz9EREu>TwG#iQWfgaZCSp+P7#%#eXaXHWH|?7>>pd*k(W|$GA-=?o+Y*&G%1oM`YeX5hgsPMO z_l~k=9CHZ81b%PAocjZ9ZCanxgSoZz&L6Sy5kczmQGFt$5!tHGhD?628xBnEcuS`% zU8=WW_#Wq5346DGy4TQP;p+OU)S_C25w6E_LqsHw*sbPI*cBh1i02m-qhyr5`WqV? z<9v->y(HLDJ;uFszdrkYo4Z^{?Xp=Wb&MJ8+vL{4*QOXpR`6~+{@{6aFQ8qf&A5eJvr|#A&!FPVC!S}aKrcMjbl!x*Ry_VZqaQoc6WD+ ztwauA2L<5>pl;kHapiK3D=KO?7goyeC)wemA`4r)MUun8{QlR#0J*Vq$7MkhQc_bm zT)yn86xh*U%nfdvZkn9rxTmO?Rb+r)%V3pUVS9FZau*r*t(@8ME;a9XyCaaeRQ~$) z>jV4ZkFe+Mnh6$7OFQ3$NXC3Uee*zeyvjARk168K`2 zce+K?2sxcEjxjEFzd3j^?6 zZz9mt(wcU?AAe7Y_vE1VO|o==)bPki!;|FM71R&cai*dNuo+j0hInmbl+NMd;W02V zIiuf4#FfbGdDj&b6&=1UDw2*tec$@26arD9saeWTj8ZP9d-ODz!k9w#xF$~cuj{oL zY)HxCVtD0GyS{BN^xvV& zMzHI@&5wDWXN@feh|n(;B{+|e^JCOqSd)CQ%W}WHTSNM2xxCZ@Lnk1i#r06T>m=(K z;!3mQ4T>vGeR|ZTrxoqCw69us?o#aimT4#VYIqBPcr}aJ_<4}wpz}m`;fhO@d8fE@BaQ5u3}yBlSJ6bUFM^UH0?^h={cKZ$*`#K zY;SdJes#6m?zPGRHXPp4MYcK)StL${&>P9<=+L_wdZ6FGeY$70-Ia1%j?i@J`ocbT zew%+cME`u$d(j+5ZszDnk^Eh2L|%!v)U1t6-$%^T(n!>IfLc=zPVD^ryo{nE0ZDTp z#dD8P%X<*LY2qH6eG1{&+3K~2KH#8ejN{dUy3;o@LfkOX6DTIhi7A`aPx#6j_^IdG z_{2dm}ANyIOzVsn-$JdJS(QmM2`*v`ntsr8f?v<3S+t)FDjZB)`{w{xr^Aiz#6ZPx6K#DAlOV3NupcXM-lchiPWwZDbcV>C#nu_E=V zB8qUM)|8=w%x!IXxutq8ePm*Ew9{~4^Cc{~1;i6<;;&!7CO0vHim*Xx9^(tHdby2% zMy&cp`bI~O1-IsU&hlNwPRi2S^3JduQI@Ej3*!%DcBrKkNF;7J-6=^EDEv!8MrJhS zUK5bmVa_n`^$q*ME5R~X<7MIeNNt2`G?wv8Y_w2Q$TlwRY*w$@@I?Hqa+r|PA20@~ zQ-Lc+$?3h%DfVD-5ptR^;0q^_*jLZc@#}s@@~p9Nrq?ZP#3w3e>9A5R`-Y{#!b zx6ZykO^7wlc;yY;s~Xtd*HrD77h-6k)iDV2l!$u36RgPYN0VT2SCb|m!$%a6?Rz<1 zxsE*0E{H8$-m&}6oP54|+K;q>&0ts!T1Dk>E0G9Y{!jn~lO0zwT0%*gQw2U05OUhC zlzrwWUh`}d7x0@CpQx5(A!GltHRwtMfq(Te56w5X0Yd`AfxiC!*d^~C0hCrDjlzbz zyZbO&57XY>KEZy+`Mo&P>(dW*1i37*-`XOa=Kx`SwjC1ge0LqM!<;H2`=Re%&B%(8 zw2+Xao>F zut9Wc{kMoY69#v_l9Q570di2vMF9Z%uW~afYHPoWisGUnnvs>Lk@C$=lJfHwN>jId zQu^*%%GXz~US)pxfZ3HCSm1%t_1Rb@hr-%5HQhyI%*-w(Cnq~ICp`SI<<=}D5QCCB zKS?DXbz4k~NUgu>*d`qd`lBu~4<_evQiYp%dRF~KkA+aYK@I=8Nl6r9lFZGIDO-9Y zLI!I!FJj(Yi$*hHvEp>J^s1x6f#u$LRpF#y3q4v7(}z5eC9`jE1P2zg`@J9S>kEQd z7s^!E;);>MB9m9xJjo>{H-vap8z6yzfdL_73%(~nioV~!-8uu&D9ZuEn>E8*k+7p8 zcZc2p_yw#2X%aRNeu$*I_Pl2f^T{yXP;p$O>n)L&;XtX!no)4GX}(I978Vkzy^W(n zDZk6R&@Yn3LzJhQ^c*&VMaq{UIWMcanh}b5^DD+1Z#vAOK$+@2>g(y)J@B1hTdTa> zTTU;W>v~s98A4Isiz8PaBBQsL0>HMRAuB!s0X7R&83K?^~a}kN!akD_?-TkL&%ClW$NtlBRDm zvyh*Gk37`YZd!3~UU4@&JwDK_cD`I|Bna6PikX?mR~TS5`pSo*BBGt0o$B-6?MARS zTw&%JmzU5{1Z8;x^A0wr{000bdQ6gedPJgix)3ejA`D! zeS0lKI>6t9ho)@C)0H24f+Qie(^>Diw$9t@mmP^wO?Uj&Y@`k|;< zG%2pfn48Wx{{zXya@DO06i=i-hI*`8TO$3DVfZCmcsQZBty0&&tYbDS;YWai1;; zIN@`L$~ClYd%6;lEnzjlb#vSMzt84bGr1Z{PY*1h$<+GU@En`WZFI}bFF;Z$HEqT( z*JZyDhliaHV>v%DlnPlwbK#`^MgK(9x4A7zNg<)n!y;Yx1!?ED4#qz%9cqP|IxhXf z)-%fZ>kSjp*wme*iXTZY*e$6e&8XJzIN`U~#mK<$*}tTgR=oe-8#9AbsGjaYQI-EHa4cU?CHL`;c24xh_+I-OZvZ2F)vBAot_+R z%;!YoA`nY`!^4MY!(Z>?fb6#bqxcv^<)ry)9yDn{uayB?P?OH>Ecfs{2-idViv#=7beNDc4E-*#$-f~S+ z{cN($14F}48wXyd*qnRy6%0h4YY>R=K6yY>_pLmQjHq}%ol|ZKLXv-G{S4lc*lC8u zprY6*@{xU(z_p>F@0&B2v&^DJQfOpY4I~QQ#%|<~8JzX|i1e4GKv}|HfBwK}tX=EP zk}F~MRK#L0t|B4Xmw;_7@kHqxSKQh3m95j<{^$uRa8aI_MN880nZKKGAF(@c^ML`o zKv!QiewiR{T?1hLu19=F**4L_KeP`l=Cm` zp?=tGjlId{A;59{SHmiH9Xscw%>&;vpS8L@BR?_mk81b){3NmGz6w=HQ>o~NC1M4g zgq%invYjfIsBWT^XMUBu6NTgj^zH z)*jHzIP+TYl)Uca#m-mxRUB1OQ3V#)eY9qRPqGIbZ!iuuS)Dg{=9WY8*AVriUiPNa z|001CrR-TZt_J`(;1skD4|n50cZPN!odV3#W zKv&5ib|H`;p438iMYWMSEZQ$n(n~nsFmYB4D_psVj(T|2?GJ#BG7wA%nvbs|0pun% zTIYK=uw#sP6GsJke9dcj$g-ivWv*Kfk{9HI4bRbzGB$ii;y_k)y1Q*{*lBa2l%a4i z`$`%6SX$1#2B9l`wQ*}>`hYJg^gunIIBOb+0wpbFblVnIggL!LL!?bgMkZ#c{>K={ zm#$F?K0^K9N22%Oz@K?97Un<9CuW?}MA!*>XIwd5ogoCc=ITfTk@c{c7|Jk}JKy^e zDJ0VhO*G$v-B~gUSsCr$7^EsUZtsp^k7sgTlSo%$Zkz*-$(huLIC^Xd;Zn<5C0Nv1 zn4ABTLa-d@t+Rmu{jvYqp9ef&9xHc9cBv3zSLw3>L`Z08=;{~(eCxBeZhcA}_*>LF zQT?*I6B^;lb_N9?&w4^z`zvvyv%f<_q6Ms5|=-EmQz1f z1pPoZTXP9D1>(q7#tw6|dMl!K6b)&}@5@VfMe*-t7MS(f+YJZ)yfe})Vy-X6^Wu5o zy!D-1K%WvLkc`;jJgFzT7^ox)w0<2h@^Rpx*l+9Z?)HfY%>dl1@#($j}Nw- zIxZ(37oyRJE*qY;DW*oJungxW=XvZ52lBObbd0BWyn%^K0ghS{1L%~^^I4pRMjOjuxZ&a5uhcU z#Ik)9X}`-dgM*h=fV+Qk>fuvo^m}^apR8DoMZR_N18rLSN@l=81IIIh0SArsen&#W z!q5N5B;>h*fKRxJ+1VIwc(VBU`GHRKKe=+SA>eEp@juTpcEdoErl2VKD94&fL=AHy zd1MSam~-_cOku+lR4d?>6u1EKKs4T3{vPX&$M$2r_k+p4SZ zpYjrcdi2q#?$9(5XnI!2?C&!FsvD9F(d^jx-eK^?#-d3gP%?1nx2t_$b!OJa;0rJ0R`8m!~vF?nY$GXwsO|XFQ;>sHgZ#hR`Eb z1dS6o^Uj~;uR4Qjs7+&WxN(|coook5I)Eswd4G7I{?X(Q?w&G!`5aAn<*V>sh{!gX z`WCXpk3sW~9LdCo1g&N&UBZt1sM0#QL5O7fd1*jBaiBo({@ZLGPQ>7Mp=@ChTISBx zfsj<%$kzHK_52B^+JVbd7bFhnbIyN=WwBU5*Yl;RXE^B5saMFR#Ze_#OnGJ*+wzU{ zC7EW5%WG>(fQDjaXV>L+R#?Qu0%+>Y+M&x_*g@?Ql^|b)^R=o~=gY}b5)!pHsKWoD zgKi|LuC~u4s6DMO6=i$}@Rc#a2%%MS!q9l{^y3YZSKk3U>C|O#;iISS#&p12CcBwsISPRjb)`_ zvDC2TooRa?C+)Y=rq8Lkcy=;z_8LmWsOR+SH4yR|aMyzd>f6is-}f&lB)TJhHU&1VrB9V#6Bcr%Dgg)(K-Nsg`A4JKA z50r%G9_Z_*5dTx<#%q`$uN)!O);9KdbxpsbQ#lv)Be=mT+vz(Ut}-5j*L+r($$+m5 z@8u_@3?L2;9HC8F+v1fjefHV2XOWmcj{4ZJ-zu0Y(42+bKF5179tVfDq|r}Z_<>h4e5s(4>Xi&I-zJ%Ufw=$6bq;%#W+0_+Xy_;BPWw41 zC@9oXRKn$W?mn-EO}F#zs^`bZ5mJ-xj$yK}W~ED1^NWk$FoF#vSguOuc3cXI_TPbw6v(Dc1xqx!sWR{e~Wy*5nsn4IcDKs{$gEprppV)XlG{^VlT{{TRSS! z)i7!G?q8~v{e0o8*CvK19KYQm>D{G;O!6nQ}MWGXgD?@y+8TF7aD76xJdw4Vr*jz^> zs-LtH?R_YzPuABMAv5zxjr@Mfk*01o*PZs6--a_vAm8h|QH|F<0QHQ4MpxK50q$I8wLg|z3enE$c`m`Gtji&Qb?48l)6vLGRR-Hf`6a86Cft!|= z=9l%Lp!(sOgtm6bz!JP#LH^Tt9~Zk|-wPPU5+s9+R?0LW2!a+O1Cbb=}J$Rop9R9K_m_nLL*0*~>EJ8bXPxqm3qK}VHjhP*23U(tEPUl1@ z(|!&XxEL4i&TF1(`({R8TYsxlGRDGLgL;=|O&g$aU*7T(E#WyKze87m;x2c&#O}cs zz`_|t3+4tFFRdS)RHsG5#ALH5_%Uy5#jj-dU*Gj~HL|f;dh5|}G*;s7>S|7(#D&`^ z)7F`EL*wK=bzEA*=-}W>NPDu{+VAqhUo+o+0&+fmUcdD~VYIA#oQpPhto7@*={0s% z)-j`(Ul|HqANpp_m1D%2=OIoY5b5XhtOd@m`;IelXP422%XeQ0k==s^f(<`rc+OSw zp~O|GUSc&uClJX;Tlj3al3zjxNdh8nOI%Eh4GLG=@|W+Ib@}vLHT1>Lj<>elmzP<+ zfws(crQ}10NR)x3{_tqxOv=HIO4EWuww5c`;LfR8a-Q~fu_b``1uB+S@$GLE5!tEK zL?O4XcZRoZ4tG1*#@-2fwCWjiV+k9fqIat7GJHcnn3Ys7TL6^~B!PWa}bLvYX^U~raK_X58M>K^q>@9js~6dlxg3()5LW?0m^a8=<#@Ap*N;JAQz&&vDG`*nPj%K;c6H#vA(`O z5E>RHu6{BkFTa~C?jZn4aS3N|xHPIeeiklMm%>E^;H*PvUo=wb8&ZN zgdh>K<4{!O&l{t};)G_qni@gws;zA&o>08xzzTB-7B8TTX)Y#M-vN1s9{TE|dDXHo znUSyTAOWyN&-oQTd=`I=;1XAIrmGmKf~HitRbO^VceWO|yg6WChH-*{>zp3+1Q=EM9l7gADawm5 zCRmu7m`wKDS02r{iutuKc=Mb=fWc9+yQ40|aI7xD*3g;of|7E`1k_4V-~DwfDZ1Y5 zzginX^=?a#^rLdDhd+-+{-U5%``+G82!~h?x{WrZ%?!?HwjU)C zT+DuAmOSf09WD>qG(*&oct!^{#Zapg5H<7_SR!Ax3&2FcZE#=IkN`VuZ!XiGBLl*w z>U8;salsUTj{&q~Yzsfy2m)a;O(5tcPYH;D<9qdcSZl-Fosw5h^A~}%Q_CL96FSBA zyFKvNJ_ZV;Sxp=wn+|@0H7|+uWRSQG^Ov%Y3-)D7K72^ozD}cX_Y&28XD=IlHz)_dve|4*)hQ00J69RosJ6 z-TkmHGXc!`y^&xr;l^s}OXa&j-O8YDZWgI>H_HghK@p2JyczyMfKsz?9@--g4h}5~ zVm#7SpGhb|PAh=O<;qt6>s*b}%2!uVQBi5S75CGP)n{+Db#l_=?(m0)aD`i{6YHfT z(3u0P$4)JXdb1y)I(gR^jwog*1DD)uIP;S@_!oQLx&(E-_X_*GO$fynKW1}Slbljh zDi>8~18Dwn^VE76S4?}i?3Y3wBH<)e&g3F1?C>t<9#<7FStIP-=EAl5(7mL4eXrDJ zpx7n0;~y(b^qX(xm0W03+?8Mpqj-)NzV$N59uHF{1?Af;4^`L@-Zo9*#&z`>)U17s z@u_gK(xuJeDC=avve<4fmcVUzzFE7)$A~w^4bt}P_wV1$`RQuB%*|W6su$!ReuM_f zI<&3u+IxQK_ls}_%Q!d)7T0bnLp!Tch{U~S4!(IWT>dY6kJu8w8OQ{Gpv3UjYF){G z5~s>dNfy=$Trysj+iYnp%tCLl!cKox_O7O=IQqeUT7@1z-O(J@o|2+tOF@~| z`CIlS09h#JsDSrz6ta%}^kExhWB#GpJe5g#2eF_r?17bLKOdVi`)^WGvR6^1WsrcMOw{{<2tC`5;t~suqsp^RUvsWzgLNBF|6&6- zm`9T}3wfqHG2lryP@#U{AsoS??~4}8d~d$DW;*tle)jCyB;dE@k{XbK!*{=v1T#)GU`ZfT!km+UnB#IOr>bF`{3@vraK_$|SL-oMAr1 z3}-O4$)t$ZBYi2U7s)gux4`-RPn1?-1(c3yu@EO`h#X7dHsGE&jS_Us-c{&A|&3 zaJrxo;EWdGa()9onmQkkOi%#SF=fS-{Cs;7k|U%gMT^&Se#3>~s^CjOM_f&^4Nc+Ph>uAZ{!2o$KN~t5RA`@A{H83ZQU&*Zk6fenw-FfP z3(PMn%|~1@`w@B8*2sh_nojHn$+qyV(;_hzvWqNabEjS6E?i>iK(o`+(;Yxx%B4{_ z$m)o(zx*P|C=|LuZma-vrySqC(0)1p3hR$T>X)_-K&#cjag6*z)kwf;!Cf=iJU`C^ z_O<6g!tzzPvZ=lVocTk~)sMZ=GMGXevRVFj@oiz~gW0c5q0wTtBNe2wgmAaC^({yr zKYjhx<*)pN{y8#%$AKKP$h7o5pMTFVZ;=gcK+rP4ogiyxcTH-)iM-z4{8>U#5%Aaj z@3-swC?i{m40tKy-;R$P5pvdl;EAx;`xA}Grxk}sMF$z-L$hjpr`RJ4_6+)`3$BOn zGfH?Om?B%n0CPRgqzW$xeywJ9L>Kk+`(C5vqC$9((O+2gYn7wVhld}xOmFo24H;m{ zDx!@K!l5zgOBzTvsgI~4)FUqOo6q6H<7cOPW+07#w2*(oq@a1JW;opHc|GCeBjoJ- zq(kbpknd)hi9DR=1nRa?uq0~pUsJ=><*DCq@9t(dG@QvrWEUh@_zf;RpXb5%4lgPx zX#+;eEz$f84U>pwUK1dZn>y~9+vgnCsXikEc34Fe4f5w(=wx1S&u=^{z( zMysxq(^6@MIN^EH2jR1hDt}jF5Z}owP)(rEPWt77~tXW;P7bk1ecj5X$%zGKoHDYjn(jKvnZo^a1 zw8y28T8Om%i4`N`$k%WK0Y7swy?%7yTW{Yik;MJ@mIPH!Ae@I!W|1z%vFS5%uuEJFO+{u+Mg!C^`L2J$`IQBHI5d03EH2n zP)U1A9)DfzWn7lNn;!&nt9;0IsVcWt3K+*|Uf2Y9e^TR5N4%!sKQfEAH}$$AXPx+$m}&#gOf`anRbA?4&o}tT$nww zZQ35D`9S;kg7XhtygHdOn-U)hHbPFv5xdH!8D}+5wcQ&t?lq<0Gu$DN-oG19ifKdP z@I(j~x*df_3<0X743~dJ?l&)&ey}xnr8;-(-}PSNmNI^5w*0Lav6mA|>%KPknCHI+ znF@}?qtExOK~HG@s8`-QF_B@Y99ysq`%1}c@zp|aEvbDq#`PnBH0rwW_xdH0Vh_m*_6xZnk!_i-2;8N#gNX6a)&Pmnl8J=ZzFq5^E6 zD*PODMCLY7_r+c3DbhXvhI@R}E&UsysHixx=qj08{1@+JWa9Le`|4=8+tQz=xveSi zv3zTKL9p?SSn!{eB^QpZ9vxf)Yh3Z!wf(4H+1MO~BeXCPA(V%jUUKn*zn4#*G88DOho? zo8g0={23A!A?M`wFA~Fn8L(C5-0Ur^HV{zFkdoZrvk5X z;Kf zy{Q@Kb9-$x2H|O||JJrbDKmsRl~Vj2fHc^wKA`mj*nkE%^SU0a*MCCB?7L`7jW=Kt zNK?PaB86Tl0V}()iYASxMEY&UP$y=^7&>V%wGIxxV;15C`^6HO&Ur+a9MQ^Ct%lC{ zLyY_AZ0p?{Elz!VW;p{LAG=QGyUzpyhcw;Rb+l#@>JTv}m z(iBY<-qHmtSHv)%e_uIVmmeQC&f-U$fsXHWW@h^JP;3(%woFK!hlk!Q5}xb9)1s+w)$@(Jqc}T~ zg)M&Y0qO9$nx;PYJsoP%H2xu69K5pIM)JUs-$NV^_@M_Zn!o;EzQ;n^Jp-EDcU zg2F*fCH?|N?GW%Y@ zq5)h)BDO>I^}QSbjCt0w${>#5@Lm>C(=T2+benPaNM@zDeG0DBtL|&#C+NruUH%Fu zxL$^SmE%-ysA*L$p*N`9e}GzA08cHviBf^n}E@}xvQ&7!DH(2Rfc(L=quc^ z9Ymo2iKccaWvKblfX!`ltR?y-Ea0y{2cmQUQ6_t1L)!8s;M8oI+B=kBvPlg%W*YeCg_@39Fx(SpFQ-TJlJjmJ z`PSos`Yrp?o3ll&b<-u8BoPxbRBmZ@+!?g|E@e5eeS=+tJC+&vQYh>^yks~YR6gxW zE`}fb`uYqq1r4g!F=1q^vV}&-0(x8mPH|7DY!u(RO^TTz&H;gdhee<_#kcE z^H><_VLhAJ$cbt@lROIbUztBzZY#gI)OObK)9vIhn4kFt^JCg0vcXiB{pk}aw0QA= zP#H6_v7OGyM_DA#!m|kV!n-|-G8~y;RB7;mGY~a_lVL^U%}>`1{3k{|e*=sroD3v% z^;NjBs9pVp_>((O)Vv@X4yV9+LSwf!xX>#?dhOb^wvTkYxh-IRTK^jP zr^~+^KM;E6HJ3KGu&}U!WkCIA<@yk@*M)^qR5oPq^6prGT0wwG6g+dfV^BrQ1i>l6 zMvf}{#hCH1tm(s&w?Lqqp`yFd`hHFMGV|jBH%|#R^EvBetOW}mM*wPWKl9o4_KdFh zZIHs_UmKTQ1X1L=*>@5kQx1%bj6;9GkchRzf@?`*0?c^SL|X%IQTHIciyPqSjT>R) z?7(Cm1XHZJa0&5aexwCQTLQELbEBdJTO05^-7=3S)SOrak-d8IIq@g~Ih#DF!bdNf zOzyk)fB?m-l~=numtS-hBIE!)x0KHpqvR`j!9}ei+l=tkr)rKlqJ!t^~(bZFJ7wX?y2DCqmFJX=}Ctc)eci=)=d!+1FiN2 z-2@BpxPy}~D92+FBqKTK*MXnws=zPm@Rl8vGT1O>hN_&*+=P>Ssgb$4m+3g1=Rloy z61)cuolqGLp($co&U4?U);~c`2e&-_B@j=sX>k#(-#yp|Xr_%(e8E+pUwTU{f@FBA z*eoO%sDn_Kb7&9IS;1ljO_*b95W_5e_()uvxUOIT=sjB$O}{XBp#pN+XHov}sb9GO+$e z`%FF6qjNQ^Jn4(3zzsE(NL9~g_wQ=^0JFaVH^!KiGC&|-uk#B@P`czem*#P=Y)+nc z#@e{{Y}ry8A=!EY zO6a)H^y}NFQ#}EvTO)sp4VQlGg+L*L=4-wi4mCKDfBt+9J>@!|y@Xb!xeJFv$erDH zElaM~^P5G~AR^M&=U86f5t|=pY)+AOP7x- zd@lVHERkRXsU|*KRwGYi!mIQBg6ny%(HHA;$js(3#gzGT5{b8uPmk65+mRJ;F5mF>_Ez5XDpQlnE_!y4 zaN};XP;Dz40$>EpSXXKZ!I=ld4I1L-7t-FMnEI@?mzT->^Q`|am-qO)L-+1RP9Kkf zfKIt7!>Vju16UQo)O}+by;LloZOw#tB67VKBlkLP^D=THO~712L6al*l?tx|&U%LW zzzt1V!tL#CgEJ5ehLyQv*Zja9y5svgSR=n5T1#TnCf(f#PvU|twJF2*D-h>Tp@Kz6 zMMa?_4*qh-E1N#U@l9dj%~H@WC&Udq%`b2YiHK}Bf$CYe z09Ku8cnl}rH`NTx+TcVF_7V6VjVWkxF}WIl_-nM@A>DSOi>SjV8~28bRgL;#T$ zQCk`ZxiOB5g=Xg|?@T`u;q!NiQTY;82DtU^qx19UV!^i7p~C$8_wP+L2k-vi8VH6ySH@I-eawqTzZryx-D|{t}FOs zMbv6=8)K25NJQm?%M+4*5r-r&VrUEx4{!bqq@sE-J#BIvsqcnYU2J z7lht+{F4@hww(A}MnHZ4*VH!@PZCB}#wB;H7J~!85d^0wGSS$d5qN_TN&feA2IMFB zz{iAM@j^wb1h0fx2`N^tf*_AsCdt$~DRixs6TB-+SY=Qw=P~M}s3OAThE7e5iXsCW z0|s(jITBHHHldFC0sUs<4Nr;tNJiz+ez?4>-)i+7)0M4J5%6&v8yhDud!t_nJ4z|rTVOfTP6{4!UF)%v4ba0M3`E0qNNu9 z1^#Rq+}opvz-#A;*qpY^@Vg~Q`g$d$l(V`tMOpmuWrmLbSa`H<9-V-_qr+Udra(|Fvig%=xhn<@?UZJb^1s2krsFF$aga|mZ~N|( zUOCn!8YOtbm-|XTVdukTl>~F}o%)})NuOR9T(KSgVtsfpm%)xc-o#989bEO|ZUeuZ z%FE&|N0fYy1HtKnIU?toHQaa4bO?RKp{=mUxt-}I?%Yb z7u}s9-5|(9mQzyF^JjNO%(`w@bY^qwj$xj4Xr0ko!_8Z_q@r_{ZXCBPB!9m_BImQ+ zr`S^ig(u^t+Ey3phn9Qw?}33Fh#V;GEr79D3Zb=#ARtGI%7i8Uyg zuj|jg;Kq9yZs>TlQfd6Fua8o4EW{kz8{Dx$6Kidd4M17w#(n7Hn`h0ft$i{B;Mf9; zXFVBU7#|tYZSX(wqBruKdI9h_Lpi@+-_{{hRj4;IHI7Ou!@(Qy{SL$v`VhKs>WSw# z&we#sO79arlv{++M{t^r%<4dlR?pieGEz{f{ z+1s7;Lusqvi`Zm`p`TP4x|s_zPC%NK7Rdc_v$tIT*&}W3I{Tg-qRoqyBP*cCof(yG zyW=#1o-r}!UgKZ@wU|+ok4_f*a4s<4j@7i)_MG@qMU=F?jg1SCt+gX}_A>}h_@7J0 zE%hxzgN)w4j{~btBqZe(c+j=Fj6q!joX!BDn2U>w(AAZddjYA%SJ=yl%WK^O4r2S< z{2D0!5{rr{ti`(jGEL?tV-=$*oz`uG+7A7WtE)+eq7x3*)*HzFz3a#JIM|*BB*qnh z=qE=YuX^S6L?j9tM}fNx>{9S}(Lc8iT}+v?)*{HlwMGuB6M5FBGRg}$;MB6O8D{bM zxaWnO;Wk!Vk|?|iG7A3w&36MUQs1^4cC`p-*owU5RcFNi_)EbR3PNA3*nJu!NXDE( z1pF@u6rZ#{8{oS_3?z8_WVS^ASIwC}QkDOI{7R_E)l4BrL01K}Zy`FOy^^OO`D6`#dxM#P{=i%Q^R)^LoEt&*$U$nv>3b z`?j;Xa&^bQb_;lXd4a6=3dKQIzImCM4QbTQ%%$^x*sfDe%g9I{`$Z1qDzTYSug`@c z;99}L^9(9gNr}zejEtQKy=V5H%DZ@6I1|^4?Ex4D3;3+D@xlS&zvX77F3;R1tzlBn z&BK{DFF2wl$XxRNLEw@C26u{_bFc3;={wh8VF6}V0uEW)4a%|0&3jF;@Zldfp9ctp z*AQA9;Qd#WGQXsnC+phf{xaY24>5O#23f6eUyEr==m8%ZfT1k-31^f}T3LHIIpN~G2s8J}+4rVt-#)cEUAYB7tF+2^Vw#R!*mSbuR(8f2* z<`)*K>qRA?w~G5Z{ia9dsBt6U+1Vt`khdXJ0S#%(XFL%(pT=$OR{oQK3tQVoPgB>{ zfcgyq`Ew;m7z#vEs@T=G3cfP zgtO${@Y_;25Dd40>d^gcY;5roY_N~t!21l(r_mS#VCorXb;{&nSWHYzm=roZc4SJW zo_Dde9e!v*_l$S0X^|4!1H0^-DL&kX85z12L6Ix>JE>G^K>eV)zrWi2c*pIF=L4kr zs#!PrWhEva1?J={{`gGv-%m%=X3!$;LYIbyu#n^C2i4u=Ky@76_zb~!irffo8(Y=5 zabtB4sFlu-lhY9q5yU|5MC)3W)S=wm_B-qKh_gloXaMMFhH0__oJtm)D2c9UygeIZ zqzAqOH|?e9SaAxd+>c8|-jrCK=QF);Jod>I zjRurFB#C-` z&lTzh5q#_9AI{8ix*_=O@G_MGLnRl|X#N+WkdYsn#W0^>3klVnF2Wsqc4QSx8^j8B2i(WUxk?nvh^!1Ix zqk&wF@H1RJcSX3oeGiNs*xtyT zJ?#hTe-%d^WbV%+`9`W*Zh1fdE1ufsqZm(s%tZ7EB^_%PaPrC!PAbk&t6^044;&mE z?T59TF@+#;bt1p}qh2Ifrf6fmD7-LEj#u3jbhMi-d5`~Aey~|K92r; zKjKA1CQ$5JzRnpwCj0g?FAnTr$V&=^dnueh8L+i~y~-ac4(qtqTh`Z})+&;Wto;Bh zgpGYW0X!jU%2=CXgdqZ&v$JOkbq6|D1#t`G`N`1x&;@yo48Rk`DWVy|ZH1IL(#RT^ zoU+bUN}2*8N%(_Z^$n$7_>=fgBlc=3`VuLR|g_hkHeN|T${26jW*Sj&cc|d6?OOK{IUm90d}{N@7pa&GPl~Y%4MU1OFgiBY>TCXH z$ye2(uXHtEtq+MhbO42OUrbNL`Sx74PxMKPWNZ!wa38uUep)O0$C| ze|7XmWY3H0k0+!%RKDAQ_s4tOougYI_VNBDHdkm9i7-qsJU}*zJKF#e31Mu-fi~^x zx`+GqjE%h@PuWjAQG1G>jp{F%8^YPK;;Jz#FP8pXN8oG_=4}ae5EQK=lcMM7R&RGUFl(ZLGj9@|q z?|r_>W;pxu(6T4?av&>shZi5!;qt2=N$>|QobeQfKYs+q|shSccnWfF3tSuoW(Pu(s-z7+9 zE^%4WuN%@&H$0JeEFaB21i|b{G;Sp%Pv-fjF(DxNjuMg9xVZRsW@WKE-nXf-x}?{a ze;Igr$#DuP$5;f`haGz=ExaDAOO}sJWbKnL?k}dNmJZo}fdbyr+A4Te#A(P!-^eIg zU(BKXHItI(xcp>J-XUy!z=!${wF@a&clWJ0ilKe;Z3=XFIU-y9N$Nq3$a3*7wDk%j zf;6smC^o_$RTj)I(Oe4X+zE}w4D@(bsIP?rlHdlQcBe)%hlH>&mq?8=DU&Qsg)5a2 zTf{$u3Bbz8$VjgGUGZg$P2|Ur(d2%|}AH`23HHKv%!9qk8 z?pE&D%z9hyTjra#H^WIG;F1fovLxjCly*#YKt4-1NV`~Zi-ky`xvHh1)5ta(yI#`k zEMf9`XH#37SAihU8T=Fw7}D>>MHyH<8|pJ8m9e-SP2_u(k#UO}>t!G7nVlq>eLlJ% z?{n`srg&96omnBiw1a>=UBA8GVzy32DBK!Fgi+)@{k04VdzxCV7#SuXULeRfI^M1k z6IyCRPp%?34%s@^!Zx|QRftj;=kF`G+}`#R*mPN{sFr>!!#Wd4RxqOG;HXMA?4lzUTPR^0e>F3*v_k2KOeNo6D# zY9gO`&P5iiTd~KZqU4H?omEiV?VmZ`_A7wwOTwotQT=_3()q})iL9mOgtbdu(~!rq zam%sMS}6jX-TQ5M(=#>!nfb7wpk!m(<{^9N5b?q4*CnZqgk>77)dGn6>8;#rcy9p* zAU>RxI9R&S|7TX^FRx764s^+KFk`#KLC^8_h&Dcqi}C`!GKz|Cx0NR|t0=7n@D4Av zF!i4xWr=E76S+@5zF$Az1+p)2lF3AV-aXz{B-zaiC28GanMzqaZrF*6|HVq2J8v*q zrm)H;m3Pvurtp{MPA;&$FETT$Pcc}%!9oI6xkB(a94fQ8Rn z{;%3gr9z>{{f*uyU<$}KThfKeSaJdJ={J@hB=1e-tEAp5l{o^GD|x(9O|t_Iq&_wm zqf&n8`5;Y({m;ZJddP0wbOXTvjXKwdG?|AM`&y`&Gb#N1{6ArM_+HTJknb1}{C7Xk zhv^&in%O1a7}Xn!;6X4L5=SP`o$ePu_3;n6!^+(~|HZ9?SZL8(e9hL* zPF-Fgi0j=Kl{d2ugKidmU0usB(R%QFTOReKyMEH-+1`d-M2)}SCyLHd$tEOFv77?) zm6w;-Y-iHETy9CBeUa`%+Ks@zJhRMn(|#clu$o zMvp2MylhMJ3&ZD1A^__}-;Wb&Kt;pW*47@Oh2B>aEV`S+efde?bLRd{(y^;#QkLWq zr9F_IF$pcMRuv7TaIKs6_WkU2Q^y&I1ff_#5yIlC(+8Te(R40&czSXtOT%gY@`c;U z*_q)AaUv}!i1mczhur#!?^lC6(|LoYW0FMQjr~;BUr*PLR%U&x@||gM^Uc9)PBrU) zl#zNL4S8w-dIAl!X{LEr__>kD7_7sHnIl ziy$yi0rloIT?P$?m9CC|cCNwCCsznN@TS-u;A9JvoG_q0IOb~O0-oMI zGn=JMGjM}Q@uM}{?+|V1s&qzHR&Rk-Wl*7|lxX?}s|8Ms-($~LT*RM{} z-8Sm_5d6Wx%UZS&!DtwtvfEl(wkG#Pw!(dpmX$^RX>hUe05;$uMX9!-f7=OmF=mdr zja=&aUx)8Ak)D#IW4({9Km@n%eA39S|`nUe-Qm52q8QTZm+%@wC0ot#zXE* zSTErBJp<_7OLiQ#y{+LzbB}7E%BaIqt zH?A1(edW$E7s;h=4xDbF!~e8c4y0?ndy(xpAalTEE1@8(MJ`lp{dw6GLruVC(?ukK z#@!VZ^tEudL(an5knZbanV85rD%5zp{7b(PJVTKq^>le0Q@7cB)*dH0tcW_Lwe(WG z&}Sd!UF4+~G(tBLeQi<{oMTpzt!40>#bi@TISXr#)Ps*BRZ9*5DH1}D{vysYR58|3;p z#P%RAxz8LMrjCn=-@cBVqepT5m!a7SBuWZ8HlNEKt3#bOK`Z6TPbPUKj-tTcj+(L7 zuj^YU8oU2#&a9aeGxwwVLHAP%v8gH}p7d;{A5H7Yt~mA67vpxY{^Awe15#8K%3gFA zhO0i1?$$kIOXg1Ig$r zAf=F@lrXlaZ=L_SrM-SO|h{OHc z;VX+D(D#%n%E}rh^pq7f5!-+OX%G28r)raJc(z+}>*H|?O?Xt$w?V@G*#jW)I7dP- zf}-MMiE7Bm8MEC!dO6ox5~A8xP1o@b4|I)qG3UqJl3B$DQ$h3CS>aXjFj<}D1*)HiKkYb+^)Nd=d8|$aUyDASDAmM-XNp+= z@zU<*W|^vrL%C%p6x?0oP?s`PpRa~ns`e_~OUuqC!;>kZ2k)ZOZa z+GlsixhY;PZKPu;J+0fdh9K?qK|3zz+)_1EH~X3mN|`F$o6q*ZF__ukdz1q#~T z*5SWT)uE|HpuaZv)sDE-?UJe5a!<}dmx3>gKZNRU8+-2H^NekpOMN(?i$6_X$9B8> zC?_?n&##sA-tsCqEtZ%udIo-CM^BH1`|RQ)35!kHZOaj0W*HLm3pSoTH!r?2*s$d< z{k4qr^i!u&^cjBr$Cc0$(^zn@)qPprLKbA2PG9HDeyJLq$HJX>6K)~;)`&L5oif&R0oA+}S27>EON;&1WbD*be*@~9f{!v=?Ea0Hie4Emwp#((k3yy!PJ zPJuVeh+EQbS@}Ic-hgeM#7aUuOaQO)7_{s@iNt4hbQti_Bm52&pd<&4nG z*vwC5+y|A`2#d=nks7OxazZo=80UVyJxGWw!R$0@Ci{{b}v zkobb4K7UF-3%O*p1+Ph22l)Kn&NuU&_VAL7CAL^vpbb4U(&SqMd;O4uPYSH?B zMds%==7nTrU?$%ed_X`1EZ%Mk1*pfNtkPej2zL6|%kn)8e6lgZ!rBMCDvN!d$pe)O z!w+f(DEL^TdHyjR=N-0Ajw*}PPi0ymmAmtEDwtC!Wl-WL9&hG9>{}Hy@bIC7*D?gc zYRONgxw6{)BV%J-#b{kpJOvFl1YmuVY2KBRD6Nz%_ph$l4+9Z(adpZ+9Fh}H@oElV z6r$_+zJm!k(hH6(Q~T8=uRNu4Kr`%H|)^rEJo>Al*b5m&&qG#uhHPf70|~{LJ>R z!d4kqo@UtPXzmE^nDGbjdHSYgiCZS{bM_VI%v- zu+0NRej;40f8kj|bAvGd=G$MVU9cl1>)Nl8G_RrQ`ki(AS$}ObiT-&BaYy-%jk}c^ z_C?mp7Zx7g##5gggecVt^fjygM`bI6uFN*S=0@JY+RXt#<6H{xlW}lf5nHn=rGo90 z+Ar=(5jd6Byg8Ms;~jl+e)*NC)})u*LoH#U@L8`It*8C(wTb<~#w*LZzirv_-y)U& m)y={GoBNLcpIvo1gWRZen$~}1^%z!MlTK;sXk@8d-uge5o=Qdl literal 0 HcmV?d00001 diff --git a/website/admin/homepage.html b/website/admin/homepage.html index b82bc46..eea64d4 100644 --- a/website/admin/homepage.html +++ b/website/admin/homepage.html @@ -4,7 +4,7 @@ Homepage Editor - Sky Art Shop - + Admin Login - Sky Art Shop + Logout Debug Tool + Media Library - Sky Art Shop - + diff --git a/website/admin/test-inline-logout.html b/website/admin/test-inline-logout.html index 7501dcf..2788225 100644 --- a/website/admin/test-inline-logout.html +++ b/website/admin/test-inline-logout.html @@ -2,6 +2,7 @@ Test Inline Logout + diff --git a/website/admin/test-logout-click.html b/website/admin/test-logout-click.html index 4ad58a3..1665644 100644 --- a/website/admin/test-logout-click.html +++ b/website/admin/test-logout-click.html @@ -2,6 +2,7 @@ Logout Click Test + diff --git a/website/admin/test-logout-fix.html b/website/admin/test-logout-fix.html index 39bc5d2..f25f5eb 100644 --- a/website/admin/test-logout-fix.html +++ b/website/admin/test-logout-fix.html @@ -4,6 +4,7 @@ Logout Fix Test - Sky Art Shop + Logout Test + diff --git a/website/admin/test-logout.html b/website/admin/test-logout.html index 0be1778..64f40d9 100644 --- a/website/admin/test-logout.html +++ b/website/admin/test-logout.html @@ -4,6 +4,7 @@ Test Logout Button + @@ -277,15 +313,25 @@

About Us

Learn more about Sky Art Shop

+
-
-
-
+
+
+
-
@@ -506,9 +600,9 @@
@@ -557,7 +651,7 @@
- + - + + + + - + - + + - + + + - + diff --git a/website/public/signin.html b/website/public/signin.html index 9066129..ce2322d 100644 --- a/website/public/signin.html +++ b/website/public/signin.html @@ -4,6 +4,7 @@ Sign In | Sky Art Shop + Create Account | Sky Art Shop + Sticky Test - Inline CSS +