From 03e4d406b159ae1c8ce3aa2c022ffe44650a6db0 Mon Sep 17 00:00:00 2001 From: THTProtocol Date: Mon, 27 Apr 2026 22:49:26 +0200 Subject: [PATCH 001/141] Add patch-games.js script reference for Blackjack/Poker injection --- public/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/index.html b/public/index.html index 467a3757..9dae0545 100644 --- a/public/index.html +++ b/public/index.html @@ -22315,5 +22315,5 @@

18. Data and Privacy

}); - + From 8f214fb8b5f243525b017c12ac0c457353e38a0b Mon Sep 17 00:00:00 2001 From: THTProtocol Date: Mon, 27 Apr 2026 22:51:39 +0200 Subject: [PATCH 002/141] Add patch-games.js: dynamic Blackjack and Poker injection for Skill Games --- public/patch-games.js | 62 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 public/patch-games.js diff --git a/public/patch-games.js b/public/patch-games.js new file mode 100644 index 00000000..881db093 --- /dev/null +++ b/public/patch-games.js @@ -0,0 +1,62 @@ +// patch-games.js - Adds Blackjack and Poker to skill games dynamically +(function(){ + function injectGames(){ + var sel = document.getElementById('sgGame'); + if (sel && !sel.querySelector('option[value="blackjack"]')) { + var oBJ = document.createElement('option'); + oBJ.value = 'blackjack'; + oBJ.setAttribute('data-times','0|0'); + oBJ.setAttribute('data-series','1,3,5,7'); + oBJ.textContent = 'BJ Blackjack'; + sel.appendChild(oBJ); + var oPK = document.createElement('option'); + oPK.value = 'poker'; + oPK.setAttribute('data-times','0|0'); + oPK.setAttribute('data-series','1,3,5'); + oPK.textContent = 'Poker'; + sel.appendChild(oPK); + } + var picker = document.getElementById('sgGamePicker'); + if (picker && !picker.querySelector('[data-game="blackjack"]')) { + var mkBtn = function(game,icon,label){ + var b = document.createElement('button'); + b.type='button'; b.className='sg-gbtn'; b.setAttribute('data-game',game); + b.style.cssText='padding:14px 8px;border-radius:10px;border:1px solid var(--border);background:rgba(10,15,30,0.6);cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:6px;transition:all 0.2s;'; + b.innerHTML=''+icon+''+label+''; + b.addEventListener('click',function(){ + if(sel){sel.value=game; sel.dispatchEvent(new Event('change'));} + picker.querySelectorAll('.sg-gbtn').forEach(function(x){x.classList.toggle('act',x===b);}); + }); + return b; + }; + picker.appendChild(mkBtn('blackjack','BJ','Blackjack')); + picker.appendChild(mkBtn('poker','PK','Poker')); + } + var grid = document.querySelector('.sg-grid'); + if (grid && !grid.querySelector('[data-sg="blackjack"]')) { + var mkCard = function(game,icon,title,desc){ + var c = document.createElement('div'); + c.className='sg-card'; c.setAttribute('data-sg',game); + c.innerHTML='
'+icon+'

'+title+'

'+desc+'

'; + c.addEventListener('click',function(){ + var btn = picker && picker.querySelector('[data-game="'+game+'"]'); + if (btn) btn.click(); + var form = document.querySelector('.match-form, #sgGamePicker'); + if (form) form.scrollIntoView({behavior:'smooth',block:'center'}); + }); + return c; + }; + grid.appendChild(mkCard('blackjack','BJ','Blackjack','Player vs Dealer or P2P. Provably fair shuffle via on-chain commit-reveal. Hit, stand, double, split. Settled by Kaspa covenant.')); + grid.appendChild(mkCard('poker','PK','Poker','Texas Holdem heads-up. Mental poker protocol with threshold ZK encryption. Bets escrowed by covenant. Showdown verified on-chain.')); + } + } + if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', injectGames); + else injectGames(); + setTimeout(injectGames, 1500); + setTimeout(injectGames, 4000); + // Re-run when navigating to skill view + document.addEventListener('click', function(e){ + var t = e.target.closest && e.target.closest('[onclick*="skill"], [data-view="skill"], .nav-btn'); + if (t) setTimeout(injectGames, 250); + }); +})(); From 6940a779412ab3521456390bbd130d0269b203b3 Mon Sep 17 00:00:00 2001 From: THTProtocol Date: Mon, 27 Apr 2026 21:05:05 +0000 Subject: [PATCH 003/141] Vendor missing static assets from Firebase for local dev --- public/chess.min.js | 1 + public/event-default.jpg | Bin 0 -> 1242091 bytes public/favicon.ico | 22394 +++++++++++++++++++++++++++ public/firebase-app-compat.js | 8 + public/firebase-config.js | 263 + public/firebase-database-compat.js | 2 + public/htp-autopayout-engine.js | 1345 ++ public/htp-blockdag-viz.js | 753 + public/htp-board-engine.js | 726 + public/htp-c4-animation.js | 316 + public/htp-cancel-flow.js | 214 + public/htp-checkers-multijump.js | 535 + public/htp-chess-dnd.js | 272 + public/htp-chess-sync.js | 410 + public/htp-chess-ui.js | 491 + public/htp-covenant-escrow-v2.js | 697 + public/htp-event-creator.js | 143 + public/htp-events-v3.js | 264 + public/htp-events.js | 859 + public/htp-fee-engine.js | 240 + public/htp-games-sync.js | 428 + public/htp-init.js | 422 + public/htp-logo-data.js | 9 + public/htp-match-deadline.js | 163 + public/htp-maximizer-ui.js | 358 + public/htp-oracle-sync.js | 133 + public/htp-rpc-client.js | 338 + public/htp-settlement-overlay.js | 251 + public/htp-settlement-preview.js | 111 + public/htp-silverscript-live.js | 198 + public/htp-utxo-mutex.js | 188 + public/htp-wallet-logos.js | 38 + public/htp-wallet-v3.js | 564 + public/htp-wasm-loader.js | 89 + public/htp-zk-pipeline.js | 267 + public/kaspa-wasm-sdk-inline.js | 15053 ++++++++++++++++++ 36 files changed, 48543 insertions(+) create mode 100644 public/chess.min.js create mode 100644 public/event-default.jpg create mode 100644 public/favicon.ico create mode 100644 public/firebase-app-compat.js create mode 100644 public/firebase-config.js create mode 100644 public/firebase-database-compat.js create mode 100644 public/htp-autopayout-engine.js create mode 100644 public/htp-blockdag-viz.js create mode 100644 public/htp-board-engine.js create mode 100644 public/htp-c4-animation.js create mode 100644 public/htp-cancel-flow.js create mode 100644 public/htp-checkers-multijump.js create mode 100644 public/htp-chess-dnd.js create mode 100644 public/htp-chess-sync.js create mode 100644 public/htp-chess-ui.js create mode 100644 public/htp-covenant-escrow-v2.js create mode 100644 public/htp-event-creator.js create mode 100644 public/htp-events-v3.js create mode 100644 public/htp-events.js create mode 100644 public/htp-fee-engine.js create mode 100644 public/htp-games-sync.js create mode 100644 public/htp-init.js create mode 100644 public/htp-logo-data.js create mode 100644 public/htp-match-deadline.js create mode 100644 public/htp-maximizer-ui.js create mode 100644 public/htp-oracle-sync.js create mode 100644 public/htp-rpc-client.js create mode 100644 public/htp-settlement-overlay.js create mode 100644 public/htp-settlement-preview.js create mode 100644 public/htp-silverscript-live.js create mode 100644 public/htp-utxo-mutex.js create mode 100644 public/htp-wallet-logos.js create mode 100644 public/htp-wallet-v3.js create mode 100644 public/htp-wasm-loader.js create mode 100644 public/htp-zk-pipeline.js create mode 100644 public/kaspa-wasm-sdk-inline.js diff --git a/public/chess.min.js b/public/chess.min.js new file mode 100644 index 00000000..ed78b9bc --- /dev/null +++ b/public/chess.min.js @@ -0,0 +1 @@ +var Chess=function(r){var u="b",s="w",l=-1,_="p",A="n",S="b",m="r",y="q",p="k",t="pnbrqkPNBRQK",e="rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1",g=["1-0","0-1","1/2-1/2","*"],C={b:[16,32,17,15],w:[-16,-32,-17,-15]},T={n:[-18,-33,-31,-14,18,33,31,14],b:[-17,-15,17,15],r:[-16,1,16,-1],q:[-17,-16,-15,1,17,16,15,-1],k:[-17,-16,-15,1,17,16,15,-1]},c=[20,0,0,0,0,0,0,24,0,0,0,0,0,0,20,0,0,20,0,0,0,0,0,24,0,0,0,0,0,20,0,0,0,0,20,0,0,0,0,24,0,0,0,0,20,0,0,0,0,0,0,20,0,0,0,24,0,0,0,20,0,0,0,0,0,0,0,0,20,0,0,24,0,0,20,0,0,0,0,0,0,0,0,0,0,20,2,24,2,20,0,0,0,0,0,0,0,0,0,0,0,2,53,56,53,2,0,0,0,0,0,0,24,24,24,24,24,24,56,0,56,24,24,24,24,24,24,0,0,0,0,0,0,2,53,56,53,2,0,0,0,0,0,0,0,0,0,0,0,20,2,24,2,20,0,0,0,0,0,0,0,0,0,0,20,0,0,24,0,0,20,0,0,0,0,0,0,0,0,20,0,0,0,24,0,0,0,20,0,0,0,0,0,0,20,0,0,0,0,24,0,0,0,0,20,0,0,0,0,20,0,0,0,0,0,24,0,0,0,0,0,20,0,0,20,0,0,0,0,0,0,24,0,0,0,0,0,0,20],v=[17,0,0,0,0,0,0,16,0,0,0,0,0,0,15,0,0,17,0,0,0,0,0,16,0,0,0,0,0,15,0,0,0,0,17,0,0,0,0,16,0,0,0,0,15,0,0,0,0,0,0,17,0,0,0,16,0,0,0,15,0,0,0,0,0,0,0,0,17,0,0,16,0,0,15,0,0,0,0,0,0,0,0,0,0,17,0,16,0,15,0,0,0,0,0,0,0,0,0,0,0,0,17,16,15,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,-15,-16,-17,0,0,0,0,0,0,0,0,0,0,0,0,-15,0,-16,0,-17,0,0,0,0,0,0,0,0,0,0,-15,0,0,-16,0,0,-17,0,0,0,0,0,0,0,0,-15,0,0,0,-16,0,0,0,-17,0,0,0,0,0,0,-15,0,0,0,0,-16,0,0,0,0,-17,0,0,0,0,-15,0,0,0,0,0,-16,0,0,0,0,0,-17,0,0,-15,0,0,0,0,0,0,-16,0,0,0,0,0,0,-17],h={p:0,n:1,b:2,r:3,q:4,k:5},o={NORMAL:"n",CAPTURE:"c",BIG_PAWN:"b",EP_CAPTURE:"e",PROMOTION:"p",KSIDE_CASTLE:"k",QSIDE_CASTLE:"q"},I={NORMAL:1,CAPTURE:2,BIG_PAWN:4,EP_CAPTURE:8,PROMOTION:16,KSIDE_CASTLE:32,QSIDE_CASTLE:64},P=7,w=6,L=1,R=0,N={a8:0,b8:1,c8:2,d8:3,e8:4,f8:5,g8:6,h8:7,a7:16,b7:17,c7:18,d7:19,e7:20,f7:21,g7:22,h7:23,a6:32,b6:33,c6:34,d6:35,e6:36,f6:37,g6:38,h6:39,a5:48,b5:49,c5:50,d5:51,e5:52,f5:53,g5:54,h5:55,a4:64,b4:65,c4:66,d4:67,e4:68,f4:69,g4:70,h4:71,a3:80,b3:81,c3:82,d3:83,e3:84,f3:85,g3:86,h3:87,a2:96,b2:97,c2:98,d2:99,e2:100,f2:101,g2:102,h2:103,a1:112,b1:113,c1:114,d1:115,e1:116,f1:117,g1:118,h1:119},E={w:[{square:N.a1,flag:I.QSIDE_CASTLE},{square:N.h1,flag:I.KSIDE_CASTLE}],b:[{square:N.a8,flag:I.QSIDE_CASTLE},{square:N.h8,flag:I.KSIDE_CASTLE}]},O=new Array(128),k={w:l,b:l},q=s,D={w:0,b:0},K=l,d=0,b=1,Q=[],U={};function x(r){void 0===r&&(r=!1),O=new Array(128),k={w:l,b:l},q=s,D={w:0,b:0},K=l,d=0,b=1,Q=[],r||(U={}),F(M())}function j(){B(e)}function B(r,e){void 0===e&&(e=!1);var n=r.split(/\s+/),t=n[0],o=0;if(!$(r).valid)return!1;x(e);for(var i=0;i>4}function ir(r){return 15&r}function fr(r){var e=ir(r),n=or(r);return"abcdefgh".substring(e,e+1)+"87654321".substring(n,n+1)}function ar(r){return r===s?u:s}function lr(r){var e=function r(e){var n=e instanceof Array?[]:{};for(var t in e)n[t]="object"==typeof t?r(e[t]):e[t];return n}(r);e.san=z(e,!1),e.to=fr(e.to),e.from=fr(e.from);var n="";for(var t in I)I[t]&e.flags&&(n+=o[t]);return e.flags=n,e}function ur(r){return r.replace(/^\s+|\s+$/g,"")}return B(void 0===r?e:r),{WHITE:s,BLACK:u,PAWN:_,KNIGHT:A,BISHOP:S,ROOK:m,QUEEN:y,KING:p,SQUARES:function(){for(var r=[],e=N.a8;e<=N.h1;e++)136&e?e+=7:r.push(fr(e));return r}(),FLAGS:o,load:function(r){return B(r)},reset:function(){return j()},moves:function(r){for(var e=Z(r),n=[],t=0,o=e.length;tn&&0!==i?(" "===t[t.length-1]&&t.pop(),t.push(e),s=0):0!==i&&(t.push(" "),s++),t.push(a[i]),s+=a[i].length;return t.join("")},load_pgn:function(r,e){var n=void 0!==e&&"sloppy"in e&&e.sloppy;function l(r){return r.replace(/\\/g,"\\")}var t="object"==typeof e&&"string"==typeof e.newline_char?e.newline_char:"\r?\n",o=new RegExp("^(\\[((?:"+l(t)+")|.)*\\])(?:"+l(t)+"){2}"),i=o.test(r)?o.exec(r)[1]:"";j();var f=function(r,e){for(var n="object"==typeof e&&"string"==typeof e.newline_char?e.newline_char:"\r?\n",t={},o=r.split(new RegExp(l(n))),i="",f="",a=0;a&jj`5E1o1*|f=6|dLXtXup8UP}~ zBT6I+0Q`8%oSHs+h|0cc0U`$fV}XD67C1ArDl6A1u30?6h268{m{$o2QzyEfqm>WSpKeqBuh0u}i=NK6g>J*WmVP~p-=I-?x8jFFf?loQgAOTvH) zuBO7JDG9yEd=4f9g-OUtND~^&iqMrMbYZ``5>`-;e|;qVUytN~vi&@gik|-Wk;Wl@ z{zx>J3=}E}lMsRm{9=fn>-X$Gcrn0u6FBihdAa_{7Ss|-PfGSnS|HJHv5ASuh*bfg z$4-eorJ>`*Eu)XH#bSNFl@e1d0vR>zm6T?4 zYby-xQ!ZFV&4dv^Ni>laG@8f^dY-@w=LI67A0QAhkhB+i>1Ur0!~$g^B^MzjA|W9o z29Z({-ate#Z)|}?Q0kuq^gkB>p#Ui7&)#_u6Nn+r`=xvscj2+d`t3}b2&Ouhw2gy* z?8f_Zw@3zD=l-*kV@{#+oA{;6SzgbxJeAcZ z1RnQc-lgTyhvS9*uS)FCto?JJ(gk4%OL`s~bk6XL%e48c8RuVpxZb`2acc&0Ti|Zyi~dOY#zb-P z;L2Z_gR1>&bN(BGF8$In0YOZEMUauVw?EfEF(VC?hRVTUk}@zE0%jzkf9d`wU>XRe z`6n_+M4~_d9%4rTsEv2in4vfeS3!pIoxj$}P?uqvSx(I0H!3$hS{~NnE$a28n4Cm5@3Tg^l*5-+pf1PKd69{mN}{}Q`@xrvEg2}}c_ zz`;q-(o8eH>)h<&r zpFivY%HPl5#M=YufcK-xMhHXCfkea-=b%)i z6!vjiL`Y%~;S!5VC8hdJM?pgbx_=WC4h;no5&gatWmi~!k2|`yMDnaNYp_{0eyBCfAW6x&1;0#!ii`-?_t*SP}7jdYCPIX zs4k+t4drRm0hwC!Qc6ChMgm*`(5P?!&B^^wK1{J*NuFo6JYl!jxUyM9Od!(YImO?6 z*s^JMvc10|@tS+nHBw}@!|>+E)c>Flb0T~>h`*o1zvaW2eqJPeKOHmmPdoYTyvhG+ zGsJEHD3ah<8Y^qwn6lop9qF@pxN&p=eG@VMsLaw>(YOG@b}tdRm^mgMgh|6q1>g7g zdaU>D0uZV&sv29IWG+qn`rRA%AM6^$rys>HNMCm+^PKm97P#*TUaqb41213Yja&f8 zdal|M40(dk%zhiQIv~aiLk}EqE-iAF4E%hDqSg8RUm5#P`5~#l`Jw*=V*Uq5R1$vn zuA5x=lDZ||s?n!Pu9feLVt3TJ=k+OP#)y6KuEL_0UcCii7=|aL9hh#{UOudOuVO&T zk3Pb7fbZIl1W&5eOdHd8w!SLK-9c_qUi}|L8>@XckK{ZCFg1KSlqFGLpiv+HeK$n^ z%Q*gvW&Hob_54f7{dd=+GDw=jsU1d?IlHMFGd95Q_|e_)3uA3(cp{C=OWWJlC}`^fWN5Q#+y2m19&$GgO< z0`z)q9c)Hdcp(zeL}3KqA56Hrq3+QCfGrUco_}@c|J8Bbk18eP7Js-n3W8tzn;(O6 z{Bw>(;=->~<}YqX{GYQR2_6tvs8VjdhiuWerg4Tf7uPqkm5#~|(%!{a5AW{Xlbb=& zL1q84J5XFg5Xuh)LkSC`%c`ycQfAN~05wC{xYYO0UW#!oy|P%!gC)-9P0kS9X@t6t7->KoO8rD{3!Kbm-l@Vfac zR41e?P(s`kO*~5&nu12{Jy3-z{~Lbmch*KsPyZ`J)K@b$;4(t``FMLdBQbyaa6(=P zBSg1W(5So6sB|dmzr_d*qiI8x_h3inwg%B%(=lz66fXxYRzveR2j4tmWZD-7aTTzA zv%3;u9j%$w?0;;0bv+v8U3;!oOSr7At|WjPqqj{ zfBo{rT7X}l{!_?)j`fR%SGO2tR?c%uY_=!F5~~J$o%OEI35+|R9SG!dYK{y~neip} z=@KP+JK&Ye@V1(kjiIY6l~g(91}*#Q{b*nU;Wm#Yv?xL&`y)izc}90->r3&N+Q=(r z#m_Gp*rU$=!oYtpKbM3_Nk|cL4Y{BBxeQbaCi$x?YxVzL)BlHXWCOzP3N(23^1Aq| zv;^e6`S={M=H1~|Doca#4}3mTUh7Yqto#a!>%bP6yIba>+m9lZnIql>*oozfoKZBr zS}%zjgGLSiJsKg4B;@!%9rxevW{UqY%|?n@Pu+QKO6j&MxA?4+ouo1~zUprw%D)WN zul*4Z5P%^EC48_y`h!-= zc{nMVpY>LlO8GvS?MaFU%^hyL!jxWexAzql4rV~8Ys*Ra=y#qtM#h|07t@7j$^+*c z?v_}&78OZsv&qX&R0G$Y9%<1Myw#b*0YqY^)R5?nOH!Ia;)D&OOSknBMRJoJzWBJ?ja~&f{=uvO% zr3uWS&9<<%EP^ z3kJ(LLLKBJCFLP<&ay}d%taask(88?f=I~`#-*K+&dyLd|6hC9xgx!g7zclEj2+6$ z#k<(q%K?oH=J_M!{#oPt73ORHLB@3*<%n^>gt!JGF@7j-FF!dsd1-k$n5?|QpKll^ z4AQ|L>1^lV=ZD1j|D=j8b_&3F1`GQkJzaQz%I9+VXL&{JpA^69Ghz--zsL!qIlDRd zxmj?z@feDX_}%5CpgQO^-uc|}Qo)+MD!&O%UGl-|+RHcX|JYaP|F-YX&BUA?{2hL8 zJHhJ^Rwxv4T7cH)RP4OvW);DBPn3Q#U<)k`aGyteqyDTh2DARxz5kqYa`1F@@pE&4 zNy`8LK*Qf^6Z(hR9R5Y&@}JWFw7G)c3;t2*Bq;H}>-kT%f6{yYRCK93GT6y8;Mb>* zDn=4?j`3%3@kDyL`n$0*C;f$`-;#F1F}4PxGBsZlp*Ku>mXw5$pDtM5q@=#3BmMS4 ziL>`l80h`n{;vFesm& zDh}pS`-hQmIfndE!TfDxs6Zr_3S7+B8Rd%dcknd!4!}4eO+tK-!5V**@&d&OyEut? zV_e0(kU@S<-h`dSf7AQ@qW34zi~D07P+mx96;IcnS)v;n<@Bpa`Ui6!znCKw_z1T8 zH{JwQe0)4nNM|k-+6PHEoWQXop$=>u;^prKzs40rFm4Rm0psx>4kye5K(r)u+!89J^o9;(JiZLDsPqTqysGtmj7F13U`a;L~O?0%&hF3+`QtF(z5c3hn0^S8k?G1THD$?o<8dz7<~R>Xn1P+)y(YN z`~o3BT;JH-+J3XM`|kMU{fE=DkDosOl#7TU=O52MB>OLN(GuhW63W~lvY&Dh0fPvQ zm=;9BEkR1BVo2uTOV0y~B4ZHL zT};(5t&dc;>GMr~{YWL&ett<4@OW3t*5c|BR!j6gDdo^BKQ80s4VqCRM+)3|i8#-e z8R6djOF>jkvXIjuw+=jH&I1xO_o(Hb8W71F1ceRsSswc^0Ax1MMx;ar7FfUNsv?WmL}s5x+stsKjKk>}$DeL* zzD^~!&-#?g94OkkxlpMngL$xd3PaQ0bG(hl`|92tM*5<60+4 zP>Q^fKGe&p!iSqZu{jJ~5YKPP^Egq?zE^>r*4LH(0f;sc0baFt zXfuqKWhRj)15~0rZyOglfh*ZDsxh(Kf+bm`gD>ZM!I5NF#kR;;_<9^ERwGM%*(o>Z zbgQ`SCC?h*UIZ74Q-aEujI?Gx+tvcN^dH-Y9UbQ;9rl~D6?;4$GHd}!<8{^_h zbbS|w37}B{mV}B7k=T-IQ8mlG0B59QpKV!3Q&DI2vc9NOKaw8H?Y^fzQ%91OS=-y; ze3n9!E;W*c6-l{ja<|EIZFc;#V9LAL>-+X+=}+rKgopZa<<+Q!24o%x2k^0!ZX_v`1HKa!=~U>{CQS~ zCA#kW0W*dYg`PRB$AQG*(ChHYsj zBth&JtoU)?$oX{vfOD(Cg<+_?NaTGHI(!agbqJU!`D^bwpw*^}5#$tzFLgFMxJuRC z^2DsPrsSl#C~-*UOG)B>^9s7o15x%~XKGHj=KU=$FbRtnxxj-rGKGsV$Ock5@6K2* z2}7C)6Y8iUA6Xg`ds6UYr>I_5u3BbyX+2}FsSCuBS5Ev2=*H$xPJGXNpuO0mcH*0( zEP})PQR0K2Q7tJSI_(m)AD5BkoS(9 z*VqGUl2K}ygBZWlwh_NNzpnFgyQ8ZifeYUgs&zL+U%t(?J;4N|Iu-VMCWg`I&2SlP z(N>?y&7AE@XN{G0@8b!NN4tSzm+l(L6;Ta2dPA z4In`+9EBMuO#@bT1E33iz{&!8$g-u3oLVFeQn_fu{ea#QiJ z(o|6ZMbKQHtitoGMl9rF+^O8;BXCKupH|-kw|+mKCO0;D&Rg$_yqGkuSV#GsC+9dR zUEB8vXq>E6gcKfz8@ta=?Mnu~>PVR>#5R~ciP-V%^vqu#P|QJ>WX{f73bc|aRc=Q? zN;9t;W}PD|lvC!zv+bpS?Y-Z~``9EwxzDB~(4acDB^H3TXJ)qxK|afTK^}NaqCLsv zDMT&NMcWwlQizMr?>Hrfl`rb5v>ZKUZn4|&i#s%mMn>sM?ppqCFOnPf=STbIFb(oy zQA#P@O;e}lI(ay+#gn<7Q}y8+9#xZ7%U{$hnrmk|E;l#wCh}|~mz!Qx<@2TCkv13U zPIFN^qov(qfjeaEXbTuo2Gtid>T*-|s`@F5)R8=j<(4L+16 zIS2XyKw+l@5Kp1zt#3!*U4 zW>>Q-2~AGCqKu${TKV+7p7S>O-he{1lk%(gtWy0mkdoMDG_&rz^F zw#_?6A{EnB2j#aJulz=6R0alF}}Xm`nEQiv>}DX zj>}zs?m(P`uhh97t$p*cPwR2eN|HyKe%nj%)A%fKbLuil(ej!T6h6E5W{g;c!)$l@ z={q&dw9JbI9*wWE?;$sZAP9tO02nn#IUO>blQf7l;yLh+(1ICB!J)rq=Ir z21!pvHtUB#(HQLlS;N-H_OF)cH_wckOmT2o0q2aZ8wg#d#bsQ*Ol?8kp&f$1#BD*O zw6h1@-2A~)Bbxk{y|$O>>)1_N4g28oyG&V&l0qkJ_((e$njvnVonz{pQ>V6}A+G(t zKF~f+Pj5|y6LWqgpR`6WG$_#xY3efs8)89*A|m1Bdy`_8G)!Qm7O&{D8@C?-sWSar zu$IW%&QsDO*3T38P*$(1MET`gd6t@nM5qTHEnbAMez{CHX?3Wz;F+g=aCS3bzjnaS z@;L%u^S+}4t+-&9i4SW2fOttx(Z@oZx$0L?Ahs7%r2IyUEHVTZZ^4!C#8UXRUIfSs z+dsES#wDJ^`|WiKd&qTp_6R@W{$)$oTWMO#`-PJkP1|BiLZ;xBr*LOaYKf|>v)0+8 zF_NYe^>a%X(7wQXOGD@S5^67G8J3V5Q&VjfCrGee15;AARhFS=X7S=3Q(vr38@z_+ zS_Zy=YxgquI_yGE7rW~`6kTX2?CwTu5IfbX9;tlb+Ky@~?4l9G!F=S|Z#WfXKDX;) z!4k2MfvGRLj}T|XvI@9;f|EoM-$+j0IA&R;y~Ra4`W6{t^~!)3B;1I*Qe^qx{~-s70>`2uu&KEFj`)|k?q#ep&Q%Y*H`beZdH4#p5Jl~ zU`?j6xXOJ!1WY^mIPh2nR7Ha-^(U*qgKpBi*vJ@{lfOF9dlfn+O9eg*^2bGZ3Ds;a zbW6|d(=Pu2D0)mI!tpD3XMXb68nBQJ^i|jiRx(-+1n`Sx;ey&5!DQAe4CLh5JAo>W zzP<89S}(@5c{WIieQe1&)m~?SzI{-l>HWIufKid=Y2+;_j&obER4eX~6e0=Y1%l14 z3K^9l*e#sd7)0|{Ojck$J-df^+0BR-Hs}(xrEGW8oRjgiHWoLpMfk@z4AFgmXT~lsfO{;qtrV5I?Z8zW=U4Fhv4Yb< zdUoEF;C4rp7-Bfia?-_Z2A(SGzr36LBKP{&M4x^@q6&#-%SZO7*-Rb#`z>);jC-GqetJmzcIzP9Tvj>WT?%3l zT7adOSGxGjXo6{~rBq>&+ikz5H~?XK{6P4fMs>2rVUyf5e3wI+q(U4*PKT}< zs$i&|w(9&~CG+7;H=m+ZUgGSK%>oYRUK1X{Shcemugt|^PXa0ck_+4)vi`tzd_T>6 zlh-%P1CHJ}F1JZ(kP)s;mg(}~VHC8~`#4-rxj~|+WlsIzHR&q38RdgWPp1})1wid0 zloU*9;tc}oMOAB(s9=CassCaz7@ zQm3}U-gLx%C}rNbw50FH;IvJm{zVpy(`_E!?1bA&bWSdshc4`XUNSClT<0uU5jFNT z>V%gCPFoKjqacs~FXJfFBn$;b3WXte3aE_NMfI?WVQH0#n?gOz$%pH)8k?6K-^(mh zMRFG-pZxR~MwrkgUT0t*Mg_DS3v!=&@%Xxhln7{0KX>!CXbuzr6S)^I8Q;*G?J#$L zH`y|!i+{8C9{)yPai(T2^fG%=cUG&FbWlK9?Rtn=969cqWxlhXrH-KS=1{E3iP|0f z(~J&Q*0`ew$!-UxI+U91EtkgBUG!nx&DL>?Tf{uv$IH?eUR;Rjbcbcu`G2%I@_xR; zRNcchcC`NbFi|Na;OMN+yh#3?=?}nduJ)dWBiA^8wCd>F2&s1*Oe21xH^63?vd*O? z9fxyG4HVlj7N+GcJrmk2cxgO6Ub|(8W1nbVF}@c!;G~gpW-sN5nW=uGUBE5CJaXAd z#L_=0HF2s@2hlng=s@|h5Z))(K5eia`{52uPgZ*>f*)lfPj0HZWl$8OpbawA6Ti^PSo@<kBcd72C4T^tn zq(UDCzgUI>(`q#Mr~`c?H#4YOS*bN<%p97kK-2>g1=t?|i9sHdIZ@}*I`ATXVFwj< zw)1hEMfN%oc1v+d%Av&p*qw4qwyaj@}=C*@eXb3oy51(y=5j z95v)w&aOwjfm6c=0WUsbDl$-ZjyfC(^ggvLF}x3N#l=6D2oS~|^7vi)JYcY!OO>6E zNN`T!*66_cOWtq6D}uRt%g^9JH);#5wz~6O z-eD2P&#$$@r4M>c(Kl+OYy&$LE)ji%cZIIoQ3i`a{GQn|WenW-p7Hv_yQ?YEZtpLU zyTRP&T26JUgY&Ji^4VH1tJ%Dp+;5boX=j-kj)Zy|IQKDRT|7P`IPMZC z*u&r*^)l^IMEm**U0+4DC{917OWd1rB|c0O(>R(e^$oUcl6N=)0sB4{p%6ajD;f#V z^I-?1k&SA}jccgUDa$E7W{6bbe>wub;+-j)wfXEedRK)oqtu%*G=ivz3+fT0Zf67LWE#MJ;oqV-4<0N_Kjh8Z2Dp!i7{mXtoq9ZY_E( zwc(MoTC}#yp23)xt+koAB@)cn$-_~P6$ut7Oq0{nxvM(363ca0!rseZcz1CoOJA1z znMgs25a{t@Zy%i;y^Dj8OOPQ~k-98Is;_V<+7_Pu5u7dHf7@k%y3; z@N_qGzYL3F4t0Bug=mfkQej8&b z*z)P#Gyi<}f?J;UX}GxSba-IZ;EwEJS*Uw{;^yo(Mw}JujHT~9%PNf)7tvBda`bs~ z`E7tb+9_6Q`_?V%%x7E-#44iKO&X_oZ|lA~{5}`z{m@2v%EEFi=v*pZZ0g{( z>noQOQM4C-YwEbr0k3QjQ`%uJ449EI%@@K;ePQ@!2=+Ny^cXgWQuBIqTS*)3gcQGe z$~E7mj*)up>%F3Suo_`)Ct*X=%)s}nH2uSO?$Y^g-WA2b`|!u>-g1;*8MfUf804N` zTX$L9%Bst?k#;U@@<1=neon8G%DZb7Xx(D_wqs5g5uQH@!FKX`U?L?&ilZ`@7($Yo zm;l&nH8QZAb^IKQSfUO!LT?7imp%4EC{pedOQbB6n@E|AuQvlg^xk{$0*=@AW8dn9 zs3#Ys^-03yjs|Y`PLSGsl+>E*VqN_v`>com-7V(NW8>}omG7vmn_|VfOzRdePva2o zpOc!7aA2R3=<(yQ-N1(+nf-o7_94g8bq9bGIYVRYID^b&dP7C}w}++E_?i}Xy^#<_ z?IFB~K<)jaA(1QN!)K_FDv!X!fabdH9REp3?CgDUQ3IUy!r~8r>(~{%_NLd==Ga)~ z{gkh75&TVVbx2hD{m^^^-b^H&dI1lZD5i<7ghl?6m^ll06CRdnD)LF0}QLqRS_hLu!GXYZ_eb%%o-==an0t}IyEpOFR;M{u9(zxnC;%$E_;=si#wY-OPLM~pGMnhw&b}E0q;|7 zQ4sI(x<_h!ZRBMpzG4-5eq6^(BqN!GoZ@)jfYvnC(s^Se+R3_vCL#dHPkY38H{DZk zxK^z)K{a-1k@Gl&ua&ogZ)j<HloUiQzNsEu?p^q z3v1PPp0-j%S9$2U1Bd%ZHElZCy8oO)$34S*$@gXS{(?*;youbjf2=h!nrG(>$Vj0Q2hNEQB8f1PXX zGg3zb*L3~1?!q2Zfz&thWE5FVil3)*B$}Ge4_jKQqS&-``Ix?KwDc71X5fYuI(O>) zC>u|G9v(I!JQ@;hto=-#~Qin$nulzg5yuuYMAX~Hk`{r8R z^b7O&#+@6FDS}8kmKVk$2Ye~%kh&Tss<+$RagfXYL&~ ziM*Avtc8FRz{w3#=?Zn(QNqLE^t)H^eXMC6hl0a0iqL*HHlF7ZM%VEC&$3J=#yBdO zUIL>ok)%FPgHm&V+8wr;QR)jluE7f)&iPNwm*?IGsj$^&ce83(@s+jeDlQ*7@6~vq z%C``rIVLX4JV3d1&z6Dl9VY4dT3%O2mgvOlJ_{fMLas(<>A(*5K^mrP#2piJDe6Ee zeK<*v8A~FVyQU_?xYsyg+x_3qH@*YQB%yBxy-smIF>9Ru(23U6PCb1JQ9XHN9=>%RZltvW^H&9p&f8L*@GAy4h3+ z(0WVWvp`(9osxk@CMK;nYk8@@*9@mdBFBF=S}EP}qRtz z&XS0W$=R_!6QL8Dlz+FSp*6I#6Wj9A>Y0~Uc@fIDo;#MNDdS#YW(i4;+0*Qet-1il zVqJdhnOA{-_h!jTE4Gb4vjbnl*)$`A)t*IJ?T36Y;#Ttn$L3K#B4=|mb82}zg5QGk zN+I{Z{s2H}CLdEK-D0Jl0gZA-B`B2*lfR*i0;8F^gOUhNMahA4ykn!}(V;{(HQw(-t}*<=xHiX>5w)ZP$j^L~dDf?w6(B z6gAa8_Xan&hTX-P-9VS;A!<+Ag3j`S+=s>H8aK}n-Az4r@@D7qEA#F%@j5Y5TCWo4 zLTgz~9Z_sR)hr?tnzp6tM2(uwQkn%f?7+>6B^&&rO@5V#TmVDQv=#eVB97A?Q6;!n zD}K0^j9)Cz@KvJSAw+~Q^{``gPN53Wnj{17a26{lB%u`Ud;uIp_RVuR#@W8Hpg+AT zES|Nju_F;OX^r^SKt?yTp%dWe#q|1qo(L+-BC#_`CxI!rCLTH>te_W3jXLgW?31;!Eh-Y22@wCN$=}{^R9;DT zyXgmjen(-jj;X5FeG2uNY2^ZcE{ECYoAK`vB3~xxP;BL$z8BLg;AN$Qig=axUxeC< z$63?+M--MwAj17@(1$e7VGZ{&3)Id}nMQyzq>R#;51+K9&fB3nZsvlC$6qb$c$mT_ zP{d1GZ@mNUTU+4YCw=*!(vf?aIu)6#r*(2gp#WR)hpJ&Uq-xa+)3v?{{?i>f-~?T2Wzzd&=p# z&RX|V;jDRbMvUs|%Ps*%yor1v>|>bWM~}2#vts;=9z}UxLEKaj*~boBX>^ekOF$Z* zE-BFrF_dj<&3qk+y(4Dn$Ruhc^g$$et0Q$#ppaJ<4L*IjaNufDSC%&=QWcv@nhDP7 zW5}j^q@aa=&z+Xvb|D9hStnW#(GiUS)3Fe;q$(M{q+x!YbV^Hg zZdrq--eF#vh9;~UwP$+nv*C*_5^-Rr@;+*;4z;_QQiD22=)$!KrzUq$!)RC;DD6-( zGsPs^m7=}UC4O;fgt!UK*EK=h1uK30DQ#%8b3jS4B##NXlrg}o4)(kVGpKw7x0Tgj z)6+Y3-$xgl&rRzF(0Q2j9DXI881kPEmwpp2`$gg_%aQo=6;A!tiHl$TKL&h}bL$9- zRSgRbwvvdQ608-!GUgg| zlAMN+?@_}zcv$4==)-V93NZ;ahNA1&;x#>$TC#$-(`8`KHeS3Nep!!9Zkb%NN}8|8 z)=%6O@?LM0SX{PQBux-=Z0%@|+hs@THjcMUchQOJ3*o7&JHc4zIF=R-?42t&n-+&8 zALK3fOP#)(A3qwmhkdOA52GjNYv0wg@?;kqR|skdQ|OAh@~?Csy&W#jLyatVqK?a} z@ymv{W>Dj%ArJT%Dbe8jGj)6-HYZ{>hhF))WqLD1Uv6($yZV|Lo(KW3{b}d>?zQz< zxZGpxI(eMRvh0Ek(bi<^1jSl~Myoo1@=?ZWZAPc%VtR!{s>)Cmrd`-sx!TPvh^%qX zwdp-O!@~UQ(+A?cS&TXGb7=@T!thn<`|0ZSyyIYG>g285Vx=lN!f%1q$5)kYN(C2> zX@V~a4zfHJiH#p<$y>~i=$3Bzf+)EW!d3;zLtl*>QC|!QI172-g@J>kX?e3Pc(k}| zI&b;h7E7F!I&e}WJ1IWp-y z*AWR`w~=?E)elih&Zt|c+31=6y1Q^QJz@OjbuzX>#~2^}EE0B+z=H z*P7Z8mSN2u_2$vLiXmMO64G=?x~D1Fl(CD0P+Pj*)1ap66-1R~XKCIIn?-N)o`)BQ zq$e$};P`@EySv%DGn-8J*P_a({J>fDg1JeW-lwf`D&F8URfmKJpTxwRw5;r;^YAvC zGRHanM%aZV<(3m2hNN?&{GsOazzJ%<=4x!ek41kgjV>)UV?!>b#fc)TOXg;J|MUrGMA<6cN_k~RhG`o1w z+=Ue1aI|09Ejvc?<-7w@G$52O7AQq1&69=555k1jPfmrplsWF0_c*lWyi`g_6tcuj+*40va2+c8(i6S!19;_VlBmPZ;+ zdnh#U4LVsNooT{Hbiad%bBJ#w0>wX5xQGs&?c6VZ>*}JZ&^Y%RcQz@)w>x+3oAJx7 znzFXm=mWW&YT1?sD|dh>QAJ~#8n0Dc9=?%nNsT&*O9<>$#+b3CB0Xw!{asUIc)4bR zHoS-5ZM6+HoOS%d0PSXFWW|}^o)(9BWPU$uX0x-SaDU&vJ#XvnHzpiQ4Wu{(HpY3E zrsMg!0!TVFIki>-Tk#NZkSyr6cwCX-y9ci{}_D60JtU@xK zfzM5P>J!cDHJnHbUBMlht7$c{-OpHg_3k`^KVO~_dU~7zSGTcL?3V6sIm@lfb{dia}8EyrQYXe29|<4Vh2V?!FdZt6l;0oL{vk5J}$S)9z>FaP&T5h z-i#d|ngk@$yJsDqfaw&j>+WfLS=y6~wCAThsAZjeu_#cXCX#X1+-QcI(|xY-8I3+Y zY#%UZWT~~Gw^Ize%$UC*P&2)}camN_$SaD4Z_TPri-fL5o@ab7OXvmCUM6 z8{DiFLZcb(f8$Ma`=)|jtame_)8q0L{DD_3ZyPe9Rus(~&;$v;5i#wjpw8fn7#wBY zFy10&`&6zqQ@t4MwSlO8;Ok9@)lPG2kgu+cZ}oZer7AwCpqgz#Xw~9op$jXiY+H4GVR@_V*nOn89U@I0oJ?Jisy9<9)^h|+@Bs)5rUI{7l zS*pQRB;r7C&LbdHaHqBkart2OtzT-n;=aulkE=}wP5LO0+TCxpxtp>bj@4#3__Sxu z2d!GM{X?(nZ4W%c$VPQ1EGaYx7uZl>QPaSe+;N@e%KbTmlJLriQ4MxCW~@qp59Gkc zf5%ww9xaFp@~pW@82z=x-(-wqNNMt^6TIJ7M5>hHGU3+%do8%E2j`lXS`R%Q+QLb` zJm+i1kJ8Fp)IDVtyC~^HZLG4fbh)FeI>}dwPBXwSMJ(QGO^9Tv%5O`oG}~_iwXI26 ziX|VLR=VTs4^%qc5v}6Dj;|=WXu9pznqU5Osr{g;si>gR3g;(;s=|G)=!laREDPPm zT78o3%CI#IwbPwxBWp-`U-gt{>VAfP2O{2Ut0=fj@Q fQmNZ+ImrqR#6K+C>xEd4XAPam& z0Vo&Bx&+Q9i6NhhEVZNy#Y_WXXJ!(PLcBa$$`%dRl(8e+7dEvFUw$%$8k>r(yA-$B z?!TYbENibR_SRc`ui6o0Jz_uEYK8lBQr2C78G|hh zzpFOLYR`El;wfC~bT9aL)WJZZ$;fX?nHtN}P*`r};PbM7w7zhfYqbh6Uv$r(g8iNXOL0?6=a+zWEBy-fhhp_;{(N@J%h(jA#a zTJ5^p3>rAA8PHqKweW&l$yQxPr+9ZKx0Frqr|0hD9W+C1dFkXGno6nZggBkkW!>?m_uMR% z-fZV48xM}ur!&5UbBOxVUG9%Cz_Snf-IFSiFdcz*j)+_&royq^!0%u?Pv`eMJ{ zcw~gh2N=tq|DsA)7A3N~Xw;L{(!qb$xIB!zf`(RJ=@C&T?h6 zAufA@jy!rVrG_W@+13Df?z~}^in2wF7k_#&|~ZCV?wlX zBjqM$a2_hbqGgXc83@W*ee@{Fqq;J2RVdZ2MTOe^s4PR&ZGz`<_%M^LLb^U)_YGFJ z!ec?^a}ByYYjL}Yy`@Thc<-}RMym(pApaP>6jkCjM9mxlM2oz@M^XfmaY1=`x40N7 zDPvUYmPxdbs<5}c1`JF@i6>Z9v;oW4Tf`?<-p{@jrlY)V+-zL{=jHb)L-?Zm_wj>! z_Gy86V@1UDqRv%7%=5FPEU=(iT5`jlai?&*VrKOA9oRWI-%&G~KH_u{vR{|Kd}xfT zyPZk#{;pJ`*%PsB-67PY(1F$k4|ie8v|eg^ZcjQr?KQQof*$}TL@hH57_-W-t{4{> z!xMW`mK{LmOC}n8?iPEL;cb$XNELGu6}jWS08g@gUJ3i>mlWbIYdO;9vSmAk@6o~O zNVz10t%HX%XSkg!wK$sS zJpk1U!F$51LVyc79899Y0-NW1#rgCYgg4Kags(-W!TO#)G@$4e>8zb0`)F{R+T9GW z`j{L5NTZDNA+^Bj6fQPq4(^xfA2k#HzB&0Jk;Yap-)+@_1TY;!l!3kpslxHhTzf+I z@*To z8=uA$t7?@XnV88wXxo=7q7=akJ@yP~tOnUNU3nedizwV8zUs7P;?TOLxoYQR#w|1R{laAg zAvWtR%_IrT)NRL+i9|(T0v~V*%Gu0QLVGh>%QdXj7ug+@sa2z`H`V0mBp?O%axncY z^G>0&VQ$VWy(Gq<^c1`tx?kc1O2l<;d&8dnoSk9B*wu6SgSLD#UHX-%T-vU4GS+B6-pbG&EZ|1zmAIeY zatLYnPeiX6-~KpLvhpVTJA2a%WOmW)CecTQLxYq9+qE?zY0iu6HSz&myAdN1pE+>W zb4+z#zBowvya+0J6!zUOG9)ZA|1MFQ@?sV^iwp&dISDHPrFkq|;qy?KOO*cR*T2lu znQbtqq*=A%kvFqZ8q#VNSD}crex;siwoeZ1 zB@8$6(UZg~e;0Lr$jafwgh!TPY1#1Rdyx!WW!&e!9j zXp`vMm|j~j-|T|wz@p*2a}0@;8O?qtXx42vImMG+ZhfxwAyHsV;j64FUA9h~&~7zu zrZsS{&c8Z;DIdKU6p_&EQaAgpby7reVNzfiBTwllOmm20WQlG^%J0h7lOTv=o&@RK zN8Jhck0)~O&DbIXc`X_7XxHWSy2$mpkoi6Egjzo=CAu48*8j=3#fl|IQDa5undFuw zRS9jAw>6y#$h_|Bm5(u%!A^z^MdQz&Ht==T4-pD^SIL9zOioxiY1h2>(foTl)Q{?; zsAHY(7FYKYO;lu0KTuMao4Z@0J1mY*!PhZ{%4?i%HtJScoz8CO->I}>a1~YJ6&_~N z4!T{kr5zO5=sscYa*%&z^IOsrhaZ51d(E-~;$$DGUO$OD`0&lxXr}3HLTvRA$?Uzd zvV#I#%FK&`p-lv8b_yQkvo{(4luk_}Rb=|+YU$O-`YAsE$V(|JG-0x9HEeHnqHi(< z7oX{Obf+rDJlZ*Sr^8#?S-`Fg?HA3uVb?yOjmWnoc|_B{PJF)l0|1I4{IkR(1OcAv7qBK=F5_sKDqJ# zP;@T-O#fdTS5YJtx!-b`yGiaLmHW&kciUXbeb(lF3tfcVV{AecHut&if}xB1ExBj2 ziBK+6C?)0l^ZOS*kH_bI&ij2{&*w?u=e>KO`aia}fj2%8M1xrucBJDCzQ67@2+6 zT%mNg>T!VzCOUN@9=dm3cDPK~2o-+7zr&F^t1IW{`V{}}wEy`f%EglvH_&hNvCpE6 zjQItm=G5Pv;`0_cnwIp(x?rsNOa--*%tSI`o?A8eqCuk9(r%ZDXdLbA+*np4ESK19 ztFhwMmoAL%8=d>!knbZ2Gyjl06#>@1YI>2Z*<|S%^Nwt9Xtfd+i!j5?67AAStcBp9kH zK$S~Cx5CXeP)bw-gfN*hL7R2i$ZV3`ou3y*Ka4PG7`;-^Y4nM|-~0r9FL?N6F}L*% z<+_wJ8Yer^gM>C^%i%KDRR?wR)3CejO|Us6H_@0og2DwC)dTtFjA?u#z2#}o8&}0I zyC^@t`G(EEI^=aIe~O970`+sO_%`I?Q(8T5Q@#2~;_2Js2Y<#cHZ#RqZQmv7vBzQP(3zQd-la$tEbG6IZL z-h@pq%|(iph?y7MCO&nUsXu-bXHmOUY|w7qQ*pt#gese( z$Idp8whmFj6N)DADAgIgc1lJVMj#sg44J|i)0&~wz8lL3h8P1xBReck1esI!!T+?d1xzH12h{@LL z(Fo-S_r1neYWR$_8;^22Kj2moEo4b5nL1h~Y8ovP-}NucC0X!4TYY|8?oEokOOf#6 zD5#m+?@4;~TjGI3(8l%avs-hn{)?_H4Ca=RSRMH%2(AzuNt{baphL%tTWflWX%2KtqmVPSBd^Otbh5!$KMZ*Hh#wxcv8Rr#OceEVk;M*U%xdB zMK{vsL6PNO9dAjn5+TqH%DO;Fe?6ehM)H~;6#;G%J>}*21WcL;vK9!!&7w2&p&$=EtKmO^tnrT)!D|In#B;)o1P&3A9hbE%gq{DK z@(JK48d#?BcT>eg_TXl-v$kot;)#sAxLfG>8Aj5z$jgdsY*vkbn%*{zs028(rbJt|wZ2_|V zq7`q~<~`nB;-4#9@0RH5EMb{dImXs+sP<%Evi-dFd zPF??9&y1<-y-#j8{DXgARUaht#i?yhJ8Dk*x}9q-cTn`Nj$$|Cxx66VP2i9`dr5i0 zAf_^=ZUTe;h?XCZJO@d48vf*Z!Z0%a_GuRJahLLzp}t?tF4p2 z`ID{avC786mK!N%H$OE#cdJ(FyvDm*=A=<4QC)v_8<10^BWp#WHWfROx~8{WOcQM1 z4SzXQ-UlbVhtBfY!aQubW32Gs`psW7c@Hdbvwix;Q}KJTC1sVii8?}A!><4 zL@O4>y;kEy=AN}v&eKBMgkMbeT@aX2$9>qgS{Pw>80R5Qq~Ws_?gmjbI9Z?Dt^%6O z_G`Ea-3RBa-xdP=6je&y0&H*<(UPw9QC9D_-_!Qt>xBBBlbRW``z|2JJYr zHiu9cd3-dA~BgFvTM|%vbm$!CID2eIQOv|$xL?ex zq^5hZEmt$uRmJZ5K<$}y$k&ekQ5cJ-mo2@Hii`W{GK$9#slro`J3k)Jf9b3 z|5_GSzdc$euJMRZ`)uEQ1zS$lq|s%MuOArWr-`VXF@*4xnv~m$U`HbjnaRgg{m4fL z316k;l!sD(-8;`-q9wPrp&(}A>DNjs3IcAu{7eVS204%{>u4a{$~V6UFha*>YZtjC zVC&1X8v)?)bgwg7UTLDXIs2l3J=i)|ofeeQm4c~e!kap0zb903eMS&FyJEKusjJx= z>ZS+)Hto`p`0vJ^IZ3g(p9zA$0^6FVQCr(57KJrTjOK1%1^^zZ)X?8*a17Uq9@W0~ zzL81p__g(q@K^qIcVWe(gWgYJX-elz>HavVxvSWA+R?H-dyOHr=MD`jD(TQ(`4dN1 z1z(aiyqx#?yTh}@em$+%LJKBUn;&2h5>bb?6{Taxv6Uf#$B5PjouL78I`(xRkJrt!e&1NbRfd z*Lxw;<2(|2_N={)W8a-RbB(gJs+hl^*8vXiUC`91fK~J6dM`xuMUM^h`8CoMktHur zY-*mmNP`PT{YgkP6iq0>X)F+kytrSx19Ge%uf}6TLn8q#FILj0VZ$uB!ET5YEC$O- z<3i4(pzCWL@XtjC&l$)`rs5J>sptJTz|#q2;Fs08F6d3~9i_G(=LFwI`CpM-c;s|( zo@Nv}iX0NL!|I%U)o_XzjUN$j0yJNF1iF5Dc6Y`8n)9q-5QiHonuckj! z?jT_ZCVv2J4^iB2?8|P`H0QP7;VweY%rkJvJSNjW1 zR0qu+)dq7L>%62(yW)8jiF`hJ*~qPT5B9b@f_C1Xwm%6B7W2H~fmGOUY^7-Iie}|u zO7eo{kW@3o{63@3%S=AIpx5ZiOs7rdZ#z)u6AL2oJ1UWO8r@-=TeTkU{^r-5e*T{n zN+bfw(N8^|&3d%8&uEKOb)q?uTYpzmW;w)5g}W1yY<(oSfsHub^ucrtTtzV%yh zUlOnsX1~+C3VPEocEe~ZBt~R4=F?0u_SVDAI#z!om~MSJA7t**HC@p-%!> zLOenHiX;23ZMq;~w_lxW@)QfWgS5uG{oNtqC->ig7B+kZ$jr;6cAKCCP1jcR$gL@@ zf5sMba+HZk39~ORt(&P$6F-L38s6h010KdI?Gm=xr`C0%?-LU_XO^B>C}YZm+pVmW zNMa1Nz`h~#E0skgI0WKB`yJ+xv~b|0U_Vdto6&kJ8@g2fl&mwJ@OwL z&pb57&U8m3rog0qIuaS|KKbRl?`7K4UYYYf} zbQExyWxl;GUyn{FMqGjZ$L8OItToXoQLBlI_6gLgqkCAzIGR&o)VMn85TSyIiPV&T z$t1M5-9=F8F-#fgMW8-w-N1L5)L@~bz3y4 zg*SksVxDfg<9_|a>v`#}QiDO&&N_HybRcv11h+fnRra+C&4p`WfGmD=N7j_pd*um` zR=Y$oiBU{NUID6>97C!=22%swO*!tXSQ3{l8O-fJjh-}k}}KV-eUx|X@Lfm zN=L#~!|5Y{OMSqucdFzKsL1CSc{|1kw{))PF%i*a(Wk#nTDI|E!CdA@2LFQXOW*g8 zShrvg9opkY8e8DB$S!&%O9t1{IzIxhNV zZi?K)c(6=esTkX*FZ>iiR~J_yY;*{iV+OYeW75al{nBGDkCcjd-{Dl!Pc8Hj%Ro62 zUnpCl4AID*LU|+B<4U^HdTa`TFaVwI;#942Kn^#kKT1j=I)Mwl2 zTsm*M%D2d~ZGK_JP2f*2E#|tVHa!)-+a(@dc88bpHcxa*KI8L(yV3%Zi9DD4L~C{= zRtambx|MePN=we98hVn~CWVP&$e^PGEwDw=92gw#|50TDy9L4d97^P=2do; zBD?b7*8q(hqti6kqT4U01HfF8j+W5k4wIv+<_0hG!arpc0Ec|FNCk@Z@YJeSetpWAP%qs37&rj{0<` zSJg-S>(oxLUpO#1v* zH1$UP+r7Pa^+@l6vw~(EIjx2^C2j9P*KC#TSKOi@wvVFDZYvphKo~7B@Jaf=N@k#Fpic({ZeO86A3fWrjD3F?tt17x$n*AU zd+I&cU?8lv;rs&nbQnL<5$(noie?M%KXH(?Styg6a|`9|<{dcQO3YGD@rTH1c zn>kam6{E_NvH-x21Ow;SlQut!BGwor3AH`*E+9|Wn_`>SrrFzzLKm%?)0~}MmemXF z)#XLJReO8O8-A^}fWEc3WNqcm1k&RE9mXwCTGm>kf^DC9ND!koiW&5KJt>zJ>HTMJ z#4N?GJ~n6(l6v%oEBWr8nmYeIsYg%syuCu%d|&7ctO(L-Z?gRzc58q1?o$doitWxP z$=WS8o=5ySVVnvgD<#}22H@(SB5FVN?%`UdvfjTG-=B*H)_VZQURZ!qEP1iB{$y+% zvGmIb*^d}lbW62qn_sJC;^#b2oAj-2ySTgK0DV7_G=sKvSVPKvpQjxX2zB#|z?3ti z#oQMP45A)A@OazYR^x4MA)8ZKX3#FI*Z=P3xm&VXeb2_w_^{JnYylx(f_^#8XdBqb zzyI@Rd3UboPyDQ?8F6%6ve-wP^}gzQa?932v-VFGnMvx$4Yt%0&2&%TB69!{wOYmENd{Jptes#BquSMFAxiRtu2}ot=Ud($0 z)fK}SS&Qj)bPB2E*oE#R6#Y8ToNi)>K*KhU>29}}yTnu*{$SO|CW9XeeKoA0F8VXV zpn1K3c4zX(ykA#mYo~|jvRE1^L)u^M%sg?kk!T_A5{(Syr=)%d0Y{r)yc(P@v=NY3 zXZ|Tq1k3We^IjSYM@5590W?xlu?)mjkZk7KHBo8t+KJXD7qB-^-BsYea>}3}aA-k; zQ-QlVG12`b{}W>e8?A4Mz^N!OMy??ZP*S?yFo*Qe9`X|!6S-bb4`LA)=)o}Ro=&$) z$@#~XLHAjI@4I9y6~E-$&{*%t$*`HK*9LEnyhQ{&jEg2D6xgB>DaB?jkVq~-pbeo5 zk1G(mYIxBw>q!$*m6|5SW@I97b=v==oZnfG#Qx71sa&)rfi9NtV0hLe&d$cAe^}(p zl)}swba__Kzr7`IeDa8KvY&}$zL?{ZtNd~aW;wV-V47=LlHI(W_t0Oh$2GZlf!31l zJSd@{G*fyHX|Q0$mpA#Wb7oQ4o??{*ir$584JDylVTc56m`FH;3eqlzF>XYyGa9mt z3hq<<>wEX^_@R|-S9iB>_Yd~Vrudy75v=(qMr~FSXjVqf6VGnoGCKt#I zNZs*0^vBCUIrqi;V`5i#mz7QGOI^Nmreo@(LLgq(8H7E?Q<8^HU{#i?bma4~8gR|6 z>$p6|oBgkKf#f|H&aoNog5jrw*Ne_P?(}Gk;qHabJ?+#aAnr#!T3@~_?6nRxTmAPk z*-)j@9sWmu^Zvr@Y<-dKamfz0n?mm%xdC}teK?tAl?vhOS~cyU`EWTQ6#zYZSa)&` zHA`6u@j;lYXUb0tK&NZ2+0F(zJi$^)Bcs@Yj+VXMkISySW*2FKC$zGw?iAgGt=^;R z-ENR|XyZ%beN@lwvgLS;;;1#klcmE|ELkQVRez;w*;qb|75jK_I2iL4Aq;@ zHmMd|;QnY6*!l*5j?FD2QQlg-h|Ow>^;vQ6;NTT|l1$4W6_#_9FFR%6)1_X8sr9hzvWB z9{HP?K_#)H)e9c)YWq#+y`Dmm-0RXfSU{{Kq*0!>cy%t5%Y2w zNN>@#Y2hl{KAzp{TFH-c}>2k$@mmvh{Q+C5(6 zeCVGbv=rUjnDj@2C~5dR!zZAM<{p!{#-o2-=LeLr9x_lHxH@LNYwI4&QN^4 z2>_|%_@m@jRELfERxC}Lum*mZnfqb#P7hU+4aljd&I>e|Pb-ePt?6*2qKak$QbWT* z(8F-lqGqtmA8K740Nvpd|IuCBP+T;r*a0(zqIEm3Uq_DC(w*bS3Jc>+=E|ZTjHsqzOB+iqMJ9FiWy)Sw*GSXD%(D=yuc!HU4h7Cxfo_ zzljDonvvZAnYqEC-E5B~lEQpOQye=4A@)3eTOL1WzRohB6Y|B(xu30550X8C=Qmpu zt|1%0v~+DXqU=VbQaI0Y><;tC2g|PJs6DuOBCLV)&O)*t+t+pIiz3aSOT|c;FRTu; zwW1zqQ#Okw`L~}?^A(?yrRyuNc5`q?*_T)Ej-SJ% z`Bu`oRomGx7kKr2;AHpq{x?K~2XAO~vDE~e;Ep}KN13XfU1x6ZYskYLPM}av=hgfZ zETMID%f|fxo#vsC$KL7-NpP~X^8x@QCgTihT}^XjR}sjCygIP;$mGas-7zX z;H%NLz{Ma%G_FAXWRhhydc>Ot*e`??j}2khD`F+#7splx0I#pir}wv;otup)w$Zp- zodpd@yt1`f5e)F(URrc^EBy>^%4Q%@-a17o8zIWD}@&+kSCq>C>OaD<4J>ZJXO=M zj?;Le1?xKKAf|H0*Go-$)m#dAw&S416r`)6X<+H+?+q!mPrtX2CZ$|V(fu{I|KTCr zvoBiy8J-@fFGpY;7g_T2f@oLEdkTph>Dp7cQWtpRxxVFY%+k46?8BHPY8wcD!%vNO z8-EKpi1o`hxxNW#O)FYni_~yu8$qQQH9sK$Tu7u6w3V()H$fpT()GiHb^{r{ z85{?ztBXLQXtWWtC`dDw@spFMzc@ISi-`T;R!@n#z2Hv5?USRC+I3wk1>S#Paf8cQ zkl^id!PYkuHmU)@+=_>4&M{x?7%f(KzpUw3p#W3On#>xAH!TzIcIP7ZjkP4x!TxK) z@!hca9f3PN_tM)l`)|gd$nCT=a;3Z2^ev=C>2@Y=SeE|7JB9*w0o}gAT9mVszBbq3 zV&hr9{;mc04@%uWM`0R%ekD!n9}o!@lVjS`GPI}(kGifoWve-m!A8keJIo^=%nB;% zTP3}Is)cmQy?d#|fW<@D;IqMh{mzJa>fp$c{H&mAc%RZyPOmp3X6cC`itC=WjKmy_ z`4~!LtS{9^?H4$L0t{W#f;oQN?(~eKA0+Z}7U?zeIg}4?#B5b6MatZqT6kJ|v};V( z$?NJHZIpPFGG}+OmQtiO<55P4Z(0u)RZqX^q8DxMdQZuKHY7#D1}^3OIt8E?r<$(o zXSBWYZoHH$UMb}NEDXz5&DIT5ng13YMX}W(dhR2R)jpmbS!DE_E2)HurNS3oE0B$? z4@T1l7a%^gilBVc1F-z$D0>z)BI~I+;OfG#@!gZ-)lj+QV-U83*bNQ{#2&qiYHMvj zaWU=Hv6m4pkk9Uq7JloOixF@=4dK7ug&%$kKP!YCHFOMar?#bL)KqpJMPk^1F3l(UxoSh+f?=A>&{@@>UX=^FD-I_s zIA8G!w7FzQ=ky9PmI_AP{Puhn=1vVpw`W_L<~;X_iRw&KxysvlZUH(KC--F~&uYIr zorbFaX$`hX&_Wc-m+a3qMosRuh={|rn$2WWc~{+v!Y_5GqUPg{4f=Bz#C-s@91lCn zxCKX6vehq|$mFi#9MI>0p|Xa_m1aQM*n6hl8u3_8XWt|}poTE!>`M(L!@(R&0axDB z3lK1`D6W~qUeWnZQfvRJ?Q|0`%H+$z_sc&XBlqvDq6#k7zYN?>l72AKWAZx2N9l$X zd&|1;CjTr!XNE0d zHB?IOV|hn@E4E>UK^q8P-6t0D1~otI2JCR8Zr#&h`HJtZ7JXb9Y;zqt zZN_JIEYQCMRYj}z3H*F zG3?+Hsg&XcIN5d=@58P!9uS-W!0z)zWyGoKyhODpD(qHtc9AJXYZGcHX$r(Yod#i* zl{%TmdduO3WL^N_6Do3zz<5UA-Zf1>d$i@>*Ol2| zw=HViTYG^C>Hv=Rm4zfnNu`aV)qa1->3uXRREZH8I&3DQ@)ltbnhWg4yAkv4(JBWe z`PCK}k%{eoS@MIN1#w&0F?;=le!KNQwj_BkJ_*Sy=f7$&bu$Yrp1M(YG~l!9zj3t6 zEb-Z?KvyH_lnuM{W|4+}aQecJg7QYHfxY9!TEC8&3+JR(uC0jTxRC@6hU{aW%=;x< ze@eFaz#R4A3#j&3HNf6V?yB4%w1vytSqir6hV^ z>$^tvXM7&a%qUyuoByAx$Z~R(R-G}Ig8XduE{QpJ|0g(M&ZHQrY(Tli&+A4rL$Yro ziJztVcKc?R(2#~(M}2Kc-~927UAq?qxN@dY%RihSl@7QS^>suY?wjMu(=5WO z;C+>bi^vy{{^zdadJO_N?79*|u3y}(Q;C?Iy)TZr+F4VF_pSdKG?%d%Ft5Fesy%{L z{tjCU`%s$*#(eZ~VxF@YPd5Bo0`+%T7kAmjVv0u`0ZDTYk*~(%-!@2PFI#$(Ng81I z|35@!pK9m;f&_f>Ov*f&0q_Yqhb{=fTKp>EUSbhjXgKVo3937oCf{n|6Y*gn+%Rmw zU(Ga81tY^>2ixr6GanyF{I)YHlK~Q5 zWT{iG-hD8CqO+~k+*GIM+`4L-2K~*5vUEVqU|NpB;mr8fx41H3QP4v_QU`VN$3TH) z_MdkyiQKGF(GBNza-7QGofD0!R&*~&-5XTqE4tL57YaOPhsRO=at8ikvd%V(H03gf zFTPfxijua9sIi%P@~d)r+6hAtW5_efHVoQ2@WN=>r$V*;0fBP!i>7BS&O!!iu6Nb% zd2BfLTwl-Ws5>1vow_Z3!jSw?#@CC(TsC{jCr!%DLFpKiR?|Wwzv5^;a!Vn5B0f5M z)~;&r)16Ff9~%E?Om-2St*CUNm6x0MBDN+}gwYkGD z%-<~`j>OH7I{}AF{l{Jh?`tcg?6cJF=P!vKD}wYGilpNK9O{?L%slkB-ZG%( zeHbyoaem%bqX_e9t74S0Mq*}BgUkQ^c-eyug}ziDk}fO_l$>>IFuk-OXxKlR~wIcVAB#DSv-ZcE0r?&!~%kg4)s5=(~{tet0foiTnwGYuI`)A4Vvue#)KG zmyG^*48OVII}s^+Jki!{gnuML$#d++7Y9)kMh1@~S2`s6J^m?z2R}2iN9}72j_^Eh zwvhWwZGR^EoWss-is=0V3HKXrphX4k+7Q$VJUidxUa^#PRp!?NI$R$7q(Fbd8uw^Gaac0}^h)(Tl zn)0R;O)T0@HfV#SrV01Hv?ucDi?!b&sxMscltp-vw+zgNMBb3aPER<3`5Re$JcOCL&O9qX?84NG8X>GB% ze{nY7yD4R!K`x%0LhtK=+A1TE6wLB-M{8fPCG()6lPQee^Jtwy zl5C77hu1b8Kdf{#p%0xs)F$D;d!5%CiLN0~(#$mP`mdrRva0my4H5TP%R%h>opV+8 z-JR&T+3AKg?mEC6kG~oqKNFukPZZ0Xok*S4yPGB3>!?LIJ7^l&2`}qg>N?dkxELs@ zv;)L3m1dTBhXQF)Pa=3IDa15EY3Yum38Jo%)D^=WR@1bW=|}mKCVOpL?n=WrX%OIm z6uOo-A2gE}?LKSs<35nbN71n^CE0354#ul+Hl%87_%r7rXspi*do?rGy%yY@deDW0*h&`?yv zhaoA5;2QJh$RQ^COGK$#n(o_G41*UQJ#?--(Cwmp>fcH^hLyvEO>{@cnq71h%lFSW zzh9+ClFAyHG7HeGt@@5W4?3xYV)bWU8x^*_@a-i+&=L<98!a?_2gs=$NaL>F6W_YU zUW(4amv~~n1l^5#s zcsX}=k|ys-299NCAi@KD_@lnli(?vstERVKVZnjYMXa&0(Y^*X-0=lX<(wQaS6X~N z5w1Rn)*q3&C2efJewHJx1^4M28}=RRu>Q8y$X;8aMd2=k6^V>3qRx|inFS0eRf^m^2?=Z7(+6T$W^Wn?`u}bobkwG7w^n%5Qa;3@RMd?Zo1Wo zQ-k#GYLQaz)JT!D^i7Sr%*0c&`dik5?E3!dVj(KK_a8p~{5yPqobPhlh0lsxPZR$- zbPMIZ{je^iJFt8Xin#IQlBY-9P~r^^9b#@{TIJLP>Eo7*BuFo`JvcOb`Y89HfB*~otx3=RxC1$1-7pww! zs%wlmI}Dr`(Gge#pbzjx@N=lb1Dk2S^N@!z#Utt`@-eD9XHE^Be|7SNc*|pEx8~FE z^lST$kH?yJR@`ds!*Q%}JO#+kLtvK5Cn|g`wTw7nM5mXt@4N$x}bzYW0Y@Tg^(&MYCg(+~Y@5%KU>1 zXC%EFzRuV^A25Ivs18O;g4jOs-K6OT_EHBOFAqE2l<1Mj)68_&+dGv53jDCvED_2p4V`Mz`GSRYbzveWgOL&)^ECszbq&fhMsuS%p}vqnm-yoPfv9<}md za~|10f9mm;OuC)JtvIrktx4JyUdrGC+`)6+5y@Wj)>TffFr8TyoQ?|fDF0zoiP=A3 zG6Lr9Ov~gOFw@Zca)@J<_*QWO7N?v=1qe#|_?&~#SKs#}E!2kaOZTvaIH_?Sp4oT* zy@>pt=eUzn(D)m5ML6cda&)5hm8X|^4K=RNZD+6iRjBa_{Il#H6ArLA$>p>Lf_Z##DdwSa`Dt>63ye;#kB=08J9>Bt#%uk?oJn2&j%^LC8pCaNJZM}JE79rc zWnS3vPY#Walq^0bCK4QNy6mpwQ$BT+Eo&>>#3MJIQx4j~$x z`~yO~@XYh#gqky}s;&F=_p`slm$hyi`^U15E(LKPKQic_`TKBZJY~_MyYTYK0L&>| zyF9;>4+i5g>GsB9mMSZ}nSi1BS)|iDSE7@T z!WIA(G?*D)nME2@A9E*z>wxrQK#2LarN zErz&EjaLU;w@oNJ7ll?A4k^J=PCQMgvN|tv#os;{Bb}^!u(PK+BpMr97WR0>ZwQGq z)~U0!%sTPFCe7QPf;bJR22iAGq@*9*ev&Mua$*kd>~~V?(PPZJZ>Pe=Qvkesf`CtI zp>M=&nP;)Vb9{3ck{<#>WVFNX2h|@&&qV*VingizY0J1W)#2jVK==IB%;hwAL!*S6 zaRrctV*}^FV!btLbw4SJILpT&V$~$P(=`F5)~$S!njON@@Gs$jOlqM_x^;4oINRfw z{HtlH_s((1JvKbaugHcS(fRU5Trpm`nTJ>~a&IReG<`uw&)2KyRDP~qfz(^++iV_~ zLNC?!6ZtG^pWfbaYc@e-Rd#rg@R;q{ed&IiZ~!5aQ0($6;YtM^9P~FsCg#;KLVV4C zuc~cN?Gqx#Xtd@es~G`%Wi+!k0-(sm4EJzJ8#ZITl*nNiDRr6&8z`*o5e?6+1NrrY zi2UfaYR$zqCM4zSvubvk;V}B>^dgo0xZ0VY=>L%Jlx}=!_2Yn={ldw|<$RZtMEq4b z*_sBJ{s*Z_CHY19a+8KNW=eA988F5MspEJ3kLfQM#Suo_aX_pNDfkU>oQt=edl1Bm zvq&)vjjP;%dN4Zk`pK@d7cS%)HX*UJrE}qBl7Z&355EJAs(j z_HCEOqi>{=ShoA?zPVn0vo$eLP{|DJw2EU1H$CQ<=xoiwuA2XErYuW`K;*NvP}LHI81sO z+qRl-!F+abnj74HKQBK4CpWyps7E7JphL9x+v^cghE;h>t7*$35vOAuJA+nS;(#02OjgweIGweSx=&S4y`wD zed{OfS8u&;&NN;Vn9R=fj_5+0r>LaNxcoHrUb=%Yy8~#Hqu9U4e`0>4#t#F59yCvE z%h&rT$#IOH))oOj?c5lvbUj!gu!{szNKghxM|42f8)L<3A*D9Xsy%NH>pqJ|Ian<% z@A1VhADgED1i{|)=<|aPL4i(yiQ0s+k7gn0zP0vNik9ma0KS^q{FLJ0Qa6axb0igBIyKTG{Z`C&_06&6e1#)m0c8K|`R;U|c)w)^ zwdKI!sF(S1nQ&OX!b=Ti-XM;R?f3L5qBy!4XUfi#&EJgWQt0HU(zX zS=ep2;h2=@RwP4L8z-8)qN{Q&M~_6_Jr$(8HhZlKtl|dchF|$6srVcQHJ;;z4XI`x zPk?#NeIarq-ALnqEZ~;s+8T@-oKZ;F!l6yz9IRbf#%3MDn@}uMnH%De^**st%7&Ji zZ<O%q zY1wo!L_cZ5A8asXG$2A1`Ze1?W!p^Q@pbKWI z&ra!-a7@DT&5AZ{N>{65<=Q&md6?<$hr1K^Yq5`k$;{~|tGv?k@{U1DjasmwWl4{& zT^P91UF)SU)mgLGs^en;d7@PDv$dM>4T;k*P7#sRSKFTa~3`_2Cn0n?&|Gv zi07Z}^qTLssc}Xs3P9XTd(6RNA4eSqWat;)AeTnG@8jiEfty9KItPFnF74M!t^#Zc-OineN|) zR(t|%PNmxg?-lxo%ElTL-^X1|>*8K=x<8ku^&i{TrXS^QxrIDgy7X`>Fc$`c_C-uU z!Lj`M^o3VxUa=bONwQq*E&4wtueT;H_T0z8fIkL(i~6~I&|J%4`iKP@B&Q#-0dOwy zT@)Wvu@E;7gzEjRjy@_e0rr5EW4=yN|4>6v`ue%)NGb!mF$?WtMaBE>?76Kz#eh9= z0>wl^4EgXi5QwN)ZTkT<@W_%+nRhTbK`LU#o>OeDmyDnc0Vb`ct_7fP9p-5jqOW0O zRX-QZ{Jk8De~0{0V$Yo1FffVa$uC7_eK?6I2FL9Li-(ScuJPvrQAnCFPUHE??mW6{ z?X$y7L%hP$LoT%^uVA#_K5jE=9NU_6aVN@0m=+AA_hb zg7+hY_&6Vc)?B`n!z0#9$`WZy{vBwJ49917ZC8f?VWyyTr`?%*J@rKqiN3qr1BLfe z2Ti@MsOm@(v{}+}H=;{Jp0%P;O2bN?`wo-q^WOr=ML(s}2(~tj$u{^iYW~YFJEmsm zz`jIE1noP)05lbm!E^sQ%(!J5Kdm(|MXaN4{&RTurH5AQ-V+~5xPH8Z!+l(t4yqgo zuCWM3jmN6kpj!HU#rcbn$tBbNCgIV68?9|qa!*)S^TZEPe%9K{a53|@<>s8H?Yf+$SaV!E3RW|0l}0>@qg-taaE%e6Jb+?jp4zm0 zmDNZ1!5ppkY^vKevWhwRk+)B&u;11qegu+~wzMimJzuI-)wwnP1&C&`rUmc&5vH_T z&1#NU3=qmD%W~1XyX&eASMFwW3F_oREvrb{sbufTzBPly+><-0sTeS9l*Qkp!Glja zexpC^XFuASRM$5TD7}m}D^heu>-Hu)nESdE@V?`7R`g*n8AL8z-0H05JC0R@3=Bx+ z?u{;=M@i4(1_IhASeHO5o-_lJUmz8z1^N-U2qV-n=SdhwUn`jB4Y?i7Ky9sRLKjlS zds}IPJI6bUf>npupF0Q6!%n>_oq3h!je+!5S`TvCDGTgQRLD4oZKKKYz0Q)JZ=AlM zAnZWxF`@=Y++HgeMy$UYd`jfx@$M_K482Z7WWrrIqX{Bu3}DRtm9G6A*RS80==+k6v1CMBv*?<%iQAVI>UtPv^N9#^gA)NyCSZ_;_bGh%9-O4c%vH1~U z*=fw7`T2%oxZezO%&mIdshFlqV#S4RGDjHeNF*M8!{W7{9qp9U2V}ig^%cY7E`0&Y zw3-cLw($C5@^av4)7wb?2A|gx@<8>1Ei`uqxFGxM2+FYahXPArdDAZ4=+usOXY<>; zcdHpg0G<2DsSQDgP4&0eNA+>oUl+mAf!Qrkt7q(uqHeh1<6VqOXI7uR8?(42srB7t z<9;Xe{3L!RVoa$2{!CU9#m92Ob5}9A(_XM3I7}_Fh82<4h(ZzP{aO;B%S^C=sXWWm zj(8+v^knIZXw3LqBhKHs74c5TQDtqG`N+GMmm-jwkcl6QsgjqP^M!KdU69*xdhziH z`f@ugyLJ9zmUKg^CU{ov9^M4ebXFS_&8-`UErB!=t5j*y3t=1N?HxXJpBK97w zwyO3BqBV=yVkWVvy{RA`u}V>Uwu-90-Y@y||C;-E-`91X$6>cP2Jq?fa&;z`?He1N zQW&5%0;DN*@`yC|sRHQcM}VdpCK{=$c|s1(NJ{lvD1pQz2T6(GYadThCc6qEb`~mE z^lh2mp8wtI6TY^?{kkAnNpNeoc#l#ql8XI~R2I(Kk0Q_mK zgopVzH1JCy7Ufo_J%0HjwyJl){IjZ_K;#mYkjkQ?;?i?ZHbJNKAs2@xzADp!9S zRoGv3**_TA{UNaHbM$&uzHe$ZIg0I0>(Q0?!>!a!j{Odje==#LO?lN)@^z#^va0%ukWm)SGFr5k%2|*Q&_Yuhw=@I2eOj0b^VU zOK^yle^>~HF#JSDZvlK$L(EgG#F`QQU^ry=$J_16H%<5s5aLr&oMqBJE1etbcS(JA zjijQTKM7?a7$sZE^R%%rvMYzekIQq+dZEGQUmf=}lNn=iITf~cSBzF=R!XmosXy*1gPMRaQyDfO5xw%6E0s;Oe zNYpoIBrQ>_2WIK)nHQ&M!f%CXNY)|Y!3k0gGS2c_hWCFWIGBw){zF3C96ss26?7y z^MZ7o%PU()J`EKM$rDXL_+N<9pvuKoxXTl_OkrIi!8s@(U$iQBe+q}(%q8}j0*@el z43;J#TCPn@NBZ0kui?pv>j_esHGgdQCk9%2wLweY5n#a0*rGUcg7!LeM0P<3=_xsy z#4RqRCf7UidsIryj;FfAF0j$i*}2qa$T6szKFnD%>-!&O{plj?boIA5k;`l8E4p@z zU$IgUGSnKojwG7OmIIg@ds`avdUi*=Z^mCk^#{A#EN^%SM12fm`QcWO&lmIdx!Cmp z0faX>97rhQt859awwPaUiEnLb*qE{2u392xu=4*h_-$|@@{dfa1yR!Rqy3lL+aJ4p zg<)1=-;zXv^S(jH7<)0{DYsfvoxx#VV&kw+dJn62VvG-6PMwyFPWe;ce`N0=N64O4uS)^KrI*|lWAZn~iKu4{V&ODC zRdThJtF7XXA___RTI-%zOMC>=YZ}s!z&sNi9&gQ}Rk~3Q^twHYAG_7RO$mU<2s8$} zM%hF*rh=%C=~>^J@>GGFLf-u65hyHQ8SP!HTZ%1}H&^UupGvny+=~Sq6#mIwN*GS! zk%gO=4p}@%KyKvNBuuAAZ0i1o$xY3j@YfW_@XMtRmh=k|9#0D6rqrd+OIUh7S-;fK z>D?r#KD2nrt}(h+=8jsux;SOG@~r0CguzcCypmGNSZad7AcdK0Y&8I>mF1FBMNkx% z8h1iqC2heB`U*W9QyLS1L~d~KT!BU2$_tPVE@7m_9?0CSP|zjT5^8yRzXQV){L%gQ zg+^dYj_?&n%iE=k)l(6Xrk{{9*XcbmM1RKLn)``;m*QThvDjstI!v^9GzHA8&{3|; zPe}JnH^GK_5>bW-4_r{#9NhoM2%`v~`oL{-eOA9_=4TLiwds8#TF9kZeA6kjmcIq4 z`ykY$jk={nan7dsA4@+Aof3Yh>7mezw_0K=a54F*Eo;f62H4*mqWVQ}2Yb(9||G0^=J=c&d+^b?1e6>kpRDHUh z8?DH+a6`cDak<02ha6sTU|nKGl;=tpuY2lo8H)ons)F&2<4J>*D>nd+l7<=G*KxOT zx`tMsK$qx3hbN`mvq9zB)yUj_ykg3(xr z&FSR4X7yj>jEJiB(>YCnfFMTaz`WC$#f~g^K~79iB&THLdFmVXAg3ayC_sYnO60=8 zkMobfaL$33f?)Y^Mi8{;aWoLr_2r(yvzh8UtV@+6<-ER;1ArQ}&u{uE2A>#_jfcMU za~z2uHUvKV*qa&gg}mnYd0oY0Z{EkTR=G)Mw;bKdar?-IrNsbuq8;q~pfKL?dfYp? zxF~?YHkuJOF9MvsB=#gZmrUie97k@$$lpUdgcyl))A zg=*;3$g=Sgfo{&Wdu2(PBxLK-e3Ci9Wcz?u!xooa{m-E_t@p?o)%ICwnP~T6H-Nq@ zc<{|gkl+_5IkTtb&I{vL4t=Z+M*XRbF>-Uil`kJQAO(z!8RpR`E)oVK5S6*F@4MqKxH{3>jTaAcSL2~lSBmlZ)H^lh_r>j# zgs73Qi|hS-pu!t$vr*lUXvR9GJGVrLaaP>65$jdFzgS&VWjC~l5&H>t*$1Z)b>-bf zP(s^_MNTy$o>hg5X|0~KT4V|Jz#aCF-`$WPaC*YnJMjalzM0V%iKQ=BjB2Q-3#g>Y zw*K_Nx&jl?wB+W6d~s#2fZGY&0te)uh1oOzFF!q=>swQEMeS3$Ed@2cl^Pv-c~hZn zkHd!{(FRJ8%Dnb7ov`*Zs;HfB_kL->J0(1Sqfw1YZD9%$W!L<;z#BpsWWP}WEMktZ zh*h-F72ZRW^kosEE_q}A*Fjw7hRrH0QE`}rD@7m>*5remstJRY$$+SrjegqeP2Cx{ z82CWGyYiBX{eO?UM~lDq-_tSA5BkW;iJspOGWx7rvHwZKtMiz;?!MG>w!2L*S~F0s z#_pI;i`Cp$w5Gu(udw-AztP%b0B0lir%MZ-i2$UJy(J_foX*TX>%VX9^4}Zq2fpV< zI!=RJ&c)752Q9WOjTLd87dC(CJ4iD7&QAg8pB9!Io+G>a`$*lbo$Z*6kAocjQ9uNx zDXTE=eXOoInhejf8g!$rf6$B?K8NFU?d7^V<28;26|0v1@IM93LxUtD({fLoCWFxPVg<1?4CKj1K zc2p*55$;#5RiNYLj&;&*r4J)RY1kM3k$Idg_sSayA#YSoxRzq|-^Y#jeV?jA2^d9b z;Za`;$yj-NJu9loxrTi+o*3ww#HU5^WDXl_kF_fDwYKhHE|v7YLpVQtCgdvkyRW(n z6eem5`tZB1`5Nk|)oqnftAZF4E#r+Q_`HAT$*r*-IFD>|$v( zC1vH>!u&*y(9hoqgIw1`ra~v!Q5j&w3W{Pf7Y(Z)Hk0*FwQ23*P7)AN4B<^7^l>e` zPrJX~$1al^(wgkOsfL_UH-FndOq5|qcV-WVpwmW>6gSRkg^Ul_2qUuAn1tgJ$|Yk@JmfPXm2FQkck-nuI^^3s(gRGdv3OkKo4RBtRm3Q`^jbb5K=) z-#@YfZATf?ztxIOXxty$tb|6G`_Z$U$I-V@Pw7_jC|~%m_*Yk_;eNM*Am+piKBv7I zk3h4mck!Ll2xTZSr&?k6Ph%(CZS*_Mgm}h{B>BJ?wegdWsv1Um3D3ov#E_A?pJ@FpHd6n5=@3!IWQL$M&04Ms-V8sA!fk5)??<7gf$&Wi+o3Lw`oGK;ik z=vS-x$Rg&=Xq6}BGf*(^7T5FFnltF3H>1`!2Y}#h5GBqydS$rwTsJhid-+X1?Uj6R zr{US_!_{_Ue5hZ1Bpn6tn%?g3TcN;fa^n z-b}_sF*Ox3amp6I9xA%vksaYRbFHA|9j^SOmMIGwmWZ>wrd#kiR|b-Z9T)KGWog6W z{lwXq{a@DVOsfBTAw?-nxnS_^#tq%@DqMV-RZG*0n88Vn&elkt+g5|rgB%_og;9a& zUW$z%TwAXp;UM0=LA&SKTs7m@E1|R9aL^g{F-)w3>sr7HvA-K^u@c?}IjdQ{zlY9j zS^NAN({R|I=!|%rm^IPMEU93dA9bnicY9_u(Ya_VOXlY5448vhH7&P`Z_Mwk;=W(& zBNcl$)-u}0Dzs5u=H9*E7@w3X3V99J2oz%?L>t=kTEgQ-PIOk6m2WMIK6S?y>30T> zD-nHdHm5@#oml5-)ak>77a+sLsV?s{bsvschApMX?X7BEzI~yQ4~Q?!Xueftx0)bt zXL}@b_*{o~A`vCeZ`BDsh|=kc4HOx?8%bZ+d}6I8E%y-dd|vHc&M9Sv!!Frl@f+j? z=asDet2YZWMmDudWs>O>%K3q*@gH1=HN_4Kv!DtO! zYe3#v`|qopL@-G zc}uaDA%_WrI}s*j(gW&S+uOwn#MyfKcUK76uw7C|yBt2BR|$C2C*aek;u~>oybcMe zti0YLylc_Vv&kiIa@(YS%9D*v4+&f~swig_+Cc8I7LjY;x@|9|rDE569!OVsiCAOV zUlO5=i&ZM~;z`okprUvuMY=OGo(QD5k+G__?J_UdZ&_U^VWL)|Y4wF-?uC=p(9m)2 zooQgHciLEDcaGGDyHB+)D=fE|TSy~NSx~4KTm|ZHVlcixbYgu_VHvUKb!=lz4R?-p z+roP4B|*-7UNZPCVx5yI=MkE%R&l5@#|RG=r-JbH)@{Bo3tS)W)?!+R|&>{ zeAf%$vhw93xe=iSDIs>}rCWCN&1az1XN-L-BFgg6ud>O}BnF%5eEOASqo%OUHp_@r zP6+tS)sNo21CVJ0eWsPC?`Y79J^b-b;PBEy{%~m_7%zi6Lf9#;gaJwK0F9a5qBbyx zKaZum$~5l}>-{5hY6|A@MJCuth`V1Zplsu!c=^PxpIk+Wi&%?yCI(`sFnk(l(T>>k zG+d~u!zs&RMzPp+_PUE1#14C12I-0@>5+s$=7qSM-Uc#1q5ii|hwhpxV6`(CT_w z_Ic|zRXBRvGB6akn6bB*&IP#chLtgVc}o?8A&|U8&LN?hfChOkN6+N3=URu9r2Hqt z;hnp=krn$e=1G!0L_fsqbl!?uBmlOtpq5#y?Tu8f%@dM`U?+>jN!_Se`6q^%va$t2 zE8E@K=>o#Oaj;>jhPZ|nSh*e12Uc1^+V}|SXNi;LFA(fULrg)XF!5NKsd&-+sM-Kn2@-l?U*9nQ`5 zt@?&~*lF%0;xC!a!e%S;0G7v{z|3bkfs-~virQr$|GJp!k`s>?;MRPcw%dudApHWs z-l3@@i7`(zFiXTxPR9|sZo#VjXVtSDGq%!se-U?({p}yw!+d)CGxeT{)p?qSi)S{3 zsa~Gp6T?;lVhO6=oz~+|jeku#RS4K`zuoPwCQ|I`dF3;OaQ!%w}x&QKxY4FXCH_m%j$`~^Xi8JfmnAmdWuw5W8R zbODiZNn>51N`y1zb+6t*B&GybMFjP=QZiAjnS-vU$B$!qn%w)U;47@K)@~Mp_?4^3Obe#qhCB2bRE=YCZh`bdZ1gdWS3)7u9 zQ9vf&G2w-eMipuXKfdB4YQb*!Q#Y- zNb4!!2aqhR6}`6qeTT)D|6PCqvaN=bq7t;;x%3bJw#XU*;jt~#2LboBC}ei5R-0No zP^VYH-ylzT1u+2;ulah7cx%4%MT@jPv@1EXHD42Vj z{0U#CKQcY{U;CF>Ruic@nYz)G3cV@j0J?_rN}-OwhfJHJovjo|-rZQopPMTjxtQu5 zNJ*yfCTUXScL%X~$nxRmD*(pxpu%Eur&Jq*8gb2aTsg1ya;^)(0L3sH9U;+Zrv{yT z{YKOVT>CYTulPn539LxLJO2Z!ldAI-xII+kTpXf<1anRt@EMA^?LQh#BrJ!#DOTsK zP0ac>62jsmqsz&5>m=3Cw}Z2eDT@Pdx@c!V!TI;9-8HPR2maFO$lb)|Kkb)gDy2Ru z?Ov}-yEr$SvX=FkLKDaOa@&H+Ud{T=yM;3T8f%ji3%FZ*MQ9>=h>8Ik<8|O^Zgd-` zU|&0#G$ULRao9CZn)jn)w0tUB)N6OecT3lJ9VAeX`$vWv`fcwwsZyE?VcwsU2jm2} zk8f4_{t9YD+9+F;(w3fuTFue!VHOLu8Y$_9563q%ML5?o<U)1%aE%`3>E#qSFk!y<4Z}aKpmh z=y2dYx@FGeBA|F!)j3GSM&H@biy@QU=^4on>*AEOF=#u&(uPtJ&)}f%{;J9_cA6h` zbxYlA1>xLgew|EYAqAtixv1Xt1bO|YCzr>UWdO%^m@(7A%DcpvFgG8dw|rwas(F;!?@tS;n0Ec@-vX zdp6T~r?RzuBEC)bu;Us)sVJ+3++-hA8@VTei+dVW31X`ZNlIP&FN)vV)(;hHxs`l3 zoH5_B#SAP*XDdShxzRxt7OTF2T$5*DG`d<-RrWD*exPjTIR_`QP-opWBcXK z#n~@B-;Y?u+)l@**y{Y2s7pknSWOgTO<iMS`V*-8OTjt_0zcKqASG6wbNQ`F8fr!-bft zUAfz-p4DwBM<5vlUth!W{7pVwYatrum17I|+RvI1ALbQx{kfvi@S%HFZ>$d|ZmcA` zcnn6j|6%vYc5Vb9y!VL2mpVJ%gayYIrb!NdMlYLfbFrNT02ItDXyG=ClBvdIyL5`K4Mk&~hf1E!|Hu%|O`0@eHhybx zjkUBE7-^e`D9Myz#J10FKe4Aq-S%^+c)5NZq|DBgh4D{2tqf=KAVc9r4XyPph!5TE z0{Zy3iaYP8R`gYfzq01AJ+klH{O*QXG)t)m5=3J9F>s#0B~~jsDd@zT$bd1-hfP;m1|@d&>GBnPV3) z4P2(qx44LA22LPKwx-Y*?%J5pe}6@uasPv+)qXpuYk(~kcBa=ykn-rA|vDGp%T z90=k1V%8739R%WQ-N6%28=1wu0LQmt#d*`h!N83r!NNH9oqV~oa@Plm#hVJ@C}L(- zLYkE_F&C|tiJz@hM*q+c+u8Iiid%*E08UAn>2vi_kRcX`8`T1WWN!$6P=v7^0ibLG z^MlIfCj5dpvxnH+uYmz_tNj~7*jzVi4!=E1Am)FCIhE+o6?A0R_Jc1X0-PdHRxzQVN;$HDy z!M+WnJFKfKnE=dQ#PDRy5G-&P`P}(VEF7hjK!k2v?R%Z!d!VO{V-%&6_<3ET=V{0I z6|~4r>e8@2+hWo~>}PyD_*0tQ^~KxD^BcZyvJg`Ky}hFYT<(F}dV!iZXmHyz7W0AM zKEV=fHID~+5p0B|tK;!8QH_ld*{8sJTB9wY)*%B1pNdhKF7PW^ z*xBgqi~=`%DlZ`Plz}xgO6nho`QkYDk*r~PxD&~?`oRC1_Inwf<70kOGb<( zmX%oF&Kr81w|r)%;+@1>S+ad?30du9eVB}dRB(uFRG=Sf29Q|ei6{cuS!1_GnJk%C zx2=lcpDb27pY^X6TYj31Uqf__3HJX9tAty-lSs2R+Yz^wlog~Bw)LBJg_SaG>)_Sn z2A*4xPg+C1=zWhfs&4H872wpR3>zHIirDwO)UTOml2BcVr`VU>3+kO6EG%P;wStZ#LS3V z`>(wvP3XjaTwP-DPSvYD*Pg>B2A*_3x_{~Dk06K|UjL;ImwGJoW{}@izy4(PKcEdB zURJlRD*5!1SlV*f@qVLtmwp7@(dZ})kPoWyIvKC21Tj{H22`OC2msUS(Qex$f zKTW0IZ;D)6aE&cZ(fX;{bv81T0G%t>;ni(5lbm%CUu*%>{6^lm_zFTq5xa{E+dLeJ z=n$9aU(NgIF3iHgiEKy@agDEGwVuzbEd5}NY{_HN-vY38pj&K7?rvGRU+0}m-G5hj zWNLsPF{s{XoE8<0Z0>*>kO*c;OY9pt_n(JgWbRcqc{9@~PalJ1Cb5L4omrrhPuE+_ zA|IZzw9(9<^q9w57Cm(i7S9YPm6V+;g2Q_A9=A(^OM>m}X|~z2O5?Di^foPoUyBCH z5-=6^!+rcv*eYwsq_@+w^Wl2#)+De9p?loBwON&Ct@PG{pJIO4S_8})6vAl^aTwjq zCOxm>PVN6st^#4wY;!(}u*mWa1v@kSJafn`4n&4}g+Y0@B`!NI>=}gw4eYjwlldaJ zn&75Zc{oVEJlEGo(?VxJy0D&y962}$8I`yTGa6(y`%J1(xhPrrxSG;+`tDSRUm9X- z{Ti*sW))6!WeyZP(W-+!H`4a<{_xulUi8@4Ilg%6QohW+ynI2GtsWK{o`qReUdLha zr)sBELQ1K@U$ch_vw~3~5CLSw@rQU1HP?4jDvvH1j-DkuW}28fuN+XgO}OLSz{M_1*gP#u|08q&E0_*tY3(F%=gn-Q&{o$Vv-6_54Bw}A^_nRGV% zMImKDuY}G%tayDOGON&?G5;+IWwW5mn}C)&*O6ih4#cKL zBel~H$C4$Ra-7YZhr+6dX+xjdXId2Ds;>Q5_04^edCwGUz|3)_rZ-V0?j?_ITO9U% z=SSx%oXrI6y4lPKtvot#76Umb=X^f=vGjE4Dhr#ZIWBWV$LFLNj zZBzRWP2-sex*kA$8SFP5HdUR$K{4B2Y?0t>&1CrC=pWe^@z{T454snE@d?BU zKdweNT&}o4H?_5gBe|@H9erQWBs_LWh>QO=t@+3NnS9Di;WPR_>htnRuV}VmE6c1f znv!Li(BNdPBa3KaN_~IUc>L|QSRnnlhEO>~e|2;QTWQxF&`9pS5+|Te z3EN9$OYxbML6{j2PU!9~GCpe*BW9J@CTGFgWtH15}p`;$& zOZ@WfW%Nq5^2$Ye-5K@#4R&oRZRzflFrC@%K4JZep<}_mv0=Jr8LVITZt*f4cfZ4Z z333ARyU=+;Bg+E0t);4s_L2jH9#)hKGdwXc69Y?i@S*f-wTD!a9D4FI$vcaa<6j>d zbiT2tCH=PeDk`qR1)tK;Z|h*Do%mdpu;hF2)$;~6F{jEWB#`dEDxaHC4i7umpA9@a z6PV~FE3hAnMtit z+{HgK@(A8=neQP+-KJwq+SwLH3BH#r>i5TtkL_gYYzaLxo`ws__(V|Wc|efsWzTBn z*MDSvoe#EFrSFB91!n_#PCy$WR46ecbQZEQ=F9N_D~RvFz^GKg2-av^9CYZ6ol@Ho zCgWPjv}OW`Zxo21BI`v^&d0-)l+dnG&wF<(D?BaMy$IhUdXZH}qxG4&v}>-S-nE|* z*^w|_KC|ksR>$r7a54L{^`phw>Yton zMn?x1gcD*JzsK(M9z)bY?5;H8lHk@^(md+^XwNjq%Atoh?-;V}(9g@Fi7gC74{Bp; z+f4xs#F_K72k_>qjONI2mp4O+Yo^OvAgS57v z-NmM-)7jYMBHNLRxmHO$V>^PT7X$TCj=M8T%EC`VeG`i=?OiFtu5A_uMd`U$V8cC& znjwNe@ukmc?8`S^2sEu1#o;4i-?E~D8?Ve?m}dh;-0wqlj@NM6s_%#7MrXIe!o~Nf zJ(yNSEF%sP{yOQvN$~o}qpaOkZSm0u1@S`Px^=XYSswwBI_#+M6n3&kKzY|o01y4+ z6ANuhb_x>jiE^)lRsvHBa^=H#7g_2TqZ`iLEv1=8m2Qp3vM_;rIEM^OnD4MiMBz*p zY_VkWhwUkvoT zX5HixZX)os{t;`-GRO>b6l=e|ftuhZhCd5J>%T5?-*Rd!4=P<+#4P3nBF8gmE*a&& zapr%SAkCkCIP)pAxv$uxLVH&Co$492O^E3M{t!1d-BJ^cU}ME#oc<`WF%_3;@JHWj z@TTfxzYDToIf%NFn{H!YMTpoE4#cp3_EfgV;ZLhd!eG34BsZw8Et>oL;|4G4l7&jF zM?&$*Uxuq$Ho1&{WVfmRrYdp&c@gaWpY3JPnZU|2O}O;m3V$jF*O_1TG(4Is%kTe@ zacsPO!ktR|N2Z65|I#7f+KzmQsJ7aqkNJ*mOI^Q$tro|B^P-bl_`|B=kuM$Pd%jBN zlfl}Ob7&PSMAW0E}sGgSPo^5bCemiS=AU}<{#vh1Y&b)55y|c zY^S%LYBRrw=UMiBmpF{`sT81DmkZXFn>KCbK7Wbp5+sA)=re|I-*vSClRZNMfNfb@H#XaQ4z8^)89-ovd# zVgwBh!6RY1034bG6LO z9A+Nn%8D^HHHOJnw{&D$TC^u`P%n%1IyWt7(bM16t>&uQnu)hKgJwsh;ge2heD|Zf zs7+cP>ZF>6kk!HX#B_^f99&P>xuI(5FOSK6L4R)^Y46_tF7(>jp7M(L`ks<@X}I}W z1b+(i>Q!>#Jd2X~p<^GdI{{{C@rsXt+z9A6B<$i_^g7FhD1^;(;%6 zud15#d+nj*qu3I(GjiUqA3^Sg%IxfU{nRDnxj|;e3A! zLkI0y(P3t9==+)ccOAUJ7N^78!%%5sJTA@+Bg>Lhz&(YFp#y!ET7XC`*w`&Xpy2{B z(@!???%w=#DC;4r*8}V)^f?^sK^5RM`OZhl4ZZ6}y+h^S>I~>koAmTt3OF>MsI|Fj z`D)LdMTk+?*mI(eB7~|957cm{HnQDOdV8`z7Dn^;Ce6w^fw13a*5> z+1-^lMo&?65Vk1O4^E&(PmDl7mc4%S`8QlYy1pnym_4wfj##=^tf$5F-hJ9xt=PsW zSJ$^89Wc!&?7JQw+tIMvEE+S$$+j@?rAI`athN%=JA?v+8L6dg4<_ zvR<&~M2h7*pcmb|4GY67W3G z19Rl{H7QHjbSdRPc0>STvCW=z*Z3@eIad4a72W37u5XX- z;Kno1XGw^ORYMLau(tRgS)A;iM#*1#3HA}!e(=IE)A@;#Nbjm7qtMIm zp}#hEEPIJ%--U7T>GbC2?QzrW*Y~_KG&TFgxFkm1UFJ>|Ie*!T(a9dsq)|o}bI3iq z{&o9W5M6Ab)Rtb}&G4NSK(d|6&RshvqgV=z?*16*9VFtohS=kgWL;oVQ*rr5U1VBx z4F+M-nf3QvSx3qw>R6;yZ!r`Ok8lm9n%(tf<_+5jvOvmax-5%+*CNSbBcm1P1Go5Y zDuNWfTOB`olEx&a_HBlKDRDP|2R-Zz6&{*wZ?lTg@x71vlh zYh0T1Vq3k6tM{|@MckIQAQ4yAt!~+IzSvif!dBMTK_b|!S=XBEfTob35q2!3ID{AP zN3Rfb46w)Ar}Ovs)5V(UfwW!uIyFK1Wwp&%a~@sA^Pj3+u~ar(Vv#x2xav z>StcOznsJV1szxr_5!6SJnz3BOZ=LkGx+sy*6CtYh3_U=lA2_vNM+D?*#CUHr^GN+$I43yH?xF zhj)G;EC|7ZT+(Qo>gy4o^Wq84FfSBz!o&7-B!(vw4l-CgpLS!ZqWzskkN4B4Rcz_J z(Y5!!kl)ZPq8Z-<>4ayr=iOwv$MDu&AOD#Bn$Rj zD^2W^XA&A(!Pa`O+g+|hvrmQpXtR382}a`Lo+m%d(!e_c#3h!6q%nPkJpw2?!Q96V zW_ptiH`^Em$mbj^MY%tCIH}BWqcpR0?$wLaJ$4k1rBp1syK(#bjkyS(Eg2Dny#Cv9 zWx0^lec6%rKoY`t9R3kUCBoErSb}j5N)!{qf=8%6vl}Em;fGrF{VgaPfYbNP=w`d` z8^bjD0xCU;>q}eOt|en7jZ)>Z%$$I8bjIo~vOXxteFu(VpM&xfx^7AIA(U}z(qq6N zDX5iBrrgOqic71DsOu`@1MPfC?DFA!TlAlzS3`OK1oC~pLtB$2e;j?}&`*$;&H zh06++wuQxe;k(V$U1f1KnQ)#tpyX)nb29G0Mp~f7q^%$>^|IMU5#>-fpZ%26DRAm? zJxjd%TMBk{CBw(#S%C$&6fo&h{bC-gb<-FEi(b$X zz%anWV%_Nt8~exNc|h;Qli*S@ZKq72vmkmVQxx5tKh)Yz-w6phi^@W{PyIIaRAzQc zv#qH>>P~2v@8wff_mwnwt*3b+&;69rK#XN^PuBYW!=iN7opTAa2p0@12&xC>>Ro2u ztl3k=!0coW?R)Y$f=#WOh`h{2sso9PGbDO8`PiCCuaF%>x!28=ViKG)5MgEgrDT7 zz$s25tQ!@40#DOPy6!{PO`Q>b%CjO6=?zY>)zP!q&N{>aUu*s!F{%i0{o35fXl3B} z2m{leE8B>7A|r`!aeevY6!++!48@-?8p?3`S=ssY#_O;skh@LZCSK9rX7nwQ__Q%u zs2cIUc%ek@Z8!bfzv^oI3A10X$rg+S!QfT?)RHrwJxtZBvDqu5eHBypp7A89G1+rz#u-`A|<6f+@r)A>|aGS;z670vk&2nT*YX&7MG&al6ZAI zQ9N;P@%{U>{|12wS@zgsntNpU6aAR)yprIHx}!&{uNsfM{xHq7w3Go7V*V{ibZ0S>6McE=xA^vTwv>K-^HDT}Png$qA(j?d$g z28B(gMeP>xja7MOq&12zWa;jeXj0qB`8z6nbeqX>-ap3vpujop@1})n&du9dwkMC! z(7T078!Ba)y31XJ-D$$=+bHrrX^a8{;(tG!4{=@tIf{|@->Q{xd+x|#{ynQCNz9km zswnB{q?4BROPSOnV8YkB)NU@hTEQE)(Mb|sv~Bx5Dv__pkH-Lk8jpJ=RFSZKmXI)c_UoEsQ))@@9(c*hD>re9Oja= zH27iZcg_7uKoE>WbuD&ZZ-S%Q6}hCH5`HQzP;O$*r?1s6w^*uQE(B*B8@cAP{cf1E z4${Va7zh&yGgk-zHW#U62?Su$GIFZ2H>+?el+A}NnA(gVny_jy7qDjVSPx`gD|@s~ z&+!lMv#dfop4T!50Rb!)Yo0&nb{WUe^>4hBS(6r5m-%vfUc5E>*j=Xj(cXK2Dy0hd z%QF5_gs-TiFOKQGrN0F+>17s?BxhCXLrusCiTxxHdm8>O%+>ATdH1G;9~3fDQM}j@ z4=jZIAc#6-{qp}40QtZcfiI{Z6B9lDEHgE5%XdLs>P|XMZr_WiPUXi%AKTEvc^$t(q5p58i^yhq)8hp^pMd4e$~F_E7U8F^j2Cz`4IoS*v^AMJ2xK zV9uWF%lmZl$%0&supi!!<42v%r84e);Z|{|wQzdM;+1YWrSkABvuFrCcKDCX4m(x# z(@L)~RIU?k1GQbY**V3FJ~R^r@V}-xL#>L+EnDN9G76D|{{2B!0DVO1`ad!rP4VM3 zK(s7hc&)V=O3TG;G?*P<@wP86$FI?%dsUDLlwf2BZF}U}80VT)XT8 z*nK#PU(I-?h8R=Mq-tER!s^$oTG~!xShYl%CsLlccskt!2q%SiQwcs`!B0DNF*rb6 z{OL874k>KJg=c!Hr-Wav_n)~yQ^y^c?|yP34YBt=3hiB6I8Spw-OR)5ZjtupD_Z}u zhmSyT#kj2!)c#WZ6{U%G$R~8h$6-}q?`Ig}r`X$(L#}~AOP`%;MNY)!s=cafg0r+U zc&wt_RWuBFDE3~seb>;WejNS8dd{jj-mlpuFw_~K#yFFbQhNWGoP`YSwD0W9{kHmM z8Oy!Ejb1hRfCn|}Z*apE2QI_4WP`q6zA=vzj9gh0WYyZwgW3-!w+sJ~Q7JmON!$u?i|3!S3Hhq3ow^n&@xPHqmg2F5DS5Qi$=tBL}vGO}^I)w{ck1Q*?{ zYK$^xw%tjKWg21*Rvotkue1v}2v9r;5yq_lDU><18Gt)EH8eIP2_RA-Jsg6M6CL4b z=;0IOR=o5OFuVNoNXTm+rhK>$H8{k(g3UC55A89TEHWN7`WxlbCw6<#is@S~WSyE} zy;7fJ@Fi+?tX;ZQ-GN*R;!eHeoi@Z#r{wEp&I}Sn$-ebt(>MZ7CWoBKem{5^4xHU< z)BctlW^y=Q9P)YFj$yhO3-Om{dlu)vGxn%gL1R)Gw><9;HPvowZD>QTK9vW|-7Xf~ z+WfYuhDK()8)x}ugF0MCTwSI*PvlQR3PEmhr95sg?gK?^k{4Z>Trmp}AN5?3zI- zw&$;ic&5R`e4TV!L^V{shPg901ecuStoIQ(*zSQ2ZVI(*kT<25L>h52`I{mBG9$lxcRpT!P6$xM49AEqOV4;5bgFG6CHjf9j`?n;TlNuVTf*xI7l1U07b%c2 z2I2%jN|S9Nwr3uVpOv%~?T&x?W}ad0Km1Bcx@&J3N|mA9zmexyYg%)5o)4+j0YN`P z_&S7?ge6NE`~Ap&I-_^JrAXX}=43DIYyI0Vqw9>^xi~<(QxbAY6d~me#*IQ%SGP~gxD2hNv6%>?h@(O0#T(dC?X>pYuXaHQ=^Gs zys(X4A_@Mi%+&zP=45i0Ha4_JK_^O7rKoB-y1a?<$oE+y+O3u`HJJ+YV{G;M{B0ya z)<&g#v}l0-vz~f)OZ@_?9ZM7`59f+*`$u*pj-9!FU5hFZu8tM`=%9vhN5|W}6;M$` z(MwL3HM;S&K}*3Umnm-jwGTs7$JGZZ_Xq2l2Zl%EeRsg^wQjtf^)2;btzf9u0(5@J za|$*)$=8S3Yti{U<`_bCPMp$W6Dnd&vM{2wKQkxjD2_j<8Qd%vwM-ZFZRboVj?Q3r;cC4Z(6|1#MJx~6D z`^&wbd(S=RykD=6m62krIq)(JOQR>!bS)5RdW6*>t3dRnscw>H2+pdds!8$ZUj0s1 zGv+kI@_@;biKA!RR%508f#s>MwynS@U-{1fX)Aq}{4$ylY8o8Yn*YjMDRq&h0G@4< zD9O#$LPHH|jnFmFj|d@%cjD>UFNY%`27*3uv{y>t8`^wQy)^XYo95z)NHg8E?U4$x zH8aFeLcv_S%V9gVC!#l*aQ^-{iGYh-G~}IqDE;ECvZAEd-WRQ4Z&$*J5JRUcW%p($ zS;svo?*(q_7!fkY3!SYcwWw+rp_j}OgLW+kfn!;CZs+ANTYp^YiCM@FDMVW4%-FDe zXJ-n9&yQKOAY$g>xcP}f$R34vjnzo|B>ER^zWb_Kf?bTEeXtq|!XMA89&ges7y8*j zfkFM=xC(l_{{Y-fh2Q+Ny-PP-EXpai8EPN#6ylkZhMg6GdZo`lptqB+??06Luh87{ zzqbRCfI&v@cv0qCP(&8Rp-o#=a2})FAtGLwwk+pq>vRwBmKYI8Jx=O= z2BsN^YJ*#l*>Am77PhpXuDdOqKTLdpYwks30;Ze8#u3M@<0ZZdsGHsZ$)@Ba|0MoW zk@2i+O&Fuk4?jlTH$AL+O8+}EFU{}nP;W&&Jf*%@`1Iv`^mQQ47q1$z)2tKUlmR4) z;u6m5<7;scZ?_?^tf=gei%aDW=9I>aG&bVbvmn%^Y5 z?{$iMdK^)N9NB~Y@x^D()Kl&$VL{6t0_!hR`{yu7~LtOmI+#h?!~{uZ8P*QZ?8&PV@@dB<8=PUn5X|e zn~V3Q;-+v7e;G<@=bWc% zE6Wt_0^G^F7W=gVE;nkiE;!!q;=2OPs-m*L=q@zikE&a%o-adJIsKsQBt(w2PA}B_ zh%;DbK(M*48Go@qp#-ixHS5Wih`o3bNLN<3vZy+5Fuv!6pTH}K;n}#Vk&8S2V9^of zEnepbK>QKDrx9WVgxyg+U+#&k`BW6-eCl0(TB-YOWxqO(yAZi%t)(-01g>Eb$nty; zvxg}oRrw7G$$(p7unbi^N;E;Wcfc`rdv)7W(Q`E0IkE!Ll#q~^@0k78(wdMm@&#&H zZTY=RxV16c+#UCm*t;X{`GfF|T^ZEogN4UzZj|5Y5NMlZUfkm%>iW7*9a(z1RBN#f zn01euGJI|QX@Wr0$2O0jf8C~3;st8(spXqiS+;|D!{PAXs=cQPW%qZnY1+eDbkbjy zM;&3Bhx>zaJC2DU!$mNf{QI#_bKVai{s-g*jacSeuLS}^k*{LckLLdGX5;jahC)r@qAm9X4nU8keoiU)T)LY07mqFN?rsniBX zPcY&w=bPog$`@7|+L{s=6j&GIGyy;HoFS?~^(NHgSw$=ewT@AnSE}{*KRuEA$R=i9 zVKm2`TKdy?fhiKq0J5u^r#DSu@05wX>WDYdjQMo^-s?}IHQWg+TX<;UN(^3o{Bb=F zJ>Ft?%;p~wQ;e;*)?;UUZGlmFTS+rTT1zydl*NVP`aQaL-l}yi@o1X2y-rI1Ky@)_ zj-}OJIV=t-Tfe=&d0+Y{ILvm;b*|Y$(Q#MihaUeu*27;f^ z*O$vis-*wpJhuCnuFM}cRlwfDxUaGzm&#qZy2rXun|--edfC0-_P$&*qmA#NFQ$f% z4w&&NRK8qnhFm)MBpaCw{~H?kCgI;lRuxiG-x$pW;D1*l9Kyz$k~$^cJvVLLt&~fk zo9QlyA^)j!ZBsd|U*kvp2IJcDZb;cePXqeQ;LhVMoaHt=_kT8p(nd=7`&RvuUpD#Q zm5xX4&IJ!HhuZ6^E6#O-u+u>KRVqZ=#ozby_Ly`1b{o&B#L9f!pZ(GFva@qQd{DdP zg!l#W>wu?l;wCt*qkfp(Fa7#q!R5W>)dWxLw*8y=pHn)sW4E7gYayA5BQ9KJc}Pd) zV&6xp1ImSd^)E&y`MZ6-L>%%zkRA|(Tou!kez?Z8KMT@HV1MeTy(ZxYZsAyu?>o zjeXgc|6Q=OXtmIg^22L@o#)x(8;0?B()ff7fA3=4t4C7eBR0JhkhA@OwI?}=?-;z} zBc}d*igmZhe|er+Xy5gGzw!FjUUP-pUtW$rm8*63q@6~F5*^?5u|clTPr5^#w_njE zzp1&h`Rx0!P+PDZ{#Rh>-#O(bAP3|e^^a4yg3YL$%|fV0QxYT&<%hwXG7xaY8Mj6F zm1qCiY2FIkec+CI)vM2Dm@M}``EF;n)Gao~|IX4Jy#Y6GjxGJve3KHN{HhNY%*ZvL zaZ}rLEhV`Hr4RVsza6w))_7JZ#`fX;w_KM%K9u&&K2@D+FS-5h?6a?vRr6L$;rpJ{ z9SlWWO-O;U>Kjen%B=&L0x3fF(hPB>M%{NOCuXOF*`4{>?dt_O?N7Atg@5{@SYf5b z{))HnoOJ4o4{fn)32(O2=JdY0$o|gM=;iCHjbePBY+Sd#dj;&@It+g7^ZCQ*x7$~u zO6zl_C}uY~J^AR~&EB}N9cKMsQVY}WuO6A{7-A^_YfED`VedBrTb5TNdm zsdsWHdnm@(x)AjfbmM8SxKpyyT!c*2lA;$0hPpF`{@nG@pog!8I-hM$S52#n278Uj zhy;MW>AuPsO2>GxjR5Rd2o{#Ii(*j<4k*{H;e-AI880o5S`AMRbzPrTL^N|pOS*F! z7960O6^cnoWKby5o-$+C)EOPzqMFiDK`%HdrGF+iMk9rqDTg}ennTcLi)Dns?onNc z0g|6p3&{c0o8I!vbeI-wYl<*!nnwTqHQYerpy6~TPVnQRdK?H1h@2EL`6s*C>_#%Z zDNCv}MWP~NuUG)OD+V97udv1vOZs=lDc&*T>s8`=fQC19yVL~ zgG@;}v1}BhQ6A-UO5o6&*S4-GK~NrLK^nZ-5|Rg;mU-Ceq{^m=ZRV?B=yiEKd{1=e zi7B^CGS1_f=Ir*pC=)8Sh`QQiKj{I?hSJ0}7Tw7J@sOuGp@MA@YKRSMs2VnC%2||M zRB)FAl4t^6cCuD>UC*b2Svce9gB=mFo!7qEQX4IK-R*YGS$2&ROF|wuF+E$!U?ztZ zXCw7_O@<7SdLLbD3rcZw>+WCijGdjx;U-y_OCXGV(tPo^wZ;!7W{AB!2JznIWSfM> za9ea0(>S|k-dU$T)Fxq@)SG=93D@l(GYklHt&8*@YHdCZppRgGm6F1tCHVgEv-4o} zQwuy2NlVkn!AqLQvgHd2q<>G>(HEFbP-iTHXUyp zsnFmeL7{Gzx~;>{OVN2xBc0^El}pR1()Snz4RnY}s-FPY>U#crUl||$N8eh!t5~sp z$Lkg=b=e1h&K^UBdBIuLfW~aO5E_}3p3=d^(F2yVH-GkV$y-gDMgDYhu&Jm*j;-Ur z#S7bi-7T$-(PhAZ0gBeKljX-M*!bk2Ua{-@mM<5X-1?3W-nD#g3&F$9vxiKV zmg0XS99b#`cJok>pClyEno>-aZe&WrIfALbsOnAmYp)qPe4HkCC{@+#i3-;jKft*b zjw5#O7Bxq8%N6rkMKf%hGwC=a6_NbnDhPs7Gck)L9dI$ zHn_u42cPvND#w*XB*fPU!75l_*%WfEtu32Nb9bqOc@EH?-ANW`YOJd>gRj%Gv;_6d z9k-AGF4IcSz7HWP^Rx!Bt*r^L#w4Bmg&lA(bq#7!+yg0y9jLn;C4^cGct4sx@lh9S z_VyGV+M`DJYW#aGb&l8JrLJ=pyBJS_#XpVfGrd5jQo%BGAZ1xsrY#2Aw#ii#q`MoM z$t}ZA8UEGM%QU~Tr2XjA+v4a>Xi?vjQPQ9V2hSHJ;e8U&#C6=V$B~xs7aUg_10$kc zqBj2S+b-HzD-8)W0OMH#?|L#Vjj*(J7c#(x#QJbfd4j+k?DtR7?`(Dof~Va#k^IHxgVh(*BDsWoLAg3OZS&h%*c-p`C|vAcmQaX}vb^+-=o|5ed*=GY}cyw|OQ&u}SKq{nypYfJk! zZckfkeBxJShu=4QXKh>;{QM8|#$-FBK7q53tRSvF*$BlSP1v+l5HNpj=}trL&Xg++ zGFGy3jt(6DK5yG`Af;soPW6(@Lu7*Qr<7CI@zaQZ7o;ub!(FVy?Sf#Y^N{I_`R;aN zaB*|2;s{^YZXjo?9{dLi90wgjJgeqSWQ7)Mwod^X+NV4nsk{Q+7Z^&F9SW>}Z);zJ zzeSGh^Nfg#10MPd-e+V^+GlW#-{PoJ6 z@Ouzh7O(F>Xv&3ib)T?&>yhq3yuf#2yDdcv%6D3LR+s4q9z^>2p*CR6XvG)YzahFT zY?PhvO-)nf&6EC~3sCmQ^730b{Y8$PP^d|Ttb{5$W`jWMxu43y{){q9q+G4Pp8+}U zw&Bbi-Rn)F=ZPYRrI&2a)b)h~bKzT$T5%C$poV5FcFyrQ4kMtMh~R7nfA;5$%RwaQ ztnQMJK}87~AH94pAI~7eXkF>8Mr-GSdJkA%HZx)}GRk`b=}P{F#(fce?SMzaoI>I% z731>MZ-pp)$0vAxJ_E1a?zQE-Q2&PeH8dYiV;&Updb;L9T5NizNh5u_aMjS6gisc+ z7O^G%I{BOG3JEZPFFlr%le2MZ3X7Od*7v+Ic5*85)$5o;r`c$@lAo=YPHWcJ($FZ) zJ=Gf&YuyE*UyT519 zr5_~XQrBivXMd^Yi*A+qQ1QUO;^Ss8M&Q^SK*&&kUzTUHZlCg_p&^zGRY!nx;Fn?X zR;Q>FBPcR#MjO3!czg`hhbA7g;i1v|1Spb2G#%SQY?_9ht7phb0wCy&;B=0&(AJ3M z2)`uypx+crjmYhs8XI4T+yAzJ(FE4&zOUZj`5|g z1G60KhiI}vsw6s~0ApuLfA71RO@jR-TuMwEQ{Fx5|;B|TQ@ex8~ zU4EpCMU`V+@MGekER{NCD{Yb*UZ8}fB=Gu2ansreuxU4$=@@=$OD_<~b*#KR$F>oh zr;fr!)g&#d<*1=1iip|+zyVu=snBGqvB?uTjG%KVKWFJ}rb~c-oAN}>Zs^_pN<9)~ zZ%@2vKO^zN`)g_-)223QFEqSj>x3isVGn=~LHj2B6HqW;bYS|lZ+&%I(NkpQ(k=g@ zBY@*(f)N8jlM_SK_CS-N;RKwqVi%)Kyi=4(<`6P^kY_=C#h)_@Wi-Fb&*Pq^q{o-s z@zh&rF`D$uUfbE<33Nw7l&((n4np#CbHYyO=^Ue}aEM#4U#5~g5CgpPBA#U3!KdUL5P)!NO z;m<4lVtOKFBJdCr>3+Egbk0_Dj=wwNrQBoF=n^U1(=0T!ML({PZ$Q#eG5`@dmKmX2 z_*xJASE4H^N*Q=sxSGe=VRL7{t#VbL6;a>eQo8lrEbq(Gwq@Fhu#)b-97c2yYU$=u1%h@fhmEq##jca`_M6P+xjQ)MylHgQJH`aZ@NSn%>G!(MD41I0@S}ef~Pc(rsC(3Gx4fXV0 zr=diN!P6HAV?mx}kdfoh0*6ZpH_;%odsx*+oA)zNYhe7PRq( zil06>mmMeza6(y!Z+FSx!5e$ZuQJk|7M33>zfZ|C_nO|D{~ z>Y`Rgj5YVm3U~()o;BO=*U`&sw%ixcgMy^60mn)=2d?WNaE|SRQx`4XzRrB^2t;Lb z5*E(E|1sd0WxRy-HP))dGhn6r_rk*2`?bM5$`R*$-;~YT5R~p^)qW0h!#S*q_OH*E zR`b{B3~~%1@h$3YnMtrCk=M*LHGkZ1&ZCAe26J(-Zo`@oosjtCx6f-YUT8Dg!VALg z=wS4!MS}N3lgFXYULX=rRR1&M-wqjF;#v6#%M5a?UqFWL$$zxAY>axwuamnO46^eY zw>9e|B}so|7CN_uv1zutk*p{-{Yy42WD}__IN#aR&mZ~7!*T!;e?FtMVhg+pbx9=eJkM| z>{MJC6622uzv>F~U*n;l1yM2JaGS?dNWRwhY>U0)N-=VyafU`;CYh=y($bIcjgD|d zYv{@{g50-xp|z&Rc{Qmf?T0z7o_A8IAZWakpP%w#ifsseXwbBtuBQ*XYpnw+%lI9< zvd0vZ(?Q0!)vvronCvg%%azPnvddD!{`#+G#y&Hz=DiCzP^u~rE9vuk*Cit+cUDlQ zaS==@2ZVHOd*)bBpl6>6K}v9w25v)|dUaB*Trn0<`vVUnDQ3doHg3mm6|V zfm?L&sY1N($9xWtaL91l6QK|-)mC;=w_X}d$hSw&WFEB<_l9Sy{c2G8YG7o#=-Mfd z%CJ|X3$FZ;Df8`wfo+|y|K_{xB_CowM#6;#G>a0R4+s>?V*Ym}wCzE7hvp^2DYfkT z(3LMjl9h-eW+&_fki#mfZJ=&poOz4fvf%l1L!?}cqE3`-NRA_%5gSv(d%v_@?a%z8 zv@I4oPm?KusiqLsULtdb6u-whsyzPmnd25fm>weJFNNE*h zJ$fJ`ykv6FeJWPn(}MjR^)H_K;CNq7dCywSUXER=Ogbb^AFi%ka=4wiJ#ocz642Xw z9Vf(>!j6GrQJb&q@%F9Kv$uK{Bl<2v)(XZyNvyP_GWRT8)n_Y4Ye0sjf=%*y4Lc{M z3DS2Vp;I|UnCCc{NK%TP7s}8ee92ZzrHtF9r}2_CB2*uJ{g(yC3@oyG&#y2l(#l$k zS?g+IAye(vOmnGb6`yX1o{n#v@21WAIrOr(?dIu#>~2k=rDYK3YHE>gNl+Axv1f5m z9yw@iuEo^F{$5U8)?jqebdli~i@IB$6h+q}yeI#^JQXJ}^=vqMM(5u>&HB6u4--DH zjXw&KHEoV~CN2|KL+hx&UshVW^th3_dcUeT^veQShT?3HeRhLd(!m~Vw|Dc)>xx9QNv}Y+D76pLc~0C3&~FDD!j}57&!*kQqEkgWGSZ zNer)L8<%Sm1n@T>xIFTIZd3ts5Eg1mJ7Dw=-YDe1NIzZc%>ES70$o+Pv+Y{>c4frV zXrD6Pb%(sB--MnkjUIU76l=_r%@!#he=W*cBxn^tyZi(&_>-+NN`mhiElOJCIV}SQ zC#P(19T3q@-S$F`&1v=8-fJb(8e$mQ_C9Zl`& z#cDwmm!Prw!$lEbRl7^;;q>P3xfvf9FZ$?CY*dGXv3J8`(C?jPy!pkCMu%+eaks};uewD-zHL5sIS`BssL!0T`>8kuJRV&wfZ6!Uk_geSEcm40g51T#K z$!mwi#qYOG4&MoRjm|BLrPL>f{T6lz^i&P4ubUl2W>$IJ`#K=n9e?=I?(21CKT{_S zRXKHE97+dfVg9zS9+Jds1V5jCQ<9AwP_(rLV&1xknF6^hRI*R9>xqc68f?=JxNL~O zrMdX*X%YKXS{rqXR6#rE2g(0sXz|4hwNrgR!S_+a) z^e#>A9kOP6)fV7yWHssbN?5f7N;b%KnEJDuo~@$4 z-yDsAJ)>|)x4ssTGwgD3T`U#xN8a_pyKuzFttpTV0&*>LjcuK&gCy;CXPWSLwvUwT zzc2C_eX!cMs&QFWiMr&+5z{PAi7R8VenV7eB2N!NpTH(wG!-iSbh|IP!bZ*Z1;KjU3BRUs>Ce%QMlpdi~aO5$}8$-+$QdT zvYt0xOg*%-UACk)p6xdyBVDg0E^l8rP90^n&^VuXi{-yP>Dr4v{(G5T4y6D+SN1r` zs!H>8l27zEa{4&jwz7}@eWtnhN~VqyJ-GTTK7Q`Ewo#m*6zad7c)9QQf7{Z352T+Q zK8)AYip|NF2VlgQEePur=G%9Ay*>6!X4;NYb;+ZfQ$cH8wnlvhqxMYsl3x|l(i{b& z6Q27&vD8tj{WSe$G*NV}LsmyNoohwZ>rUO7v2>p>{nw8fBb`-WOiS(qUh>CkcXYcA zs>gzQZ}`R0uv~lgB>8swH+BbAhgjJFfZVi$**##}pO2E!xgWUW10q6lg6xGjoQd?H zP4`HTf&f0W#a%K9#q?OiIjxTkz()R}d%e4SG&X4cT>Cx>TdXDZ& zt-L5E>_h}4Q+^-zRab)AdxI-(pCATaJlHf9WXZKI(0EI*+?k@Z#r{1})t5w{X;tf~Re%Mh2 z&WL#+2rX8sD)!^9PrTG)$i1$-LUlXJlSGhF9QfGv+gGdCPxxppq%Y^@BSl2l7zHo_$!yJ>DNaaWJ>8|l0!IKGEyWo$w%YdBF=#{Dom z2JPe8dlqHDym=RQ><<0Y{)`QBw>GQSU0aK=LAg4&c4j{+`p{;KtCZMX@F1vsr9TUa z(grjie2S|1)B4DoEheZq$qFgCAXdFg>v86CN7?L_lOi+9Wo+qO!$ii&vr0R5ioEm@Ntgu4OrVK(LjT_?IrR( z&F+oshq<=zDzdyT;Sr_$_h#dn-}s4G$lu$|@!Kw~uFd{9Jp%{Iha*=mVQNCF@fnic zY6TA>ho4SKGS$G0?|{K(KBdAW)=xF!u@p8*X`(ehK z^A*{76|*?hEOtF?mq_m1L38IU@o&N$pA6Omikn}<_*1#f@?nDi7;vu#B z`CHM3h9&HMPA2sPgZ{{9GgOX6@#9rs3cg{6K!J!q3Q%Esftq^h2;X0^@m8r%9D4nM z!PA8+$*(vDxIAo@35$LKB^Tg))3h#Et`0{Q~&B3sSbHcjGc@B{bcL=pBzblqkH$H&yy`2PEfSK~q5}?#0 zuz_&&qdX_^i`}Q?B{W)Dh@??-;Dos=%p^x%ZDgQwZ>n;agEddXcbFMNqpwCDq$KYC zKR5FY*Kxjl%CCBF%_zGg8LAVUk=U1w-Bq|Wd%Hu~l%4fnvDe7=0M?#n>Goy9@?=fe zqdRkEW^GFQQE__qwTW&3yLJW~+_z#);>amK@9NXNs&bKZo%3F|bAjglyFL>}@lFk6 z-6|qEl~qRbaMA}7seT(SB&1&`YwQP+WeoW%zfFb%L2*Nu^3?)m@9YeU0^mB_YXxy`5IC>-G>_IXiuWXuJo%}l0O%ae)GNT!gt3;LMjAh`<*pcdV4hRj% z_9Uc0AjL21gLsnS6oV6Fyuy&8Fsc|!gUY~vp*1P~{}4RtQp4D9M{_Nw*6NIu6Os>f z-!gGi6Y+K{X??Us${uq3hF9MB3@X)!N0{uW$bLL>A^)LXC1V*hKrg!b)7}ax^CY*QI^XG4|A1#t&PkPR%L}ulu1IvzEzxnccCZ?3!CT$3;+)Vz7nrmx^rn-tF51=> z;7uVov$va~_5FGKE4LfB!LcuDFmB1-k)PO}*Y%UU_A9ya$gw{sL5Zg zwV|ssFu3;;wkPag8;l;}n$z&$5tm-;jod2olI{K1c=t?QzFdv}h(to1@LxdhhyUj2 zTQDhDr7p`LOr_(qn?gMjgP=a7_3RNm0`mn0$v>;55gb5D|K5ME4ix;11_8VkDWeOs zE#QeXF}kF|2?FqE5GH6m;M`^Oz=(`N9m>*e22c3#xlSFb%Tcn8F+E#V9d&Gb#c{un z`q%Q86%geZni=aj0vKBuEe&=;MR}Ib?-v@jc=8xnTpj3l6SU@5Jk~qy{fnP_KdFC2 z{Ld>ZuA-D5)bz}5}jHEXNsOF+mp+E z8ATtO1R29VSb5GAd*yhU?ql93U@wJSI~peG3`?|82nsZ)t0CYEJdO~fNN|D*mJo9| z7>a^w7hCzQgOo+&VJzyw{kw=!j>H1LG!N`!xL=n6f&R0yzP)KPUJI(iTk~}0=UmEu zP(D9W%$c5^sgQo`-wc~-S1JMRc6XMdwxN9@3zz9}ig9;og$=(12-=n)`SOJ+Sw-ju zMJQvHj9AlZba@nj6D_4U^IgB`FF-IiVD{`E!CLFPy>(<$RmuSW&@SnC7{gK2yVqMZ zH$t8Ax+gjMhfzJ}C}!5+PmiRWZ|sgxo6|UKRyIUA`TGm8IVVg`eGGHnpN>0_OPsSTljfa z`099Lx9t3~>0i^47`YK_JFUA_gQ2AOpatAQ`hb6p-o?aAvSyDh>Pu`-SlBO+N-gHb z0SBwJ#mx?fbA2tLn%hbHV}s30n!Ca|+8w3SZEdcOct5;8^_jT(;#m-QcU3Q(q2cUT z%^ElC;HAO`B5Z-+{R5li1C6%yB3O+Pi>vl6A*s)#%j`@)QtUh($Ud~WwwK5(fsMU+ zS4D1(d`Q}@VkB;T7h(kMt=Fu9fgsDl$k%BAG0N4A$$)mnq;@OO)>G%htG0>;2Y!Cu z5UU0e2@kiYUe~7fAb47Fbe)5SOVuhthPSEraoxsxeKIsSP&$Exp86|-yIJCeF_(o0 zx9{VQyBs^)T3hkFPCmX%2RBxUSimSZear0j7W&GuMIqa;>$cZ_Ww5St?ePM(=V&R$4a273!)@>-N&?Hz~7?NMk};ik9ys4>$#Od_w&~2lEMr zVnGE>!KuLSwbQ8$d(0CKKTHC29ZYqrz}xZ1?*}esRT8+KbrBLXqwXvGQVgAa@E_4a zWH_RnK&`&#Nuw=u7l-WXg{QonzCtu;2_w6s_|c-vfk0K?b_v@J{X_PTYfA`*C768L zl&7SQ-_qhXxymEl?(S@|SmVV?dP22cVs4Mhx{M`k${%%<;w6BWJu1A0NV42+=agdQ0LsNbUb zJ6I0pcpN!e#-;66b=Wp%?_jT3p>s@5L!8mmk+JtN?!^o3eC$)d$$tVj(gd|V*aNF= zj>I~SQqdf4lf^s+`RjCHmq#G1YmUIRt7-z0R?(25W3XhTRGPw_ZSwm z{4bXv-()N-KPKOH%eo-GlDtcWpu9k9Lpx_Dmz5ii%w^fPI=K0$vUSH*oWt1bb9){v z`T6Ko7i{sgKqrJM;fe`R9{rgN?q{!etlzijqf*_20}_Pgk3{Y&dkDbHhc$PxGB2$m zZvF9iu2upq26&@i@yxy_qV88X;QFhQA>L_4wU=sN{DTDUo95#W54zbXh?2TDg8{d#d(2k%J23P$X1}k9G(<(4SBM9#TvBY^p%uG?{TF>%7@W0UyVi1E0!YBo? zrX5j>A17!rEFh~bqpCzPT$+(7a8MkWr}41M?Nc_u*L(L7W_N@y<(4NTlaW9qblD-O z>S+$!g;|e{tdRTE)mQnLQq;l8BH_Q?Czx+ZFaXp@Yx=uB=3Av7g$Can+%gq$n6^O2VQJdL3@lK(mTf%s{Th4`v~5f+qrXUo^1Q=+JSl*&L@l(@Y|!l z-5z=h*=;8Z+-7k0!b0wu54)L3gw(j&Sr4uBpZKYcS0q%`I$>p`Z2YWzCQJiL_-^E$ zv7l;~;3vBl#<W$`qEvel*{j>;OY^2<>=`e4={)RUC`uHzDUhnevMGL8tne9MACy zJ&L`>7be9|s_g+;jz70Y9b1^<@QPr;WjLM%S7?M=MTuzWVvAHMAzrfy?YZot*hjF0 zRgp$v6^`2o3?iYjZ6Q>s-d<(YlQ>1RA@lP6+EBC$Y(u&2M@%q|?Mf7*xtCKNhi3rYH}69J&#|v= zSXrtGkqSJ7GNp0*A(9}5ET!pxbGFvLdwmkT>*U>H*!13Vp(hZ<@5gD{Ji&Go?LV-k z+T7GJI2It|$cQVxuk@uUlh=xB4{}QQs6C7)gn7JGAqP#G;IdGvPr=G}jT@fsV}YO-?!`% zP}4%D`_{a4m~L=w6Ph!d(8qS`i=BOc;aw_Z%FfciEMpr@>T#nX1DndTk-00$W%1)` zOB2fXt52CL-k+}8>T#NZnH-9Q3~}K25hoAO3a3a7=I_e>gp%kXSPiGP zn@+KI)@ratirri)t-%EhQER11&z~Sdl742m6ez{LGX6VS$`C^ZD)IhwD(VLohzbvk z%xzbZY{|6lZxJOO0eVNFpFR4idnTg6;H!BtEy0r}d!uiny|<3IX1b3J^B-oh=NSVl zWi5=({RAj{lfdaO^G&U%nvComp^lX8iTQ8NVaa8bhEb-qHWUW`5h(|T84qL!UIr=? zkAUjrZEoiX(MJ5v&EQ$mf)q2M#THiTJmhRZI^=`8(| z>1opt75aW{22uiOm_jkLtBECIPeW2{x^i_Hd zsC-F&=ljnuSq5{h_RJa4V>>i_VNNVQlY4)2IA0w)m6DuTGLhjq-xVwKm19;$J0@MK4lDcD-E!Wnl6@hHh*YdmDC8Cc$1s zcJPOPk;#Uqvi}iT5VovFbIP`r8t9j@OSWWWmC>AolcsZgP2y7Pt~s&0letl#60O)d zTh}npDW3;rx<&`>r&(Ak+q*J|C*slVqt1n=gb3J|z9MId@Kac(kS!eYI(En$n+9X3 z$uwh4YQ~RX;)>K6ZM}bquHGkGuN7))zN;eyA^KBHdfb&^Ip@urzSvs5nMXqTM%wXa ztifZ?TGSDh(YZ$lCvoL*qK)vK4Kf44cQ>=pzDJw5_E85>TppIq(E6ecdz~aUh3C$& zzVsI1y)hwtFm7J56UlDb*&*9xuj#Z{$t>DP`lkY!Z_g6s0S_#bE&NR%$wynrurrz; zDw)=r2Pq7iB!jmmOK8J;>v}`=?}(G-*J%<_4WeoZQ?-`=Hog2g$VIFsOVZdfy^3~O zc|9qE9cM5ewTB7`Yy@6E8xAycx^slYqeWmoX)t<6T zOFzDS9CYbF7s-@jZsj!k5>poQZHopQy_6D+77}B{MU50ldE2Pe)`IwUIR^dzUnGg} z26{i+80Sdo;RxipCPbJy9Q}SG%EGwh9o7-ARO6oE5#P_+ib!H59;|=HyKLB2ILt1O zC2F1nOJHvF+86wkEzzf1d#9%tfBpN$Wj4_R;Zb}!B9mjv?ekP8n}SPt&oyR<8N}TP z$Az!P9uF>UQ>%Jzul4U%4-kfFa>L(w`(cNr#Hua7!7P{xO-n#D$3Xi($ht7%Qk8nO zCqTDGy9|`4);wPo`sK!=JBnhzGx)qzXG?CUj}j%Pk%X(J8Zv89Y#REWHBsmBDH*P5 z*ie?|1T-Iw67-sB+KQPREP%wh5X@+QhVZ0! zWk@R0O_}8c$I%$pxu2~a@yn*jmU-d57F;jJ6<0dsbN%GHWfSL&#@|&fv@&HHozjhM zKf*u8FR0LBu7|BcE*5;0BTxuRP{I)YCFXLqX(1Fs;T`tc>!0*=D3RI1sUJbP5b-AY zN~oqXuBT(s?E&O`4C{}7@}5vpiDRz^Ak4SK80}m7b`;{23-f;Xn)M|?DEzM9bNk`3 z3L}=Gtp!!T5^8^+fCSQ4^dGhNf3<|X>2`yPohWNpRDL%IcZ$qh*>bQQzu*{jTqDMl z!3Y=G>Rrk0BaAIN;g-&OkOR3raQ3#3!id6?gI0wKY%$lWN~^n*PLjmaL`XXOA*0HC z-0ofe3oDb&6ikpzpAIz5pK5N_Zw&rX#c;5`kwnnrR6lrQJlHYqv{(rFEK{yi{f}wL z;*`4*&sEd#o}lBg&A5cLM80jY54UHnWl-wjOpaI9zV@ny+}KaBLDJNDgnN-#YQ2NZ z3zEf@ClVxf~t!FPpNDF# zWDz|+kLSPs+Vr0E!3%?3ZwBYu6&xEHb}%?g4AySJOx;&y0qe{?#{fXk1&v^WnEAoR z}I4qN%s{Pizb)24Yt9zr-op6t$o~mp(g2lY zgQ_UxDkbeowh;DkDHnta-O0}G|1-wl*1Pz^Ji%gF9IXwA zGUI&Qkysz0ezm14Qq?Me!AoG5xQ0r|N8DK~OqI8j{wSM2eII+yO8IBH5fS097ze=9f zY0olmkCmpW6k^_o_QpdS`aEd$ zro%Wnf$0Qqao}m~l#}CqRH6$QB-3dcf3h-T7ui3?@%UCAV>GhOf-@qB+x)?ym_KU0 z2?hk-eu@m4)v3SCr&Hk*t*U)tI1(oFF525W*q0TyAW=DSAHdfBZ#|(tXQ!n>jC4K@ zaw@QA9_%)mP=i^(AcejUwOi7bozyPYn>1fZSBpkwR9ooU6nfuYkD5+lJMCk*i^{(^ zt_g{m78_avXax1T<7D6q0_T6MtFkNHu(rcC(;os8=cjpzU7-mj%>5xPL*5AE@)_^gmTA_AEiP)gOw>O z#O6v`DObgFP?*xNgC?MSrVN6>hL=pXG+ME>#^)0-oe|zn_>rpv`~Iy#hP$#_{P3GE zIPk-|QK+)HgWk%mCOJEoI9!A5$w=)?E){VS!gzYL$mPkv?3!6M3EoWD1n?5p195w6 z|K!CVYg&zv^G(j04hpHn-?ou0(08)*>Sj&m*Jo=jX829qHX8K#Q$!?h4$A(%_%ZeW zy0qgjU?odWYpg%oPYNQ==-qgb!C+tLQg6&e6kxZdEWFTd7tS``xCKK>bp;` zGS#uoT)NG4oC!)f$jbDceiIIFVBNBi4jKQ$8#M- zR9POOF-&PLgszwD;5?;RI3-rTkjf~ZXVOu53KTkD>kZ`77D135R^)|4B&$O2@=@B< zdlWTjDF^X!9wBeAie=t@Gn{!`#JO&lf3nWP(xVN`KIhhn)4fsK)P6Q$vj$=^%&#=2 z5rm?>UG~0>x0ZjAeDag+*@Iyz77=86_9a8GAZKegMR|C#co}c1G`veQ%wP6blIhgz zZw)$sD+jpF{v%p#H;6yp;W!Ns=-vWw#4Ac^eFpHS(Vz>>E&h(buDf~N@**|DlJp1d zdsUJn+38rad|DF@uP^S&3V}K9X6$x>DAPC31v>>vbprocuo06uOOOgUKpk{F`veAy z0l(V3Y{H{2RI{7OL+S(h*ao^g4w%Vg2n7_1N!0K6(%iqzlYcKM!=mP&1etSyGl!;l zd8Eb%^>jn;We{hd-*=rj5wwsT6F;II3OW6gCt-JZLfXs-Jl#(@eU$qu<*}}$qgUBi zCpKYMQP^pBH|J+7T^i*~UmbMDZbn6PS!$ev#ft%@SKkJ?cZ3m@;79eP_pEQ#Qdis3 zBhc$-Pa0Ib0d+QBR|TQ*pG6yeH(df<0vU#}YaO)mIUc6u{}WDc6l{AS`mcP<8R!(# zn+kh3@TXf4*EL~MttA$2QR$>&b{Zv(5aPRDA#ZtB(BSih*{cIlvvcIqlw4%jn@0J* znzgm6(Bx;;0eghzOAe_YQqzqGDXzvsL%pDJG1esbgk124PY*8*zE9H`_L?nT8;JANWJ#XHjP|7Sd(rDD6_bg5ng`$ zzu#@W?Xf85&X%sXfJcKZ=a#IV-pg(loTksdseeCX_Zy80TeCL*6lWgC^6?av_<(UO zS`EJQrQm2kN{O-9x1mwgEy|lNR61x&r4%TLv>3&H`!ik1@9{~GT*BN0#+ YTPyf!5}Tae*i&}|^Q_SvQ2V2Ww6i^^=I=O1MDS0X z8vwbNat$_a(($CyR|KKftr3P}_p(r(3%89S{<`+NiCbb%6(xb0GD11huWyXg3ih-u z%QA-Lk#Jwr3J%hLasG_=|10$^sLpc2e9I`mg!~OllDdoKW`f9M;$n<_^6vJnCYIO% zD>ihN&`%Zmx?NFwC~B5z7WJ3gMfmCpFV;IR^HRge4fILP#SH=s49QS;f%5bgPc*q_ z61)hp+eo>jz9%5!t2kU#8AxtmOJE-2nVt}~O>wJRgG1=&yFZMS%!I;dh?eVB z#en}1Mq~+TVl;Y{0`t|1eIo!eVg2V-`@1G{ zLnyZT@yTfuv%BJjs)E1l)RWjErJ)sYInv3-I);l)gN(uWKca8FF7?ss=V9UTWGm{r zzpC>02^QRItSzArq);}(Bn-vKEK3uhe~Q#pj3B)wY#J24q5coNH1Dwb*MO*}%~x`z z2lF9}W}tgEp7VVnrmYI=^>}r_zx94KP-4_>k|cdrX-?sut9+1@s1A#d*6png`1gdz zb9EZ~OttK=^d}$Qj8;ktoaaAiJ6M^E`Qvf~{9#bNr5)}()uI-}r~g58j;o>WzSh$& zp)uyn=lVhIzuW$bC1333nWlQ2)T&D&cueY3U0BTOcArG)L3yS{tp=6n!o4I?x{S5k zh1pq!s0o3(ru9i)FrXHxD9lzfSa%GaXXxSa`v|FXIjwl8+JgGwiS_wz%NoSzmZ(`cNOISUD(rqHbr+?xRyLO$C31 z^z{EUYHYiSuzyWPD@4KDCCJ+S<*ro8d#B9d5eD->8Trg|@?8*(ZHsDG(qT^%LV@~l20KaK8j%@A2?tzl}@?254|xUq`! zbvDW{D^juOOLhfA{ZHRlf7zc;{BmhN(W0WxOcTsXj&xvPO)cY}ST+|}2+Ve4lM#A( zbw@B0$9me%Vup6BhY?9#Q0U@l5dDcUwPpMz29yb_w!*7&wK=T{zmXuCr-yW z4ua%OcPRyPUuYj&=|zZ=c%qkBnIl)~LPO_s;XdXd9=4zxp_f^zGCLCt;yD<$hD%bifdFrS;=>;!k7n}1eHcek0e%h&egs!u zGJo#Y`6zEDy)}2>l~VhYJ^1fuW>Oz)E{rG+!)beT-sHS5&Ul`tX*FQ>j^~`=gS<0b zET7O9AO(G2vq@=vUzmCK`u)|rrbLOS`9$|p^FL}$afmUm>AT57%Z`s66Y%#-O$z4j z`Ex!#|4PD^!TtF~dPo{`?!7{v5vCx4^cTiIA>aS#M+=LvDClaA=;=mRWt(&xjspz0 zEP?gWxzR;C=czA!^p6HJOZ(*n)=0fb6f|YCe7Os~U6H-3b6`~r+4iROdL^e)KBu;( zj{Y*;)Op3LVS&K?t|pJQifh63CvU8xTW?%r79E}v&WK{nsH}tH54iL!BYqu%q_>PA zxy$e4FsN=Mz+M_QV90R1!s3PT(`(Bub`0NDRUst0dW1e5z0JCfGaUeshcT_eeixrY zTKeB9lVA!5w}c5E5~*WZ6GUMl(%9RVsKQP-yj3+W<{8$#8n{CSVZ7ySUSb{VBHwHxiyD(*5kb_))CuOx~Ot`q$-4Ju$i?8<~v^!0v3y z^kW2Evyq^J@kPmC`TivBh{Z2QK8@kOE9+A{TJBm-LzJ3g7k~Eg_H-_WhAqgDz!qgF zZ0$Sy!}|NMGwro@zb*PdZKy>>UFB~X=!JT!hV*+mt`1#EwiCE&WDYo|GTb^kps(k> zX&Y|nM&lN++{XoW#KzRZj@pC0OI|Mf!Usih)bSw6Ltn>Pq%NCo}A%9_7{w$Xm zt(bK@O`ulDX+a|+ zQ6*$9#LTm9)z=<{NPxqSJWiY9!>DbwtXBe3%Mu=CM_KI zaJ?PEiR`|l)5mxW#o^3@mP(#r9ly>#=#PiPr{^Ia=+|(LrRZqVUkz zq&=v|X$x{N+(X4}5EV({*LbB^i$l;!Km}6q`Q$#c`Mt$2CxQF@ZPm$+ zL+z?xwiEXH+Ea`$?I)8?9^UuT$3Z1GgE2&N`Br?>bapBwOGjyXc6!VVZXJL7)bBnk zTi4@KP|K-}qLsZ%p=|X4nG$WwjxK@+t9n*GR{ljMzess&vTc$xl+zPs!8fj+SPB69 zV6RVvu+>A`k8e$}bXQO;U+m@fy<6!yFgKx+DPdS>^@gjl8O(X~!~F3i(1DGFISUJ zG9+*9(A%?x5ChOLTlTrXq zZm+j3DrY%;tk}FUe`-+N*368|ymWR{_6-AU3OgRkHtJ*=Rc|{<$StSqEMN6V<0uH%~m3jN(;yN-X|u{2(^#!sXm(f?q9H1enD|5awVMhgdXrwt9dj2U9lxge1{oE_{ZOd z7Dnl41=b3JC9>wA3pS~T2e*LiT><2EDy9f~jWAFe0n=2kAFBv1`1-hXK=)`WC3I`O z2vMY^9^SMljm;xV*{iTGg1Ljp@t(|@hBM@yBj){%8N0xe2(tePj%;ij84fKt;y(qy zAjkwAcpzjXh4)+*WB|U>$N$RzR+AURlvY_4XDWJy=N`~TW)dcQ>bG(zAGtxX708t$ zEn7i2KVI7B{LFb%M%Gg2CV!2NY0Q^QHcMe z=&Zw-fFb?Dy1thiM*oDchNijW`PwT)L~J2Bv>dKH zLzb^|3cH>=>unPl7+FJ4o{$d)Pn*CNAc_$ZIn@!mMp76^RP z2p1YUVx4lrS2)Ky?)|;9xn%xx%ru^s=!wP`^HB{K&BMZkrYiBgn;FK)0@oQZ+%Vbe z9O-bGr7lad)N0E+EhQZSNr-m{Y9CV#BjZO*;s^Vf>1O`B_WE`fAq>|+)J^$)F{1MW zoRHUVY$%%K{mXexBo&NfD!rgwhC7i$2}P#?mqif|uYQ0y$)Wfa8ng{_TBIk<1EY0N zY#m+=Y~0qC{2X)_MN#drpWFME34j|q4uc*z$1NL0?cuM6J^`C!3_cRQ_V&MPoJWUO z4@ork9RzTK>eD_#2B~>qW{DI%#Kjmlb*fUJv3I_3=>`R(u|GQ!toPXNE$_9_M9O~H z%`LSWrR+P9I7kDgAis!_2LgmhywBkzG95^$eO5!@@K|ehi&N$K$v3lRixhIWzp*#Q zTIc@4`Id4sWUSlBaZ9u8S(QaQpg1aSApsDCWfd?T(*GRIX!o5fI8V@U4{Kp^RR0b*)Vp#-OcVeb-eP!{`>B&-`(tg-jDMQ6(x|L z;Lh+)c^~Myx+8i?B3Be(;5!a4V*^wE&%etix((!>mcP7r@H%p^;X$Z!aLp;aGg}iV zK5m8E4pNVd(RyH^e+OarcQVc%B``Yjx8L>CrQPrg9d?RKHOw|>$sKz22f=(V23=*7 z#pYWl0Xf)3BObIcaMX6zFWXyz%M^es^ve{-SCkU&-61J)KC>6M5b^4b_nmGeT+CUz<7Jl+RHB-ijggGD{=(5v)j$T^!m_nqYr6?Q495Zda2ud!o$pH)u$h{ zc;oaoeUkC24xywAN;og;DQ;<9ycAo z%I+dL)pFi}=2WJi?(^~+rm0g+jUj~VstqgcWB!n@H$wavQT{TGiHHLIUcE4l23=ts#0dMnOf8j&^+1|qg)LJ&8p~>q~+NeB;X{8PG$HQ?O z@i&a|+9n;0_uU3T4ZL5pm?Wt~vHn1BTIrheoqY`FzdJ1b>KCPO{+S3tn|P9Tz38f# zRaONFj8E=11Tn1|(8BxI!(R+JmBI*m{i|wh3^S@P>}RK+5*AR8vW-6s{z+lCAee)hKJ^i4SV`f_( z%Kjde<|(^#&71idospVSp%di=;#byUy!WfA)3cnZqRboR@y{D3dzhr&{m=*ZFwqWwnxi<)h%i}is2p-!z>@7J%PokX%GuHdCe zSg>{Jg&eu@p}y_-m6uq#l)=0El6zod^1tt#?^N#G#6{4n_mK(y^6lu0*R_1JoW9{T#M4F zY^ly!{d1>&H94Ckl)6V0+Q6TZpNtg`8~} zVMlRLysI)wN-VjdNFrK*)>j(+aA$7O~RW@f-6{`SSBhtgjIO|Z*qEtZHTfs=lz9MboDKi@(!XEE< zi_|?}uHJyQi?oQ~CdDG=(;5d|mU{W0Bcl*LaUO0s0Ni<5AZa1&hZlYvsiSJ6oLBsf!1P_NFd8#a0teJNh@8a@lng;r)ma^RgB<|X$#RJ`eqI-@f4 zWZXtmeplI^j!6p3xBAUx?>asf`@M|qb{QkjvfS3xe8!LgE?z(8``W{)w^_5io-rkN znGrhL*?tR|`oXJ=O#@wLe`85$iAQ2FA@~1D{PDFrS|b0sERqi)&1iX-)tAa?)bylD zVZM)($&ux1n){l%oYfxF3@ILWM79DkYFB_yp&CmlkY6aiFU}_Cy&?OTS(vx&en@9N z1rvU1>CjEZN*AZxmN2t2-m4Vy|hC55;27j+48&wMijQyD)t& z4QcIcGZ3R2gIqi$LnKUHDU+|QZo`P%x^J#k``c#55SpEv$_R#SMyo#iJnqIZ^%-Gs zX{nr|I6vy=>uc`5{n5raTEF_Y->j9W5pV5}jM4-IpSFDd&nJDsVhuBjMcf7mi8$h( zRGmOtadeh^=87lF?rgb*RIivCaG-hM%7`84(Gzy#E5t`tuV@1DKxr9ukG8vp{mK6hTrF@lAOv3hbdiHce#;dq|&N%<&Hkfmi)ilbC6fk?~Ai%-)~NV0Gz9l?~QmX?c|? zNhVx)#E+rzRtAhCs!H~~Ya%-fYg6^zPV2J5;M0XsVc?!k(tcb#A=u6Wg$ z{+6%pw1lYD-u<==Rx!juR)*Dr{Dq3c%_#k1(Y05(dM47)MX6z4AF%>QzeQS>aECe- z`FU1_?sid=1sie5^3-(wyOT!N3ebIob=tdXOZ4o!LLt*kCzB$Xn3p?cuGWI(rnY@} zYayO7(2EM5bqO-PhgKqe8dl{r_IUG!MzcZ;$b;p}ORERPOA4|5%N@RYa_1g6sQ=#Z z{?Lpq%m-a4wBUnst0_P zU5>ZbixNNHzc#KoO`#lGC?GRIw%j-;!NqUfu%#7p+9Pr~>BwYRHPp;RSKVP2o_DJL zYijZA|KgExDF5tV!z(PNK8W)rtey{XPyVk#$LycGpcaXg3F6eZiFQkQDKzw6%KNUa z=C)2|8Qr@{*e7Q}7cPzzksgsto`>V?P6Qczt>1JI(qR`f-fl|R$l+_7%M$QuScL9{=c zJh|yq13s<776<8I<$-!FXP*c|Ez0JHtvzMuLKus2?OBPs-@}OGee1rs4dL@0cmT(u zL@5IIGt85L*lFZx)fG^aTtoR09?Vv5AQw>{U-!0Dr$BJZyUs4qrM8p}Y|%TCg3`=p z8vQm5zJV~!5+ujZZvwZ zkapG?69i#BtgWrZFV>l7A4d9Q98;w@oE!F7?8(msQM~8z7~oU}jrg?6X8(7Md8usN z4mLe}V4EW^J42yAJn?`kd-&V4jd!=dTyl{B#_O$nmuY}XHv|XlRaJF?qAvF`his1z zX9nJgLCMsRjf(I`L-(i#BV>T=2mWdBJUpm+*%~`0Cb!05KjK%rx@^6ctfFRcY9*Ss z^eKt)3gFx5$TRw$^t-@*5W7gz9@I=C_hJ!T_fd{*l|%qO<|!ajZ#Cw)-rRYn%LVhv zByMY77Nh}jvN7fNtrwA@&)%7p3Oq3^&{qlD8$E&m6K`*Bf&pkbZ=hF@1g!veuXUS3 zC2~C|{&1b`vA`KQPQyb-D08~TP063RbB*jjx9>h`oRjdj2xiLmlj}R=xtdtJ`N!wR z9v2lCV_V+9>)ulJPAIaXxYE$4)KkG-VFl)tOPr45F*)L8D&z`R9-~*AiCUEk^#^P@ zD&VD)D@sR#z?VADz@zUY12znQ1qLP6>j0-MP-^`S+fE)tdKZX3*FruGE4Uu@#91}> zd8!pU2g=vk;TL&%{c6yWU~3P0Ix8DVO=>O8(`{FV=D+4|tcveQIcji;AN$stnK0zx z1367*h&P(g#0uX`9ork2f_RehHv}gdr3+)&D!jdrmtKnAZ4@mB- zV)<62XYdDD6!s>aT$HWN$7Ng0hWzN}D1U?7i=56bat#q^EQLGwFE%K)W*s5}coiOa zBd9tGK8AjtO4(vzd0bFjK)ESW^Us}ATY~Mz8afSo1KsQis394D)wZGQVIjtPkLQ0| z@0{H9TeC?NNWphlRmg`d1gv;0jxwaVg@Cdif)z*&7xZKfQb~J2iWo|y#-X+Xf1;`9 z+}e@r+_}>^%O3?5+jcuE?~YqtJ$KH6pt#gh9}q#D==-4&0UG6*Kahe$$Pky!jf&LK zRRxo^Ec>;iW1qWHos4W8PQPE{MZ1$!K~qBG^zrLIUb({6ndtNKcYRNNSFB8tZ25D2 z%`$R^ds#fn{==rv&4At*4O6n8N~y|ICm7Zc+B8gwcx3MK-K^fu)eI5*>SbBWRO4&p zTlm9Ofk;}&)x)lKK<^1xZNW&OB5Ot~!ETlN$NRTwOUR-mKZWn&B|W5Kd?hgNyE9H` zkA=!fFnJCy+&#d8X&3(37VsNFx%J##iSni1vqN%QnSX;FxEh}@H0|X!#XJz1NcOvY zThaGkE^H{&{?X@_o?Ic(KkPjcXoLfUk+XT8#_S(XONVwK`t#%=G|c+_Jxd$JOmQ66 z@qy>I2;bb1#dY3Ys1GH|g3u3TKAKYm$!x$4#tDoF#}CF0&y?DnZ_XREoRunfQ1_H& zx8+-k8BFKOn$>n91N)YqJ=&O1pm1r<-xKcqCI10NNrQ;AjLElL*dMAH>I?h+q+;_B z6f9*BncGKr-oRnMdbJRF{r56_=_gj=OC-~77gvfqlZqOTVK1>g(bY&Cz;IDbGNL>i z<>rzW6{Ksk>Dmia-yAzO0$Fe$PK$u{G;Kd2dz~9-3cW3S^x2VppGz%!_)45)R886# zG2O@FZQV~#64Oo zg9WIce`p_y5cu$h!fY(=r}S;T%|q^M9_@?C<+kOmgG3ENx~Q?8KIPY^8SiJsI zg-M~dU#C~rMRaaKC)7GV)bLdhBkP5ok@jKP+>VF9)Jk?I(;<|xKD__pUpNKuIDSLs zBZ`fTIKErENj4=Uot|tMH6$Jcb)rD)M^sB5Ym8*=Y8vL<{W1^4dF*Ceb+$pf1=E^K z_R|)t++4e5hp8dN> z^oxsQYI#WWxzk3II=OL5|0<>e2iq}9Y1^QtwsxhY`~swxq|C4L&WGeBQq@ z27ayS_7u)S?PWW}Hkg@xr^QZ7Rf)D%TGYXd%$9eXCKDarDT0&*+Kns|LP55;Ahk-{lej`!Calj+A*wn zi|nW~Mz+rIAiK+a^EAO(fh`7s_~aqu@G=b2;qdQ(ZM088g+~dP;_7Rci{RT4G6VDJ zTU}b@5?UX6q2NwiY2~1M-OTp!nyeB9Qhvin>0x%5`9YL$Pr zR@hzM$`dL{b}DL_YYL2lU!Qo%?Ze7OuXEfS6%R5Ek1#da&oV zGKRsAKF2<9gg#07H&w$sYuh7NF?)wYB{crc^|22#yXyD*<{!0oev^e91_|7E4KuW8 ziFyB^EG4{3EmQmhlOUTAp9w>}j@5WWDPAItivea7k4z-qNhSHjb}s(febtHJLWrZB zy?vaccM#(35Yuw?_T$U7wGeeZjSb3I}Yp+q9dTl&)d6UkM=)PJ9z?we0GvBbXl_cNR zo+`K@ZNIYWV8~#R8(#6{TVg$bq?nD#`$1~V7-3mgwrYVUu8$R(5n8LxzAJN$I3Omj z8sNF4n8|T5kV5K=nBq6;3bp$HsX-31@1v=Yj@k7$FPte@|Z{@{mhEWKFU9LWs+9i||-wat2;Xx1B$3K;hO2r-=KNeqmAs9s{c0~6l}%T=`UjUK`IAE2d51;16r zPWahny1yj&6)0iLL<}g9id~6ISL5rJu_(iVj<4IQrkR@};uD15)dp4_vqL*MVKL4Y znV-$JsI`UZtCXI+6tXb(rqJ<63hs&(9iVZ(F19|55CwS+Trx`jHB9J+SBCb5jn4B% zJ)8?d^08Uq@i&o7t|43+6-faXn`}*rm}2=Q5F@u*r&{Dbw}YiD3u!;Ij&TL#JW#WT z*}k#P+PAv_%1Z7OQr3Z;aGF)QuiRU#D7D+A6=D;6GUC7d=&c1y){C}wQ7XfSdScn4 z%jPzk=l2NHr%nWc{tGIagteAeHDv|vwDM`|`#BaD1{i+(yqkz5x9q{LAEAl4?6CU4 z3lF{Hjh=MpULV4R>c$ZR>_p7kk(O8y{?SFzqdH6I6>HpMC8&~$jcGZnPKrUIO1-O) zLVcnV=sRgK73LgeicrFgyduq2ZRIe5W6_b29T`-3Zk8yYoZ>f=D?ZN!=AYw3{}}%7+RsND znLl(7BMD|{*#E9+U%vhC+6yqSJ!1h}YN$d95KT6Q8+?LrX}2Lvg>;gJ3S{2%1HYeblho29 zblMfWWj$M%r^V##<3rpl$~avC0TMvNi0Zh)r~@ejQ8AJICVj6!-}%RZ7JN~&<-rE= zHmCE(YB`i|el@v{Y}7$JT17J0Gc-TWJ$m{%iYAUtwSEtZvfkikww83oY&o4XzvU1> zIG>!EXDQEjL_X@rD}G4wTOA87wEQq*)%DR+*xb6~QbVk@MSl?s&X3^t70s^g$0GHw{8a_r_#BOyh-r zr@f631wbWfB;F!)W#D(Wd5}jDc42K0MDMMtq#A(T|7&Se5v_Kb$3r8yZ!%H=gIv*m zt=|--R>-}o{x%KSsnI1h;HQ~L#bgN_h=znTFS42c?MS7T+E|^pGdI*$Q@d&pd0n1T zqYtHcLfuZ|ESRZB)Ta0c9~>&~tsZmP+UF@|xPd&hC)y4nY!HR2?1V6I4~dFU^t8P# zRMu9-hvrWFkj-}T_Q0DTp65rWZAHjQZytSF6&7d3_BfV!^m!^Ob=FW0j|kHVEpz{O z0yE)&H~Y>kndk~a`Ko3aqe?af&Xs;U6LQ-Gq()%rLmkx0Qzv9ESP`r69N<}&>_80^ z*epeu>SC>D(3@uw!m^&G1`5N^%D6=ZP2NT75t-llk{Q3$#5KXac`kesS3=z|F~#H5 zjFg#`-%3pkgv~jXtvnU&6x81r>jasv@)vJ%1A$T=xNwd{WXAA@*-%Q)7fijJkl3fr zD6ouKhKNO|u~@0TnG`#H#)U>(q-w7utVW;cqRjOcr!OX6|AzvY_z{3AFmD({r#>#XvT|Bi z1@j9$l*bF@V*QZiD*zl-EJKg^;JoKBcB(=4TM_S)rux^udd23X&pCFklZxen9hjKv z;e57=lDsOD(pY6POmJo^R7Km+HuB-7okXtRlmhMBu~{pCEzL2)QEbvubuwBT-Mt;&oD<7|z9s3ub`Va@L7T_~)RUV(?Q7xcP*tUpe|P1-WEaX3dHGf5 zU9CAsVr98$pNPH)FEX{9&OWChjGRU`6O6jpRU&C%@=hFy0^~;)?aJ8+oGw;5Lp!PP z=h@0JgdEzB%ile6?Yo*^-FzzO2%d@HBpcHwlEL`t8}7otKByPG;3M9`W>g;Qs;wMu zr#rW^A1}0>XpM_QqjewMnKR0?AZXtz{G@7F)jg2Z_F1!HcXwNS8v*o+J9Fwj#a~bE z_Y!wQzr6d(EBnd=?+qH>rpuxhSC2;W&lShVdS>F->jX>!aj{u#rp5tweS_XW$JoMG zAtqGf9;VzT)Z9EF$>?RH9~w=sbWxK_Yc9OuJXw<^IH_rQ(elA?BFN~52EjaKyUxui zETqQ%>xpIne|dP--rshesZi*F>s%{Ey<2-5Dr12eRljZvD;>1i zF0UdvYWEPi2OBs@arjZ*UVY{#vt;#SvFU`Mf-qyNtM6^?*n$-lU2E)somx*^>5Ey} zMc)yHL(35{0igMHu(gqvjICWm_b6ofJm*SSX`bG&4Hp<>d(|FVPKq{SyVut0 z{5n@FB=^7~`A#}gJuI4!Cq=yZ68e%dj0sIn?3&( zw|TKqEf+VtvLaj!Vx*|i_6SEbtDLLMi@rQ~dFG8mKE2HOeJQ=D-9)Uh0vOBjH8u%< zn221JUSt{E3O_4P@@B|iOaGj{=0iqAm?I_}WuP=N0cl&?Ap^D4#gW6mQ$%gPm7nL& z{m1>j?J*xkwJLFveb{-)x!vIcIm$o9;4DQ^9e({q0E0I7w|vrATfbXzHeUMd&gmYh zv65tIPUs`k7F|(b91zqv~ik9Bm>YJ zQXW3hSw4fbKk@*p4-KgS`-yd}dHi>c8pV|{jf6>Pcfht0b9SrxfLOUMWYDtpTVy|P zR}R$Gzn$ z`?dxf89Yh&Bf+`fwp+P2s}F6{JV?_nTG`1n8r|qTh?~y6juYC zAD^gd%{Dn?$SQXZux925o)uWR!i1hZAM^h!;TDH}VpgQ)pf53`DnII5C`?>=dh)Is z583*t?g-?9@6Kl_XA1RsfUi?)nV{DRLYmlZSTD@1`pn%4U)3>I6c13{(0EYtl?bK* zZdj*V1z9{06~#>GiPe#RT4PrS6wBq$Hm;ex>E_%mLi{ z+-PfM^A%o=?)?08)xB=(HYCBA{~k5^=46<^eVHAr$pdQ0ad=UDDdvyWcH$q_+!rUP zC-c-HM!`1=4I3@q-7WQz55A~OYfSP=jKE*!fn1a#WS1pU$*v)OWiamN3fSOy=d!A+ z)y3Ws*sj>uIf=(1nBOJ)yb!srM1kY7bY6{tkgFKtoj34*&edJHmpDQP=1G4Qhi1_m z{=1eV^Zia+%5$aS*0@ULpe++Q@9iD=+}17T;Qy{w1RSigw%;|G0JSz1-XNR^4;qRU z8pe%Eo*@(@hm7IB-PfHHkiz0+RRbo`v9eX8&jK=HLbF@R_by9%72tZL5!@ur7jCRg zdpz`4-4RNo>q{4#ES3lL-cz}J|EYI<#@VOiXDJZA`D%T?Hl6nD+wzxEq@xRc^3BT} zRc3)f2`tZs0J<-li^fX8J*X(bfgb}`?y5cg%9}f)+0>IGLDsJMxT0FXuGuu#nus1o zoJx=FWdV5UNfX~1yV@(weow70v54jaH0ySbGM*Ndpt$+ zk1dR*|FwMzs*UYcdWZ+q4H&i@FW9I14nqnphl%p^((9;pb|9t4_wNngRZCk%eE!a@ zobZ?R>=&Tx%A+rK&5LzptmB{-v83Wh};Haj#;d@dD%%j+tnT+?TsI+4BCxV zApUzj?H3&>zhOT&rtOYif#K)L+W~dyTQqkvU+kIBeurz@Tum9jD}QFxd_o4Ei7*8o z^h@8IMYfj#D7?Pro}EJ0dhv(n0N+^}@X^UoIJ+hw4UYY*qCaIG{+g5vIR1-A4uIH! zX|G&goT{aG9#>sZIl5*5d%J-N=_TgU+tXwgR%3BpAnC-YQ#ZEP^>`zTY6Ji(%v=e; z+O-;6n_4?CD~J3i_};ErFNvVrgND?;KUP+r$gJ25BqtpH(rT0tYfY+O>jk+_UO()W zg;NqMT0;RLC+ve!2cdQr4543MhH$Ygv{F&jdY7bmT`y@{B!hfO{(vuHyE*Z?$XDRb zb;WTSpbh7JWK%$fbbCf+ju85%xt_LbcJ}(0S$^=q4japv25&xl{=F+bZ|_?E+}TL+ zKVkx@eT}472m#qqkL~m!)6>(o{Bl;o$>Ea^@08{;OnTR7$;6>0YUyW>CV?7d zpMe0gGe~7($!)AkfZ1g3S`-U^h07F^su(cFkEp zSPrQeLS1dun6*2uTeDD|_p)|(s9d=8uJQ7-`P!Z4)JtOoR=$JIR_rM5ygenbz=Vc!w@|2PpzFXthU+@1 z1|mc9F-~9MxscDQw9{%=wx2r|7JLhpt!fjL+E);-ZQWIzOECx28ay-gYsvSRi&;(N zV=c=IQ>+?({WI^|nF3{c)^>SKlfT_)cOAF$VL zMUTju_&}7qv+zW-hs~SR(5Gp<76)Q=KIz-)j+u>!oN(rTw(KEL(yDY9N##NjCOo2B z^dzgL;Q_4OR){7Z#ZI?!PaRU30po3%Ih@^F2x`3tt=#MSoa%@C2@c{&`mtJ9xBL@t zABJ~ChsqWh8Z~$HVE!aiDgHUS_ro(cv;!gt{WB>tJ|AdXv%CmfkG9R4Y#(b7Uo{u?+Thr4BZ;1UiE5coBx~Wg#!fkLiFPn zFTcRo0Ks%2*Vmet($!W$ITo3cBrAh=RaJPAxpxl>WHRsEj=)n^K_gU<~ZgI})cn~33m(+7%M0O-u3DU~MYw&{5}AP{v2hPPU^8D4TMFZ` zSnORRvTxjpi|DV0tUgRONz+T+K=*PhJI4IZ=l!N18KN@Iyp?va#CTdzYXjFN+F?D( z`lOs1hrO=VnmVzqt5)2kz);km-)Yn~c57d=m3`s^Yj~RxP<7U8knAuI>O=_iUf+Sw zL3~wSA2#HRJlN0ww3nOYL(FqbwO40MHbUH1|Azognd^TxkH8yw|59>EILrX6Y*Mo* z5Cl@J;3GT(e#{Rn8$@>!31pRmmy2}H#m`!f_ddeAX)Owc$J3t4W~L*DqS$!8aVzUucs| zH&V0x2%f;J8ym|K@!#MQ#NU>E^au6uTb`>TnBUzOYt(y%-pCCa>b(f|o|#82h0nWU z7J0lD-ipG(gvdB`Nth!#k{aazG;cMC;3U*7_0o!E2P0R;xd>(=V|$`kac8cieVx&1 z+O4)?FL+B&bMD^S7M+ym8o>ebr0S|avKf2;u#pc%<<_t#r?r;_y>~rc+vny9e$X{? zQq}c6MSOM=!2GT=d`76tqY*4eDOjYh>ux=~;wNY(5&?b@N(ix&<@|92)b8orkxZZR zwIc%7nz8PuWbY+YURc|!bdXoBD-YX~^E)n9RTF-`wN+p^k`fwmM*!_YQsr`tEl!w_ z@;37nvdAnpyxH4mnGtJHWEtO*DL5b}gfaC!O%Ivj+Q0aRtk8Cu+qa(H*VGra)gC4S zV2e-m0X*QNuEZA|ZA6+OJ&9hPJwkr1+aXi-s#H&6NSdN9^34Pbtz#k=Z@WSfq%+-2 zKS*x7YW(#52NRmro(ti80J&7-7m>6T!Sb7ASPW^oTtf<(N31c-b->SBdA9$!| zB>UVWn5pqc@;>Zf91R0rxAe`Etb2XZhA^gmGR4_A zcavgv_m!RGs=K2@*1GmgMM9)D!HI6lBlC1;X{~qZD*T5Pp?BTfzq}APc+>y%#pXYj z6TBD+p9Ur>s|r+SXUCeyy)qNWl`Kj=`L78XOy ztH4}Zxt^hhY}E&~UVBgdAB}&FuHlLNrb9&`=u|q&(%I#q?O8fGRu^V}T$iU`QPA#o zwlsJa-#Sq}CT($=!r#y?-S@%L!I2JZf8WP&=GUJTT`)!zAp?jeeUP?^k8?7o{T^#& z)4}^^6~80G7OrPGW&0Y{Ih?_C2f-{P8C-U}`Jx5}*-S`_ABdV1i_c--FBFg`)OGV> z6XTyRh}S=+qxF6(kn)bN^hE6%)vY;+^i`3Lz@5*H2)--_ssekqDZop>kmM5o6#8#= znoHv(ulMcA;t0g$$KN&f_jdrK>>sP_3-&KuT)Eh<)TQHfd%+XUmF$JGoksGHUOrG( zR&VrVv}eC@7O=~iSI>Y;<=ZH#xeQRn{iwH7!2P;G%4isY+aEO5GI}yVB|IE5hMnAv z^O@C@83R~WCzsFfe5vJpx*>m%iQ-8cM zcaTRwKif?skxb`(x-*sM{-cb4gXMj@UmYam{HmdD zA6xcjPkC!{q1<1~``3q6yW1&Ze}xsbC_jG^dz50Poxu<@toNhWLAtE!t&7%s3Xa22 zaXxiFQ7i9se!(G(U!d?9_n~^~>VsKA_CO&WPO03K{q4AO%CwYfQzo(V)JY(1N=hd0 znK_^8tHCs-!*&En#z>>=$OKv6uNwDvHWmjO?vh1`O(e|$ZaT6OF~A@m-OIROJIuux<=zr1 z$LXVm`J<+ZCaTS0;)^u9IcwxaD?hwNe)6_XRE_OB*e$8l^5(9^$hTkwog80cjFh4ku3Y)V zEc4~|{-~K@77tN5ADobS<3hZ4OI1zPj41n}y3b9g)oK=LQ|8R7XkczGY#b1#L#tn2 z`dcD4x3I_qUqJgu_kq<=qzB_>q9^9*=TM@q>P)4pSfgvOG}9%{JXQNE?g!MWy~7gX;NF#Wqe_rAA;8S2c*F<_wg5QS{CqD3#7XT5j=-RI;+UEiSm zet{Bqug5f`3#P1CY-N6YS|;N20rFTSv`JEv?V84$+0d9a%d#|`g&;L56QZS?UZjHHGE z2f=OYLO#P-$$59DCY>tOeF1t4_;1CfQ-OO!D}H!=zC7mF0%?n4++q z{Ac6yP2p{BJ>yi7^SWvjK*&n{WsJ#7g+IarT%UzzTWHN!ohJv^XFd^ z+zqXoEcXr3m&{BA@oCAkVl1v4KEf_As=TSfYE#|E z>{I{Cc2-oDAvhY#?(MQBL<`GUminrdKT4hMEk04C+D|lzP*rn+#_6fgsu-GVV zP1~BV2jwlwB#M8NTW-B#HGkzed$eS8JNXoT+4cCg^h=UL$$OsGK(qIdzqF&mEiuu3 z2ir!=k-_jSl{f}6ML_xJHr-f;>|4WI=ok-!`lmBzPR1Pf-Uv6vofzvyDEjA%)a2|C z=EJCixdVTjj1#~PfBk3AAtB$$k?~SVs^H=Ayp0Khn15RlIZ0B)K9B^3(zl*lhj#xY z$m(eFiXN}nhG#HQ?tP=!@p#${)$}qk(@M1FedhzHD>F1{&)onKZDKFQE^q`EN7CZ2 zWC`WN#l-GGbtRHxJ)Dy$Z8bIHp&Xnex7CnRckfunb~k`sk1zK9cd7Z|Qp!XoBQ>NW zf1V*_{DdVmt%pTgt3vU|``8f4v%%QmnbsMtyy&}IGJCmf9;QD$7TZow^sbKdwAsL`C5P}hgku8C zOKX2KCytr(865zJq_F{*&qK4=a>~|6zfMjh=8vgQBuA^A{k{tdnKVQXZgq5;nPh>S zKRz!I8i3a;c&pCF%Rq8Pa^wPE15tn9yYY7hrP2D(A+KS+M#7Q36REZ198Y2y(BrM7(Sq7cxJwA25`kVD47x}>~y zB6z?k-7tV5qg13RCViQseCQLefaUd9;@0ZW^h#R2|E|fO2x{D>lio{WHJ`BxTZ*tx zjr9s7TIDJx$@xhk9G?}knIU5bMAhypGgcdvgKN#s2O;yPKU(UZl~nBZxlKwG#Tr~; zYw~B20+V2bEib0aL)>y~vFj*IN$kvd>@x1|R_LQP`-5$<@AngCC5;+Ce=kuy-Ll&n z%)3o_tt$AQIK`9uvBC76%Rbq>Nw>G42Zo8(9~+HoBnJwRtjkQs&v^N)C5N9%nQlv0 zZ{1B#7WKBOPH!!v+L9msclaO}$7t|o&)VR6ynB1rHD(rCs30@Dp2iaT7llJpzrILi zjkOnIlCPoLZS#D8o>^oW?|B(~uuv0by+y^f0b2<8cF;vvrH%OHhcXh4rTdk_@ zo!Fo?`Y%_H5O@)hJfrKPHc)vXXelbor$JnNz3pvMGR(r658aS1nt0NX(#!3sPC;Zs z;!-?U4b?35x{JVbUT#!37qS;D>1-T!|K6<=O%C%3;COFW{PF@H|!n>E$&-F7HZgNYL)TCZ9t~4%t&`?l)sV3m%Xh4W#f)bLEE#1!s;i>b_IgJr0qWb;P` z$%X}Wo=tCFD(6sPZ6UW^wu?FcA4lgM&-VKM;hxi>R@JWE*4|aKm2&7oiBWq~)QBKe zD`rknd$eZF9D7s5UL{6R)UKFG(AtR+DUtL0e1CuYBVO_HJoj_o_xrk9?r9g^bjo~M zJuhrg=AIf*B3X9tB{YkaJ=L1KT~O_*eBoMfn$4XWjhjK)yRkRsvduaycOGH@XD0NyRzn>nR7A;kO z58#baF;;)+6coC{GfUpd$cSbsSl7#lWN#v_4GRI7tjWhoAYf-lw^bp>9JnF}$~ISC z_$SACT~pHGe@p*I*Q%HQsVnx*cbu7pE9Rc}?>}6*;tL`rM1oZ0Jf z$RVZ$3~u5khP-QIaG-Z9C8;qAPHSjRG=!9Aloro;3wS3NX&RSTYv@+KtjyDGADyj` zf!0`;&(}8mMphsR1_%rrh5o9fm*4Yz@eu~@=-6j;6W(d<@+bTEZmSPFxX`NUu}`PT z_WnISkXEeI>}sa9Rn?EHZtAtvsCCr(pb^7!?=6pu*6K9{!a%UAH%)Aqfe@xt$)a3y zjIeX==jee`F_RoE|I~Dw#qtZ4Irgjn8$Pgp^~^2dOntB7zwMJa6or~5ne`;9-@O-# zIF0!JQRmVuVp!lN!edXH(*Z=b>Lb)fNa@ARtW2p|w+gQ+c$aipF4u(e^(&C%#7h*Z?0K;vjR|CPok1`uIrhc5n6{>=1Pk8rU?HkM)_ zaE5qN_G!lFUa&KtXI+IWgT9zkW0h)Y{uWqzP>;GV_Nwu5h|(007-xigZ?$X5jWDY| zhZz+5Ns1UQ1!b>%8>`q#(^vR=Bqs3cF;{y>?tO-%3>t^daMs$f5Z*D=S@*(BNI)0t@m+v@8@6W@( z@`MM90qihJRc*)c+&Sm3a<`;^F)smC&%q*gyhoXO8yIQbWLr>Jd~EN@EjsXnw_Ill z)dfoe1~tNS4=j>h?uQp{Z|ZerhJ7CUGTh!U6=pZl$OXIO;>#v6sfdYwAXbC%%eQ=d zh|8N%=(a#EnW_#M;goz8X}wlW+4yeI?h3ZYk+X5F1>q^u+L zTOYxyk1Rd1?~aYHuUCJ~^rM;d7a3gz5n%P_yLCRO&g|1GO!=D-kr^h_&3VYC1=W#c2?xfaR?BRMA))aln(JbR@83sMlULa|N{La60CJb#t_fzMQT&Rb_`qmhV+aeuT^2qJ{`bPF0Y z@7ef+D;yz<*=i{wF#`0O@Y-ijXGa@ZtilW=(gSu~;kog`beXU7e?~WO9y~fLtzGut zE|S!UXxKQ9qdaF=r#?U=z$woRpHygDSJ3(LK0>`+VG482F-2LmX@}C zkJ+V~*THa@%qtg;f3uQFwu$D9G9kyE>6w}N)nmsQ1xMma^UG@Qh;0YDeyqAqgzb4O zhF=Nb8sE;vj?0}0&7gwUaF`X}-^9pH04j_sSrp%yQXJ+-&(U`DU z8Q~c4R1-8LBZ2>MQlHCA1s(5U+N)=Xuj$U7W^Qo zRkg>RaelFi4~~ljTf@?Z+zg061~wPprwqGU*m(+I>w>bSm|MK?@2D4!R?@GN=$1SLcAQ$@uSZGUiY16*gWgd&ZBbuD z8l{`z>4Sc+*)@W~!?G^IapHmES0!bhcm8>Q5~meXt7iVrH`!}ksUp@Wv-)0$ENcQ% zF)vl>iP&t&l0*w$F;qn&G{Hc=mnwWP3~lak0~(p@^(PoM`*k1U}L>|kHUQy`7)EeS{Hx6E~GT(iIj z9Ogl;2?rS#y=&+QV*-xv4WRMNFJ0JhsSz=~#@^f>gIBfztvw{T$4EhWrJIil86UK@B6$F%i}oN{eA*YrS5erk)wc+I)dQx zuj#7EBV@OVZ^-@$UE_#--qza2;xlBsb_g1t1Eu9aM0od3!Gy|~ivLbjF3 z0Pqk2es+4DJ%b&_^* zfB>TfSqRVM2axQ*NM})Sp?I12_b-~02eZ)~&V5Q@%0vW}R)_EmYumsMK{7W;$vSV*eFtAovac{rMuUuR6w{+a-Q#VHHzU3%pzq0tjjQ2(SC34b?xv({xVm*V-jb! zgUX!r1N!X}irB1M0jYc8!mmp);vXu&M{q`DPg}<`QP_=04U7NFIPP#|R1XEPdDiH%V@%7{>0f)Yvp)#a&W#M5>1k6Eo*F;dkU(wi<9Ye z_vgeF4vL#*w@dI9e~^Q+7RS4<6OfW$C7g@)cioUnR{Hg=f?494<&W#RaDMt@P@Ksi zerG&KS+e}#v@CZ2Bk(V~PeuZK9F41gPy$O8SfKy;50aGv@)r+#f>mdLBhV(hn6l6A z(-g-$9XB|+f%=TKTM^+6Z6HI3s1G{lyZ`E(EPw_3h6V_kqLqop1Rq2K@P+>ExU3Eo zBm@K4a;8q4`fEgzB_?xm0G80XRim|$*T4ub-u0H%BS(3i-`a#ka4xK9lu>L6wXCDT z8?bwjX>ufOz0>Ti3Y_d7=ilT!sPv$#Y}UfQ5!;6;AKY4~ZRM(sWMXj1WA7}CwoZaa zuJ}W_TTC4;iu;I`pZi7xz{DedDYm-~kVksTQ;CRyyGHdCX>vo^k7e})0Q@(&tm9n) zU)1_b`t>|Tu~tY40~>U_k@!ggFgaRP-z%L7$aAFKyKsL$Xs4Wv<<;g<7&qI|d|zU2 zFlM}&rf2rEp(nOZAg~yLM)q*jV=j#7D2A!Y)nLsgXgCA_YJ~fRT-Ky29SWsCIVPme}YabNHRDmh~~Y2 zf%@=8a$T3F1LwR9mW6VUh&u4O;ICs`MihC za8%$N-v^x|yl1nfEfbAHR6(S3_7CD6oC46uQrV6-f|+#M8F#_%3q zlm>irFxb;m1!7)(U>M_KD3|>7)Kz8DycjPYYCHPhHU6jdc}m&-3r*N|Cf>NQ>8Tr0 z{_;f(Xs@{EukuTL68>r`P3R$I5>f}%#0jC~@%{!F&I7fBnH{vbnb1kj)@&b4>zCXy zEZyx4*lOacJv`0v+5RvT%uBKu9>&Jb3!pgrq01Hb(xsMS;7ITk%|xswb|jw1-TQt{jsY zGd3iGQqLETGatSXc|X?lVH$wP{BU(uwdS*aW400b=#5sm0TzkTW();45*!a$H^^#= zaJ2=VP)6B7WzO*;iW9*#nr`|zXLN)JJ$P@qPH9p}WO1NS=`#@)jWs{sS16DP-qz#~|Gv1mbSI$R&P4c@g|_Wa&dt7hu?VM09FTKbUQC*-&C zus~B^BC2w04#XGkjpvhQdm(LpD;p=q+}13V8}O~qt?O7bGpMO2P4^y0%De`xy<(F- zULs@nmFroz!pt_wHwkNz*R0pd5jLGWtsdj4WT4<0mtvczd3V^ve|N^yA37W$=KSc4 zyA3sf_ZTbiWP!AIX!`#yUJ)we6zf_246hvS~nn%wG`N1|u-I{h62u!**L!4Ka}FZicJ zbQqG#=%hY;_A9_fZa<3dz4OKHQ3MRFcAuO|a2yVC1Ylv|I7Do(GGTQyBqpcI8W59* zI?T$HcnOha|846`6!nKC4N1A;-VjwKsnujo($ZCCpU2nJBgTlezFR*2Q=A5GZy;M> z`$Ue9Sf=wpD`^`_x(7LO_+++Uv9c2=ynZ;o`?0A(5p?|j+N?3<}Ka4$sZo!zSjTvUW#=}9>=8)BABTYjyyDx0t3jqVWQ!H8C#ElKsQ{YD9@Z8-6bRRKadmAmKG5=2)*wh zbxf>exq2V27N;r$>EXymp|6;vQp)rtCm8|2D6^%zb%@I(t*fGLrpxD^A=&TiL6Xva zL-s~5fu);dQFM?^S#MkA^EzutA^-gLcaV6QwRBD6`ThBG-I*(c74ORLr>p8 zZf_~j@-jML-dIl*U^uER`|bsTRD_w4BZyEN?Z#(?$+v3Tf*fuw!on2mpclTq%@*?t zJezI3p|-0}|L*&nBc!GK@zrUjo{C+oX%%;R5tnIw<$SWI;+yVs^b}?`y~McEuuk@E z=~eD~$@Wp9zHd@)&og{0Sl|=?j5VzUI>z9{v3?Qv8uB*eg0U1Oy*C-iQ&pfE;8?s*5CMwZn}WclWJHc6*B22aaXsh5 zQ}2{QqJ!i-ZBo%w>?_NV?6jrj)vWfI$%Rna*v`4_YeC~gmg6n!XzbK7RfW(*UsKuY zoufbTumfYExnG-SonyElAaS>pJ*-VY7I!pal=xJA9}Ij@DDXiMh<+`Qa_x{eL7kMu zjQ}JLDcn~r#Y-N|WXX}vfUJUIa>*d4svxQmgC1BDC#)xUmoX#*mo=?On!?bh^($TK zEP_Us@(dSlWYyS=*ynrQTIC+frgc!%(H)p|X~>!?p-|wHrCU4e1s3kA(h$@UZ*WJ~ z&R%i?jy%QcN>lTBFSgSC3PZc*$kg*P&6iC_w8BuU%R=Q5JUsSYw+gXAw!$Ky@wYao z1YW?EcFYR2_lJpfAOxgoV3=E0@QOHDx+^)X(k;CutSAaZw3Y#Tqc(kFuyn*MUC)=3 ze>HP-6Qf`IZA}Q}nSox5xpdgd?Z^9rq>0=k*5B8$u))0p?LF+-(B@+g%r}SdgP&;o zFwW#K(|;iz3ss>N_O)pkK!}KgubVa&9QyzEKCASWaR*{cacgXlBjZ1LhZE%Pn%iYb z8D|^@SkpBIt(bip6;uf%FdFsG*6;sqmIV>yqH!Z=X!K+LZQ^{X^sm%_7Echu1Pk40 zBul((Fs^RQkeI2uV>MS|L;KdEOcEm5CF%wcpGw3=hp5YFD=HtZo^@Q@P4NM*Nr_$= zgX@!FmHcP$G5Io^Ov_qNP2C0r@jWemtL`JW3ceCipPqw z%%?qR%R`=dny+Z_f^TpKsiLtHr{Gcr?C#dmOq}46@Z4FMZ%Fw*`6^eZ0zk=QpW1=Gl1<6YPe_##Za>X1+Pj;*lG~ zW-5v*RZPTO%<=7v_JW(|rd&w1V z_Tcl^|E?WKp2mCc+_v5;hh`$|sJMioFhO-7JO=_^S;%lw__1mj2V`<1+#NkHbAE01hsZtiLs!rFIs-{dv+YnOXaZG$G&~&&dIuYAPKZOguf*Q}9 z{%zo5{b31mJW^q$5ddLJZxU)AVXL1BhlVQ7FJ|Aeu=RMwL07}(p#P_Bc6$dDj(2H# zBJyVcn|1WtPw8^wQYLW2MmG|W4jkF%Qw8(XsL>xVHCpQB^x00lA{6!}B& zR&P*3Gsu9qx@5pSi@(gv!8W?U=51nSC0?Fagy-&DX>R#X&AJy=!V>}sOgVl6xxfwu zSJs;&HaFDX41DF5PT{tS_;J-hK^VV%!jRLGoe8xFy^JcoQdjugR>tf6*V903&uB^A zc#g^n7yZ)9h58>V8i3X^&4p=H!{sez6xRQU811`xCb??*KfGq^nLW?Y+LHy8QM}sy z8J~tTCgvZ>j^K_3poM8W4!zww^&mRj1qcmLY4?cN^^`2vSjhC30%4pi1B(qfBTmG? z*j06e&|k{~EpwOxDw5Eknewaseji1cd!j9`i<9NyE9wGuK;Vvd80=Ds!ajXyXSG9v zCABHl)#mx9E$hrEG;l-RcDHxBv&`FKM(Z2tetQSJyFS5d`-xgYPA3@?T-yc!uFo>W zVj-~iaeM5ST(dRNY}4+=!vF*2!Jy-jnu$tu`A~4h4wy}%X=#+?4K`{?TGmc`=} zspo~d>l1<7+tdec-QI)0v+r%Z-9M81f>sE&(1{&%M?vt7R{0U8AD&D0J3lK6IlxJP zo_U_xW!f}`jTw<=ud2d;5FQD(*yrZjc~utXgy)fs?_>L4xFB!9#t{JZ$08Wj1aylb z4vcdFpZ=ZkM>0Y>k#Vcs$7`$eXGT1pqyy;3KeZ=?9LLpD7PEsKTg+?E0YkTB*u8d> z*>AHiz80z=>G)r5nd^!?`qwE0+0%7#2e=)_DUX2GzAI6X1PtvQ(A8Ey!n}z>xe-;~ z664;LkPGC1z0ajl4jtO3*KH_G@}I`{EW=;x9v0_P!y{CHxLK^eupctA&3IVfDV`qx zwg^c>H+aiU^k#?DtrrcSzcs3OIWjE{ZtN{IL^Tv{DH8k!o#m|J2a@&g(3vE;CKl*@ zNL4740he)p+s|{y@~gg4zeZ3`W+U+PZ#{`HM+c}p2Qrz{U%qFG&Bw^zu9<8x^62T_ zovcaEs8KfA5mz}b?R|kt3U9_ueqWAF0y(z7xMmJ)X~s&>)c_ancn|(+JsADQd@iX^z^BxZGKsP1 zDf(SU1~sm*aH3<(;j3^_{RPk;#T3nXkZN$1H734=Q4rkzz4lOHM@Aag^|8LzTj;Uo zH{t~M@3dNEf?16vleJk{!WX9}u5rnFpU9)LX%_>YY+KxOX?dPIZO>#6QPZQDbE%Jg z6k+=%fvHFc5uD2cM11G-Kq`SRV) zfy~X5td52KQy0eSksWe#E-UaNiHYyqtir`yP}dnQo9RwXC}Y7Xu^R`?ThA)G%2M|P zdvM@jOHriA$o?7np)Pe=;KlaBCCgDnT%!Be;y8XV5bEy}sd1xAZbPW++?6?&|DjG~}dGSzPS+vMr>tt561!HiKg* z?{##@_jD54dZM$Wv8LR%u#R*FKzMexlW zwk+34NY=E!T!ub1U+Vha!U18><(b5~em~<+vO_osN<#1`b-rg}(doa%u5d=&2k zbiusT`G&Uj>VYEvi*whfVIzu^I%DSJyA|8NoBM7^6}1+$ds5RPXd-5MmB^t%*MEgj zD_+I7iXUJ*j_Z6r>dQEHM82Tp4N7x2=}76$Q}iZZqCWd90sVKrSK$P){J(Kbalkc z2yUX;n7qB+uQ_LNw2~GUez!yld(L>6esc?o(SrX>g9!IWznHH69M{$8z9JB7NBgKh zVKkn}*t_OI!8@&lzmn<%?+ZQs5JG+ zj@{~z{twnHspBIlzJkrnw?au`H^$yUFP~=7GoqIQo~qc~MZY3^K6l>oFo`ztG0i_q z59u&8yf}ICjA>UN#xjS~chx&1nhfFP{7ih#Gk%J)1A-U+#23SNEp&yl;svIT4t`cB zHXH;Io(l4a97STT20f31ll~y;B+O+!NKc{5SW(K~#J@Y9>Q|4vXd4>0w^o?qp-2#3 z5ym_|t_UQksZCQD`RgwhDtsY-deE4^>8xsk3unLd_?-2orR&MZpAyJ+1Rr7pi9iV) z_+5g@^0>AEgX{W6F$l&8rrihuB2#jJyq|YzL8!?>w?QSar2D!B0MU{#jFyHUOWsq1 za_WlLK`g`S;=Qb4QshO#BK|1B9{`mi7(l|8T6>O+Ag2Jr45V9wP@_rCBmA^n2ng5M zKM-u0ro56q4J0b=Uj)_#V2PyE12O5-2@~p|*KGY}8}<4Sd>-4tMvfif644s^Z3xMI zt#a{$a;zey(>Aa*Cu(#(DzPE8f@>oKA6I0Ozaw#6MXOPzAvD!61(G4sh+=DHd@V)m zvTMg$Kq8KGP3S2eDJ?x1yJ3NT$2@#YqMq+k&!j;!-<3yCx`H2OLH4~AqOcMG^A~M3 zbq3kO^aYS%fQfWWcfxc8uB(acM97j0T(H?q-31hI@y<_!j+Q8`7}6R>a#asA<=8p9 zQ3#GEoSoKxloCKW4j_I!e|}XRCXH2J>LNwXGwqKc2m^~2|HCEU{Q*zKu}{VlS=5=x zjPOi- z$05*+L>qvI7P6HASauLW9UGD3>xxt7{+&&Fdi_@~JF%{3^)MIXhOFA<_Kt3|Pzpr4 zzy-CC=QP^}Olb9M^%R5Zo!s>y$9Qhb$f?-0qrZp-$o@J(tHq=47g?5zQE2Xp=+wbW zwi$nyAZW!80XC85>b}eX-%8!$+LvC)5*psVIC%+P%XD8gS%GXU!K$`3IKnouD1H<= zpOLNhu3zYjuCg>eI*QjRAy+L6usTQ8k`Dy`&Gy*I?3c+CogCdNNO&u5OS;f%-t2j4a+2ucgj~EcPQfpX2y~y*7#G zF&o|AMF?7basGP+F*GaBKesKh6Q-lvjovg{`a9c)pM{rB-7nix9Hty zYnsMJ1Si=N-vb`Xg}p;fF|8s7o`=HyU7Nd_BpHz}(W}<kd3#h20@4Y1tYP%CGyrOJdDb`{5N;*hl_hLTHr%<1DpK1Qjo&ow|8n~gl~QHb;5GH5r59LsKPP#nm`r{%9=}b zHKmW1ccy$?C1{x|nZ*Yl9-Od+aRv}!Bg==vGa#;_=UyV#_$WIf`}{&t0GH^d2Wn5Z zPWq6pMsE4p7p*UG9anROWgD`|Sq}H-@q~s11>J7>Is*wE7a9z8xzzJ5y{~Mhd!<)P z8ZGsA!pz~?Emw0nF69zkssMR@V`?UmKDGfDn`9?D!p;FT#}RYZnN0?9_D>dkD>DP^ z=iw@-13L2ux~2)n#ukm#7*{y;`V`?z#V;COAv*NmH8<>4`dGUqs3h7-kFCS37m%X+ z0_GO~&PkTKad+{lV1Y*dn^$>ibYX6Ul@K5sal}GKYNXLxEWex%c-=UED>E!XNNF*! z&fDwInoFN`d6%IXFz)USeGEh3M)tGo$(qB5;b1dDY=S~T{ReG#16h-_<(sbY{s(3~ z8O!O2JUUO)JC8pe(n*eWUnj~ABbj7x0vFTS-h`TXSxXjm;8rA5@<;I}@FoDUU~6pm zm@i@-W=LqtGT2B%ybZgK>k+^yzw=k;+_BgO^Fa;38K{mFjzY;eG&`CH8YnSc; z63TWb={dVI%}KAVW{eAMsHBrz#sk_DC@8@YqZ+KG|B-_- zFTpmawzg&cwh<{h3nNPh<$U^_>-CS_V@T^FtJMTo!29{)_=B-xlvkX=+d%a{!uX&< zj?1#RJ~n%6V)J+D9i ze3fU|@|epx(U>Sme!HlPN*ZnAiSBF()~vy9$>~Ih#?xiKr+?2M;B?8lOBGImPO;m= zW&2GXs?skd2MPs{CU8-yG8O|9(&3Vo%nIlwCgXlO?^1t5=Kwhe|BSaaOf{2u&W&)X z4CUGoEckg3L|>l4R#iDaXi|zFhqu?%TP#e-?;WQKz>SuiPSm8v9(y(Om}ZrMT9THh^WYBiiRXlR26|aW{<>jbGc>Gf1?-fjvEGimc?YnewfjAbEj;D% zN>#}|WtSXC?!(b2!}VM(fp?Z7J1QM(;d1v7Z=Fn=yZV z?pa%MW2G#3ZR97v4E)UKQNPj6FLq$PyTflg+mmGMbG}bF-71>Ub#6ov=H67TIra=_ z_C7#mxN4o~u1|N%5vDfIV~)zFQOG-FQFNz4y1l0*jwe*CxTTdzaAnsf?QuYW=>Entn)73F?Ez)Z3SdXwz?WYL6@^zWxX{x z)z2bnlXAkpn%nP=J+L}qS`}c65Fj(*v~yg%iEOJYWOt2@_W489(ZTW+r)H-|(Hl|X zpH?fjB4zFs<(Ho}dNXTZeNgQKM!9`V4fBhVlXyF&OlXzaswziKx5g}9-~pha2?D{W+%fqDLxNuVA} zy6;w^<2%ASOKl!~uFJ3KZ_N>pr^L<2@t^Rn;@`&znJdrgLKJ(-!hDqF2S>I1fEUyy zw_{gy%~&n&q;I21onV2y0c;dAoB=p+5^PRkia%mmfcan%mkX-cqhUU5~~ z5oq@D?2;@j*04CE7)y0J025&Y5M)m5$q3--)vt{sw_%aXrsy>>LgMaup)4VQ)GXbX zOoN6(KlymyPvLXJYmlQV$jf>&#Rfd+kd&O_omN;?qPKKi9~;8E$6+0Z7#al@F-SHxGbl{Y*_eJcCZ>vX8E=Ml=L}+& zk51cG%G(0iZzZ_H5^VS#rt1(x!k(JwXTQp|O`(NCt^{|~k`Igal1LlKbimz&Ziiqu z%%(UqDxe4>@`(c8m}e%Z2Ck(mcEOK^l!`WofbV?3%6_}Mdu5A75b6!^D#5&m55=KD zTb;I*M&ji4^1eYtB1X6{)|dOLtG`n!Z4?o3V z{fkNY&ychj5$3dvkhQl-C4uw#c@|*1sekwx`sM<7QaQ&fgy&Pz88i59p8 zd^kmoJ4LZI)oQ^XIv#9cfqKVa!=EMXf(meA_>h<>v)8h9Y4^IL0Uh=NM~M|3aBl1% zxx{|KijCwxt}!>+YHdt%POq^kt(&-K`X+3m-ns@k?LZF?&Ywnae176^C!kUBbq!vq z>S;o4#qBCRVEI%di7DA+Ya0TWfjS2LQPKWlrBPk3>*5d+4X^>qoKTIS-&%Br_arN(NuDkQ?;KL&VGBwk9~MK2aS_uBSZTP>;N8 zhYIXG8WP}z4@?f@2c{vt9J7Z)U4-rIa?jkdg*Kex>~qL@AhSa$@~8Vf^2lI*_$Lb> zs>bvv;4_ze1Gn`QmoxUM3PbZv$xiZqgp-&Amm5bicK}qc^yfjfc7CR!_+{+b?AT); z2DEm$tFhY>{{811L*`IDD6_}$Oqtf(aaP+xW8Ieh5|KPe=*YI?0izS-GB{$1DggX( zc|7nW{i_d(PQk=%%NaqVeLloU<1!dp>0vRjly>dHs=1xOpY(Bf)@lVY;8!zn&hZ)3 zOr51DkzMdioNKmlKQy;2DI(h`*u}Nfdii=8gqtI?A~uE=7V&N7e&X1Dt7V1$gA%Q_ zrZ$s=0re$Y5--{BQa0=!cVJx&gvv&cjYY#NaErh?`Rd54HHrD61i4yr!=Oz{@sQTg zW?rFU*1`VivSZVdhTsZUkQbZ=V2}NGZR6jF2c2X-;MhKyK0`+KH5sPX3TF=?mMez1 zIZ7%V$&KDgOqIWo*Y;(#GDqUhR8LRtcM|_l8h3>~&}k=7+`jCtXAq683b8o@IWQTg$76ZyJ16%MDPmhMOA2S{JuLp!G)Rwjk zT5``Bv}X{qkA97x=1OZhdwSzj7dqao295i zGDYqh_PN7h247h z^|L?zrmho2*SwziDWS=)!9w8`{`Nq==YWg>wPg?_pXT(oo6Tu3N9WcXH%C1%XYBYk zft>$0}WG&nJ>QD;Ws}tU-{D%nZ-dwM5_N8o78O^RBS(Xk-;5a7u~B$VAxe`Yb*mgpEs>&d8qYpi$Hy9EJ2>;bDXc8Cb-g_cvg!<618N z$8l*sEc5mCz4QJOM3L>AZkb{x7us_m8Zj~j_)2f!$EC#Zl}C1zzvpXPCUgv1+XxY< z*iWVBDnU$xYR}+_jzdPQ#5b|DnJo(b*jv1!HY#w0!}HkWHs75~lG%8Q27s|KQcta0e^ z0B8CcWzL{Yx(h-Y<|5RfivpkBfz5oZ`u@*<$?XjkZFOxuK&i%RvDSs3UJfHv})hvUg5$ zVEJxvm{TIXRwR7_?Unj2Q`bAn0G@CNdU6DebvID$$t;Kqd;7Gi_@9OtHSU4dkd)%)RS9d%jxH{-=ehBm zk8AEd>B2*Gl$~Jo$991m5ntOzv2}kg0@ZKwbHmUrnjr^f!cbXqc@B;z5y7HV+xZ$Z zvH!u|pn9sMw7a`y)?CT9-|4#H111`PUl23bbcY!W>WU|~!k^{`4`s^nn&(cc1iQ$c z?)|JUlz#OKkjb>XA?tV1FesTuCFOfy31lnNsDzY)oGki;X0Iup0XxZmhUc)nF>Fm^ zpW>Y%Tff7-ENCyerkE2Np57faBb~V>R2gO~dM0L0K0Y^_dauq9V3f=$|6^67j%+ez z=&iZ#xWE)!KbZ)v+4*ie^!h@n_y`6Kyh!_f_}SWyrX`v_o@d)ga<{;b^f%eP9Sqq+*4QkQI?{&&vATgb&x-~ z(AsNvcod0b?=}L!L(oU?v2(yE1>U&wl$1;b+|MwQb~>(y#$@)@0_YhI483R75A_Xo zc|&T0degSXfX&*q=vA|@lPYlL6a35|b159VerC{6EA%^eWnRO*`dbBYKMZRdJv56u)O7A0dpN6VRb=?l|&N9%D?_q*u5XBQ1WS1yG^` zqx-o}ZsiG=p*SO+&b;$gSSQqNv?d5qf5exQoBM&$O|Jy`fp$A#6oRW$yVPIUFG{;7 z)I7g%Prc2Xp=qU?gdW$KLplAaqjGZK`cLe~4_EWGd+8KraurPqswU2h%16;6-T^|! zCu_DN&tjt^9))M|m{vN%QpDLJy=?k3g7x{#D=jgFu*l0jKZR*N)ZzgB4lqI z69)xMro~=?hx=|SUS8$^yRgf;m%4xjCRtwtv{*h1ZhPM%iDZDJ8HFmxf^;G7Z~c43 zg{CQ%3@p~Rdo~q&Yj=tEQYrA-n#Y6YDFy`=)-lG8>?S@cA)nsU!E37nB-+MJ>EjHH zNom`IPb{kVL^aH)UPQ!uVtc+j>5ztQ5C8VUcO0HdA5)&c#h_sN#a*Ft#xjeCE9Sg9 zRHY>r1sOZ8uuUIRG)f?SblCYHZz>uIHj0m+=}Xo4PH_x&_q&S6Pu*U%l_i6OM)?rFHa)0DF1GvsKJHz=#2=lo+g( z=MN$;TFst`6x!yXf_+?l%l8&)Po8h@f71KK*UL!MBE7@k;3Vume5NP&P~+x`v5lh^ zgVtukj+grIr-u*5u|?f$z}&PuTWx9pcCR};umFMg34$yO=#<`#n_b9 zs2A*5R6VWEPsO@zCp(N;a>!w$6-~a5E7O7sshAb zXCvOyN<52ctN^q+f))$HvoMA6R57WDzmzRq^m8>owx`)v<$svr>)i_CFLNh04{;<4 zEiM!)5-ejurmtTor!GAt6bu0c=BX;=Th_3uBkINCTP>Da$!GgBU#r2oj-QCl4M{jD zB_3w6S@hPaa0+_1$p@e(B|%0{uLdGkh3n?hA8m$!6$otAca>+%TBI%ZkzMN6J#ET+%GZTvWU?DPLo(Won$~av`@f5x1~e6Y z9DFmGwyMir8Fgnd)OhWIR9~F{!DyXjCkw$&f#IGx|91^Miv$x=|F=Ao`(#0JRc+C@ zW3F4LZZATCC>A+DI$V`OOdo(A$|QFsbuUbR1+55DpL}yA*q_G<&x*8k5n-u{9;GwV z^#`TLUPCGA49eW)<$~r}2G?~hF5RjG53{I;p$2LX+ny%q`yO<2C~_TmV`g^GU&@bH zuX&~`RPremMF`jLKiFW+Ir0x6hv|p zc>D!T&udd$qnGdUlpQ+uC_r48yKu}*WYxgQ1mfs&K@-)U$BF**tp$DKgsxr6UN5uq zX$o6uUj8Fg2A-~v!iIMkg$Nt&tWejeoDMrwF>);7@;Rgk5U+MaV7Cgk4YusSuH|D* z4kO;K+u%^~cRtbSwU4AE`CU)W|Hgq*F_xB}uWI`?I@dq{cWr;GeCkf!27)ZwFd)Dk zG4IHZM;Qk|%K-~gU27%{x`%}-rORGkR%XC7a1}8ouJj^{`*fJ`TkRRSfS`;&th&4z zCOxC>)sXmxoQ@Mc_yfh# z`%k?~!Qr@j4vg}KS<=vI4-45J!eZOd;6%Jee@fgO(1`SH1sT`#*}# zDz3@5591gJNJ%%SbW4YWDGCS(NH>V&m~;&ppmd{j2#Ca}0n*(e-5|{d3`sX)4jKEu zd(U?C9PINv_x+3O`d;oQK0qEQsBMW^=`!RNj4-<(%M)$tyK)P*qJzl3w95O#ERp(n z)^Ab|DM{lxqx&7A|14AgocLDYB?oXigl6x1Rtbf4&OyzzOnsazQGEy)d)sD6&RCgA zp4qt2`9eipzmqw@{k`lD<81^01s9XxHq2meh-pGjfvr*?J<(@hndu?cx}10I#pJYS zj0TY2so1$%vkc2bVSB{=MH?$MMqWdcbjEL`r$pP5fj&2=;9Qc@PV9YnkSpz?O*DoADyK&S}4Ud-)DBDVf2U6GMvc|q&}0h8gA;0e?qYtjnl=N zk)UrkMrCM^F@}&~C2zL$<7=Kr>`=b&2hfdCK1Vtk_hdPvuOdSktBG5GQjU-QJw*}7 zAqLtpjP{G%BFN5R82!EZ~a(+5M;@at(N%cEi_qtBVA>o&QLf_FBbg zj0S?_#m#!rr)E@lt2Fdiklqb>70I=_;t1t4Zy4Xrq2Km#TKyT9d1J@SCx+Cy9P>(w z+km3LiHV_t7g6*t$#U-qc?B>bo#%`5^C&q6-~8k|TZzebRJF?!ZMd_SBPF2ogw(>i z(SF1;%p-6#!NQe16 z-VDLTJHSrXZ+FjCV_^$Yg(QnVMYg4wE}qybbQSg!c;@`BVco&Oig0&$Ph*Wljjfft zygcD%XG&=dAoCNgGz^NI_<@;_sV9O?)Kho@w=-+_>J? z)XsGWN#rRj;{EjC>vNuu<5G$M!3F6F5AVdmoht2&`--nQ-yZ5&fBBl1mj14dS5#PO za`-F1+}@9o*cCw2;CsQ(vFQ4r-}x1!?mRhnd23;x;T`o31{PVKwN-9QARUufIubMF7aRL?hgyS4a(Ni2ab7@(Y4X@MoZNueW{z9e@@aK zUsc+2FzQ4wv{w#e&qwL4zLUO+4ZI8eMLan} ztr)76+gNv`-nsh{Z?31hJJq!$*G-YoK7C1q7`FhBvLd{s zL2P+tvKgjN@l=%evYUJI5C_^0WAqMj!^99*FiBary>|48%cKYi;~!9+gm0S{-b^l^ z#;=OE=oks2LF&l0pLNy47F5g!BD$Pk>czZ@Mbu`V-j&i472?xKQ!Y0(0Jwy>x;xlq z+_vwTn}_}Yo;Ig(k{sWydXTbv@z&|_v%|_Rxyg@$s&A$F`qi^VuD}eQ?zNA}47gc7 zXfVAP4yHpHzgsnb=I@mL^E%>jCWP(^*hOl1i$p^}x-|jflbn=x1J=2vM`ygls_uBdgl#FPTCT|AqvZ4M)Gk2@5#xknnPcm(CdxGK zsr_nwRt~>zStlWSh_fP2JDreW)HuDlbDgC|88h@~K{ak-5#*#&fsa#~c~9q!E(SVzUKJs>T3R$ocd zmn6Q|uwrRF&8c)PecRwp?9Y_Zak2NtpSPuNiejaH(50@iS$ac)2B>XjzPg(H>(X~J zePd#;_C2Nz=)7*cz+e4+)zGTTAJyklX+Q>Dmm9+Q{by zHZ=W3NnWJXTkE?v@FACi8vLn}#cPQEXqSNIpxcxD@R^jU7VbUCD^@U#OY4T@T2(zvHHxvnD&9FiW1Fl)XwJ{4V7%Q^)O zmsaWy1LpSjP>l|MENn!Znrp2NTlV28iB{hdG(vQ2f z6O(|B@8`^B1uBPqRH*|p-}xRDr<2m(wcyP+uI}IzS_;V+3K3D@mG;DMfIb3 zCj)&Sm^)I0P=(*SGi~LXcKqX(D66l~M;%`6LEh0@hzT#nb&WeL`nPQMejP4=jRxMi zXs~8PR|&Nm4g!GEQN|@1`cA@{IjUMd&9nOs-u3D9hM-N!%u@+1#TG6`_%!1jF{#ku zIOWqOy($Y%kZ75qnAs~>J^md=CU#6cSp;(TxR+J~Nxs+GSoq!*8UZSGN4M-2|#>Zs_=A+9 zEyr<<=Xg7-JfN)au@!`Xse?8KzV9zB1&V$YxZn1|P8L!Y+@Km18#Y ztt$U!#{2WBI!!U}pnBcAzBl=7?u#3yGqD*9Kl|h}hPf!+sf_Pn6DVjP3;A-w!>2Od z`WcPsZB`w+RU2Ey9rbPh0$8NWi;r(g7F@>m8Ht~+6AQQNNOhoYt%CCk>Tl*evso%% z?7HF?OEL0%r}F^4WBxBM=Y$RWU&rx6cFA9s^C-bNe_|@r1|y*##|r(mPt*3^ZgtX$ zRG5Y`rQhk9Et@Y6a1f9#n#mFPT=jBJVkwGzTaDXO=%YLXFa6KN=}X#S+Fx5ETV&l# zP+?qC_2xlfHwUiv`(*jS%)xh*&W5rP$SIJt6zBTI37jArdzx$Rl1p!h6bO@-3%r{6 zlLRq}I!|W(>3h6InThJOPl9KmPw5-dU2=B3ez_!6sYRv5e|0tbdV@;OHAvbM8oJT5 zNJj-V+vPZ$bMj$W0R{QWt^dAwHIW;G)J%O0Gv`7NGm6>dt4pRM3x+kUBc04wWdqcO zbV%P?YVen=O4XY^3S=VL7Ip&v%2<5pfPV!2PliJDH zUoq_nbfXkqr`EbFN5Npe%oO9bz~+3@6UaF8#c{!;jc99&KRnfqxR`OAQ`&8DS*a7r zFla3|Kvg^3qLgyr)lOt(dfo}mG2<81oi3k|Gt~I~OVcQk*FA*}S2`c?Wfu z#JKF%t*=V<;`ONp%N>C&x=fdW4UGXu&IOO@H&(iA=9W%C-Tw}^bh_Z4c?7O(k8V-I zO!JRP&Nr}Pb>;~}N&M(U{G262;w!cejm>y#9proH0Sa7i8<{Xwy49IG{sFG!!$-q<~r)xca# zZ~dF$k$~t?u#JGzXOcTk5yDR5O*G{9rx+BC6B)5Q86vdMF z(E)tw`2O@_Ak#6A3LJ6k)Eml+!oxN6m0f7uI-tmo!d5(_(mdV|RvhTIw77NFt<)>F zB|bP81v61IDk;e|>QoXj@K_(q{~%ML;i2Fr$L|u5drgI7Fh#e-D;Gep1>hh%^^Lcu6m)a1SXFQU!F@x>*h_?1&$M|;%ghr2A72Fn5G>q|(`!4P; zLVPtOW~i2OgtYx$|W5p?7YE z>E4WWhvt=9s&0^Kv2-avJGl#(Y5pr1e6D-R<$Re6!>vFu1fct>treo9T%3ul)Yg+R z%5eEuepr?p;p^s;pr4@<(1B0C$?N8OfgvMMFWiJfL%2)ttV204L(>B{PKk!E-}9ks zlL!)cmAUHESE`O6@%+D$d1F*XMQxFi<6_>m!PlNPcqQUyqL(&Cl?;6~Pt!%cSJ1{? z1iCGU|L_L=GpE)cv@qt84Es>j2O1uAXDZQ1m0v*uiCIo}?0$vysf2Ae@}PBYoGAry z@M~Ja91mUhLkP#fa{Rjme;}pB<|-tm@2|2-5w)+sLp3CAJG08$Jp@GYX?`SE*7s+z zSv{ynf*=>V(R1%Ig?g1J^P{{&pjXlAyi@W^J_j-R)D}Z&(P;{FN>-FpgzJ4xaBb)s z{I2tB^PQ;@XY7(3!DLh@#HWC+ebJti+9FsRivLliY7Y1KBWhEjZab}U`RZn1NT0gl z>)H@B4>(rWTJ25?=Ja^Xs%-++maS}^radWTM(D}Igf_KBGoH!?dM0_op+F><=nSJ< zDr#Bw3$Bd?(lu^qEcu`;;PZpaS#N5yfx%qsv|=o|{*ynVQBz31jz-AtuaQ*(4gTdE zQC{p~coPG3TWrUDLI4>LT9ym%L;ZsV@%sL<=&myRwx%9eHlm_Ear5?UhGEEalWM#> zg8${>yIhnoaY*<{B2?tJvSysBkQ;N0k3!5P<;hbdY1B?hnd^JJI$|7B`x2}7emC{} z+E=$N-c=khUB789-g(|?;mGCL2V?}Z6tZ;Rg20BBGO7L3=^OA6_q~Dr0&Y}mwXx{i^8%Jp4Ai9ms)pW^I&T-M zp0?*Z@uW5Jo`|@~_e0}>YI*rY#{;C-nctyiK|XsrUSZI3E1}0}I<7$UCeMHED2&4j z7l0z~W`gAYI}EwE>drgJd{6-i&0CRu?B1ZA< zzLS z^p8s6iGuh5ph_9Si?|u;=q%G>@QAz9Z|XWGZ^YB?Bs5!2@i+aG=a6MsIG(8%7S+v; zGbNS_EIakh7_!(-`<=Wr_(AC1#)74>Lt=q#mtbIIf78O4EI~iDM8{QZy}I^lbr|*( zbOv2=(0Vg*{t$>(-ab+*Uv>!yhcY4oHfdrSsjt?p`tYPDfJ1qRHqI`vY1yb{;2$Rmd zA@-5DqV~_MO*$Q1@8RLa0a9&kR^5*J>B{Ik%iv9Uty()CV5Q{2r!<_9gWE!~~ z3ny$;xV5jO3gMp;Gtza%FXX8?YNPP{-vv*bs6B`?bQKMBSij76m;7Y$f*c1hWH!tx zjF`2+xGK`fIL1Mn+MfaEm}wYC@KvnPBnFZN+T<%|A`~jep^;zuVt$ zWz>Xf{p@incr`ey_b%XtnAn`!UZ~;hE0aLj8%~MkUPrM=rGF0CH#n6b%=Av}M<|)6 zhllJD+}Mr4`=})TsV5cWgZvWy1z+0BlKweRrWtdyizv!&-SSx?UykSjFg~ndtM|`s zi1X3VhovHN}1zFrFK)qTv5&MBA4@{-QUq8sz`8Uq$SRS)sy^$p~{_w{7 zCgnd8$K{*UP||}yRo>+OW$frp<=$+gU3B-ouI6kzC~&^U34G)(W0&dpr7;gkb)XNz zC?Kors~Zlw^@-!(I~zkTa9cMxPw5x*o_5X@H|vT~CMDTu!pM}wAuGh#I^8hf=2W7z z{7v{@m~vJ;NUQKOZUd>peS7=x52>7l5K_`T4LwW^Rze=WNyk`}`g4N}$Idv};khXD zic*avD&<5J%rrM^3`hsHDf)#s$3>MM@=!wW>=fQz0h_AQCXd^qSKaOn>r;S6U8)Ak zHYM`0Ny@@a9Z9A<&Ckk$*f-g7ebCa&#PPT%_7<+#XBLvxyQzwksa(I8Or#jZbn|8z zG&Z-VO*nW#Rd$3Xy9N#R0#^k3TD zfx{Rf5VwHbC}iEZoNOq_i_rC&B9K5zEt3`k;?J`_m(ZI02p^o@n`h zWn~2nS#QvUd{1mumuJ7_Ck!ge-7TBm+U{Vk&t->Ne$Df%rv!^m?%bwmn1t3wc-xKA zi0H(=DQm0~E;(o+t8U01q|`U2r^hIIHeAiiB4K`JqMy0p?ujHkz-$drow8CT@FP$8 z5np%iXe3+dOZB3zk}WR({W3Qk&}6bBjVrG|4tf2el)Z)t-I_h7zp3vuN|;o=MJ(Eq z2_x+~_-DjlR-x-3Vn%3V3V5V9iM4gZR9iU()5*gxySdATIF_C3e7k<%X@Ge%_=XPp z6gi%iF7WB`dVTB7;7xSTHbQ^p2>TVIQhPj2Y)mQ9T(Dz<>(@k6Pt8ZDyU)MmI5coj z^)W3!d@{Ph7g=FvhZC;W^^J_s#grApajIHBqyLP2Fd5oN&i#*M43+1*QyaxTl}}W# z#Dog;%*k;nADF$u2u587CqM>&+yef(I5Ff;MhzG^Id32)ZJBgpfdQF+4FIwKk$7){ z?e2wbS6Z5VB2a|R5SVB1EZ48c$r7tOsfoMy_vQyO+N%oTa_$ZT*d7Kb5bVxy*bewm z@DCLS-1Kv{L|7UF(BaQ2{Skq}{n{6|d5&O-!;98}+V^{DIf=Zq zz(oHr3dmN!!H{n$u-EQx(`k$Q_CDG!1zsZwa7PE5w6wS@@7p!^pf^h4Be5Qx!0#=8 z1W$nI0MD4M2XZHzgAp2?U7gE#IktK!;n^m`^P&67B^m;AHLsVbnTME1-JX;QBm^F) z605@Z^9+DurAT21Awv`lqU@V~psUu!-nbvgo?a+cd)h+TZJe<@>Y~cHYfYN#xc)rt z-QHJpw0nF>-LD*z;^e;JXyrt23tJhogpzc(ZExeYVj7S!*5nbn@_G7Kv%z-3Sh=Tc zj;xa125d5H{1jcYEyI(0)egHN`g~GG=gdyE@K9R3+fpYNl2XM*wW;!6$qkq`$ZdmDVzx(k|cs5$Z+Zl>+u*#XNgHg#7JKBOcgsJJ`3$tPC4c0~9R3ucgclN`6Q{i}&`I?` z)NDrennjuDK?!3Rr%r&t`hC|e2Wrem>?7F!CjdL6RUG^QoKbpXW zDNFzx9F!ZMXy=3aPc^wLWh>?fUD{Nr?(QXyV`L0qks~`#aR1~?>3v{2EXt7hH=s(*^L^scN7O-v zYyWP}vTPYD{Mc-|9Ll=%e&rO(bT_j-Im5fmEq<7PhWetS7`*wQI~kF?Gr+Q(*&^@m zk8;h;DC%qq{Wz3r|-OloYI*gXI>f63mCTWosz6g+9C z-ePQ}V}5x{FxD^KB;LkokXh7)33llKgZxK=C9dNlpm=rnYZby;C>Iej@jeB|PfRry zK>r!gUzHsA@OpK)0!#( z?^+i`I?}ZSRQRT{o2lYRf+|Hh0uq1A|337K22h>!&1$? z$S>J{@N5+;&ygK0juAF9O^zU^=2J*#ODuZJY>?P*J_ygymY(Yp=4U)K2uS8 zaS!E(+(xchVgzGKg0tmLXr?yBgTznZxlfaLk($wsKUe;o*e<}E8$w)Ahs@5{mDgD! z(6aMdnnTHI5N6cdg*3DBN46Zbw9a^No4W+QzaF5$(Za$WJR#-eSJ?T^9AL0sy3wf8 zrtJqBp|Gv0{5_;eYrAUp?YMa2QoDp{M-G0R>v1A^RKvQno|fb#>kIha$x%f<&JdB- z^j;1`q}k-Z>UR^ro+bW?ILle3AeIEK6~{UZb6y#E6*?+vxt^YGQ=--WQ2g~5>!$7| z66bu<$fdtBMgFOx;o=JzY$4f&9kXTA-^fcKnf3Vn0mfCyBs@dOv|QK3TRoCxfD}(m zlRa3;>&u4i>Y=n={R^p92R@1aNS@&$p2yhM=jnHBIRv7ZqFp4h!X6Kp^c!F74^Cup z6g-V}q}X4{$>0QNo9$b%UT)pO#iL#o=V~;xJr0qQSkhw9=i>|LX|swuy~tb99xC3D zDZJe$K2SI4H{me7s|o01-Bj#h zJm(G8xB$PrK&@0=wgW^*DlmoHDY1J??7Z8-Ht&QlI&Ab2m)K$lMDS062q!`g^@JIv zFTL%z0-YpYqgS@ZGURaTa4~}r>gy+jg|PdwZE)x#%=mU$AqJ=sJwfpi^&!iAZS!MlH`Y}> z`gS+P1UZ3Hh@Jtk(LGS-|F=qM7+TLRKCJ#vpXC3Mc05BVD+B!%7zKnv3_f^AR5G?( zaCu(4V@aaX%9G~k%P&w?`{}1(>f!%~+a5=P1_sQ!h0%FdWiYpc+y9Zg=0QIv(#peL z5RbJOD`=h*4Yy&f*O6GnrJ z-ZzYY@|RmIVTc*)GwKT)-3!Zy;Tf*6L}G2PWLzjYF5{afxZsd(P9BD=QJe z=Ix}o1Q4tid$MjVrks82L{4!hr&0gG+JW-!o6%qgcfOw4>0?QZsP#=`s1mM)aNqk{ zXrvrZl$wW!gw9jAOPDxsMC(vyAyN*fPz6@_aGI~0 zvHKlIIkfsG`i~e9-ct=A0`AL(kk5XBP*<0%f+@>c z8|}u_SB(FJ5zW2g=w^#3bc#H3i>5V;N%KZ`hjYjoAe=m132>&R9a4e|+c&HyNDaN) z(1W-%z@jF7E@LZLkw0{JBK=+BE7X{Js!oEj0QB^r&A+XFeKyy2RGOkOdq5RniI}8L zj$-q8932>7dz=3>AMDF&fErbrh`Ij<%Zdx!uBDu;CE{srdLm6xC~?&xKSi1f4++?P z_sPK)W_oMuEIJ)N^xDc=i9BXhENh(o=j
LJePS`V*0LoDv?evKpdqX{y^D?^My z7jXja`*)0OPtNzLnX~zA*6`HAtzDv}MC)P8LZ=K8?9MUxL97a^YdI#G-gj=t?aB?% z%3L1OLXH$H3DVKhxtZlA8sNVx5r*5V8(t<3G0?A)(MMV5uc?K8%5b^rwr6LBDli3$ z+<)U^SgfIx$jfbIgw5cr=;*L5{&oc~4s=0SYbl3vb(;MfL2w6Vp=38KEka%kGVIHs z&$=HQX)7KwqP1C94Ybc;Sz>z{Njq%)g(3!5wL2}xq{x(e5MLwAeuRGr2U0Nn*nPLN zW8p#`xT+kQ`zYG(gkzFtvi(1j7tw+Yy52B1_K!_XMnS$@rPYS7dopc#(Iw4uQX*!~ zqm-!(!4G*!!moJbpS}6EJuIJ^O1rW}LNrtZDWMKzagEnjqkfpD>PTvqsTCKb4L5?D zvP<=JarU@CBa!S!D5<%~3u3rIANUgZjg%K9jBWVf!(yLhODd+a+9;6+YDv zm={;pfg!C1Gs+zP{j2XOx76aYyKei_sdd5ql4C6b8k(|5;L>R~!1~h6MScykKO?)_ zpajJi^WD~%F@Hi&4i!b)S!49z%sEBBKScis5|zv<1!XEIC++T01?P*y-v#ZxA?N?- zDRfVa19b9V7wI6w6&^^%+8 zTa|#436OEEYn~IGYl>G6CW1RGgQXzVcbp2nVVunGIMV+5c+nV>-XS5q`A+OS?0b@1 zg(IFPJWF)+EPW=W`0}nTA2%eu2&vT5xPr&;-NUJYMdQ5 z>n2XTiA!Whw{wmlg*Vh07d_I+(>YN+1g=~oIc|~oG=X4X7==tl$IfLIU!|h7`sw9*s%_pAdayRg68g)JQ=?YZuQphd>5o(q^3I8H3<)RiN%yD;K*I_vSA>GUr zmR5C+ylNxGA1>P&^~~4oWxdu{9^TYAhvs zUfLXNsn=3g?5u00sm}_5*NVUORjJnuY-1P;;@RE2d7&+OTFXdS?7oLij@iY_&0mNE z4Hf|^E)N$x#KjsrY#t2AW;W9uGE2)YuMRhry3WB%J7;Z%95^#iXGqe>HIdc^1D)!` zq{Nxty~`izG9W{9Wpr5EfMyo0Ug)MCHk{agmeov&uMn38m3XNEfLS5hj9f=}Tm+RZ z!M9Cdu?SUW0*#PGG;5~4pcC`gQhjAqN+q4IxMs03?^D4xpLHHWELof9?dJhb*DU5E zL2~~rp~0BlCvNoXAx)>-c9eLRRL*t#7u8altQ;ifJD=6>XBVgNO!f?4OrN|cRV1nI zA(PY==&im3nG$C42`711&6-L(v7h{mXT}WAG(KYKnItFqE5Kd;Z1cpO@D%dBHzRI4 z$d)#uTRga`EA?@T1aab;l~n9(<}uZ%zf={9>Cbaf}wRD0&S=_H7Q}5tG603D~YlzIc10N za8$fKS}aw@+0yjQS01#URi;pz>Z+QJ!j#=aP3mn}MzM6Umy!v+71MY@RXO{!#FPu6 z*j_#oTFw*JyPR)78FxxyRd{;~XuAKOa(<+-c$%i0d!#XUVMh=8;GE#=%`~WBW*N{> zhKpZa!VQ4k9opcsIHz1ISiB35Gqv{*FdKW;u)Lr*w-To9Ve{?EUoWj#mG07$-Qh?P zL`kTmAYjKu#Cv-rjDo-gsp{Wq*h&CsA~sxJp$V{J$nd~W-LKUnc8{V8u%!z8q&qLD zM$^-YNWbhZ^e!0*mJN{7ssI`G*Nb)A*N%0S-OmpS`Or-tB@B2Cy7BRX>G_&xjI%0d z>G_!LX>E?K!3mPL<4xk@MUB0Wx+8$bO1S zf&yXSF9V1TLG5l_UKOZ)FDa7cUsLIHp6AXaI|tYYU*IhRrgy(UmmCD5jtUkM4bz|d3`9m#(_ zlvj2-91#;BT|g#7b_}RH1lPjqHIK)MFXmlLR92Fo=gRbU*gy*7D1sQVC2hy`dy8Qo z#}igz4(TwMg>}u!CI}G(!5{RB!@&N6V*pmpB);w*`s|9?TaJ&bhyGZosW!-D-D|I zjf*Uq_+Wa*S0ctfM!NidDdiO$dyTM|V!p0RTdz_RBkg~iwT<~o2dAS#YD;dq9a;a8 zIK<%#*ClG)PBx6W?ALBDylK6tX$8cpa&XC{KZnlyz33Ouv|*LdAA7 zUl}5)xi@+EB?uEJEY@OfYLd_AOmGNo-u`;cB4bt1CG}0kqqk%AFYdFJB=!3DpBP*Z zE1FOlwqtu*+vd|W^2?OP*uQ>&VYNpCWV0630Pa=eC6(~>W!?8b*7927O1L%Y8-!f& z=Lf!szyyL6&Od5f^1fort-dP2l-C8MM{y7-We&AMlSOV7qam z8lB{(2=GJ1Cf_TygU=TkcCnj|5sQ5o@qIL>jX3U^0JSDIVxO8gy1@Net18W%=mUk%wl;F5 z8A~lr@6(j|{u*|E-&{pef)k<$`shEso;0dSIn3bxY*z#Z0!xWz0U`lYi6Ra%>&8#A z-Hwigh0E;`hD|O}{mo+#F=?9}>}&!^Q>~S`ymcrD}`^FZOD=@nGBr#!kC|7~zh0#8qJg)tY-E zOd4mQ-b9KRx7b|u<;&)4&Oi)k6;&E!Pr4i6hK4V^xjLY#zw)`8YJH_qWzU?X8Y9=x zp>j-r)tAfLSgb}22C@TdT$_nSWl>Eya2Q>jof9b3uU~^yfhmaLQsPW#Wpm5Uj@r#u zG|v#oc5&4y1upp=P{7f(@UC@PBYCO0eeeyWP!DYL_*Lqe1v7f6Uev--Z(N=Dp2!hq z3M6qUf#`nyRZ6VHoZQKsUUrs2@X?LV&iMu;l#6AsfPb-**S=)!FxNA(29al%VoW5a zwI}CLsjUv^w9PlM`9I>ic#|^kwbDc7^b6>aHBJ^)tiaw_Veds4%Wq3fzsVQzPS|fS zYg*gn8a9WK_9szemNCdg}4dT*1(HE(3&+j{;=e!qpwtvs7-h)ba;RcXk(W6>6T)SbWw~k-xRug(s`=mRHxqC$U%3)3$?C%htZ7s1h`R^S zvo^7Rb%if_+v4DiFqM^Nxk3R)Mzc{pU}_d;PmvAZ?T`|@iugUfZOhJvdOFfWho)7) z$fPv9rU{Cw%`r@VTu8NxTVEyx)QXMUn~Wlk=6jX>FiecRLPoho%-<`CnRxm)!g#}q zsL?uZCbazH8oR!AVKa&}2iT{oQcs!Tl@RD;^x zcuLrvBD7e(2DF_1A~%0|R&8&Rvp|ylPM`0`n<;aTWDP;vKe}_wPj$`AJ9CG`JT9)@ zwa1gTXTXvVe_5
%sGO9jW>Ms#a@>2Igt+iZ_+`VMinQ5`!)p6ysJ4sR%^&527k zNj`9^`xXgUQnu;znQ}*%-9E(zB+v0v2^5HTf^BfX5#WQy-;Fk+eIIJ#Tq-o3eqSh;BRA(O%0ZRK%5S1X38L7wM|6T8{}goc}3SAccHM*iofH z;u{2}o>(iqQ0`wEcDZEl-L|#U>kMnO0qF71!(wB8m^?DfkaXK!gN?2Iz$%2#+34%f zZL$ia>Ldi;i)Y0jlzu6B_Qk41+t$LvG4P(E*CgtPby`c{>3%OIC2b6ltdjw8^1(`l z!6ZdL6ML=S)e$A}sAI8KqKWNs4!@HtDrQ<(`qnipS$%J28P(HQc%LW6w3}xh`V_H@ zu^T#Z8{4|((ARysbYTGNeGTCa`nSy{Rzv6s|uZm_~He&0{ya}XBXv}L&|z?)TN zEUF4Y=FroApH44msV2~mzVwq3W|nJib+mg*$i^)#QL4uZM^kiutOV}N;1Wb zdu^FV?umrXRbds~j294mUrTC5;)FK8GVR=3NOLd$k3>7HUx79ypYD!J|`Yo0b$}r`@#-H9+<}I5hp|kyip@_oMYMKjP-a2-GT< zHbvz(dU^+iRM--SWxRk?jgKx@!8b*~?J}a!vKG$-91fMaN$=VI@{fp99!UALYFh@7 z!DJEc(;^E`BxzPa%sN5}%{>%qYkifVzzVp-Mrjo7bV^0^fe9Z6Wg*5Yfp%)BhtK^ zFFp3UruxxYs|78@n2ogVCl;)3v;Hml;@3q(i8n2}ao$cZ14D=7Kz^h?YvoJacqUoIno9E7NWIPXjgowd- zz&$J0hN(}xLZFY^mOGy#iSnMc^FZwEO<6V2aSJC#HV9mm={pFjfcRn)a6$xbNMo0t z6-N->fG5f?g+etgFiiGU^=C*e;%`ii=i{cAkhcr)g4@+&w0~5&(LFJpW`ddMp1Vlg zmGf81L2LB^POU-KiLFP;VT0?y{JC-7RC_e5m>xZwhfVCjJUp8}4jwmAg^*&k&<+Yt z-{F}j!iDq&$IgxilrwondZ*>b>e`0E@i5ozCrWwwVyfb^6=eL{a9b?{`0<{8+Ny>@ z%}(v_!V?R`G){O6&&a;H7v@QuM4-Qk2Rd_UZ2J0Ni$O`2wlTmsz%xIv(*pNAGBED_ zWpI+H0cdrd*wE8K8cflXNgE}B0b8_w2QwQzyPAXgNp|;$1F30ps2`5F3prTjE-HnZ zcA}RWw(a7UpI98(O3xE`AbHQ4(6GV(NJxlMK4wa*d15@wNbGxAeb$2?zdaSpW}O1#I}rKlvS^`k7K2>nGDblbIc9xq8 ziuTN|%y!l27UhW@n)2JXO|4ZnvDTW#Yix7h@9PA{u(DqzhsF4mnkC98Y8d7#_4|p8 zNcJrxX=`(5_yC5s~GADDvYO4=i;i_N~b$xa)cpB3%z$%PwNUlOc~ zglKvA+vpfK&!+|h8?9_DS2rdB%9EYrH>G73t2$*JRzrc0WzVL2mSuq-3maWxi^;Tc zLEAmi6uw?(a;P>w>7y)X)SGd4Zx~4aU(~_bZenyek(&SM1*dNK#N5~C@uP^aT4%pH zkhsH15ye7%qNTR&MVgiZW8Shld|EJCXy22^jPA3O(d4}GazjukFOy!zE7^(#?B{f0 zqY7Omb!~s+AglA1DxAztNOD||Q`k3GWx{m?&5Ckin%kO> zqtyAeGq3adcv@ChE)0v=WwOHrx2spm{d5+VU>f%ox ze6D@ee0I`!qG>4{0`oRBe$9v5` z)~Cb)vA#H3&yqvtT$KwJ3g(<*+<@(jYzulSEs+1bM4??bzau7yD)g}gmYgzy2% zjpM%#3!N)$R){1*w7!JV5y$s(=$L^X^55RLdF&U=)-kvQq{_YM*Ap{?3l;6CCBw~I zH_reR6c>?y*zmgF26o`i&smf8Pk3TOP{c|^`o8?Ibd#l(^Y(v%yT4jG3b`cp^ z=5CHS=gYdWe9M(|H?t(|-2DPM6k~Tw#K27;UCz$Yl=+1FYi16LY-6vzQZaFI`+QHA zD461OW|OtEgu$RlJfoB529UFxB&?6vVtAzBgr^hnDwtZreb3;qYgNJ+yEDuIsedQ5 zzni?HYeo`p#-AO%|2iyzK~v-qyYxJI(!hT$6XSl=wb7hWidSvOunjxxc#b}eLx|te zMvp{YBuPG-krh{+)|&OR5g1z?(3QeF`|mc3E#pA&M2!{5WdM{|H(9bOg1F$?uS zrh+ygfjA+vV@ZU5OuOb#Asu1q{~V$W^v<9eOLGAaCUJ`iz$5>q)&?|3?oX-9Y-M9= zAqO63d7G8l?x(=8#%$N9&g$GN zxU7Sc>qel@4tXaG%XV6e;!r6H4c@_NM}W%X&@*w}nR~UvA~>Tw)Q=Ho^Y`5ThSBuZ zsx7t!^l+#uy@_+NUOs3zHHyX1)Og3xU_WzAcl{p#HrUNKT9b(ue`?=rm`}Izi=T*Iw ztyZh;rN4cN-fLS+9@dVh%S`;B;fSz&asUXGgpN*mL-GPk91ZBvm~Xif3x47Y0)KCa zG%o0|qrlbfp<0I{#>`FUx8!idBEX)#F>whCjY{gnrr=+P0w7k@4RbAm5n<0`wfW2Q z>iVe)kj8iE5pv99QdBf@=R^MvT3l>V`Y|DLr5+%ZyPhNVRRdq-ZGy4RfM-s|&a zzU--%2-F10&LwquXPY3WJfu60mQph|*ymm@02w0C$Lc)2yo~XcdTLtu=4pP`bUd?p zgUaf9m)ehUth*|=pk3q>81TjbhLg|f!?tJ*?0+~dk^}`upzmjEvUpw_B3cWvk+KI< z6*sV$^H}HzOK_<`$BVR`k&>Fp?iLKhwjVPxMyTOjou}sIz$S z>iX(T34iZ4&eqTXk-mwA=Gno)rQsvtao`6ng48En@S!-rJ`fIU^nE@WUT66`#q{`z zrSd!3gSL6Mu<6j}?LvXP5=GWxH9{r6Fv;n=;hpIRjw?0OpkbyLAAZ}>1fuV42YX)r zSPjZ_t&eD`S=BYk1#x6pDaejm|J(BVG9}Q)QwFL0^=2TGxdF*n7=v$5%kT%^+K2BP zuh2fHTm~kmBx4|7l4SsmI>qQE7F)Hxx98E%VhL%nrX!GYx)IygKmPtyA3YLRhr0m= zHpr6BM+$`&{1Re&-eU=8bus!<6IL4TsvSW1Y8w$- zGPtsEY{R`E&N#S4#Xe+a9hcXC9bJq}&~Rvt_Kz`d>oCugt(Cb}4$jNj4JJ&P9VZy3 zWWkFM|0wsSM&YAJX?8y|Q;&II#ZjFC(z4nqj0gR909v59Cgx*t?C;&AI#rk5u)dz9 zzaYeE{PwPux~Z#p`_9e!<0 z_~VN+O+AWc#^j$?CXcS)2@-t?(JOm457#EaUoa@vd}FHbwZF;M9*&=c$)d?6|8=rh zn>tdU-s*g(RS3@e;H=fE4bg*EB0iiLR8MW6Q}<@pv!!XA*2fl+-qVM?M{~dst2H4S zCD5WbEom2TaGxC7*V<$2U{m>RbkQ*tkgoDfo2xLUC8E~a&4U6z{}-(VgrDpM7f@lIBi=!uk9ckC;&Mujz$O2?*E4Ky(vYH**}Zl%YoiR$o8-JZ z{|RWX_4Nl3%Iyx^^J=Wx2o1v7y5!mhC+!_$!B3)nAE%Ka=YJ(X7=8Ab1yS`|SfyS3029{k%S5$*JcS4I2MkGI8(#ec7}$q#?kHC}8hXFWJ>>)YxIFFo8Y=t6 z?8PLFtbORy=%M+_$o{U2daYQ5V!U0}=TWGJ{Y%bfa0Ccqwav-@V|FN{PL@FlR!$-a_QZA{wQT6tz;l(hMt$A0ZI zguU~Dh8QZR&fU^7&cQoSl;pJMv3xP#bKaSJco4CWyHP7oW|bs97?@0w(b3gWC)Q7_ z3ziekKHN}aFB})iqNnB)r!^d|81t=s`^_X@0vuC3O(VslALVKoRK2cc$f}i5`KPVp zOH1GCAa77Lp6}si>;t$fZp+#@L!?r3I5)^-BgfMI)0q7` z2bGs4Zrg+*&ld!0dqgYO24A+fhLcXe+MDR(A}U|6Pea&UJk4Wp|Fpz%Otb4vrF*$W zI}Z(67Asc%9*{K`ZPD<>LMbS-I3m-6uHLEuBypE1aiXsaCpPoKLMoI1bVe2~RXMTB zj;7LD$hVp2(r3kiriO}13S6)9G)Dt3y4Fb8-;crbBE6DZ-CaN3Co3*UVW>8=Wt%zV zSx>xbnw#hddegk>9eNC{Qh_toKs0tw+YLssPP{DmGi7oYfTT?X6oFg9$5l1g;RAh) zTcZ7LFFLZ;fEab**Z<*@9ljB1s($Ie_NP-zjhQ$^A6=j5N3qivOXvT|r)~u&a@opn ztJD%`|Gjm#rgYZt*;%>C91<$_kEJb@BUjkdRZsQI&e)VACA6{A#6MVYS^lrDn^3Ez*Z187YV=< zO7O*L#%It6oN=womzE2h|UPorU6s6`}k|sLZo|! zMcP3cs+xIn%(wWaa!VAQ&tcbqXR%E<~bq!YJcv8_U5PMB%R6 zXsmdSI;6`e3+Csm_wxZ3XI20%T62%x|EoQs(5=dU*l_EGf_y=1@f#q-U+FAk-u z0oTVDX!k+5@Y4KENT}yO?C$Ek396Z=_aL;gC~f$4a|l%R{lK%9hMr>+Fpkmxk3=p) z8}t$PBc>la5xP``P4zW##?{!*$%&T!uI60#O(qXfLyy$4-;bda1sNo-6+T{8tb;Mb zx4O6lBn6}BDKNUCkk_NQ%Ru#rW%z)0iC63w)F^|kdJOtrOSj1J(k9(hLMdW&esGt& zt4onOPb<=MMO{Cm(xB36OrcjJ-n)>h|1Fdt&>u1)wW?0@oP&fma#~2*?vUMelo`xl z9Xn{lE8XiV04A8LHY+QD&VB1F1L{7sQvC`qQU&!AqoEGmP;1zhJe{S2QQFuV$x8YT zaV5m-X-qFQlz5Fd0&yP4yprAMFhXyxwsnFi?rM)eK%SlG;wpn_7sbK&TkD~~bHRIn zxrTP{;*CT*xWE(!WR$)~7rn4AAi|bjOjo>TQ*ru4rqF@nfO6pXY}H z1ul6u+?h5VZV-&&izhg~n*Zf)O7N<+Z5Pxjz#6HX7{~wH5iBanXZk)bCFF2M0e^@| zI+Uv+Uoi(g7xBNJxDwaqE;hTU@Ee-GyBN%m8Vl_e5^_8VK9zp>Vx zZJ(om-f?(A7z<{v5t`G#n69o_>l;+-=GU9;Zxja4IhG&}U#zjqlt6qD`=X@~&fdRe zm_6>dx&JRVW`gH|o^*~Jd%1Sy%5ghgX!>!R?oYnfC#!dG572ZT(GbL&O4_n4+PjjW zNz7guJ%m)pl6_cJU_DdGB|Wngu`GzJNj$EpDzgnV{6W(27?AyPfAN0{M7p*}bo!?I zsIev9Si}C4@AqP>YAlRQXK*f&uJ@4{wa>BAO`a5m0(kc3Kl$Po<7E02&&CR#eSic* zj4Z}C3&fvFP0DWZ=t7PGIeJ_;r`M}+e^p*Z?%f5$32n?6kRCFh!DCdNT&+z)hyPZs z)yR<2{>kY=!D4%|Vw6}t$#GDQUb;nRBzadH|{E?!nL1qO?*#KvY~zdg^i&n-u!{WVnZwG7%! za*%eJ2h;OmDfuoDMWp)-kJ6B~;FunfF)q(?@>={0osokKwi7QZ*W5X6p{XjHajfv&FN`v9)07 zI+LLb&Bvx&(6DM=sQ5V@9B<((u3MPLetDNR%nez;3U}yo)&Aa;raUBij~QFA9fwF{ z)^ilB8*A1Y!FZh)ds1)r^<`o3b8fM-tjd<$@0;1*Ecy46*<;?@Z}bz2zPB}{eeOY) z`QNF6m}&I$NDi^JroC_VQ`L$?*bx$97d|F7C*OqRym6N}lYcKe*GztK^9|^AXChSy zrjGBy4H8NJks5saf$tW}O8&i9@hJ@?(wny;GvmSDW1bo+^^2m!D<7x=f_X@rZ2gUk zk9@>Vfrmv~Lw9EHbfA2ZjpOG5q$={l_R|_;Qw@_r>bpOI-h1uYg|FtLpHg#+k3Z*! zsH;iKo6LXzXLM3mSWEb@h$koMzkJ3+eb8H>c!(soL3vHz5XwFNN>KX)#Q`CO`!)?f ztp{HxmmRrsxPK~Y0~0kNTjVU{=O1~*%k}S‹|C#^|)P6xfWtrMD^Ao1mELcyHI z2$^9^l87_y_#REv`P#qNUGK(?_diVeK)5_HnYS;A34WCfi87_!JGl zqLsWaybsuo12y`_=FCfE{ylE6Pql2vGcg|boS-~g8#PnU|2hB4(hGYmNvs??+K&v#ZQ^7n#B9o^Q4(uE4nkLL}J(ePAprQf}H=`4a z-7Hd(^qleDE}ofoz1h*`!G|h;J^@;?MCW}PReOUA$)AK0A5vt}Up|P~&t}|{QJ+|s zw=;|xPg70}>1|9Fo~Ws5Lomwyx?p0_CqR+mlZ-M0&0SY;)HdP0$kwgEvR`R0oq>#B zVHrtO3z4GL;@?^$O}xv_t#b>R?@4iN{-8&3-jXYS zi|c8L`m^oZikHSatr-gFaRsz4cm9a2$7-@pB$q=Vivb!wEWIG&VXxB*e*K!SwBjL% z`oMgWh1ShA)8E~kko$^+o2*2`#PHincVyL#@q?ewD`VGVXQyk!#uY%mBykFj9=DXn z!(mKwmpETL9A4FLY&$jP_m#0s&o;U`jN9eC8}-}8)}OUKU))iW9B}^DUoNqVZ+aTt z9}NKJiNqeloj#C>*)bKJM_i9!@rl2`SwVYd#k$$CjAtRQc?Fd*q0AGZjbVIf$gpo* z0_h|sgdf(w3uMdfN7ie#@+^v6XE@TgO6m2_l}RgG^wjYL0iOR?^?e8b9C*p1ky=8P zv2YpD;{5#;=PL8J0O6HLRq3zA%(7+8TyV+wSlnVFxB`I$F?Lpx8l;o2ADOi{A*>y)T_!h&0wOb%mWRqZxoAg z!yv+%Ld_l4f$~1nQ(-dD#nTl|9t(|raY%QfWb*3{kwptk9CNekGKdxnq;+M&9=~M1 zQZgBd+Jm80lmF&%pxE8?j2BJ4;Q{LgOYvvei#vLvoY5>1eY0A<0JnDPlC^0i|1OWl zeZ3Vi>vxdWMcb%>p<2N&9Hw+?WzaIBeUw3#D)PDM7g91W&iNvWaLE52Foo#gfOwak z!teI*(UM!Kjt+AoBk?rz?}{PbM@vS{_@KHsQ)X4eH)OX)RarOT@t1tL?m!3@5H(O%G+ z5Q_Z#a~78(gXfVojiZRf!Nm|gCknsNok@-ZCjT6IWaEe4jMbSZSH~1G`Jqu#YkDO{ zrF7Y1<}IE2iEO>iT)Q>v9OD;qeF7s3#gS87HS)H~!jUDh@Tb%?^1d5(b-PfhZgrhm zwL**Bw=LcxnePnk|FeW~+falvciF7x=+Zo)FUWj*rpIUQRHyhbS-9k)1VULe&eV?| z*_?SnQ@5R}n=z)|X~E_3{=VNI_P{PRevn6Mb^qUkQv;hSlT3CqzYjWTw43aYCR%bO zkddAPLWW;JqAVZZcBcC#zmzhz{3=tS+r7tnx+_&t?W?B1vEf$IoM2|IDXsgbkKKKckQxh4*f+TDl4EdW+G`NaoLBLO7fC;a>cO z=rZ_NqnUG%+c=xqc8niqoIBfGh~fu(TgM6|CcBn`_iO%T&U(N=U)O@zkQl!I^+Gbtt5VFm(-sA$yxy}PbSYKa zgAcHoRa>dM(A05)bv-IRxby4fB6|kKLgS1ohgC7J`C_nun{qEXOiKTAb=IWR@R30sGMieAML*-0#<)Is zWPJH*YWw5Q%pK4d$svD0|8O;A=;5vcw>{w_&|rnbGr5MIg8x16rNR7Lz9B!6=V<~= zGmz~kAz(Brd(b0(i@k474&t-J_=aPywWIFCf}Dz9tr=v^?Ixk~?~RH0IHTE6?NlYv zR!p!*g~_pTms8eJpFVQlm~X>lT&DBoTV7GYl>G#^3cq(^i{&=X#y zS zwKZnVxpX*0Sr?w8(v;ZJ0zDu3&#f*h@1QQK-@P$XY9Gpyfg|^7J)mvd$K*w5+W~F zjQ+XZp)hCTG@7NWIfiNt9Mk&athF)OQg^pfUh;Us@Y}cKm{HrZcrTv}W4@P!%B1mL zk(8iCv3ibg^_+pfZsyY6nvd%vtvEsh5YzGURA8wz7v3yP-)E$V>SVQAIY z?+5t|HM&*N7gj1fKk+Z?Bl^hv1o2MRBxC#wgXcJbt6K^rVV*~P5kX6>p!QvJFYOTv@?d=wOdKK! zu`aWKP7ljS6wXZ7Idus}*Ye9TW1MH_0^}bwppA!QpZR8?IXdf9aE3QpArEkZn0dsj z>|07!EK8F{_$Mo=1v-x;FdhoTzTD@akRa(sS;#hX{`UkF$ASy40b3?a3b;V|{|3{X zx7?tFtp%Fp`U#3Y@lFNh7gRq_`NguXp7`0f!?$eXU+2aa0X-<5T zf=StV-QYNVpnWjNuW#ytv%Ns^e_f&SAMN%DNB;n~C%ThTO35W0*x z*)i^)PLzKH1eP@2!NduRC~wIy1cyW6B>af(yy0!UTSb;vTg8Yz(j#H*fB;9h)5pMM zH!r^+epfnv7nMbTiI(@pZyY?iO%C;UDS8gAS0o0E44iLE7eQcsZcdW+1tTtqE{R8 zZdqP!8i@nL(gUs84s$kD^ZMa z2|n73*VHiX?7d&4u#oueaoJM9*0R*2!JE~+l&+$j^A|>=;btS4Bj`bAOB1a*17w)c+kj^a#cH)e8WkOQt1_%RmdK$k4rKcDxfkk zVMuex^Dqj7pip+O>h*iw@~@Wt{3Pqdx4Ko9J+S zp%TZQ#Lsj)cH#wbofBB)W2o9RIdzc0Uep4o>sFCT1X9#Oqf8Sa?8iME6^`6*pHA3jHs28c7X@VWy)l2JxIQ}}a+p{@Ery}V zUnbE%#{DzQ*ed|rEQ&|N&v#gty3TgQoSMYk#@*3zQ!3>R&M^kpY7@F2I+eymV^o z)Ke0`m(IfzsSK@OIs?KkvuQVbEJ}ICTS0_8p(q41j)!^hoZ74{dp8uMM_&zjnQIrl zZb~*PQe`3M=0Qmu>$O+U-<0ZJ?bPC}Zi62)qioUV{W8gMJ#R3g zJEA@4<7NE~XhJ{L#P&+psXleLaBmS_S^SaDreYk*&GoTaRzgK-d+y7Q*1}+#aOsxq z*r4UXJ{lZ&_i4mdsHizQJ3-8YT*ZkQB~uNp9=sa4c%Lfpg+x>hBPWp^#<-ZV{$tcc za*3`iLnh-&$T@5ikqo0+YhuI7%#F=G79Orj_3)g`OvNiNEkg-T?Z1nPTqcusaQpmf z@elwtvb$BU9T)P=f5Lghl0vzK1%Y(NaVAXfQ#k(qt&_x!iCID25V7Q$Ip+>d8nC*>61 z&&WSO6BpcQh4;&aaXCwlgYLW03ZrdH*T`FS4Q4CJdN`HSZCrnFF?KLH=9KvcbyrpO2jH>G^A%>DbnkW|QXi z(Noo-rK;byPJ-{@x7HEZ&$x(PlGW;aLSVk?F>2no=tsZs$~Cn9Yg{ z?Eh8)V|4p7WpVXdiFN?AX`|$+G}o3P&rY@U&feY8;=s)-dmgvG2~YBVwB9h(Z-h3J zK``dlJpaJ-$(t_+pk2BU{?Wjo%J`C)C{u5}0ec4POr1e5@n^$xgZBR>E$jlhbw-q! zXBA@Q88-*3=uO@EzY_8mOWF-nGFikHzW+tnArhGLQt>NWBXP)VlFax!iM0%Gk>MBd zj>dkGE$;8~-hVQtPyNIq5fDJLOYqfb`;_q}?0yOmVF1^CfIJ7z)%QHQujMfEZ@&+w z8f&+7o_VWM>`W$Nwhis;rxsDP_d`y{7-yfQn&UptJq-T3Wnp$?#XtWy)M9mwNg;)?Dta4|X3*$R9;>j?=&K?9OaZlsva!9f9%z3Ky~ZEX>1^ z84{D8=!kz)rEM-zkgKf}%+EN71Ae9-+IW~WyeDT$TO(E}LmMVf3N{+n2_LMc!)OWk zl<)it%x&j2?s6=?pJtM8K?^2_2v<0x80h%R_ENT`VHir8tOBoc!e#nV36EgVWWPN* z`?s!?2HT_x>a{yr2C^u8@kDo1lK!)&xq~a1YQ?O^j#_07&C845>Xl71D;hO}$); zwa?p*f_)hHy_sz`H9?&O!@5yzAzA;v?0t!UKp^y!&u5~;hgM&-GS{A_Mvliu2#{+k zkPUM~bJa8kK5(uozY2BGi(^f2p>DoCfEaQ?Z=8eD984{>m?r;Nj7yJI9vXI}a}V!z z4)c`=|8Owr5unG1mGOMZ?-m_g9<+fVgwk|P0qQ}IX?wLXw|$XhABCqZ0ikwTbUdAwm@+yF6O<20P;k&OQQlc(fGo|5=3%Q zi|M|9wtb^=KdeA{t8!x*-cQ^sT0qW=4fPrQ--AYQym&@0+BlJasNRnw4lyY?l0&6!+5ofhvQUQ@0isw0g*jR1-G*G4(7ow z+2kHwv*&Vg_H%W1rly4ErH#S`n?U1@Z}Kb)Ox{ZsTavAXll<22nfi@a6Iq~#{`Rx6 znRDDOvARo)_(182P~F5B!SX(X$^gx(4Wp`k>k)ES-VZkJZ2fySBb)yikklxv5Xb7j z)P?+ z=Yjwad5~Z1n?Y-!@%-GbWeaCL@YV<_av@XWxCuUDS#+&+Ti01YlKAbLTj7HK_dqY4zcy^^ zg$Dfo7FdA7S6r~q0VVY-4kXWbKc|3y>N`!dW+Gp-Qxq4*+^xxp1V=cg(MKiRlb**C zx?Ua3SWW@r0@$j3F+{LxQ;FfaFsee0PUL?NxcZnvm~Z^U`+LGkef$0kF`-LFeFs*} zam?jbZ845xcSxkR=lW@mb)_0)hqdBZ$Hntj2IE$qZ`UVJmB#Og$WHPFs(2z2)wZSD zOO0@nTQ*^niEauxCJzQBX|+wG{e(2g$Re+f#exgxH@}8IdTQcazgof-_h_B($IFJ9 z$ZWmy&mWW)Xi*OB@@f!QwZP>B)C!lQp3k$_yNneY7w8n=cM94X5n#fniQ&89#7B*j z0-um4u>S(T-KgUnM~=KI)+jpm1$^sCEli;GYFjJ@5HbD$gZWw(<0M&)Qr%5On%@%u$;mo^(r1m&9dMbF0`o6L>-32IsOi`q$c@OY1HdGpaf#{c zKugBfi`~gDZf1#h_O>^5sIta#C;N>Lsbmd*-ucvKn>5kzcLBW;gqslC4O}RT7#WD< zAM14F!MUp*uiq`I1ayDTxyk;|>%cHyFNr#q*M5V2i1L_+mu*4{9@U7up4Xc5<=)Tf zW$Cu~HJS~IDbs(qAlY7vBiv1nkz)-Y&aT0Yt1O9S=RV{c6aV6VI+&&1_Tx&1l6>N2 zdy_NI zDwzVTpCYq-rtRS?mao1qcv^ZC>}7!j2m#j&`T8$5(Lp|ncL&lhb0w2ZHnnK&R1EF? zUPK!a7+{i~Rs3TJV!pT!4)y`_CQdg>oznk6I?ZQFEyC3GEbiy>zjX%cXB5mQK+3z0 zY_Vo0>bg~pln3h>d~3}x)o!t~mQ7B-5;I=bK6FfCt2TkvaA>&(HaG$5{w0rc0N^&lFig)7xZN@sz{{_>YXd*R(`@y7jAsV%}uW7%BmGcVqvVze=TRvbE8g-hwnZY<`8qREP2s;qV3n_+ zrt(j1x}jz8GEto$GR!N}gM{j(ryuCL=VF^+>jqU46=m!L+J&LArt_^}&~&lMk)*=9XS0=B06>ckl~TOPi#<16 zgK#Dxtp!ocr@*WgUKEZK1K@J|fKfG%>4!K)%h}87ShoYr-FB3#pEf~#zPs)H97g5S zw}xCdYMnR^L7>Vp{)G2^0`FaQiIT)g`(GydmVMt9Gnu9ke>AVX!IA&USm7R8{Cmrr@B=n-|;I~Mw1iN@C!=ycFO@TMGdKS{sB zN-~xfmww|Dwz$Um$wN*F(HGH2EdStE7|1jnM|un-SVH!4SFX}UIUf317N2;7xb_)bMQT3h=wuo(eqC!6

E0D?Ef!V9+8p>^j zeUBN@xC7{e zRUVCbE*T}y;#k#3WK@YLVxIkhZnKU|Y?_dKz8l&{XJ;sS+RQO*x7hfl1};0?gU4s! z6OxMyG1yfulMx!y&-K2~6MqH9^0&0457naE%@_P2L)qKt1dqk2e96bklg^FuZE~*| zE7P4rv$oXSSXN_EA5C`UE$i>sa<`-S4rcF(fV>Lu0E&iJg?Xi=+D%2z^b=Q8X42N6 zdbDP0bS7s*?+4;{L)_M_J8rgEhr8Y|ioqN8`+;zBVER>Y!0a3M@-26uIG=6G5J}`{iesmh+Q6zm`;-*lO@#Mz4vm;;1`9*= zbI~%TUGz%J_BmRpKB@p;Jcxi;BwLdiRePgs;vx(a@sW?v}c;J~nK!x}Op`HgYnMTi(fVt&s5H`z&6!8jodLF=HtP$m5(_I@h{u>B0ZN z(L>c9{xHM{uWM@}i(F_~u->qIJ|RJ}OA+EeyHVSh%hJx37Nxo*$ba{(m9T&r8*>-C z#p*{4P{jIZk(-ng-QU7L77A_C^V}xZP(Dgg6nJQ{SJX9uBZ;|?WAKu8XQI`zR-}&@ zwDvN=54D2Jvr&K@BHJ^F@JEWL_z2_5+8OkwoNpUbOmt;Xg z45vjVTs?FACHfj&D6C8p+100sk2EMg)koKq=o`y=k6*&Eu{dL7_$qI|nVl5@`V<(< zl?P2rz$>AOBl66PwS0eP9jm}#AgbEE;=LKHHLH^CYR}YSkaoV+T!kEBW8UFjvvZq) zfuqzg0|2xCe-EOp80OsH1}=>w!KBc1%g%zFNAG|sh@e;HAB`mKGRWsfN$oB7TH?pA zHE;OB)+Cup%yt1U)eyfBbbRNaUM`F7D&kU=!cYR+E(t{SCMCE9JkLUki72vTQ})Gf z_BTC?>;YuKICeSVvIxf>9_dCgoczrcdVdck|Fb=KZBQtJVM`fUXEP7HarDALBWZ#aYn(CZQSM<`Mu@oz#kipyb36ymw67 zDuq{wtmbm@&HL_Z@Ns*)e^q*IZDz)tBBkD>=(nC>*7}$*>07}?w?0VG^Nn$9DPVXy zO15g0vA;EM+<}Qlprd4c=?7pd){ArZ7!kTXo%4I>X`nf{K=*^`mw(ylE^+tiPtcU_qHnmoN4F8_MxA)uv&&wq6d| zA-*I1p>U@?=&_X9Y9R$9m_o0P$?v5MrPCW_gGz&p%p*O0XPzV3)sh2DuaMVMDvUC- z$S^cv&_Z(vmyc(`$nZoa24tT$kzZv9kAX)``y^%)Wg85smm;DD^{S1cWSSGXM`|np zU--0u2hpZtFeXdbb-)O-oRq~87p4->m^jKbHwLd{?`1U>j9cPRD zu0Qz4eD&zc%iQ#&YZAWdfyz>Q;l$d~(|UuqK&@5Iu8Oqlf*w4#`(wuZ+Z+pYTtEBa z4zXIePK@?zOj~4o5J%^(X7KP9LvO>gHYN^qQrW)v_q(X^>_0~DE?nzv{IagpdXh{W z0&U;$P0h&zHCw-Eoo{ymvng;XH(cF7xR44zHtI$*M6tK)vlK}2mj||?yCBhijXuTT zgTRd3DO!J`p(93vOjCu7u6K5ryIN&!(NH?q%_*z4tzfg36@}Q%XfVj++LJC9q>kDz z%Ry9VJk_AcLjKk(uR=6Z3Y)}(7?pI#xb+iv&o;-V_-@tOaAh}dOuM#C@0Y+JK0n!v z+5N6UW?)>C>eNHvNm6@+MiLS^ZOLTwTX#$INt&AdJgVFYMZUEdsU|p7lnicZPYjV} zj+FDc(GRh}wW6=gFdmWTt>7on807X42?*!@2fJ)KzpmN4*dvK7&^j1Fo@jQ=*PhkT zovq%Fig|4)vZz0g_`8dZ!cm}~TMZ-k#s-6`L6DrdG}2bDsM+_B zU_PM$;q<4q$;^c^tf*g}=R-#~9?t@&F&>vuAw4J?S#90h7*k8td9(d4%FI@D8f5Ygr*-cUFB1c0Lf8V zzoi@$w#1q3qtLCAU zt@Y*1$u{@xANRM`##zFhWH!)0;l2Z!>mX|HJ)TNWs>!UB32?=N^fEz&C~vCU~_M{csg)o%a)u0RkS@m10D6$NP!ElA5! zc5BV0QM*5?TA@e~#~oFaeq(a`)R6P4=uzv^+FVWCXp&#~$e#x*g#V3=Sttv)v$@^w z&hO66Xftm1!hO8EF89`v3lm0tc1e)cuQyWBV4lEeW7Hd(kur8+k2uqCz&o>3ffX^o zUja9t3O=tDy(L=isfO0>i*9Oq?bZf8d(j>nhD8SFeQq>wd9CIn%fjZMB3zWw6MjQ; zzrg%djtG8h2z(I6BMQW~v`9;vt#z$ljOF*t=&$arzwC-sqi+T^gXEOTrb8MnRXpx0 zOIODJm|1cxQ=J0DB?d2JLVEz1yT3XWknzFi`N^wVZSHXlZbF>T$l6GX4{tYea4EMs zHrH8KJ)do9ld*3mnLvc^P#$opb501ET1kQ;2kp=5c*#_VjLH~fuBTYQz4T84fuR$&=!5A-QEeSy)u7=s=;Uz{M5BeGTD%3do*lfwgGh+4svnEYJ;X@ z;Q_R!>dTO|NoK!TME*S9DUYr9trcHE9WH zaGsPzM|-yQsM8{c`Z=dIJ;|tW$JiMG+^u5ORGh$&>4T;v2c8xCvCbUBh-llNHr`Yo z)xFHny50Vu#kxL6`0wl5tt3Ie3RgcE)uCQn^u3E=b7LnznOo}7JXj@+T{Ms$HA~rT zO+O(|=M*Fl|KEe>(@gDH!#Org=9n{uGxZZ7EKYz5DXoXaN(mHh&5W=m9YB}ND{7Z) z34Zxj(}%VrGy^PWfkV&I;JbyEdLrN{70NI8zET;GXF#J`t}}9pE9s6&6G%u;Cc2`w zG61j!D1$r)_PzWtkn^Gl)%S8}bqWH@;*I!|#8{kHv;HtsZmP~678qu!Auv2w5;?33 zGcyntZ=`{%!%S=BAOqydg0IX%mKBNt3Q8i!)2Av4&3xE$eK}$U(xx#Q2Faxh+Fi76 znH9|Rtsg|cI2xPz5@e>I?w#0aeb(l64IW}9|1DE>a?jA$)|9^i&E(%&8`aFlN8Y`v z@yh~^Xefzg|109G#-CG5vp-Rfs=L*Ej_yf;wgCm!d(lcF%SB;556Mvms#0QKoSeLe z-$+=Q_dnJhm>XwX&i3hl&PDhn7up1p{2q8d0DJT!j1>c#j2YUda|wHjzQ*~Oy10ca zp%V**x&g^7_a|Q%)9jhpO1;=66&-9giT=AftzFjKgGs?J_7LOK?ay6Lqk0J45Wz)M zC%H_u@Dl~P^Ew4bV2oKa7tlNmFhy~`CxUn;xLg-*GPYKT?<;1#&r2g`sFW__;Uv z%1%(>kDR<+%wXxm54$ex+q&m#U&FTU1E1TB{b;FW6B_1AYO<1-t2PH08Yf1Pg-}#N zwRSBrd;V0rn(9dX1bEw$EzzPG-MfL;tzWs1oA;@4*55 z$aFwXaiEtKd4#E_(ufaHoJ8e&bNayt;T~b_8)_CTO%0PKpCS9(7_5XvEZ5RU_zoycdq8}DJ9fBwHjZ=FlW0*2eqWnrVtXl?!gq&(p6`Fu}` z^FlHw_R)&nQ5$r$IdOI;57B*}+?)_38p-WK^+klxy1{{l^5WOdOrA5u4;ajh2;+jLYs~vigYGB80TV<7-EDxCC`SA|6VXR=KbsrS5zRLwBS;L#BZz)dt zd&y^RL5NLW<7BPAw$DUQUpF_-31~(ZvdxurK`)cZUAi`w{!CZk>Ma31+Hk?%eEdkz zy)2daHyFpIf|5kjW5e&#d(>|5?kDTZkFM|FgMbkf%7@eL7oOyZLe&4K#ssf)k+I9p zb=86C57BLA#Z*Fq5{bO{FNY6``M0XQ2wE=zSO(`>bgD-Hl9_1DGTag8yl&7q!!Lm1 z+iz{3Z#9VbB5IGUId?BaYHYs!=WeEHG_9@nEpb%t!m_ksK>KgNf1X?5U3&tWt(Rjy z@{H(n){zTz^2705*z*w>9a+)!=#WSZyX&^-1a%JpLTrjO_^q=)z@@Jcw39>vA2gMN z#?Yr%HA8cK|M2}EMduyP=KHqsF17dGZBcvAqVg?8QG4&AM#QLEK}c)wv}Q|DwQHpI z3W}gLs`eg~D*WE({m);|!Ewiv>prjZJU?tNvQ?!%SqkyYacYJHdzv-t9>~lm z=@+Q<0v!=%P32c0Ld+Z~0)L4yPAZ(;FqsQ3FxQ`gIall}hbn`7iUt-#zA1J|A1pRc z8b;Q3ItZ=AW!2|DqaGI%wXoE`$R`x1^>~dh==Sq-{`CSrn6cHEX&kfxbHk$@cmpZ@ zlSU}~ur&VoQXw*Ac$W12XjMBtL0m-Y*U;a)7l$>6#m%vH+bm73$*Uab5GAU&`igD* z9q|fjmM=n5+s!ub#V{bUYL5>zSb%;P2V7LAnggH#_SZE1Q&%Qnf;iOOYuQ`y<1rpo zJ)ZV(cDp9K?KGB3N#XoUr@=>TSi|G1gkF|coJ!o}z=#BP@qF(l^kJ*1vRB8fZ>GX1 z-Yus5OKtePor1g9!t2SZmz&t4OzePpCIO1_LT6S4{ zTUy$@>Elmo28*BCWCI1veXG1v5(-yh+h_g<>fp#K$a}Ao5s8)%uAISH3HIk1a=;cC z^LNHT58bL|Hn}W0`csVRtcNvf1kQQQu($Yy#P!=RN}P0WT9LYXMXg`fc>uEEOgRD@ zMOL7g4OnNZeQG8LbM3snWxN@C2_u)1O19--(p_g(t=hftgm@_!sFo-&5XFM`cJltm zN;Kd`(ipo3_yf+micht{KJ|t|TLmj^tt}AF^=Lh;jQmgktC;rz*7N~NY^)8WA^Jpg z2SYHoh{&_@m&4UYzhO4{1; z#ndYi6fr6h6B(HyQGd-lREx;>tlZ4-32zlSC66SJ&UEqQ@7rHABA((4N*le|CWS^6 zOiEQt&v8;LlBhYE(hu}Jwc9djTKFa~HNjXb$4iOy{c`}Mun0lZxMIKLHMzI= zsfA%lFbzVJ*HYqjZWW-#@=mYHzHicD+_wZAdVYIA9gOv7hUQ~guDNlsp-Qb9GR;#Y zZr;yNlQ&G7QM1B1lM|^)+xAf>(AqjKJ>~!E$NU-<^Qv3_tw}l`!2q`>eg<~d&y~Yd!oVf2cnTxOwd)^vqY zjf?4I^#|8_R*P33eML#8v5Pwc7Ri3;T=E$PI^pE;{Cz#Ne^p45mvVpX4D2=MlvIxg zCH*L+CC=0?Wd)__iUPcR&OnLb89z?%C}n^P?@UQ$^}7>(@EJT!8HnQb)$Py05nG*r z`2ju7>dh4aE~Lk8{=2Ss5l&V&sB++_l~AB3CmI3Dscvm&JcJyCNe+ebiN53C>kn!%T z{oF1_k^%h7H{e=w6uI|lxkkI% zCToLJ^4%);aDu1u|D};NBTwN;>Y>@hz<$mI77wwyhqV-^<|$P$C%G=2VuK~?#%crl z(W&Z#cGs%%V(Ria0{q4+UMC4)MJL)}!_yJR=i~Uyj1XpI9g`rWpB&G`-;PY&YHbW& z-cwCe%}i6m`d$Ah`o`W{>#3J?27KiLZ56(=*&cahLnJ{y=F{MUP&8NJr`Eih6Qz=> zH5FeqOV23@*?Yt!Epz}oZD0S!)8&@BVuxF`hCA44Bk z)F}M68DJf;l1$5>%KaM5^_RLyBu6Z#*^*%+Sraj5=($chvqY|H{J^Nyaphh|?1b%- zV58n0#>mJ^5g4fFsvLEH{diG)yW2cN%pr~Y0c`RqvKP4w<8Nga zK8aY5fLa3PeeOck3>dGnxtwjww=`?+k0b}Vu5#0x>a|T*X)^y?V{faDJCUH3D2c~? z;HefK#_%Z5eS?Z|!1|R3bYzmtfSpGG;nO5S<6%h_i>TtS=`yN765^^*;rJ$?j6%uA(KQTx=?EF z0fSw60%q6W_b>&#s5uT;ED(zjjORdY1a|EZ*hZ3>5W~JkP36sYVfOg}=ujV@AU?hs z(?bQ5#E}987lmUq_=tQXj#IuhAdK{kz0p)tqJRJA>9GwQj z4jmR>3SSS~MVcdu!^l^6*fiHD)VH7Q@5O;Mq3Xe;fTNz%1++B+tDKK!buLFfcmB ziSJusI^wh{*56GAFt3SXPJOTZsn1lIEJbw0;L*4vVevi}Xl6RR(fSv@o~JPF>3suC#Fe0{{!KXduE+lRjw;X9$Y!=KJPot5A82V#OF!dw~NWaw|_KwW|NH ztx`?r8pJ7QRxPYa<%?5HGF4G2!d0*7(iAS?48-`|2a%ow|6t)2OXas5J&k@J=c}^C zaM@mHa!S2O-Lsad4uku)f%WAV3X0TV;l!WVV`i|b@S7<9-pI$u^g8nB7jp+kLX6Pl zqrr{m_J`#Ckk`)gX4(Hl-mKgIhj zs`}Yuv7;yH^wP!pqGB8pcVvI}>BLdVSnMJ_#oCfIZSu~%t*TWKf2lq_!Bo)U{)z?A zQ<#mO(il>^c&!Jt9Z0#Qp$#X?G|TL8wL*vWiltv?iyAFnlB|8Tbm>@S-};;y|WW1bHk>k!od8 z&!23xRpy5f1nNE`B_Ykd2Vy2!ZvEN%nqb>}OsQ9B4GSy2p zANKF*dcRBQ!jeR)WR6WEBxA>JZ)&(fRpHf4nSQPIf!oGQ8$R+;5!V17JxvA( zBgM?{$>yGZvmH}x$(w%co>`SKZS;5jPnB-+lsYZKvI7RJG?HQpZd9jNTvt_a-zEBm zFXI^G!3wZ7`Gu>90XjiIZ^hY4kkCvM92vk6MxgyuS0#T3H1T5G#$f{9=8Xl`7SqVH$Uw`N>69E}!bKM9=H>i+;IRtGIX%tG1wG&L zKbac2{a4p7hVUm_z!9R%vlD2Y5VqEq<)7for{o8D+aw`&@%r z2Aju%7nj8@4^iPsS|8`obJ^kZC=dTcLbkVckz7obtv-tjMIS;^q*9tZnb=7AZhG|F z^5eL{b*LM+HNCo$rLkNb$4rpdRK-EPidV1oVDEJ5-e9cwoHs!o z!UxA#el`a?=r{p^f7LYQb9)55UfC>Cd#G^vL?Oz@t{drt-(6IvvyzRZ%W$8TW<*bU z&srxwITv?M;-XDUYfXrvgz}vZgxFaw{}zL4_DNEI&x7H_jWSlD6{f((CF9zXRhT&2?g!?+0fkaO^B5Zu2R@a`nth$m$S>E!m1?IdpZj#EUKqHV)L`v?Nlri zOD9-Ufr`-5U*T1`bU7ZDxx`ZST=F&_Iw+OcmB0P=X0`MU8AHe+R!5CRhmn~B4sV>^Os!Z(p2Z z#$&qgLkcBwu|?@5;V)4B=Zy{1O~-UFP~$|Am?{tQ*x=(l@-AU@L&8l#W-D=GEJaBH`9#$9*%$n;LFG#h&W zxPRDiB(!RYMdCKul`jztyjU);TDsL%0F$TldQJ~Unhp}Z-kNwV(m)i~YJn`6sTp)i zDx=v=i3oG+)L4rdaoc&aXs5X`{+R&H6%-_h)2(r8ORQy9#ecBR)GnA)z9II z6Cdc4t)LvSzR>>c@CQUAb)Z0PZ-8JXPCjPW#m(lIK>a2Z)vAqYcUL_|LJNoG?#%$% zT>G&=dmFa>(VU~Tmw^K=%&lL*PMlYz*Ft?$wnQJ8#N@!q&{aED^WB%;}HVbloQzq@&O{h#WcNykR95(DAx zc=P@_nZ(JR|K9eoWweD>oNdlFtwrO4}dzLAheS}tb@)3{b8cQ@quxo-BmSt;z+Py6eI4IPVuvx zI}#(?JB5+~1F$F%S)T?oUdjytj2{W;?d2yiVSI*~WshF#8!M0Rxj#~PP+F#OA^5x@bSgF4RIW-(duXMN)*Mr@O08!iOHY>IEKHrfD==!%nRwshU-3O z=m}la>%X^*X15=9_)(78j5H=t92QJEQ)A6spF4ba;di^nMkiOnQ~P;!isF}&cc0K@3w^}(q)PEQE7_uSo(}Q<9*XYf zhxZP{TY{|K{-uA@gEKoakAn*u>6W% zHFRWX&d$9=G?{&Z5P&f3ok5^H(}QqKjelg8TC5N&P=@}JbJj0(B?muJ;o zl7?PX{!(A?fJawlPh#w5cFhS*G7Isy<-TuJ4)oDAd&|VY^8<{TadcoSs6=K=nf1f0 z9dq*7(EyG%1L*Fjg~!x$>>`tvLp@xC2w53~=jW1x8Eyn15^qcz%LA(Z3e##GCdqbI_Uj z49T{?#-#2Zt`*j}vS#PqqMTPSGndbk@O(l-Lg5*YZ{uXpr65g_L9g2-H}D{J6nh|U zjo?Pq0={C|txneeXs|R=?S?b0QrnMnL6bKQ3-9BNP$r4K*y*#!#*RJ0!?psNb0*iX zpyPv1Qb6yR9w`tnw!LFJccihZP^)YqV^{*!84QL0HB>W>7p?V?Vz3_sLU#!*^U5n@ zVLYv`Hu_lAq5nLI1w4p82fx5x4gQx|mHmq2Ida|1WC{5lwI4S2-G`$Gx1mE&%YHp?vDux`p%{xmowz4-<|qwI&8yT*z6P#Q%qvm(ZwlO3~)+)W!FOZ|qvtu}9m zchw)U{<=1^X<}!>R60X%n&3p?weQjl;3(;kGk|njAyg~_a%%yV1CVhkH9v?uR-Bo`vqFV^F=^t z8W%Pq5#U(*Ugt>gxgnQ2d{3J4`j^qo;RYH*r-#2z5iBa#P*#K6h4>?7*0i4u2M~uQ zJj-iUMFE{!9*OOJ&2+hPvA`^r$fieILKnQorL)@ownuj>=wHo}$3Y{=lg!aGBU>~h z$@OhsdPWu-g&xUYzgwe)L{t~7_-`BKDl2%6XNdf1MzVYJiQ?+AF_BVzytlvSOpaj1 z_qh$AzDFoWETk;V9?gzl+HFari@5`#30KNjcgdLLwrWpS)Yd-PN6HF;?-T}nxD&{6 z?+dEt$aP!MGS%IIcfg_kQChdta^nc2v9J$hYcXx&o4A-Cy=Yb#G)}AaChHe6$6_+( zVCpg1?ZraxL8YPlh|zR~433ycoRf*idt1GyR7jqho0cw!L-;NA+v~_%ZGK_GbT0R; zWk$txInkV3;U?)W1#Zi3>~@W16q6+hrTG;xy%WjBF`u(U`;J~0oeHP%>!ASEZF$?~ zpr4V4&o-gJW-CmCuU60H8_U-*qrj{^y>Zr*nrZjsf!VCDa|LxXD(0~&;*IKW-=X0l zyPO;rZsL#7i5dQPEia3w-?%SQ`qm%q)CJ9E8`OuH8N|N&{-gWZ``2u?@tgm}=|z6k zcYCcwM_!?kq5o4j`$ShTah!@{gvC~9WT3swhBsvJh(hA+f2moL4+`!Luu!q+ZtJq# z+gh=GnW1MEw%q0{r=%SscVB#){H4dK$^UL>ngIl`jI>N6e5B-2>rwN|m&Z6Ok zAr388v%qY3VR7fxx$%}``>syHiO1xE-bsr9@5w+jmYU}U03JQP6|LOy_3Mixv!C1a z@(K2~lyx<(UYHIG^GZXGQ<)wY$Jtds%PkszO@&PH`vDBEG?~mNJtk)IDMmAX^l3YO z&q>PXcSnp^sR1J&)n^@ZaY~sraaY_)--*NXIzEeZk&oS>mkQGL_i6BVGC1k;AF?Av zcu2UGwWN)Mo-42K>neI`FHURv=_R&WYfc?31I;m&3qa zlETJw5al*!5zlZ9pLBxU;=X`c##CY>m07QQTViCHwPc#zMYCuS@@)lsN&8NCP8zo% zO~^U;Q3NC+rJRu)x_G@F^SC(d?P(eJMp}hsqN+H>@TOns-F%VSSXtM^fbi%Sh`e_YFOZFBBU~%!2xq)H8gv=wS@0r8Cy8*EYyeV*=r&4ySM*kxpHXJ&1dZZCi8+Ft6+T-m$4Nb8Or zJ^fMwEB9EF5_mVnqhIUaK2rL&wQhorJxBXpXPK|vpLg#DK7VR_=9UBxVP zn5-M(FMf4@C2>d%yArC6qmMxuZX7cissqd#=eTBPHpsXe@66b=s?=Lgjf$%0@1Abe z`A<&HOh^`FjiZLPD*eaiS}GQQ zv$_XmszEMBC)xVhLKK6Hspfv>zS{O!e}m-<5E?MK0Waxmpn(urOnd$a;#G|l7y>p9 zC|}@i!e|g0@~^B6C|xKd?&d`m@z6*vPL%wvP)%4A$Ov0KS}D%C6aBQa_0nXCnttJQ z!y@@xHi!;oOx={u$OQPZ;M1~teck@ic48B60dy!ajW9FVj#3JeuhBv}|T47}5W&Lz%t3g4COt3-7-yeGD>xf-%4og%G`vbvVR!Q)Vz z^znf7>7 zL7!zZCe_^x)@*4jy|S>j(Oi4k?TA@*ac1nhNUa*b_2&hyxsgkZsVWh=2OXaAx3sF# z&lVX*%wR9P^}&KO>>g25FvcmJDx4dJcJdjLcdoA|K^c>xQzfC>r>bGfYSEZvQ7Hmz z6yfm+SzfK?L&$_YoG0UKv0{8iDHOjj$noy&^WfP&^12bR(PMkSVc91PthG?1;i8E2g7e8vBv8ki?DF} zf$qt-)^Q3TzeiL3jsj3j3i$zM5}d_5oIK4(a+Mj%wkP0Nm+ZUndP5Y{a$9hC}HJL zsTS`EKl~>g`xgKa@G0Od{$;nK0rlPlw}TcrR6z0$l#^av6$DAr4;WVLisa6A3*feE zJztEJ+x?kqnMgdl6mCHn=7~H!Wz)NLwRNesTlfG+Hn#S?hzGpJSc@{d=4d01VV1^u z0BS&JnnV$1C$V|z^MWljd>;eEBIo(|zqQP&Fa1&AbZNEp)!*Km*7BKHqR;qyOzqWk zhvZoY-N76o@d>@J*VdqG#(GhLBw=DC?GIvvd+~0_7fGSuOK1=fc-rg8sg7``tM>e? zd$*$8H^t;>4)+hc%eJdnls1xh37kwXR+?it_xeH6x@W@Y&aT#miNE_+%?U$REwhxY z@kwR7dG23@no(Z+WN|1!n9Nig9dqD($Yn#b7!QulVq@zvc6%(QIu%^Z(c%Abp{;H3 z)Ns`_WODApPqO6jIY++BeE_pP zJ`od4*}9WD_<@$u`6H{j-{wz^k%*FNjQNXzH%6#v`GihCj6!Wh+{mt+(Df^pF1 z;PvMQZRwm#nf!(_z7Bz=j9anY7n&I~fyJQd67)ze3T)1=>Yylm~c z-A&`{P>XJKB0VIA$>zA8{5ZGPV40L+3lsFPI(4$j%FWO#rQ=)}Y1Q}|#Q73-$0mnj zg<}(aZmwCXq~#}fSMSl{?)E*|>|YcnqZ?LPVkEIL5&gLyvAmS#gB(Ptd!&D-T7ZKd zkC69#*i2`!T~H~(IyFnW)9$2f#ko1}WS=@>1kljz+Yi~U2OX90Zf%T_jm97Ehbio` zsm!aJ4S$oXX+JHL+f2O?;HS{j_~W~3+e?ZxuH&F&Gds}g*Dpg`pUJYMX0|Qv8%-SG z|CnY|u}JkfvJ^=}sot8JSqe&R_omici#Go!7W#78E7dbA&U5_3_n%!2rC)DyJ<@(r zbL+c_ns|cAjYkpjV#>aH5r>ZyvNz`>+ndgtT2^X(pNrzdKV9Y53UdJERMx3h=@V(Q zyQ?GJ=j|8o@fwdxh)b8|pR-xU02O1dJ(geQXC{C&8Xb?eryA9+yLnGs#$8}Xg@h~+ zcxGEBtIPc*KR4@(C}QN<^1Ex-HfLGK7$CAGs%M-vk$07YZ+#m)&UHNl;?v-Vx~>i$ z4@9Y4y=mg7AbKoWpn!sLzu-0IsNc%r?imhy>}3)``_6JE=gOHq?|rE`H6lB?H*4+D zpvLh7l-)SyuM-a-#d{fwx7~xR)H0X7H4~aY)A3TuXELY1(>DL@UhWi18j!a7Av%0YwlTko5gI4 zc}LN<;e`+8B7qqorz;avOpILbJcJPbBaVeuc4uB{E<=ðy)Fg)zKbw5tO6@!s~$ zxb6u!Qp>Fr>UoF^#nig5qjI>Ne;-HN4K{DUql?H<5Ud)anHV#$Mx#!P+z$maEoleT zK%Dr#0rrt%o`4z?p@HSb=f8E>gqRo^xGmZ7##nCHOXAErD6NMd=3l+Hs^Lt(8@dQe zg}GyS{eJH$g@zZVz$43d^E|R)@4~`$3Vq6GONp<4Neb&G_PrnSsHFlOSs%2QhxIhF zAK=Bx*Vk@$bIHr=6z5)x@`~I=>~IQ-EC!Cq{NR4WS42Jyb-FjW8i1I64Wz6ROZ3`w zSa;_tINE!Svu9!-=F00^WtT4dF}Cs_)3AfeusmV*N0Q zgTq;t8qZWBR9TRA7FB}^J5H^VbB+YfLI?YIYGh^`v~PYaac-%#Y#s|G3T4MrHEcQ= z{8whcO7`MjHkEpRdx${$%EJqeo7o)h>)+hC={|uCb3%MaF+XU}vtS9wa-Z~BK2uO~ z3L?61&9_d)X6!(IZe5gWSZv%3iKDCfaQ6u}1+d33qC1}WihZyYYVRmnb2Z=TxT07# z)#2|rzDc>mvS?M9q~VcgCmw$APh8ErW;CCJCHgG`howd7+bq<(28Q8*?ohJm!5d5( z9ICfI!k^(bf8iqYZ|OFiQ>ROk*lxbY; zbnYzBhsFwj_-R_AU;dyo&jO<_Rl2;Coa)As4;$XktvxJRTl@<-*L{Y0A;k1RUOhSW z83h&X_J0E(U^V~IF=AhZSg*nxkB2UM$n4gLpn-puMQIvb`-IjG|3s8)X~FNL=3b*r>Y%}f>Rd!3rEXY{G~;f5KLoxYr5xco+7O-%A@8b5AO z{|k9ou1xPtnuC-gCV)kl{pjbZPMN}2(>y~X=F}3APL<9T(%hvXyq5+QhFcme6uAQM zJ?rssMuo>z$9D0M@nq+3b7{fi-2Pv!_pt|FDslLc|(|SwAvWo zTK^zqe=Pyd^cOIzU2`{F2X;SzXFaUzM;qgeM0>Ls zE8I~%yku|o#3!22w{@@?r(ebBAa$7ewEqS4;i>PoS-0y&*!Zkc5q}gb$tFQ(s>d7j zmY=3u?q_j=FE=_$^#AX7&cPLw!-A9jrO?J_T}_Q`ZNY27fu+V3VdaW|#()mv|Mh4t z?vr)DUog?5S$#(|YehE)TRd)-*6uh10vqH>gCnS>%PdPP^sPFtbOrDmai=>H()<%+ zQ2WHKSQ}A%0*$NZ8#H!Tr1FXDOWgbqof;t$IZzku67N^~XRdf`7+%N^m^J*O2JBi7 zcHJ*!qXv6u6%Ez;Tm99ojcdT6vy1NC#Z`NDI><_B@!1-iw<Gg~sX1o^CM`MAqmft;b<;@4xmE`vycL54607S=&PzoE%S=mr z1&Jw>uo(l~U+JZQg|G1&e(s~cE0Sk6O7$s*Ia^Ivq3ix=L;Y}^w|oZ_fPk;3<= zb|E`EOONWw|f@I9r~Vpka@bvV4}WJ99;`ufCcZ1*EHy>6k`mW+Cqe z0Bte)Ye{fiY}CXE#-POaDi<%@x7eDnlYHQ@>Zqk3;m@)={N#?}z#Ktn_PsZq`q0et zN7RC`B;=(oSaqluzQ{h*K_0JIYpvIg%S}EjP%I$9m=1#T_G15cBPHaN7&^cw zF{RLDG#gZ;i7Wpqanw{q=Qt|qBa9DC>1hbEHMeYbrt96H)!vx!-0YTLB0VO~Y^)_+ zOYrdm7c6EhoYSzHD0OK&m9ID5{8&<58gop)O3XD*)$*+NA~*?8H&F(siBTsV9BnqW zHAn12k>&5jkK~q1WXFgg^6Z&Z9LJ~>*qJ>WE50K3K|+TwwqUgk9zH$1qtJCla+>XK0RLE8Fw2~(dios2hA1p^2 zd5oL;G@Bia*b48?Cr(<5YLo2OK}$Ou(g|M>&+#X_aMqw(mcqu2Lj+@{51Lu-2sD90 zxHD99&l$}YenL9DMDbWptI`i57Wg+5KyI@VxxfWek?cfps<~Pvi1;waIji5la`8ze z)Y#N2LpxEgdj3!5$esHSk_6pTNgLR;1yFzZ`@H>LuEV*63K1tsaR>LAp!3|y*5s4r z@`{(AZyY>~vC3kn(y47!*C`rT=}( zM~P8i8E4F%M!(wj$owR}c~=uheYu&dUaY&Q2R>8+=^gdB6;NBZqq>Ra z8w*X<)t+HepMOi0#v9n0X)pPHweyg{|LVX z3a-ij-S`iG^~PBUb)nE1Q9|{OYce9P^Yv-5$vXc(yn{iNE)(PS4?_3DU{kIk{}(qL z3j%)0sch791naVAPg__DIt-azUb@?vppR#*%M1-A8|dmTbAbr9Qr~J% za{ucj{@3P-|8IH8h$iP#Km>otfKO zHvfLsHkSbHq|blR(D89g;{oPcc0`Vc#oN`}b&k$#1a~n=r}Dg?UbD-_v)zcDJ~3mr64Z&R!YKoIhF%aSjJEuG48T7jVopd=!~kzWzzC1e zHH1LBRbc9c0bCBynEq~w277JhPirdT8)C7_6q_JGdyp82 zM6SHKS-f19Gr{lCWka`Efe`GmUHZtrf}5(m-`OtAlK+Qp+#W_wbc@61u`|%#p{L^@ znus*Me!zaKva-qyvmD}LS47yhkI@f^*Up&mw-Z$IN8RGo6>oOm&Rwxt7D{$f_X`6Y@^ZX0; z*VKTIeyA#XDQg{qKe=eL9z7-Pda=qRXY$0^Idacrf9udjK3O9?6Y;Zl&~( zY-mAaB$S0qH@TK{6Wh6;qSNvXhi)~$4{siU=?=PoP3H&oPWMk|q?9EkNIq8*qtuys zMNIY!64yqC|Mh&>y_kw*CF;oce)I?&*uG}lAvy_?5Z3?xFxl&W;}ae_r$)stLK>=wYzH?P^ee|uS5@BDb$g0Ll~1mc$0p1$;v z+)1cWH{{%BZ2JZ2l*elc1m)Im4;Yml>K7<2WrFQa8W#74?VBNzhOc{Wk@SCg|4Nq^ zD$e@d-^`;UFI#Jr&X;E-Io8(x%VIkCwMmxMVaXY@ZdX@J@I#$bt0&QKH@tqV%gMur z4P@s>-i_)PRIncNvq#awB!FKt8o=T*|L?}jW5i-8p(SAhNn=nxP&LF=;Hfixm>Sy6 zi7!g<^Grh(u@FJF(L**4tJ|t>y9mZn*vLM(QFw8pVjs=U-&Us84u@Cy>Oe4UoxPphQg1w{MfMaYmBN zRMUmRl_oC(u@m!mvNvK~lKW`~af9%a2!sd8xQV0X$rS=o=b{bzTrg7jdaSV(&+?>^aH&o|Oz=`yRrlhO_F#Ix?La z&nV_|0CO@2%D`pgn3kBc2x5Z@Yt7`1+WjI$ zwKkpd#Qkyrq3H@#0QWvI5wmBgOK+DW&8Vjt4stP5sMg7^qGjR1Ziz{$wdqNcY;YTL zeb`32N0@Ye%;>m6ugSkT##h&2{hT^3>XT_2mNXk;L#{aHp^37TG(`zRG1jXz8hCR? ztXoo?HK`n?Hv?ne@SJV}EuOAxXQ_U+X{ugJS*12KaNy$Iyx+g-EpKbHNHW2FnWvp{ zu-jXNrz%)3Rz*;MrdpGPUS3lc)DSaux`;8C!o;;_#HIDvP$sM>i@a7quw`<_(JqP)|BEUUMbd9NG00_3ZV@^J6(l6bue;#OD=vNGuHSd z5VJJDL(Ih3|L6O+hlePp32GK>n>?IQxFDI93_Y6ud-#H*?m-UYt0{e)ozDMmXs7*< z8|`C4d#Hpae)$wxCr{4>g-y|u|0wYDHX*3|m_&4`vVJ=%Eg2uN|EO*7hop+7yEmpn zFNQs)2^9ONB+nRAYlghzDUaU%B$_lT^Sa7_HG85WrS6m`Js8ijL!%^rGcBG=d|vE> zqKTF(IX1)PBZxF9<>z#vrRQtS@t@d$# z{9VaECIssqrl|4iz0eNBE|i9K>=B9+(+~0894ZIT&8C#DE%&A0NuJsb+`p&4&%1p7 z551T=_;3kKzMDW|bzZ-YtAa#PT-9B3Yx_s6JEzYAMQ=<0;-W>How=5FbI#v+pVkCu z^EMBqDLhQE%2U!(|96y+1s^4kI#_Rb++-9Hi!-^c(8Ta+)QU>wth|GR;GSY5TOl*^uaHpaDf zX{*5lp3C3Jq40_m3GY;^d$5s;cuNdTR6!)mic`n_s1P<|0MP5a>Q66Tqu6fK z^RK$rx2J*o$=>#x8(CKC%UU^1BG&jD`HGNHgZ#MX#=OK1u=|vTLe%nNZ9+VXwQO0Z z#Eg$=RwCG#oT$J3Y+EbTy9#sYiDgF%b-ophc9h%b3uRKx{}2~Nit6LXnbOBA72d`v zA7Joq&n95(g?vQ&FKgalx?)`C;41q>6E~b{Y0=xi(w^e4dG+orgsvD|+aHD* zStv!dhW@bt_y zNM3a*wfH~@Bj?x=A|wHK=63LBTM=rXAfv)VrxgF7K$j;!ipPLB?T-8Q@r>747Y9n%MkN?dH|-BVs`riK zm0M-=!Jer6^|d6DaGfnNqVJr)Y3&=()vrs?2Bw4`P`SOqMV6~VI3VKQ0k^WjS+8#r z(|3O09~Te+(a&W@(VxCI@@~E|0!B^tFEVfMNKK8Om8kK$1C)Fa6p}OS>wM9Fl?GZb zc9J7fMt+9c4~7Fymc(w(r$0J0%D5jN)nd3qUvUPVh4?pv8E&N1KsEG8i5vW2+~Gjn z-oi%>ph_(I?R9U;rHvgJ;Ku#$2Jzu>k|5FZG8`tIV2mF-aHeUN|1yT}`!zgM-ZV#2 zj&$cme8fu`Dv4J+vRmblC1BYKb64-+v-7>{zbuk=m~bc@E2tIfXwhf%sm!XIE@d{u zPwI8Cp`(6bZo!?dtjsQzKHsW{LN;Pq!Mb?=_qEbP8g|APr*zMi$?-=nY~L2PR6!jj z2C{=jQA?Eh6R{;DX_i(XYH`)ck(jvcE?-|CMf!w7<=>L_ zKRlC9Al#8=#1WUuclE>W@h`oK-0&0*Cm5}tV(ox)stu=&@;b41bkm(ULL!_0 zoK<~}9x^FZobZfag?9hE?aeSEuqu8(k=upo+a0nGo#GD^%%lAN^ss9PL&uFTeY(YF zrK}7!rtI~aF8|OK`MOksQ!2IG#T7zo)ISt!Gi;%HI~2fg!4;RMLoL3(pNSoA%*8FZ zo#gGoO+C)TzxL;hzK*3|ex$cabiSIXPt_UcM=vTR6>DQEw+sqsXF>5rlztvlPtA5) zD$jc;q?`^ZA8O}2v)8mT{M`H~hvicRYMt)M z;7H9rf^=+1c(jwv@(3jCPD_-;^kz$2{1*2wgAWhA9{wLiXC2n$`?hfl6+!7PC8fKO zeGRw4aqN)H%Jxb`^Un|FV=?H`W-^54@JCcuQ?OP5l%Sja~{ zS}Y0*9G3YD0`jaY<>#f>xxkbQx+5CFM4DZ;V#pghA-A5YeCU2<*p54gSL>Zajw+Xl z0(Il~5T)K+q_Zl|Y-Cu7SZ`0&yvsaaXWVKiASH_v=>pWGHVEa0i!rf$pS=5@xM?w7 zm*zS#mN+=mj;~36GPV4eE5aNFisFhvvJ!PL4-K$|p+Pm_?p{#mM)YV0t|E+kPBf4D z+wTKT6i?>lXGZ47xQUCB_p+O}ss;^i5zT;aw36G_kWD+BdKQ+83;Gy|^KQ9Zj&6ka zwy>s0x78fUvR&ZsCCjYd?M_qnI0B*a%}Rs80EQ2p?C>rROh{9X+FnyFBbIFy_gFwcF4-3JeWnj2u9igqTFX7aGKQch=wG~COr41)zN`nD3(eyj zRP?H3({hA1EZu`5q+1L0yIH48`C==W(w$HDIz!)gg^_#lbdf&6oVd^hn7pGW_Y#3c z7c3FU02RK{aLeoFh_Rz3BwaGh#Qnne^`brVE)ntV9IE@49|?IVuxEE{F2W(=;v%T| z+22$~c%@cY;I5-t@Q1k~H>~hB&LrE8n+|@subyStixKh**nj$aS0Aj6uFMZ2!o5E&UqclR2 zb%KgU<>mzB^@j*Ht#Z;T7yb7avm&6@*dBTl5x6TM9Rnsgu}O(!h}1HdORNP)rhX=U z-XsK;iPYEMrVftW>2=r6p$z@}?>}$pu13_@>V@kNjKF{1cO^|)QB}o{lsI44;p#^1 z@0RG|T$A&q{)9K8M*7)%N(L`~ZaZ2L;`N%I`%~P}F`x#!`5Z>AJ+B9&gUNusO1#g# zPb!j({vT>Hav${k^kaw&eqa6i7t2R(|Jl9mU=^oRjvrOYsE2b*5!cqlQ zv-I6<5(OKUi=N;?V#(5;gBosAJt73#Et9y%fO|VRB`xs#xj1w-yvupV4X)3 ze$L5k(f}WH7gXaOi9T7g>r094YyhM(%P`NNA2OVsRqx^PX=%M8MrQ~1@NdI|nIU8= zG^nP0^xfrhQe(vjq?^0EJL zXTNpm@}AZ_HBZ?yxomilQ6(sNReKr~`^DPF|4@NTboA{8CvJm{As5?Z@y}?Q!#%KO zX%H*8P-V_!7gP6KK}(TOe`68kpNqB_ULcx!T!}?2+217UeExkAA+ylW1!Y;1O@0U( zRTWrGiJr- zyH?AeOU(P`JQ0Qa=F8f-dRSz;BES~~BOknF=^*koMc%45)hiZSSXqn=GPxf+5#8f- zSER1>-cUd1Z`QPC(T-0J4x&fDjz4=I9??Fn?CR;w+>!M0pnNc}lQT3~-ApI=>BUIB zKGmO5W}MIMiBx|(g-O53R;t3E=`^u}u8?k%{a%FlK((pQ!=sbuGf6Ud@E}m!1OFX_J_cAPD zNnvXtMV^x8XwlZb7uR`MgXbAO4?>S*d_L%0>KtEgvgybI>R9G9gVbAf0w3&4s|fKu zq)-4yx7s9RXIzF~J%$aaZp}_dVrLRAoeqkh^~vG)IH|rCXwQ0!CGk}-F;?hs)?jZx zX7h^793R(>)oOH-2NtzzoHW;|BzB@Gj$tOfUpfRGyOCGbc7o|)Tk2?S56LlF)$vH6 z^s{sKTaz){<7l#YJ0_`m4{w;P%+pQ z{LKIQ9aS4BWCWB)(kSu?)N^lrDY;}qk!}Jwho4{UnQH!}}ZImgCwun7-z3rbqDEdQiJB zZ?NEE7xMBVSaEHPW0k9F;pe&08rF!TCms9N&#c@^H$D#swz%c}^*PTVEIQ**x?Nqk zrF2)P21wL-m=7f+RB+NNFoqG|aE7v#Ny`gvS{V?uPEmqSt$nv1cQW}f{Ew;;`ht*N z3rV{eYJpS@b)dWV-+e^Lq`F_|Fd`UM*EOySJ^Kf9yP;~_zCK`Hvr{b(veDeQ>D%`X zU}`5cqzrq_UKisL1;Se!;jb)=PUP6S@1=GY8&8KZZb|_-nYDdcgWE6sQ}9wLj&Oxq z-z+E*sfBgD57EIyJWrmGD(vAfPLw|E)43fv>HBUN#b1?BBsjxl`8}5JLBorHJvEcs z0)4Mj%Za9i{@X-r+*!TSQUfjwD-hq7{P4l{PWHb#XJu;iuuf1M_fvw}=}c_kkL*#J zjC0s1N`rH7;P#;@U%nDx(1BFuSRwc~pZ_}VyN!*G)aMLCG&6kE4I}k!astW4?QtoE+V&w^Av`HYjchzw%G|Zd9I=kR ziBrv?W{s<=vyd_Rnz3g4vJ#E9i)7EsqY6s1bj+^WV>(1(l#$d>*I6+UlAgfVckZkk z4XTzY7xM#R1x|oF-O)OdZ>E4>1t}`}^Oe`Q9q3=%r58>N6w{wY1m`*ZIeZkJIPG6s z_)_R2>wJUCT{h`@yom(l$JlcW9^$DS-&W3YI`}}!=$HHEk3!{9MHjEFyT(HnHe$k0 zQHERHD*+N8FKNp8ti=Xk&O!_HHs$6N>7y@xSS1RYctgLNEuT>hv+kq=Der?~0X!K| z$u1T%#b&rH+h??|mbR%k*H)nDb8^xM4>C7UH?M1+Tz>+_Sit1|*Xwb`|84;88@C##>yqBv@R7-ji}Dei zEfwn;di5(prsOS7wi4-waQ*PVcc=@X3g327Mb z6A2Y>B>X?|JuiWR$cA~Qoi|w z-wpbA_S7%mD?}&wv5T^+I~DsY$#BHbZ`imhE#--@zbWcD ze{Gno2v@>}Y|COGGKnM@Z`HD3KLB{G0%oE}oJ&XEyq!As?CzJ0HQ1Ac{GEpTMUAjF zhXpa&FyXq2;2g%|y&qaGkDp`den)V1;+G>Mg!l81tHm_YgCu%jo$q==@$wyCce{Bp z>7mZZVCVgUK(Q+T*88)nh1}Z_& zdNw?kZ15c_+%VzKG2dgry<&@u5h=B-flv5)+|ovHp)I{KrG48$J$?~)L-@_( z8X|{AER?>Zw&>v6)YVP2KOmXq;@=yz%P5Wzg_#XjNWa`qYNjnI>IKlquHSX z;z*GkR(5&EEVyHSpHn%<(Ozji1JRi4~&t;Q-N=nuVLi~Vo#w}& z{es8-yliJ%SsY&Q*#BEFw`aLj4**%nA*hnYoe$@WSmD$PY z<#l5oW|M{u#GuD3>QMpC&5x`4ta5%nGEVw+bi$X3-C2jzAb$0%i&b6eN6cQ#JozI= z;vsysPKjdqh2N=mRCnEve8MFx@gl)ItId25d3aT+8@RbLKJYeu#-0gc7;O9W%H+?? z7L0Bz=qJ1KaVB`jMP%p2v}N3>{U5rQO`lX%BW7vFXumDNXnJ4dN!8tQvVdA*!F+E& zw0t&~`}L|I;gQoD=64ZUD1++RZOR>mQ2Hi(Rkj0%fooYcJZ%zT=4}*QBdf16@1=HH zk(s0g1q^2vx}FgK=xP8TGaTl5z#tT{oNEk!`fDZ3qz2C5rh(Q|m+SWP`lEgHhs4;F zwte38U3Hlc-ZUq3ug4Y0j#?fO1tECdTAPzhrY@cAymuKY@IuUo-l1IxH2k&(HA(4C{PstmgWq67;@StUUIZ3$xi;EH*9Vjt^5+6GnMfCk;^^kT+k9q&K=JBHf_smVyK;|WChRN_*F`Pa35I+U5Lp1){ zA6{WVtK}mlEV7#`NX)&%J=_Ga^{fK`8~@>{651PRmo4*95s%us|3j|y%PbtX8{8xq z>wR2b?{PQluJ3lAs8b7ZOAiV62=SsaVDVM87u;zX|HIx`$s>ju-gZhEotpqke~gEo zPWS2Bi5d?KMmLxx6~awr`IxJxjZ&OZ12&4rF;20g_z}zeUzYsxGQ-<`haxxaA+(i%4S85x?_e zjQ0WFYIA=>kWk9;N!k86v@P&jIs&zc(-;47K_b7xxb-SuDMKaa|DMnpytxccAc+u~ zhOy}>c2aR#W+B*Rq7Te1KMFi=12it-(%gK1_tUq3F%(UUbo{1aBFC2($9Ohl|5dE(a zf$R6qW3KyDSV?yXYNhVoT*;)Hq!FvW9u5A~MzHUyt=lF|zuXG^Cs4NjE7!Lia@)-E zNT%Rdp3zdkfigT@*I*+yjyjq3^Mj;Yu{Y_-*q{ES?)o;E_TS?a)}3}3gPST_N7RAM zqG!NI{;s5Havw3rPRmBu4{8s4BRmjAzS0t}k|ZXF-hckf!O%7#sD7uVe-6=>5+~%J zw)t2=<mLMkb*ojl3I3FdWaWqgaN2cygbK#)4P-E1tZ>sd8_D@aX zkcm-^6X3xTv4=od^tmAj3hc-V^)>N5@QXWX47zm zt(#eg*40pU2s)-yc*j6U;3tU4o4F6%v4@j0I19q7_d@OCNgNO#gN5=hUW)vYqE(CD zVtQrzW~&AzFBeX{lZ9D&mtvme29BpXtGog#j|*BT(Hp$G>J;l;wj z3!T%5Z4W{KUw{86#^WVhZOBw6O0;(+do84fdZKE;j_$j_f{H1=jAU!tHYIF9sKeUw z80Fug+3#*acQgn3d4B3CT3M@~acR?ug-oFlAT@Dk&t zYg%uZv$U=3!g$NZzAF27M2ZWbi&JlwhbO=8?F{RaM&*Z9eoR*uotm1yj~A_tSm(E)0?JL6FvFAg0|NVlK z->=K9;Mxy_3WYES>P#M1?d9}vdA6`=Awx4Qb*fzD4ST^MhUS%s+Z2U5XeZ$}{+`_( zauQarCz@LPbGaV0yVDI$^$|-@Xj8J4#}}@#U`{0lo^YMkP_gYxTnb1aJ-Eq5g?ONBDW8)xgF>s$Z3!Avm5n#@9$2kaEu2~K$JQw;;! z->ii}muXpz$QA8Zf7~u3JKGnN^k3}d_f>Q%)f)oK>E`?$;JYLoWUNX{xQAgwBy=uy zR}FD-t*>iTu0cwSqbCw(Ua`G63ywy;pLK-lJ;B=YdQRLS;6*h-q@z;Uvj! zNfvGd*BoKCP#b|BYyIyA1H!So@^4|tYH9<62O>;(YF8yAT)XlvvkE^~abvL3cmq>h zQaW#c4SBsu^R#$wBWpdF&rIt2XP!{rGhYlMv4r7Co-w|o5;#j$X@@Fzup>J=Pl@(* zdlf^hdg>vsB!72gmJ0uJzq`adlvpHe{+|Fs4OdiI;#``_bRL3Z7q9F?{aAylFFAJ2 z6UF`T6ooTk2%G=VfD6gR%+jzyMuD%T(}jYvs1YlvqDfhgjU6X zd@4#ywGdYTQWJdSy3?N%^4VQtAh713qo&!;D|GQq(b_+`i)MIZmH3{)SDzm!pewBI zgfxXK8E9ICDz$f(7y$K!DPHOE5v*?N>qUIl;hN#K+vYvZoywpVsAT1SCu7~0V{BU@ zU$^}vVP>c|FBa?w-o`_8$y6x6c$kb#VI%@-g~eTJre6a^rhOq|TUC4v`V4gD*UHf< zl5wEhI?2+#!wyo1&U{9>s_;>!h$rQw2`;9+O`bHyPF+SQ=A#)L}7xh^Lctyw?T3-R???z zjV}rkuZbu7-3J!68dm_WLP!2IX$OPF>^;zz7Xq;`Cj$adK}bJ`((fW{&0N>}MP|MF< zgb}TuZAeu@AQK^1g?> zfzy*1UZxFhe1<(Up@V|0Inh;B2>-tu?+*u$3|d!j+#-E}vHy6{X#&#@39)NY6G}0$pr!+pbixdY`Ff9hlskhZ*zK} zBiPrO6t32bM536=Gn|n9!{7bPxT0QaD}oNnj*0Vb)2z%=5?==}E4%8>9v#U9YArs= z9~o5k$@!ex`)xyrs2<)5m{v#QGL1;FC%b9G}_|4Ys&Lf$+#Rw=szQ*OJ+P@7b3FN!8r&+_24JZk;e+Dn)CB`w%S5!&8YTGO}GX2g|BWH$}bXRH- z8%jRWKF1_3=+h2+YQmsE@$`jdTZ_^pYxr7(_PRBg)zjJ99ND^Y1Pk|-Q=??&x-bGU1Ko9YKnVTal`#Cy2CUm+q@XQ7J(Xf^>iyrvylNg=TyL8@ zlRd?~yjk8p?%n70h`-S@*38xP|Fk%Sg-X%91%~AhOWm=bJtp&sw5f9Uw%!_IDmfU6yaL)MoLq**oJ(nk0>hSI9 zAqSulRhK7E)_&1b6SE4isZzXZGRn!?$E0lk9vD_Uw;Y7BVJWbjPbNL)2Qd=Ts9jvK zJdL2bN_LeP*VkF|JZZn|Z9O&HaWrBD5!(;K3#7>w`JKF$V+`fYbEb3|q400_IsUXc z75>8UPQPuLN^6YC13t3ywOuY+(mb;B)zU*4#y-xx!K+eD{u~%z<>;*YJF)AglZG5T zgNZytxl4~;WpHR&82GYI`Fnac@GxZ(?p9r?dE^@mcx*n}W9n%KFd#*%>zir;qp!aM z(EzK;JhE~fj$T?T_XwdLri_Zw;H*m7#Z?uxa<~8801>I@h_CR^fYVK73>2rL;?pa; zrK4l5s1|!PDKX)SEn%`Ag6w|KNr^(*)bHL%dQ}7Hm11o~?%V0*_@?8SgV6XEw zS3*bx)s^xS1Z7Di!M)Y6yvTLduv|URK~T}r5#QXPtf&3MMofTl+fYO$-CEM_fXVC< zU~Oi&E<4BvGv=G{TmEfe-N6cCzj#>M31k^9Ij2c1vrc^vp&U`~kozE2@j>U-hL<{cB;cqGLCEHM)Z?%QZgss~iwRTH(8Dz(TDalneC!6mu;=h{a zo1UKDNq>@(M`3kOU-gx{vnBg~Y0=Ybsa|YN5^eQ%!TGP9w0QpO_g;GbE9cSXSq8>6 zhMi(-m%^F&ZGedu(F~B|K$rT>F#B$k&_arQE+9 zQn4{zMysO4Dq0PpX z6|QPd!s@KXFVXvGo_|h>(Ekt#+5hlTsq-y6Eqz(-*?DE=D_%9HuER4)obrU%W4`4P z(=fUSF#`1Yon`bg>d0e|DcEe@AVWn9qq91Mw_Q6=_Ii?e$-y7+BqIjSXa-V(fJhHC zu0S3mYIyPZ2yrOL4FLx@2*88$cY|;CZ$W~yht3c2K&~6^s=__@@< zV3`hnwpeI>5?F16b78;}V4GVWN=I$QEQ2Xu=vs_Y*9FHk^xeMvvD^^5qNdimdhUV!GfNVI`_oy;`Wtg4ElFTIa(TWn;@j)?2pR&{fR#XE z1mgkceSo{Yzro*%J3G&C-TovKkL%A7Ew@D`sMuCKuh>@=ocGju?&JDktTd6gw}*CJ z>((nHJy;}HyFIET^`7x;Am4lh7i3kV!%{4O!(iCz87Zd`EH&BDfv$?|)d;zcf7I0w z{BXj?EfsEgaA^~vH#Jh|CGK@b4&#rIwuPF^L&NK!QiPJLS44$bq6h9|lr~F^JbA^!Zm=sRiFd3nZbv#88u+8cW`lxz1dw?f`bR57+Tf zc&Hh$jsO|vHhX%={*_h}o-sBUgJ4#xvKe;r^+%{8a6MR;_;9|4Atl+L6aF%}vwIiv zMq{@P!lc18i*E6bJYe{%8r-{Mlb{m1*nsswI_8N2IFAreaDO zacP06(>R8`?;~4XWq{8|_Z{KO3lkpun;L9MmA@5a7XAt9eG&8zfGq~*#dBf=a-a78 zhD(!m{pamKD;fPZ(VzTuiJF5ZO8cm{=DpXy3Fp}qg%s{LBfrbX-4-TJZ}PHLn7X_h z=efNTvhg3?ooM2)E%85mRiyY3>|s9-!~k{SM<`cc5(Rw6tAjw_`F6U7rOZFE#&!f9 zloH=}ocOR*{v2h9n1X@ZPn@io9U=N{u4cz;7-A#*+ zL&UE|kSR@sLT45;)Rj;>p8*w%P*e8j1BKtEs@iFfpv?s-Z;Ns-xu$xMG?5gvbDL7yF7=GC@Tr~c2YtfOt_ zr76?uNBicnUe!@%>$w>}{I>s4fun|vy{-uE%`L$``9*E>b<2M`>W?uIe5R19c!!w? z=!r;d7IHYbbUe?NZR1EZPY0$7Fz{69@IJ%#WGXaaTc9Y=gI)v7x`cu~vj>Qh#9>3o zC#^nTK0Z48h>%?mvrRWyI(F_|@`5V;|MqIsx853cHx{gt2@d+sQGnzkn$AIufKn|n z)q7ATPH|icVCU|^nU);x;+E}tn~OI!zO*gW>$S(mwKMG0fnCFE_Qz^j#C|pBE1b|` zig}a*OURz|&y%Q#qH(Yo`}?xOqA#utO!1B7Wd#2J-56fZSKCdORqi?y_45Kk`;jvF z@0Z(Fpkm$pRpsE^i(=NUL~&=$Gd4lzx%u93tT+L@Nhu1<^{{(xB>q-B$ATn;2~#x0 zd9QuZbMN=}hl#*5q6F_7KJ?qOiu>}cy|JO%(q>~K%tIpE-OqZTizUAF-dT6x zI|Ze--*ZDI6{}GVN^Lo^WY+nuNZH*fzWaW^4-vtn=I<%L^s~2(-UTXh|Gn@MRvvE1 zpS9BKlUaUw=tJO*`{X76l`El1Sf+WE=#YbzqT!L6!Hr_t2CQ6Bd7sJ^pIG!bMAFK0 z)zT0GQ4*S3lx*aW0lj3rQncQXz3%R*p*dMhYzQycR62pjE2XpKcE4cGWQH1EL*wJE zD49Rj7+BQGML#}af!q777)wwl)s2X;;m?yP5KM9r$a$%cz z|FtlzOBec%plwpl_sCLTOx`1RF;LI?S3uE4e=cYYsKM(>%Do4K{ZUG@DW&PjnLC>$ zR4+nT>kHfGb1x3UV6p&(*j8?7{=9`?(P}SN;w11jnHeF=;}aNsUEt)8w;r0c-IrQf zk(zqfVKx}{Nz|(#0RQ#7#*R#s^q<`*=tJDZYu0gh`wp>BKw!7M`uB+vQG)PAm{9V( z_z8IqJiG}tj^uBwf3{F+X{oZr=0rI57VqX4tU>7W|}2~uyZ-C$wLk~?u)L_XZIc1|2gaL zjRbg9RMD4vo1lFHU4Q~O=alk9+-gjn*|0gBbw$@GRYb*CKB>-dA0CfzIkRQRsXv?v z$G^uRhQ9^;gN9sr5|BfGAfeX*UP7DLCTR57n2>oN!S+gN{9cTj@UNVO9#yif6Kl5JG7}RTOSC(O0IxxGE~)?U z&SRdVAF+4^t>7wa8kY(F=_ z=t`p#Z<@~CUX9_-#;7vPKOA90Sq@3WDdiCbvorFH*s>4wja|QOhwlW2 zjTn2XdKI6~zeA(kjrQ*62XxzJcQOSvzjUSP3s<#Ji_U;KiTH3FHJNwj9vsEvzTc^1 zd^6iyT^cRJ7KKAf-Fb8Cb3!1PB_q4hq^dwWmDQxyU%g&%K2>vUHRtrXOqPyo;A(i= zGkvLFiH7`v5uvXoVI1C`D)LuWL=E}5F&A-|3)M=2dYg5CPOHSi|895|uoZk{RW!^g%LVjJ z%QB&=aXK=^n;!VAt(o{U7!71sz2kfNT;s8fFo*R>eriXPr+V%N7cRG`nhIy3X9Y6_=HI%E?n1KH;H=xMXu@$`M5apFK^vDtO|UWWfkwld|ekf z&z1K;efLe#V?Wabx0V~; z7h()@C8M&dWXc)%v3Z>U)ysJ|uAdI7hx0DSb8XEe@8a!I;_L@zK{{K}Kx*{&I|AU7 z)9C5KX~aXFF%zjCs0fbbHig5DbMu}>?*W$`Ft9@^ke$ve85MmApjC zt%!R>g**{MBWF(L`ERc+xgv-o`g3=p-`~B-6$8U{s5oKmW4LHl>DE^FXdpVe1o65b zYgQ0{)Fo$nuf~DI{$UktW>s0r|EbdI6>>K3 z(6tmqlwvv@6`OyYw*?x+(T`}RR^TdgSIpT=wJHDpJCE8=O_Lv^$Fcm}H`NxV%Uycc zRytwyqwv}81Z%*e+%bZ&Vp%9pr7_~!-+ru;hY%(-TiE1vd5Q(h*-Z9{ib|2lt6lX! zg%wz!?OIGtcr|x?RO>pjU+WG`s`KNwISJiCHU~}AAi2vMGl{}DsiU=HGTZsKhl=oG zJ)a>~uGqg})?n|G-j~?a7aUYC=IXbS1aiIX?fNAx!Ap`ttu`BWQw(KK9UBja4FKXS zcdq*T+VTod6L!_Pe;XE2PXfP&nA}=tc~BAAwVA+0p(2cz9*E$^F{K44d%*_nMCbB! zmfEzOi^bbk$gxF0iB$BeJ7XTT%}cLfpAfQ1CdSrb`sQ&yi^A{-VaYnPST~HjacZ!> zdvf)Biu=<>{V;z!m9@?m@8$4xtS1xo>l(A@k%dgum4(uA4&3<1mzQV-fu|#Ziegy! z(<)&BzB(8;7${B)#{)%gY5j7<$4e3SATPIIsB}6=)mJ+{eDRm<6AGdg;h^roj&tEK zK!KkCzLIgXT8a*&p|Y3h}<77)13d^kc;4fAgsEmRGaJ8 zEeHrbrQNs_rfqJBD^`BQp}Ia&U?~7_%NMABCvgzzn|q=?8RbeIK{>#U!@N4|`R$A2 zZ5^9tkX;fv#a39sL6JGIzZ;(6gi3Ttp!ae=crcn3OQel237Ubu4%;U@5R{O?@%4O# zHBHi!UMZo+xmpVvokK)G{J(<&D*c##xdVrFFba`Ovr=ZevA4|Hnb=E)edc$(@(JG3 z)z$k2+1v-DEs6#64~ETxDJWOHPP}Y1q#_v7FpYeZk{`#3hM%0IMMQS_Vg@h_N)VA} z{COgFoUt0l3^E(72ntKyn&I**@%O!MxQQ64dR4YqDOL8tT`hHslndF?Bt-FI^)}b~ z+>q0{?p>R{ijacA@q(VtHp3Q}00GchD|^|DzJvq{$_#b3F9dpNlQ@iR7QEYj`2lUQ z=UlWX_;c1V;g5fRl%+b}Q3->#rQQ2YlE@58mD{#ihHBs}!It z+${82UV5)@&8Gd!S_7#MP3Y(jb!TBp$Nxx(D;)yDdRB$wI5O8$_GRYePW2jgNY+5)(0<3kz8b@byD-xlJ)e)AF0*QtT{ zmau%K4WV5WX}1;E#UVy?L_dqGww@qwuVHs1qvU~PNd8|l?n`JP}{K~-1KVq7TK7t=|52GHv zHAR67K`5JYZE%})I2o2 zWk7eERRsE`8He}9Ja4XF9hQ6PKhnHDT(*BB0;k0@CL#qk(qhx-2_?G`JNo#&KxdDj zFq@@w4%3urh-mJ{>n__Q9*-J&DshKfio7YE!>`Xt-r*YF7mnKel0DCljL0JV^p};ru%b$dMz~0DG z^9Tik;gvdp$(o>erA076aq{9yQrilqC@gKmG}{+@1?#N#<>t_ufqLSGX%LyI7a&!g z6crr&ea(7xKL}mj8uy!24K98x z$-gQ0bgifX`M8Bl&5UyBnCv{E&>=MI8zt!%z%Njh!?{trS^XVz>ba-gXNsI>xh;n0 z=*4GH<;#`IWeyY99)0m@@#JDrpN2i_E7V2d6J|JnLBV*T&3~r9b$-6n` z9xyH-oa??xc*-<5lb9c$g4}9E;&iD}Hff0h7V8RkZxOpV`0o zes+In(Dpv>f+zHcjY5uGZ>Miuc3U!=Dt#WBiR?MBc1bE}?j+IzJJGMX#|CKWb6J8g z46)yX{xkBOa9iuUioF2(PMO{&4e=&ZED=hcZ^W1>m4p(U09Gu$41AuYR}Wbo$d!XJKslVe=v3%z_gQBm-{Sdp(mlVf=^=+Y@*mst zS*+Iin2|n`L}3FJpeFg0Mi@roy0Bl8=yzQ#YdsWhFnCl-SQ^Dr#nx|5Nug(|tRRDn zP_WP|#DjksL@h1)?npT-pU>?j*j5S>XM3{3SJi!;iQFo;W4G zP(fHLHkY%-*CY4c(DOlwU|?5yFtX^VRG8yb%vTp1BD;^-tVX zL34l&IBbTEaJ6mzm4nB0-uVlj?C(P-7`8^07b^aRP!4wsj@F+)rnR<)Q4=^R7KW$c zZ!;&C>4@pB_)QYI2EJi;jwp)X-ZnUl#~##d@Z(@dPqqXjgrO=?m*5xSahoHY_ZD36 z`Z+#ytuF!%7(HgM^KS}|d9Z2Y*_{lcr9*AHCiO%(m5d8ajfx+Y`E|DLSX9@`ROAxd zYp3=6M)cqUe?zzu*qu-h8o6Y)?07?7`O4xACtEb4w{^Q|hRq;J->WnpH(0Bd#+6z% zSQrJKdWtGp0Ir8r0f@%GBH$=>!W~%UDm+498XSN8lkbpUYFU+O_NF`!t<0%@;dN5) zEf?wQRBbim8p!EXOzz~>{+ASg_3}528mf2?wV7f@UhnqDrm4eAeb1re`^VM$UX8s} zSo`Mn1J0YhNv3+;>Se{exI38PC`$lFbfsH&6^y?}B0t&|Pvm6#f~R^PU?0cT!G-F| zn}{FbYSl=QnMvky)M5%Q^2fM|1t1fPxfZPCLU!A5>&0D51kGZwtrl!_Gs(W0=ZBrU zA%V)UcdorpN$YOS78lEKpi?c_C`!l5Ms~d+x3f%-+&NMdYFKXN?Z;|s_*?uh8s@)*C#72|cz=JC0{%(IA()$lMK)zg_ZB(3R@S`gZEj z&rjD1_7uaGOfn4K)=!P6TP{^_HTwE3C<9_w=m z5NwbPmTTZhZ^va4mxnoxyN4?sdHzFt1IE)S?6U_3;^MAYQ6{Sv&F#~6QN7X-zO3Jx zKrW}Wl{!=I#1okdiS~WwlxDzC)^+H_(6M``nNjPt2*Jr)})#4S+Pwf zrg<9x;meeE6u?%UGq;H{_xvzk@)XK<-2p)N%3rtOK%+%GhPd#dbXstCJKCTIB5aaE z_B^c0-g?6C5~|BfCf-)pr=c79qG1q~m)bv%=ZwS|Z*P3M?h7fm7BwFFHk>NsLtKTFqRD|`Px;lZ%{m6eq8Z?6rFcG zmH+?7o61Udc4TB{%Q}^^P8@rWkUfs=$ib)VU4$}|dCaVHjDt8FMaW(m=bR|}92p14 z`Tp+T{~nLS?LP1Ex~}Va5k9Pk{+&VS7*l0%D%aKI-|k^w`+R5t^vX`%3}r( zQnwj_$Yn#eXy%`-x7HUI#6MJez#_{8e@Gln-0?aWgkK`xz(+=DEocdPp52I}&eiBP z(#p6Mm=ec|aOzN6!y2;DQ%}=HC$_Cu)H3?d3tKJ8cqDpSORAfEFZf(@1(s<0W@8mA za8*m#YjbTsIgEqDc(Z9U_tiwU;S}5uVS~tByrvH=(47sH77aa@;%;2RBU?LBaiipI zLbu9bOp6M(_M0Nlc9N`yCPEZ}>$Zel!PLXTE}qR6C@uHiwzu2j4oUT?wV{EzcG!(@ zK;>!Nh@|n}n4*t6JgEjt8dLYnAfN2FW-LPKEThLg>Y0E-CAd(!xnkZt1xuZ-b9rF;68 zSlpJCwHjICouS%R)u9-^mn`8yVdufVwQs9Rts-vy`em;#tR{fTjPDUx_K1Ey&RJ6P zH~dxY^-CI_Cw9gN_xJ41&^0Fxpf0CmsS!)%F6i&Q6MEXls0${!rxHryK+Lje^)k<5 zNpc_w+F!m(_OK`BrBVf~z21(^6+5iFuJ*Lut*4eCHqXY&v2(j#p6>W)T1o`53hTu5 zxW;xIfXsdpL83m79Vjm9eEKexuq+bv#>cKdYqWfsrE-fsms7yE6`cXnC9RKrID4ul zjJUq!4PeZUBOG3O*84&h%hBl~EQ-PP-z=VajlegCjWh6Iv1HOQUc#rOLEef$_a_HKE#|Fzfgy z7Rx_t90+gY1c}(1=7=Mn7=j?={c~NI0+mksTmmM5uSyOPAxE71!zEj%&~C&j;IRH0 zSUZ{<+g4e~KBmb3*CaBk%9j?mJ4JRDkBh3ed$^IEon8M=Z(-H%B(9WJEII--^1oBK z%$;DO5A~K1u<^sGV*<$f#?&Lo!XGM~0+E0Tf(bzvp}05SOUY%1fiUi^~8XQ&hw5QERLEqpQe9pZnNcw<`9JoKiuWMCr6S+Wdp zaJKc-ySyu_dH~E{tqoAQUJlU}L?-7dG;2=j5hB%|8Q5O`i!a@n~DMg0O;TigVa zIePek2iH#FCdCXmu!!#}$}&=a0s5>fcTW6n5gIj%_MqP89%( zev|TOh9%-i`Uw;BC|8ZZs8XwN%7>ZpdQ6y zO}$w|`?I5>D?{$_KU%^M!t<2DoPrA}57JyLa8cJaBL|;9g5ATEuxPO3C26LVwn5CE zYVO@--npDNe~xDb?C7SWiY3nEa;cQ!!`#&7}5$3zd?^hm)Z4PRDx&tdWTiXle?f;(TWM*hQz&@Lj zRy3rCymqZf91G46C=BR8-m)%KXmxffIYHP;9Fm-_`%_2Q$}ETFEKD{0Z;ip!Q;Gk6 zP#)l=WbAAeLIcq%rfEGDI^`S7kOtz;OHzbcaI2&GU4)%@gG{kNbPXF~Eprqh$}Kwb;a*1@gbsGReJ=5Ph^ttDmb`VuE5%`| z7&CTpXvHy?7nWzD4-NDQRO%jJDb4V7f1{IO?WS{ig7D6uQ}tI`IrBTGN$4&V5FGm; zAQ#RFU@HVzv9;=ak(kb^BrSfj$8lCulO59)*w`QJJ6)ymgf<8tOzBAW>XvfnD6$}; z-VPRQI1Oiw(l~}zFMB<(_d*R&6@gm{K%n)Ky|($P7b~0M$ka4Bl%k|dvaIze-%_(I z3-)uvW0X-)yxy)NPwK@3nERI3#vAo|kZ~9I##6g#WP*=Z6;ZXaK|sACzA*A4T zQV(I5t(i^5yx=V}qvzGhisKU>>sEv3NNCSLk>9Xv0uES;avG9_B>8c%cQ4y-$&Nnw zm|+%MTKpm~qzMg{0L+e4!)2UcRyEkX^TCcA%q3vn_j%w^ZPnwBfBc-pY`jhx5rb8W zNs{JU?E4M&^B%Pj=Ir!Qm9N&E+SZuRw(Q?OhSziMC5okO5X*xW?6IGhmmuBwi{rbui<*p(dd-p&S3qoEAb0*y zsJt<@7tR-Pej+5Nov!mxGL4SqKgx9+l-ujn>|VuwJX4bFCC59BAEn#g(3l+TJPLaw zDMLRnTc4h5Bd$MD``=g*V`#jM8|>r3P@}Z|MCCdkYv5e)BB_xnu?)i%9c-FITUV71 z2Mt+S5NIDylwoa@XwAI?v;LIovfK2Bp?NlJvC3ytYfjjxNE}U#FmbtmsKQaYIIos$ z6+BeFwHR8L;)g39TekK?Ax#+DW$K;yUB}@Xm$5|c@cayC0(^&`q@*9y#2qY#A(l zLSNRp_x98poD*`Wg;F&rB$z}hR~RB2@(cYUL>B{1;okv4Cl^$555rX=5KwiS?1yKU ziI&98C5{H6u?6NNi`gsXlE#C$Z4sD@hz|RMBX3NuX}ZU_7uMgYbCswI6|klPEgwV& z=;FU)?UZ9lNNfxWg#k|Gp0cqLZdsaQfP9vYtRT4z&uQzY_WL>$dy}Y2WVqUHWF9dr zhvxXffbOajvIMi8$w-}#xuW>}bBmqkJ)p^tkg^gZz2`R75Y0yZ=B02q%WurDPIea; z$Higg=|LC&rJnLTdJ0Hb7!o6KP85~`DqYT+jm!}fcl6LIhaeeDqMdyq8w%X{$=X=% zU&TDcqu;MTvKr25$l)5f$x!2*kEOW+NwhTUETa2+L-@HJ0x|ozdQR(l^zBlRJe zmk$S2RZ`_zw^YEFQ*&8)p2(#ZdQH|^Ca5#rxnJ96Xn^E18V!Cj_FcKuBn~=xlRJ&P-U?Lu7MFU0s?)f>#vS#XR4kkH3ebZ9&Q6|H=U{(p26mY z046PeKgCv3CYDg;X~GN_$K&oY$8L1}?_b&t z8kSLXik0dUK46c=5JwC%6oWSuz3;LpebGCm#uF7V8S1#uCMObToymDR`AgR;G*z3;nEu1m%esLP*6*hPbvdC^b3ERyt@}-+ zWGW2J_7>tsr|-AExx&q%BUx*cluNtuc1c@ZLVDnKYSF;;^r7w~S_Ebp6h|D% z^)^BEltr1@D$Q+Vj>2z~I4>t-2oKECa4Ex0AAC8q;;j$x587+Y(j?3Zg|pL2B~0VG zH9nrc#-}9gql*n;Ik++_M7(%E2DF}wC4?mF7@4J^i^T$z*BytiT<2y=6 zFlzbX!1oPpn)>SYjU;>m5_XlKY zMk~ns$BsM?a;b9UjEM%~#Ay&*Y4!{Aw9wVW_~9CcJSkcRxqqO+dU?FlBEV}Mqw1wc zGpss$Fle{hR(5|A!Rpg3@d)SSe2ACv>H8sx{ak}n8Z}F5u892KrD+Na_H=z z<7kTyYYHk)EMC@_BC-eo=K27kyZzzgLd9ors7GY2@}id8 z7?`k{1=U8k*r{b)C~q znSutgw`cmyPFU{Z!;-K3bhFF5j1{P*jIzp8E77gTRX@IIY+NW^e4vU_#{t4d4+HSe zjd3Lf4}$1>y_v4TFh(83%Gk&T%?ng={`g=t@0Xu4(jkBglrs!a(f_I?RL}iehUG49 zXwH=UTQ|kmI6_mVDzTBO|Z?3r|8#`K@J)B>i-@j$#9wAG7eT; zH#X0@drs{&+m1SPxV)|@(ANDC@^rJHJOEDfM$vPi+Z3+zAQ-0aGj-dTnDCm&WKE9s z`}C2^YBzWFcB{0cSxd%-YGsz4pRUnNLxr8LMKgDIPYFWLVwbn~7yt|QamxaGSRz$` zj3R#b3yt#Dlomr~JZSpm)2Wd~3k^|^efwg1N5<5>4b`!HY-pffOZyb$(~%2`9}di3 zdwyJ@B0h9?2=Au7s5~Pjs+^zpd1>}Ryk2WzL-(>3aru9jK4?70X-Sbd6ShpNQc5#O z1U|DqE&h(FJtd!!My6-3D#=Q&K7lU4u=?68stNO2ZN%|L+o=BgKIjJ}{md04wXy*FqtHTn#aMd-hdEUZ_YzW`u7j zeU}}CW^;~H&0(-Ww19qL%d-Bs>+jfR*}F36Z%BW!D2XZdh(5}ve-R5zmfibxl{*2v zyyM@+it?<1p9QIYV50-*F2T{fbF^dR8`~Ez7HAnofs{$$OhelNUk`ooAp8Qh)Sw@9-&CCGE3l+$Yth!k-S4Q)AJt zL&R_fXHav;0fV#}$pjHMpi?R8&n9VBk#_dWH-E4a(Hl0Ika!-7;WhiZ;QlOjq{Wd1 zv!Ple$;lhC<#rmTaIWuScPzX8VK`JyRpgG5;ySOQQx_y(qs6ZwoNy3@I?kHT&889t*0&Lj5|{NxjSrq znpb=`VVG7*w7t1q+FkKNOIEPAB^vu(N_m8L!y=;S9%Xzp{y&mW1`&*LVj!r2H6toP zsR|!wbGh?J9!Sy~s9tv*#af>oiHy^E4Ogg{#$GHTVm32B>u_Q+*fN}lez_%;#?|H$ z0zO(X;v6`Wa-?)*lz>_;6HK4-dP2pWC+xPyRpa6g<{{&otjCXfh*6DL#+$JC7ZK^* z>m`YmS&BZ7@yRpM;K&fcrn&*4E<-(y+&O6Q zC3kR1UZk!_`VV=#QQ@Zv`Lp`YboI@>rdpEvcu-mlg9Z<&sjh`4Et{+|5cu_@wd{*- zd+(IqgK%KMrQB`i}yw zF7QcR)=~AZBfNHN?I@fd;?4ek_syjHurPDkz9)JFR|NA-j<1;40+5 zKy2r*m)XI_`!>wOehLnv_p*)tY-QGDqxe?|`@vh^O_;c<|8kcVRQN{mr27WoEJ#;c zij>qPwkjv!kCYh09Ks@bmUzzNI=g?M)I`wXH0p8SfrHX1(`DgE&sn*)^{@*%GAr?( zIq<28ej1W%%lEfVP*UzQZ6Qq=!wY*A>Gxc#SA-sWIlK9$y~Sp!_k1(>Feky?^A2QG zXmsN;LoJ3XQ#H`BtdB7LA(&Wt1V;v<_7PyFC+{WZQq$ZFl?hzJiwmG)-1v=VErze| zcc{vZ+RRT{EhKC#UF~l0YIvRxS3G}7q!hLmdVJd)tJ2te?^pYr917s&=zoEO!(ng> zlKNn)2sx(tq$DNK*R8^vdBQ+4aAD3lb3JQfdI+?-XrsJbYm(qzVWJ{zmA zH$3j;^2rVR>Fs{Q{mbO;RLJ+L`MtZNvL*NQBg5}0qELd?&Dv~Uj+*D{)NuqZ@;6EO z%kkn$XZ7u^5gJ8@TPl}Ep}3|%erThZjc`WP%OPI5C*zFGwdgHs>bYO^OfmgM637jj zCeWIfZaZnHj;o5>+gD_~we{DwH&w%dd2w55wRg7=Eoqd}1jw;jAlg0Ja@7+a6$(z&vkIC7-c{ot~%Y#0f4ru8o6Bq?x*j)S}SPra;#_d%0)BquG?ji zwP);q5<{4hSDB6+K-OJdiAJQN#Q!K@wx0&MbHov!wIbFX+c=YQL)Kr~5$->S#~N8B z?fFuM8QYfCzee-@3}Ip-%VHMI@v{P7`dqK6T)~I2jEXG(o}2S8ei^i-A~mP5yR@F? z`RTu>h-=a6#7sOYu9YcP>-H?%0k6)e_$-_H{W)-zm_Q60p+9jVm6u?E{!e%+p7)@f_T1eJ++)Yw+c@TiEL+Q zpHaq0$+k7X!T!%pVl1K{?2l(LV_p60Wcbr*F*5_hJ_(bMQqED^vI@427ey6aaZ&3B zGr@Ht7!Z zPkkHfU!)qRR~|d@{ZK54>%F}v<-6%l?-{(nxT}iGC7N1VPe|kj;dx+-V{3Ze_Z$8UuJt`XQv~%M_&um2z0v@TXmXEmLCV|EGrR+rKMy@a$6LSDH1)2 ze)!o=O(VZJcJhTiij4a{bR4WCMcZ;gOSK-mRfB_zZNk}uKu)bkFV9Pc=XDCraw;HDI@TJ+oRQJtVUp4ukAu_7ZEmzcf z2uRt^?Tj~)_Xm$VjbcAN!|(HM9z51uDMkkWf@$OYx=&lPX3q!o={RQKfl_aDTZu<4 z_P=u9=-Dcw+KL_20T)&{9IE>E>B5u#AxyE^Fjp`T?M%fd zzewS`MZo*M^#uBTgw1|Aq!!73&A&N~epYjuYdPCg5m$@Pp_<~IIOJFf_9{$7rn9f) zO4zGHaxqVBo_Xm-kx^Nr8v5~@u`eI$nr)1@%@C${b`0%%%*!mx(rqRRZ7wbk7V=;^ zI2qQw0~=)NKjKMB)t3Fl0YLTsxK`6?UVRaM{o{)!>*qRFwrH=ZD%*6YI&5u)0ox{q zb(E8QPP%stzxYJGLXpcHiec$pEA734mR!?wpW9K?bjAINzemy?fO5bxAEyhWfZaG& zahDa7Z@5xg<9%guY(>3|#Gm6_r7L8=-I$PU zC!}y7U}U*H)WbX52Bi5hLyi*UaOX1H%@uw?Y7bTalfQSOJKGl7$hz%#C-X%4U^D-H z{^6Aa5cA_u*)b;~M3yX6k`gUPfuJthdezVnYrtGrpI$ zwaX`I^=UR%i|gmRLlJIORBM*NrSI$)`H-ITArw`XqlU}1|FV3#Os@$C6xKo5hICMjgm$4^x7b;yf7R<0%K_{PcLoG)vZD6h}fl6l@e^Yy5^7!4rEJ8_jVy#CW z?gqKOyje^~YzrnQ~ZLx#IWd02U}7pvk;Bp+YBNg=S6w;Jmz)~`DX z0dr&=Bu>p7ncth_G#IUxyRh%?doTZ?zf9w|c#%ggx$1_J`ZhV}c6T|JheI^V6f(Jr z1Q~20Z*BL181g~va95JbqQ8bKUO{FFdUF$%>>u~bQCEnb$L<+3Hl9QONuBcX?9{JT z6S4O&)LL=QS`57mf)K;$)1ywBOWH`q^zcsYhTZ^FpHPCd`>x}PkDc}8zUlPcmN-a_ z!}1oV|I}me$u_ji!~p2_8mMe8O-nproE4Ux>(&}%bQza+OXUGJP&q33EWv@BD~i*x zvrk;ij3@QI;CFAfn(FBsHLFYw=$Q^{99kL&52qobxC0sWNCIq@7!3jX-((vCIa3Xh zgkWoGZ-0j65@Rw+@lUsRvt=DLN%yriH8Btsf<_TD(on0+N8beF7Wza>oH<5?`aM_f zH~8U+4Xc3FC_qGr^sa{ig-?ry8}sq9U&0emp8=+(Jv%3Hq}9O#b_UVF+aM+JI9gTtwU3>nz(2Esk(;C z4k24Rn{(a62=<{5Ut{D`T<2q2uS~GKK{5p9TlY76FCC7P?}zVX5;Jizn379mR!gEl zEX50e1Hfj0-*}u67H&Kzi}u00k#2UA+Ng=H9>KNVs|%})ZHzXJN*$u@Ko}}DzCbND zkLn6najtWuh|f~=B@C}Et_~RbVDru2JyTgMo!L3mZ|jzqLop!F-c9XEpCpU?;xiS! zhFa9hz4!w12609&fCOT^m=;&g79D`decQ=E9@&EkebV{Qqlehr*L$l-_EEfjtk8og z3fE^c6!U6u@H4g%0d8=N*W1f@p=@cg*=ZHKBO{%r#`q_ZvMYmQQR)H=ily5m?>y7= zc_;bFNimy%jNPzDw}jm@FXo9$!q|X3nt%<%jH2f{3YT+nUW5wE=vgrDx*6X`-9?r2 z;gF^e!yoiiBDLx81#RPb--G_T1O)y;jM(OKGAF;^SYEf1t4hGE-4|Ux&1JgM^iIDL z;kw!82d((5r=%{3=doV)rRXxY9kumI-osQmEi5@zKbd;4B&q(l*?lZV@kS z4C;yt)&y@PP;ZgdElDC1$kqu8qic;f>#|g(;?%O%DwJig={f4ku$`wLPCeg7x!heh z_mUq)gzQld>lrd8VOtw3wpUs2wahr~2};(6g;bU7 zh<)h?SK?1B{-L;8HE}-trdoE6MCt-!w%){~yhe=k{QF40VtHnsERfQXC*wo;Adit< z#FEsIeVHY*iQOH)!}`eQT?q<*dXp&XD(`%vl7m^jm04^?0w095J8QTzt0eZi06oFv zSc_PlpA;uNpMT_h-VO&pKM|6ol zyd4(Qc9JorLzb)aioSADsmQ11br_lcin=k5anvM^rMs~Oi?&p!%bG`iY@oASh_LFh16o4U6iEUTt3D9xtP5QDHPT3~j5Oq3^*VEGypecVg0fqFrqaJrEWTdL zs*xu+dO%nBIN=ypI3zLF0#|mjllblo*}n7R*tnj{Mea13litXpWEwGDG$-=xnfP>O zQQDeDqi~}wipy=j+N?Gn_T!eyy)p~aG25Ci(?oKiCS6m4O-kr5ghj3lGv=RTg+xng z8e|m6@-xMF0?6t~^^yexCRR!a2^bDIF?g@C_IiR6dicp!qHQ=}32^<&FWelN94+XH z4BoP}N>e;ccSez}w_5)6wuQHhR9#dYami%KZrQEn?aTmrBVZ1AGeHJntOR(KV7+Sv zzy#a3yGGP`=#lZNc^9){Sav4ahTa= z9`}t{Ex`iyg3XxH60(Q~g;fA2Mqy<=e)WY6#d%4g|6hclb*_Q?kiTmc-<{Eb;=wTc zXO(}q#dA;ei7JVCL(j-kh0HNyGFZHRG|1+~>7O%?*)BC)@O?lRtqO$Z!? z-`ridoPu+eV_1GPdt1>p+^UHF_n0v!?pcLdAlr!_V^i#|(?GHKg^+5n^0);4z=-`@ z3-8>$dMifEFSn0t2s~-JyR5v15D?*K05Z=IoU5Q+|4?TkF`q`m_wbontz}&qVNHTW zqr#Ll+-!TAE>*&0gj8YvuPUY1?DFf1o6jukcO_6#ilX)0yH*tp77>Gyve9f#!zIl( zD6A#N?7-vnhOuloz3!z)%i-uRWcA-soJm7NK|p&AezwC6dR6IYwwH9(0txO`G3t26 z$?{i=7pO94%dq(8O96R~CY&zePj>T2Rs{FbYI5)~+y*YTmKymzWT`PJuX=Vdp+d@y z!|GVVx#J{!5rV$A!Ns0ZoabGr(0b*&? z2dg&Ad&P6lQJ&?Kis|)noRckfhL`h~CmF%UKidSvv#`zrN!#2BdBiF0sd_WaSy4%% z?@Q{)ly9q{w10i;3<|2O>bNX(ZD&hsN)e@^6%y?n0p$l*W$A-_&hB4u`dk3EwN{EP zsVXU$SM1XI{CDwA@&bml1plChbuiLCOz=A{=!dYqxFy0c*vNj`YnZOELLiC6Gl;JJ zI@3?ld>gRAnxWxOKnn*_eYHLfsd`mlKGzvl!Mgi!^&O17RlqJ5oP zb?b1e?wJI1XlV`l`fz?vLzg6GHH~%%_F_M-z#ID5&dMHki?eW?TOz7~*OfS3nR3V3 zD;?O0wwj%V1Jx4nbAaVInw!jdu0VN4M&Q*eCT?WPw$;<)qTkj0(&ulf`}@=$f{PL} z%0K#4Wb+xFt6!P>Ti3(GOJrp9cJdxm91Mjm7P~m+cWou4MqaHEUWGh1- zFC|&_mDJSmW=K+xNL#)iProBeg6HTr;-BN9QEEA|KXO8&mLmrWxTu_|KcmGadp$GL zfz~B-gcMUP{C?9UMQ|<3>T!fD1yr@n6emwHnwjd?;_meU^KmSWZR<|JRrtGvAl0qm zo%Mr*E!`VM7X@dlX)81VRv9*p^Z`t-qj}vZ?6?wIg2coaTyMb5tj}zmG{biH?^=^} zijUlwm$TQ;n$6i9gC>M!+4~Bk{0fN@6wGVrAp{P*!~Z5gVcvNjdpchWtd^|>(@W{e&- zaZSFNwA3(fko#UMq+L0m^GKqjKhZl? z%req`^=~hZlQBRPY#Fg4d%u6^a-JKP1GjaC5dQi8o%K`%geh+#yQT&&X^~^4R&Ubp zoK^JdOPT&Cpsw)-Vjb^C$)ch7XvKl`dH-v;G($)oaB>FKTS=|?Ut9Z;uNbtbS{EIh z5-+7t5r=W!oCM#hNd6IgV<(_J0xzlaahG3;Tu=(Lvx3li&V~c?G|KE&Bd%L?XCcNl zf%%tqB*DSuK)pyEqXwS@6(9+_wlh0|PLPRxK{E-MV{hZ%9{z5v`(y+`n%Bn&m}>i>`#l8?b0*`d6ceQ-Y|F2$7N<@30Jn%;V@lOuS$eo2 zIc81iKNz@=%0J;>it^o>J^mh8zpQi6TF*Gv7Q?qvAE>}WYqM|j+L-OrqoGsRfyOJ* zS-l3{#6EKDAeU9#3fFWa-Iq0VP5tvF)q$UB1c~6W8s~Lg`sBg;)gucdY{WzN>o$ng7)ym16`w z@vW?YTZk^(N7?!_Cl0p2II*kTj`Kd2`E!6NI%|bicPVP+Cl4P|kKKJu@N-kt^{ zPJH4yr*Uf_EYBDzO}F%Sq6rQC9MZ@*?`0Xrt(9JB>$&Lu&ik!berTGPhmVhk`#vuR zN7%|!u^kkX)`X+QlG?AI`b1z1|-tDy|4& zpLvI?38%bkRxoH1rW=k=IlUVBc8}ZUT7?;l&V#H{mnSV8p!rqZ|6M8@PXOsg^JRd) zo`$$(4w%LTN8iOBn2-Lm!Pw2!59dh86-19PKGsR&lni`-S|$5$Zd2j#fF!mlP&|bt z`TKxnaA;(`?%RN9Gqv|Y&nuN4x@;X7m?F}K%+qt=(V}McN_$VttE){ji-#(WcICh@ zjKm1bUeZ8Z-X#ZZt`bqhJ;C@6MnPsRbDH)nX`$c0nz6RH<);PwqAYf_mCQQ$r|*Sz zmXV!(%rAs)`~-Oz9G~hu7(uS6zsb68{p+C@L*yMn3z~;?ABw;-8`PNp zUGiaC!W@?o8+TPm(6wG*R>wnD_}arpj=__G1GxPXT!T2C6uMOVY(i1;v})!klS`|m zlIMN#hFD0ii!Z5*4=5`UH@2-6dd+5vcVnUQFi?+lI* zIgK|ei#_&lKjYX?d)D{v%$>@EZd2ua`0q_X8v#Qa5OKB}X}oQ-wCuP@ah}^#3v9B z7{8UAXvrQ9q?rTn6}jxEXkt%nqb{_;+oWny$)>{} zdom#X)nT$UJe@7v}f;xc)k)a8XVw zts|WVo1usCmzRo2v9;k{c67W7pgNZS`rjdaya4i8na?JRf32tsNR0tcloV0dty?0D>t=xspu(V zl{Yf0zdb`m=Mm2aA1jqM>ipJUa7|R>no?#8k9lWT*FQ=qfk^MV#hmpOC{6_J>PvUz*rXKSgF*rZ3L!xs8$44yhH%;8xivx@p9Z9EJlLb~$Uo433<1 zf7eK-xdQZ%#hEzq(aAE)!h76C2Cstt<_Fmpa{{Qd62@o_m=Fe6f`MEi2lw?{nWCw< zo)>pmt2&l@uyvrf_zn%8MR!l{g{r*OuXgZOQLzdyXK&AUH(5V?#e^wgf(5Op1C`dD zHxhU2^Ea%eTchapC;UD~ltUF4G0q;o%?Nf*J{RZ>p zER*Jz6w76i&-M|mWCGvEKjva-L#`r_2ZK10YN5Mwua>hKdljvV#8i%LwttmmcDj-K zzK3YTI5u;M?jMkW0b2A3c0Xm01emsSdv5_=6dt>YJ^$8GJH6>P$!>LUtZ8!>ayi&7 zm~~6gwId$)k*_&hTx4lD#$}wD@~9iIawmY;qXktm+qMO0H_wo-BdP(xs5*1!VczpO zKThLV!{!;KT5YISY5+8JWMt%|Bh~a>h4p%d=n`-j!F#_#^{>YDGKDbR@aFDKI0U%! zHWXbniH#W@Xtzy-IYJY)4Vq`_iDf2DP2ID<(dSZe{W2WlGBoUbAP|7410^jkTr@`W zIBZeHdnOh2sH$Y2r`^p_I_iGPOmwhB`~NSGut2qgVXnx`=NWu2M>T5^u|MdBRj{<@ zI~m^4Kvg-}P_s>1a@E8n#^wjxDGV7Y|04zXW@ClU%of-UQy%~H- z{}K4l{VV^@WmPbc1iR;%B(eTWT(=w}Yi}21(DU{BF-N3MtJR>Sc-~0jO33&3<29H+ zQ2|p^n@(vNY`nj-9uLG!LQHJumu(d1n1X$C=hFq-a~7>sc*3x~4+I0~Z%5ytANt@M zEt+vlQLb=4rS-3)^>cfnWqmBCzquc~j2~~lzT>VydO#H&EIE$^rFS89ggHp@s>X`t z*cbx^tj}?fZE~o%PL7nDK}%M8iLlGYVzZT{6IM4N#v?PSSe__aL|~#LGYx5pWZ-&6 zD(qlBUnjSa(f1NDlLI}X9f|fC>pLGj^H`S_wzwnv=Yk>*;vYmXrZ+M_CRs8n!Zl_A z%>by#QL)W4B$mHR6^NCGLGj+6VajI%o&FtF7xit1LGwPjCH~!{TP@Jf8fxXrbtk5e zii5NOc9$sJi0EDzvPwhICe6jw$w*I>w*Y~r&|LvYLPP`0A(*eHBoNA2mknX;9%vch zh{*q?vlo_C=zvN=2bTGSM+1`tr&M3Kf#P|$41`%MS?NAnTRAVnBeZJSYqWmk{rvAot6&F7R6}na-~#VWn$_aS2mKcw&5cG+_sEd5?SMud zxS4aE7sT~N&vmjx1+uhaD_<~0It;wj9`bMn(Dw$L>66MjY`7R2FX&}sWv06>QgA&U zsVo?|rFL17mNvoXEdRL?E~kpCzyIGQsa~SNeOm&R?%uhKS8c6K@~xU^Wm~0zH}^lc zruW<+k5QgUC9y~*c(gw0as8N+sw#1yV0FSLfVoh_B#;}+cS41SHu}Nr^NoF7-@ek> zn5VJmpRZ^BwhtY6-|q7;;kt5n1)XZL7=+a#*t}rFYqHctWY0mes@6|n<785|k8<*m zB*vUioTV|V`mk;;H-9#wFdVQIk%=5IE;x>;^om8?Ij2(%xk!I#X4~fV@E*AoSSbb< zbjzdXofxRgS4Vv~cTR941xu`<$|b-Zk0Ra3FFlyz6equ^IUR_m4Y~X7Q@9PhYT*mj z4~B0BHu|0BKB+(+8OuT-Z^mPr_QozbO z_xPt!^YoD{tK(+#f^}Udw&c~6_q!j-N&mZ~hpWl{(ag~J05dq9D{3KjXBc^piT2s( zu>C{|WJiP_<~VMixxG)*{KMZ4S9NopOup|L&|#>ini4oD@g8SkUY#FGoDnl9w;=4B z72?nIYm4N!Pdbfq*k`-W@52O)%wrSsV^a)an|DC{4SZ=t9WA}8i z;2Ub6A9SBbWp>W+<)GMwH1H_o`vj7Dy&&l)VYA#}A9+hI!PR2HQ%>gD5M=J$(3u9y zuZ1Ghf5u&wo$tY+iaH0LrS18!dZb;1N!4KS?YUmB$O~6+bL&M}NRf*1WJ5g#Qoe0F zzAK1JI*bI&+l*dTXMXjEoGPzIe}tVJ+sfo9XP0djgY6v_zF)h&q=~K)s9z=O@bUk# zxoC^=G$X0tMRN$6QN4f{lYV)e0HGzPOkvL)YkA1q80O7c+D6-X+r<&B%oom6&`)pJ zZjbtt5<;J58TpH2b?@US1ZI%S))Q6lsj`FtSGf;ye^N@>z2z$jcY0nH#M+AOEhr3= zVs3o!Kwln=xOI7Llh9=2Ysp{l>reLEGqE>tK@tu21WT3psU_s2 zB@5V(%LuZZ-YfJIt&-g`QIYlv-X}jdPXer0M=I^}(CyO&V-fDR=Hx$oZnJ|)o@bH~ zWiZa?_`&ssG={2}+y?Ky_sN-Bf9@`gfLYMiU~c5pp+TR?E*&hOJT9G8e#4^kZrp(Fo0 z_MNMb7N-8t(jq7MA311Eo(y&JHxj1?e5L!;307qnNJj<=@&3GS0Q@ za?qI^-otTh7%Dm}LPQFK(0R1po4n0nDX2#8>*$B1TV-W`GhK13i@?`bvwNlzooM+} zpbr(z)!qS=LeZN_B0UqIz0rp0^# z;%Pj;w!%<;#4@8?{Ok&L(OUXZP96O?RApar{ZRFL-|A?DTwuRg|F3d7L+fyB-`n=bDD zVe!j|+?~2k)mK|E+nJ`oeqGl47Um+l1^M30dBSz;5n{xbZb_#HleN`mJawMG;@$n4 zFUMO-#38RTy+0h!?rYe?cwG)sc^MyK@1pqw-0oMQx|or={+2F5z)dBdB0s5@995Tf zb+{(PE^PenJ#jmrXoHFCREKu)kuWza%n5_DuPm#TnUnhx#ds;xJAKc7hUN%w zshHS-t-X)(r11c9rr-=I=sN`_hv{!Z$4e;)EjB`(#=|Xbam1afaE5J3_}u!5sr68l zmB%WAQb+w|>xL{j_oZkfi>z+~=Yg07nh-cyw3=u)?Xc#bmuFng3D-Qb*i$sO5&YR_2ll)>jqrrMODIui62Ro64m zUI6Rb2QU<j&fDtHfUno}FJJZd zIV~X`RcG-T*S&j~=`d5Q{NdZyb5?e}e9>=VZ~x=cezVzOUi#Aef+wqEjHaymH3!6(Vl3_aa=5zXK%NvbZHxzTt)8fb5tODB&-p)A&5=+2k-wnimCB!wBR&@ z?jGAV6#GkSd^<`Pvzgk_SP>eleVIeF@HR!5-mbFEM$oIa&zMV^r9uCXqO%Tb@_pO5 zjev-Bhe$J0Iz^-fq#HzXjP9P&jgm@!1x9x_!Wc+*Y~+T3^d^cE#(wYf{?7qB4)#3v zeVx~NeolzKV(Wft!LoEwz6#e>xbuc;wv&xYTB@0|#`EvZYg3VrB&&={TWzA_<+Db^ zRUnh*H!V3#t2ssP^Zt;0tDkluhD4`_^K?0eFl4jyBpaezL~;1VyF1T5;*{s8jtcFl zz&dG}f;WY=y78~RB;7XmNb8UBdNjijupZI18b$z0c_IM*`n7a~z*3!LW3rth-VyuP zWX1C_tO86F!?9<5wcoZNb?P9_wYM*M?c`g#bj61|_rDTrTUl6-m$3d`I}@Ub89SN9 zkyv$L&*3FW+YkG|7@?~D>&J2E5~dJ{<%&pYXIw)A^Qw09(*BYN{T512L_{%hL-moj zFBfOpXJ6x8kh+f0la>=dc>7FkkEfBL9`8-5KC|RvW|q$Mp%e6Tj(>v?+~Mixx&(>Z z4~7RJH6b2)uNA9DHx|=O)e%EhXWB^jm9fb@WoGG>eSgnvEi?Lb*^1& zab?{Rk#=CQpQKA!SqQ`f+j&-mjcOMjt3SSMCvTvFTLljO`| zG*fe4^u1G|L*1F7Pq6f=nYZ42=ENBH8Rz?>|K7e8KgwW6qaW(Pbc{^t_UMcV8AWcJ zb?a7#6^+(q(;3N@sZUkkj31j7sjEO39=&$fF|7U$Tz~z+0{k^ewMd=WtsWJH_GxAK z@D;`XZY4&T*B`Po&4E1YxK{#aschlpVCJ{o1JT2@eS_V_sFgX}4Z9)8qfS3fP+qWD zX=9NjL^KxwD18FD!L_@)3or~rv$u|~U~rqrTAN7vbqyTISnFg^CaLXVTgj6IbE-BG zDJci;@J++gmrBM&GC2AHV4fn->|Q1>srThh)8!3c`<(CVly4B+@cxiI^V_$1onH{a z&YY1aPLT&tY~iN1z|`CE=X$({h4k;Hrn_H(2E}AQsWGm*amK`ZsH{GEEa*jdlTw-^ zL%-w%6Oa>7?+>tP?ksS-&S!t>C^5h>flnaPiZS+ifeV}mCLiNy544@TJWBiA5knf# zKH@@tu(nlkUau>rF;-=#NTqoYzD=cu+2q?n47Ao+XoIf&LUs}C0=StBx4L+?Ieaj} z>a6zb_Ni0a>9$eJlC)M0R+r{szG(H%d|M@>kq>R&mS4 zC64!k{yx_Y52R>sGwL7lQ3+yD{$9p^&8I`-$z2WK&dw9GspjE5%iokf0}Q`Z=4{0n zpWosZb=%U2cSnZsH*m9JQ5rLtPF5;-9;Rb6<5yTu$5^q^q1O&A=8X0U(x?^?fAsOo zn~}6GWjC{Iw2s)@8R;g*d-Z?P-_7*?6_XIZV0|?#_MfEAjKv4O+d&UkUXt3~^B64o z%YiinrU{3)2$PStA$C_v;U-zS7qC42 z_I&u8-eS%LJj8%xqUR;1k@0gwg4DASc$@hO_Pyl6#(O3iA#_sA9RSJo?$W{2l= z$wwZw=efMr>`6BV&hMHui zEre>auh-N19fE1;mftTf`j=vv9@L^!KaZT8*}a}6wU|2L0)8wk^T=7+N@r;!gCOA$ zPj75UgA5wgq;KjhC*6?CUWdXP>CCn29hbE?26QMkYAEx+j z86Tu3ZKtLsD}lYe6!N$xQS06Zrl21W{%P|3njz&eCnJ?L=#w!UQF(A$>YJuv>W7nz zduQY%9&g4|9{d!BP7#?K$$3|HFQ8+PqV#D+k~jLOko)IxE`7aAiYmZM?`gBoyEr1!Upz}=u*2WGN;Nv!LKgzr zr{Vmk;r(#^5ckDPbh_N*I_JzOdXrWn8)aoldry&MbSK2HyC6O69HD$~p;IjqGtD!x zPeai*wEB1c`zFO?bk3yj)Kmz4Qzrz49sTBekp;krrm#<{EGVr%~#TQ?eIETwsK ztPDh|lfUgc#E#6tU$zzB3E6lc*zmx&3?!`M6(?ffQ82>6q^R(Y#U8uCF0?QqG#Oqo z4i3Ahco>}Q$*j=@{gh-LDfavfgz!@Z3fX2)cCT*}S0SO4r_Zm22~Y7cHTLVeZ;8A( znfCz-=L{Bg(dt>(GGkZj9R<77>{`VJe|o%H9VMf*-eTUdcXN;uT(JEqMfTsep5y2~ zMqgnT9I6IYha8M;!q)Z+WgQ*( z7<8}HQs6PUq#F%Fp1ET@FcIWKzir+W<(0{`uP#1%GVSZk)|r#OlWZBWd()ja%m`A8 z6L4XamufPgFsl1X=1mt{FZg>`$H-lzU%s#@%Wi=x#xG;Ti74rtE1jmJNHU_R7LQSE ziSuv@QA;~^@UPzg{90JXnojo_<~2Kuz!cwS2Q0S8!nv!5EF}3&CLB|<8q042U_hIJ z?mPr>RDK2^oIDwHphOw(R-QQGBvu1ZtXp)rflA!n;rxKzfKPGFEA6wC5eDtSS>tKN zl*tB<$h57QI^r7N6P1Xg99S!RWY71ZYdzwuJqdKD3Fr=sQ1Z&Xj1tH896cc}vNK|D z`Yv9lpto5O3s_WA!vbz){xvTBmvf_LW&hOq?X~pBLvF7c<9lM) zz3KaonI;V<3*+gY zW1n1o-i6utbHU$EsLV>H9-jg;-~ICLDwA`tVf(sg{cI(=5k|Ps>2ha(hK;9uZt@Sj zI9*k#ID2m!phu8?*0Au{y)Q*RRvhmvfZ%cKWP}lJD<@o&5EmAY?CxV-M?76GJ@K6s z2Wx?i$l%MrO);-pI#)~0W%4y+p}QmX=oK@kdYfvplO|)=P!Jge$Dpi$~-lonpzKg z#7@6LaCCPR;6coku-rHJ{r#pC>NL2fNhG8A4>~MoJsTqL=?Q&-Gc>s=L%nO=axR4iYD^9gQ`^C2j)=)_C7gtUt!a zT)^S+Cz6zQdN?6hhQTg7_ipm9!8(4)>fN7kB&N*Ong4pVmZhB_*jF>N7OD$9wR?c0 zP7jZX2Y-t&Pnh-lr@_9;Iotdsmn-&W^ymDHz(SlmO{yawncU2Sx})hK1L-pQeduFc zggU+#tEUMcOdMbXWdE3z< zwXS#y?`Hn;)MpHK{S$+@+-@=$6MYz=w@Bo|x7yw$4Tul~+xnN3g^1s`+Xp`Fsywkf zl+P``Y;u=|k|=X)!%zgR-sO7FO^10PD!uq(N%@&tpf9tP%q0bErVd)TP3O+efju8l zGPlOdREPBHV@Gou3QF!m!umcPZV5%RxTNb^BP$o2sF0g=1+bX!pC@S_Pzik@!0nWs z&C-oQ?0ls8YLb)96u*qqyj}C(meF@_@RrsXrFxx`&80Evp+cPgsMt&#?cirAzBttU zusF$*_{t37h@bv7uFH=wuYWipd92>O*PYiEopLo}o!n?@BH!> z&56kihSN0VIL9i21lGBtp0^WYa5qHkr!sF}u3Kf-d!FrrO7LHA>T2EWoIk>9-wSUl z6!i3`Ho46WBq6)`gQqOGR_kU@l{fg9y3bCTq0YrKN-BCwUfeymz3d{b^;+AO4rEwV zyCiHoi;?y_I7t980QP5wQrubz=fBz19qKOsf4EtB+f-j zO@+s0f3@m!R;CPNeA?`u(}7;QX;kpBoRkSly6Ksu$(#J_);I$Tm}aFdW*XXz!QiZv zYMk{k)oP?U&WsUsuWdt|{|S!B%K{zq8BMkJRQ3SK%Ftx}GJw{3l7GRgu0P+vduTu! zI8_3>B2>|~Mz*4FlGsUoKFzvDg8A=2DD;QXJZ(!Je78b7I(??eCCb0PY98Z?$_9cH z)dA=1(~cD(i2an2i%|JchAfS{8e2}j6(2%{R3Fr`&I%yEy8jxgNBoEdaHZBta~+HS zyCo#2Tsi2UJm~DtQ$9CMW&3^Tz4Ie-|M5p+TC5+wUzfjqZ}337Xt$-Oug!fN{o`L{ zLP5WPd&5H5OIy_ZP5DVi)0AH!yCcgAjLu4+$~;-8+_S#0GaK4-?v-ZSdRc&OZZ}BT zW*ry@8Lca4VbirOjkI_#%!g6`1!R&gFmd&yNvlaHfLaW8Rf9R2C|HN7igfN*HJGuP$#YvSpoBY?QI&lKJvj#<$>~_Wz zpw~K4TietFj1U#_C=$TqX}nWUiI#?8j%#U`6~iBt1Yh)3--X?{+JoiXoN!bcuxT>D|0&w;ri{G1U^VfcW7V|ZwdS~8E}LOivk1gpfza*;fEmNe~q^XG~(fl%6Vts*zvj$g zoT|~Q%m3X9$TMBbqx$DxLkZFZV8@lUH>!Ez9q!3pt0~m z7SrCg{bUFw6pt2pPkM@-q5(xjI=V4 z0XuFBsb8tCSQ*2Y#AEb1(Nlk~?VnEhh6V|drWRs9Z?FOWyl!_p(fq<3v=M!3^#m^4 zIyFmwYz5lJ@y+`K6#HftnTHWQxyHeV4>9(@kVPG!a-u>D_U)sBM6oVq2K3GMnWHyV zcS^3Gj|?!b2-o$gqCLT$uxoahgEwey11Yr!@X!imMhuW+m+gR#1dc-fg<|y#QiwDw zDsCAuTOxe}ILdFDy7kZ0m!r5ts6#|&lIjT03J`x|G*j#b#kTO?2o(}9pcb+%WOUsG zdl?6T238#gqyAng5FV^dMLq9YxIgthpO{i*6_>7Q3Q4&SsbXVs<1!?-%MJwCfdXdZ zDgyt{>1*=-)`%BMIQaowT!@NYSo6`w`+DJx1P1&jdY!*P(Htni#no6Bd22rJFVF9c zZ(mtFsq2I8SpFebfKpjlA~#W+ZUa2?5#kuVyI2BTcuLk$egxy!ZDN8=P6KPOw)zdf zV=*eTqKQSD#pK8>=C#M}as=r!9}??BEHSeb_(t^KM?11BvdosVGzLl4+iES_mEV`%QvoGKTNRiZxx2UnB-p!s8VTbhYFH9e(=Ir zAeBmnOK$T3{{??M2O$K3+4Rnzg* zCyJh=wE$i_Fp539!%x>4BGT*YuNcHp9}H!Jf-{izyEnjfr+`Qvj_bTk!uw-m-e4mS z-bXzlE^ypeR4v8pezT_|$p77+nMByrMDc3w2&-Wz(+CVa{maEgp%?`{vq{7NNq?br zggN#U1Jo9@ciz8tf(`*h<7<+&Muc~Qqb`2>TI3jO?LNS9^R-P#0cc8zVw`I~eAhKc zgGv7i+q72?{_6hG=4HO-NdMzA=)L1FZJBP09MIs3kf^^uWzFK%QpOB8Vtt4Ab0XVo z&8wLWzZp=G=zGQ6zRU(omKnKc*O~=93%be94%H_<8}mH_XAJw;Cn5**-tQbO4Bc3R zCj3rSybUAhGn8EN;4^GqQ;0{eL% zPRBw;Z8wg3*!u&~95g>sv$2ZyWs2b15bF_o?~3C~YR&dC2a1`MuISw`rTXdWO!78z zMTr)P?kkSbtq09GX&89d`{B`FAPgNplXJoJgz`p(#CCz`Gmmk`(Jynw;iqCYnZdr7_mEvQ!`r=7u` z4Q{!4dO@>U z70)?8pD_tPqH8qg$7=8UGDM$v@Q1ITeb31ZqXWf~O>nIKAKxUmAI|ud=_X^Jv?L$o zJiI0agKU)o5?hkNF z;@R1M0U2-HsQ=8rD-t%J?Nh&gj!y*(V7A{AWf!6p2y!Ho?T|=KgHD`jpWj_cv-zXT zR?&p^>XjK4DXv~+)|GOwrM;@;2NP zu0>XQ%b>6-PxeEicqf{>_zHKPnUkc!mj+0lSH9E}#J?UBLW}}1H6X%Y+CRW7lrQna zFXr`i<|<-<2M;h=@0}-HnqrIMi)xOcZ6v3L&e+M}Ak+m%GhoK>}mrC~?{K64uQ-j217SadP!l&rYcr(}zsPWZ`o29s z`<|c)1KxkUDm%atLO$pgE^H*saVY|PuJXf0fT3Ss#a*K)u(O?>*O?oZo`MOl{Q$~c z2{Ip$9Rw&K-u2s)5C{alon%kDH6>DjK70g}JNy=BteWM}?p_)n00?v3_3~nk8dCo) znhiE1ChD20ZAVRoVfl8VvB*(%xQ(HCw74uk+HaddywHF2i?m?*cJp*As8c4_H0|sC zX+b~YA{r$Z)%Fe;QmbpIj zikrNXPmqsw(yNr{68iSup$CGn;o8O%!Vy7mcHqZ#r? zVL|9}un|7XVCnSqHxA-ovnE{-7;yX*LEKS|QFDU~M1YHkyU;6z zQ0by0%|=;n$cC?VoAUH7JfB#*=Q}MnBBf*sH`?pxocl7~*~WsJNAWm&7U+;#gfDtp zBU0KRev6~YY4LC_Qw7`}L$ z$Xu71bWiA)U98Zp5Apl?ZC-ndlOf-iL$d&<7vu!`XXbJ-NETo9$7n9 z2Ckr?z+iLbK`~E*79X*IT zQUMg;TkhL;qG%!1N6J(KtE*6)o((I}|iZ`Iw-+AiAovcowMJ8?MX7CD*6w z%3C*kd7S9g@YYsdGE#pZZfsFESX2UhDdnIZ3M}O@!yNabKb0qjy_!ew&M@#75n;S-;xeU7)~;LxLl^K zb;kEdr1RZRhgp+b8AVrX7{wk9y{yG%&;cV#C|Zjdd&L#X}wxqNIx|P*Z{5(K3JO!^+%I&g0es&g>p>5psP7*g-YCH3l%u z9bYy`Qd;Da;K{vBy#Kxqk4%#)KP16Kh z+=&5x9HPvN-MlQ%BZ}i5-Bn!yHr3-z7TOvY!l@xZMw+v zttvmP_3Jh$QuqbK@n-6ud$JXsJ0d5#8e?l_iVclZBm~ek`?STnkN6n(WmDIgQcP*l z2_y1r|CSqP137AHa=kZojB`u5Q{c%dewj7SxG(@R`mKt>U0;+drjuFpQ|^q4<3EOjRODe~! zWS-Ek`bmVE3+`*ZPW%P*>o8l!dw#@VHxvpCZkISHrDAiM){+ftwR@KS^|#B(saDUY zX*EJf8(j8Sw0Q?tw(gb1PhQlq*&GX1rca0~E*;H}pbNj6_IMiS$jM%4BA0!tHsw?D zSF-l9^anFecR4t`xZe!@z-x+|GU>IXL5vFg`jBsLdmi~cW#{gfp|{F@6yWQ(5~JBY@WD0Htd&6~I6dcIdosHvdfYP7TBB}&f>d12 zKd=koD{Br1*rVr9JiN%<*?E>ZlQL&j=hrg?CBE?whTQI4Joyq89>ZNnkJ>U%xFW%h zCH!tA!9%sMGf5t~RvHPFsKflgCb?hr^-r}NnYb0S+wW=%?S0v3<|$kyEc!-8ihwW! z&oDOXvhZt&%-HUcs_5ougD92YMXV@JqeLNor8m-~{zl+840BQ@I^jq8_*bfV=Tu9b zhGj~lU7YpOx48+Q=R-T)2NaIUBl?w{8A1oK{1h3E!KgjGEe}YTvZ|y{61?+_Y7mMz^`0 z{FFF6FU<1-R=BAn9?9GR9J!ZB?x$avmQ52*8wN2#o|M|XOU^xurB7ZiP@b}BP)N@; z-O7-@io^|n<~$eZa(?-h`}TAQ$;e#Df>4^qwnfwGe`L}FDXs$8KfRtW#=YweXhb?C zWIsygmXD^gF+XJCBwP)>tzClYrydzsb9Yx8XI@6iS!JJP7wF?+ovwaWUC-hO35WMF zUV0zR$`b3P*{o4d+Urb|m33r+nxz2`*T**Vt0ax#Bqsj!AJ>>A|SXVa&$cC#wLuh1Bq~9tTFm; zOvK%~5dUH3d%t*_af_o-65Y#omlPVdQeT(Lu?KOUzpG9w7mOgbQWg2uH#U=QwANA4 z0N$x}uB`x~pu{`|@2I{f0Q5WXw5Yq@8KIXwfP|ovwM$j^dWM;4QPng$B!$Fszt0fSe8X?(ou6-gx^du4L>S{N)f(8hwO+$K<=Iux19ie=N%sfY8u3@4vD4@KHkS41M9LxCFA)NPB$E%ovf%AhwvMH;4n9PcXw#^e@@b&aFM_UaWVHJ|1Cz_L)|Ci+Mh< zAQ9Q{ELw)BqT>1maD|R-V+{;0=eF5sooonxv!o1)_TE1a|r6b=b(~KtP1Ht$m=xUedFYKN;w<#9KeHf z7Y$Q4B`(bzuU1-1kA(9Nx;I&}zo~T;H~o5_advH3%4F~4z>Z=M4|1g)wT!oC4PNp2 zT*pg(>}5EFuE7YHl$lF3ir87!@z5n!>pXsADrj7wX9A<|;=qGMPld|~U~Et$_TmNh z&v~3OYt*bgvnTOkgu?vBy4Cvl&L#~yGVhYTtZdAi`umkjbM4XJ_!Wy%TQ2*@hsCTT zol%bCq5o2R%dC!??GKszCu~sD72Dv>pn36Jfq`XDrP$nqnOx7g_4SB3(Y&YWjOvr( zp=&Fvr(bs?A!By@dBb)rEh$EAy;x!r`hq8|dp-(**~8}KmbgMAjF@H)8cIsaYSYM*IDoNx6RjqU~ z=Z@EVIDb@QYZ-#pXkB6tn^Q7=s|`PF(t-9TuF|x*nu{URNnH(+X;&j4-qP2q4??W6_T-9GjsQ2;DWqO7hWm z_dgJr+~&1ax+!1K`g0X0m4|o@gLoNb5g;y@Ru$5+KH9Svm)jcX(wYA`dR2P?)@&=U z`+dKyg+5q@WNMKC1zet&8(J3m15^P-c~duCwL4fGPasL{gp zn^Lum6cpUZb*qoOnysxYZz_I)9Xiu4M28z=i+ScG4emy;;35CngyfC1jQp~-AlO1&F4&Bv58N1_R|96WA>TVyyV0XXs<_pJ2 zhfr0>?&$w+F}Qfs9QlDd@*~U5o(->b6jRPsZY(G#RYVS;na}w9jtll$03XFt(z==}^Ij?U@NZNwCX;apeyT%oWHz$pv12|g*f<_EMN zAg8v|6b8!I%oqd`4=LLZRdzmG1t)q3%u}EW>Vb!sr{me zlJ?@>P|SCLiL#A-RdQzt$G3YgQ?ES2{HE5!jLm+iguha6Teuz!Shx!sbd<^E_a=SfKNYSUy+N52&Y=RG% zT?%{bzIc1X_-411ZyE>^Zg56S}fKR+(n>Ec{Go!(m!v|AWp-=B!sKDM>bUEzzl&aC4-s0TRwGEscM=9RzE`UyCq{Xa6+H z;hQ{drlc@x<6h=_q?p4`JhsPAqPO2iq4JA+E3DmrtxrRJy;h|cA^C}Mw=FOo+7bIU z_tP0aMSRYV7p4{mtH=(zm!OzE`G&8?lFurcBl6>FE%3(rQ^gTa5FXyIf5G=j|I78e z-5(-$P7`W)>Uf~`>mWhYd0y&agerz~FaKz3I#8&yZ&1@E-ZXxnztL4>L8?%Ew39(s zc%!%c*6Wk%4;S16puwBkC{d^rSiS(UV}F19aJ5)ysVqHMxDvIct<;e9XrZRge2b^6 zU7fzUE`D2wdTKA38}b8hitePtFJjnL(Fc^yQa^B^1I+Qx4;QO;<4bE6L-M;O3Tty2 z!*u+s1L^KF>06a&luan|qBF>_$n(Sv+agUCcppdhtjx@F4|UnOG9wtzblimBkqAsv z(abeD4Wz^f@a#>ExZVdFy)Y*sR?*O>>>{YkN}MsmZ2L)Ik%TRW)|_xVKauU{U*jZ^ zx5@i%^8~%RTCWb~O>F!_Ogx9Uu<+M-)RutjJ*2lg)ol22L- zQOIw}6vYhh8EqLwt0&LQY%*JSlJCK(2TozB3D>K@5^K!-eajY*@xeQqljiy4s>A>3 zb0quxGkIGJ@O^ffvs*Ttt*l{;MhMK?dZPy3+MG~r7#%Q_&)a|Ccll=r{rwsDApRNE zSVUmK!P-;-P5v~T@}o}#6p1#!t5KHf(~MAm=acQq{Z$S0Ril{cWe!;G#`9VdFR^uO zlCBFgi(jzz3?K0yqS5MXot4-K35I(M6>2N4zIX4$wH5rxexdb-D(~MPU>lzg^-@y9 zaHJ5KphH4L`ePaTp2!QlH>Tv&z8>5uKI!TR)AV(%BPd|m8ypzKQEDzFuK0}Fb(`pB zK*W1Q_L^H}&is!(`i5b6n~XqLeQXC>K`$tBU?*QK0bn6fds2{e>k+d{o^Opi3ie|d z^#T|IIKz{!BKdM3WBQZSlQn-%hDcz=sBQ)hi*m8O4FO7BM)-tf45X_$ogdAyIl!P z2&T0A<~KIE4{|MF`Vy6(bBSt2Y391Z0 zd?L{AJ`^MPOV^?rv*hN`?NrhP$28##P{u7W!wZM(BDkXe-O30^ zL^J~Xh+D{M?7_}n^l0^?e6##aHH;|z5NoMqc)iz-0bT#xNDFyqYabZa{3ucvZuekW zsvj~k@NBi5%8kf5C$%ZECFFPi2(@jcUJlATo0nImXrrIO6$DzA=bl+Q1*M_3L}?cW zL?f87Ih}C?+6bfLa=aJ0FqfX$w)(QDq{5ezw`Tp_>BL!m*FN28{rzA2`??|AiM_40 z6vL{&2g-1j=#uyWYW(2X7BkKuUQt`BB7;8bE7%H%u%Tj$K`W-GZ5A$b`vJ>b(OWi~ zo0@@OYV}H_O%d{q!Il3PjIRYVZIy%1=cKwK2l_Gp7BU|@VDhNhL0d~txy>WyF0)2PQ;O8}qw}P6WW&TQY@`?~%5;k4Ar|GK z!N~!(n!6-vk_IsYZ1H;otReKrLoEa+K;)~i71C~Bk`h+X!U6zxfn+ss=@@U7XIr<3 zh?BLf)agsqX0CP}wb1smLBck2TC5svfJ#46D>gQO6HF(QXw>DjkyDr-4AZ9&~W~)&T3)|4&Sh6$7tr2!Szb zSm^K#%{Mcv&iAJgj&&REK&8gB()%5G#3w))I)6s%_bl6Sv8;TVn=*Bth3&IZz-bFZ z9-BeJ1FN<-p^_nJj7^s}xncomZ_L&72rh~)EO`twW+*yf{DN+pDFmw(!?fXarlz{N zl6wiU;OZJe+rf27yqp<_@Fc`H-k&+Zm#Kr@BHhE;;teczcs@<%GbTgNe*QaK$7-O~Or?ZmzM=J#03K5Y)WJ^11Ej zX)6>4n6=UlK1J53)2M~kZVZ%E63@++e_wW99TOiW0jt6Rd^5J!9!El;?F76jt9^!; zjCK3n{ZGOEUqc*6@+ob*7jLE=4Rr=ib4t|g$d=+qysK*bIUH!FdFx33 zd0#=4F(iHZhZb?O_UPf|Ejrz4UQU8BK zU6z2$NBsdJgz zH9Wi;_19u~Ki6_=0Y%Ebi0(bLx5IA6SC)qag?o~~SKm>{U%`hj7l-ce?PP(kZ8x(A zQCG1OO|jGvnfOgY6T9R?pv{jMyw?}zJiRHOJ?=#fm;*$G8_JQO5~Nkco0mpA zYP4=l4wkP*5~Veot&z}|_~2_1LO4co`)(|zPuX-h)a2Nq^24$2&Kp_p*3GrI_fQ`0-6djH3)wHNvSPoJH;qSg{M9#0OaE6pgF{U8FbeWV3kfI}q zYt}#2nVA-ADFxCo4h^y;YcWh{3p~EiA^EvIbRLhI$t~u@f56cnoN`bTxsRya2l#Ux z?%IJnsxOl~0!Ss!S@Uv-kF1OIJU^?kE^0bH6gxC?>3?np=mfEUCh6O8Qk8LkC}d7= z2^aT1E(m?+nn=So(zLC~O*NA`&NZPcFD9%0B@eo5&zr5$+^F=Q4Z*{Adf!b3hVatf-1bVc1vq#=NC_qXj`qd z>?e(9ln}4W@y^G+%o5EfRA0Cq-$Q};E6Nc~-;E03FURK%aoh_&boqtS{+eODswh(yQev=h5_7LusNherTiwE$?=@8gUMJG*`dU!o z-L!M1EmK^5(KLL6+n7$HzgS4 z>Rt0sX#RGc7yV}8!^a4qtCjip|5ZeO+WW`Lvoe88Z)f$U-fyWjV2GW3no@1nucb+& z2pZ^2%G?K5{j8!!K7-qhRmxe;-uJwKok&3BGY#x?V{%}~vw@{|De!!!FrK*F%uH16 zi;kXvd*9yXawwRHZ&OOWgqnLTKUlrcz*vC%E*2VCe}#1E#$`RSctN zex%OjK8{ZEpW}yOJr!Nbz(-(LmycBJFA5HXIARULgjXV=@O;TU(ZFhLrN4=sq}~p0 zF0SEnnJA2^;=rqB)$)_{@apO2Btk*l7p6vn93EP}hJ2yScPJB9*W(WfE3`8E(6FKI z8_@c_`KQkjFJ{fo#?Fey?^k5;CdR^!UU1rL`YI1l7&ID5`=k+*GU+NwU9IV@I)=r; zqfDC~W{`YG!Id{fA@k8NMQQ7oMKI@UH{phoEIu6l{2$ z`KGcW;x>+0>XZl;vmVTEk<8Dnt+bl>G*Lzsdtt%(36{>2G2w%GiS7R8PT*KLBRt0r zT3B!2!VemCm6)Y@H2gVzFtIyim7WELdh=bz$52d9E!b>QaarF~vpaPb5k7$=)R~2@ zIAVyxRwA%{_p7`N?j_HLMv>B`|8OLqZt7W|B>uipsY=oIR%%Y- z@m|EIe7JD`!)Kq+j2nJyD$8#?`qq6F5pI3`>uRS>J!!}~8uXJqM>--n0(xv@mLh_)sU4qJk6$0lw^4rDlJEkT+bHs-Vr}E- zxtga#V8CDLV0z{n<&2swOB%;2u$5U6HK;jsQFw!Gb9QVyaaBNKHn?tLVbasz`=)kx zo38!G9rHJmBd)m*H*@;F|45=Li`Na-!gVi4$&jEA5-sc9GwvfkyPLR88`Yk)O2S#v!@08uJd=fkt29`m-Xstt5wP zC?U2xW#e3c*D zlQuHzFNyoezOr0q8pOAM3o7-$TkMj(29!~29PIUqk?55EsP&ilZA`50G z8)=SmS5?|tj+B`?d%B|ciL6?{cLv+22{!QKPl4Ngv5X)f3mD2u)K;eE^(dKe2k2*YZ_H;sx)mg?%uM(JEe(K-OCRR65N zSKF3-JF$?3UE-Vh_n#QCxvHNIj;F1CG*dp}ss3bAs3PVi_l0^>+3=)M_rirBZH?{u zfbDh;xPnbX95(Azko4W(unmuw;@kUe(z)g*`=KK$xBDC`?58XAc2aEh!F)}*E7z*?rAq__ zss1HTnVi5{7(V_%$BRdJv9Hv1sbhKGQ_U8Xk0mxBlNS%C-$mwE9bzsvULDEWiTk%T zrwJ+8O6N}f1K^zAUmTmVd17aO)hX!||K`iXUK+%h8=7Z_N?iHx88jk-JvU4Cg9&sD zL^3(tEb9^HO%8cz%#~9n<_MOe}%RKx)3>$;ZoZ=fGfEzfNV#lM$ zV2WLILnT~p6;urchIFicv|CdJJs8#vE$zD)7~i8&UcNB|p8uH$Nt|nJ#Pe$d zeQZ_`&!zZzTz)PyHgAQsR$&O9gV3uQmx5HRE;?_~IP|HMDJCdg<%SkI@ENtgUSx=d z%P+)%1%E%KJyd@w3D%*-lueXPPGx!!ze0BkpzVAkwdY9D;V7~J9L1lUvEj{E1eL|J zKZu3@GFOK?P#OjG_~*JU!X9?vwk+@~L}fy~9lA6#+>`zpD=b*aw}fVJrwRIGfSvFX z*Z3Zd{XdG%!=KHr5958F4ppma@7CUGZ;F0O6g5JLEh?m~y^D(4HDZt2wQCne z?L88ERbr-s=e^&5z~^=+=j5F0x_;j)yt-82W2W%d|HxDZF_TL-Lu~^mlT$WjVyr&+T+hZrCe5CmB>(ufUZhV&Ieo|9VLSt!UPT- zhtZPxP}JB^O$aY?aM)a2vhx?B6i#|h$R}rrky~fR4SB^={zCLCV*kGJDP5DgknG0^ zSpH+6U=d{JlW8J6y;-6>H6;i+*RvX{{;SRNgYo!9f9!Frfm9Xs)@*dmpas#8PV75X4}8qg2i#82DgjlSjlu(?T0^;VHj zg3T~a50|@kP*2LZIXJ+iK(%^d{2(+etpRJQ8g`i?6KA*8+xV_6D{C$SOh~eM<`08& zeQEx<=XW$$0^@{zsa*(*q}MrqAO+%R`a62|ahjJHgr~y+a`l|~3Umky5~Fst*4woZ z+f0BE{3FUG#IxKiJo)OJ6KFEHdmn}+PURW1kjPfKLQty(?Xo}$DkTPX zxAPLXA_WL9-a*6aDs-$TMZ-D+NhA)*XFUT{8CIPF^XpF$Gmez{+;!QnJX_0-A`a}m zQMjC0(wbby-RTLPsdkn**LTm`+jZ@ex-Hu9`vk69mGcKWGN5E>#1)gUIMtVCyC1hjXZzfr^A*)MUi~>7P;?~P7Y4yr2!`2X(U+ELa_T3l0Jpf1Fv3lGm%j=@cHS5U^fq3)f)T#2Z zYw5Ci2I{_zuH-iYNAv*7o)vcH0$HNGJK#kSo}6!t_eFnR$hmo`@cWO<-t0#DKrkB& z3UkwBgV!u-lrHR=&W!AN$`}DNZ_jc`&@ADFKD|1~MUu^q=MIfqv5S(=yqD&*VQ&ct z#+TAFm@2(wQQsOp?Z!LGRx8|_N_p4u_4pg@8L>)OdWaTdg}>NUC5C%9ef(6N%{l1c? ziA#<(QB?9jS6#|#vdc{ENl9wdw@D~!0-QvZKXqJ`*UMZrHr2QMl+{8Kw`y_JC zhrSZ;+top@AB;^+O9qLO4Rt0dOhK%FaI8$7_o^qTlOyHvRY0l)$%qDO!@AX}RD!Ay zHp)NYKwKv31WvgJsmy4fUfy(d4Xy2{tqnN%v++T^;+V3Oc5d{j2w=6oldA&y{096u zxhE^?;zV8&qX_p_%zXXoSl@y1sQ%;udjH3wvEOt&H##Z9cn2e>8odGJJs23_?dU>% zgvjqNk)G@Za}xApFM3k}$ufG>7ETlOrX%@PJ16;cI*Wd*hx9N{BAneN?%ua}4enfI z(VB{X7lZKnJsTO2`+COcGJ)!; z^{w(GG>_R4t1wR@x51r5Yrq~u?5OOpDdKSeq2SP!1Y~->eo1Nw-be>X=c_x z*Sc;fJG6DgkFjtw^lMn)UAt-zjE0)tt4H^el86w`^McPt{xd&`R#CR!{+iwc?!3bE zFk7KM`r=;A&&CtzOde-U3yjaPu4a-49@S1ed9q|?c9pKixZDvbGkan!+^0 z;3`_1yJ~M@u%mP?%_*s|Vq&~c-PE*M+tZ3~ZkV@w z#8C^5re}p2sWG!JJ4JBn$#C{*IvIl%xuR%&)#>-%1!I6{@WS#QI(@PsT_9BzTidX( zu0e@Do1XstbLN3&_AoM&PuP-AB9U{oP*QwJ-?efx7i zldeQad!WzA5N^3$9$>NgjQUZhBa3D(rO_{sq`YF`(vZ^6xoT!c1(Oe}IC$sHAiIfI z43`%8HUiO-pk)89@gY))uusTuZ8QMXhP&aF*hn&m>c5XWyQyy+FKIDc>$b|4BNCqC zb;4TtT+0Srv1M^Io$Y)<;tmsU;&-ono(gL`$Jtvum=i}NPo1nivsC<#>$(ZW(Wg8A8eBmd^D{&~)58Kud9l3^i_ zme_(~586gj3K0U}P@>~*7n}xY-c4@}7R8IFRl=(I;|id?z@rw_)^~%?s36Ol=WMmVFH}+5QP*S@*Y_eD}JXT(dNhN-rZdpU^)@Sk(8!_Ke#ov-ZDMCT^$@f zf{o$_13>}0e^^rPYi{PV6@`iPPEi=VmzScb-?eyF+cLeoV}5+4WkO^j3#~t--sQUK z{)hl_HfwhLfFrF$W%JgPARkBUZweRNc~}1%fOoE_`033oi`+z#F$PSLY_|*2-2WSH}aiecb^1%upQa2 z>GY^N;cUKSv$p-de8iY&?5cvTEe5MHzR+8)AzpGO zcyMV3C;Z!4xk_@_2wk%XVx{G19^uk&LNpA_;Y>ljO_drc)7bJn6KSQi8951ZC`asw zJ@^j3KB+{1*vqyFv)|S`phvx<+az+fp+eP(3^ZuB?lX@KV!ti=jNOp~OBgZ2L~o=p zD^J5p-7|N+HEG`+*@*G%<^XfCbvm)F-h`pEN}|wLfCkav-%+!%5>gijwLu>mPUcuP z&U7@0)@MxBm;hZjr(?1Q)aQEj&zjqmV#Ae7f_pf=Ryj?$t10h6f>X+!&w>TBM{OqR zNEv1zp^UdmnIfuLJ$t@^kHa^xh}72)TBD)muP$41kx$xXO#zB-UvT~{Y;X62RU!$1=?hy#esyTNPElWtH@-9=p!P9k zFve`T?@CM`+7*#c@x5{77n6n>MHX^dSSY=Q{cF>S(Ll0EwrZQL~bD6ynSu}TkMp-mQ>2vOW{t$UzW~pv} zI?CxiUcDPRHZ|xKTLcWx;$_CO+5RyN=dMR+8W!$);YwOSDJ3TE?(*;?Aq$Bi6j9JG zW=$Fh64A~8{lv42)`$p;D|Cm0vN8xRu6RmO^5?%BE^d0$0|0k4Zh$w*>Zd&$2PO_= z1>!<8R~-|uE7Ugg&dU!c4<{{j9M*=Nv@*agpJsP&zSPP3LtE|$mJR;Z`?cB2&NaZB zT!Wiu=ERKTjfm)9CIc>iJuAz-l|%kjkn0ikTIw8ou>&Ae^9<=_(9LF8&M_TY#HnsjE`9_tMCuTF)6-d zg84;0MfasZXOqFbcRd?$bv6f)GI(kW8w(8Iy)~Z$7?N7+2;UtRSrn8D`Tuiy{`=IfSF)GjkP-$MD zV_WhIf@zpTnfc27`K6Cl-6%`?fY?g2u>QdFm&U>0hMG26yF9t0+rc(gR0n0=A9%*f4#?`a2U3Gx=ir@HS>T zLiC+5ot(mW9hHl{f#C@denVg$_=SuzIJ^|;(ttxFXEpy1JH$Cq= zz|EEzgjIh4OFEGA(DAa|Kc6vwo^5LS?1j>uo7+_Y7(C(+Ql4aY3Hr@r+4BA5iVfS= zlJS8LuaonmnQs7y201@4|2Vjv)Oo}CQ;KFc^>rYLfllDy14(wElKkLg`&tm@*C=HP zn;G>$#}w|uyu_w&C!LSlk>o1MR1$wy$+p;jAVFSv?GSycC%?H=-u9TRmT}gUuG<#9 zSHk*I_qZLggBVIbYEC&t^#`cm8l?*B^5B%-J@KT?r3_&Rws~%nX&+Js@E`o7KWCuN zAhI(T;%!%DYCLmXQmF8Bm1^0}MheRLUA z>0o_}Z{s_hrt6t|N*SUgBYyKMuCSPjY6=eBf924&XBx7~U(dIhmbbUet;Y8WlgXq7 zjOP5pAb;L}-Y{G^KRXfIly6E8$dEl~tc zX3-X)WsYPr*4vVf6tR+Mpa{}5ZOLBq4%zA~JN(8>zK|nQ-b{QwdLv%g{DLlPKRMy> zO+iL|Iw-L5H@;RP*TzkFU_Hgd;Z|o|sPIhwA0jITCtf(6Xf*gOonj92VHzw)4nb-{N&Dz-#O$gPM zyl5dikjHPH@urf$?_Ra<1&_pl^;AXLeH zm7^vTJlsxQO^hie&gc;ruo7XZ!SXT z`qkJQ!JNSJXI&Z+g8&gg`t1F9-O%up-Sq63Ri|(D&0|%$@y2Am(0{FHWk@y(5ZS1- z7`=Gr+eRQEb>9Cok<3u9!y973W!JxykbV;jqG-R4dWOx)@jO9`32^J!_01Ng?uX0O z!!mNlk>jQ&Ij&sk>TiM7nQ%$hjbqyHCP2FY@Os-SMNX8OKuDKs-VUpLtO^YGJpX$_ zKPS!PpS9W`9qeX8!NK@RhN^*OOH0dw;JhG(#W3$7M@u=CIMu}nYk`ehSP8oc*|W*s zje3}nX1Vp=V2Vq^oDlD>o>+%duxUnfYwfl`hR3vPs;3lC44C+{8u50zkW(>>$)>== zR|prBb@=j0gcL(|n@#hod~HiD9-~LjCITfg;QZ!t4&l$! z=nu`JaJKA`yXxlZtDhrqPlM%&*t|=XNncliCOr7#X^`EDwp_L9Bt)&Fd~UA3^ZWO@ zFAsAplNcDs`+0)$Ox$k;c39!8a%i&N_zHS=9@{=l>_aDFg za(v70`RrS_C+fToWKaXL0A`Sekcjy)*{ z-}g(PKPky=Ch|}oonFgdVPscAQ8aF{`tItS0`b0LnhU^4VVzP6Aif@+?j5`y=4>q0 zE!~l}(!i2}_?LHkc_#k+@x56hj1C7$dQ)8M$F3s%XtCMQ=ppGjJJ<1CgKUn;jF^m? ztmmaC^O#$IF|xzT%17td>P08|xL7{Op#SzNX|8ilF1O$!Ga+(KO*BK|SB|>b{J_L{%ljdpq!@ewDlVPrvuocW*wJoxih41V>h=JM%pl zsE|*16fS2s^tMrMdbU&j@mP|G!xIKeKiz*~Zu4wH6Em*w*^{1hs};R#XTsMvWc`1> zl3_ZfVt1%Wlu_T)4Rw3zbR#3+ag5*b1B(p@P{>i8>!ajxbtiSA$nEo908&hgK=p7k z;urSj%_4lb=z8sQt$&=;?#wjSZqH9%Odr@{zqLer7FaI~ygf(faai)r_HCRy8A_ z1)R~8&wpoR^9PJwS(iArD#2_y9Na;r!ie5}oqn(m)Sxt3gG!YaG`yuArC6`WE^2uV zQdRQB*@LAPmN4-+QC`JrE71~dVPWHLM`q!%O?TmG12MV%q?QA>kr&_(nO23{;{kv= z)t6ThzGWf{KVQoLH+m$oY;Ri-m6#^64U!c0=M04T$LA?jM-e292UiHFMWC|$BX2h z9+}hdr4-{HEFMIuUwV_YuYWDmUlmagk0p^W%A#YR9 z)wnubmqhfEgw%ddo0=XiiKZs)G;|&D*MTtMzk$Ik0bIg|4wzk$2UbfvNuzL-yKPgH1K>$D8@@}DYOU^zP2!{$tt2S=*Yx0*y`wN+R?|xi z!tNT-FFoDSi(TK-=qrrZ?E~p*`z&mZ3lfETeQJ@Mz8`xx(zNZ-CY@`KXPc)sm?!#I z*L0h@CWT8TQk=aN2K4BRJU>H{!87gL+kQ&VmXmQ%ss}0zYam_O9LkL1))G+;4r8O= z;#x}O{>`dqZn2gbSFFz&-lUA{(%ih$^jPs>ihx~<$n7Uj?7lMIc)0Ijp>b>7o#8Nt zrqvp6k2B2*!q;kdOup?a37%hhk0a<$SVB5+U%1ip=iQ#JavjbKcN*>MTfeV2rH;A| zVB18v9xr`z9YtY;;Ki6EE zuzDD0u`agwy_@xVIsDHpx+XnwHRDjbo-%jJyA(OnUhe~pR7U}WkGUS$F#q~hD7#!d zrsyz0`vpAI{=q-EUbvk`_s?rDeDYDK{-zfG;JT@5X&Hj*Vk=yp-!Y>FK2+iiNjZ#f z8s`3sY5tWT#6^m`04rhglbc1QH;v~&MYa+e)G!2|Y&FIP4(shQFYH4E!dfkYD4D># zv>A?*2j`ZzO+M-J4douaMk~Hi7Kkf2s|{uwA`s=OeRlNdBBU{bBN&Jf=1_m!Bq*-R zwMoaatjGtEDG2~X*p<_|rB_==ve{_$@}jFE`brhvzG2V1ip{mw443+R;7_hy0I?bn zqsjqpx4sc4c$r>l>z_B*;aDLN?x?vsj^uFhp z7FY_

#}CXS+~@`R_rtjJVr%VlK|UuBcVi+RA<#VdhMTScO|5@}(ZAu7X2Xm@EM( zQXjNtv=_>_8-n%wP=R2*mY~&ft0bCPs&Tau#4*LLhw$Qgm<^4-iEjlP&LAcbtKbX1 zKPTJPkb50=#@Mbh;a(vyjvji|(j-T>&>knszs!&r8+Fs_myK^zoW{Su=SIduo%5uc zKdR9JN320qr|6{ya2;2^N~^1)1+=XMK!|QQ-(PHOm%7S9Iym_=W^u)czqV8bSr842 z5g&}^RUac74#Ble_{x$JYjgEbm7v1y^YP^!2xA#8rRh2lXZ10GX37GnCC;^pGuKN& zDrG4eRC4+mW0ZVt1q}$$mMlFlj}m6N`McH*2v7?$5rTYF!?_S)P_pk0e>D-;r<8H=FHdREP9f_7F4(@3~Qu={#9~s z^mJo4d@|FJ`fcZIOecVSWuhnyspST|#r&&;dR4H=Z*WM*Y8ltJ%^dj;YO+YhskiD_ zW&*fpN&3m8#9Q}+N*Pe(TgSTpBQZ^DrZ9~Y5@HoI*v39Ifh?3aqPv}eFp}f%OPni$ zJ$99Y6h`1E$dcyID2ADOSXECRSQ_L#BT-|Dmgj#}FKKv%4!ijziOQR%3NIwSp|tB4 z8K`;TZq;6*`JebAig z0Azkt(t=@KRM*e=yFz#J-;8|Pm3ua{@ayNcLqqm_KDlnzR! z>q6(pGtI=F`y0r4)tuWT81I7TIt*D;yJ_axe*C7t9-F*ma>c2t(Qc+y=HpLNrIsxp zS_Opbpa*5ODOoT(;iBr}Ti4`|NE+rypjY{$WbmNUbzG3Udn*;bOFbl*FPh0QNZFXE zQ@qPXlNbI+CTLG=IXTz)BJTc> zwi<7ze`0LhQ+dn5AHQUy+{q@+3UcmKV7Mv+E@GnMLT!a{72vid4 z&ZBebe>8QcKEWi-0bu(`jxzLqMag@H3Y8k#DvsR^Bb{059YyF0tN|2}gM>TF@4)`P9(i+x$*&LSN1!0O7 zb1=55d))GG`3_?~N6YQ5$FW7ju`}J-6aZYOdHmv5Ob@z3x@Nv?sK}-8*{8>njH&w{ zWx?`%v)t=_$a-Veo99J+0d6XwN`!hp+RM^v8+AXJtG9f|J3(wM*$AH}b5X#y(bQ-x z4P#AdDSz}PTcdD^lBV{1)vx37X0&zBEE6O}M@#Yt?pv~N$@e~ALA|VZk6~r<`@!Gm zcas~UR!+;4C4RXO!98hy53;4=ZM#&=fbIYlm-m?-Gf=>|FrysB2Yi9wWgHz%>kR0Kcojc>!!+!vHP3x14eiZS}9 zgecK_CdNP7F#o-#y@8~iSP5J^IZm%r{4X03Yh6(MO9`Spmt_+Gd!a5NAyJ(it!`z* zMWcMZ<&f-py#G^z^<=Y8x^|h9Ut_ux08)lh5Zw5(x)zaS#Cl&9PgL)tHLm+$x356x zbqul9`8dKt_KMF=qB`YZYdIgyTVmZ0yCoXU9QIQ&c0Gs|I3WYXVx|TRKDEy*n}v`7 z{LXXi__wo7syxEQSn9iWUzD?kWqz}9eixot1_2kkD5*6Tfy7eI5>afkOSNC#L|gC$ z@DbJcR?}y>Tr=L}Sagqk^vx2~bXSQUPcL%yerD0(AP&qFNJv1p!FPi{eaSpsMXC^> zBAB#|fHpnFU@oQJK7`98K^i!XnGd3)i%gBzKmHOl$a2>0GnsO3(o^quIuIgJUUCwL z@C5)&6|Z;Ybj>)kzlY=fK6M#HQX!g%V+d7UZni2dZJtOvY|TL>%q?HLLOm*&YS(k9 zl<3Puf?_Y1AL1RBvkHM{89^QB;KRW&?X2T!yu>@>`cA#eT-BsIwT0%|3BEWQ>cTm< z^sbTLgHWsAyx9)upCJMM_8x@JEjEg~?x>oo1)l4>e@QQatw;>$$O}0GhUY#CaX@=k zsHzr7P#`I^Pv!4f>U!Z6iBxw}No_2{_v?YeI|v40MLp+c5NOx|960m-vs}A~l$$!e zlDYB)A?7oE{f`-*U|nG^0*HcA4W zzr=|jrsEvapqO5NrU6m8Yrg8biB=xMz1>%}1ipxmYP^fP=yzK=sRTxfNU7aclFO-9)jNKn^#nfIGbefJ{O8&wVW3`0?X6_o)hC_Qy zHin@>VFB9oHI;%X@`K;%C0Na^{)pLbsDaD%VrQBz-(E@)lX2?d%K|l%Cmr;Nh3>~< zi&{phoy}K$AIe2xkDZbh-%ooDyL}vTDAqii_$K)rPkw7GxYHTM{(lXX5^;wsI`{@L z8H)m>vbf*X%`MY~_^=Oz#;`wkwky{N;vueASrrsZVzY&qGkxP8)7`k+r(>=x6@PR> zgQs(9X$hFh7D6gEJ0i#y*T#SNvXR(^-?bKB0}<||R>G+9d*^1^?CBJNS8Tn_Vw3XZ zYu5kb#wm)@g-%054#-O~a5l-e zeRL4WcVCiwBJaqIWKS92Sqk4-HmQ{u8*D%wFA;hS-$(Xy#O9*c4pcf6e%QHa(I}YI z;DZcr+$P>=K-eXs|| zQK4S8H%Bj99MlQQih)hy=k>EqFa_`2k{4i%ktOuBn2PdG5L>Z{i+Q4K(RK&kSc1r3 z)mt@d-`9w)LB1u56l#@Ua!$%Bhv^%rnssX#0dGLJvh`g49{RVWQe)=|)3SnCA<^4B z{4}NV@IatyQ+`c5LSjFQWQDL?lMl6xhlkt9P8ASP5su?t7jNgazh{HvTBU8}Hs1Hc z;bma{G*+fa=ZnG+#l*A`0OG`PY14d_ajl4yyeezG=`lb0u|B{)xzAKi%?gG)BqN41 zPxP=pD{$UpPi1O`CgRj-biFD#ilTiG*3oqjbOe6CK`2ZFY+8Tmo#}a1WlWP`gdAzV z(`vh4EmQDkDFYD+HWTR@UD5yVhIG)wM^LpP73God{4!qUrpBq*@5$Yn4uXLUA93YL zW!ci<)rk?jk0^tw)#psUC4Uwy{g$5TaO#(^2b2_xkW7|QoqFo4>FumzD*l1W*VCw) z`jtx|cJ4E1sB%bqEtV_ByEsxT-5M;j ztd<_|tGNIjN9g*oumJWf`q41~KY)^?X*eN^mqtXmyRWLjZm;`k1&wYNyX)`2k{NC& z4aCyx3`0;*g{WY!Yz9=^QWKs?XE+lg?cW^`FA`C!2NZ)(x3kd-xEL76I%)fNwCJ!r z>&i|N27GPT5Okz9&4&HGt036@APs-b_Ol_X!sq z$1?+1oo`9`g3Yt7ZH6VcCY}3=j>SmY+cWns^@#UXicA^^MX_1&;}&ng5s=nrZ_Fp3 zcAhuP(Pv>PZl;JpMO;0HoJi&fH9ynYj=QG~R&vG(v@1s%e1_z!|31I<=+^7C(;OVU zTgZ2mp2(=qFbCE0$F^L#AL>p&(ei}_$%l)dw8V*6)p|FX-d|k;35#vChRRf$0-^nc z$d!Ats?uli_zF^wJgTdXz?W&%XHij^ue7&V#+$2>G!o145){|+{>gguRX@d-u?lU^ z%zS~ZT@ZYUrbQg*hym}%OMUbw~F^hQ{|B>ylpU%)4>AK1c+Y+5?Tu zp>%UA96te}Za|!EcvE#IPBI3nE`>^V0LH ziTn{xdV+hg)8KXk;)%8Exz`iHG& zK)76i3)b_ysIRar#vr+*G^aD0npjb&mHVs^`Ghz}awGEeGG#MPy=?^-A-w+d+u+ag z@8nmx#8mX>%7lsI#!S0#`ucwas+)D%!}t4D>m)7v;m7?4xA7BLldb)~Rm7Ig|1+-N z0?LrZtcwl#j0#U4(iX6D3Wz3^3$DSU6EeDM9WzURPAH6XXLp9Z3tgOy_{}PWQyubO&%m!-8dh`wA@&iyxRuGGv{Y4pCy6b`+fCx}3~i%+skfUzQ2` z?wEk)Usf0ZQ1-wDe-{4aX4srfzuHaVUqt1E;&sIac-Ww~p#71`(2Ww@x5q<>RDu3R zGm7{j*yKQ|9kk(<3pSer2b;{dNr9lu*P~0+2ch#&eZQ*$m1janSv+{^&qj|zLime3 zAJW#=*{e(P@OTQ)RwU#6i5G`=(#B4NvI@*ulakt*L_kTsz zX8$zyeoeUG&UtY4*UQ_JDA$|^I;7{s1RPmtJG%}(eR-1#igk~%tss^Y(WCn{+l*e2 zT{)$sXSvJGE<&X?-S*yok4U0|4Lhn+lQvOK_?ByOh333oZ<5~ijNkN3vq8p&H3UhE z&j1x5!l%R+dgNw4{p>zqMG|@);25wgZw*^UTJRiQMRkCx%a>;Jx9(EXxu!;l^a*$R z4JBla=ahonQr;QJY|I7a?r>=dx{Y>F(EID|8~?j15c8n z-^L~|<)p$MJU*Wqae8z0aPGew`Z=pr-D!uzg;~Yhv~#)yb<4V@#*F7d0G?O5EgH1L zN!S84`NVPWc56+n(`v!pcr0}uZ+AFW-5`eaXUk0?c?!1&ilK`;N~fRYVI|h1MLUVA zSBXv2^(OTjqLhxV_S~C_yzyi9ODd9Ke=|C>$)+wrIBTZvcCMP7SJRhJ=#Of(|u%HY9~CzmSz&loh!Pc)N99Q%n+L;AQZ@AC#+}Us@tcw{w9?axH@`! zGgxS|8aEbcWzRFl4-)aGz3Ak!n6ruvQ82(g`ak0DMnOv zWB8Mp3qwoqDYeKjrmH15Y%OuifF4*r&2~M!`lZ3Z2N$M5m~0_l9WGrcucBt@dRQA0 zoyrhpJ->;jo2QSmgXqoMi-O!}|4EZ2*PoOFwhiGMfzH$B`KTpHWeaU^Pa6=nxT&^) zuf>vGIK?eLf~|2y(tTMmnJ~iI8RqSn6_>yr0+gDAN^;HZCh~3B9S+eJqChR3nj*m| zj(F6jmkE?=9J5T87`0-e%Q4IbEyg7Sx_XkKnEEE3!DR3=`-^!_Nso#EH7b1m&9I(L z;pAMS0KW$am8yTjyNbuq@>0VbyhS11Mfu$$tpqyHBK>2N7*+qy4ki_4JX7a|d{@=K z2rn=@(tZj#fYgT<7SwKEz$4wQw8iShOaWGph==82c z`(4DX=gIZR-J*89XqvC zT$g5r!jbXEkA)Z^L*ti*dY&)abQNX&jl3eHKVz8d`S>ogvOMA8R5RWl6k{J&gh zN-SkYz7Z)~Wc%!;?@es=Xr@>l=7NyV0cR@KAakpYbb z#4^3_#4w3o3HEKgbz0$MD>TTy0O5G|b7_?9qkxj-MX;0dU#|>T*PpFZcUbaWy$BuS z9d)Az`gurU{B$CIW;OG|ua*GrMN`;fm1$@+T+1Ouvlma?@}}O5?{|0m`wcbEbVJxh zcwFR5$MtE>+*0NTP8=fk5Ae}_8lube^^;psY57VA2iG-`QY`i$eFNN|rAN24P5ENA zTfDwzngx&nIEvU+7dtSP&Lo#sxM;xjP@5ZYGav^XJ+iKMy=HPfra4kuN3 zC*ws#A5Dz6^`1IwYk(_DTl4fEo=I7Wd)t4ie>O`tv*jsacA_cbd@C&69wkxea}Pg@ zPh%TCMa8$;V-q4cX$U$!G^~4!!R&a{N2F>wqNo>gO8V;uQTy<9=bW{&tYqo?hHcHa z`s_`+uT9ZX3>MLRwn!IZ?<)K~lBGC#?o**V^o z?slN{1!ZX-4_I<2{Zbl06)(=uJ$;%gS#qs>EfhSSgEvkfif(lRf6{?EcwNOL-Ue||oJ($`R^^$f(&thE2*T?2y?BM#3AqZ*IN0wW zSfQy3#iM6^nNEzzU(SFZxu_L0B6-|B9$IExWc1ho%|;fAVeY3%aWHolD)ssH-MI_R zMRRwaR?pijvq;EKY3rZ~uYOHoiwA1XBZB4TxWZ7>>Q2xo7(rRXwSo~8lk))iPeczL zED_QD!p%ncgBy^mZ=*2(jnt7%DM(k#5{N7upXShn<)Rk|_Sg5Iq!+N9dWrs)K$?42 zfT2ba%!z;uc4I@|nMZ@DBs#P2Mf7oUjpGu)x}5z6wKKkwu#zELCx%+B0{-M1=8Vg7 z;4wH+L?=d#9!Z^WhP?XR;nZf_orqLzx{6ifzf_oUI}vd%KjpCR^lR=9K^m@FE@as; z|6W{iJ-=q0hRZ8QG__631{V2|+=i_GyP;sifiEn<0OMgN7gL`vn8IX0IgA`|$RynH z#VBCC6X2`E8`6X?$ijcy`2fWI3B#Iw2G*T)fbx7SG-LgZ7;O1Wh zBt@4+p)g`2`FG!B{^w1F>vv;ey7toVnx1+_e}1)tEymgEWkI5i5=oA*G~=J&y@dun z6j4(fMkXE#(N&b+k_Pc{{cMIK4+;tN*NrSX45o!Vv;ubrU&g-1$ci+l#=O0Jw3^Wo zZ6ian?P!}k<$!b>bf5!+%nT<_(?C1fjP>FUDR%M8v({iCfqg$HECuJhUvZFs(lM96 zx)RA`+)S)kTTqTO#`X7*MeJX=Xf!}6U}i3f76@R9rzZx_`M0u4ccF(BD7C|q?16u#VA71lA*#JM#o-Eo|RcR3ZzzU%+yYNYd zhT3`l?h}<~YYF$6($yof$*P25d>}$IOzuCBlfYt;!Y<%E4-e`X_%Qq znvtID-CqRZ;j8H`zlq7cWtH_=MOhq$`2lPiIB?{QWQ?Mk0McQyV&W-2t_TpqZZFKj z9y?!%V>bL)&pW|HUZ*Y&y0eI@uRg8`kvV|*+*79iOzmIf-Hz}2I{l4GeGPVvtpxw* z%8G+ZCxAS@F*)sbtxPD8`{lD|XpbNI!D#7b+Sk4U$drI_*C}`{aT!Rg1-78u!13c_ zo%Xdj@t~}&un8}H=0v#tDW@AHC)&g7hf zL#8ZyoNUi0qA}4@uJ<=iMNL_K^w`SO8awGJTWs$QFea*cI0ZHlf!(x;9+T^fcq`e6 zbn~~}avK-*!d9~{@loT*BnO(RSu?LG1&K6)us3!)YCn9lYH>Uwez(f1m z05l%irSM9G83ah{R0x0pqcT;S#29CvyFLGoFY}#v(xV1Bh-0$ro2Y*f*Q4yF)tJH@ zcjGH47YP!)z{(U7w-tuuL!HHr@@I)nC#zOZwSr44Z#8p8_IFvrsb?$p7#21B zV*g3=fLwCppmq5^9^O}l35RJ3t%`HyCwbh_l1*LR)s!AWfFnE%UdDbSid4RJlqxXF zmZxKYa>SPno3?KG^5DKJhe};WD;OvewCKQMU0ymIpVv)Rch?A>F|j3fF01of$>^kl zGVPSRK&6mRKC_`(VpGSo3d-Xleq%Y!0UM|s@$tVK#!V}?D;5VR+V{BXenz}%_G?T; z!~86s1jB~(_?_P|;h7?kj|#Qk;g0%WHhdHr!wE{j1tt##;t7>sza`;*ypSpC_%8Ry z-dyfMset*}pdArtXgP}_2t<79EkdBT3?`P3rd2st^v96$u7vRj^^W($;7S&^&55cIpQ#@%D)x+GHG{`8RVsv66FP z_ZS|o6J{fflB*!iF;+>bQ_f3*6YeTU7pVUBhf|mEB2-rcULf*7)a|KUQE$$D-vacZ zZj(h(^t?5XK`XbyspY`>eX?4xFc&{V{N|fzU6VGl?qzj+RkxTp3A@t$<~O{a%@I_g z(?eUH2ap92`;^TIQG5+?W>$c6$^t$UmFf|*>UZT?=zma5gz8=8y@g+jxaJYHo}wil z?7s71Wv#5nMm_=#6J^iJmPQ&OBJ(c{`5PuG;`Z8>T4$seUo2b?ynRg_X+LeWl40Lsd#+W98SL8f%4-3yQ;;^$uzoWSpPCoVkIT2g43VGL!V|NGvpVGeJSaqt$3>%a>Y@Yh8uXaZzM+x`OT-uq$a)pJF zgUm{tQ^wK3zy`2D6eCF?Es53gm%M(>L46-!RiB%t+aD3zXXkg7dO9CH4OD*KJ{sr^ zqkmcc&LO4F!(6!M6U8i6JM6z3R%+zeBb?+!346HgN8L(d$pLzq)T@+U(&qD)si8VX zG~F#<@^)_2JnS3mQDD^LwPVy%V9QL}TVaq{(t1VI{kn6_fe%hAS%lHLrk~{$FYe0I zLB6DA7}Pe!y!eRts?DvN7w)PdB3q~bNSC9HRboK`#}rqGqDJs^PMhiDD!>l$CAiIx zKuK_go<$m?D$|R5q9=Q%i?QeDn{aO4WxIec3jf{UMP$&WjYb|@^~V6edkTf^!j%H@ zJ&t1~DqV$Y70>lbD-Jdea&3&=jZNGH%X*Jmp0+DuJJ=M8M7v+3YL0>*tj^yLV}7G( zsuU*5X_1267XIv%j&oMjtmF*4+eh0yR=iWhT>LsO|5tkm@c+faE}ma~K)JQJlD@yK zkWhDkCxHF8hP~Zj$Cq*hk-O*S`=5useLg*XIdGlIrVoE4`BU$|8)&nh3c+V2N}{Hx zAm55sdm^`TciU)meUG0%Ro37+nMX43&*#i9qt&O9&l1Lv6u86Ly)~zBb!Sz-nXVNY z-_iGK%HzSJ#FSLh3!-t?d}_!cmH>{bur9CU+%g`MIrc4|-T(GkH^}y;<$O|g1uC_% z_kiw6!kNtENdg%n67WywscXw%*-V65XGlZ@A7EI^(8QRXy%UIB=)MR|l~?0ZD*WVj zSTHWooE@ZE7^obD$!1~x@5Z|znqxf>_pfh+A`8nHDb{iKI1^3UiqO7Zo%th@Y-H@$ zB|R`2nLT0{o0KYX9IWv^n@40VRwTVdNkuFNW2md}$|K;dRmsw^p190Ha!a%UdEI8l z$tXF|{`m|NUPx4aH70Z53d}vQ{z~3aYRG~4<_|Wcraz@nvH(-=ZD}Vrrt*50rM*<~ zs@$K+L7cBbI}?BpqE6sP4vRBH21t?SM9L;G?XXTZ*RQFE)a9`4p!p9wjjTD|fElx> ze$5z0x&1nLU29%W0J(FguLq8Pbj!SiS7&|tYlxH}P)-N(-I4bLOkLD^wd4G+rz7S% zDb62W+~?)lr@0e6%E@+BfXl(cV|?zOF46Ts!e&8%Y0E4=ZF(%PqbIBzPqeLxP8t@(?h3fb!t7vERjgi_ zLW30)rIVBE$tenbJIYlvQtr2kdM%!@^HYcnaR%uqbk7V{f4QIyg^h}%Z!+u)<9G~A zV78u*i;Tkj8F&FXZ5`QKb+AI@2UtoZfCbO&CNLudh;{I8WqmI5slJ7T|50?FVM+IW z6tBB!X70VpnLGDP?=*Kxjx_=EB0%%)L`loR~XziX(A?X>LK2NRj*b zKQDQ~|Kj3;-#FiMK4%a3D;@*EpO~i)Giqm>&r7Mqye6O9$voEbeOwWtZXgdz_Zsl_ zXn-x!V@y>)?D+LIEjenf z0C-MmA(dr_Mwf?YxMY#8gR&hs^NLD@aE6#YFdJ;Dgu9Yx`F;UmrH&3JShEmUBKF~# zcs!HVkzq*CXHVqHK*xN&J%}JHGD&&Kl@gV1C&*@~gK!10_7rfr&NfmbA<6i?IWAAe zq^3PHKKLEo7Ad)&bqVJqs?9%jlF>t(!JciEYo80??s@J@#(5i&{Lc5BCgt-TwEwA< zmK8$?U$m_Ce)Q#t{4~j-S=_wTUYY-8j{k4rn_}#}0ok5y0vl)6R1>0Yyq^{$(e|r` zdwgvtBQaK~VlpOpR1GzG9cr=t7`J^Y7rXcSj8`dbWK?gu*i3t3V#KJp*$%OA`{?%F zZUI=|U>~F-&kFs0y^*Ab$+Kx~>F$`7{oVZdS?;4I6jrvT2uhpWG?B^hjhyI+Nt=2v z?4f>sX^18;6>=ZsG%s6o5P1iPqymz@mfj@*H9?2t?HG?3K$aMb$W_Cl7e`=J&C5l% zd6JqJ*9I=Pobtp(-fVB<=}w?2z+SF{=QkQj22F%z(?_$-q6O-8wY8IR0$hGYUW-0* zf#;ul8MO2RRd_vGqcx-UAVsQgRz!cnB|eabZc)l1(f&)u2{3Q##uPLI(rp$~FXw8N z$8E_juO8xh^*pcqE(l>!E%(w`uAU?S0PaKd;#;K>U@`&P!tr0GhD^DUgkAi-r+Y(u z>j?wTwae)wxkgy)viWu^m9`_UaO>u3u7%X|!s?A1x@fq$8foRQ?lZI6*sk^kPo&cH zQ`B6AOl{q>#u@k4wp8bqIMeDJbW0+Tayrb~Obr^uNX-1qeLSmtU)Pw0{H$K478QN8 z|13xLP{{OJ9PF^%r{Bax$@{^Ll#Rk2da1(rQ_L4%s{1-97V!n=wIVuWknxH*xmrb@w~x?@ykis1%Pde7;O92Y-iExb;^@y)THedRLk?-3i)7jjYu}hCB=BBM z?-fwvkxF%2adyY+g?kZHj6zI#H=6^UQ$tI#ls7gA;Di_dUGVEv?tiAGjZdk*Go~ng zs8gNeoHyv+sb`N-yf-vzKilv$#au|z{2bE}uScBZo>=TrSB?xz^Qt)5JE*Ol zl1;Fy%RMs(S8M)!XX@Gi=tZ7)K+eUP*Kbsn>)Byw{JLp1>^uZ=qfa|AWPPjCFf1sf z!c)Ar393=Lhek#lo;ST9((9m-tqUS_BndFBDTcPx@;$%bI?;2Mc3XdFQp7)05smjo zzP`bEMb7wq4JoW&h`g#IZe=vw$DioxU5ZKr@KXy;e!N%p?^Sja$)-GJwfi>qRx~QY!S-?zTU3}dp$+Be0KD+z= zBwS^{Ut2QGHfbUdx$qI{+`!tqcI+)flr5fTOb!irTJbUc)L(c0Xb-3J`klfnZk&}D9 z5?A_Ai6oab>XE*Ho>n^VC>>ma5unKWZDd~21wGe5ZAXkuMT=j{J+wt=O8w%?%rqXz`Z`tcJo z<>zNYT`sPvgBDklv}1D`yNtA(Wbag5G@pLJ-b~PExpwxjWu7x&*!#=hDf|8rZfm1A zE-<~OaL`aiVXw|*j4TXyI6$T`w@gK{z!v-4K?$;cn+2Pb;4f44CB&2V@O#TcJ{68T zaigHd)SQjXu($=`cP3Aicn9vmf(&L(%-o+e5+~!7I-pv{wL7_g#LbBNr6p2AyPWND zC4M-m`)ax(@99EE9xIMbeS6$J328}BR03*Y`&Ri6e+x1%>}uR9B`)gDD%FCF=BL*U zXZE}ClEi_NoXyNTjQl4FkCZI_*0B6bA70TaIHf+b0eJVDy=7pAoO+`DgrX~=`!f>w zl64!c?yl5Q-k@q(*B6IHfB9vBbMY84cxMBh`p8jBGykKfQZOv3&^%un+ei z@z>8O66M>t&^AK+T=PkmQQYRq?^j-r@=V&1>qcKXTU0W6t4GmY5s6QiABZm5r^tVM z5rPWbb^i^CjnttH2{KMKJ4Ssi;KTZC0`Pm9=$w*=cac}#tK6&nF8#PZC5`vYhFViY zAB51y;JvTDFR9_cPVWy_Ag(m52`1uN>ItBma48~|>NMwDR_HJrlH1bIF@+JJ2tE7~ zy`s#?5q-2>#uKwQjmph>^;ykVw_ODw6UX^V^Br-Fa##+B$^uTU9ZvhlV& zam-_FUEIzhyFfCZ%hEPFgpGeO%fjzTR8cRf0GdO(F>*vLkH72uBpg~!Tsfp z+8m8$M?2%@5uCl}^weSz2|eg{nF^3!qe~%FU7`t8!|(N89WVay4Op)^VOygtb`271 z9|tsA*@fGO#MaDd3?*JmP?jj?8dkf@Q-@aGsC>FyC;O=>$bVGodiLK3=c~6!kcE%xqBpNX)3T4bEmQ72buduz z4=mSTWwwz*d}J{{31FA#GkdY}--QuDqrFgfNa{Uhd`!+$LSyS(rL>mt4bPH>kfrtO zj&~PEB=4n7y|fdF5C`k%xFyy7P*$PSBtY@iW7qtz#A_r~Yyr*!w*?HSqc z2T5sFTe??hLD~wVYm96(V3LapOMpi?ue%X}0gf%9>$gqhRgGt)n=kkNmV z&@%nJJMg>vAAQDnXYjegS^p=H&()4_zL!rvlGi+QIWi_{rUtoXAqaDBl*eo=+|~Z5 zKSEiuSrGNJQr6xYo2#Q}U-C2m1o-MoDG-7xGwJFhilOrPoNXVMmZ##?%ct+AwWGWUZs=eQ#90ICDND9@Wb{PWKn?Y^M*7?;R z*7+)@+Ao^N5%WcOUnv|-%x#)NolU)@oZ0+Nv4FOkb6z~zd-=SsoH+R!E{8vpP1%{={bQr&Edam%}3l~E`_*j zk))&ydDY(}5WW&=PYM9AI(3kd(~wmMDydduAY@s2gDJ#WeR#&KJ)})eY$-Ex_^c)A z?9pVh7cpLkX)UB5f5+ekS5+{H4j?k*)6L{a4o`=rnhtEcL+!T(r(7rZht7;vKh!B@ zu&2Fqb4+$FYDRruT&i#mZd@q|t-o~rXRLU{?t8~Iq|DLZz?ezm>b?%?44YRTR>+lEH#jf&_a|>zc=K^F6TaB zTz1!pHd^>E>B-67sU&!te2jxy>AROXZd=fI2rF{w_Zc;Dy#q1ZNMhdL>v4Yw_cNW! z^6}|0b2gbE zE62;c@=OHA+Y>J{-Y1j|7phzb)@f{P{(0Bw0=Tr(exRjXB|pGNdAYcc_5N@R$8L~1 z2Wd#^Up+Nx{?G5YCLq6s$tk4nG|ZjyXi)Nr@?6O@fI;Tn7h5@)>({?RZgMVrRVSmj zhx3+SI&bjyHV_x}bxzFTWHAE&YOOhNBi-=Kgt_aT{X1VY3o$`|*Gd&Q@Hi;epIUsB zV0hU^;p)@%xJztc(TE_fWC2KVCUO3>?QLm}RgtbX&`~wl7dRN>Xg|>yBXh&Jl>4qu z=)C!#2&z~(f${X$hv&!JrMge6?#0V|&fl`MX0=G23IE841l85+o%qq{#Mc-7;vmgB z`*N;Pul&jxtk&kgCbDqV7Nz}r>Q+iH`qmOh2-bWS-_JDoRsKiXt^HE^NI$9{DdkT$ zN^YN#z#E}yJnuwVCcQMveLM=Ek~!>WWHOhN;TmRY=`;%UZjGIL;)5}*;5$9sTNDE> z%YFm|8nlemsF%*|9ja*N{fB<%+YOXsx)8cPT>0jwB41q^o&mN2%MpkALo?xCCd zQZ6S#QpuGAfygp5kkBmUK$(W&_0p?di0^%`74T&Hf4Id+|Ka;UJ>j|JrlkKz(N{8N z*en}cRPiwpvS>BP(^7n<3O7vOJ2lAnZ4scGl3jmm-hx6LJtX~!{RPfw2GTJiIc!S~ zO36~6a$Ij251m{)yW&ZYKl~w14xdr>;rCNoWrk$|0MJ5k#uLVPrEhTe%AG%RIEE3g zb{Bh3vOP~qSb7@ zQkUTnnS*t^9i1qr{9!fpBleO@)iwg%5{kaJV^bpflQF^M3cSI*KoC(OS`IFUm)7OXvF{W8#4SD*IHQ^OyG{sAG6B zzwO0@vAeE04Qg82yn^OIeRKWRrJRynDF!^nw%KBYb*1g$d~qsA`oE;K*fS~P5W*_w zDy8bMKTLpuRF>zL{0TIg`)~}zL#d6Qfx#jgmNJ8hI@0J8Rl>d_3 zv#0@YuM&;Zae{rRL4FFJ8g+S|8OB`DVx%7<{6^P@=b;248x=dQs|>li#o^ahqto*E4V%jF`W+`BOe@y6@A}fkt~zHs zvGxM_%wr9?O`ScnGYdFpA=wP*sZbaupx+XH^{+DNRl+rhKQU}1%RWMv;sYY6Z?P+M z_YvuzZ5jLz+{LwSmI0a4&Fag4WXc*Bg+CNsYuajv>w9+eNc);vB}lF|VWM&(=cc2+ zd9!hijiW{=xz@z8(*BmxOs-PxD7zQrr}oEsjc~?)utjmjV5QM7up4cIyb@_V&C(ro z=iTp(&pg9}ckmtt1rW&)FYS;~j-82VpF)d8sw+t#5w96_YXN46Z{Dbl{n*ZqDXpYP zgfO@;R%(|E6e|-cbf{)lZg=SBk|J z@4Re!3ZB#w^v*SD%Ci7Ygw>UCjv0L-nf#sK@(6dE>dN=d&+bRgK~Q0_N{8$eI_fR5 zD$+L}D91aDf!{B)huX(=`Qm2FkGe}Cxe>fcTB` z`2IgQYXOP5&*1L(u=do7c-`p}b>$A*+2B;mGhH)-oso&75z)-ejoH$r507huP7jHr zHm^W5x`?%fP3(c=fsWgtX0?7}t>HuxZ+4}B!d3+zB2pH5zns7aG*s{&~liil}EB#piZXw=Os`VLTmo~CB-`~21aiS5qF;HU#hPJ2Wcs3O7!5kcRqdacR zMSA;7WURLycQujGQzmdQku2ns1@yu{jCONq5=;fHJefO@K4)`{QuS=j9OPz+RXNmZ<2 z>$E2?rz&@vo#uzxWaS$X#PzM~E%XQDTRwVfRAG$`EL*7K<-D3`7g;XY$IL^(uO_g3|n(_K6IX@I?LvUF{RQE^WAGm3Vu@u$kE!tt&^Ci)fD=n}s3I;Fp7}Ja&YO;u4xSc1(VU+tJgLhKp6Rjx~WL1^%hj z{V00f3F#kLEukGTqG~LssPav5$@iLKkM*RNGYuV6z=IHq}pf z2~jJ8i?+aR;em|+xJy!^NA2V7XE$c{4{wZDe4RtS2y$?Mwm)j&2uhglm5|Zz%9Fk- z70%4Vo?0ls}Z9u8i;zR5(BrnM0 zvkv1fr{o0~iou!S@jc$y%D634#WJnPNYjqp=whPl;!I>uA6L6YF9FY2)?)o7dux2U z@}|}u3u_?gs^e@~V;>#gl&dObW7CdG{|-}BK**NDs!)rSwhUvRmfBn;OjimOQtOs~ zPwfBZberIAn(P%XO3lu=E58Jagf@?Nnm< z?*+)c%5%Vz60HK;eN1%k(Md%{<~v{hJi17B<6isJ?%qQtSclb&mOB1yADFG`&V`T*93hqoVAN?( z8cBK&5eoLt5P5gU>Sm@H(w2Qw7M7}s2QqpppJCUnPBt%{d-RdL;m zFB)d35>-%6bZ9O*b9+0y)UVP$^tW*SJOXT9W-tImXZ`j0Js7uTDWAX{ z?9-}dFSQ5Q9JMo@>b{&2hJj|wVYFAR;EC<604K)Ru(v9cUnr+1BS>Uir9 zx1S!wg|&qymLlBl8p98yAjySvz8JoRT_;82p8*Db)?O#|w(h9|t$_0FdDQ|Lie06> z7dmjeK#MqA+ci*PpVO5+Pz$%ib1!52F#>I^anliwZdg+UXs!?!hz}_Q%An($=@Vm$ zFc;z1(`>NC9y3GkXQt3Awxh5f9LK$hzPsjwx({xyCXwgDSVn8YnaA|J+Ep2DjlJ7>!cdO;5KLH+On!{+%-jKHEHQCs zc*e9kEyEzc%^i)B-7=?TM?EEu&0nLh?caxbr!u<`RTDbpNSb&cMS6w$fH;wSWhka( z-h~oIP;d62ssi_yNV(aA=7?oheNydDAD=ZrzM3Q45dM{E|2qi$9?5!Y5oR^?GBVwz z@&~2E?3XszHckFK8wjngE@TmGlbYrBK=d%h^{e&eKj0Q~C_7X#KPR}0DA0j#>y%nQ zzw{&%sx3%;Nc@d#$rJ0qce#bv)Cafa_G9?xs1H6J&bnZPd$9dK+YndGnd;L@&12Q) zHXoO3X({%N<|&4@_{K?hj!x$RB5%vz5fi&`uO24B2WzPW1PjK7u=>9CO{2Tf5JnJCD;>?{ki9B6g*goxpyJ5vr zdVJd>GuXzj5Q;e7p@Kvn*!8_OH5Jd~zWL_ONjDDU1mH3lQ=CLdwkf{0b|isX!PtUb zi{|F!N3U^&t_15f1N+nn2EMp(=whJNTxXRM)_(l}o|{Q$zwn&t6G9C7ymr zCMhMaccy>n5|7GeFkzN%CfOu%T$Qs%s3v_ai5eE0&Z@1De`6v$NN2zOy{&tKby33U z&o778Ip#*KcEfdHZl{H_pMh2#`=?n}^UB?qpgdmNq@Gahxf7O@oo1$hPi3-a}lX%at~u5%R*u5{YrnCFQa5R6BlPd{Pe zL7hA@acHQA%#|5=0}_-l67I8UAR(CBdF5uP>TxJ*FQ2cDD8+Xw)pSOLf8?o@3- zN(&>amkrW3ZI8AxE|{Q2f4T8TI{P+uQLGjpF1^=jSE5+M6OE(ELBGIk&!mhL>?lr} zZ%cm|DsrLX1N?nl!tL#h6^4a5R*u!7BJQEtsFZ*+e2vh~e;4SweaFoQ-6bk$Gu_0; z_l-+4<^ApHP8b69-+@r^(xMWrEx&Bw7q||n^2BRV;ej0Zs>76D_At z<`X*azft^g-S~;Ee~<%a%0O$!GF{Opi}IWUvH}YLt3BeEU^nI#+4t9zwcT8A7-W_z zO@B|k|3q~qt~XxbK_(Z3sF4SA`$XGi*F6{jxqf3h=|mRq>=b2}w| zmMfVsp)iC(=CYyWgpi$s@1^i`55r)!BM&XFbm@v`ggtbinGC1gS5ySVFlfgspq_r< z*fb%qL;bGGF&}>$YV{AUxe;sTi+2A^8Rn;XekS$x zjW9#2npN!5$UPOoElnETlQkL1KLm7to2*E4n>9CP0}$NHm7-S!dKq4a?{Jk-0)vL>H|gNwn;IpJi_JAh6GHA4V!aw^Xo=FhnY)vHx=8N|fMQ>^=&@6F?LAR5aS6F zB{5%bptfgSQL^^S#2i^UJ~I2ct@(6)sQm|u;!L`+f$~Z$!bb8_7F?MC&wPEMAO60t z#{p7p<%MA9U)+Pc83j5r--|L93F#Ce#{PY|wbgw=lDh>-v>>_i$1dPvvdJs9hw|*l zwiLN2y(Oea`>s1aD1&|0t-P7aKg!2`{3IqBWt#~H2pZ9EJ)Q0ouO)SI<5w5D!BgTS z!&oiD&n?Y0a6h6n$SgY=qRiC-~gLMEN#VrcLh9t6hAv8;X@z(vhRb8V>J5?x?Db?(Br7i$IioM)`fw zI`+iHvk0L$Ddn+12cbdyu2p4B4d7-^Q8@i^koU7#IV%PJ2g=IYl(Yi^KVafbyz7cy{cbbd)k?L@H?GlVeARg-@YOZ;pJi?`C)H+qyTC8$t)ED)G(bHcZLL2;CNd| z4=ueA0jp-=&~lInPAQb9Y}ZFr7O}OwDE23lYaP|JHR!Kxnl*GS8Bgc_<1ay;=`G@# z)_^IaL9Wshlbi~mL!s!dmF*LW2#J|&ly#Qb(C;=<+Jk{she*!k)}VL=qwgg<(;@e) zPRH#@Cf3{EbJR56Wp9jN&F^{H7SEH&5Jr3Zo}2!o3~dotGL3}tc{o!Jj)jeILTN{x zZBh4>68by>L)p)@fS;Ft+MIA5N)PdvkYted-vyqN{4lcu4-PLQ?~uX^R3&Vq zNlUJB?T(qBl<0_=lBZ+#SJT+6<3O62B3LT?uwh?#^=2}Uw5uYQ+h48nn?@l_gRPe& z+O8hj6IIhXqljmZ=DfAI*Sq;BKv4cFra)vqIG+>z2IXVusPbi7*ecg_=Jw2h19@&$D-2O#_&%PG zb{wp#$JIpJb%9cnPEQn_ud>%!m-|qAcTcsB0IZREfW7kj*WhVx{P^+Q)lSS?VHPnDil7*EJbPE{@jg>KE*j60=& z{|UN(Ae1|HEF^ZfC!=CcZwD7`*7iu}k3D{=T>!={j%#baw=SNGfHO zzQTr`v!7cs1U&5Q?OYoX{TZ)q2x|>*e|8fD1ANV_m|yqlNe~{@b-HkA(Sk}-dJGg| zvL)xr;~nOYY94WQSK&^?P+peXn|%&SaQF;Pj=0yQp2l4 z^El(kk=Mr3oQTcmVd(sZn779)ljKp#6vIrIN;g}ltG94x^xe(&`GKFD(O4Pv2+ePD zkBvjlx<;k1GH0i}uAN*KxNzRk?8gjkv495<#pAT^P{OR6TRR)uB)oirN8 zj>=0SeM)efkZc_yxO+j6Ah_pzrVIc7>P3$HdU_9W)`v!#=bZUaWu`NCRv%E3*L`K2yZEo&9MXHN;AyQVgr^u0;3?5?F<@Jd?}0G< ze?<7-g~pW1D)>L=r9R&E7!fFfsL%fE4NYR%R0dHTRF7K_1Z<6irS$;Ff{oN~!a@&9 zL_TVd;Z)sSkDx0&6QbA=4qrQ|euoY!tz&=ZM;W(au!q4u24tA*I_KjOi(Eg=zrqwcViF@o%#X@uMUDqPr!+NO zqcEY{d3ABpbf(k&OxSbfHpUJB?xeGTm-X=Hz$``lm}P#DC#GE(es3n^pB8j(6dU{! zadf~2(e7H-!H12KwtxXHg3{P}J@(i>+qzP&=iBYdLK}An^9}0ndd@di;3ax3ALnXz zemM6(hMaWAE2L?SG=w{8CQ)p!e))T@mCMOzBd9bYVW1rJsNFMo>v^$;(jjsKMGCH% zFE+C&)sV}Sh-9K#V(ScYOQ_c0h0hEch-BW5T4R}6r(Y1_t)iQT14tgO1sm|bwn%b6 zQtjRFPsq0KJF&CBT9fYqaL<1i-r}MLy6Lx_l!?Xm!}azH_RCOQOdw~|3{@v|Yt$#i zKT&w-*_S25%5Ba}MB37D6jW?B-$`x;IKlp-1v-;}n^W?LtAk-2wa#nRdAsk|yRBPj z(?nE&{pvPG0fjE``lcVBh~l>VTPu=5!1@+G#`^vYZ7MK|QqsNxs-!HMlALnfgTjg^ zn!TJFAeAM}`WottVpIJwt~c+^s~MO(IK zd)GNNibdVdhr6Di|K3sBAIYSqkaPf$=-RmFao@__>AK%O&j)%Z-9uk<7)<5{`6zHk zAC2G*KX|=@N|SQ~*pWEsbJw8L@w0oh@AmUwyO|>gR$Cln$M+&{pXY1K!gN7Qliu92 zA?fjfyO|WjAr1C{UPcANB7``ju&r2AGuq@dlMxw#7H4%LBI*hJfxEht+#(9tZra-$ zu#NFnrniN8?`RrmAXyO10*P>1FTFXrnO}N?eY&Eg3koq|{(U z({MK%E`M85`;uY8P@?G5k|$lmp3P+NToePoJ1U-QGXbs2Ea0iLNa?pqHEK0iZan<~ zHxRHgZf(=8v6Y^!Ka_nEnqEsV$yS8lvaaf72?^5DzKZ%ZQ#sS?_QTtNk=I;iq2fv3 zOy);{8+rRe>JVbPU%mpY- zdo_9<56c#_fAo7cE;2R5i4!np(Ru3&XRhG=?*bFQ%JPX3T(R8Iuy%HBIn= zcRYj^Oly`Y>cLt#(JHx{E5i|B;>Gwrkj zeWzDdABO@8>5(zyhK4qf+RCW3ERRR1v64qmo}d`4ydT1`%Ed2cm#1Kf2IsnT!NPNwM~CG}RHf%Gx7bnNX@jhkUQz6`Rf=X>&(O z<&xbI5Sq%)UlP%6rxSq?ze(UUO!&M(LE)`3G+azbI`hqsCs;<>er z@WrHHDME0ew5M*3r&VQqy$M1r25*xiF8GCZk2bEuqRp`tM9J%Ct(`-*cQQSAh2N45 zNxft-?Tfcbf6UXJFXTZU)iCrSGX#$GKYvD^M^_)CCp4V8s>u+5b?QL!Xhg`tG$l3h2z0s!!1oos2K~&^&p=oS|zz8vcY2S@$-g?3?ej zg*(S8YO7lMcK;^s;TOb%ybk(J|JvVL-MmpQ^*no7{lMjOA@r>!2xIs)0z`~! ztf+reQ`5(^xAI16+=J`bH*S2o8;O4DvA%bQ*@)q^2UhAu>@YWOYY#&tM~Y?tGmk{$DJY;0<~IFw&uPfIL+nVQzcSZoMm&B0%G`at zw`|D~FFil%ov)kV4Zy}@sI&Ht#&=#0cLjFp9=-0hT#VM2^Y=Py#RBZ@Gw_EkNYRNx zyw3H=?=M>lePu%qZ&B9GGF86+K1_JoT&`hiFCcHWmL`pD@s=i^wo9WW?O*l?l;VYCwviXM~!gw~L!oG*DCaUUNHVkI?c3 zo|`#%;5uqHnHtHzqhV0=33f0yMH7Lm#Z9|4y{8oSgt6#{!ZnrTlnXw=jq#(qc|y+- z1PK;(VGR1wx9Y#P>>FA#ACC!ve@(^5woN{g)ExA=*BX?vDn9R;$IO7q4lC17h(`fG zQwlY|pHLXn;kLw4PD81|wW#^YTgQ)ps|5qYmb z#s~<5XXsnw|1SJHxwuH9TOgj%ZZzZhISHK6S`XaMG=a}&j=8vvi$oJ6)?41(pO2I6 z^nhzwJ(+^bt=F19WZGFbi#`J4pN*XlUdVP@5v%R;Ph|K!wfQ>cfJ#8xJ=pVgE8yUi zwoE~j{mwsARX<0LcN4+s3sHtMaH%SfNOf#*JtIYjJVu1X2M^0C%iV;19-K0G^Qvlz z@+z%}@6-yi?Z1V4NBZ;n*GweauE3pXI6H{~cPKTfzY!oA7+txqK=sYczxgPW3`4RD zq~o@B9;jglth(B~3=|==e7u9)k(`$hq(2u3q96RPx|$6MBFwFxu5i|J8>oG}Dw$Gh z+4$ADTGgafvI>?`&>k~g|E9A3nD2H}#nrvAds^g%K^xsuv+-G!b&=241m-)%x!O3q4_0ZvPr5 z=kSM_itggoAFEbGogq-H4mVI(0~pWu`)z19DIcKK-97xSKUHlb8A$mhhXgz6POalf z7W!p5Cv+nqjXG-XbIiT0$pHApxw;3V5Hxo4yaD)uU5i|H(#8r70`LW+?nPCbxIS{* zd0H*l5RlDxY_q-<@^`!Y$l|UM3+nL^XB2!P1Vhw`I|vSPn- zeZFyLYCctw^s^hK(+9ZqT#2Edy)km|`^{Lfxk6)BJ1-W!;-wF$L$)nTyQ~0bf()-s ztXL-fvuQg|GcA>U<XJjrc zy3b7=?&#nvkVD+j80CJG^$Yf}*p0*mZ5yR$uOa->m1wg9{e`@x3_7s}goZ^En$HV+ zI`xs3MT5cl#fEPv}sO~a91CjVJ{76S_4y=#Qo-%jmgKE2)dk-`0orH$T>q?<>rlPZ7!4bxF zpZ@-LVLgh<8vhleG^2DVNEMlVhLx=i2IqM(((Q7ps?ykJWR$JQ>8Ndjaf<;RX{U@XNY;J7EGh=cJp##cN&W^Y#Fzns8sol*BOi z;Y=T2pB(iMX3_@_x&*L1?WDB@n;pfleJlJVbj-o6bZF_rmeKN|vhCCCbeAhJ%r$~; zDx}()0O<(f8&}{?teRu~zA;~5AAK|^;jMGAFQ+Tx^2(J*a_CC7O>Rs96(){6I$o1n zd}{?V1+dmEku_?c=!8GzQ5fSU^?uHO7haIeuhza~N`*gaeS6XA^Vk-_6U-i8&*%a| zIE^&(JrV&%5{T8L!Y_VlzdP!Ap@A^>Cys6)ftGUFLY3TV$hSFGEl!A6(jf?q#9Cs@ z(^f2H_g^68B_+Q-gSkCCPSqis%%RRT4bXGGzDlVNx5+X-UO~kxd2#4wOzO&0Lczp} zf2H68&Y@4J$X53+4n*cJro{IZ+=1$RIms7vc+r!A8aL>(I+}?tj<6q9Mbu_0fW|`e z`(I1SaZ^=^Vf|*eUNH{5lWsJNV>!_{YD|l>(ldj(%akN{iGZ2doc6m)Fd^fT; zJ|Qr<{HEKr0<9``Pu<#|bRq-+Zj}nAs`^<8U*&}$j z4*t}a#UUg1CWoSGQF`|0Sv4SoU@GG?^XEL;5(>9CyR~Wue|DZtH6_Xo;8NO0DF%J^ zME;q*Ec=!2*pOt?vhM;~RVcGEJCI7Om$d#(1rIv|My4>DQIt31Lb(}m$mrMMfVMcv zM+|q~kC3({)0gic-EzGux7$;YZspGr=vWWayrA~`87bid_zz5WC)pI1L>J%i@;&9~=wG8+T*ZdXoD3x^$7A0ZF1 z_IHLiC)qfofTj}tDEDM+%`gG5rZxW`UOrk2=||Xq|My`ou0~~E6(fk;@M9Nu@o(JK zQ0Qdt6Gdf~w&m{~ib$4p1v2-Jn$SJJmKsl@l7MZx^g> zo2n=PShrP(f7A$CSKx92Fm)#fR)V(Rtx7`G4BlaQs2u^1Q;Q^UQSCR{=v2Zs&~PT7cXp@PqM?bgheict&Ojrt2o zW+cb?c-u!gbk}uoYs?`C z>+i(pAR&Hr)IIsrepn`m-Dct^E90x$tdkmFyE>XRS^U;wkP)=kskjlkH z#nw?n%JoWC?6ywJO2gRSmSq90GY-a8N@2_nqRU4E-mS;34dE_N?fu?q>5*=L-sliP zesS9+V?wiVm$iC&if8Wz(#X9DL#i$Pm7u(Af5)4{N*PlqTSA)Pei6M1gS?Ek$3&gK ziR95IaS~kPQCHStn-cO&yO~Y?yn}MQOfnDrQ<9hJ*hJrH(7VhLv>~NK zxiZMdj)0XXlB%~a5fG}JwxZvT`4;c2Ewyu1WeZCiTQ)vmQMnxeN%@TZ=Q($bUJ>MOqn_HIJt%PiXG`&-G zV0AwR)Wr&BsxlofVP2ZN^O+p_q9IA|5maq~G=axbc?rs&Kl33(wm=dko0AIrb;wUn z-QHUpc`@hGt&iY#R1_I~WI@KZAt~7S2V~zi-v8N+FkV?#K4_GR%A){yH>mu5d#iEW z6`%*Y9`|n>_umB;-CA|1-u%oj)9brjw#(-YU*TlolQH0BPN>5g z-L1hS`w#7lOR@cwH2>b=+`D(eU`1r3Z?`(T*G+dyax(NlL_VJPmfd>!G|HWHsQ_55g;{`nzsQ0H%p^P_m@A;HI_V3qTqrIZK?oGp`sh*2V6|lIz4yWtn z)?}cdVaRN3xn;OqegM)xLDN#jWPl&Wn^UfC)2u{7Z>p}8r+fLj(ED)>@QP7_yJQxo z>mucTeTD{6<+jzWP#vfg9Vp1qPa$71`de)Z7}|gQoByP+;q8E2rTuh>m{6vVVEpkE z%%!^_DFl?yM`4s9I{JF=j6fa<>^mJwlB_&6p|*BwQ#{*tIcd+Eo2Vhz z-vg~sB~lEUKoi{@6`^e#l&INhvTpo!c2;$}^qp_?p`K)dZY6#0!cjhTGL#49eku;5 zCse{ph`w9<1#ku`E7n#nKmgNn{NeR>b0`Hx;CgMN*yP%OoZhS$^hF{t5Rk27jrVo6WlY_or{?p_@uANtuQGp$;#TjwVddULqE z&3gT}T5~VcDRoZ|=1P`s7}hMQ=PV{E{~W8ZW=9cMB8!sy171j)V8lV2F8-imma27< zyE5$E9oTHRkTgNxlF#Ti%a7j$sb>DFO(cgCJb@uVn*wwxO_Hj+evtCqhS&s#W00B;{smj6>@OWBNQU2mX@oYZM}^;O z#x+u#mbmE(b7;oJPu(DhTi{784Tqj!gzJ?$&wl%oCU6i-oTH+~C<%X1k<24V37SzWJjeY7jRp@KF~6;SRN5FLOoiNzr+cNb|mTxaAth<)c#;IvOQf&YMcL zR?cxWwc&6cM4MXpwdwE$-rC!r6=PdvV1?`KM;>Q6yD#f%DHVyW4>#v6_Xe4g=WPXJ2P_)%dB&#a`2{_8aV0lb;xe zji~~YTYXEuRN;zkPIVe<(@`B6H-RQEbOhJ&@B$A_IGm2cqP?a^j*gHE?a7N?lHX1k zE>+BInOioS`^!}`u@$7wl4IQUR=3e9kxT*#{q_^<8>3lC)v<1Vus9HR$6lnGco(sF z5GflYO^qsERALnD)Y=~|$@t#KNw7Hq?YFs`9GRt*n8}HrVPj{_BZ0Aj-$6QEKbOa^ zV>C$y7H+AeADDlGC_JUr^`>B4M4Lg`FD-M$EJrs8Pd1RE3LFy_SZS6Gz}4m>+Frcw zjt7jzzA?v^kuwF zR+w&o+G}Q?mMMile?;wKyiSF5hD)PfO`P8!^#O#X(wUDTVYe8?zH4cD__sZJ#) zC#FZZf|eFO?xc=S)uW)|Yt5Pngely5l@>aWnG&X{u_F9ckCQ`%|tleCY?QPO- zURW}@TI1>X8|!&P*%JjTA>BhU83&~MPvBa;7{SYIDxr8=L7RRXBpuS*Uwd&sS8V+15%DvK+bU39U1g{ zTgnBh>g%-H&OvHzo|JDg*o43dN2Fd7Z;ki@IFmGsJ>z-f0dC8^22)QF$A74%v00~x z-@cY>k6Jm9wq508vMK|~zZh)2OK0Z**!ap6oq$KPMT9_zhJ=5`FX{%Gg_=VW40xZ+ zxndIsE0(XkjS)>Rau0l5bt>pHQ3oBB+kshyWWArnl#>YOg5G96Q12$DW) zCWfZB8o%j$AhsDf_Iy<5K4Cjh=ku+$9f`M^%LE^vZ}sk0dij6hA{1XD>LZPjV&5L@ zbUmw!Yayv-nYPK%x(W#o6f|G}t@2F@-^9B{1M-vD6y4FIXp1AI1JK4X_ z6PJ6;k^SO(#Woj5g2c_y5-y7skzot(F(i*k1;@Z(YI^3_`CC##ve>Wh?qlSTE^gT_ z>ywUtuis_}lL`RJZ(6v~J6wu26#blLuP4`}c%1yxxN<|C^_&Mhol|88Rt}DRph)S& z4&4~Xi8)I97C^9iKCjDpx7lLqWEvo`5&{j(I^22}vYO7YcrQau(r!{k;J-sU?zTpS zk|HlBp4zC@Hm$A-_exVo~HaLjHcK5tW<;fSq`^_e$4-hf4S#QH5InsxtF zV0Yph^*LnFH2Z<UMOXbk##pypl99Bz9cr)>7FLk+oF??%!!n4Lcn@VU!TJU_s% z{_jNJV?j6hZos|BSGK&DSL%5^ylyraF*d?j6zN?DF zvP|w~u-{(`!A9OwB(7a>|5vUU&l8ks(mmWu#%+?^(@9}bg6Q!z?d%-+_!30}c6t6e zad8*Z#-RJ>jpWHhxcg#`rXkq~^T@%bwf5u{+lf=vbmTaWR{LXN%&Wb+E)$~_qhG*#@i3-|N>iflQuCCQkNLHf$q(d{3v+z_K{q2u5+5+tHl*F$~ zN*cbV(Gw>6>R*%uJ{w=1yw$O^9qK%Ch+x$Wt)O=#+`-LKWfta&yz;|-2>*BCnp!5vebJYh+L=WHv2~2(KC^5Osa3yG+e0%;qDzo0r(c!>$je@b&z zsP0S2SK6-j@o4~UOC@7>M!09R)E5o*zw9cF#xOKl=2 zcW3hC5skTM;^XIHF!s)Ku8Hkewc`g;EHLkXxW2O6J6+b0c>AnS>KYEAEEc@)nxUb5 zQ4CQ6G_k5n=7?=Hu8eG`Jse}>Z_NaiVG17VE1)qN#Kacle-|Xn@jx(V~_=(`pEXOz5s=N>w$epVhiG(xVP7M_}3y( zgvR^X=!u_$O@Xp6u+ly5F~{kO){imlJLOi(#jbCt z@8s6ZQ}%MUL-<2HJM6#v%KJvn^VvcR;%&%m-yc1U8xn6seV{!lYyX6Fmyu33`1GaY zs@|i(ha3v(z+vl4-e_4WYUyfvn^l}JNY%ybSEcyiG%5yX*^ueRn;{m(Wtg+P;AJVu zO4s$}XX*6d=8v#%w&l(Btj+c3|6N!&wyI_P5b%zJQ}nQ!gSc1J z&b(T5OF@<`M|3}eR~ZwVZ=I4by_`K-n3V!X=#m9P4TOH}Crq;5Oe=XQ(|G9Rqzvk^ z@N%#2&^AYZjyGOt}_yEXtZNiAfoasPq;1f_+<`zEc z%vKY0ZIuorv3OM9JiL8qQ!V-&70yGxo+MYhzr>9v3fEnn9PBwu1->6M=ODhoAfbl% z!OtUDuVOEKRxh7+lXUf`3v-X?rN<_}-ahu|I0u^J+5~DcfKn49D;uBAqP25jPJ3dI zzP{}Bb!En-g}Xm2WzvbL$OgD5$oe`t%C7pJfT&LpJFB0i4q>WafXgop2;&*^e(c-m z6kGzem>d6xxx{9#DHVjPp8swYKoQGxh);Z63{=t^hJBpcb<6o1G9+DFGwI#qh7&fy!CXGA z7qggZpFqFPJ9> zV;e6P`fDZBx0Zj;Uc?}VgzCq;Bc@KB&kEroc~rNK=>jffM%kuv;@b2wzV!oXLaDsa zlz)OSSNA8di9@J)%(LI1p=|46uEAym-T7=7vxxEE-GcxWGb}cyEN%G6CihXNi#K*# zc!Z!$&k%KFwFb-lZ81{tZMnq46f8Hq6!uVz1h=BlOZ?i)FvZ0EbRT;&RW4weK>i~7 zB^+)AaVqobHAQk?D7Gxz(9AG2@wu(n*|&+GLJ*U?lBc@~zrCD*<1iro+NUd3-fX`l zdw)a?g_$$@pkkkB6)5Ypp(w2-JX+J8Wb5&C-+*5M%wH8EMaZGoA$Jp;S=U=HPpa3w zhI6ENS&hznSAeWD2R|L_n2sT5OblY&qgHATLf=D_kb1ddy07ArP?ay7uJoOpU(Y`qaP)Z)2tH%e0vg-dA9!OG#AgJMR6_ z=Ig;vQvw>p0ZE)dPHG@Q=9E>N-~T>J=oQiT zuP~E!ns6G-GX1Et+A6jRm-@-W=mzr@>{!gtUd8Q=BVFg&vPd_na8_sV7r$$=EMuFC zV7Fq?K$-s5+bBV1c`=KGHCsz`wlmF{(%HGaEQbB#EISYq#BfUWzlQ&?wk;?Yl9%D` z^(~1x@fKfBEU1sGxc9Wxl#;yNM@BCKTlxyP0Ew4vgWayPu;|`A->951{YK;RiD1Po zFsKoPoMdNvrwqA79H>iYI7qc?HnX4adHuW?trb4z%t~W8Ri_&0Qao^r@iPO6F1uzP zRx;{6TtNQlb7%?VN89ZpL`abQR`raXO@UA#N;^zD)S$0VH*eI_fm?lzG}UZ-hF?-= z+X!c+<`h6$#VO%0-u@ z>@vfjcD*TcxMt8{6j9mJ~#WDY-gzc z-OrF4s;q(kJaF$nIq^YJy=#=~2`qf_=&no7DhWl4+=Vj<=`W|{8ZKXdu+7cxbDjJ3 zGZLQl=dg?|&GsX2H(N6K%ptpc$K`kWmvqjT{x>YIUl4KrDY6>mXX|lUsGrg>_d?Q9 z^zd;Y`HP*6@|%*lAOWj_B_->0{gk8e`?HgxxYC`4ztnqm0(o%+H&K%!(LZ0zu~y%* z&C^7_YiaKs={*au>#50VNl|N2lRL{(djyxF_F$+BN0nrB^a0}T`t&Rx5uLO%lt^O5mnvb|nakm9=#93z=h6w=g7G8GR#Zfi7XA~8n z@K9{qt*thfyNZlkON3wcC6yT8mOrpdFO2-|Y(UhLHwe?1P~xjryz4Cz=$7=*FZjW0 zW6C~kv@>DV_7%0al)Y%UnP=fh8;;0)r_j>bTajyI+W@Ky`HCrWWpi=A1W<#!3rSD%so4V1@Y zyiN{tV_iz8Z5_P@~g;k z$olU8oNp{rBoi^z<3-h1uz@eT3C481`tQC!W?s5#G> zKAF&DmR1x2t(samzCBCJ0_^4IN zwdA8Rd)>x{#w5B5x9p+s!c`#?q$T~@CiZ~oj3x0VzR!7jjHuJTuYfD-dG)D-a_N5; zc+`Y8es8?BI(cWmsm`dz8Zz7gxfP81y({{DkubImHRUA|}|iDxndYamdI7bicfKFEMLJ^|ftGn$Udm7zBCrFH%sa zJ;X(!_krD6cgNN#Q)2JqKX$uv9cEn~^4}+I-zvA-t(YZ=a_E>g1{N)Wr+%m9=_|z< zrxdJ@Cv3z1yKsq$BTjI0=Pr4d4wgD;8nZ`Z`!qzAVu))`x-hy{P9v!~sc+IkzE%Vl zl!kB91bNsisaoFbU0hm|@shX-Cg(Y-Q`erVK2%l@YPwWe*Az9cV*e{>%4+bzx7Fe8 zg45TRRQ2Tod>M&hE$BF3pi?kWR`0h9#W@CUKytpzXWvIeP98eG=qYvV31H1OxK~Y| z9yLwUdu7`4AUMRGZcQfakSsd?Y^f>Ub+mLB0;{8(m8;kYz=Gs&f7Oii09(W`KQ;bx zBl-G!a(7Hw0uL~-b>`J8YIZ7bgdhj*`Tra!-jI%n{q{-U_V>;eC4t_${x{YKN&FqX za!cOhVuR&;cdbO5;*Xe8u{}3>?--ey)&v=aHt6lZrLL}+_DcV&N;LMS$h}DqnKg@V z%6g~OG;h~ZK4WLMnL&+rsQ^oyp_UlwlCN*ty+vW^3i zvqINP?F@^Ik$S3jBS*g4;qOJ2#66fXw|W!rX>%D#m*|)J>SOt^N?6VS{a(|AZ>dnZ z^kY@Nb8eNRkH*_M9tOTq+Pz)&Gx6IJG=|`t8_YIUMr2J<2t(+tV0Di@AK#RfYB?gk zjyM55;j%Qd%LtdLrWD3wY}e->LXsIEnVQb)jfQhARhvg-hYg1BGaJa`HS@=1Blh;< zJAK$K^M; zJ5bYkEA9EDE70Js_)LmcU_(DWfSM{>2arTO)-}H;{Za7uEF%H}*vlfit_Da6;z}>F-C)BcHEl-lY zp%~!@%tLIzis7zNLCi8hvGyK~|zG5F9l`bXmLUGH~OX6wET*}aeDeKd8I~HLDFo4#lJGhT=ka3bzsNa zksLRzoZ6FK1LQAeD^ft-pcgmyVYC#-t^OjyUDnZ zrj7xGV=X)IE-j$K*>PYQGq)U^0;#Jj+|Z-fcqmhoDp&bliHW)H9VvkY5Ww%*riDvR1VBG{W^1}_7%#M z^7eh6u{h~Oskvfn+u8EN@k-|T1D|Hp`;1F;0nU!`WvG{bNtHp4x8xc`pOIdrKQU|s zx1&|lFx(CG1#{V1an?)-h|cQ{;Uulp-p zyOkOVG`n@G$DQAySa&9KY`lxAD4T=z*-+787+X81?qW@sSDCy~t`LjS*ENE5Og3%U zM~`B)s!FYZN@0WIzu|YsDjX!vdR|t&G+jJ8g^;aQNK8YQ&zfhAh1<>MO?IHZJ z`OhC;*UL}Rn|{ssUN0n|fTl7kH|J|ep1=l|IosP%lL=f2%IeWIDzVLmaEiC`YQEon z0$Zbn%=3x>&;*K(?&oKoyZq2Ys|xZvpr@*d+<*S?tWe!k!sFDoZlttKl1NQ2ab&zX zV+#v4X{Z7?IJFDLWbD+zXYBMd9+Yq#_ufh8AtnJ0PMddpMti6sC(ZF%L5i~{rqeoK zKS(I%=b~Rg_C}X%x}If)Mkz)O?5ikvdZ>=iC)6k484NCJC^^V;jDEmuJx*eE=M7#e zijK>&-W3{{c@8fj#lrcpUX5LKjBRt=FS4F$jXfF@r`fuFH}nj~)GNfRCa#p{L4thc zs%Pj4(r8?a>(hDjClwPFH))_$AgKhH5c(;CIFf{Y7mpaVkL1fq?RFUF8e~xHm=;8p z!tX@w0*tc%!BwwiK->$cq1wrgE%8p;goV!WKAFA+@4+$A5Fc@Kxx?(4QR0(S<|G2#F@aUW=azPPa?u_)Wk+H%&TEq04#9)Q;Yw3pCn=;YX$_*Lpr z{5jw;T4rQH)TB3$mR1`u$&d0cl6=%=7H|Z!3(OO#uW#Q=$hOFIsH-};o}B*$=1dBM zzvbPOFM5NsC5p`>wnmO($BP6MhlZ3T-^8KXb9F;m6gN$LVDqj^RQ z_S7(!2cIG>9JG}tQ-EBu#_w(@JMrcn;assK+f%_G-d4bWx zj6jtE8K_%_w1c;@>ue%(pJ78|U1eQ%pCB&42U!W~(p#FR)J2v_wsO#nTcRLtEb5FP z7ycASWBwgq?vBZJVbb%n{-nIcB>ND~B+0!(`J68Y=*sB!G>T_Oa=DsiCjy;OIcNEPkN`h% zy%p~}F-#8{^a@Px0anNT#iSfYnhImv+r3%4O7*MXMqkZF4}AVc!F0yuxqJQktl{%= zwq$4NN?iY0Q8+VI^CvscJvJxl=JBA-tYlupFmQ#v-NuCVkr2^1!FQFZr|_TujJ=b0 zj}LMJ#bakI?mYW!-0 zth?jjjRZnHza?>;D=jHklYZ-(N*wn}U~u5ofDL@j{3m(!*j$dB(Q8tXil6Z5IODqpt5$NbXNi@ zkg4nTfieP`ovy6=(tNAWxv-hxmIs@>XGA`bFf6egPI@FgZ<)Rzi?vRDjv@E%P~N@+ zN@C^v)(s+LI7lKz0ufDSamYiDo${TEpgFsc!+mBA#i1~%$+=l zUYh*hhB9uu5bHubtcc@THS-A~;-*@6V((o4L&X!2YLDwF zublWAeec-A+|0YL~c5|=G55AQ0jUcMsejo>r28j;y25x6%PvR^yTBlTc zRmkWBMR%-U8q_)*Ym*wJO_#+q_5iX2ufQ)(MPHiA<{`$NP5~5sRVvO^VC=^80XcbZ+ z?I+8%b>iQHd)_?Yd0qNUO00*E^>xLHU?q`(`+3yf(fR!RniWN|LZMFXDD&|5n0Ts5 z6%Y&vZXM+_R2vyNnY08dj@u;vfR5VdgGDFj^=SWHi2T9oPPk{Qj1x1@w`R*{)x(HP z9MvOd(8vxysVqGcg|DoeYT)0Oq2A7!#O+#Nbw^EEy zcm0?P{#0r(zq%xEn`S+3#gwD-lXrUmYlOGjjWDg>d>2q$sHm%3m7SMA^syL9>l(=F z#y#%uA4vYtsz~+x`TH!2_j-Ae&!d_#x7OB4!3Bk)roP;66I{)yBMte#=~M<<{5z|V z5nG9`adW!rnD9Fz?hRDa0yZy4G;uJSN5^3YaBVZ4HdjK6J{5e9`BTry==|;Fn}Z*Z z35`C@ZgCx*^(2AQ<@MT>^x2emJq5M#xKurXv#t9>nw+VuO&?2q{ShtKH^$$du|@#ZUFM^IZ?yTg7fIN$iZ=%2aRZ_B#DY<-J7FN(@)AC`0|Ad74L! zsbMD?OBs5fk?Tx+>q2rJlG(BpZ%=}-3D_*NK0j2 zPbC}y*U;U@FMe(1@bYoh&RR6?5W-yyx8=v36&zqcaQ1O(fWTZS+RK`BCKl2z|9pv1 zc9U^Q$*pY(&jx(+WRRt1^Z9RS2V+@*;=xUE!RyvZ@-ju17j?~(vzjlTf?#P>0~<UROwfQKW#k~`Zp^F^dv05Cv% zF%1dkL+dcq4+usls=Y}gpJ@YmHP8FRC$e;|FNj!Fnt8N$^2cdC5&d=pk|FK2{iHVInX-nZ^$k*p>}^vUP8wwvoWwS;+I=h9O>7*)9f?9B!x)No0Wu-M7sb>(e@UlF41%)Vd0VD zG>nK7qwV*-fzYaC#C*M-QgaErQ6iT`CG1xBpO@7RC7b{gbyW%6o9%8?bJqdKI#y&^ zK(tGIj@2%>r>jP{j%E$#rD;)6Tl*9qh+{b8MHpkdlQ4kG{0lb-CE3s5FKlp~*8x0s zx;Y5D!h{{N8UqV9`OP!g-dKpkuAl7E_!!&@s2{gcc5tqQ|1Q92oaFJ^e2Pw6?S7|R zseF9*m%J2_5qd{HQ&e=wrDP#D4tJ>rfrKr~ml3q3rT;E)(xj<+r!O~^lRKrDx`_-@ z1a!4jRA8Cp-*vk|jBn9~l`{to5-d=lFnv4qyTN6Ir|$7*c7sscvfoVpo8tb8wQ$ul zz|HN3zea7+q}(6sOcYcK%!++60-R_uP_F6aOSlC4)X{NKwJpG;ltoY?%AD(pv{I17 z9Li(tFS!%W?=rGrIpN zUL)^7LB({XRk?Ss$8|lkBrJ+pWb=ty6cmiVOEG?%sn=AK{N^kl&Ry^q!SD$Gqrvlh zgc?b#e()+zVbrmVrr$oIRa<|j-%5r*NIJt#?>g#>>jN6}n?pgaI9U~!fqM!HUYxOy zf*>C2QXsXMDT(w8(7i;oa+poCfQazg=Q7H#QOLe=$P7W&%`7|GQShZW`DC)Bi1#XffFznEO zp=A^3yMN8J6t@6ark7p+PhP4QVrIPg@2@?0efeR*bIU%pi~rJIy^`jC!_|8KEC~TV zW&D7?nH=R#%>#@n^8a0kTctR>V6ncLs1V{5?xf_ z^r&`Zr4m<3_pMu{?=4W1dzQb&d;Px)P4@uUHE7G z3+v#Dcxk>MUK;UgfPJw$Mn2S@F{v>*UT)!r;K!G>%rHB~`<>#`!}UMxvkY}C$%qf< z0>|ApFF2f{`I9F1p!e>0iQ|R#5Np+^~+4l{ViY$7#jm*;J%FHq+OmY-b-!o_B{!Q4sF^ERN_EE@_6#KHF-$G~g zuX{$FjnBTF%iB8ui+skXu!j1c2o;5j3XeMtSUCb@!y&KU36ixVvWs-#SH(R)y30~b zOAAzCoo;SN&2}u&cw2{3buzypq3_Fycn#MambcxKkDrN^I0!k&8ZbVxquOP@v-wks z%B85^x<|Lmcp1XCH$Sl?S_tyPb$6o-32YapY0h+fyQAH$EPz+?8-E zr7+9wYae-mC}!6uUWA>=(KkrcJac2M*3Q%u-HBcVGMinA!l+IJtD2fq4|{}b)x@`9 zwHxrzkr!Osjdx3^(_NF+lq>O2xZ037vXQ4KKs_=~G0A6pPF%r&(p(>BwVESzWr=@6 zv|zM3zaOOEONSx?tfwo1oldo}EP~_^RVk?6hRv3$o-y;({1(eetBFzgHcZcY7 zm)bj%35-yaJA&USlz4{tg85~^3e&Zz#YV1RNoc-pdRgt$!NJOJ zjaRq}7JzzygQ;4)i$h{}3#4j5ny6#!PlEoNNMndm{gE4N7V}-NSdD@ zJLAV9E2ZrFTrh8+oE)O&?WL=s7-4--nd9_?x0ud8z~Cyenxq+1W`5QJwd0S*<;wz& zYH%=dlmFL6`N!nqontZ&o8N`aH?RV!WdF(AJ`&KwP5ZffjMr)Q$v_%6@V=+XZ;-4D@Sw6D3lxlZtQx~mn@$xmgmc!>W^hQ+>+u8Q zIK-{PSUAJdIAnqeY|UKOc;3i~K-q^->P z9PCEb%&a3=!tYA(yP({)6#7dOU7?{-v3ZCd*b-;VuWISw2|_h>0z7jEm`zj`h~d-_GRhXl3E?jL?$2?vp(6<;dT%`Vm>{|$~?f?4VQ z827i?8j8}iDg8}$jscxlBN7O0#Nb7;lu*12Sx4tCd?XAg_-& z(-bt?tam%Mm}aHBRRKNp@@yVyrsq?hbAp)Y$^CcXi=_DA1S4ZI!IYG(YL_mmQOGb+ z64z;Jk((}XPg3zNr^YvZi!mV)xsfzC^}sWaCp?b#p8u#3a}Sc>@{!MHbl3LLXK0r# z(oajv6C5>~^rk>? zZKSkhf~^o9dh?-QCb*-$e$|>^V!N8wY)G3uA9Ug(*L^_vR?qbQW28{46JsH3HpEggqtZ-hG0cXTd%LH$$5u8$(lV6dMjMK2TwYkHvmEqqoJ#`xMF5#Mr zm-x9jTv>5a-CYwL6i}+il--1u_VKK>ffhXFQivnXuPjRBRClh_pcTS@^HyTx@t%E# zf`G4WUX*MEu=F<-GaXyHqYq0qV@u1S+tz0LQf0434t~wkmASg(QbyH+e(v)Kf4kTz z6~SAB*k&L(N)hfr5cis`^8v6@@x-L!@wzYL z_e4GeL5b$ zua1i-3RbYMc+%V!Z@b(I*Xw9jCDcm_eEY6>Re3L8_N_)nrk_z}x~9KO=I$G$3nKr? zQRk<=eNxRns>Y(Zy9Sb{pqG#0&oWyF_#4-@n!xV-5=SD1!*B#i3HR*Aos9fSdkX8a ziF#_N(wqIKEZty{G_jKZF36*+1@WX6YW(Sw!WK7)57V?KbyRK$L+cl)kI?7=o{l=% ztq}Wm5`6Q;apru{YpBo5 **X{GgIEDXQ=VCZJEcw~!-ZKAPvT!o;Y0E)4n zxiJ-m@eBMtA1`v>pp$uUYvZq{u4w^#8}L`ndb5voF_*!{wNE4piAzE<7TtQbge~F& zA5$9x|E1(6Jq}*6Mn>nI)#bW3WIwibx-Q)10vQcr1$h`C-Imuxt1Ou-oaw9@q1~Ci zZ>^^sPChzOq<%^4!Sk7%+4gAft4>%m2^(-*@*sX+nPV}d%XKYM(D)Cb*v z6sF(B-4N*K20!|?^K4b3w4EpsW6QnGOjuC=OFsJ)PVe<@;1ETVXi;wu@J^Xli$dQ4 zsq=ikmMAfom1w85gC{;5J^1T7jD24FMN49ob1bX7KD*@h)~5U~sw=N0QdZiZU=p-$ znFDeH3wI?~M`UlvJAn-{6(g{0lc1e45wtTBW|~E5Wy9Zbt@q{6*STzEL3xZZW=v^! z8j(%`nB~*IV)Z`DA8y#aiV-CYr~QN2oP7(w0+&oBd42>iKhCl9vg6H9zN>$v znNoQ5hH;7NM06C~9NSm8F+EWP^$Q|xYExJvPUI#Or56_dYH(y@I&lQ)h$N?>MRYfU z1!m+3A*eIThe^Gt9RuAglFSb+TyIQlt-#LZJK6VO4Ov^3*^aH*>F*B|tit#qcme3j zsb;%1N%o#4e25{YbMa06lkqf{vmB7+&3aGM&^Yt&1sJE_J_R8S50;nsQ;oA}O)-1r zw|Ybut4fXdxQ%b+z&zjlBo!_3Y51jjr*m{_M_|bfY9U^`G!7OaBM$oLWD?(PzF!yw+R5HmDLvL-q`Mm)J>}AOW)w>->o4y~h8vqdMZFwtO ziVE1WcOV~D+tq%4|NX3k)|Ic->F>_Ll#kJB)kuW5x(7v0;B?9?A^!@thx2=bks(Ii zQvjN6U)zXKaliL0jqDls#I;9cB0q(~>a`eflhwtrc<<|q8S+u72!_=RX7{C+_0bMy z+b#6ZxfWs(%ZuYBIL{0%u5A^a>cHrabk6cXSHA;(q})XECP}?>;XYMnrX6vi^#QEf zy!B!Gm!{5Mx@_*~E%Yxn7I^@bX62<`DnV4amBk8zLs?Q@=WAgA4Y zl|3r2!Qk|78IHl4z%}~(Q!AbnrWw{%S@P@StrEW{QxJMtTv>vZ)%z)lD8x(r%QB~h zqd4HVf`H8PoWw_|`A6c^T~e9M%<+8C3I>@$x!i%cyRfaxVa%EW6I=3)ubBz@j8qym zs82{1<;++AqTK2>e5fOe(MliDsb}p;S6F$wmf{>d&~!2BnoSg~F5-!Fz1}J-M)^ye ziH$oaf4Zn&qN3#UZx!48XKNm3GyEx8r~^UktEuMwN-9?)qb^JJRQG##j3hm(6@(?I zJ*t@aafmf*#t3U^v}oOYd^RW7@Up>zkN1n3kTF|&SkZ>Ig$;=uREPnkJhZs3JA!L4 zc(vVg>DF>~)xVGaJA%#TM8x}DkPErv$b_l_VMG_vz|>9haXZdG4-wbV1Z}nOu8=bOJz*Cx@dhtT< z*G_!@$I*E>vibdQzq_^fE;?*tZ_2k-loYi`kfKKHEo!y)Rx4`Ph)s;xt9I?$#7q>m z6EijPdGdSyh5NqGea?Ab*Y&!VZ2!ID=7gAb*eOY-xat!|N1e1&jPxLrbkTkKVUQX~ z@wxpa!?mX=ROACLI0hZ0GPu97N}NKTty1aKb8zJABZ2(YYbS!mouLj9N$Gquhqk$f zYeY;^i-RjU#7*Q6Q8##^^c-4hgrmlLId?M|_wKuuI-(YcceE#94$eh)907h?A-@Ia4y+FYx>(D`)xSwRCk{j0(Yy3NvA7Dq6b zvn0|&@cP?~-3u#!3M2-F0{SJIx}X9){Tf6GDI1?Dsy7c|T9U{Ter}~TIQJ%s(4@|KjinNydmgcYj&`Uy|-dQsCsuWQoJ z6tsXJ@()gkwQrAJ%pLuL(W9z4VFfnW_2_dlWs1L-63fs;wA;4UyAfi| zH+J`{cl}u7Kl6q+W_Gm45o;_5M?N{l2)jVsLI0mCdfSt6TI%j`U>;W3sZ|XoGW) zts7^~NB3DVddCXa2>IRK4{0`|x)ZKOUa8Z7Q`7wlU2rQNl7dCVJT=r8-pIKYAN=Gs zD!9qNiTkcmvDd}w5&0qXq1_&dxQXH1z#!>dP<;8?5BG&9x86OP65PE z^P>9IHo|*`-DEZOQM)Z1v^VZi)=$lpY?UYIj_WKGja3u7X}$hHm|EkTX>9MN#FwH! zbv;Qu-kgkR)Uvx)@0>+cclh)6c2gyhKrESJFZE{tfyy>g<2A6h^ogQ^k$EGreHd;P z^yZ=&SW1|I_JMUCKtblX^?v2AGQm%))1 z`dG2`_{fNjg0pX7p{BNO#$`lPdMgtLGyDRhBK!WkZyFKX0hunh%=xs=!zz%a*PfQE zG0y#HR?mFgiz`5mDa>4KATu%`bO^`6DO~iW($S|uv6Rj--H?AlFW1y_Le`{L5_4?k z9$t964ENev|NmSs-d z=Ic&TcMQK2Y7(Q8_75h-Hur}txnVfN&xmedv*X@e(AyU5d{O1Dd=N2p6)7~d^rzKn z*QU7}**I&}4l3!6lto99=o?3@n!Sr1S$_b;r404?5lDY~-|DDNxr!iL&lNhA1f5`s zheA>@FN4&uD`GT~z8MmI(7Ff;rNab)6@IsI+0jU%A*9c+QmD;D{w!Zg;4GuQBHiGh zt!A-{pb}71JT5##5ZM;;3Oa{&g>3NHrrUS1*TB=gtIRm!E^19bsn0LZ4CsY-Q9gPyV|@ASEK69-KB2gH5Bnh5F_NFmBFJ%ur)rs4DQ8L%?)?RW&oICPwg7`Tk4fBgGSAbpilK%;_ia4Kv`(I zMOq5ApIWuFVQV@oP4~Oh(NsysO7ydm3HE)#d>zOIDXzx$)^04J+{*6vJ=dH<9S9$6 zU*{A>-%>kU`0d>z4icMWmEej%s@taH#_!doM9Pq*=*(e62LNGe3NppVy*EYT0N11J zRe%!55IX_uR-j~ka*@Z2xST4NoAZ3EuUkZK8>KSJpmqvuP%XV{^Y^vXsK#XaOuxS7 z1pl>MudjRhO!tN&9j2QEJIOphd0Ju8O;Pt$CoTs%dN-=ia6C{BBV-66GA^Bj9-39M z_sPLc4ICRCX@_j_v6R(97Q&h-klTM{UMElBj*#`tcWd4d95#(Co;@jmV835_zGJZiTM!; z={Ss*^nZ6$XH|fZz$8MFGS)-~&&wIzC5H$N*{I0JYKEcArmLZ^iW)_Ob;{8m;XNR2#M$X_)oy6&IGTPyQQu?oLwE2lNyebgh(Cow{-3SDyLI)Q-h~e z1sazL6(bGr5n)bfe#6|SA>nJ!Mr1X8{w_ePI4QUNLzCv76PxBH1bK&~OVe$vxD^%i z=eYHBs4|L9bb2hg+i#PUl<)z@Sl8MGqRvPV9B?C+4u0-mkh!nkH6>*jA$&$*x#RWS za%Li_FZh|i@^rPYgW2tvQc$t)(1n6JKYZ0;os)2XZ$bK7U)ewn?}d4STMd-gGNB~Z zK$kuk>SXf$yOag@VQHg{;y0a#6G`Rj?8oSgg9W8rT-?uK!P|r`?)O3I1g8duC1inE!kLuT^nkJvWL0WqufjV&nj!kG*lX#6m zZA+rmuqaYguIVvz`K@u1tPV5$X}f6Jr*wgq%&7=-VV){_7^iq2=HsmUdHD#~hOh!= zCy)_-D>p_RWNzx9?0c`0B5$6T-6+ikvjjrsZ>Y*%qnC+Yt8K)_J{1TNugR=hv3uon zRCr~Ss??3H1{%zKb7W0OiX_hhG)R>$7G>-yFD-2N-B1&c4P=3IHPGvg^?nQRpiJJw zYu|2+1!ypY*@sM--thueO^86O;Xj8w#y4x!M~=8y_YyF@Y}HKaEwR(@4jUCd&A$9T ziC4aM#eavc_kt;I{O#&cy99oG1TNcfs`^JL(9~J-dUTQ$fCPb687zBZLdWUa->jZgLaZR5uvjr$eH%V)GzCJ-BSQpp! z%iZpOX=)o^78ecI5dLT3{Lqze2#xz^X_`TZt$K4OjQ-5k{YAk}LYyskm^HZ zg&4uw6ur#0lh<3=g^Rbur3lzZoi`$SIHSQVM8wf#w8W^b6S|uY55lYuDo3F@a}OF= zTv&(tmBdrcv4>T=(7Iw^kjI^r_fKjMw-N2ZL(=P5108bw@X|FQVU+Jv%o=G-#{Xr(wW#SFH4JL?Rij9g^Ch}NOJpg?O z)=rcyd33V0j@`FtyMC2D7Uo%1=R#^t0;qb&m5^5cJPNi%DSnUPqp9@qK`_aU8E%g- zbEUcm?e71umo@oQ&Re1kwYLCkK7}Yf!nstfan2lx0OI|aKA4!T4A{XgMMST;NT{=9 zi}bqnzhj%JF#8`DE-cxeRA36C%E=!nm1`T|sMBS;H1%RHYWuHAdW|6}s2LCB3^>(F z0NT?d$4S2_uEWrh9liVem!n;a$oWwC5>Q(zWou*iFZODAA+w%@KZ|6!PCkVXL9RC zSYfzFxo`<_=RW>ASmaf1&iM#GF6rX@RRWBnbXZvihMYZ-``KEs3Gn35SOst-Oj!1nGP5#h0`7tB@T5z;jf#rFHp_COlGRH@DB%_(`y#`nhE6bMczbU zI685GR_M7&i67ON=UCE{76e1GwUhO8?c6{Ma&9vpL%H5Y{?R3!OkNIqZ4w1lUYSB; zqg#c+5IQ2U{_53M7eAJu|IN-c*Ss>Kfs%jZ^nD$%(8?-hJB?3W=BH+cqSLKWo*)}* z+Daubm4c)#R%7D7JA8z-^}3x#X~bU2&jXDY^WY*^athSJq$9 za1k*H&{*Hz>K`tnDwJmjT4rX$?rY<{t|?TX`mQre>Y$9Z7d9-kUlFz9pYj=Bi?KJ& zo{r<}`4_M9;HB{KG>=_Pdk!Zcm)paBfs?m?ZEm}7(~0|rV@M1uv9BbC=K>s zQ1!RjIDQ0e@4sT$UvXr0iwP7fUEUWdTLk=+zL2ldl0lsv2D3qaw&Vhy*L9}c_xSXS z8@4uimLn|f?_>JuU!rxona57=W+}G@2BO+>(#&fcT|ATU?$lB@O`!T|(v}k4xNWvA z)QzS^h6|&Z9qHw)^;9~f=O4v;HF0x>TzU6$*6#w$CO{fOmA&MikQ&&~is*GFwtILQ zpta*UPcApR?|)1Z=J-&I!t4}x zEZ5@iT`VfQkG9qz!$>1mHihQ#zumK+SevL8vY){(Mm?*hOTfwh-KjEcN&dLSHvu;v z6079z1BB-bRan6js}DDQ1kx~RZhQm(-*2K0ruOJ?!|-r)d3`adTE(u2m)r0m>@{Tr zY2#ti@S`G2@AAR;S$``%oh*J$E#=*?3-ONny6HgsGP6EsqLVHJeaJC!z9DWtU{xj- z4qB#5rBe5XQ19UDYvv38gc>;S>}ss)^Wz9B*79K0VazS97@1B`6!Dj2 zVxn!Mk9axD8}FJ7d-aQ6zSfp~U}wn1Y4h=65f*dWL*?Oz9w+PP?OkIN-&5AlD z&`~%Hs<<}K&ae41s=ZZSy2uI`zWzHRf;as#Iv1$MOTUi%)327u5w^9hNuq6N;9s>` zI?6aV`wuk7)#1hr<&?z`-?{8W7sVt+`j#oBO~1*_CJl=`X`V#{jE*ehji+ve42UUX zE>;uVlkmAtdmOmshL=0WB=w6#tz)%2>3TURW{w|65hMfsuuOgHF~MAo&{P7=@nh4T zD*W^+`DwomG8=>wi9l*8YA;9=T*IL1a;O#AyzPlF>3R(g zxSP`I-?D^fiR7d0+@{I%S6wgp^S}BTVtN zo4vE)7YTOp69USRWJf_gJZ5&snZvPCOlTlv`nV{yuP+pDr}G#{{?|jvg>^AnM&SEM z1q^69UzHu0m@79^#6abjk^&(Hw?klf3)b&>cQ+5XNmFx8H)d^L51#~_NjzjJ&T7aa zf;QSc!d)+#DK^~bYBI3}hCGSBIJNY`zq`J_Q!j$#IUhniq;kh5UvPIeSgJdp7CV@3 zB>vf!OzZ3(&tqC}y$Qf5tTU+kNp{gYvx|5&dl;aH_XlUqTRf(rr{5!%YL=l%l#&$qnqrh+L3nG90V#rDg{FtG&i!RcpfaQ^O7`&W+tJwKhN#;?hI-X&Ie zS_!8SSn=tb-H%ZY(`GE8nE@ZCsIw>-1tU&562{5+&ft{8+s_Q^A*8-7X-vkEl9 zi(r~?(xsbjcOe%Xd`O&XI-FR$MOQx21gY{DxeIDHeK0TB9F*I+(bm-2FzbD&M&oBI ziSaLrip3@!+?L~ufGL}UmrCMTSel3pjPvnp46~H%W_`|)M#pGVNNpdB#xr6?UwilM z+U{0Dy4P8HrInz*$)XK9(ubcoV5X$5=9PW@W+Hs64Veati;L@)%KVo{COqM8l9l-| zn58-^2t=2FNXOVj_kZM9p^EOmwQAXf=zDLG0GBkqZ>t2#2jC=pJpzBq(%CEJesO3M-R692m%ORC1BXzI6|&w$L4RgW(y`Zcer+9ZO}=H zY-mC*2Ao(&boubc92o+RlWv~FEQPQ;aZ(Dh$ki9Ggs;tOYiG|!fz0Q*;&()ZYwSWf zdjmnYm!$S?QFvm7(}5PLciDXTpwjX~7~0VWE^i>HJ0_}IfyKvYXhH)8lK`grjuqas zNy~WsxKqkUh_6G$XrCf^#dO6<&gjeW7v-8I40>SW2~m?vo&E0)tuqntLE5@Lv_o}rW`x?zTFs{Ej6s^d=8G`b$n z3td{-vwVT0I2eZS&i5JO3~%8bv}Q}o=EGMqxQ5Nka3zYrC)``-a3a0qc!T#fw(Y&@ zK>y@*%dr$EpXOC?!h>+OxFz~W1}O@*SvIvHIXMBjw%<)QpiW$4Fo`Hx8wzKDQm{; zyDy(w$t`D?Ry0m&=BPDSv0hs`YE+TNKcahT1w? z?D?gR<7x{*2*Om&6XqkI6>n=)3pX@P-d)#_ws$e8@_W7fW$HoLgFb z`R_Z9doof|488q(W3Dk5q+b^V>~9M{=E$@!arB#VqAp1;CVQN5cx494l_u|Sqey^UKV1Becf1yr<*xLm?}>>h6Uf6+%R zroL~;(p)z!u_4ij8$-B5mK)hdD_?t$S`l%h%xl7Rb~wzBvP#XriGGn{ zY!5VnXTAb&?(`~C18vlIzjxR4}a0K*FjOK6D}<#?)g3eehjnSu{; zMU%S`(5@xrO3saVA^6`NAWL_2rjf>wA_iQRL=Hn$-eLE5~TTV zJ^SJ|l4ZX1O$7g}u3n|C8lX`yM8FD4B|9l=pMal-Kg{^FqVT1FTpHkIRgP&8Qj>Wc z1&`<(N8%W`-}vkscz8m%wp_iTZeP!JNJ^UOp$)3@KDUoV4!Kxpwp^au(FRHN> z$KK(4c@H1~Y>hY|j9rwlEgqi(TdBXJ8~t;CFo}yp)zXWh)|j3D)nor~@Xz_QPoDV$ z5XM?F5AwLPO-{W30szk2L}2**HcB?*GQ}U^KBJ_b9z_WK?~ZlSqRBAC$*25h(>QM` zXDrb(*4Y8`XQcB$Pg0o!9fXawV=xLY4LQ8Z+S|oPa4J-}X9ZWr*vYAYaK6pT-+enz zt#b4bI#J?s+OsRWW#yZ7^z~?N}l`^0(7Z zC?EY2_~5_o#3B=e(9^p}I~l9bZYxjhFB=ii(v-A02Igtf@0@VH%&~4{Dp6u< zvP<{!Y3xFQ@VDuT%Ejsr7|p!W*xonOz71U7G9<0BaVq$NaTjZt3RK0(Y;+$~7n?x+ zfb~u73mxfBS;Bg)B6RbInpyS_xk^JcUIHdXogO>fyC{oY;6s zg_LX(!zeJ?3+3)eTMZJg)b@|CHN3toV0t2r)~-)#={8ZM!w#X7dR?T!c(p*~V!ZE~ zpr@OUG)?DuzaxoV$LtZy(RY`BzhHK%zXW3c#}HLXn9hIX&6d&JfeVUHeXBXl9?s-9 z`t<)IAI_L8IZh9&lV5&T*~|?8DsglKQd?{oI;8J9mkom~-<+gh9gtMUCPBKbn!4x6 zlZC!a^Z(P$b08 zIBmJb`n}w0*VxbOnlzo;PuR8&zh;QGcmiUk zo-O*n9oHwT|6UU(5!{68IYKxTh7NIe5Z2lav9xg>;<$@Fp!%$H>aB%01jG7`Bys0Q}Gl^mlvBlKM zQW!>c2d~-J*G*krjo=DX!TDw|7G6bWl7ArkTCi{AMY84Nn-H$>JY9E9RlGMQX`wrU zvynG}7$mj8UkstUzuo}uwm2ksHqb~4Am?b6DN;A*CeP`6)|8f&_-g>gSqTj*Pw zj8=N&G0t!2@5>tn%@%Mp$w7$sj^v0jzkf?_t4>4dUAf`mZ7Vyw<%n~1uVmpHQBsap zq8R0eM@`5INFdS%bNOe6<|ajDJG6xn;<|}ckE4pT;hM<(H{vDOMlq&xCWl_{^Z)KB zxy8Z=3V3cD@6YmU)!@mH#*BmJYjr%(Jge{hf+9PSus06~R4IjI2uu<8y^GcDTy#>5 z5=r-hO(+obPS|Jsd6vdYTjz`v0Psj`mng$)VtQ(%f?QoQClDO&+oRZOQCxJ97_2#~!vaWD?mdRQg_Gq?E>TDZ z2NQO#JO1VsrqfuP6p}>K7RG49w&d)~A-(07zU91RHA7H4HJxINqRAf|RBlOBNATT)O`}CiTxuR&_g79=7 zZSji~51l-rt1NH#U~+dqS{v;5JrSt84Mi66sM}#OI`1wvA)G+AaGvzo+|iOPPAfwXdyCr5D!w?` zlkqD(B=T}dyl7IkO*zyWTS76a+@DemtmC#$_M5MQ#(xs`uKR@p9)5ndK3*k%S?!9v zv7`PJed6Z(#;DFSprcDaW3w2LV!1~MCo#(Ut zC0*?~J>SQT7#SOd<~!?0O{VA)V4m$_FegSapCrfD=}8XOG=UUa^~(QuWhBv$Qlv*) zDx<9_5tm~YUp3vCOz_?b=CjYV^N1fmi63mb&lZ#Z*-#Lj4d+#-{_jqJhK6Nez2!kZ zYEJsx{&!QbV)HzrL){CrPSzaX2moo#y=YqS3895%39c%Dx|jd#i?hjv?wt%?Q^3>z zeWEP}<-9%d&wouAVYDTXPgaZ*(T_k})X@B}M3pag&0@&}s^-_2JO}$|)0DZb|G-|T zN}7(8@n4Ef@vs$onO&rh@w3lXb^7jn<1eXK`ucN$s$Rksmh=01P2DZm9N|Ke=b;mP zk^uo;0^56gz|5^=<9+3&`p2C0u4P6bQ&``{SKM637j+Nr+wSE+L3GLtY9#YoK!F*B zaTB(tAKZR^J;d39)uFPzk@@~-k-YuBx=3#$h(w3#O}e~fnZ7~Jb5es{6m{t3Q=5kj zpQ;drHVyN<3* z7jf$c>v8pURvQ2kgCo~K*D!~F-@pEMhqmbtpZouYCz=0L8^{|Ev}6LI_uo6G42|GA zf1sr6aw^JZjnFj!nB z)q>byWg1wHL_EOjjp!VPFgbbv$#L(R^vsrmDg;NJ0xH`_iEYLqh>j5AUE1R|(FH@S zQHZ%Vw8ZlcDLtD$+n*$r84L*{YLo$J9a{CO0SSoT2Pka&zdOMZRzVknVJ;zMCKf_2 z9E%$%Z@x9B$H9B#?3DcNUdA_MEuv_172nqqyKF|OBC9n;eRk&tK6+*$4a!Qd@q>Ea zoH(JWD@(esr}Ag5rF!WC6~cO@tjwsJ8nO6N)<)6U3jOc`?+VqCv(^lGtrdds(Mvqs zwRjwRvB-bdWN6a@fbB>r4*K>qv}#QL>#!vW4b*-xSWctkbrA?J%vWnB1l)diZR(MYoZ|XyZ&= zof{PbzWNpKe^$g8#hFb>y|ZKdT#^jcvqjFj+?4-lX>O^Tbv`?MGkr9;eA4{3E|HTy z@a+edKm_gIy8cfBgQ8tjzfCIdnS}aLrHlXgBCGe+2=dLSm-xmoCkK}_Nuv!c!yg9F zTVJcyI;kp+@}*d7d*O_^QY^g3s%rp#fD%|@w60ZJz@ScYchLM>xf)z<#CwNClQEZH z%|(+|N8Qh^`S7gtpr-;_G|)}H-n%A&vnP^&e-c>mMSdF;kI}|I*Qp$@5dBoKYeKkr zcojaMK!e2j#!q6(&xUIb&w+g2B2)wD=o;sI-F(9Zz)hpb)jl?A!?=H0OGXFV9oZpM zLKr5H%)0o1t~n{8Uh3HO#9(2ImA@DI>jL{T4`-EFZxm;J$bb-~DX)sPKwVrjjO$v9 zkQ;a~jJ3a^4bzGuiF&F+DKCo3678Zh{`c;Qwvukr z{-x^e_cIHfi-6RAk%tr6o1FLXGav9pkWve8ZP1Eo=+Q*Q8zTY4N*|*^^L2o55 z%WqZAwNg?c=h>Z!Gv1{e%6XWGJq?9A(S7OFQ5vbm$Gh5F1lh>t-HZH$^>JtM#u?f_ zmE!vyZUC{e($>}(=GSQIj@fSb7CaAbGAtU~b_nKKR2LkJ-(a{2~{)?o-#YFzMU12sUrFiw?%x2%GrtHL|L919aO^O)^q ztJ$<3u2i*sflPYMi)E**g{rOA+nR3IWH;^(@;v!w9$*Wh>a4ZT4g0MB z8_U0_!Cgl1CiN2^Lw;ywxg(S3M-}uycb!9NyNsUp$DGw6=Rv*JFK$UzWJ0#hF@c-J z6~g4IsK3eQ+>I8%hhP+Lz50`vCY{h*U2&#utqW2hzMamQct01{x*iX|j;bVD5WM%F z*n>r#i!j{6PvzR~P(_aFjr{vJfO$pra!9h{J5)w^AaBVcUc*-Abi54pevP3aRM5kN zJ2&3fPl!jSp}KGKDYdy~NIKOr-9R^)V#u|@&BHkKz-5%M_aup9*JJE9JYb`{)*K=q zTw0C4IyFyvO_-Yo{Fw3KM^;PEnc<$b<^kn+W9Rip2Oec=`{(VjSO~3kI=fQRj5%02 zY@G68_~#Laf-|K=dXwV&!;$Qqobo_1zkpnGr!${nJm=Rsb0@`%bk;SLtfDk9ag=W> zGf}EnOS6$r(NJ?D0q_Yf;Pe)y;kYx86#Q2}>_LCwa)3D7SFwHG8RObDVn-(09C=u3 z+&YvZ0`vZ4J$>v)%9*3*anvvbDO!bE6m~K2x@(H^|>t5VNrFJre4xT#RbhmxmygComrjdiVgiumoj0p)g z>%>~cx!~yDSgr=Hbo%Iv z(8EYz?Y9+K_g03UT)9t+ zt+pqTsca;*%c4owtDmm%x_#|3+^Bg5-l&|*$@woCuRIW8noP9iy?*`(qcqN=`Q}ZO zEV;6O^2GcD{>k0a{?}DML+lQ9bf+b6IhH~kLc&>nQTJ|SZOHIm2L$Gv|-PqvD&zN9`8`Mtp>e17X zdaCB3ZIqs4P>Y8S4Dht(>-al1wz=-C$mdp%-^?!v-c3=^(qw)eOO;}GPu(fzp3p(I z*_(lQ2O7FDYjS_fQ?zlf7H}x52~h+Q-}P-SFWpB~_w5l|TZD71OPt~yioe|#92+ZP z9&t@Ecu-$XVG)=ogV(|eK#0WesG&7_tXfQ2fOeY`?Ts@N!{>uZr&$JIo; zR27rwuzQ9b>Ot>SJd9!ka#Z*dic~PNj(*51y6n1?pu~{n5SnnY9gNt_$8o%FA^0L%n4$F^aX*u zg+Cr7pbC#Hq8wc8KX8S5wZHr())Fd*GLdnj5A!E|!t!(QH#7O2CoC)4>Tm9+lZvXT zcMt}S{|ScT(-}j^_V@0EyD;g3+dNX8*F`_*+*i0u_Ve!J?tNlhUqz_#k<9xi$o z&?to)EV?ER2{2VI=usVVa|kim!G&FjmJ9$WjL-RON14ZgXt^hH={c8tag7}*BkMMS zkF0`l5(E;y64l29+VM9luoY9C8~!_A+9--2KT+Dyy^Lmi_xKR6FIpL29^Y^6&YaU! z=uex+$t0w>cP$^Nkv?pwLuT2jq@ig9%xy1)_Fs4ypw;`p4CQ+Ldi_1vbbq<2@L3MT zYU8^ZKcG&8;BJ6Ie(P1gG6b)T`%E!Thr;U&7#EUd_qoy6=2Al8&57KGr_7QS(rF0{ zACptP-e}(bADW<#nC%XFl;Kk|>^*I9BTKWpWL0cxu2GKP?^gwI&!*MR<}Df8Ha(E^ z)Nq3~^VudcBJSey^1bY_UYLZo@1$!EN-vTAmRztcvrYBP`1li9XkVX;c#FW8Z7$`{ zE*suzq6g(u)#mK6zb=0tZUZoK?R#S_ihxm4Ip1pxNMW*=2_ao|GwJ4cInW ze^bJ!)b@_c$Rtt3f;wv}M@TGvw6HbvDtMw!p5LUqRWv?4d@N|uDqHf;Oruhc^Whmw zA4af?>w>mY6WLkJKM|HDXzBeiHB3{_DB)<+sq$cMBKu+qiS>=J+3@-8edtNJ)WacJ zpJtsC>KFE|a`KpPhf#~$jq9S_^%Calp7t%FPML*Y%=%epOOx@V*h&o5K(%rok!E%u zf_prqi+|D_;k~5D`KT4z^)y3!R%D~Itv+A#A7H1ct<$#+I)eN#ED>&MvATI%e%lnN zk6vd0V*S)-0CsJ$ZZWJ}65ydn1;vX!WoG!0!C}9r)NA*jUS_NI4tsTfejY}}^LzB) zW9;Unp%aMJO~2DCYU7h{6r@)I0G zS+8ssP%O6Ju+%KwY;B^N+f>;`wz8~64PenyIdXg!0*?f#%VWqXImHU=(jo2y_MXiG za#b_Kw7Nto{|XUbcm3Oy^sKn1h3+Q&vf7kScl21`Yp+VkZt0CuF7m%S2SKy|-#yT^ zONc>xXfMzyE?4aNjBDKJ)2nD01V9!gT~kUj*p!ULFK1eU*$0RHxxBK2B>H9s7*bvh z!I}`#KN4rG0C@(PhSm^XRsRQ?C!Y}sXONn%=Nb>hEX~IPrCgXYOR5s2m!z(->@O2l z1L6lwJV!oRvt(~QnOcO3yl@D^Kv5IqN~QjqA-AAVa5)V#lkq7v~4J zfi2bzB;u*$w2TsTEKtIB4xd_%n2(t3h-PJRQB>cIA**M$@rTkkhAuoal`_0finF$2 zoo|@>j+iT2yab9!MbqU?{L2kewzMj$%T8sO*On`hM{RlT-fpBIcADa;8y_k7d^Y{( zj`|e`-+D*+oZovoaPz;tsEP9fXQR`Dd)W6Jdze-G`lh_qJP2mb<%VhlHYZi7ibeFB zY}Wh1fb{b>%1Wh$>x;W7x$4)Z+KJD@G~~ONir={uHnlX>N4^s|DsJ^oS19XviQRR! z%3AN|kiGV=ozk5Tc?7vuMza2+>}Kvz;?6@`&m6#8vfrezdALvW4EJk}Zhh7|jtXRL zD^2)=&5ylNuU@i%NNW|Yvp+VBx^~i^mqeF2wlPJ+I~F!!C;*R>ZKH;vYu1G^>@{n@ zOE`f?Lb8A~xj?fdfaO{~*|Qud24@$O1p!UeNC>wmZ5eO0t~!j~(UXv*#F_&c)JGs=ycN{^ohJQdj`1)`C8hSCrJVbX7KlN%PDIGom_tLU zczjYOehmn$5AIV;xz{6Ndj7%r?Q#sGDvcLsVOEyatck)ON{4w?vQl(ig^^})DQ&I` zn)@e5;=@c-+fKCQ0dh9h`vx6)X@CBrQy@#y+3}45mJ6V~yEuDv+in*V_BSwBM6adW zX}E+idCh*lRln+h)wu5{Uz6<@Qlc%zV(V7dL;k^hsNP`*88=KJQULYaylAxAI8^At z-3Ya{=WAha5s{@WVCJPImYt?)z*)<2QGE**3w1%f)Ihvwl#u%;MnB!~SYe(9Du0BT zUpBzbow0tHo!8PmOHgxBF_QLr`}==QwR=qqFzHKH1t4D&ol2&iD5w@{lL_BHe)hX- z8s!%*gpka=`<@sdh*<3;RQd;$-j)ehSG;)+1d+IgCj&ho9}DNnB0n`#CCpttH1lEC z^!DIDRbKcADC$SZd*_%Vm`7or#tlZXQ*hs7?_j5#P0t%tB59<;{d0Ike}EZNwY+Ou zaRJ0E4fCg_dX$&DDT|gcX$e?Rl)*A>#J2&~>h9{?$Mf)SO&xt~?1EuliC8a=7;sIS zI`b`1|2m|5S1~-sXIw^@!5P7Eg1u`pvpd=SW~-@Ab(xKRLB4+%*C6tdaV`{dXNZTh zqLAO#%!OHMqJo(iTT|X<<+OaH+hHcLBH3v=#AZF5lLWaQw)PAMPVAy{XgemdA(E(K zY6^d+?C4Ji%56YOz!dvg1*f$)D8UU1+eZ-hn1@W-Cde4>%-5dq0eL z{EM{xs@r4ZVe+0{K-dxKFza0u?G@&+tDq8$~ve-P#AM?%%4Xp8>PcL*f!mV z7R1=In#UIZZAQ3SbhgT}~8(l8)Q5dFC04)g*H%>GDu#nIl^n zP0!Ga?{EeYkA3>XwS(KZ(AwW<0_(5(G3V?`*mN~3VQ3A`H&Nl8^Jzujysq6VwxKgy z{jX~_wtJB994}E4s5Q+?jBxh`GvI6|BC1gXUK`hBs~mRIRS4Tz+TK&65JqU2j%|v9 z%>ZOl|AyhiRwDfMIZy8Ceg8SeN$eB2S>Dc{b3d0M%LHShqa%AcJ)%4 zb;YOEV76jb-4Km#`6dMWWwoPht(+j=9MecF0D6i~-EfOELkv;f>pZFkzzWcnZg}H0 zA*@;{Tq&Udzu!AAKT%og*rwQ~FM+oiDBRw&YiP}XJqvi&O!)n6^x`apTq@}y^t$KL zc#RQj5iTFuUbHWrV&bU8Ja-h)xZMd6mF6#jwi~ot*sVv-6ukLl!F^A>UR@|^5uPtJ zL>8@^!!AEbTZ^rHs7|M{gp#UF-<3~)TKOTzmNg}*l?$`^C?&1i3;p>_;;FU;EA>u1 z&ctLeuwp8su_VU^1ynn%>~_)luI$Q529XG!&XUTx;*uwR4G~l&qZHu;Ar88%F~k6Z zexPf?)DwUZd9UX5PN;?^ll(;Uxm$y{^1$c(FvX|M8L*3WN{*Gnj8>U-=BgdWOD+p8 zEK2gOo`XvhSM8Ad%t~|mmd>lilt0~nLk_iyETI_}?Z1)NS~6<$!kf4GFFUV!qpKCg zgj2cG5d&0oqmn1DF^BqU)10~jICxbZar<}{5Y-$X1>oSx#fA+)JcQGEzXX%2Acmor z4hy0;42ers$6*5EuXd6W<58c#i@cb2Vddl#Y*^B1dROfB@}XXu=$WnIOb1-|WTYXg zPj>*710M}Wtoj+F29>zCX!>zGG&0OO860T;0hyyIcuiAAsY{Bn(lfk&Ayku-1+T5; zq!agc`Z-QDoOQ61n@CoYigOWEjYY443Mg~k=rhDnZDm>i-O=i#Lk$Vm|Ed%!7uhvF zNX01QHCzHgl|c8a!!y`8bE_y+nd&0^O~&uU|5HGM~S#*H(!Pinly zSak4Hi;0bd0KMobJj(F7mOQFciVcFk_&vG@vCVjq$O7AVh+Rrf zY{mXy0;|HsS`&8P~IF8J(m)kH7L%5sJ1Yd!y{@s75luqSBrq#f2HO zwl!{ebNW9WIx9zOtoifDOuRbW=`s&-ass&au1cp-i#@zM^B4pZhnfg7(< z?!dumfFCY`5V)~}xuvTni};WW#X4+9p6EQls?863nQ)`ygrl7}Hfd;UYY$aMt~o6D zidT7#dX;3p{C^akXFQt?+lRZgMwQz0uD#XX+|{BeY7-;1MH-=~sF2p)TC+9V5_{FI zl^UUTZDKW1)K0V_H<9PP-mkv!Bd+Tl|MNJKl+NCv&Lfc)Ej*EE)pzG$2e~g5M)*C! z+r>D{Ku27quX4-Sz6@YtQldo7J^z@daWCl*C)Q?|I<<0VEb+y&v|H-{L_xu{@zi0b%W8X6w@2L8ZakeCG|)?B)(p-j5moTHErZq5Iyef$@zyFuK>N>J}T%L`fWpR-MJf%jSO5iKg0 zcJmIaLuw*A!n^g?V0!0DpxM8*qCKNBaB1wdcRQ10b;4T_lnkxE<7rPDDWV|M7$$l& zq<0r``NVg084a}3ab3c^yv>%ZBSNYFO2*g+2`QvWg7r{Tcj9Ng-cDIpw>ue==0vM#D)zhvJB?k_5hE7wZd7KGE< zlUAm(yf{M-JJ%+3&S|SjKV?({Ux$#IH?6WZ%>DBUcE(MV@$BMKLCHCF$L7OJJ6}kr zSfk9Rl<0Fl=dNcs*T~s5-dWj?MH1J)w_u1yY2r@dCAXx!tQw6(Jk=HNd#2Q^SqGtr zHk5BFIHXqS;4RaKY zUOwFKw8Qmdo*Gr;c*$@5(sn!XV0je`qGTX?{y{o^1v3r9J%u{DW=<4%b~2nCNBQ@2 zPQA4pS@9*o)XsrC%fUdypwx8b+MJQR6h8?Kn>4fQBj|8LbJJB=X>)dS=Q&^cwPXLQ zgI@Hq56{7}RV8A-=JaZ?<)YOP+2{E%Eu9ST4XUADW8p%KPx4Q4>iNGrkxBw0GjhsH zG}*o4+bZ%m#iKWfR3lK+>@%WwcIjRQWes%~*Bc0{a9k04t$biyyY_v}AV~6*`8F1K z#{GzMaR6Ez{|4aj-D&*uN=x}ZEpm!&XkK7NwRZut#uiY4w)R_)*=uld^`8iMUyV;BpznepNk@z$uDsNCHGP67V#6X zR47H7&V&?7+jY(ayYQNjo~XWpC&@j3Mq;ynrE{^O;Q%^!SWq#pD~))={D-Wlap8QO zKC6)?gyylW3bH{DXn0ggm?+C0_>JBjwW1HqC>Ma1kF{pB+0ko+&X=JRM?JUcVTK4s z>l81}>KG4W74h(imwu++xGy7AmiZo5L?{_Yk*`6D&38riu)t$z(zNAHN-tfEGR$>m zP`s~4EZQ;Jg!XODX9_U%Ok^l`c8=!5>}dF-U*Wc4!mN=1$ZLZ+sx;nkIz*n6B50iH z*!>~60!}sh2pT4sZbFlTR9+X`-&x_>&cLmV)e7d`GYGgM%sh~uQY1|b9X!JE;s?=g zM22tRE6sWoJGBn4(|+*PvR0%__vqr6c`m(3N?5{JyC0DmH!~23*&ibHgiDIe%GT*}`sLKimQ^zjKhHhYjEHtI zWmK~l{w`fSqzARX!;g&hQX_l*nU0=wd#9 z`gHbJPgA<7X*cwnDvwV;m@ePJGw+YVjI!y@p&USTV_!AWT6b981=-|9U2m=byn*4a z-dwU8_3A&7CIr=RxJ4H}R|&Pt;jmy(-5mrBY%%x3CKOXxP0U6y)%dp82m$Gwh13SRbC z&YeH(x*VYsGk@%|_WUp-1TUgCOsQF2376<5cv)m>q`5Tq27u0AA1 zR)3oOSxLLM`{bx*Pe5!M8Tv7yB~|sCpD!6_P6${j3-N%>;j8ufPW3pRH?_sCV`_)Ir5^CJqE2^f@H8GiE9d z{X8D)R2uv-U>(cD)y1Uk0tvFouqu&iD9n0ZisuXiduPJ;>n|a#rd5jBeSy0XRJ4lv zi6Gl9X$Pc6Ht(+W%WKJGikv)`TG{!5UhVEuJyuR@SklAEvDhvN33v+CQ`vS=cPODl zdi22;)|N>$3(CLLhk-I=?-TbT$u0}g&XuK$?gFREjO9_&*P-SOAL#e#nTPb~A~hlF zH@jXIv&d2bzQiqo>d!c6hiW=U6Z_on>5~Z8iCqRT+fHjyNDUb0%Aet#Z;}@NH&MQL zQsMy4D>pQB!9Y;`QUjsMkW@B@QkwPdKxQcU4@s$*#2RE^d24Dd*f>HUw;KA2ZK1V? zd;XxlWX_|w_tj^}tGXic!WC1x=H>9fI%yV@x}fN+KpQ)OJDVlklQ=ud`+!N%SQGE>+KX>;uIkpd^GNTrwXJZg{Mqo~B`1Sjbd0laMYtou zyZp9IhV#2lwG9HHUc4ea!LLG+AX96ySve9PontfB$Dvs= zY4Ze$U%N&hx6LXsfEqc&vneu{1Q7)71)D_jG2p=~eSlaQ5VY zy6NjC3zk1Jqj8NUHq~1pq@%@|TD!uV7K_gyc2(WA#`<|j!K-4#0*@Cq;t&=k*QgCmLZ%!G*PAA!*7_?^)EAO423>qem#{>51t7THeqy*{4al!m!`V zx2kJ zSdSr%xxJ3bSQ~p3iHM@vtQq_E@S5o#ZZU)#*UHM(A0Fz>fp7|K?cGJ8!wxV)8qPtFTU6a1O76K3Z4rD6c=X4jxK+k)%y`Ac z6Lz%K@Z-88+=qn5j+Qqkrl@#;_(v0`zz_PwN&9*71M;_*y1TK3s{`OvJyvao5@gVV z$|N6EWma4F{fxh+(_m8xe(o@ph4V@QwAc~dv;Safjv;{cG4#0Bko3~|CtxM zyAD&*i@dIh^xx-3m?)Y2ozaQTJX4Nm%LOiK@U`hT9nM-jlD3P?TwJO-=HO6-M zl{mLTRN)pXqki6qNC~XF)YB0}iTL+G>HFpJSdaUGW5oBi(L-+hPxyIA{dWG@np0__ zKT`0v?Iz)Ze3Y%F9$};v5aheZFwy};&Y1@yUMxIAHBz+t-c}=C;z)v_xdQbOK~Qvu zG4IEo7S9z`FHEH#MI|18iG(_kJbw|ns@ZH=d<$V@@B;|4O~!#{(|B+WKXc7VxdWrA zI!m4g96u0n{KY!%*}I2WLh?t&j1js&OhI^z07XiA>7cnCX?<=M`6Ke)R3sMwC{~LW zZl68;m}}D+{V%aRzDq1EH83QEe*%5GzG9rG#=c0R^9M}a;A;lKfVQd(W~PMGZvF?9 zw+j@}^ScQ1Kabi0j^gBvU7mWZnLBpgCLil68al5lgNTxD@^dBg*1D2<1SvvWTOt7Q zX)C&Hlvn=@lyC<1Y9Cu>kHen@gBOBio&>g6g?H(wu^Tbd*XrmLauWirlbb(jX3dzj zH+3da`WZ6Zq5NVWl_&90sKq3O}%-}A=$HWKc88iR#W zITy;L(4oo2AoAC|^S(%}j!gV^(y7aiCS9sZLd{>T~B*9>_{A<5=z+8RgyKb`IzECCZm z&Qf-&FD!E}K$3R%F!}&bhM6L{Jy^fAFnE_@K6qqHvgo6d6})T9VVRBNF}5= zU2KB%Y=*+sUrc4KzWbv#R7?lWU6Z3I;g>9HJV}BB+0CupbB9)sn->N9?E}m+_0z@Q zzB3Y*($44V?8tV$Idif>)@^o?#z$tC>njJz#>Z0if_NPbm?l!H{Z+mSskYf2oBG4+ z4r<)q)Q-p;-lXqwmT374k4O5P3jpu6#~8dQF^Q@sc=Lake0i_UgZtK$AOAh+wBU8} zwOmRi#8+?9`(l+2qPYR9K zwy1*Q1k(T?G7?1A)m&)i9r#K-$!Wr$r{114YtkG{l0h~5n0e2W9qbw441)xQY|pc? z^wjD=cD{b`p=Ts+R}VwPtCRaJUbhSe6`oq5b}o$zfef!r`G|-jAO- zuo}cNGN1Syz)41A6eSyf;SN}^IZ5*IkrH4(UB0iKln;bdt3Q_WJ}#``3k!zjqD5ci za;sb@QMY6cV29TIAk&Api#lx`AH(C={XgC}#Ct(3eGCMsPydC;=Bz67rm`A~w@8cDeF&}IYjjEU zPu*-5TSb2;mtpn&lrCoT_5<4vg3hRiq&K)8|Bez%6<9b0-=?BokU_JG56jRkb!|S3 ze?HeX>C92*+x}hdx;?Nue9tiTvdY4Tjmr7ahAhb7(@ORztGr|ri&IUp!V?(A=?JE$ zIpI4M61Z4kipaD1y-~uWJz=i!G_T9LO{S(EvAS%uczVIG!BM2&Y*jce>}0@z8~0mR z7i0fZ`tBYRujdu;_4cbT=j&%si$?@jKaR+MX0B6DpE8;E9n|*BCXmfS%O~V{L>~Ui zzH$HR>-#tOnErQ3Z9BJL@OI<`O_PYhN;C89=`vEBHl*d*47`X#1Cb&`W^9D1ktX|L zeISFG-~TQ#w;Y&^K5i#|pQ)3BFJpBD7d#h~YYnwr*pbZn12k&LN(fZvYOaw@*PBOpm+jz_=U%~4Cgoy$I0!oND#rI?c> zBiprJyw#rPkTBnGYyrfuU1M#TJh)ZMzkd>$u@B72*HWGYbROL57MBYG(gIE5Zal3w zXWO$*+2Ht9X;ZHDeSRDZS{Z@udA8`4FfSGpyjx0;wm@kS0o>1iLd>aH2#s&0@Bi>S zGpOEu>IZrybhEefOVTm!?{b`@XKNF@^ZCD2C{P?FAg`b(!s`c%|GPwdS{%2=k^dC< zYD6TCXBr6j9#G(AI|_a@eo7EFc5h z)dd1PR(a~|!};Z5=0sgtiu>sS$l$*pe+BRO;eRQ*fI$vsP*|B`cQ$T>)Kww>()rOq zsbpYCbCXG9+X2vR%QGXI9?w!W2(@$uB%`>K{LsdEq#i*>YRKuwNw_4Ja!y{+yUN}W zHx%@qt>S}FxUwP}I5SrGzw#98zCeCWir%U{T0hlC^mDd>#?ZR)YGt3)-A;4Mj>b;i z<=^k3bMGLS3jl7cNtu=?(xUL!QUp&%W_8S{Tl{F?Ew?Ju{0xUDeJw~sj?ZR4Y9R*V zH_r0pe6*bUZ!6I!87SZ;nG3xq&F7G6A14V+ zuO>$RL(kZS7b^Af9G1X8@AZiP2!`oB#mwX#D%60f5yU-mKc)94zs+zJv`z00FoHp} zy_$^GhU*Ms%KhY~nw8A1osP?HWh04N)vk-iypK16NzR64EEk1T*NZHwAP`?z1vfKO z@7~?;s%EB$w^7+mz${3Ei>#Kf?ocyMeCUv@86i&a(oQbxjpn9#W#&8l41Jo9uGg=6 zHC`0A{D+Mv7qzxfQ>XwMAu5upPvIxQ2^RgBgf$gP7@kQQzmRgG$LLB)9uT69b<#3N`t|GO55Yn(<*cppenAUKsE7xTq!=WREUAQc-AI&h(GVxpQN`# z?v(oYs%f--oiu}08Yi=*x8qA6`u8%foVSc^O2psP>j#mi0{&Rw;N*9W7a!%jcyA}- zjgi8i5LTm4Ss=NbIl0HiRnVa2@k--c4KvNvPA;lkwX(7`wH{4&7E;he2bJw?x|tr0 zra3Ad0FQn};*1wR7f0;?7*}Vu(1#lr*nP4qk0ZSS-}*9V)U1rwy&T^6vfiyRhU`X%G2U7M6?Y!* za(X7w%{~j@PJwJ`^gxpO=LR->e~?w~w|MCJNClN`NQ~sAN_4y^F@CtDVJN3&fhm?b zj~7qFPu#|*bPB#1ZItoWb*K@5>9=UurYSMI*u-EG*vq`Q%Ae=m-fPoa1Y^*K0|gd>D(}k8yHV@DaMu}3ftzQG!33T2RL;#( zJk1nWf&VhWr8R8pe*dgO9J#IA8T>gq%;hlR-cQU|$MSaD^CrbOvP*CU>7AvVSu4`n$#7!u-Q*8OqIp9FOQ=*NnSlUD{k8+yj zMdkm7^eV!;(IY?wN-2F-XyZr{p~>&Pb5SgvvG1;lV~Vri15qml|KQmT$;nd>+D%Jx zGKL~Mbifd#op{$FviHXFFw4Chhf>n%{#nDw5qI#@+l2Jjo{XU{bm4n<$&J%I8~CGy z(%I5>%(RLYjMwB#Yr2K;XMigGze~+x5n2NoYa&w?a1WWxcsf7bVcqey$NLI!eQ2Kn`f&-=`^Xg!wupg+9n zf|O|Iym`w@@)qt+1$>Wg0L-m@OMYN^{S8g2wIyxFaVnVdvAg@7!06NNc_*tRGy2_I z9+r14d|I&qX~|mhawXV&Ps`dI;P=vC;5SGg;tK7@S=dTlBnJd$nc<~`HO5x z!_tpg2V5iUS$wD*!Gt`Wg*cj~ueFi|wD=bEXV2+lXQPP7-_ME#OlsccD8&3>baRk2 zt1ey^Tw12lbHhJUb(^MuUMpyTCe;3eV5%j^@>})Gu6^4}1()t@bRC9$d^Kwu6u0D& zH5 zfU9FxzSK6%@#UkpG6Bm*Or@#~*iOhNq00iR4OQOCj{1FLRaIB|E~Tj(jj2l2xEa30 z_tu*?5?3ekKSMNUN13|IzJ`Rezg3jT*m<5}xwdX_Iki+3qM-WL`3h>5ZZo{k^3Yk%NP3l;0Wqlz%(e zYAwE9St-`*^;`~9*p9lYpCizt+tyxiU~F8vZ7GtM)V;j5R4pN@VeHCBqRE~aQu6a; z48Y9lD8N$|M2|=rO;&IWDQAzWO|VtmZ$y;l%4#Actg2IE7s=Ev}!GwR}V*KkWG0(h;@n_#<+mQtmOARW8@;o1hBA%bz6DWKIQ~o0}AAmw%bX?{c zYGC}Qui{b_tgrIw>yLb}OR#U;BAx)W5km~L$ATFV>oj`D2z)n_@?IszTW>M@?@_`T zx~4JW^8!{tXF;WycPEk$^Hw5F@<3a%@;46}-O0MC{XqBXaJ$jPo4@W8O>G4m2!Go0 zKSeI7V}Wdb`mAZ3{MTdAaf5DKKer8Ao*T^(Q>`+{4Ha3l{|RkS`@gAEy?GOe6oAif zpvjeJlOq%>RaYoA3z>;rA_x^$TgM6FCZ6UhrjuB$Oe|^Pk=KTGwt<%T<|Czl98{{W zH1#>bD&|{ELoNljt8TD12o8?iWaXQoSXP5@R5_yUR&52yQEAESvw?24rc-sH($iVx z-zBRuV{9@UiC+?K+Vav#eIyq%G(D7m4%>jozf&1VMvHdYN6HZUp`5v)9hFUA zd<`&3%GZhrhra)`-9aQ zHU(@YMMXn86HnO!5LF20d`^1vr{6XOZ3c$*Lv&(INWF7tsb)97x-4Ns);C?ZL+_7HX; z9PZ+$<9d~8?5^Ld?zxK#baUX4ly<;qz*Nt>f>{G;}kUG`&}a*5L1-4*6WBejJgdFS3!h&RJ=r7=WMaU3_U7H}r{mpO{)yShYK)FS|vuNQTGcrKcd> zB5%9YcUcmk_9fmUwM0|{VPARr(%>bU%uB6DOpb(W2<=nHi?uwGG^tX(sXQ^Xo zVuFW&H10vM@ZP8WDt#n5g7<=N0I^ zb?ZQA0k)CB0F`H!Q7}*vU1@W@H{WK;Kf2SJ(rS;ITv6!dF6Mj|$Y(mB@fp9y7qvO+ z+o2N3ofe+7l>*sZy5VGzQ>NH$cwo(cEmX(%$f51yt<>xJA$xd^l-wVC#I3XY$IClcXBc#n@wRz!?YTyw+ z=W~qD9CW>x%`pvw`~$W1A-;S^-wDZO8Rp$xI6w3NOaZO2lauSs_ODNl(rBC=abVVd zuiD)n$r+?^C6uQy+K=Qq#J0d34*w;*-1FP=t&{ho7?o0qD}$Z6gCWeg^PkwB8l(z7 z!sKYc)nZAxP`AG?Pn4SDTOTfv%brs#Qt9I@b5IOxZ*8I3U85|=LxHmUyb6B4}a=P;gOTl zc;uh>pganWtL{$U#(foFZf@5 zquf{1#A(kT7xogGm?l;vwkQ>lS#*~(VLPLoojzOKRkjyemEv)8=vO)?0*sH}FZ`(k z9{RClP>(p&(bNHCb4UXz(;B}#^!(q(8Cg$<@t*8*u5azLwSVW52vFV^xvaU5gpWB1 zHvsM@HzNP(y!Hdx%`HqdSmuw*PzaolN#=M(>Vfyz+y7p{8f=o*ctcfx$gp5WC3-o;I9#C(-V}SXVQC zTHgy_()_b=jSLWZVw!xxOtOo~kJ_O50K`Id=E2l+Rpk9?ngCL%tD&8gGSBSYG1j>BU(QOY zW?HQqOe?HoqO-#F>x}Z}<>2o{oSb*DP)NmNJzbhGK%Of9YL&9tcmNdc7oTI- z>(dD9w`l29=@`7<5?bKiH~<-aG7+YKK@DOg2k%&)(ZYFHgNYPvZ8!R0#jiGJ10|e1 zBXgokhqb1J`s9|*4<`(qoUihi{8*u9F|W`?-30X`*`$`ST+QsMW8BV``W=uHTgL3? zu&IjYkuFHT3p7pLl;klK$(>AqryXd^mzhD!cV30m)r(~cJtAv9A6u~8c>%yRjx)O^ zh0O=T{4GoT&T{eVSRF+MW;VYfDPny*)jm)=a5vAUqpp*1AS!dXf9N&~e=gKA6{21; zS33LCVgGPCJdsBf;BezbAWu-aG+~n5hYe<&G{GEQv$OMghg04Sc?OSj%Q7lkvba&O z11Ybo6dj1)&)J6&@(zu?L)v1bxi8DpQr&3DYg_?hoI<1bUAaBkDy-@%rzRBIpJNoT z8$NtmSz%RnFo=9s@ncMz#K-fG0Y@}3UpY<|U5S_b9Y*_J!p z;?fire_-89e`hH8V|Q3+KPK6gk>VqUhPe>|1)=g>CU{PO2~3bZAXj@an8`r>T4`)E zc9V}CVX|%9-rW&~j{X9Mj_zBU-3^L^+eMbshQSPgmA>C8nZP_C+W{jNmT@UZ+~Br$oRx+9PfHxi*B=Q%+eGD?cg~ifK^w}@s{Rc$iM$fwfTWZ{Mw;yH^*`-=%rmqykJ($T7d!#AeQ zL2TsT;<1GU6a`2c!aP<3e3E4etqyj>$j+0`#t@ zBxx*7c8D~T=p5GH+*AP5v^*;_%_X3t`<{Mc-w&8&cYK;rZl)nB`Df%sW@aX=cwPfM zbGKLS&Nr|Bm&^?@-T+x5*AEMQs0gcdHqRtb!T@$KsfpV(f^I^YmUQTYVim4a#T}7{@92`We^V;2bG`1jBa1M;$n04gl^x9IMW}g zO>sg4bZpW=d0g|+ffH~<)Rf{oyIp8()BOSJ>Oq<$l130 zYMNa<+Ta<*k$cAZZT%xE-j&0Y?)_Xps;0oei9rTT?(vFF4T<>`oZk6n10%OF?Bt*`|4c@FYOnm8QSfB2EPHp`Sc$#LZ%?CuTs-eKY?8R?DL8fRJ!#X z-!)gS>Yr_`8@4Cm9A#wO<>hfDMAQ|k9_cwwFaZ!RVV-^^mK77UR`r=U{yhC7HrEBK zby;;>9Vp_QF0(y1%w%|EUS2;^>BhCh)V5rFs&XnHrRM`)TCkbV2`15DQJf%z3M>Qz zAbg~q{udqW(Tfb{weHfDKi>~4haSK}%m1C})9&1(%iqATP@m7yv=BoC z^dY)@8TVWFCZ)CK5>YJOiyrsz6GiUXG|F+OMZ9;|Fk95D zl0X6gQo<(e8r@2L#q=m2I?BTe#3UBXiL|8~bQC7N`VD+Qg24>6b2YEZ@`Kz20XTK$zVSj|$; zP~JxLS{HuH8LFZ9^mY^{xE@QJNfC&+mF@#<-(zLU!E;%(!*=T7Blp$P2O4=dHwzN= zJ3n_-Hh?L5Kcx#F;)|n?Y|U0%e)Qb56u%{~8tRbtKx8pPMEV~$u|p0;W>$Zdi`A@O z%nT_dT<6Ay4$e>Nbq$7(@bWiD*a*P&+4OeSdUs8WG3t_!v*Uy5daGJcU@(cTvfVHg zxa4qjESt;Ugor|q_o_Shk!E;#I)wM1ein-KU;|~qFOqFqCH2*R%K76QLq-dA)P(vj zo#z>2fY90!0>2bxd}z0J;9rEOyO+w;hSL&U(i(6TitqvS8jK5;?OjCYoodATIm14= z3@6V4IUD>?R_O4An0O$T|F|;^XJF*(>4Ye#`)y@+9ClLAw1XQP=0&6r7&Bdr$NqI? zC9WrG+q-!&2Gss)>aARK8bWLS7Za8aLG-OCr?98M$&r&kEe23GsZx~qYD6&>WQ4sL zEF1J>wmILk1&{+>j}S9meX(q(+W~dm( zVSjYhf<~Xb!OVmh-B8>A6owB9m(8w=C;1zT_7D%h;>m(I9(b$@*R;AywKPLwo>u6i z!jEfpW|T}qL5RIR(x`2L6~ zZ}F@8)dM<4_C@BAAo|4ud)~m{G1cSH86;_BU2X41F?^RwUSd;K6vC06g13I-q83ZZp?)a5?2HW6sD4Gejj3Yi2X3eBAjE?K z)V5v>Y!-bm*QoBDls{f1z>C;H2?8b?agj{3ZWIsF@!nAA^kmf#o^rdk)W8khJvIY5 z6YXAEP>M+3Kh^YrSel}>1Db9QVb8$dFqc4)s{%Zf4b;ZCa6jrAHF*5o6e&$A-McwW zg@~McL`LPVten<*v^^S zg-JTQz|rPVM00SmD;KE)*@-Ud|tPl?=Y=ZV3@jmssx!R)xANkOf$o!5N0Sx zrQ6*cj&~r4Y5-gF4Bm*QcLEcY=@FtjG`)F=rArMqu+cYmpfLw4xw5($;`1xI(&GHZ-_bolry!0-$CRK)_Xph`QIfE zsM4y_?+)cZpMjWEa<`UMYhtZDK(l-xuOcB%$tT4C3B)AqKmNf+XWAja2gS9^OKoNg<7VEdF*mDfeeu zVxVMOI_TmH(tT3mU5>*+GbW~(3rLu`-CI_U3~v0?yJGo(@xjn36A49-izS}obJM7j z_1_QsdZc?Ao5QTn_F58~TSDly_~+?+;p9rv zQ2!`%EKhL)QjJg%!sN7piS6R#$S&!x^HX~j_o2)n3|2?!cb*3lEse^mW=I^cOse=x z?i3PF!>!$nFOc0JHXt=F+H~)tK}AwM^fi@uh-Ha+P=AEiT>o6P{aq_o;F#^%u1!6+ z*)eUi8UjIGi?|o?^-v3|cb%vqO7FZ_Bk<(Q;(Qh<_{ACWVd4Ox68}lUWDO@UZd=Lm z)jcy@8YRGh-ve_*E(o>>MM9}lH_k;c~tbV6;T%)(@0^&wEb+e?s_4G5I^wDM-lbj_i1F_WJi$NVdI zkdvY8)vrCQrrKMCu==tL!w(j_e0o{d^_ezV#I)L1VS^|^7`Kh-J0FJ$gTvVr5KJWB z>`WH(Xo3>0F{-|&ihg(>;e6e~XPnDDBGul}vPAYCk6e(M>iSWJ$=XKu!WieB-+ATf zNJ*Ww*CB;!Ptuq;t*7NrFf4u$g4ma&JkY3XvPzzJa0@UA6{E;|9CBK@JhSJzk}WX>G_ z1y`Xt@40>V?79$nHT$+C+~E3wnzY_h@OOMmHeNybMOD|qlmT$^#Er<|2d2jZp|6+< z2PQe1JZ?AAxMza@(`yc%Y`)f!Y-asxVd3q)3}4qZ*5!kFPSeCkbEX9GelCtb4^`Dz zc+pNDi^a)HzHUkOPzVq?nY>1oYbOa5eOWBahlc5l z$Kw1z*wvmy_SlpjmqsVhiimahw1HysV~{!vY<$e~`(=gt-^Es+=(~OlJly^J?5mV* z*7hi`q}Er}Wh;oT=SgGtqp7WalhAU%TfC3C%Q~8i*iw2t>+5K@DV&ZLw*VWB*D7|EmPAuMXToOq#lgg&t3KxE zYy3Zy$2BJUBt&x>omBVRJTK@e z8kAAX6J-6u*s;ZPLCM54TaEo9|F11^S$p_cKovV()6f#M5-pe*LQ)S=cfYrfKPb7m z`eLFKER~6o?mmJF#_Gy8q#gCG38$GAId=$Dv`cW^na^N)FY_&6`Ky)c9s3~9g%#C2 z*bF7~r|rNg`SfKjxEZ{U4J}_zl+#}3wV*iQZ1jBYbK|(KrHv7868gC30PMd_k70dxPCu+xey8qtz0e5{9fVm#Mhno z;lgs!J(6KPp`H-|?OmhmoI{EdESM?Ly=w|H+E3k@GPWPjMe+}H%yr=+&~^E!5Ee7< zK?ZCWqG-*h%?Y}gCu(D15nFBw92G65hd+o5_1!JWDyGkC{`6--c=`~sWQ?PNG(%qkz3oGKWzVVL*tAYhMWzwmjPaF?|6*u ze%|E*ezxy3y4-uN*Jo)G6!>7y6t;4hxHcU+-3;cSs9B~R>m}G(LIpUJObc(ET1VT? z;4>I>O#WCzZHiC%TQQt3Za8quMq1yEt0_+`ceND;v6XAQu&d;%1F=*bev;OzZHB|9 z9|fq|%d!5X7K_#A@go0;OOSnAl&OxQnZ8%X8WzYu*!AS8MqO4OZnnJ0(Kf@QuB-JOu~W8t^H2kN zHxZG9Ltv*wlq=!*IPWUa9OvS${`VZy0Oh$p^KV}C(rPoyZma97Q0x% z&rd&-c@tIi5{r1JkP3t>k`2yUEh+d<83koE|92-ioXK=J+GLjLmzr9`AvF2%d*R8y z;j(2`^*mf{CL*`ZhyLNSug$T} zA~~GgI@hr8{dK?GvX3@sO>pi|$ohz*xYTocPtUmy{dSb8@Ybdqni_ao*RVLjZ&@E- z;1xe$k_wvju*#J_-7&Y!Og$)pl$>ap0^fNEd6SfBOk70Xqf`TR7{4?B4KSA%O2qAluWE{sK``Be>msw`^JY*clILJ7J?0w90 zgzR%voH)++_x}CwI`&eM$YaZt*^&~8AZ-sxSChjJQw+{ZUf z1wwhkUVmPeMt^H>dnaTbe{p->=iboFQ^Dc0F5q9!Tzw%k!yH$JZHEVYIZ5hx%d(J4 zn2~shLWKT`X3_DSR7cQajwMGjhLb2M&>qiOm;Y)H`tTH3*Ij5`RV7*X@Q)}9C*nV= ztGBtQ)Vr-*T1!9oZPL;x-TldB<`jol zM%DJV#8EL-nZm;Zs>E8cmffO8RNziiPq90K%#$odjlpCpXS^9OhsMY^zT=U_chU-5 z%tbx~t8>ZNtvgIs7OMN)34i?YZVxACga?r(9bj%+Qu4HAG zXg$}A9o#n4@HS&{Kakq$VZ&D?s^8q}^v)%O+wF7Y#*&!poqA$$(zl;%MKGEmbF~c( zzJ)qeBC$|^GJ> zpD;ZOw33|vXWP9fdeU>92*1>*8g@`JCnTVw5`xHF91;%=Ymn)G#2sWD0+%P3dRw7B zRYmK%slPdfcmw#X9d3VSe`E&ePYfEaM|O^Z_>E!SSVhb|RP;0XadDhbyd-&=f1Gx; z4XK*;Rp?{G^Qmrlea_fz9avS6n4{0Y!O1&Yc&n#Gk65@>N2*kcWEUE+7zk&x3w+G8 z``Sy*GW~i$thVgCVs!Wj|FS>e5qo%qT_p1ufcaMk$2c7N zi)o=n9_2d!0g=ljJ*LjY%s0*#L;R9I2y7Q2*_5BAYP6`ixZboLU~@R^TLK@oRPOh# zceShR&jsjt7Ej>QeDVRZ5#0+vD41Sn*@;%3%ggF06j44MuB_b?Uz0n( zc%(MKLuc(i#WOspntEV&)iyb(N|)e1(+WPWNV{0r(q5=XsGZrM@U4oztebx5Z#3u^s7dU@18-2^3HSeHWH60&*Do0{dC|8sNBruwJz$eC#Z^{)sRE4C+tS->jdhSU0MP0|uuaR0lOl6Uoo zjuvbi@%JwxJ~pqYEF_{9lINCL26kj^V(jzk?CGeRtN?fVt&al=_u_p=V;WjO^#*vf1g1^ZXdJiy;vpE71O9dHhHE2 z+ahz>p1wg@_C-95cHQ2Gm;<*H_~ald3cF|gzTJw_NH&$r+(IlZ15qN@9&mW(lVjb?wHr9KhUSdQ7Ufj~WR;G>E;bzU$gEx09wj-nD7^x#v@@A3BD&S(}Wobh^w z9?}&EeccPw`w8TwH`4DtokshL+j>UP3bp4c?=rO1FRE_W8}f^{K0wORM?d{Wp>daF z(?gu-tQ$GCZq-uEFcKI_&7<_&B zoyf;4%&K<2MI21R=iX=zyH(}3miRY)+G&JJ`$T|Q7Ne~mSW*C~A%Z4GM2``&-z*jM zJcMg@R+wR4iLcAXW@JG*+Ik~SAgjNPV>j5KK)nGeoS=)AzGDL$mByU+J1P-a2Vf1* z2XlX`|MXrXP7W4bPsU0$);&xGF}s#MDoU?|`B+TfzxV6(SDsfJQt`z1^;c4Kr%@A= z$iOpV4I{OOsgLj$)oqL~o1ChIk5}RyFSgPLqe6qfUGFnuU{wQnPp1~T!|ZzABeh2s zd{dvm5Lx?G{iL)bM3q;zB_R4~gQJ>^vTMO@tTAV2SD*iw zgp=t^oa;!|1jzn^C~j$fJB`e(@eR&o278i(#%(f~xT}c1^8WDuLY#s#k2tqxiaQlz zm+KLix$ncexHwOs*KHOMbv+hi>Qw5rJ=;7D{Sd2H(&@@E5?EXITXvt#3qg`Jb(Cfl zf9;X%$#rAN{m#A!@H~uz*?mmEL9o^vd7&8EUvhm-N(bb zo&#NL(w9>9AXY!yHc%MBNIQe=_z22yCJOIiUe{chy(*iCdpaqTr1a|c%2^i=<5fy) zG2@!2;s$O_`=_1w#!cIf{26F zhUG)afuW;$Ex|^S(QdCtt{hOiJQ%A_sHlx9bZyVIrv?%f8AN)H)iyG_*in_=8ktzv zE*ctX7szsrF)~#Amt_Wigam19o}-QLMNaT&;5E<@tlxko{W6NSc3%!Qe?qcx#nqhv zA)$qUtt!~Y0M@5G{-?cqftmT#ssksG9pJFct_~67`&7Jt{%t^;@D`!_fadIV-$;}LrG8N*Hq)_8KNBpm(A2Vp%_xxJ0B3dy^rnSK>R z9^s+Wi=>YnU;N1b*towpda`pb(dGdU1%9jEx4uc1)#Z1fbnCsr=HX)0Cd$>G!hV<5 z(nwyt%z#-x>k8Od9>;DQENed055Q79;`EDkAdCO+nlX{t5~OXL9Zsuf*(cU+?M(v6S(Dh@}AOscqH^^#}~T zmUTyf;vxexcUkW}$j>8%?HJZ#evWbP-} znpZ?$Y&z?B4bUjo!#YROief?Fj9FJ4)&U#Tln1L5K5dEGJ?%)+NAi`Z>ZAZ*YSmIG z%LTeO9YUF9WYDk3bqN)k@>y%PwG}>Th)^bTehz=bQ7dSjRB{xfoGsg3C7iCqykGpw z@;OP5D*f1?^-0S=Eo+#=s|Un%;8}GK%+e_xE1^JlGnMZ|e_DGzf0I+qKoTVNtMTPb zxRIlS;FILy^G=MtZ2v z@@BU`$Nw#~+xgG0;{{IjPjzR2-*c!4#>lM3PBNvSyfyO-R-<_2{`$hEJbN-`*f;G4 zYc}rmBEZxC6&~^RxXd>VQFE!Fm=%&MIlt-?0C(^B>z;1^3v+(dQK=n9t=Y@d3!yF- zbjaCj6zI(WKhOv`4*pL-`$poY5A`WgYLP53MEIjG>zeEQgvA8mIT!p;MWyj(4l;$? z?rFx3hg4u-zUhpQ{mOu^(ivn=HLX~7)n3*?PoYfS0+1=FK*13>V+w#S6Yf&&X?va? zxI&lMBe(E(&FlpvznFR7s*~a<_q_tUP`>M|r(Q%AXWg&xDueiLo4Lq+*W{hao6E3> zBgsXyQs+W`?+UmVvI3!brO61-w1cjIImU49edqS9wqVZKHrWk5*eHp z_!XsQnKG9RqV>?zAL%cxqYyFIH`(?zofmeGe2oDYr)-C4Q{5YXvy|s|<_AwG$Tac< zYbzsu2eMO21Im}5Pe~l_%#gXXN+&CR zEu2Ry-tc>uO!>{nG-bSs4VD~@B*)k)2Q@g2n&W>Q#$|wxG3j3zk{|2xYS%b z&cr~XzGU86Lu1iVk`R@m&`2?WU2~)kgLA=F$czeeaap_=r0S0aMjQJ(QikO+h}@;( zBOSKUonSD1`9m3}4?UbnAhEpwK;}}zF4a{%Lw8EHX#GtHcL>>QzxO-KSw603=d7Sv z?&*4dUAFzlqB$2L91aoiRWUolXrzN8m^62B#wk(mH}NF70T{+8riz$1Yu(u_!Ehv@ zAZdW(-Y!f%f;W!`d**Vm)G!a$F?mXs%XS`Q!eTOAiS|5p@6-6yhl@bR^4-}=Vg=;s z4og4#jO>cnE5UkBQG4~h1FJJV4*CUnC)^V?AlKD1yYK^eZQv&c+BjA9056-*Q-a z6xFXyNq{UaA7LO-jGI#kyHvApw}EnvlHeNHK4!o;^U~P93!jZ@hJ3IAXADF|NTz4H z@U2dACH^Yr$=4=Ok$UxTv;geKzx6C zpOwd=wbRSDHMfQzBc@Tn^!W;;4&l0_*J<8{b3mw*N^!GQPNEf;-#bLjGP=x+CS(s_ z#kqt>9RC!;b^fc|8)~4cu=U%qpUA>Kn#(kS9zeYs(k5}Y@-O9J2jqKQbi9D-`hqM? zGMoyyj9{5iGiD&M6KiVMV9$TqN~im@+FkyK+qmaoTLoZduzV3bGyQ71nKsWNg$_8% z&%o-rbpq6zd+PT{^p_??fIUiKPdJYiBs3J`r3cp)zv7Gg>5_YR+vdVyWPy3kA&htH zf^Bv^>jB=mv667>T}^h8F~dNp{1pf-i27Juh-wx^A1jJ;9R?J87a{<>%B6l&Yp3s66kYpPu74&@m$eJ{Fe_Ec_xY} zKpDZ=9`$l#85jZFx;LW|$aiPGPXH=Rp}SR#QSLV~U(UqFuq`dVJCA-#gMFXCO^H?| z?VQs3TecbK!E^pPVtjT;=kYBlmRkW2Z5GrNN-Xu}1{NFp=e`nh5ha()s_TnFlX<(L`}3j|SO)lJO$be5T>LXPH6GdP+G461RIM%_ zFN5Qh?TvU7)XS3N2oHxx3!lwhlozgZ-rlVEt1tf$4oC}~=FZg8LE<_vl&*ffoI;(| z9g)%4Idh>hi?D`J1jp|}i#q6~-e^U}qFn(~B>UU-+#GIi%<&D5PezS3y7EFS&(R9q zSW{nTj^2M;@%EqQrSSrSZu$J|`+OOmTov{O%-hPPcu|}PMcjlKaO<4y zP#daGoMOO^Hr@@+O>;adU(#e}1pFPsn{>+lNUc03=q7^#39=Jm1m7t4Ey%O&Of%M8 zB`en4JjL7yzpvDv0dq$8>34itJPS5MDcWXvG!ps?Bjvnn|W{f2pfgZUQaP*d$}xxn)r19Fdn_{VZ)!I%sRYSVkKxTCbQdU{2ps6 z_AvZwMebaQqpAIf?VZWbzs{T6(rNCpV_8ITkzaoqWtHf^IhVGu(Y0z6a37gyC>96A zfHHI@7d>B7#OyyxfW}biKU7M_4*3l9dp&ERq#c~sG9c}UW3Qpt(guxzB z;#T!9+rQln6;Pi|C$?4U5N8cHB&rSYHi>Hm2YT_H9@cO5Tt4~e5*)7xc1f}@g#)y& z-v)M%j5lMym9}cIhs&vSXzS*(oGWIOf4ZghAmzj6_Tv{zroFP{BQiRvNQ{UeD4E1x z^xaCthYcz*a^{D;f)J!rK+4Z&?Z{_#<*<3@{1J~7Z~kbV0Dkx7T|^EqWBTBecC_>9 z(kMn9JY8id$r$Wy;0nz?af@vEP5 z;vkKbFyxRU7o9((9M(19NZCFY5dSn;e=d++fKY0?&yk9t|PDS`~s{LHos5*TQf zw^si{{D^hB2Q=qs3_3AkCSAeq{NvQ-imHkvXEq*|F-S19!LD2AmJA34$62Fdik4#1ML7}!St>p{_mTf6*-Gmtp1pg1cQet7*q<+>cj)w>9aXbY*KQ z+4$ka*ZJRRyeYiRH3=oD$<{SGsT|FXfaxTo%F-u8-?z?C$0~Hipd#ugO(sR&>sD9{ zcQjlfxh|>7i9$jWtl6#Mu0?Bzo{P2+)f+9CMQljzRYqV5V`l?bWuzOMyj1ou|KW>a z45F988U_?$0BsC+AV`^Ca@L#&lTASFMP~JwuirU~;!VSV<~3dFkKRz%{Ba}xzKz!2 z;RpwTwnefGNpDW#N2Wa7Rc*GZ5p~B`(#lxY9B4kL&nW3HIEaNk~ zb}#Q;WI&5$s*8A2xX(b!blfeASM0lMyALPW?xp_Li|O!t{0;OoV%E`HwoR(iKgmKA z1bSdhD;S%c&>T~!JZfrEzNQWq{;|#UuQh0CQEAIa0cXTp5;xI8I;(~2^l-GXGUwsy zo|ss0D;eil*cNbEWMqVoEZ0@01KelT|KB5oE4C870IC$-k;3L9)-B$CI<~$V56ZqG zkr@e+3plVuOsFQT!jpsUJ^c8OLzE68(OddRKJ5Ee`>Zfx4XjqDh5SU!1XeX%z^k!G z&R?XJ;Edn#vVtI&BCyUq^1O5ch?Br40#b5~dP75YB0X?o516F)yeHs?5@ECX8D&qoLj9xwJVL}M&hw4mc^TDdqkev8oB*8l0(~hH)d%c3Hw!oL zdXkY*nEYX0Zj{!g87UBdmKx@aud*amy+>)(A7CiDw^PRpro!d$LK%w>_f!k7QU@<0 z&eIgeT`W|!tS%arY{4OKVtcF6%j_a7=#I@WDSVGeS^B)qW79dXHe=_7VOh zG{De-!BBRGS}E;G<=Oy*iQ&_8PiSMQO=*Df!|xVD+kFI$_dt-Py9OfT5o(;UIp>3U z_Q#kG4dUR*%K)-qtv}}kJ3F6Mx`vcz7<_&$$MOOC?_*@~JCb-mKGj}F2$s}-IE3sZ zDAZIO)?5}Hu_4v;s`r0xiwcyL>aiwc3ly)z$V|qy~9u!z7K|b^D$E zQwKqKZvqJ4l_4^hUj5&0jkD1?uLlW7lgt%YwIsev?wx!UsY$`MDq8qLChX%#M}31U zmF;VqC?F!|#k)*Buz}Q#YwgA4p9QovFZ}I}(sbFb5MyxpFbT^yAhqar-=kP^PZ{JlbiBg<(Ilg%Q$KemmEcj=NfmV z6hn;pzI`0Jg-7c=wsJLHqCAmaRyxBH>+r$@81)Y92GapXtMvj}c+_3rwq?}O64y|A zC#+%v9ay=)oTCMJJ8Vay=#!ppW=Q_nB{<4rQ_#EqzUdnr$Pj`uDphxwz|DSCm$T4KEfe89mnPsqsOh4K$L@{q0d_XHXoy`ttTc1nBa0oxs7Iv3MVOfxh(D6u-bQuN zWAuD?!q0wSKMiF(h=0-WeY%uY;^#jX3G*nENM_(9{6b>Tj8*ZwdtUqa+E1k(N@+>rvc!9k(^33%@;#Xc_@hrcGa1IU&X&UagECfIOzf2JH%iz zgYj)hUSQ$E2d_WF^YUv}TFGV^`;e|KaKOTxw&#AIAnLciwH^7qJ-Tt4xvX$l$Bm zsLkAU3Su(LyGt|jP+k`iiM@*djN^0&#*Vid!(r+Dr;v>0@et;>9T^VB7EQC;DF||6 z8;Tz zh@S-&$JtrL7}ab7AtZ9V_lhNG)|O%K0r@FFn)D7 zKHu1M`gzNv)T2Sd>Ng#!lC~Vz-}lwJsW)>6CgW6NSy(&I(OnUD#Zy5T_0Jl8-A?vt z{aC>~4~f?qV-9T}=|1pv*leY~-QXCZYJE%xhg()yU+ViuSI+uY@2ReiJ?&m<#k3e3 z*{%ImYtMW*_WOBsgB+!5(J*U5g{^`pwsuQoKF(HbPwQ?+O?y|^#E64Ol>P?ZfDLhJ zoGe~uug3;B-ymoL#Ig;E2|_^c#UDItdmja{c3ihxe|#R#+Lke4mmKusx!-r{hgbQ; zCj^E`9BcduQ2&CML-^b!<_<=(ET-J~$#&Ap?Rh#RD)^S=_TojjWoQyqNGa)v{Wc}_ zKStnELsI{bD0ityo(71FD0ZARDxwZ1{j_;X{>qK__CBy&nhTXa%PyGS!(^i;N(A9M zEj7cmM?Ww5ArZ6!si1bvbb+e^4G*|KRyrBG$a1kw(g==lhi*aC_AIdqsZ!cuiPF%) zkl+Q0r{}ggg>UQv4-F*CSmJ|$0Nw4$=Dg2mK1G&a%BViEVSkyJCdbs7GOdL+nfT;^ zMo~=Oxv0{%4x$q+tSK7LFOA<2o8TOD*DT2XYB^Vakxi;{)rPY}Y(ryePI*$7$_Em3gOEgB=BDBoJ!U$&z+D3toI3$o9k%phSaK z{o+49)%M?#$53y{ZOi?sNyg1g&H})%bYc8XUW3S=Kw>%pI>OTv4>y~EgBcvvXD*E} zW{#Zv=xHQ?kLsht@I*EJ3SAr!GH54{Ie+n7%**+>$%;6w&_fC1oT7hkcsBD=5sN~J z&(m4s$NW3#9+n+_4TNYG@ui%M7?ozkijNk3D5&{8B4{eB*R>ZScWIpdMuqJE?XR5o zo#E+{L3RbIwP7lST-?_CO2KNYC+a&nlv?MB1(O#^Tn2!wL+m`@T) zqlzR#7>)y+^8UuHz+);F6s3^xwnqTW0j;+U%B(!7jfF|0uMf@Xx`MYiKDTn4!Umt+ z#2f7+bCCjs-d5pw%Yy;G^)GJ4&lb>A57?^C9P5kSv);;1*E*m%N#o5*(tQEf$i2YF zquJ}Stj+{Gz!~>D=nFeh5_eY2JMlr)CPmax^<%P3<@aV~iO!AqztqplIsyufThYIBfLcB*#$qS%*I}$%E;;^Zb`Kj?~zR zH$Ilz{6E-k{FNBKL!&O#bC*giO_5>Hd5ft#ug+t%Ui6Pio^L~Tqp0ePtWr|=`# zGT4}r&k*9bC&742=H9{mHv$&>d&)X5pETBn-(e}i@h-QV^$#R7W_Np#@`|bE?5hvO*#n;AFN^~>aTUK$m96y=l=lQ12QtZ4eVbHw9 zu{PAt6#QEpur5{gk{Acbccw2jqWTonDaY{so7!oJ>QzWyERO&&lfaK&e6s=QB<{&a z0bNjbh3-&0yRb(Z&u3e&R42GK26|YhCF)x>=#~;ACw&yFsv)X9bz?Bx?*R>Z1-e8< z9vM`=b{D=4Q4MQ(JpX5mle5s#m;#)E@rV?QXMT5FQG6+(tysl*nD*<37wElk#zI(# zdhS&kS!J&mA$*vBsTw(ju|RjDdxxB&0iP2pEaWWwUr^q9FSd@em|-uaJSQ!JchIm7 zY-PgODSB9;qoN7f<~*T>K>*9$5k*)jalmm7Bw6XCk=Q7&o$-AG@bz{^r9J3qR#hzD z@W?S>zds+yY5{p~Sa51B>h_MJnn(EVFrA7^!LG@x2MHE$$Ybl(tM2SZGR^s!dD|)T z<*R}!3XtmmT~ogj*)A~c$8%G))AY(<3pSF(U!%;pcDiYV91_yhZm8P0@zXoeThSWR zO7J`|N59*d9i;V$zX3FhM$9LW|;Q(^i-nk0^23X+~qN6uo`D8H%m5LfUW*;YE!;WiXS zW%aOEjQ%t&*2_-z4tur>d5#Z1tZeLY6fSu{GmmV&pgrK;hXIr6z0AGt(wH!7yj21S z0tcI{WA=TG%P@UR81*U~H-kpgKTKLoM9lBzAIl_)7na>B`TrY!c6LO2NpYX69Q}GRMM<-W-c#-W{!7mYpH!}S#k!%oCM}y z)7bUDU4Bx6AM@g)!fIWu|!7lCK!8fMgn(E6IKhG@CArqGd{+@Ll zQKA0(>O+)Edk-I&g_o&EOv_g~&L;>NhmxXc^MS8mdZz0=bLsUnh0+C*03*nm3@FMw zMPc>yQR}qiFsaS?VLM4z;h&%qZ{RY*NOTCa04>J^g^wC3CB>R&K*-ae7ZYzj)6u*D zN;BnD|5@_De`&=xdw#G+^>@QAwX^D9+xs%}?af9x3MW!NOM}yhetOWc=!?F~r6Bx^}(ORh~Aoo-;HCW`C4*a4^hq19dmZu!lqoU1 zRrS73pIPjc_(Gv=MxDNLf%$sY7Fa)xC8J6+>(#302zoA;o?wjAh*75|$pcMelkY?8 zRVm*^vcoh6BUK1NEo!(&|9>#fG$0CX5B}>7lVDNwXLC-?v)Mh}OtjUbr~CJu6bi%~ zPSOtujaxtg%Kdy}VlnWOx_MQCNc9{u^aY*gQ4W~Y+jEN>JqiB2q6a+U6Zjp();(f0 zF=~7M644Zf#TZ=@*WRT$@i&(B5Q&dDb0R_m0@lLLW{HV4BoM)^iBFR-jISGb;n581 z)k)oL%|8UfPYWPpthjr}+x&MW7)VZ1ocHG~@F!R;ke* zRWZ^M6q$KrkVik{E`4`5By9Sd&}>S>)x^z_pUo)mU{M7tb|>lq7^}dd!0)__fh}M8 z-EtRI6$c5lK&Jitp5kGKDjg%tl8&C}eLkRgI`)!f=(`7N(Eck9o|ckHrXt>Xei4_< zKw$lhn&f~oJlR?C=Ykgnf}nt)%tip_>eO(#dJlE+sQ_;0V{go&X>ot(_<9_Tm1G2V zl1V3*MMk&IVa={0Co`PoV%*_Kic0>gY*=NnD@5{#<#lUI$a2Pgww+%FDseVjZ6O?b z(Pg{mo!`&q|2Ec!_^rykuu=OgV(fJ+dI|v*NA3o!qgu8?S?O zA_slwZI_(Xco@~MKcHqE(`Z5-c4H?olsLhj zR03zet#l%p8|G*}kLbSP__eirS^yR2Uy|qu+g1GSJx7bFC}|5*d!#~J$9?LB0q)+; z{8O%xMQp$%o!>H#9$LRaq;)O_NKn|BieHSQg(OXKH(XdbOBYfJM2>0!7< z4TN|3;&H|Zdt9~&d++eFd(zjrejTkn-L64K-A9bg) zXg)lVM_a}E(ZsV&La3&4T+*|ftbJ-N0#5gp^OBi5SX=(0^oI-vCg{Jt0m)d0yh!7v zPDRfT%mmcw7m7KK-HAgBo0eNR1!JC6pUxNR+fS9}?OXweX!O&_!873PG&WvJ)}86O zPba-4JovPmxO}O7kUQ?9SWZ@3tYu4h*vA8VCo5iTm13MWM`-kyJ;Jcf4|3GEGqC)Ua3XY zdgsPb)QZcnKT&*>l;;Y7o{R`ZNPvUI$0%TDNdp@}QNjhDHA1|scrz9Ezk{x6Mt`xamIy%aBxBDlSK8cb;Ih*l* zCxsNd5OWh{*j59gT4g@1>JQDAH*%PvUlEwrRH-sD-;`-lGwa8(VVHg)Zu)DHu#zqZ7ID4sZwxY^tAFHjJOaMH-T|D6$1E7kh!ngO z(B?$klQzcX5a?RL86ArD+f7jo|GV~-uGIK!h%p{;4)8T-uz#x3MAE$3VX%1E4yufG zQfKMmUsj$w2O>Q3B_f()>+|MWdFjVJAlO*`OBw4PmhVM(i}-SQ_dDWM%U|wIec58O z>VH|SJX#=7ay(i;S9o07Q8saviM2rX`y_lXrboG#-<%IuqjDtrYm-+1anWqPaVMz{ zetamu#~{N~Of^o8aWLTjBz1jt4J|RoB@Q&|kmZ3Xu%RnZy~W-4ZVa?$q++kru&p-J z8vJ3*Yx+TRU@mx$gFVJ^U+!POl?Xi*h2F!e+<|0pt=;Oc&X|At%>pNIw$fblrmhU@ zBcGB~{d}F443CQDcO_1bZoXf6p)JgfouuGpfaNR>DAxFZ!*Ip-Y;A1@R3}4j(t9Go zuWR$&UH>^^tMqL6^Icoh#ar0fqJo_x)0gjRp+inm?V<0}!t%D2X^i-#YSNH%?LH!X zrZtY{eizKl)@J#!f?`Vv!lr(HEe6^oYyojH`G=oG=72g)-+)Nfr%Ae);e~<8V$QrR zf`6P?MxBMGlzgp4mX8tDYK@L5*!qI?O#doRvPS`iG$ItI1Q4OXR4fJK&jHrr(Dc-B zi&rzx7c@M;ypz-Ndj{h;>ZMi06z}r;J%RK172ss^1du4?UB{vmtX2OCa<+$KZ&uH_ z{(!>(?c={C3Wu^iLUieTc+?pCNMc2MT=R*HswQ{-T!;rhaJk%!be=%D3@pj!gH*4x6GhOF5V(O!z(c%-I(u-e)t0 zJ)u>WewdMC^$zArHSZtp#-lflcB!D$jQk_W>tkv(Zc@SaH{w1q&q?<#J+_xt*{B>( zdNR0l$KBp|P&uG13C=z$&m>|#6Yy`Bqjhgo)~rG&&m{b>ryhYLLw1jV*B^87Y8o_o zEzss`VmXze=-7#j~{rbaW zt|}Rx;#VhPQDe21tv4!{vXWJ~Jw9<*F&u?UUsR+-F%I z;1k6^ZTA;tR>6?72R_bB_Y7UCwf&h)Y%w3HAKSb-#VC;uI=VyD<->It*zZXdei{AJ z(h)$OoWaPyip8=kZi>}@^&7ak9c2#+!;`t4`g<7>m*c$JdB%5bh~DG@+ipWW(zD!) zgcNy)yB5>C*$of6+A_6~Y13P%|6McrIl3_Y`FLA~tO0p}$Q^ciKkX&+t{et=?fs2O z7M!O?qx+pnT;yhh=DQDUE*gS3DUNQopU0)=mcjb>^c7Kpv1r8%yE^m%{21O=6nxuF z9|@h)s;&{PMXcMTKG;Y+XHgxh z+w{2u?h%~<`e`6o+E;%L#9e)9Ix9Z=x&!P)-Md+6 z6)IV{c7Bvh$bC9r)s}`k&~Lvgl9IwUb*f7y7_e+W+vZp}zxB}l4tJ2if0{oz`Z-mW zDp0gsL1fiQep+n05Y-k)-33d7*ZeDXZjL8!b4$ix64JunBkk<%>)+Vdn}w`UgY>!T zstlkd#K_ZKs~9rF$4bnS7AVjDVm&ob05grW3rsdPFcf<9Y{@|nlsOc+ENfTuJ|~ZF z5_!r|AeS_3o+FfgZ>OCXZ0giLFnM!tU>#a<^cCUChKLB+FyO5*!97=J$X1mb@jEoD zVykjQ$#|D%Zg*d$2^BcZW57b)bd9rE;X}DMht=S?|5?%3}_C((XV#|;d!Z@Bp zv9%^UIfPUd?jMO{COsxd9(RRcm*gw)-OaE@L+z z)9^=IAvL9#exiV@ShBaB_x6M$o{yh@duZmnIbAOIM=U8qRRIii2k$UuZEKc$8nN9m zqAz0`s!*8K8u z(JS9_RZ!}M6Yn1IP$MulxnqmjDeumX$W!xFstE%k{Qo6Pn78mX35Q(Fo@vjuc0^tS zTdHD64vT-*)CLV}>|w%v=eEJ|;he!>sbY!>_)s@)r^ryxM*(g$;UGIYI%`-wmZOp( z9vjjdNZ1`{=ZU(x*S0_y^OY!Gd8l<$oPScSt)d#u0Ue-6wZk_%6A~iX_Rp2tFynv5Ln4B~a9E>3oIAOH%8NXg z91MwqQ1s;phW%;HV}rWkVF!Z+EpNZ7NVpvRRu}xyoU|mxg+;+t|Fs3?&%>;-_&@kR zxsN~+ue;min5{DD;s$1GOzUx_jpqP0@)mSB1Xa0ZAc;kFmiyXk53`aH6myprBpT{7;;}mOTyZ)7AqsVJ}mh8;3$fPWH<}5y#QqIjs%=xPHy!E zB&f;bdoQgzH7wNiQf00_(1{r+YUFuH2<3d;iOgGd1nZj6zc1_VP00_7qPt2b(fQ)K zgU@2}3{r0mKc6Loeud^#sDE_v=ShaV3J_n($u$rgKE%*=*FXEP+WMo$l`E{mLTdVI z_+0@jxoQf#Zxj3fUq*Lj(#CsOi+omy`zHbmB)TT?hu9okcwCju4X8GK6O>9L#E~kZ zBJx`!>%xd|>{PhrOHAov+IMB=VWs@|lRc2VMoW66`J(mfa)iiC^b3ooJ18BYV86N~ zxFxi5M&n5j6;b_f0O#_NB=-$iWrX_i@v>`@LbMLDGxG=XcUih={JMcMM)^ZXl#Gpe z99!lYgh)#m-s1g6OXU=w6Gh3|2T;jn@e%XGsfZ|UTBA#=|6f-ti05}}?i%3F@`du9 z-D&?WBc9qF40XX+Y~V+yFMh)>qaw$EhS_Co)ZKMh47Mo$nU*~pvJo5 z_r>%eTjV+&UMD87e7J(xGMKAc`O&54#A3!hhYSe*cAh5rt}PkIqJr;s(sacyhv^A! z*W*G1PV-LDMp>Rya0yA#S1xY&qy9j!X26#4Xd~N*{@A($-EXzjH|mmG%06;G+I8c_ zaV`45BHv89e@85h9rw^PO_rI!wD;-&8&Mj&t1TKX{rOZ>8Oa+k6Xl$~!l?INC|&6= zyVCB7m!>v^cMz`P{HC^ii4%HX!gO@u+xO|)Hwr&83Ye7YW<|s;?iijoJI}ZlS(XLJD$T7>^m70Drq1Ir2oHeNO#)8d%Uq?PWr?- z(;93xjX`F*#w80K!*;!NaKaC+wR}VQec5hZB^9Yu8)4aDUsrqxufyc@gZ^sWJr)c zV&Hog?&C$M{az<`ADTbB5%uHx7*wu zL_9<}Crjabu8&zt>l!*%41~@C$8rZ3|oec1WvqxZVUSD8A&r=@o7YG%VWI5 zl8~@4jfK!&67%HQb9`X~ypE)Jl~L7BK#b4s=lGEvi1{_JjsCX08XC(pV;T%tHK3DV z!xZOW`~qRR`hDm*Gg;*jA)SQRc?XL4qW88+HeBt)&p2$b7A{-mpNl28xBhY$ZT5UDM0o}z;(2re{8hoykgMK~;p9AL?l}u7yjI zOKUqNBMvPa-5b)iDKTMi-sk;me?I$s_U!)Mzx%$f@Ab0Mcz!vpTyJ91aLel4^c;Z+4n-OHd{YoYZsYA1`OJca+l*^E2Yx_dTI&x5Dh=#wO$#kt{(4 zG@}*Br2#>jF!~>t0e-%=X_TUq@~zZ?K6Pghc8UuVpLf4?y5=ya!?cI@zP*D5-m$HL zfR`iqFG`pwqL+fd8doXQ{zhpB-M)8ARD37KIcMVEy4^P6>eRI?jVbl&$OLhTdy-s9 z6BR!qM06tGRk!FDwgnHg=-Xm`Eg1E(Qd8cP+mFXX`o27J+#;BHIBsbs>*R7g739E* zX=9Ep-6u3^r4oTb+GQJ>Iz_&^d`nq96IesdnUdB^1FN9Q9VM})5FZ3KlUi5l<5#vc zz*Akupc;HDasQX9-aS8+Dx*{3vXHlc4(a7KoBT4v(O%#)@?W`tPcL$I)j(;zJ@m=a z4U3?#n>59)xIwx-$B#ey!XCo0gZ;YU!HeCf>R)L7yvUJAX_Cz%3X2uX`Ovz^D^+#9k1vjo z4+As(u2IMHg)NWgBc%b&6-ICnC)^-sd}8;=1W|)a$4dJ(;xH;M+~V|e+$w>*0VT<> z*T)x9%5T>F5(cT>*P}AzJu{qdm}6ao{9R4ehHIHnAbN{cvgwe3wZ{gA6wbXOjqpRH;{Wu8iftKXxR_}4>Wrq9T$a|^Z(29uj&QNn&tLA3=g;5T>)eV`B|HaeLJ6D7+i} zbtWsbT#b)kp$RX~=m?E2QCCr6n^e9(sfqFL-C&lk|vU>iYCUpmj zeBHjISq8DlY$Wu5V^%o;jtZRGB6`(g*EVlpYV*d^)JCa>W5zJ`+u zj|mfd)bw#Ixvz=1_k<)N3X$?&Yo**{SsLOgPO7lp>YF8oDg|6g;a_twU>NGXNbDSU zM^p1HsV&8gEojeo2|daN_}=53=;kO;aMJDV?8wP@y@yX>JjG33cv%L|`^=ok7M8!* zxeJ)Uw25}Y>M^}J^FnPF`4tcGn7^ah30(qNpA=vSFGg-@YsF7L6`Blb+&W_$! z>&M&36Qy%;%^@F+R@6;@QmL`$f=Sw4JAa2GQu>^pgHcHrKhfazvh1n@8!Eo~!)%|>bHZGe%o`JlXflz3T zGRU=?`R3nOmgGy=;_^hW7-iWvhku+1)iw@4Jq>ghOLFohHUv4g|GPAvCsdUD(|pUc zcTh1NX3hy>yh=A3&z10{COh26Zopw*Lao|+C;Zr<{i2(^98Z(+l?VVy-Qgg$LUtqY zn`5fVubCERP`HT1Am?Fb2~?YbdSOQ0@DPW)cg7LV&A-krhrA%?WECf2m)On=RHc}t zRSj)*ro#jw$xk0X`R`K2$43uMoD-aHKY01vr2mf_`Tvo?8K$g#>1Tl#6H5%i^8-~4 z>(i=W_d63VNMn0RdFy3dN?$5Sxm6byEUsW2^V#68w}8$n!6*UYDMi&i8oQ0&%RST4 zBrb-^)mC|oly8EaCR`{g_CqB8VD@9_+jGO2mL}V`KeFfUyS;rq(tH6H{oFn;-M=2> zWxL0pP_A#jg&%&*>df`2Xt!{^quplR*y3#xu3p2Ih~RBjiF%^1MFbXL`X+pK`t>?LPHgyYx1XCED1ox5o*BE<{%)&DtwW6y9n!e>X{Jwq0pu=Y6q= zCARW2*=UUK^Ly4mMoV1k2^9|K>9QjavgY+YF2+l-K;>COg9e>)19am z^ioqcANW#@7zoDo9A#CIy2PwWSu`STZ4;a6-f{^AGy) zeHJJ#dM5qGYn@z@=1P#s%3UAkYMrzSec4qJQ$xRYr|fuOvadli{_ghq3;GF3yvEGa z(YKERZ=MQpRDAh`$QMvyn5i}wZ`qKrxVto_xhfUzpCG0~HLCJ7fwE;g(X^X$dRRO% zr4!yx>o(Qm_m7f^8xjw7Lt&-o?ORJ8HzbX3eIPw4JTt=C2jYBb+|-lekSEiJLsE5& z+;VwIl-v02ja~)BEp*djNr8IFTwhC}JvD_s={6=W8l?*(w&j4h4fJp9W&9Y}usJWG zDcywA6Nf=Ut~n&b7SAY_yUCa4^tCH%9JY&lwd<43~|2sC1&!Fl6;B7^$+fmsKB zBQB`Me^a8gt>yYSNzp7(M!HfzQfah=FI_Vyg+7z?rh<;s;>lx3P-%AqW0_mki$qWC&}YUhtX)$Bw2Wny)Y^X`dc;zrkT z$H9`@)$f8izVZ9BpA?P3=5Ror@)y8A>52<`LSgJXxDNEoo!2oxYE+rXZPw%yq?{2` zh;xofn+HbBh#vY*E_XD#NIik8Upxi+8(R-j7DIBIry7Iv)h{a?2ZpO&t{!l7tSI^H zH0cb0ULjKcFbjK)p1@4wt#_0026x)=m=a!)V@OQ<#;wT`@M=*dX0Y>tX9=lbki_Qw_jiw{`%NJ6o2{21N2X!|gnA_RQ=~K(7`iQ%5PuenMZYkM!`kg9%>$hBA zDjH}xTJ3QIUJft~tJ?aBYMyNFo#!pBi?ZJVj#U*U`|sZ5j~Tk1EaUQIV>L@CTwQj5$fuo2pE zy+J@RB=cBa`D$lAYDO~G-^9BP6mYx~k$9>oDfu+v7Pui<+b>A4dO{xGs{(1&9G-Gg z47468()x9YqT?1*(b4@@rm!dPB0p`?-NZ14~!Bg&*_2+L?I;JP$4Rd<=HbCt2vmT}?oM+gVENL?M}=*z65l z9`{Fx&75`iwT>TEu7SEvceVJ;@A^?pU*eMl`3k*JNT@^3+f3Cjkil(Z&~97VVjKFs zs&tVpd>S_wwP&cZ2D3EHUPBACVd|3%8zy+yRLe?Z=Lmy6nK!%NY`VB5s8fwNUTHFHJ6(g^d7OD<>Gc5BKPnjna(`LgGm`E6U2+cZVH zr70t*DneulfPMpoB$CDnp#%aXg^}z1c@L;6m9j)qLa$Now{^H#nTbzxJGe6G-Cr6$NH7$LyydEIrD$3XfYvaUQPs-4 zbGiDTa&P(;r=+b+bd(C9hJ?~v(vu1)rZPiy+s(Jok8*E?@iT~<_A3Vzg~&mF7#Eow zo22-!4Pz`V-qxN;5WQpa>(tJd+MG#@b9|aVikiqxNV)2pzm`qNx9eI<+E5J!#AW)$ ze5#&fFsS31hkKAzx?mJ(a*x!Q$KB!%zzCm*zo6(OK&7IN4EQX*{r^yql9H`ga;q za(plTG_JjH8((fp&-!Sz_-jR9wK*ZVq{WqD$Dg%Yn-zz(91`BG6yzlFD-Pau7I`Y7 zr(@vTq9-UOVUOuZT9%>;Mu*E;H}K6Rsy!SsX>0SIi|&&jZLA#;~ql6j1Q%llnP3+b1;x-3j)tdbhk@ElOhV zJo&&C>G~)9f=-Q8PGcl4&vls*#wClRkJG3hF5?0eGLjzP{S{ZuvSszsbjbR<qjCj`U;yeAVMRtWPGp$tV_tXW zbQ8(RU&Qd4>JK|C9Rf?rd`nhubh-*lz@TbDA;u3~$X$JC28o2;k+Fo8E=<(szv^Q! zE;yv18G^TJFaMQM@zDQe_?nZe zu(6HWPkfT$rZvwcU@Nm$F3P#~Xq$5q;eU8eC!BASG!kEH4JhA~^x{Y`b@$8x^M^)~ zMyVk=^=sb}ECmh1fKH&>FYHkW10UH49fzQ67(*g%9!VjSLv*RvAwFb0j>H~u#28cV zQxsxM&fTx|mih>jLng6UJ8VuB9=x3T+KgYl7;8#|A~BIpzCj!Lt%|SRSm^0~yU9Ho zVqzV6+mWkmP$^$nRki1mGwGl^0`J9T*+2i;l3?{LPx!K7Tgk?w{%qew-j{JEkb$P_ z`^87I0%N@~7ot0PeCMShAa`O{MAx+oAy4K0_ZLj__6Y3GnYjGhIm1lPdIR?oC|7Ab zjjnKJW+yxHDBcpHM$5#VDd?vR5DnBEmMf^U6d)RjD+z1FL=Ch(&(?58T!R3&${N+b zuE(l#Z{=}Lwg(YoswDGYDtASVCR3by15f2kguk^U!oq&*W~-EyX1zGL+t_`fM?EVU z37~YDH?aL$T3Ccz5+gfMmV=h=2GhI zFjH$7a$Y(L;kNnKCXzUUi$@>!j4nv{yO{PeV1GpH0v zU#-0KYaK6wFdF`*6ynpo5MbqtvFK{wp8j~^@`ts^LY9D+N0!V78lGq*hddvH`$>{s z2N((r`+m7uo^6qSW7Sia(W3ag$|+rV5Axf0@MS`pz=5Fue)6BQGHgoN5Ted<=z$d) z0TFo~tI(EC>9O=lC>ULH*SZRylgWFQeToELyuV(n3sFyOsc}HlI0OF9cJZXWX)-#J zCb)WTiUT53aQV0A9Tv74l|`xYi$U*7Gc2 z7V06OCt#g_oD@55V|W>!AH;O0ApChn@#Sx;5Eh|jY4tzAzyo?Qq0VpbH3yDE0PYD~ zsPI4J&IICG8#R(lzw(oBPX45RGmNp$h<Tn8ohMJYpX4CE(ssM(fpE&rgUdQa~e*-8)i-R8<;PAy7V zc|4Q-IbO?SE+M2#+^k5SWk^PG!ppztZ8;&0*`|4*i2gg`)&=Vf+|Q1j*F{;qplbud zKZ2K8Hl^W3y$Eu>oD>JO=ER)*xsediCSeI898wR&Wx1P$GI7L}`Ud4MYZw^+%cP*} z{cvIlSt>%+bVcfR*kb-S`GS?PIQe&pnU!dyztRyv(b_z9k15hhSvHtPUobCk=iSZJ z`!>ESOLZpio%Om0sEm|c$p#J7_|X{7f-mOsWGGG1sw^lt-~>iQV!ZEo9_R5PZ7E&d zWB;dStKTM|!grbG7T}dVttTJ$8ul3V>yw^Ggx0@wvHDxq_k-F{KZHQjo$7)DeQkFI z4LtGRB`A0n)cZuepb(BTCL^$j7@)B=t?*Q)W#?YxqK1lTGUSaY*q-FdIBKG#wd-3$ zBZwQOaxO|@x$9uw1+&{=vZ%mWw!d27=Xg5lWzueAd7P}LW8B(+0XQdQuJ#B0V(d3L z^PJO7&yl_gr^?@2SEZ3jEr_|J@tw}u+IV9qcu$ORqQ_0R&r ze8Co?l?iCg<0MP?7y{09?Ra_5u8g2`AvK*v1)G&T$A#unz`Y0@RqH6&JM5cbdft37 zoNY9FarI(&CX3YwyBuB>KJ-R6lYD?fcfI=*7jJ$g<{Ig89%n81U++E3GtaOefHA@n z3%(0CBAvvxD^$b11~6dG`Pt1b2HIaMTcqjL9|wnP%`hWe7#IFX=_|{_QSUvwq3fZ3Eo@Xe?Kd-H1mE>V&_6GH^n`I5x9@!De99tF)w1FEz&`79 zq?+OjXH-lt*5_wh-L~D_P-f=b#AJ)!Ruww9w6ekI&~h{BBZ=!sdIFxEaXZTWSsu^y zX^FJ6#}MN!vs}@+CrJ?8#1G|ojE+M_R#ZT&BrE1C}XO#dmmzIFa=cp zzIPd^Xh>!Ou@#RAm3bM(V`|jan6d=-diC2W0LOanL&@w#13JTo=zcZZe((*N-gV?5 zj}&n!iO8U{C7XX|(*kTppdtzKS-;@5ew7c}<_0VOvIzV=IC;w5`-;-e zkHZ(3GCCx@uuv{`HPkoTM(@%_vn>ruRwZ5jygPu3g>)f*;ha=8NuE^Y35uc(b=xn} zlQ~jfPNdb$=8HRbN!4L}BRa=w=8rPphcKmRVofB4cl9`tP?~A~gQkK`x}i%E8>2+2 z8dZ)J+HSD}XU@|`f-0!Q-g>NJr&Xsqqz>|qVKL#Tmy)7aEyg=dR7gV0qB%Wb6q%l> zw@cUJ)>rLYC)EWuPc`jq=Imx|7eLv z_5j}I0XlsV2LoYATM2a)v43l=_aK^r13nyspFLHnad2gGAC`E>N4-;NkVUNOh;Wh3 zTtAkVzIH;q!D@-Va`wPkd6@oHa z0zd2Nx`rTqCHKXy7~OH$ap1u>jOZFrKdcxqlCB}u;sdk8s!VufY#Xv<=cn_q90DDL zlDhV6EHp<%GNHQX!&?C=l(ZbJY`z>70wvl*v0;*UX4*EFaGXDAgwdYh*k-#kBqG@` zG#R(j?dL8KC|`GlZJKS2XF_Joiv&5326CfiC}RDc?Cliy2mq07#1Rrg?#p!jx~X89 z$AedYXn>-Ed;FeWYho>0h6}z(g(@dzL42;3q`uu}6Pr13j?gdk=tN&5*AJ07nj9iu z@Vu4~ZGZ;93+pR}DvPE@>KT}%Re(~YJ@xb{dX2lZ7lcP&*T7OEfT+bvx%TbE#;cmdz{WT$J(_U$BkY;&P7s#{ zQhrS78eHP%thXZsarchambZX$G5A^7$SGeqE%3}EzvkvV^Q5V<0&{ZF5mHxIw@w}A+u%~Ni_bPp+}fj7nfiTUNR7$s&Q7R?~9*OIdho2d8a=4S%E zLD%=D&s2kIRC@`Xbhw)WPnnk{sQG=V{T>mIlY84?9K61C3eQ0I3Zz!xO?r;a^fGAu z+mYb1skk&zImM=^6whq~CEt>k)VG^wVO@v5E3_sdQU$Pp&9#xSdToOenTRi9-4!*D zC~r3V;`qpr$$!mb@YrYEK5Un&sePWOYFkOO98W#Ar;2^G4N)FfwXEVXur-eRZCX!W zqY`90saZ5hD0TH*Md$oWJAIKo;0a@l zqggwW&e@GA7H5nso2LSSwX+QB$3Jm@)wQ-_nrBR2t_#Y1zx(f}F><~GMJilYBQEbg zc@G`EcckXLs*^+L56# z?CY^jZQGZ~JphCj!VouVWY%E3wBn>^Gn`OHNp~L+F>@FX@fyKY=ug2Qg!7xE=dQDF zWn#Xi`B?Wc{lLB|!u>||%r1H#?@F==Rc8$`MZn8(DIG5Y0@-6Lcb#|5S)aDx%{9^x zFAE8ZV7rAvB@=E1A4zlv%Nb-14wAoqUtXz60EXV}AU;x02JeMUgI_cZk<8WME1 zI`hV?Ybowndn3IL{1@x(cRJ;zniPlaz7xaNgr1D1V@omCk=!1E5r$!DkeBMrD!T5- zDss6y>B9-=LAnO9{zA4+#>-EX6X8)ey!&VA-{(D^RZ6eFH0lDHd3IHmqU}8C9}?}x zewABGT$zA3kwJjMR!Ynfvt4Gg_F$XhV-lJ~t7e z`aa^AJL)c~dqzb6Nwx6%A-nQENxyPKB?lhGr;stFUVTvpIboOdIgK$5b|BTtGEXNr zjaL*cmQEac_Zzcbm147bJU+L-v;Hr_Giff<;Nd=DHM%cX)rOk4+zXQHN^Cc!FGaqV zJnC>&wdC%X{}ZqSpfs4^A5YGl{*j8v?mfto?eqavwzBW}oEZbIrej`CLYNZG^+&tJ zd6s+WRwrLAr73n#HUnQo;VoFT1<^xop=Ajjs3zoE8%3g3YrM*)eOhK?INLIFv)UH7 z{B034$V$=O1B)|Le_6@>VFx;qSHa%VwVq)QQ}rp=QVyyXp8}bbX21;nZa_7Qu@)Z2 zdtfi0$t=J&pR=-f{g|$q@cKT*GD!oioUl^DP_ibtS-kAaOobtUFg)UU}d(L?KFM8ItbxiKE#=LH-F7f9L#7OvFOD-BDC;z0?b&E;^*6> zAr{^iw_g9YNhYv<`qyxq#IRbmB4L=EcJ$V_Ur`(Fd-_{~3o>`oIu6!cJK(m12ls+8 zXxxY{7FaN(Q*KWECc4LNOtc$Npw9>Zi);a&>tsZIE+N=d3((u9018x7*VV&CrwyBo z3);exo?Lp{LsY2iipGttU({)AlQK=Yev>Wl0bxHx%OCnOz?>kFr;^kAjXj23bz$ds zCA7z-adS4tg?#R91>~#=pV^17Ovo~FLoYa}e!|@d&UxrN;F6iEiwk2VQg7^#?r zoMcQhL4JFjC?ICXH~;>%C1;z(XJQ>6nbx#v6rrwk(W@M~>$?mrM*iBPm8mWt=5ucS z(vqCx`DmVj5B}J{ew~w9=jBz4e?DB4evo;Qc|FsqvmSXGk>{?2W6T<3jOaHlJ+c$7 z4=7V$bQhRRc^Pjf3o1Xc4!rG1!JIb=b7$h=?`jQaVwC-U{!IOut|$CRuklOn6uNp$ zkn9j%vWehOSK8Tw&w0gu4KXLQ>)8K@-Srm(EY(o+Hi#?1ttpBg87$|TXXO$#MVCSR zeea$yDKGr&-~*yjkf_z@%@krw4It${D#5tEk(ABnGC=QS%YK|1U0;(FYOS4oU1QGw zNmfTFYRx2A^B%bV^kk3wOwbz2*Pwo8 zL-QA8g5gr|^P-d+xCLxZLEJTK#@}tkYEZATC6+O6&b9jdC^55!+O&eHDRSmbf`*E> zCUkVg6*tI$A)^jGTa{O&6Xb6cG`H2|O?we!zb(Rf@B3VHsQsc&hJO(fG3}ZcetWBJxsgb0RY(87{4iKA+2E2aapmav#t zPz0Wr!}Q$I=V6NV81|dqKGK@y0c2bYHsTt(DhOK7*a`Et6-n@A>p89z`7}n{Mffv(##0>jweTNUf>HJM;iq0A0 z@(jlg+=NvX*uKeO~GADopJ5b=H_|)$yhU)fmX9^%;-v) z64ulfX0nGGs?^&;sXZHdN#Toa2L;2*H3I~v6GBYOa(YwF3=C{vU?yFgS~Ebw?_DJP z;a+u}NU`E5q;y4wsFiL%u^PD%r^fjGg1O0B!bK}KyjM2i z>L{yqu|&FEGT1y_=XN6(GCoK!3VrZsQAu2UZru`;70~+b*V3Nd`QGmu~ZkcZ|td)9c8^=+Apscc~%V09oI1ePB=iM|Ea)^~V&;-9<`ksD`;1MP0;| zB83HfM$>co$fHW695t87^UOAv)nu->>TuwIANh17y-LX5&E0A*zb8yBtj|G$YWqf2 zkK*^;7m{sJ53`;X0CJ_eIrH{ORm@<YrAHH&re|tDG_ZVgK-R!-W4S>Jw;YeS(SCJRDk4m=jw1C@)`&&t{$z+k z*^>n-cW>S1TwhLDW~=#R^>8O&S1?SUTMWGydfgaE_bQ~^Aug*NHRY3QDA9L0v> zaC-2uNR-NTxI#Xv=!;j{;F5XyvSQAAN6~t`YTh?Mun_Tc>be@*DBg#9t28bb>Nc6- zh@1WCDel0_QuSveb=3wHciOssoK`lG==i?wWvPDR&M$=7_=N&T161P%b?g~6i>Se{ zt!qR6<=OeLiQu&-spV%Q5H;O1B)1rs?#|oG}v6c&VBLwk_9=wwWy-Y6?g7&nekzljpLjvUS_XB5=IjfZ*P5qBxIellWxKo883ZT)Fks^T)g8wZDouEgOamoU4wr|Rj~CmkLh`Qdsxqsmd1(~-^9Ja;Nqf23%W9}`;TNJXpGN_Mu$V$cS5Me&Y5|Goa_`a&AY!h> zYK!43;I{tg;aK8qRR3U{gO4XD!Q&l?dPT`G2Z@zuU7a=aJ_bP6G-Ujbrz^G}(cDFTA zE1|kZs8NC=x+3f6h z9Q~GIeXt7OrawQn@W$bR=`h6_x=|ip9+9Upzv}TaLD%64mPm*ww-$$JXFgHeVMMLJz;8^E9zy?xZqNQVmr#%D1zg9^Ass*@{i$d zJzO4%_T?w)R~J8Rri|pU;1b5;6@?t787w%_;Efg8HHRRq+?nIt5P8^CqoT zzoUvX;bw}~|1f*qzxC_R#(N#LUt`~SA5dzl)smvy<;r$!z7h_EkU9YUwA{_3q0KdA z$2dxHxcr+yy?##{Y$Oe=FJOv0YQK49S_L8sXj89CdJBu zz5V86TJeO_m%^I;-Bh&&3*DGwF%}yZ|24jM4Ml=%c;vbtWLDt7wK``!Z-B!8oQ$W5 zlMm-~Fs0kP@{_8jMF!=Y2QWX@sm#&_<==W&@M=SINH=@sIcc&Mr9X^OY+Z#?z`Xa{Cn!o-xon{0ka7SB7gK#bU3EjOZ!z3jE9#f5{1uC zRYjikB!?CxoF8w6Onj~r5$$P(iL-|Pts}OIj^Vq9fG*#IgfZ4r)N9Yw?QN;tq{eDW zl99bwcc(S7J0hix z5AdcBp`$n?7cW45BVi9$`*?XL_8-=^w6#MWLqkqSvr`x8hQ(cL6&E>YzN-w4Tzn%I z#r2b)waO=sm zRs9MxLHUL3RMWVRX~2vir#%PO7}fz`yTJ7RMvPXQVMr zc`|L-mBpqeWliqvoRcpI4t5ou^X6}9pxlB=R1-05-Nb(~E(V;-|7?8Mzyy9c$Rjy3 zbY@a?aa@_WTo--PV~LGav+)p3Vk+0c^H?x*zjwx4t;8o)|6R&d?%G2WjackAm&vv5 zbfkkwhLX+Gw~3Mm_vW8T+KnF0_P-Zu1Kkf3q|6CN zLy93!3p}~rwiR!G8xYE^fS5iFEw#Vn;F>*n!D-N5lU$|ukdw<}=Cgpwzb0yrCI|f> zqgLYnqJ~cl%>;5q$p$E4QSeRoKO^s&Y z({n6hT{OjCbMXFi=`Pb9ZsEUl_k?LIsjI^m+~>_t^w6IrSHq5h_q?Z?#X|5T&+v~0+u4r-k>c-Bkc&1MPMG#ECE18 zi7G-S12zXs1@-TdbJo&QH-Q}tD(@0NHA|WsBbi6XRmrs(T~;p*4peoZV>5wrg#sn2 zoxccL8E~E-==1~OI=^j`Dq|Z<)QJvZtDD!a7@>}%;7NeY`+Ylt|pCm$j%8vg(EV~uM$q{D25e!fU| zD{>ODp^K54F-FqB?KA^n8SI*vMof;@WC}%&9tQe{QaI~iH8;SPQ*I?NmBDUNTQz)F zFihd%M}Dp4Zc||hHv*Y=nVLl5#r2+q-Agql%O{aEqO&EdiAiw})qE9;$Nm4ibQf-+ zQpwH7WWBkgjw-j>woHcJsnS2;a?%#}6~>ag?ue{$8YoZr*c~uN7jTOD_Lx*^xZcpW zEE-*zNIg!hi}lCeKpEXF z7io&@d6^EdC7BHUT@9X1*PV<}h5PryiQbXQ342wPrzE53r6)hCLKIf>Z*0FSX2Fpp zL`aiDwW+#<0PR?>01(H%qy!rt7#?-jc1*}_2{0S6E|%_=;-o$TvE_(9`u{Gm2xFIH zj~kDdWXPSUVgvHD!^b%=3mjzQhBP4rblpmDvJLg5^XI%ZxXQH`dDQaUc_K3XTf%>r z(ty{G_aXJ1oP?{@D}vt#5zieD6M|r>-sB(faP4gF8#NLVHHVb|3egnPE_Dn4=cTp5 zEw?*D3%}kE?B>%UJPd#_0tp>;I1Yi7m%7BPMw!!MJ_){ zDe6*6Ly#3Q%hQ8fKY8!JNwl}+Ozd9ELIsKAqyTd$DvL1aC$193&tSxbGO>zh0P47$ z=g?fm%W5Sv4HSTkQCFj)&N$#v^Tf@ozKH*w&dU6=kj99LbS$*^I0_9 z8F_Ty@Eb9PydtBj7i_$e1H+QM1B$jTq?$6#$&7JqKUcNw?VzbMdX>PPF6w&NSbk$z zcr}&YkgVI^p>e_d-=*tIRy8>qu}3O@k@y+YTu1XsL!7XUP$$J#@1M&BYqhl|Gs|~2 zH75&CfDgG>qH*4l7xeYh7~n_a>S+q2r%aCIwYZ~fpqiHC(X60*QVb(w(OGlWyQwC; z|FqRB_}OX;7BkItyOmM+u+*H(UJQD)%-W7mF!Wtsd7V^0z(uB z9&M8@LP+{0P3G=@7foXozMwlpphBKDrSu;Y&r^>;0RI872GGf+e?bX12spUi4Rm`SzqZ zWpo4vs40-+PO%>cu<7Sq;22dU)b=|UuBpx+bDnNLduq=UwR1HU{}pkhuv#9E+B+oN z5;Z}hZS-^$gRsn=D6Lgb^Tox&jX(vzHY}S`#F#|r+_2-?vPq%_!)?5q&4*vOizQ7 zjbg(XsoBD&_lAUO3kL$B-ac1)GO}u%8ymHk0w5jt#KM_RzSr$)(;A7~nZK)kduBFzIerEAteA!LC@oTf`(oL5nYSQnnul ziK!|^h@No_Uz1`;z>>s_i?}9sh_x({bc0obTz;i{&LaBhDt@@U+dtCm>{1~OsN*1a zCYRZR%kDus^n9Pqy3GdtUbH6iKP~`Wjw?{rxrwp6CYpjm_LlcE#wLi8JM;tiA3ZZR z6gAYCzfR+3JTqcs3L645YrI16*y+M3Nym4o2_$cZnlHy=Frj*~Uw@}Kg)c^x6Fo26 z%#JLD=hEznJDAv~gu}9SL2;aNM@#A{BXyB%szvQ3W{C^Wmr`?HM6H8w!4vr1n(+tj zv0BN4WrM$G9Cj1M&Yo@Bngz1wN~fL0{kP4W$U(EI9*Oip=t z-xMm^C+xS`w#^rZ#?&-+@uCWt?`)~_;Q|{BtIiKsiyCb{xc<>jt>=r>hknWx=?dy= zg{e32cho8)Rp*iDM7H*edR=xtcX3$=p+}^funryz+*2TD+B8$Z(W=3uNWuyw@WVz2 znZ2j1xTy`=wMTadfzfzY9pQLg)kgIP<1le?NjXNzC5|ICQSAQwFtju#M31DR!D>w% z@b))~RaYlGn3O%7oPSCP0P6p{&TvO*_{BKPm5AopnpU0w!GTi}1zYD#v7LT}wHilM z7{x5#YGn(3#+NOP9=}df!6hu+PS|X^3TYIPL zPvmNJWY%;f4fKBW&z2A4-|n0t;@4&wiVBeFS1`{?1_dJuIAC@LOK1 z4O^SPbg%oS?cB`lca&D*1LRtqoVN%+tY|1v z7d!}_EhVz$yN5zo$C!(4gx{<444h;90(_U7p(ARlXP`H~dItRb>tDA`NIrNgcF*E? zJXQQVqdPeoNi(IKk$}(_WJ9GA>PN`+5^!nwVUVQj$0_WYdF}`EsgaTHYw3yGK>O8#@m)3z0*6hd$E$5UmvokE%z=Z zA+^p+G3m@9>{hF%juDI=<8Tb6q5@AA-V$0U$Qd5%ofw zB|+wAd4c#P7V=(xWQa@w9BjyN%y3=59$!V9vPdrYhKZY!|5Q=o{Yi^+uwvg$@E;D= zjV}65wymz)uf2}w|Bxoy%`1w1p{KOur z-UK&}$dlx6-7Z%8zXp6O8dl>*csT#N)aYjQ*;icWVTE0qqvDUsdspcOpB%qIo2COb zk`WNa-iA{%N#LtA(epT(0*tsQztgQQd0tZGrRq&WR;!P$8jl0+_VgC=dL+to`gmVf zhjJ^sv%cIR2V$~nf+4p=rtcEl7-%q>H8rRZo^)K&(l8A?cC~4$lUZUheoh`;MhzqJ zXlhRv6TDzk8!xh_plz%TLm()>>g%^dqESuUh}QouQI*`Wr)(_%mbx6^g{kZW-EIRc zij3V|Y;ZB-=obovtxV!(D5tfFV?GH?x+ppx zivt7GZN=iq!~ZUELc)Z`c_yyLd8mSj1}b3ugwgsR*t&hyyc6W-L(LCeff~zsmz;|v zZ+}-6H^13XN#V70z$gfcVnoKVZvLLjiw!N%VBx`|1hFBVuv+37)-8k)IYg0lv`Dnf z`>8lk=>$Cc%n_X9*zV>_tR_7rKNo5OyuON?-D|giFpQ z-$&0qim3_Sp#4|>|EH!Fff?n#_Z!n;RT4+RZsKkH2$5YjZJo8o4}aIXX`bYv&J<`e z=csmWVm@7nHW>&1IQ_DTfMK|88~g{>{`Bj%%-DIF29bAicXGdBOHjilc*s3S93zW) zztruEyq>k?Gac)%2xW>Ng6B^6y1<89Z(CIaZwWuzHA)D3AjqTOn%xK$N4| zq}(FXgB4&WzM*?Z_`9<^liBwqD0$f5#EtL}9@px5PX}c}W8UtqmstUFRZ6mq zao~LMl9hm;$A$6KHUDKf8fUxbdwgzeRj~kJ!z-y=Mci?xR@DoysOB>!Pxh0@3!z_} zo97=7{}#Rb#yZMfml28nlJd%;A|eM$PkL+cF?(iDSR2AY(;dwRtUZQqt)oaWH0I64vM%D@OG`3!^!D z-=%3zI*7G6jyLQ?|M1@o=lB5$qpwfd-Z*)mVKy1yj*)rtVf`OxYaXjx7e&Ahn|;3b zLhW1lQwg?Q$8~FicUjg4uUV{9^jtotKYEQyHER6zwoPDafAp`&fz&@o=YWWuIC1bZ zt-)jox4OA1C1P^ISg|$j`+PrMKqf~j?=do!t&iKBQ+I=x?$w(wmZT-ys2)@d&aD5L zS&?kD<&3rtTYO&SVyY$H61FHXwu30jq$52MPraJAK2ZQ-O(vH>Y^AVcA!;v%xK-VR zSriAB6ys_mA9+la6B6?3e8AcH?41HbMUZ3$7F<)O1jGVV?Xcf(I+Nz0yhN1lUyvfC!HTO6G&JG8B{AL{_S-g* z-&0?P>Wc^={~;S@sw@Z&%=}_-^HzRv_Yqb|dH_tS$q5ABwf3fRQWA4F>*PY_C)?hj zk}>xyHpqp(PqzJmjxrL1BezWTYMbs0K2&Mq&i{14d^T)_q8PpE#qv))| zn*9DZZYv<&EmBH%IYC80z=3qL4iZtVv&Zeh+yo zkD%+-?vYr+X&D@LFR{GfvMFc;Ry)_vd&PxCjb2q2=*8`yVRc74czgYPLgd8n!c{`2 zhq$vkg=d~O{k2-Me2Nq#z#HctRq(BNxr;oH3tyF-M-1j%xyTXs(vMb^YbV{RsTxvE z%16B)@jpkD&C1l9DQ@ayICISDw{qJ5b0L zekYsr38)Kj$uC{(M;F;F450B7*D4m1oKJ3BK{YM(TGl8s{B!BLk$E%XN9PDpM2m#R zk14am)3_|JHJ@nq9Le4)nyxjj)x|gXWRgBJfz%)}H)uHUOby2*mE6%JAZ6^VtWIy3 z#k4(cJ8T@gC%M=zyb7afSNu*45<~?@UrrI6@q$_F>>`_4)dsN|`V^9mYom}rzY@Ku z5(!I#4n6Jn3az}r1I(U2-i>MNwCg&A+N%f%qXo1*0kTbn<>Jk$n?uPYoO6b0F}tl* zvuoy_Wy7}A^K+4>*QNj74?olgw|L^SA)`RvS1oj~!4kou+=76oB(sR);pd-+xJ*qm zG!u$lS}TrXK5`&yR%eBo+ERSlT3nzp8Fl0^?_t;1@YJDrOnH8Hb2_perDfK4W_G&KF=@7>1`8Do~) zqTOommBhMeN=+~n#uX~oQ!YkTrUeBp80Gg*CCsb1CRMqdaW<6+kE_Dl;dm&^79so` zM$jLK=L&c@4PA@)tc^jv0;p0}$G4p`{RL)H>Fg62lqi0=WpyQH<>mq7 zAez^5+btSKQ@`Z)1X}@d$D>0%P)37TTbV!!rE-v#F=0)bh+HGx=%k&c$t-qJxs_eG zD3l&>*u$3bOL2yW4%!D_U~>_rC^MbA>gt7>y~gosh9p=d#DSF76U0Yy*iR8^&E)|r1s;oD3Sy}-8gNWg zco$;yS9yLDTtJ3RFeb!5vY;i=DN#34zzHsTmQkb?KKgE6@AWc=yo(dNgWz56hlZgy zMM|O5RT}uMSr5-OUMCe)oOxr4S-zSiA&3*d-sgKEBL5C3pP))|G!G#ji5TZ;;H%|# zFIDyT1{x-j1#JW{_Y|laLpb z8f)ZzxY08@i1~LhD_7Kf@ipjv0a|tp9BxzGxP2ORw-M(_pZe$n`ssw{pY{0H;r|Nb2g)}-7WWp_IKb=%^O#jVv9rHMZf-%oKW){mYlEY`KFN#HbA z-Jxx6-}GS$snM`CG!2OvuCG{OP>f6doz+mMPsQz;k^#%froA;C#Et4QAvyJn^Y*Dy zlJw&WiE+(1P#)_!6OQm24p1w+G5t*?tm4*3%=T^l>9N5)Cx)fvJA8?7tlaxSCC9O+ zg;r2sxNnh*sSit&;R`?{i$K6 zj4g5DYz7L|_?Dk)t65;TNT8L`R6F_{wj6+(ZRe}nQBjR80T6v>bKwo>XlSvnP&#JE zr{)jVOvc$vVT*HR#d1ZvlvieB1CgF>O3{^7mm`Gf{g)#Xrg%NJByD<-P;%ix9h_pV z%90`m)p=hMQ{_b|9bRXcZ4l7O_whcd?b5?9^?MsUnr0EH~>|iz7iu$rlVYjyO)D}aQ>r*Drp94`9vNXA}myy zTlE1cpVf#HWadu~{O;slZ!Z4%L)suCqrCeqq{) zyvQZ{`;sKPy+Qc{96m9ut>yM-uF!$(H9t%Q7y*km2*($tIbe29P0s>U26G&U`@!zw zjk!+B)zinc;PCyw`JTU)f9BHs_rjyd3ZaEW%`9eKQK9l5GU*zDugNlHB9f#0R~X@g zI(ZJSo`N_JC;d;B@lionP?CeHYNS*0J#c{U>Q&+N@&lx*tUXN{m1&t~G+XY;xlqB` z)98jQW*5(!Z8s}hgb6N&iL<_#VOd=mKFo_0e8&MWVxRf3TTd!U&L@6aP z)O;aB-QXYH3&T^KFJL00e_B(Rxp-h;?dQ9c0*pWrcoQW_4%iBju2ZPrAAMk_WE5I^ zR^pH)**CNPX;g}|o*dZu&@fqKLuq(G*o-l{#IT_7q0*tIp5#=3JIQoypfNSWw5ik< zxSV@BTNK|HL`xL!54sLK`r27~`0va%&6mj!8GBR*6-cN7skN`^7V0$o1shtE$-7`1 z5Ngf>7|P#Sp@SIVyQrWfMZ?Jkwd;VBY11@Bu*3%SUg>C0BG8h4;}b z-;PBV*d8JtClmO@%0+XBfFAIlcgVm#{4a-u z&%jsN$8<+B`u-65IHeRLW|Cm<@DFXUcJ~n~D|;?mWd?JRZ-ak#>@t-vX%`$WAYxK9 zt6deO3-j7>b`8=E|Lzp}4HIcQRpG1g(7325c}>JEgT}yfW=+EMA47)UaFe57XC!=0 zjmBK72(Ti|Mc3P?;uun~EK-0B=L<&XD|hY_7Y&Mk)v*5eagm2p;O6dbLs#rA`NK;E zp!jMS4(AjiygY*0biC{x7C)@{ekJwoY646Kybh1Mw$3ff?XlJnlIyUXEgiUv(yvpoS9+I-IZz;Co<>Sxe9D+ z;%4|BbT!kB9_nATmFlQ}J3zgfXtQ*@OLJ+G7U#O#Iqc!+_z7iZe%a6AS6l87GIgJ~ z=Wi7+ARGLbcei|+(TE}{pHdIyr`+j?*JO+l__n7>rziC;pc)IAd~bVXa2^Lc3Lw1f z6X|wL5pk%_`|@Ajm!Bc;P(QpylvGk2bmU1)?{`@w%yqm(3`#-8bGKynM1E0FP_sM_ z;OP_scB3*?Ww(EnM%P=TjCvD)$2Wf;EgTpY3__=Wf89+z|G28JY)rrZbeTUIJPyZs zb#W}9oSj)!6vJ4iMxPTeTNDc9DKOC{Q=X#El@JRrPIxt&T!$tB%5^J|aI%=d_4y+A z{6BP$Amho)aMN7aj9A0Ot`(K;*3Eo`X~GixEXM63rSi|Iy;07PCGq0o2l9qWXyJDe z{A$i1Zu=oJ?;q_65Ah@t0seYyW9kW7DBFJ(wma0EXf=QIr;4mt0`+1pp9}M~i`sYt zccfgz^BXTPTs;>KGg;-g1M%Hrs%byT^nFtx$#50ASq?M=gIDtvT0X_h$yw^K1ph8Dn zX;{)_=;GB|oHXagNfiLvD&{=7!O3dSw>STnPndD4|G zJV_Xw5Gxa__#6HKdC9xY%R;s*4sa&%4#bM$-NMPbcm$eGxcB0z8eXVw(o0;5vkt!` z`Kr0`=SCM|rS^qdz0jv+QJ>Z?g#&%XFmRr>`c>iEGy$_a@bFjLQG9e?KHu9v%iN=~ zT&&~kqm5MW&97<0J_Yf@Yk^>bThtM!jmT)fSq8{j3bAy^4Li0mq~_HnF^_Fj<;`p5 zZMTk%|MCn}G(CShEh(?*X~l^saY8TkcfTVoQ`@1MWD4(S7TD(q;U&Fg-r-~9*4Q<< zN(N=Mi!};88#>a7<}Q=DlrtqF4b>(8m9=2|W@9;y(y&E^hOvH;gV`F~CfXRbCSRd? z)#hojuGOq29?9v~Z9vtz@0RVY95-gIlI3i*ZXeu5jOkDFrcbux54_;_W@u{UGQv-O zJF?~KzIbc<6DGbmcH7Mk-vtOR4b~7u5i2;wOUj#t&IXo$rT{Br^i4p~pk>DO&2(iU z=`Kf3I?}&$WB=;~_sF#(#1Rk3Q}Ko7Q><8>ZbbO_vkI zl|6O4Kt!qSj>>UIc=*u{Qu4{PIQ1@v&2p@dz4Pm8%D4Ng=N7N##DxWkXnbn)+Lz-M zx?kuXF0woUDzSlE>p5Ghht=DR$NC}&P?}4m?f`Bh34{1*1NW)z6NM*?*-={llBT!R zm#r8X?XLatJPQdeUJ~uiQ4mcjZ1sq?#7%l9>djf^4wFcTs}Vh>Kln1;v&94@UP4Nz z*Se@mr@Z)0v>Oa7oy<?N@mLp~^bq!K=2qi!!yhqqH%St2+z1 zG$>gsAn==7m}Dp4oi~@m#DRkdPe3Avn&%9d$1Uw-t}2)wPWWLD@7&BMBk|6XatBPn z=u`0eB|pjy?#SwwBh9k~P0gKAq8CDs(!V8ci&`0HKQH)qb4}BPKTP6~cdBZ^>g07a zo)whBd8Dc@Ldo{$QtBQgt0&W5`aD4R+IS}E^;|zo>qNNiffg|)hbQXK@>be}YD!?G zMoCBee|>J^As++2KOwJ9vD3x}@hfN>pz(&rwRcN?@(F}>-`n56va|JlzkBr}P9!)f zR}H(QFjH1MLVGnbvj}gp?7nG`viP=;iEx(Ng|g4Kt0N~?dIXQx1jY>nGYWA>|)?jECM4N0>>BDZ8-pWfm%N{~}XTBZK8uE;g^ z$)N=_r5ZvqE|>k1GvEL_k67zP50iGxA2R@d=8C?^x=A{m1QWa8FLJB zFzfwy?XoGu;x&=?n=yit)-H(@ zJU$I!1n+|Oq?c+;0qz3$*Tkl9Px#TO?sthw3HwcP?6DOyYdT9v*0 zzKFFpyj5i=e_eef1&p+RajSqXutpZ{foT#QxKT)AtJ za&W^uU^|tUG5mY=uW}9Rvg?8-4KUU)PzXvc6cm|V8`jKrEYaLnOsm-Hyr1F54L{QY zhc9`5ylLG^an>%Rr#wxBN0{kyua9pJ5gGaD{KetBHGLj8qZWDu1Onn41zaUycXn9L z;&(5~w^Pqjvg_5jA$$)1jTa%Mt(})eQwbY5Wmh3DTDhtEI?a%veXn~eHC#R)y56FH z)jcC^r1=xnaQgVL>;etn(!kd31Dg!%k0ZNM95_pvTLD6z*%!% z4cXx$=Tap=1z_|&hk!%^JZ1pO+ndW3KwY%sSM_Q6avga*>Q8OBUg33|sn>{<@ki*> z%~vCS@t#$`ld3I-{%uUdL~Q zlg)XJM?p_lhi+r>aSy)>-Yt{rn<|SLZmD6*P-;y|amHr8&wi_(T&T9Zy)K8vHdK() zE`N2g21%oGPZ}@2$`7|g@m3`Pf+W_#E=maZMGL-d%%q(UJSF#V?CmFEQ2u>oG#wZV z_&XPmh0Yd&f3etj9sx#Y3oYJ0H7YRuj3dviFkH&=3nT#1-35a(H*)A^?4RDd8H|kY zFH~e6H<vKjscf}B`pTdy{0UxvYHLF$nM5v-c zyH+&AKLm4`s0hRF7q4SGtrP#68=JXt*?xU{dJUEh4(dExQ)Pw)Et`t8GO<#We2zW%e*H5GR3i4uXy|Me+dK1^J zw~4$PV=U+WD#=OeMW`i-{kMCu{U<}3QwD2M%6#gN8urs(=V)cR-w-l-;FGA)?_guo zVb*7PJKihy+eClugmj{nMFqH#-)i}^&3Mh4_FhQJTIl+7`2A-VxmVpsJn(-p`Wc?< zS+7Dek}+Cfs3tR7dw6t*LNQQ&cKO^U>!`Y+#`<$1)HEw&J>>qj4#=SJ4zX%%@}Gx6 zCy!}++^(bg)~aI5-(E`WEK>*Lb3g5SuCM`R+LK3P`r5($tn`pM6`mA=?wHoA8AX)S z%gY}#V8}o>F!e>`(vzJW+tBM8 zzH2aQ3sAVL$2G+r?B!eeeybtrH8C$Zr`C$+W5UGhw+drlE+AI*K~EP&r|6DfAvTgW zlB|LJh8i`PBFnC|y^y0Q_gpgSCBc5VG*uCFvpK=%f{2a3mF((;vee}hF9=iKh+EnR zElt+oI1Zf3sz_vmwwBxA|2Tv!O5hCi(AS?ACNPNfC=Iny z(0%b=;)tBD<dL0%vP9F5}{-VA1@F# z`Ppj+A2i|D%2r9)R<=;;L_ZqHK>fh<#EBLh;+l03S8Y2b%C~f~NQRhU5o7!wAM{*B z*EA_HIipTL=wPiX*iBw7-1f@Ux5mcV!WJNt5Q(m(RCiOEkEOUdE!N~?O6-%dD&M7g z6p^u11U+C=-wL`7Kub_oC(b03*^Lm_qZPU>TLDs7xDWmU-RHM{Q50GMIQ6Gua~L|4 z`p%woOo=b{C`KH-m6VsgzQi#8`TI6)W6;kas;-%K+ExD5KtJ5rI%y?hV;Z7ev}E-Z zGv+Andej!*xb50xXRoMm>fOYd*BqLT30oHsGGCbOq@K5ecin;b6r%oG0K$UlfC-7l z=C;;kfH-E}b{_8ZWQKnV(}q2=qM|~8)-qhHK6Q4PdAY)gkH?bu{)WHMMOuXW`#77Z zAH{|#sIgg$l7^09iqdp4XW_7S;duU-|4>?b;Wwv$W1$4{%UbI=%ECL-ae;m_JDPR< z8bjQI&Q?o0`v>U-_1faJzptM-1OE8{2G7)#k=u{H9-x}r3!^>eWpu{5#TLv>9S|h) z-3X5&jCz77psX*jENCX%{Y1o@8NKw^BRSS-q#)wZQG7RVD6HOTpo*I8Tnk7Nbay1L z0Y)IpFz!-zVTo)yb;%Bh{MD|@TK=Qh+Pi%=o`R@^I(g+ULW}x|Q2C0nb^{H;w&jJ* z&8m5Q0wxZeZyVv~V!&^884~qlj*yRDspv->MON6&h~GUun@w4yyC}l$3xRL>(IFM< z=j_bsNxZEt*v=VVibDdZG94R3Jx{er_x!Izn!#b?xJwY>aOK4cpUnBaD=Sk zf0smC;HJ)dC#c8Z{`c_}mHTXofozNk@MP5M@;{kx^3%61U;O63s$pA z#&uo~wMWyU!Zp)uXQKxmk9E)1e@70~S&oT)!#$GbLO`M#CuDU6-fP^y@n!gYh`8DN zpL45VPnfC4SCodWfJl+^T;E9o#T&acgN>WEdOwOLe~Jgupn7}9&%x@6gW`IkhR>}u zFSwfn|FGZ>dTl!|A2DLYufd2iH!eouv~KN>SEH_9$OQ=3*Twgpy;U?QpPIlUSw`*| zeCZMJbNo_n6MQQoUlzI{k`T7?_j7O8^D$|LQE3yGAq$gk{6b>g8B-NY0noB2PL4O*n@B%f!Q16>?y&f;#i zB-&Urv)q#qVBO9en}MYM20pdbwjp{PMmPVu_Cla>*05heTT-|_;ANsXFQIFX+1Hyx z*NPTrc9PhUs?^_W!7xo&iIVwTaAm)lnsYbaS%Ul46Wf5%mn5esiOnP!@ia`nLmyvM zfp?Y{UDDYY6#vOG<3+_eLBG&YiDAlk9GlaWKa~F%TO_gG@(CYX+;sVqe)M0gV$!Sb z_1T(VC~Q?!h_K+ON(1I0*<@QoXP;-X(9j2|7-$+#idmyDZ1l-AitiGRA86bZS}ZEl z*&2R~Yx7w!Jz8)b#iPT%N4m;Oa{hZ+^P4u}Qas8u_Dx@k)Hb})cq9ePW=kKwNH`lAREy!T)^;zk);u-4HHBLieUP7_Mfbe( zxx{CY`{ZzBk;}=l>9tw3&ib^U@&J~N@v$su^iJc&)^w*6|u>F{dBfA?X0!k zF`wQff4whne-hqD1&r+dxYvAw!0NxVmZ7zek=5-Id?_)#SZ*1xECpYE2T(U zBhK!3d)!}5d)jK*ebbD4KQ{L#@&4J51}rO6HuhT@I%fErQLH0y@dTzXtlq%VG6Uz; zID*A@L5%=D(8v-B1Y-ckURcBIc(J3RW!K;e`#`}}gy1jjl^2tn&ij;iez^SElC5## zv1yNaAzj+FwYF8~a(Qp|n93q*K`6WsmG~kXL`GUHZKa-+SMSDr6!?1(Sh^|6Llu@L z4`?xLw8SySprUdFn^!psxgc4{F{8w&Geam{HFLl{kD^A(hX|4L|vw&M=zq8 z-t$6)lkPmZH4L6-I;ifb1Fh~Iw{zdO1vH3eXM78BOh<_fd~k%+?XwBo1&JP@_R^Uk z@G5B9$B-E&dGZs;r<2uO_^4KY(!{3`m{0NdH+{9Mud!Vr`vqt3*%8S+?m^0n!TkSS zF(J9KYB!G`G5GkLRuzFl*gwT76^06}PcF|4V^TfBQnYR(s_dys4m(VycaYrE@N{0L zOJ<;n;IsE~`3jM{qG2Vr`!h`jqHg&tO4Lf6M{g!*> zXM_3nWeU-lUvey~kS5-Id-z(J$-uMF2dy&Zkuzn6S&l6&xOdv7!7-_c8|#Udr!8cC z!Z>fVG}-ry9g*FJOH)hCICIEkw3=;rvR~}wl8K~S)_?AFQ5X)WP7Y6*;eo5kzt94` zv2(f0p%)VTZ*|X~DjwXUFB=k$uzp8%>+P(7TEf~5rR$uW9_pX8F0#P+M2WTBCx3LDjOIAywJO46H{XAQ_@o=w z5_@g8I3Ikyh&`7>{XJ>BNFno;2K~&vB?ndSU7-!ID}#5^&8UjHbWyiU5+-P@cb2(2 zTC4)EL$Lw+-(22prH%TQEEg^nWg#<-Sf(^Q(?tK%X!`B@+y(7qSl3>tCHd~Xt90_R z*~dgfgnqb<jdt+78B`Ii*JlKywC~?#&`bQ zh#JsIJs#aN!Z)l0dm@FO16HMfF4dZXHN#(#c5~_Fk&e{12-u$7>_FNlfuG3oqwfuM zzWHA&R%Z@ql7tfOHTd4bxN|qnWaNf*Atn~e2J+V$3-OykPkB)lo;UO~<9F;T?Jan% z4a!Yj_u_VMlb;;xCC!Vs$aXbGvD3!Z017b~-3^!57kyd_J6*MDdr*QtH(3J+#?#J6 z_pID);42|3kcPq_imO#zfRWBmRW|6FB;(fT>MVdnmXft*Kxjs#M08Lx{;9yE}ZN zvROCmjktp`{WDvW-5Zkgf+1DDcz3oa-j2T)@FD)o7MqRSYLRNA7Dnv1#4@FT40c!xMQ9JHlsI45oMSGS_|V?|?B7?E*K0r+UzSJtr3iQoF$LvHY@7+!{ETrX$_4qRPF3TA~USd}l9N^X6@B zwbHOsl>#VcYLID(w#ks2B%kh#@fNgCS#vsg-Ef=il)Tw{zBhwrJ$iyFIQ}ZLKS~S%3Lcm-kUK~FGg^`OrNFW8eP z2|NwDR}k}rz2^ZN{ii%B3bu)~Zl#jZPwye(Z}7)l-VS=98JT4|#vbgN?vM6;ZWVJ)W+6++-$OCP&4ik>Lb&3#@OBuVr6lW{$r#d zt@G!nv?rjK=0+jlOXy;~?19y}6E_m@oNaY@##?zMs8X!d321yJCIkJW-?lVGE$nl2 z_f+W&c@tiztlsu?uWq;$@!XPdC4=Z>8p&{oB-{zV<#xPD;tq>-&5@cdn1$(37ojry zW%zOpr#v6|OUcD5Lkg;`A|>qNoILJ>paV6cZuaZbURbs8E>_&LY|I;J-|g||gkJsY zM45X2Hmj{XsldQxLO_wF_Q^>^XaO#0$`t;lDS1`1YcN-j^7vg44{^ZNWkib54sqgw z94K_vN$*QrH~E~t{)a5A*VXh7V$tUg&ha-BJ!_Xv>a*J#FkL^P0ZL5-HsRCJwV}B8 zQAkTOOSRq=Kx8hAVdbQm6bib5lQ6yU;R%{eBj@edx;eR@)(s7xpGTP+-1qrNw-6DZ z`r$riExh*tSJs23l>@6Io{?xH_YdUSV)k!s|5&@vmqUTkB&<#)8_bD_BE>Jc7`N93IXQ6XTebM zEZLrWK`5T!4^=Zq*!%U3bUITv;FJ&+IS)-34}G8)Ri5YR;*}MuOk}s5S+uW<)6W29 z7vUzYw*p{;8igU0siyIdMZNP{P+v5=wWLnP=p*{^_k(@sm&-V~Z2Fwt{y$>7t$|tTBpIeq8g+HhlUnn$AMv11Ic(&iiie zE(ySgz&gOm%YjnsX(eAub^scc0k&xaty*N^(;&7sEQED!5AhuM=p>Y0sQY!B(P{`^ z#chp>{hc@~{?*EjRqOiG^`SB-SI69*RSA&v3=m$6uA*|mrAAk5`yKRw(OwG|6{Ae# zvne$?RMAB5T+!6Y4agB&CT3=J3z!7#9k<`Hcy)GL!9wlq)3oC+fIdIb<-p^tJ&}2oqLA z!{~OHc!rOks+sp$rdbZ#r0sm?f>VX%x1E}X-!&GNFy<+Zfm&O22Pf5hM(U?_h?0tk zdFuXZb*4l(NplZ#CK0}ho^Lhx^v~8GKyzX*Pag1^$7=)rtLLcQeNd|rS7cS%+ zPwz|xzkv6F)+AY-xuB5crH?3Ry#aJqldwhu2cv#>F<%zUhKd{ci08vDazVffy&y9V(e z2T1^ER*X?^u)_9Dlp``0GyO`Ny&Nsm@Gu%uEdm* zm9Xu~B$>b)Kri;B_vCN|`ZK_*3@`;_(L8K3drr~29I5g63(ZSW?k8%wa39CRjmWJMN$2Sw9K{8kuG4Pq#lR|8vPR+F~g;uj}&(<23!o{Nx zfpFoHXYTKq{f3TEj5V<@z#ah;fkY#1B5OQZ8IPpjyA-hg)7qI(gmTgYKwsvPl?F+` z4Z%I0RE|T~(wv)x9PbG!O9(W_{i~?NI?}~ zGqV*N0QaYEhgSirFZK$aQvUBsFJGX5d!44LF+AYO$cKPZrkl2*FK`tWn{;u0L?FhI zqmiRfMK1~SAwLwO`QC&h`$dzjjEkAuigt5-mS67Yjb9P^%m$iS4@Hbplm;JK8ib@Q z=%_K3XYaWQdd?L9lyi7F+iOikOn(Q@$UaoqaL#T@kmM8EkVd+RP4n@a%$&cP?UZbw9B zPcoz|EB-s1olZ6FP5Hv`g3Ta#=%wJpsqV?VkbeBms>rJpNFSB@Z7t~%N`;_t^U(ND z8L3l7A%s0A3hU9U{YvC$W_9kA*W0VoUwj7(x%7AnN{mCkP3vb+6qPSpzsa(EACjau zbgXqQi|%=%N)a?QXN1yOJ}?9y=%97i!dX>1)R9IJFojqM&+y6Y<0yEy@aIywK1yz6 z(Ru4uEjF`qpZvIR0eRm>T}yv&B64y>AZmteHmfKCm3`p|z1^oX^?XY1<<7$={pDIN zU%uOYu=;1%Nt}y?SO}%5=C1)c=g+>_IM1D2(p67+af(JieLT=+;c{lP-dOTx1#aig zJy7x8-ztgw$5q#mm*{-`UyKB`h)c!G;T&er;kC2n70U#EtZFpwGDVr?^Cb zI4K@lKYhHyY@=07hNQjftof-bh4LHRUdBSro=@$29&kF(h3zjqn|mujKbX^UZX56v zs4ETn!Lb?c_1H%pm>}W<0`a0VK$BDPsKZ+P4I8WN)>62NQJS zrKx;N1_;|&NA7v)Gwvjea#i&O4Rg4~*00R-;&ZCJFjiy}AW#LiU_Aqw5iZCsxSX-A&RqNc%@ zNC|I51MK=XnleDNTrq|PK^vFDl(lp6voe^#t^X3cUPC(l_}e!C9D^xl+#KyIsYsf4 zabx-FX7p(~j`hYm)#1;+LJ8Q%QqR2uVShx!n)iX@E;>^=ME(ze97E|NhhX+4fFi@LH%A9j&@G!ddI znhBbDsL596@-DnA5D&s*^?q>>Nu&X+m6AnTyTV^h=bUR#%R6A#c&Mv+IKs8s+7dT( zvqb`5xL_w=p3>f>w+_4tcCMVD0np_Wdc8jby_-fd!b_A8>{g+yy}5K=Zn$XtM1P>L zE(vUX^7ZvVl%Rz5TRUdl_8KZ!^*S3HWGgczGQH$ejyLiV?HcZVW{kTcM!gf%%F6PB zA}RcjT67*Zd+3mB5PFe93vbUxS}LEWI?fzI(9|1jr!ZdIPEO_w`}Yt}csbP8r8$a9 zYFs!zj4@r2<5gdk)1AY?#HNS;s(jGyeyvN#dq0{KeOg^>(EfpbryQZP*nAJJQ`V#j z?_JxCZJz|3Z;?}T!aPo!^M}1nV+md@0?k}-5pzlJ?0trbg0SZY{lIpy1eg%#!1E5B zL=c+`k3=Jgzm@Z^uby*^v*7}=#fw5vo`{p3!t$a+;f@-s;oth00RMA7uun&;cOvpq zfyCNvMhr`HSgl|k!1|5nlbm{5!}9RC)R@rSaxbgjKaKj$=KPL2`R4-E3taAFMd8Pf zIUYEM;jqi&STIKiyO|r;$jb!nbv)3>!u1M?Xe)PYurY7Ak`! z3v%6mwGxdt*?06HKT}i^5|K)Jyt{(K_m^q zZMW_G4NiBpi__Uu1=cUv)> zmuvxVEpPNg)<5Ogp!#Pl>;1ngWfqzep?62GhWFYNCzD;&mGR$SRmJv>XXS~w|3INx z%AVzid@VFt%|Z;9X;J8%z1s}pL^bqz46G>$NAnM*%e(r{;e$kz^P@tQ(JW!NAwB0@ z8X}9Sg*tI|dY)TbBEQ10U5^0KlXw70vLYmnNaXe!?r=OFjP+f0bl$os3Sxr=+yLf% zIIXODNE~eKf@MoECFv&+Ns>PF)3gT3Hplf%V`E(tiSy}OQYeeJqMqi;C}_*3kz2V- zenDyqgV2*W31(4X8!6Iptvl5+rwNSD5>|R~&tGMZu}p0mM88Vhc|PfeBTQ?zgo$$c z|IxMSv-|H&4uurqr6WIm>LezjB-Nc-r1@Aey1S}mEl+7GsYHu6<+U=xu5|Aq#z-?| zYjAsoucu|!x=(&!{a-wd6PY_}{nzsv3tObt4jU^kLQkaACS&RXE0LIzKlZ&-7_Kwr z#0m%Nd*C025Wa-y|ANd3;RAjZt#=cd)5Rt1zCU_m%6?P*iZ-9-Kv*nhUiV`l;orBX z{L%0LCjwjkU)hicD@e1~U=d3)OW(usjX{&4&|~`%Ab9XCH%HRBgKcxi`71Cgete^7s0ZdX)8dEzCYOzgI8b#kg0G!W&_&bf>c2--y z_8BojtL)+X!-#;xg5u%zK~ih>pNeLM&0CUCreuw)sNNWGescLm<5WO{!sOj&wG+V!#M($~UbxVQ%TfCtN%davNC=x{_tj zjDK(HluI+@nD6um;{62u9zY`j3>4fA3uXBlTs6Tikhz3ZhgX^B7BMIJ}9)OBc@_&X)S zS?=>uCIq?{1Bp9*T@C2Iol(wavENgj+}o^GOf<+0YgC$9gqWceYF$Q@JL=C1WQ@0z z5iE=tpf+W`pzH1dLJm?Vn6S2dbtGHNMTgzHcySQTZKH*xlhN?F*KCYhWY?+YECV@# zH^|R`ysyB-3sPD<#HN&NFm=Rz4Mt3Esam+?R7DgXeq6*jU z2V9l#yF$Kw{~E0{lSSHX8R?;~l9?p;zEx1_O-0vfYqS_y3Nj0ogDpNQ3+e-YU3*^V zHv=95U_=XXb0V&j+eNYS4)6^t5lLN*-P_e@th-NfFZTY7+b&t!7jeDX%9~`=L-)EZ zo&f94jfdhNf!b5}z#X@CGotX2EVK}{@GNI{qU2Aa+%??9P#5*`E|oYZfi`?zAhmY~ zfpa-of&Y|m#!Odjn5$`^SChNyo%+xbwiI)!6u{bOGhlK49Oa`yteL&%fKmoM};nZ+~tRi>kvr+cSZ>zjSwf)p=bt^iey@Lq7HK#mI-p-(2w zgZ*Ed!Br28U6b>_q5S?LwDzYH;*M$O?B-OtIMudy20G@F1C?;xf#|{YTGraSa3E7-%jUPL?z1$18aMC|?p{{9 zD7X~eRuv`&V)`$rdQT0OP&rgP$ROJAoGbAIK8k54J}eABazu$;p-192750+vr*SJT zMhPln6)w+d5S%CM7xk)wm*XGebz`$3$euQ(5PzDM=vl+klb6X{-IVRxnrOg9J zV>`2(wk~qAF2)$vu;N8=ecqd1H>OUdr4oy9^;^@nqzrt-`maStSZsdSz}iE*QmCCv zAFUR123`<4wBxIAKjSOOe1rkL$8KV-%lI8{MjJ7p-TDrYTwNI&rKPQ3W}0P}l!H3h zH|FX|mqk?KoZrqF*O(-P=hhs4Q%u}-^NAFYz;~H}RUmVrfpT0=mzg2``PxKutRJcKB9KzSLL*l?t z_; zu>ZxxGYuP>Qu!?XpUILG2`L{nW*}!6sqjmJUF*I;($S9i!xs*Wh}}q0qzW)28lGNb zOms0(++z>+_>m4YAn9`hz*0pdCs>kFIT2~Yy(ex()yz8~t0wTS@7|=SxJYqxJ#(|v zddLSC$(Rg#$^$Ow*>j{4{$-a^U2No8m*IZbaWNoDCbOTcsTtMOn4|; z!V1NddI^7IKE?9g68)Wbbg?sUP>-U&^ac{BZB|Zar;*7^ms~Vi_QAvdJIAcu_qz11 z2{!Y6uQyfe82o$ttv+N zhVH@_EzHPzH#d09N@>S^8mA8CtxZ&(T-1J=Zc|a2y9-w@x4WWq>MdT@TQ5wwFKEpF z)n49RCJyU)U&0@Z zrWA2>N&D7$^cFQlb!{T*cI!pz+9r3`2+P$-`ZjH-Wpx-aCxg%h_U2OvBIV9U4oU+t{Tw% zPeDGs+sVplhr7w6@faAKY1#wt5p1huL?^TIeS6NemLG?UhE6zsrAin zi$r;=6^wLrl-7+38uixL#V*?o@H<0g?9ay$mFR*H%CR+Nl+J0^Tf_;3Is6JG&x#p$ z=^nJfN_TldB`h-($Gbq&GfUeKxr}xf@39Q_j+glFX~!S2=UyREOGf-xFBUF#0?ghs zBV67em!P`VE)C&oZ)a}%Hs6i@pCuJ9jx7{so#EoAfY%S<&74kAH0udoAH%%qe!(Z7 z%5M59+0-$C56LRTYHY2jlgV>CL$gv^(5%oIUHf|~ntE{nV9qY329L;;v`-^>Q48iu z2|9u|vCxBG-|g!Flf0MDiI*6un>PpugKQs%c z)!uGxE}(0Yg)cZ_u)tzs-sQaTf&Kn4r#bBQceYuqtDsf$9j|{4qF!X%kA3WjI%=U@ z9w`Sb;sa4^GpcQ=(Q7GleWRD^`^FK^AsuUlE8?WpY4a8@jk~607oUZdtM(bat?kqD zPEb>dy8w^ZyQE{O7k7x*(NPN{FI|`k%bkud zHOxC(yCYAQa&L9=1c~=NZFpSMJfZRtWrRg&%G&fjxKoKhU0S(nH#=UPQA||ww$_qS z`ZHA|Lh4G%cN*worKP8vrO*ZYWLsB_duQLoN~`v~YEn7gV(`@S?yFMd}<#YAsmbPW_36$I1-m7+y226dMqb;eec+++FWo zF#3nx`D-bvv#s}nvaS442k&w!GvcbLD`!uxLQQg+{)o8Y%g?AR>vMnLiV_O`!2z4+ z!dBB9f()%!UNsgfQJbQdEwB16ic|OA$?J%tjfE#n%Kv`o_$A+-)-O-WS_CcuW#(xQ z(7li#yo;!mc6f|6;Ooy35g7h5`?@N1K+C4T4K@^#bmy5*x6y%*OnBpGo}CdnQxo;c z*4qD_dqlVFJ8X%)58@}zE8dHJROeqHB$z=Bs|n4qPqY4^Vlrj{u+hBsn7Ae?#^71m zDo_0Xl8?$K=+CGZ7Ke}EG>4ET0I!t@TSffox0-k97VS-q1-Er=fr}@ouJdiswf*8FB%C%E8o0i@FK;gI&>=m^@;U!+&>dARaa+=N%%{( z+d%)i(mRQ|4+&dZnM;J)+OmS%xtlw?UWB_tMOl$Lv@NnImk&sa()<;})(2LKIn=fS za`rODiFijp0HcMd4o2v;)1v^t zM(h#~NCZLd2Ef@!8Dgyv^4{djU|s0}H$Lh>yk{-V28?f9nC2a>@*(8&+Vf7?HxQUp zm-N4-5vr*#bMO2XU5z^pqm2@I`)Ej4>huu|uh7UA-NiwpDy4$>5aFiyXLyXNd+dpE zf?|jAjUwnL@Pn&#@!X)-unFF&lS|K@jvov(H^t=KCg|b!dbLtwxKlET(9;FA;D|tr zi9^F*e%{HoN*IX(y{27aUC!HM`;caVYM$dHF`tq&+mz=zGsjUyqC4ZK!W-^&N;|F8 z-XoB?(vx}`Gqu+^n=HM3cGUh^vW23NG_^lG2)ckL*nbFIE(jR49aEh<&qesJ?$-g# zG+1S`&Rp-%a;#me*Gw>_0BIq;)p+Mwpbp5bQsXV=O;V=Licz8;t>sBYTn0E*rPror zZFgX+n^N!S8&(+AYqw&ZL`#*!{5P~^m+{$%Z&OXT=_*GF#nh5ppFL^1lOObGZn61i z(e=YT1zr*^I(VS<-}RHzWHlwOdP7}Y{PtdBm07RWx4L)a+}-c=qgP{Z&4&P9D`SE2 zjUYW2DMOR}dB&Qbm3t$Tk@72^Ykn3{sO=f=y(Fe$qAKYbrv9zGLH56W6ZcWQUYL>{ z{-DzUXo*)`juNDcPegsm3VAoTXi0QZSls$rC>wA3?Zx;ZtIW2;&Sh?oT>R3A+}(dQ z4myD`aIAg;B-{UqZjms@kbWJB^#tlpIe*p>8Y5-!!Mu})+B+gccZ6%@gA*mk6^Utf z*Dw(hCST@E8cH^-u0|8*jUYyfSRD&)PuWIJ@5*@Z?9KT4lXl^Xwc=L{}k@W?xk zZWuR=Fo>5SS5`~H%Slw#&)WU?L9M$z9$$jphOk10clsaru8h9euH9M`q0mJ+aLZ)N zH}*dh2G(b3woA2X0YG>M4zF^OC6mXC_Z>^ak?oSR^~+N1I}m7ua!S;(+-P3~A%Z{c}kvq6|wRgtVrpUp$lI z_4GvK;OueGTH(1_H|H7ti8-3+UTa;W0du?4^5n)H#P>ci@b`SU_WdyJEPaN?@h40uU<;~M6RK+Uq%TpEQ*VAq) zIzJenvVC?GU$XC!W|s&uaU`WcOsxM2<8G?`hyql7P>Ckrrp!n%nD489DkK zCA`zwW)Zu1YME|6p-?L}*9A2zYBZ3j9Ui3YPv;#_@6OO)s@tWC||Hj~Vta5C3 zqr`TPB=Zg=& zirr$3wG(P`WSDp7Wa<5fD2Z*LD|nj;#|{uT`xVlUzMRe3`~G>0;uQ>zurWSy$Xvej z>dd9+VrqGQgNy3=^Dh<_HxN>knb#Q#f=y(mPc!IH_{Vy(^P46NSbFq-RFKVivF9%<*}pm9mw#gho#P zd>43W&2~yOL!f^6Yvj$&X3BB5<#j~rpa4%%nJ-*4PKV_eq(4_2RI?wuK_OUA@D*dv7kC92Jcts#1yoW+jc6bTz>^xfY}djmIE0 zs8I<>=T91G@-+v;bF7L-LuT&G5KL&7u8JLgB;(#NoVBlV|7+^+CAKx%#xmPm5#d&v z^Qkcb2?B19J7Uy58=58w7po=R$DGQ#Ia0o%Wt3P30gNAvI~&0R3a&@v8HYJ$x&0ftLy%AKiPXH8L%(Znbby4q)mJ5Prg zG3wkrP4W9-fyzIWwP-cAOY) zBzs+SR(pVe`)?1+Pge^9Do;h(ki2O3F9~=X#klJA!rS9mId{cXe(}(jH>*T3Bs*LJ z2f4m#D5xX|Bs;mzGJ&|snC0x< zcf4cKV3k2*KC+Ifjqm+;KljV?vgLC_LZfn)Rp$3pM^U-YshP5?fk`rLyR!HEZ98+V zlG9=;2r|wOYwPyF@K`VPQ8i3M^-V4L>41gd>po9oJk21I_e}AY5`K9{&3U)HLjEo! zh8Yhiu{Zb7-~d~(_!3OIdkJ7Ed$4+uSk+}}YM#GCL><*3VBFP-xTAjje9zQL_&0Ch zLY(51`E<#Zt#6dz(7SX!k_R!^FUm}8p(TK#1*e92Z(`h$tYV+i< zBz;GZ2Lj&fAJHKF#0Gz&8+A5J1&^}K(Eg*lSJB`-&FUImBKTmlQ(;c?t}!os)aiEJLsMb-rG71@Gfe9bZtU5`H zfG-9NeI@ZAUgD$5^>$Xao6Jc>0aLp7%L zLRJi9Zd9=BrXlD z#zXv8oS&9$5~-W<%8tqAq~@wp&!6Y5K0V1=rYO^fO5%5(-}#%ZCPv@CFD>kNpu1>M zK$AN|4M)8UG*l{7BN_(XBoY`$+!Twx2}MlxvoC)lM~Yqh(U7JA{M5V&lXIR%6NlTd z`gbAGMcgd&(IeoEv^__8tw)GH`ke3LzM;-5kdjQyV^v($Hh(mq2MHP6m4Jn6-TTpC(w?d2U4akC%8)C2Svfeh&7^Ji$f7?pY82=MKRjP^5_DV@L3J%!it z<91U>V=`;V;>N8Bod@vG>)_aAA@wGduqx0|TLrz3K{@Ya-;@)N`VgrCoN|3dkAOmD z^g#qAojq^4MI=^>xzA0an7IZ^=A4k9W=IU#e#eAnX&=8&f++DWTo;~xiB(JrqxX?q* z&s6ChQ7R>J%uTAD8jGXm^(?Y~i3l*4>jjAb#R93x3?4jE8nU`zxC%y84tKXr#T;21 zwq}v;Nq8ri*k21V=C192y<1lT0jaf7B-*C_tM*L{RVau>6VF0KZ>|%T>l+fSi=KP| zV)6}#;d1;iAH`7Ch@sJ-8$PcU(9v|s zmyvRaLD$X~t*sMuSmkVLY}-zf+bycXPLB%>ZTBVoZ`P#Z-bzPZLwnb$jub&pot;th zitW+_W%$2(p+t!uYa)Z=d$}h~7U43G$pVsXgie)MbV6*()~u%TD}Q#0bH2-$_`RZO z_hD$ z`JG}Zc1do&$|+>WzrEa-ZJZ_osxRfGI3>dF6D?l(yN#R*AmkoQt0`()Fp%G*Pz12*vT_+cNv@o4mKuH=^oXC%4@% z(RDp|n!`#V8g0qjCk4Cj2~q#;JaiD4Dk*d8CF>=s@E@MBnS?`~JrpyEW{=h;RmWas zXD2*my}HwQcei?9hA3-fT4tVHp!FVbYX>bnZqEFp=+hREl)egvL0*pbBkWZ_=gzU4 z+a->T=lSBn;Ui8Pm`OYs4i)vHbs|-ktIWXzL)xdXV7h`T0q-)~+y_t0);H7eqKZ_M zLfoV}n<&YPIh-z-RWvo4bosZIVT*Xc20jas8iE)u=|nq*k~n-SU0gj$~3B z^qbk;r`3*4CU#7-L*qh7Udr%bMV zjzH?PP=Fo`eu!h@8SdphF)*Y8yJoURj3?#AiRIfL>UTGf2rOOV;Y5#${&HW-ijCu} zKTy-#%^vXZTb_yZ{SLkIMMOApDjhQi1<56CEb@*YO2xAA(B9zL?g^_Cyd6mi6k{&S zTdr^J_k2paU3O0pHwKcRHQ2(y1A5#vf?$NSO`ahZD0_+LJrj`AmKmGJknX=amVYa% z{EH=1-vmzDyV;eD*i|7x);QzqXRN1})55Pw@Ft~-TY!5Jut2bsxaBKn%9z_%#rN2~ zl?i-io3Und0%(t@;vuN!kGICdCG1*`CT)H(hzHw`Mcv6FjVXIIenG$1esbTae0VDF_`WZ z8u!=E#&`s4H{z1y9VFkRZWrCS_b>V!OwhK5?>9I9C5JW9IK_hzy?%H0L)UO45%FI^ zqasM%t|_{z-|j&-N%uB>%eZAC=wkWopyXnq8uU)t_#$H_qIhse&-Y(`@rP0PRN9>h z?XJ6#!#=zo!lESl+pKTmr`o;$?#i=C?0z4u;D5%H*)k1+%+0Q) zo1T>Z@7$z|{L9Jorb^4C+Zk%ck2tn9Da@vqdM^Y=6Q!IySp8qvYG< zxbbYE(iuw6!<~KORW}hg1B$w|Np;`g%{m!r-Vvl;wSA+YKJ3yu0Y4}~FG9>YfHJ!g zktBFbU%+e&V=RH+uh>_%7Cidf1HSW2IP!483L{2td%|l(H&(foB2d_ zt@q@MwvI^*_Wlm$MXLfzYoqBX`){+6T_I#i0R}&m?#2BJ9HyynJ=*nzaLYw{O$+^v zOM>tY1L77&?jh9^)2DY?3+nFGH@rwXQSUVY+&IM~#_!xo2hxvhO_1 zxrIpVcc&Pdi`q=6b_O2VoHcgvRvEy9%Y4DG>37@3xL-=(p^=>$@;KHq{`~@K!qacp ze#y=WCYj(9>O9~5o9R!c4(yKPXzcHm4)mcTiW`+VDeX;}?cazPw^;g-*>K}RpVnVR z=N^#E8kew>9_9rd>Ml^WCL54ZfgNynT1g!LFm9ofmh?OWqx2pJ!4a+=Y0{2X!6+GG_EMWRj4~5@f615*KC)cgM ze*9fDB~pxa?r0w2c+*7Nz$ZF0MEug(qS1E6W?*iQT>{3?)HW|x*A;JKh})jG!SxDu z3cxYgP`%Fx<~v_Kb+q52vjGI3hzJf_^QFTqvHy9)>wv=B8J+@%%7}bBH@oj6*TNk{ z9D+NO_hRlfAk`X|e{X?QJ`{wISE-;Hjf*WQ)#op!G1Z(CI*6*TN9wmz^}0u|&?Oru z;9X)!W12MZvxq?BSkQMY?Dgug3ysV**89nEj^r@qm)t(*I3y7d^UU6{b|DP1WV63o zx-L3GgLr*vV6Q@a{|{Coi!`sIe@;112s!`eo`I0uIk^eF7fJ~@4iGD1dKsMz;zs1U zU!o1T&rXx!aS9z)9v*Q2+V!@mcl3xrG*ly!XTnb`r$d*dsXE-A2W8`&Dc%Ij&d<9- zrq#0x?S2c{VBTTkh~SLdsQ47->)Re0icY3sW#&{?DEoVk!s9_XBE&D*`RuQ4(P@ab|c{4dP^s0L>$o+v(InASPqe zixd9eIT&D&W5(*T^=}k!Qhf_ApJjS?ja@=KS#VIg?~+&3sYC2qfx_qW9Fm2QRXaN+xw{U+P7#{M2~|dVjz4@2^$tb#APeF%6l^(*q~)1spb=YRr#o~kG8!esgkpr26|7j>HCqodEEA^ zADXR|#8)>>#!#`n15eP`Y%=D(iW>7Oeul%)Zx0OHVDLfZVY0c!$?90Jt^xSVuf4wd zhC$vLd3lx#+S*PMufU57HrhGPp?jf`V~nqWSC?@y@<$QH;?$iWKIkw_@T;goM*cro zL5aAUTm}R&0W?+W4PQcJIuRGgxcUZEYGreZMVJi`Go`s-i5c1@ z-AdVuNh1so7xlZ{o|2c$Bk{(IW6fCa5q=IErX8ONEDl6(ZEwTV)rfgZd|NyecV7pdsU!7!&K(yHMFNiMVw{VvF?2TF z8;o}XKO>=INMQ<&Iyzg7Z&+4H7W7@90D#F?cxLAy(bOpR1ItSQg=Yob zo65HZ(xGJ2Z$m?nW+bIp4!Rr;78wCr_dU_4`5yPVDYq2PJ(htVML1!@y>JjonKEEj z3Bx%@EvJHE$xCmdU>Hu@N%F78xmlcN6%^y=Q?S!m1>cE?99pw(F_ay>Bp&$fota7F zj;y0vq#fyqrxSFp-;DR8hyPHM^mSiaf@!jEQ08lU)Hcx~-S%%L;gxl0Xd6Vd^Njai z5)i426z*Piq5WWeY0D#fug3-jb_}z~huS0yNecJ{W`Yp?M){Sd^s3wq(Ow+%@nq<#*BSJ_KI2s(ElaqUTV=ZmGNV*GpNa zXN608fA3TRNbp4pL{4>GrrH;T3pafNa#q3!xrZscGH5K;724m${N;`FET%?bjh#?E zt-(3pk>W(oDK%!{z!i&LS_fVEr4t+lT}}>lr<$*5ZG6z2w%KV_Jd6Y(P(R0tD*faz-d{4pzKxZ8m;c#r zx#S)3*jkobT1LjcCM{VaAEjw7cc=EX^=qewBPFy3)5`s%tSqOrXUgn7Ub700V?C?3 zB{6*y0fWzpG7e}p^YORjYvFtoNzwvLxfOgvigG6|G%HFExzD{mbh{tjuQP5Ahm#kq z%}teq)fya~5vPNf0QaW^i+G_h9?mL#XTZr#&2_OGumN@AdTMz_%aMl48&Q;G+9(*0 zygO}w+~(O|>LxPztlcbG_mf$b)Ai<9ullzVPv&ap6xUh;xn40Okg~uOl@>V*Si~6u zG&y2K?e-`I+Ajd_C0BwWZCNGZRMS!G&gMxS1I*UG?tywBVPhsfIIrM-o|!XLI}wp) z@Vx$(?O}ldgQ@-0&6i+bQnDC1gljm9NkM(y)KXE6RH9{jNRHOj?IXOvN*bA$JC658T^HOxV;yr&dpig`ULcJ0(qH4kmA9Fly{BYC@n{!8^6nSOD z?fsA>!aQQghpxkEfbA?oe!tQ|nVr8ay3lCat|tmQKeNfRbOU+wh%Jl<&5BuA%~3DV zX==;$1yV|mP{_gTc5!%l?Q+K7Dbhq^)vcj>jZagtAW1}cj|e~IXGQHg4qH}2H6DzV zp9o@x3nF!!e}SZYnolrgpNkEvHmBVbrs>8NtSYu5HzyvxX35H3sLpo4o2@zOHytrN zkPPSEFp##wa9zufD%N*>q*wP%1FP)gbWq!rgQwUPWK)u@^*9l~s}<$%u@zw{`lh?t z+^*lwl(&aWwZ~k?XDpb01P6SMjgHewc6m&^5iIQKWqxYIn9~E)4WH3BZntUP94_lxu_;IIm)6zq)*~V?YBDdhSeOAECu8J(%!|f< zjr)AnZ>Z|cc+C&sMQKi5Y!NXm(H=mc_|l`2e+_t=gPDImVliTNh^D11jZ#vR_}wn; zcPLeW))(v?1%opKij+g-ZYg>Mplo6K7aXRia-ZPhj+mR-go@WlOKmz((@nFiC=rz{;Uw)?-o#RfwsHXMa#N&lp~1B&y7vtlH3R58ul zV6sk_A~Id!J`fu|D<&>e7~d|Ibb~h^Fa8d2g0RdO9Vb>(bYex!QJVRk);2)iD5-uim0+=uvN%i#Qi7B7NK}QdMz)-Xw{ zh$YjEAJBrS4x-#IgHw4C4ZQ?F7Q9M>nvc_Ug-4G?S$Y`2P4 z9+cz|p9yePju(@oNA@h#JouWqbzY{uf(@~vho$nsf=?T?DE$`I8{tm&HZ}#2z~S6V zs|xEQYap?amr?6o)!v}1i>Ai)?jaMOLyD{;KDb`Vpu|ZGwtvK zTV$U8Pjk%fwwheT?Zd7SM4BEUYxQ>;HLi9Xc*TbdL`6qYEQ1PcJEE}JeSIH>c$s*u zXbb1XQf^-S(!~c8zZCS9UR>lb87YmJ>(=9iy__2Du7?VQ_6Q0>^9;~X6H?JNx;FJ{ zJknCW&A0O)HzK}c`of^U?uNO(V@-0$ou*WQ$VTMVcj#`V87aH@ZawHyd?o7VBRP_2 z@|gMc1s?ra`{zrFGkqob7u^P|;_Z0EtO}fdp;KywxJ|LLQ|Ud`MwZ$=s8FqXv{qf_ zqd(@e7T=vDBIk%rO!t1M4B3WF3d|bupzciA2P8Fg$IqLia%)bdGhXvT|TWLLo$J{DCAsH?WTR9Uv;$}_Vb6j za=PlTIi!Eh4Dh(=SbF-alsiHu8a z+zPW}Lgo41MR>n__-(z6^HSi5_9yMfFL(Kh@(v5h`h|ntV5n}pv3wLu@UUjdM;L6) z4ZqS1DQ2?Gy0IsAT{P=~{WlV>@cy30|IQ^vE5|^L6g+&#CpR*3L51#p8LjG{}7q|Go7m8vlYNFInsn!xg?Z*{KxN!i^ z_)Y zNh-WMBEl<&uWa)mdioFKJDj@LA0W%2M`WT|$w_qEO-Dtm7UM7I^jkA|nhuNXML+|(J&NpqwxI<=;PvJ z)c9Om5$@?1410;coQ&1sT>k$WdfvY9Z*({XU}acMswzb3k2m6Y=*m>-q+r+hFadS+ zvi5>mZ?pwv;&`grGiWFDiI19@BW%~Ry%|3QIVw5UiBwd5^)Y^kTY87vNz$@#KVx;8 z-k#L@JilNf&EBN_B~F;MD~!nZdUk)T@3~YR*4HLRfR-d*Mt1$BxJ^}|fc&-7-imDGj&{AvGXwzxLql%ORp zLy}&q=nc?Kh#MDUV4^x`G~R}8lA~h@s*92=I2?>Q5WRp99e555W5(FG^P8jo5D$&a zK!|WfyHT4uf+3pv<19z-*{_W|fyGE)_Sj6%6a|2m@ixrr>W_z#1+ngkjNdrR3J^Oz zlCsyccNsV$MavmOOAUJcrvshSSbn4@HMCo6`dx>e{Oca4QURMq@D{<=eU>28nC5!# zvZ3s>4G)KD<=Xx>m(+d&GpmKm7&@z|nDiTyxh#p+a=lIN8quy&?|^f!uifk=N`COn zY!K>SMub_T^qX9bu-B^FuWMxjv0k(dOK$Q;dru(NY|ya`X@^+{M`oA%hG<14>&TIu z6%>zr9GviiuJ~>2BZalr=u_*S@xC_2&FZeaQRcuW}r+CG7Wfz(V^`UyiHcPDS z7hHa1>s@9nL^4lyu=!KB%%*g-ff=Ct7+(CnTJLQn7gQM$N1Tq`rkfRSX#LD9LAcwc z{ING~Y-pH(Wvz}JChNo04{Kg}wudR?-e=?jhikUaw14EN`jgOt_FRt;+% z$}^RXV&F_i6PQ4ae}=o zL^j&(+C(*XrpU>Y)USJ22CHe|#I-~nHUPg+bhAS*wBkVxq)Upb*8_MT7JWq7=vL4` z|EI?%eyC3nfzHL4fR{>QbrV^kX{3d@VVRRu>YhP-q)z07wQhSo@IdF#oaAnQI|nEW zZ?#GP+CQzl!DUpMbm97?!2ML_-tB>V-(T@*jPNf5dou3y@m#;c+l`*gN^#lje8V|X z^PUkk5gieQ(lPbl%7^Uk&cqWXmBP@#i*C9NtZ~D%F41DdRB_ngPeYHMFyPUUTP~RH zE@GlB^$9ri>~T4{gAv(1_RJ_&Q7bGpcVmQfE#^m)itqI^%voX?=7+yq-{)J7%d(ys zMO&kc>)99tu4m~BdYfE@xT}*Y{okIdZorT(&yp4Utgna`)c`QPDfEp&rp|kxszTJ( z_mljpw*mz|LTQ5$2F4(EfH^3f(=@qLvo;Ao{2T0qHg^ECzFDd*(1!3UY+0P zi5k5|4w8KvbX5Kl&sZ*_68E&0fHS1=pUN^u8BDD}N=JfMYpF+D*TMD_I(NKcO;VPiq9-A-JN;IzfQpYb)JUik@Ox3%=4(v7JRBQYl7);7RO-U)ua*a=GKx zJB3}OA^F)emM1M2?iV-i6WL3fO{>`1EoEa~(}<>B?%&+n$s_a7S|Pk~5Chl7+7l z(s>Qk-SUF9WZ2)N4N3|9Ck{{ky-=6$a40$!C5_2`#e3yNPA9iOBkiJEw|&o~f8J3d zd#1Fh-+p2~M}t3faZHy}@6O4SLH2)1$Qy#30=E7$^1~OS`;A#q0*?70mrO_NW_nw) z;r(vIx$Nw^zhuhsKoi0JU!r3eA`yLmlH;S#}@d z7yI&?#$8EBOFYxPf!t-m^Ga-SI*$htm!8%`yjL&%rrfx4MY*H-=-CvVmAJs$ojcg) z&awqkq@>Y|-QQTUt>?}m0(N1~scMN)H{8rCtMq#Y&88$8yC&qH7xF9Zh^3ABiE;Ak zeFAaNFu-f%L?F-=vA3)=Act{e^?!k-to7}muspF07N9|3N=itmN5!Ig=8G}IP=&rn z$HyGn^YI}@*h9X{$tf3aY&@5#d9224uvuTF9iTryZbz1yYmeN1S-2BENNoMzIqv5H zvPCV#j$4JciS4NNs5!@{|_*GC|p)wyTuYC`H=&iT2Buq zkIuMTO(2!^dX<2Es{maW?M$n|{~2KSjk@X4(LUY5&y%XwxtfZy3??aYJa|?$4~@nD zIn~#;{xZj$D0#l%VWfK%w1`PjQOy0ak0`s2?m2<-aNVfBlPh1W(37>2c!BF44R1(` zQ-daH13ffT#a%x?QrfBvHF#wK5?AqY+Omk(D9>*yi^H6toZvUi30>F-gV!WFY*3E* z$bU?TlNNj=`5Ltn^_7o<=P#ROS(&QYu>^;p6m5xoWx1i51^B@p+M42l^-a|z`a*L*xw1(9Ukuha>QxWzu=?NqaE%RS~dkN z%~Ad#Q8WR>6EF4Tf?1P(xB8pzhnCm=HVXjSeJF@`>d-x|o@QV+p`-iRoLaPOhs^>2 zDA!35`hrC?Go;#$&pL!YuwPcaVY#nNXw>EWkc2Gz zh1G-wYy{!cEk+l2PHT*_M(=(lQ(-1LYS(NXl3Z$tGLq6E)vX~8?rPpS8rv(R(PTGP zDtxf^s!z7a6)M};T4BYw668xtB_ zSw~JM9^Qoy_VDL!c=&RPCpKbL^Y)7@+w9b{FHy?{ATC-baR=%^3nrQ<&<(HbfY*p2 zsTX~+pZJ<_y6C-&yyEgWYp^#`ZoI&J^)sclG}?4>g1_U|NyP7qy|35)PIZ0wE71W4 zHf=5Sw)a?i6@H=sNkg)XQER}?FB^b<^8-~XGj;s;nY*L8wrv7->F_6K^g4;=n zngWXP<&yQ*RKH#PR`w@~&!SL|?N0yj#iTd+L}Ou-@c3{YTiLMyYsNEdfs{KJB9`3a zrrk(&@2*W zT$4foRe}}VoWu|XZp;r`-lJ0E5BROa%#VsH5|)`x5*4?0zw8S$TRfI1LEzSE6u(jPl{FHF0RxU_D#!Xz z0X&dBy6-;v@bUC@{`=##->+0WuQ0Mzwk2&^RYblHqQm<%U`MryN?5I+iR^4prtk#9j7Xq#T^9{TaxbO;P=ola+d%UU)e2C!g|qmIk{i zS1Dz@PhZ(IuxF}wBB6Zk2U!#bPRf6I=u&Zv&7u9gZGkeeuufP@&+J?+o-?o7T1Bnm zBP>>rNGJLqz9zk+>exK44(P$Jy&a_5|k&)65yTlF!5 zHheAStn! zymWV@l(p*CoC==7E$y2+QwTqGy)7qqU^~n1dFQA(k8-*c2!_hGLvsklnU53o`)SLZ zjWrixEbYz9flW2>%e7ZGP9h3A2jc?^158wAx4 z@-^HyaXPJKf<0aA6z_z?+L-^H z6GSSbO-dIL9yV#LvVb-5!zMVk)*H&A(ngEwfBkqvEyG5dw{GYIb}>1)%6O}ivIPo#%@HiH~y3_H1dok;cl({JxY!%YRy|Qzb zm8kVNSAT=2(5(>n^X+@U%MI?Y>GmhLs!qku{U1f=9Z2>6{qg!VWM%JhD|?rnb&C+v z&9z;g5bQx_+v+Q%8=c-4CyOAS~8-WWCFWkW#VNH}L zw7aC*BMX3skS~5zB0iyX91^uh`>MV?WgGFaj_6 zY3~``M_|nKyDF^g2ThjMVNoi+{%{7nZ(bHNXpmkY9pt*`%z)drD1(~n*vb8%DI|0% z6hm}M`acEaZ^ra@68Ijg2x&bM`L<)}VX@8?PY~Uda@sMV7`5F6z3;vVJR`%DdAhXXADs2#QIrbimqRxmEq#9t=_$YZ&S{oI~9 zf6D#!cnO}2U(G6N=IK2u{5xPut|sIvs=aj1bDTzpYsVyCq~>7n6Y(s1K|x`}9n02F zlSlMx{C_w^p@pg#6V zip&yoL<3+gW*(iJw3Wy#nI$zFm87f-Ax-gxG!x3~>rS{!3B)agGHX4XwLQVYsn8FK zn-5M36fz;qgjy!!=6zzZMW!jI25lw_kKBLT+r#_I5vNWzqHnKjk2r!VJ!b=@3YR*|JnRIGIK6t4GBXzXxHiOwms~vv0TPvYL zHy=-oEc3)dc+9(U9T77z+uAe9PQgNdGqrBxGilmDww{hSmW*!{Za7sY)U~G2WKJ*I zd)k#3l-j^Nnzjp>U-z~6kQgP%XH)(ytxsK2<~^~BOV6ilzZ&g76%?kx;*rg2tM_61FTYr84AP)6@QYkh_6zn- z?!Si@7UZ0r_t$5Q@cFGA@CK}nz{x4lF+AiFhq@Cv}*QGbV!Sgy@^ zfOyUYjC?8#KW_cr&gSlxp3!s&L z^sF81QpW;J2yDs0{oTM~H!=z{+^~G#?E|n_?4`z%Vp5$|Gum-4RFg{=J&(!=li3(yOyYruy zpBa+vTDK>tk8q8;eOi zOFX~*12Yc4;?oy=;*+97x6SIo-~6p8-1|86IS`667cZ{0rKXr)9`l-{YU~XBRlV)N$7sH(SMICXNJToLbu#34g%M}px@-LhN9Y#yxJtXc!^f!ex6=ZPTA>1^)tJjO0H z`=qo%BV2Z%(Z4X_81r^D@O_(t`yFq5m&FwcqJ|A(jT&DYc0~$=%UG+n^m`wf%AX&* zF}yYG+I(RVZ;3(JRv%AVQ_oK6&KEQsvsZl5@pc#H|1#a)o zbj*%V+H+(!w<$88;zpUy(!^SH)FZ$AFhsgkQvJN4o)Pij=VMd}I3ac3hnSj(j=*B3 zS6I3kJx)OVD*oJDdHy!Byca>Um**;s}?&bWrtc~9EB z%57KL;%8>J0sQ)oa}4EgGDGXvW-w9UWz*CA$U@Lh;oGbG|C*-Q9>ba8wd@c<)MDd$ zV-QmM#(lY@5RF^trR(&UF1HwRo#?NDsA4?8ERB9Au^3HIHjzKG_)gUyaJFY#pU z{Z?P$QrA@IAySU4bXq{1|J(t76u5r|DWk=f}0i%AO%3SXQauV-^0c^{=BtbuUu;%E!wtDXbOoH%h;&KbK07rImV%$&zje zE4{4gi5X9+IUj9_xA?kN$E|enC2Wv~ZEsQOt6@?lJX=%o>f^5l{qrm`Vl^@Aq_r3A~|Y&xN!YsB0WZeTMJ zPAR2OoI0I|i?Fnw=k`YM>^U7b!lI$;N6Ru(|Mr|fL9FygJLDCq4$=71l~(38t;?{c0a*zMk4#mX`}vDSCHY7&}PZ?=R>i z>66~v)%_vr@Au|m_4u5-kI##@C_-PWTB0**hQbopJ~CjG_ANL`t|s(jVqFI-YL3ax zISbm+b1E>f()f3m?LFe0r;QxEry`LkAH?i@A4gFwI!nCLStvYNhdgkb4blYeDQ#~} z^E?b}XiE9|0oIXNC7;ttEsk3X>24sySFK)od($qig@Xs?za0qDdx?DaR-XG4CM3Q5 zzYD;BH%Nu&jklKyJRvC)A@$>Wf zqjyd}y9Tr!@N3=lo>sw7+vWSKOKeC{_mOez9(Fi9MUT%MAW+OmvAx!eN{Sw2z<1)w zb`ea2YhN&InD6Z}^Yf?x(%|P*7SBYrjG^4xlH#%B99GRSc5MKWlB8@SEVrkzupoVv ziM41`^H?Iy1pKn-N`+`!YESO-XgkFXWuCt&LX1z*2^Lax3?|q0y1|wIyD%4POZ5X1 z8#jS!e*-gQ*Wa81A= z8isvlhA}75Gp=NF)O}c{$2XNtv)#A%3Bh@#3q@>rXUt&v5fS`26XmpRIes{qROUHw z@Nc${mcZx3V>S5webw0AKH|31jvu(L73q>7ISWFi`zrd6mtK3h{cTQ)`XWathr23k3dV>{0a6 zXjEEaoV+vQStfexX8Q0WCD5Jf!{NSVUh-HkgnNhIKce>p;4mXKEzV4C(}BFgSOB7qOB!v$__IM&XiPWT^DX)5r{2##D%gZ zNUPKziJv!_&i2kTC}t~F>w0=yP0!MuI#QGOnj_|o1KU!EfZfDv($tfvC_d8RQL-%; zn~2TS12+FB(#4FL7t{E3-cadDn()>is=*#?5cNd9$F7YPR>j ztmo=h48M^03KXvQAjVGpRiI6cz!?&<8*Nr>DDV`8z0Ur4IPin!k*h`UbQ>OI1!X^+ z@%pKoHGJ!;4F8*ZI!JQZV4(*2;P`Q}ACXxD=Abb@G%k*#aE&%~HAh(;dyMx4lo{O0 zbvN7Kj=wdC>-+fjmGZOtOs6=4Qw7hcK`sC5@(HAoF&n~hEK|L?HZ^P?W71F4K5OlP zeuhRX)H!)t#fT>x^|Dt$m5X)D?go4nQ=ci59ESatgGcN-pVL#Y%n%?Y8;?6K6o^Nn z@4Hla-7C(TH6P!-!7TmXeT00C0#sL#|G^t{zYS>p_c{F>@UN+Qc;^+W49{-0RI6#g zvHKaGh8`<7V40Uwb};M%%5mAZHyZ2DI`W9F%__w=4DT2j^#XxX_z$JEb^I%NT;dX9 zhCrDA=~+yzl|Y#wMtwv^OSkjhCmpm-ish0Po@6G7TFoj!S_A#~@ao{z3UHIep5H0s z`42EIdk^s1qeW-WwK4rGt--H5#lapc*U*X+V{uyHsM7d>u| zku&L^Syp&$I{imRbA=0a@Q~s`eg2gQVzob)d8hK$Z;1(W>(A}X9drL`#L(@;WcBII zq>wzb%8ZRPq&a%N%z1@O%I}1pNK;s1LcFS;QP(23*8IQzJd&QQh|fgpXtKq9y~Ejs z+v6rW!BtD?rguZRU;_adqkd|*`m z;7JQ>NH)Ne<*uu>GZe0_925xuxNsk6nh+Hp*<&)ww|}WF-)4_Wn0Ki)90c*;oqSmH zeD)Mlg>@RpvW`+dywnAvICfPI1)R$UzqL2=JqJx`J$PeS0qdGvzK;kL?~+V(@%`Tg zZ(FhG^ppGlyYM;!fNQ7nqrIrJ6vlIg9?HV!_Sn}r&$IvFQUANp0E$#uxPn81h`4$q z7ZN;v-lZYoR#tmT8ss(YPEF5ctNGsT6}BS*-pvUW=Ih66Tk3W3^;5o<%Pf4+eb4*? zU1Exl?DaJk-}DWD?E3CPt8@$nwX7I2TubgsAC(Pd2%RVPrm{5HX0(}04*ty9uzus) zg%%GeGy#95%z^4ba>g%>h9>>xKHna1xZaNx> zY`uF%eod_C0mW*dCOVnPB|XA|WR_^J2HwoTBBreu?UuN|-U*T621m&GztD~#cE@dw zC5O=*H#eORFi`)jy1E2NjZWw>=HUI{WjDGtJlpvXM>euTAJDY{nTRaY(qDEDj=5hr z-mq$G>&!h`#bsOOo*HsD*e@Wmisn@#+@|EtXN5-07MCvEuz1_uT92=vmVG}Jcv>CS zq50(*K)jf@$f94(v3gjR@NluZMCy7?l3vvnn@DDicET{_$3ru0B4Mh+gzGVv`!qt` zB593J#wfrrFUzb`z~35|t#|S|8m+gQa%aHplOdDe^-Fg~+TcQPnK8xofK06yuy}%X zRjeO2`eW6MO~_QS<&!=G`DAy)+)RUXH{hYots~+IW}q2fttRd1M6jWGC@MHRNZcm3 z>hIJGE9e>0`Jt#@K;a}M{r`9#&m=fGd^Y{1k{$eB=wqy!(k;UhRu z&;E%{JCn~7D+wWTrE2N0uQ$dg(OJ32k;w60_r`AXNyZBCyy?fPXu;_J?feW z3KMWJc{GJ|ZR&35jFHI$4)WvXrB-w4xk_@SoZW2M^<4sGYs!r3fWsm#6dlkl?^ck) z>NwGSrjR~7W3y*Ta0F3}N23vut;XXaj!WxR4tpmT<99vtkPM@23mgs2RlnvtYkZnzw5sBQ31vfaYcE!)>vr>VN;zSYsb491 zJ%HD#Q%)g{X6CoCWUp!GE-cjY7Tnya_wlLn3oEt;m$UI(Cc|I5jS53DSeNVB4+TdRW}sL7gVe z;TjLrSxS<=sUCB%G8NXl4^6wRyJd$2m9Cu1dEfbqu?ZVZzIfQ#s}MH!r9Ip zbJIbIU?(-N61HP&qVU5@K|JDL6iE=hO)NPGhs#@~m0cyq0T4{-A}!0@<5Xjdg}J*% z3PHo?MOu~mum?e3gTscTqp$D{w$4}C>F#O|AFvP*rxYr0zr(#i#C6kJWVirhq zGk@{;c@uT#7aT>?AO@P|I8t8rXekUjeI(;4;A!(`K|A!xVYRLvY)m{?uFq=AyHWYc z!or>y17l3Cd3(1zmRz6&OFDuF1B>f>~W#6bZMpzJVwQ3j6WdFd;hv>;>590{=YH6X}fkQ#<{ms z!CHp+%{b%mx?JUVjWO;+agFmSeHeMRNB9<{^>w$n z2fu9xCHPg~S%4|Iyy5ut$3Tt~DGpmQBey)n7>7HpYti@gc^!uIJuXvQ&{E`fr5yp2 zn0g>NqtvMc^u;%*Jmu~us!h)1)8iB>IJ^>=dA*=E`3aI(SWqb^0`5l<45$w#*Ie-F zpO;l$L+YDnMl;Npex0Ng6{E7gjhUqzq#I7F*8#ET9{ui{JLV|o-cak_Yrw#6$pqTk zif@|?>bj5Jzm^!~FmI8}kzw;ktm*LU#6vY+!Ke`6~ zL!+->qJH|T3t^mR@D9WjnE~>?+pBN>HRipp>U;*JoFVq+`Pv0`Du^9^oTs^ev15LT zbdcnbMQ)}lP$df5W+SO9grq^4lD>@fSN)TgKt$ADNl;a>OiPD@y?ooeBD&AADyCS2 z8gEs`|F%SGsLV*T{3DDu0Coq*tgz}Zqm3rDSWaEgBGi>rt@H1~9Bp|7RWO$h9~G({ z0le*5X_{UiYv$#aCWe9ij}H6Pfu5tSSjh@(eyM4pY$iuy9yjdMfOi?Y9MJ;>tSkmA z#E4xMaw_Q{HjqVlt2I;=e`-NP0^$MutNE*mmuJ5Vq;gPwth277j(*)p_9~;$MK28M z+)ns5bM23u2&ApaB;kJ-?(J;-q0&An*nJ5Jkh$l>FQ~8R=4mi-G2ZW{rL^7^t*2=+ zU(vy*_i579Ajaf?{?PFK(zi+r)Cm1tZ8zIb=$BlwvUcYGDcv^Hre)1k7aXWVO);Cf zXEzmT!_pBRowMs$$FHj(w{opfT55T;h5s3KNp` z<;}N$p|S@)t@Eua)}-(7)w*39A9!}St14ZF4v382vFsg(TOCjQd|WQA41latwJ6Mk z1!y2Se|hRGS_}B@F5}PAHpo};YwGAA3Zvs}P((tJV7HjEHR~YhATD&NtGR1_E5awF z*;W}TJuvuq9OwKIB46_H>y??-aG{oxT8DW(O2r0OV}N^K9m>=wX3VaF#8<*z3cM!TuGNpj4qz;sJ-}__ofiT*fYlSp&`> zqkAAF1o!XgvJAp?ht-!tFH+zp={pyzaRH@AN}uwg8r!&&9H$CAruLE+;Jpu7l(iFV1wDmKmO$vy{KWIJ@Bx8 z(jo7rch>D23bNxpOi%gvVoiwQ{<9E6O7wyq!p`-rXFv%`&*+JrfNQ5>$nX2~W@3FC z%g+*}TXw3mUZ|(2IRCo{{AB!FsEKQwWKOjgJSP${&88B4-EuMP5{bK3+00iHiPx4@ z4>t=n8*>XA-+r;;NfGeMQELi!ds)ci)~!Ju?xo$$S_Qry!`pJa>1j7d zPVJ6ZwXQv|D4@IUni&O*sI;OD9uIt zWonwHiACy2TU!>K%cFsS5UP}gDQbMs=lw03?&T*E&k62AWv}96yE)Of)8O%%sRIha z$^3r_IvfeM*nJv3@un7Z*>hPcQgXq&soKaRZ~>`dB*N`$svK=cqJISb;}c6f=OWq@ zUiwOxyIJeR{1;=G{(R0G%(J^5?OP^jpv03kUdJR_>2#Avqiw`gDonC+fFr;+@qZW8 zn`Euo{Qk66C-^ba>nS8P*nUIiI#(I+qDX$`L0eBNr}OPA;`^qGnu=pe|7{#d?CU~P z^Dtw7f%idpU1BFpZ7*OIpKy{IDNf#HT(!};Uf(qPr-)6zZfoFD-Iz`*@kfx5)-Tq@ z`)%{~4=26ezRHlf{~b06l!cLqWH2bECnTb!XL-c}dGl#DG&?V_EjuuQV`GeU3wYspQ!bP;+LXHY_SGbI);#BSQy9v! zW{b4F{L1!~a5#3W`o9uR>9oZj&0GIGBG8RjuMA$0mVSPn$KBiFCBAlc)o5mLBPZi` z?X417!bQW&^=;@0tSmPp;Dnw=(n^TOgGgCDhu2+mMbrIapRrqusJa~uAKrq-v#>SgILv~CP6T_`QQxZ^6c2) z18Sz|PDz9(fjG(#uF@&S3GGU}7nDva_MZ`cB;|4?WxW+gzKH-n_@Q9q`kO7Q z)dAxReH=J0I$4{lyQKC;`&OPeR)lpM`!S)!XhCHPdtF|b;24`@P($X9n4?XCeWr-X z{1A}P_bbl`et1X;*|_-((-B)7O&Bs}4Rn7J`MyBiKx!aw!+yf}u<0*=SQp<74c>#C zKIx%o5`{C#_?~5EYV0bi(`b$Ps^$y@5*yg1Mo2Anuk(xWEdF&+?!lj36gc0sm2KjJ zypqJ7)$WzVbchQ%oI4jlYv2-OB>!mgmK|c9ug;&^D1IA%@bq_S8e>C?t&nAzk6b)E z50vw*c3ooS0kJ5C`brg8PxUm$^A1r|f0uvB(cRT5_v@tfNf#t3eLI*Nn`1erhf&;) zBhv}XcPQ6WtA9{M%zt|?6O3CznnQ52Y0IRggCqLh1$Wlv9{*W3f%vj+lx42A3S19W0lga5 zG*Qfr=|9@s%h$X%$CU*_gpocL^+9d1#;2J2!)*;90jWK41K%3MsEKke*lc+z>8`zS zY)!onOv+xJGj&p9&vHE9FQ}A~QP6KTy&*=uDvmPNjL%W*Z|G z3VF}?+rpwfT+VMex0T0o8_Hu%UDTPx1$damHFcn#ET#~)#~_>HC@hy_XH|Lr(~Jy@ zwFsp%eD_^2Q+e^IS-HR>vQR+`)M4)1oIcwO-9vD4>+)C8&N!+Mr3yB80?j zM^zb79d~cPl2nuI!_ec&lF6G0K4%C!b+D&7Qt-)jof4Iu^K>s|k4_`5d-N*5^RPSo z#$!g&(AR)4)k6Zj-)#M?f6x%aB|T*6Oom6F%Ts)!JAJMem+0iJu?SL|h+}ayC$&V3 zsE1l>=wPhjtH3-shbMWk~CH#134 zHfoa;E<2m(yGZwPV3;F&UB$IY){O^c3w z#5Zozx7H{20iGSf zNBk<2wEzAptP9~|ms!cN@tuZrFSWpAf<15?e2}orN^L-piV~KUrh{ORR4@mS9AHFi zPHWxgw`DeSp`;`dlf6ylziC_BP@>wO^M8vElPikqyh1dwS?dm6VXO;`V5Nbn;gsM$ zZvLV^aN@ami%Hv21Ro3_s$=*aw>1QFOIz^QIvFeG0Xuf6mT9>Ug?Y$BSh~HvCEKcN zdL&rNN3EK6H}~-OS_J_%YOry#^JE$@P~d&qKjl0>eQ-!)rX)4#Z*Um|8OB|kD(9fP zM(+y#)dH3p36O2?4tQskTVhqnZE@4Gw^kg>WNOEno4F>d%8r}d0AntQ-=f?rwe0^iy_Kd2j5-aRO4fTgp6=nm0w|y<|+L`w)Z*B(f z_WW1$s{6m^HzCKE5AU8|zHJ&|A#lO++a@}Fs@|4PE-f5*?63yBGdLWZ6DApaP;xKKwd8kE_H9^AaGWVVTO(s zBtFAqCO-0Y?t#r8SX?uH*ey0abw~EKw-pamjr-=0{Tu1_;GVAFz7xYHm7S4U^$J=k}jf6_5J= zE__T+O2hocL&OpLB{Tc5B{^&WwH;OI@-Iak_hDP#I`2txIjSZg`1@Xw^~mOXt6KV8!<0#%mi&UDAP71RwhGbTN0s%6+8w ziQ_8~6QQp4;+FUt809yCyaA+Y;&X;sgizo4T<-x=>pZ%fQ!JehUv9iHz&wM<{TW@a zj~n1t9eFF|$Nykrz>!EVX%T&Y?C#?J3$A~d(0@($MzZiYy1R6P7@7HU{mXRZmb@?X z*PfLKGF`Y7c!_JUk3Hy4j(=L?`Uuq15q`{HJEmWjmFHOvYZ@JGviq06?pWh=-SC=j zK3B%AkAM>(T%o$r+UIe(S0$v!%`55>al~|k>x*=|EXpapP1Rs6M%pjBhpTEeu62o8 zuFKnmn)vH}<71?(^14GAbrbRV;P(aI)wrY^G$vQchme@BIBw+U+SeRzm*2ei7Ri@f zc=b}X^#e_dJi0hRee(~Rncn}mrZH1?L9~7{$3$`9a}}=w?vTzbm+adXGBw~bByDOa z-!n9BJm1@H(waGIDl|@f7QlcCwUn^(HF}KLuG?=9-3iRIo;mMO^44_C4&9?a?G&uM z*zRqAM}63rm#r=B6BBbd^7Ohp7NGr+c59691s283virnOa6X(I_~o$FV(_2j3pZJI zWnClnwJb8E2T11-Y$gIhEbgI&&DA?RM$V-O4a>5D;_B^S|He*Vn;-p`XVsuw|H|m! z5%m%KOlBn`V8?Fe^IpeGR6gwvT8PO(Je->r#{I4xyj!(eU?#78X18XTaQxc{k{H?@ zFZ*`62O+lCKh-W&gZ)q=Zd4w@d25upZgIWQ*2*(`<9c>8HoCyL;eBZdz_$Acg=REc zZ1qodZXE1a{{iRIo>GRRsCrU;>pyBd`(3Hqem1g2mxkj8tu1z-Rd?Ib;}x;R*9IQf zif}-a8T_mZ9{x)0FIvbOz+9)y4ua;k$9i+uyYXr<%8&#&9Qpt|b+}VrEYj z?8Aa4Rq)I6EBAwRQbQ{37VPIuJpHtk&ewHrllu_JwN%ikDo#sA5X9BZ-B~D2pGwtV zgVnJNp$$atO9hW(9PAC(jqT_57)<<5fVTaL8QHa|9P=I2Sld97?9?vv3?1vm3)&5? z`Y>#n{h&q=m!nHe)_-9bCSAC#4i^ne^umHX<&9p+7w7FRSj75#F&Va%3&JOzw^s_r515WQqQj^hM zR$+E!524nPX2f~FBxpvN_*wp~g^j<3?Gi43&UyVT5~G#9yeQX@$8rO?SO^C{ zG{rBz*H~v|ZlJ)XYBIaCN(1R2ralin+o!Y+vc$7`3UjwofnMTD+GMBkUtuMR%EIDK zH;BBPUgpk<2(>(Ksz9ZXHWnV5Djq_37U7NrA6I9bS#agsAm+>(_T7JaeL5_Z);%~W zukHfP_^cDdwnBAwaHZ@z%2HF7ua4t(M)eH72c@!XNmXrYSk-w}8LsjD@nNxvnFLM< zO(K`~CnP$%Kc$!jZxk|}eQd5yzBCw`ouq>QaX4l>rEmlb8rO0@l?QrIy^yNmvy^zB zfcGASAoA|K)$0=dvx2kiivL|Go!6@{LLJV}JxDXsID?V(j+l>tV4U0fe=90*g~hcs`?n=a^_bp?1gHu*wDb90YjwWQG~RX4CFV3eFAs0X^kc1n z{OC6>sfH{&j`y^El9RZSn2XS~H40G8YieHkz4w^s8&!^^^aw9UFb81y1DS#=bZ>mm z9(i+P4VE;fgfG1!r*zZ{8?2S`CamHj7$Mnj{$V+x~~vq=ysPIft5SfV3|n)3aJQf)P|WSF_{EoWM{_(TaH z{Sz_JyK01%eE8);?D+amp^m9LP{Rw-M}p6~J(ATY`^TerL>-_0{7@%~&3b0F*U_=m zq3NCeqT$RI7)-`D1lL-XvPN9wcdAh3Xluy?q~`$=wt4{meexCjW50`twHjtFx$}qSxIV)Dkjd zUy%Tfi^LKy%tl_>J*A}EOzH@^XXEEy6e?3J@kyk-d*9Kpk2*Vfpv%kf_~#U@7Acj* z`S6ape#DDbf4fm&cYB#MNMM$2*%h+x|159A3W;w{v%Yb0JGAH>_hsa*uJmJBsx=9p z4Cak+^@;ALPndzQQSqw>{SNXoNZm8snG)pnIfrIqUYEIf*CV5=dF8hE{ld^UtnwFN zU*1UMn|o8rK)dJMmI6s`*{f?-rGmxkljl=k^8pq2H$|MCxm~OG*P>GAh{m$l0}yum)kx)l7I?^6l@j&883*D~`EZ#o>>v2v;He?n@vH`S5Wg%- zO%G>MwF41S`4E^Z)L>$wQwdE2n4CH&7#bCm@jx_?v04Dha=*U0KF)s8@Hp8TmNn|r z9ClhF=+bRQ4f5jY(P7TG^cw{s)HT=pgB$mFlf3VW3Ob8YBEwRDL{KHIlfW+EIY8t5 zlv;2qj2Yq11@{a2;Y{{C*8oQ5-85JcFRG~boM*a5PD_lOzhM9MdJ%c$5pciEIa7Nx z%~ZgmJ7H#KAcD0s*iixqHc4Ov5dLH2)6ZCj7`mQi0rXFomlJaL%wIY*z2xC_{rs8t zx=v#3nh9HB0FkV6+r}~j8pED!Q)z+KRsYmR668OA8&oExvWJBF*&kZx8O}cIN*_{W zXp=3h)z2EEmt0qu9^#~^G=8xznr@h`L`ZWC$a@T_lu1t{twBqmc?o~i~OIINy)?B}>ePXwEHQu$c@ZbJu zf4(1%d;;!)(@FFT@t>01`rw>9m^%rltF9d%sgQg4&cX#F^2oCARQGMFW>0%~f1iuQ zv;aYa?xn)MGH;)+-Gak*=&QEYkohp+VDU%c%*G&TaIaV*({&lX>qOaCPT6frn+5Qa zGOV6~Z)E6yOAI$p$z0Gwt^&onv2j$Q7t64+r#dqeyINbvNit#=3;8)6;T7-Y{Is^L z{P+7iUcSB~@2eE}nf(^OV`Czd7d@Se6w?#E?5T=s<`ttD+sebz3AfML{4V>=l!%_=T!Ykb64uAD zo~nN}m8h)j6xC@d9^Auuy(GdX5qL`;{|LT66akWZu<=vluPF<&>L~r^)tb=U0$3@<`hie{J9xo}12J|EC$+*EX;&)eJXCp1Jwse77d(tAZ9P=8 zzmGAGmL8ig%JuPBHTDNEedQba*r>e9bNtpij0XakOn3*AU+>Lii z8V%p0&8Gf9ggvuP>Y_0hf2}kfN7F^s;dbhnQDOb((v+AStjD2hNtk?_cc*jp@`|m4 zkxRHsxqyI0OXI`cn>onQ=|6|2Cx$=?i;A3|>|JSznlJs{Up88CK0LYIr0f&GRr~H_ zba6gvLXU}Js(Am(bl;AkVrg;=!+IXw=1NkiM3gnLHOi;+&Z*cujVax9_Qv<1F=2hm zFZ81bRwK1Yw@J})>)u0;*}vR)pBa|p(;c%P?JzHX_q59q@{sa~)wimc;HU`Xm$EcV zc9ivTSXf(TFz&@n=xgjmrMm>nt-i?{NrW5D90uw?F%G0;1gTTD4%%&-L<}9IG8{cE8L_e@S60wImBf_lja2Q?>g0k&b6f444t^ zdTF7p*BpBtWqz_QIdwc$_5u1jvWlxSFrx89zG{_mC5}Hs_!BWJIv9S`8^ z=Iwv{QhTEoi>t&fgbO@s!%gn(iX{wbT7>*Lbw*a%8M*l$e)W|HMqQ%Zp%p30MREKQ z30jKX0^uHn&vr8ziKI~uizzwMBu$T`tpE+dt(ALd1OQb|{w-3_XY;aZy2+(MrH9NB zPA@ilLhF*22Yc|$G&7J09IW0p{*a{~iU1g?<2;3VssPs>)hJy^gdmTN0_zVX7 zn`h>kmwqcgVWGJVwU#t=KjLdA56QkY%D+&4Oet<{hK|u%G}AD~!zONsx@=@Hnex#r z(detTYDdEv$Dc?dIs)Wo&-ccKwf{*UsWJb-wBRXMY@yhIIxTQrR^MJw!uYxgurmK1 zr5(jzA|1GXg_jmi*I$&X*wKk4k8?e#{wn;6^ee$@(bmi`K2eEmvnd-~duUNhGopD? z;%l$;kB+@$wRg~C<3I>YI7{0@TCb&3^Y*KlW1bCtFn@!dfcy~xpoXGuyZEX>`e`(R z@^$^w`Pkv(JU~2%MA+90S{TGk1=!Qq&UuB*PyldcaxHcZdsdD$F{A1n%T;u9#$mpy^w z_T0CtVW9ED)Ux21kQ8Lp*W36Vx7h$e2SH|fOG2};3Pt6n?)4H>yb2`O8mW(KUeNnT zP$Nsk`Cqe2k#4cx^Zm1Fo|frl>KMc;WqjL*o_Bd@+#jLliNk>}f}H?h=mYSzgJw`X z<}O9;<+#O+wnk5E0Y?={anP}u-+<8DG~ z_EF9_-KdswnFT$7&gBMdr-SS|acs?6&u|C865H5JDBMYksQ53HK4!$kfS-6n6?rXb=*g#&WT%&QDa zeKX3kzeR(cO?54P5jb8~o2OwvZI?+In`chfz9kiLE62+NbUp$seXw03e&i$~#rx;? zU2Jn0piE6O3`V-E$UQM3%1Jy-gv^jWr5q2<3|fA2|L?1hc5{AW3uga(4b}j3ewrb~ zogj^Q+9NXEvEK0W`OLI!YdjszH7jk*lY4HXCB`Hpcl}M%S%M^p&+<|sHJ144DHXm} zU4^WD)tK_lrq~FE{ zkhp@`)810&NGzNP5Uy@d%?;Q{Viac5NtuNW;Q{3^_Y;=6y=Inc?g5CF!AG;+vSkmE zduFn`X-XpR)?hKbK?<96eH!O8GOG&Q4}=ZU?q4~G;uzDlbuc!pzVYK{{pq^k&-Yem zt7n(ainaL2!xlj7q49h|hml&c7O!)iCOXwEPE%+BC>Yuxg4(%48(AT?oT^Ri=t#C2 z?0v!3{H;U1?V)Ucz8)GGIxCyjBRFodmwT`acy=$(M{0+fUOHz$)@-u_-v@F zUy4|tosUy2(u(%v7!HZ@dqiAg3(hh#$Yw1^?B<%O=7{JhwNNe5eZ6_ppv(Iv+;(u2 zH^D^i%Z}?i)MQAvG+WXR@sMUHXE+=(nZNiceB+ayj)3YHDVLlL&#Vp$8zzjz#l8GZ zK8uqw1k_T{Vmc#3dnGo?GhC#^H)5>(z&-W1a8%*!h zl*UHXdvqKZ&owC+0BKQ4yGwC6I)pfLs#&$eqp)@FaSbgnn5KGZY@g9Jhx*zrK9j5^ z(bU6d;C74>?c!M;jSn0f+oQ1H`57-L*UY%{b9z5$EDFSq;rvQO>MY^9j0 zMu}EWB>YJmg)Zt3Qgvg@dMNSAq|XuKkAebuq?hv(j-_FWN`RLf6Ow6Ix#Tf!^V;Nq zO9t7pMA9V7ah4^n7m8)X6Ndsxxij*U40nUXBnPyHb4TSpu;B&5WTfU?N88fjk2xxY zsI4)1>`uKzGUIGH*-VJ=Oifj5uL+KDd!w5b!6f_V)YEjRg2nqyTiWH|)UiU-DA^wK zBau~0oIj2AEb`X>E*MxvEU=I|hRQA*lLtwu$=`lU`G?pPq~Ab~+`ns{OWUL(1i-tK zryBFhB`$S)PN(;Ax1}}3H_4WtpE@cP<-A{n74#Y5E)3CarS>KQl*O0e`W=K-i(2k9 zeh*kJBNc_r_HWgH7J}-=9nB zK5{PNYZ+g^mZo(eTGE=Ab~Dq?3(0?(AuM@T8|9@%*PcT?81_CnH}a?Bg44atC#`;- z6xFRX0Ij`(5v3MORce#a8c-Fx2T6*uPI2g=m^>nVRd2;_IdB5_}i`ElNT^PXX zVTZWgX>P-H-bZ-Li>ST$jsNqS)MA6??*Gv07gTKYUuzblXttDKzm3n6xE0q=1yRu! zHofn#PMs!iRa#8SmcZ-lLvd%QDqD&*ykNksmIWi<&cUN?&|j%Z#h6&E1s}) zUPcjdQPiB3HMHc#B-JoZOC)*pH(+fOti|$9^r^wv1ocA$@$>dYTE*Pw^oH5t9NpO~ zd#J%1-<0ezkh7wwe#_4;K^1YB1?IRiON~r~(PR|DtTNZ}o2tLx`25WDc_cs{5>mrA zR1DfYirLu>u5gUGCdxLd^y}}5L5Y8o)|byuMSQ;$-wUrf&Gt?I$3!JKY0{Xf$+9zt zy0Eo6!n;yEj_8GeH3fRb)sUPUSD*0`bM9#s>_H)|e~^Cos;x+mf~2s0 zLh#k+OHI!`TPM#&5lRqB2@E05EL+GFtu0&`yE!OiY1Bvxt? zySuyb3GXiJwYRq{CBN@#sxxuprkhE1$6P54=H8k0%%$!5Wz}`I5Bs3HXVqpEQCPEY zcZ@R)C8Wf7=T>at`U=`um+3cc;nP`aTu` zX5vWUd?0->Y+WoB}k-SWaPeMc)y)$PC%t6|KI3+mD4@5z`O`n#EEw1VoShE zdoL2Zw3ct^$J|%FPFoA;#kWfA&JopvY(@_v(YE5X$lxUupw^8;!&P%QZ;uJamze0J z^ZzKtd%Y;QtcWY0nEorG#|t0vUp$aZF*G&%rkJFo`D4A_q5(C}osi=2vO)(HW;1G} zKB|Ih7M)5<3#Q5RMbv(ak|6x(WI0aqr==9|S(P1~+_pGeyzIviDD})2`%TI+y1>27 zG;GL79gp7!ZYc^Pn#_cn|o>#s9$8Qzl&vlanCs} zt!8-hjUrm4O`RkvBw=_x6^Ic+zgQ6(6E<6RQ7u`yb+OGmDD06Z7z}Zn#+jN}OcJwT z$U3oC`3?&~ZLQI-Y_-0fo-;6>-d+}as|sTD!i-ij{uWE!UB||4YUb)8gD%epzJYj8 z7>Q`PavbhGxpvQ>tB%GAKMrXzlP~y)R+^X=p8%aIg6BMj9CQ$WniR7Aq?b@S+a$>f z+m$`C=x%%5(Bgyp!L_-3#}~h)_irp}!XLu}xO6kJ5)Cynw+CjYYaM5rz;Z*Lexric zI-Y_>pqQu-#3W&L+hw|Tkw3e&>Yej$+QwssG=HR>8SJ0h9?SE!)!@FI9Nj@s%>Ijk zYS3_A-t`!cbFAJ#rGvr5^=nKri@?nU9>>392jBgBs!o;Zu^S!0l2hO>fgC;vv}jst zkMg7GlN6$7kwoytU)@5}`tPSy91KmSHmB?Mn}r-_c#zjO29|qGWbUdw#P|WX%ATM| zI5(iT)=f169cU()}^CF}g``5DO(N0&=B&lsvrN}Ihs!tdr_<5Ymk;@zZCIseG z#O{WsGzhjM+dCND%kjy`TniVOQ=wDCPLtDnnCT~9B?$n0?Rg^8gK9cqMr!tY$F0mS zXRCDXVz#dahjVGSf!eN*0j7dY_|FOp5E1}*N?O+b4oIvu`@l`;es`Ig<66{&uJVhY1IRqNB-!Km$H(L^3g!Yx@1eRF`_Z*-TJ^$9XnT{ddw#x=7$ zTurb=P8gMt+b#)ZI%V4N<`d{2n+=lOAoC>2$-GWy1BEPTVtSgj=|Px;m}l5O(?^%p z-L8P@h?XI4yj8}@_WF|l$I)5%HP!!Z91|%gNJ%Q)AsxakN=tW(NOuny?3Qk%b(EBJ zZ;VD5Atlls8`8Cb;DoXJIlt#G*j|HkzUO>C*Y$qSrSQhq=}HvHa4T7y4f4$8Wu#mr zD)ROzk+<~Vjr=hd2s@HCMB?<&nC5~vrtp*O0HmfIL*tU7f~_ieSu%_0;c}Hdf;XuEGeN0bM7iYGQjwk*3(34-TngOK zd`UeV-Hx!r{E_ZqJLgDLN5bLA`_7K0!=JhGcL~pyLn1Ycr?*oIF#)~WamcpT6nc&+ zM53a{=$Fnr*{ar@JX_hyExXnVF_Vp-uMIfKtmfP%?s`)?`Te8^-`G_B1naTw|8f6(lW-<{oIub{A%g|wE zPy`nw(EAZY3b@<|00_!EHsaRw`#Hjk7lS7So>iz?aP>*JP}fhZtit7K;;4l~I>pLO z>4>s?N5e#K%b!^96(U*RwH&y0$?{xJFTNMf6D25|)$2S{e-gpteihSQH*xK>5xDxS zkXdKljn7rF)j|=KguPaGw|Qkve;~ZLvE0#BLsKdse(V0khgMCF_nDD(jVI|Skiku~ zqTNl)H96jD6PZ#te~3=4z$nM}$aZx#PFoq`oKb7RukatX7Jna`q5Q;=i7R?Ildb(_ zz2tYozAt{{w@SQZ8o90YqMr5}<}BIPD0ZxBn2x1abi&a#zk6x&meJ!}b!q`k)hgZ0 z8uIk78N2%19iHqN_?rQXG`e?U4heMwVndipgRFc9hNyw*eAg-&Ifb@Pxv>mL6qMZx?A)g$&^b*|s98c46JAaKT7dBTNv(t%sbz!}@Ce>Wt93V8 z?Q~Cj-}@!(P_6D6@*pSy2#CK50E%t`paE7MvSUf0HHy6Cc(i}!icB8fG~(nm?|WEu zH}|$OJzt?<`F|v~$Olu_+WuS%lq*p(K$5+YeVEmKQvlD5QIA!mLW{Dy9d1G&frFGm z_|X-Ejw!{uFhgzss(AQVff7dem2SomDKgvHh)cqHQYpxw&ha1mJ-H#TXA z!H$whjW^T5%T&7f>?OEw+Gtzl4Vf)`1fNZhiZWV^RQCne4%6Vr^s}{f+>kQMy6I5) zkr!Pqin2rEWBgl9j9~3MaeW3gX3VC|rCQm128LOH+Ab@^Azb7H)(unU#3=S&TPc^v zH1sV(c9i;I6{&RvV|ON`4<_`%mOfcUTyqLPmam<|pK%eHk#i0iXP7e!p$zxycJF9< zKVi7^WQbpG3SGWS-myo?^G{EaDSffG({o&q3gIsSUV0Hu83lc~0(RB|w0D9QO)WAi z3ud_8emzP&a=;*IO(#$@=0|&trPPmN^43EGx+NI*OrbWfDSU&{))PI67cA=l#R&&6 zM$i!?x@YWLapR`2x`m_vNGcC3yIgUP4QDTGEJ}L276>`1gNVE_;YW-xW?^YTL4R*q z#D~(qlYPpqy&oWCH4}AUXI-G6l(!FSO%OcTpa5`lH4gT*ORP$NQ*$v2o<_P1Np5Ep zI@;GttlD~Q2L4~yELH_p)pt=zvVL`>WKN5BOBvf1y~~UEp;k+y}QL}=969-?uBlWd>s$7j13L_yz@+JPmk9{yK;?Ym7c6A2IcHr zUw*(#NVejH^sNSkHwMC=@Asg*$*WgZYBQeqk$wB{Xdr4#>&6{8FA`l1WR5bo$i9RZ zIpd45td3^sTAD&dj07f%2Yo)YgwA*$<6;t8I=oe7#H<~a;w$JTMHQSqK>)@uI2p?( zGgoF8m+^{b9~i`aEo#80TA3eL2>kK1r~92_8K954`$wDQwzh1Z)RpKp5XtY;ggTz4 zDc?qbqI+&3@knpXBsD=5uMkq9oEX8F26C~rizD)Ztt@AOQ^`br`_LRPr8ZA*3vF33 z&-nV~To&7#o!@8d;TvHy8Jy*JlGPj&AKA0Vj_52S^c<5b_>6+g;MIMS@CCD~8`8eE z+U8WfLj6HZm41UAh{;@wj%!PPCZK|j+|?_qoUXel5C9o|5yf++{3!AUqJzu!2>$%V z6^L7l4E2hJr_BI6d6(q;==)f3(6diZKP6yHNKflG)sK`1*kk`#)-5E626Vc=a4?_W zc!N)nnn?NH3ZD{!F^_nA980;JiVB|uI>)ZB+enAp>postmBdcaKGJ89dIp8XWjKD2uwkrP+Wd8cDqb{!2C#VZd0?J$^6F zFmlW?QqbXE+5mF8^hW~b(AS%-INS?nmhfhN#`2KK45x|PRmG9UDT%rEkYgK?w!Nv$ zA#zP~UCg}k0qOMz9lX&ODSkUAV|@*f^FiU8*iV0+7bqRL^5#%H$<(t-C`HD;B>oG9 z_a>FhHz={+6rnntV;`nqfLUm2n4qS|ues%ge%Qrv-5N13tioclLeDMtlWNHO^AGK- zljN^mUyqg&|uF!mEBSWEIDjZTh3HzCdlOmlo_`hxoUTxa%#*DY&+V61Rw@FL2`Q-pW^^RKk=GY|NoFC}&8e8_s+`l{MXq0$KIV)?m(C2Oturvo&ODFUnphf zIUG%E(!Uh0@fXNnX#N${epYKqn&h<1g-@xbhCeeWD1UkVjpp;vJNu8)Ei5M}2#PsH zt?=PIwPQ$EI7U?1Vkf<%Y3k{?Z%w=GH8VZ4u~?tWU&0=fg?N6bcWgQ6Ce)rv#5!r2Y6#|r}?JNPImT%qY~-7&%J?w@UuqriBs z79QOEB@T?`QQ7EJ`-gS-S;9Z}gl8I#2mrB{3BT33 zcUa>l|H6CyWnwe=`L=8|iPN<-JFev}KV-IpwbKwkPrU;Qlns)G*QIi%uZBji7P*$+ z+^w5yEF^g*Z{czDJ~`%LzxvsSAlVn{C|2oRy_+w}PPlLk=#l$RYl8I@=cB`5{nZBy z$Mg^CoP<4&-=|b)r)@|(3TG>jFc+r936%gmmFT3~)34BVG~lIQ0ew2pB^V#vPL4G5 zWfbDe8?j9`zQ8U>#srIP3qs>@=7rz@MU9WA3Tl5h!WAbBFY3-=2TE z&4IpkBAP6 zz9_%-cb^pD8cP_OdZUqhPN`@T`zYHybZ=Bq%i!s^wXmU%jiJtN=B>c!(6*mF)Kmge zt#j{N=HS;aBsD8hB-Uq3A{CAgd%r@%kPmnFr;>K!Pq*FP3DcEgA*!jh;Hi(?{D z`gI9e0;X^W`Ke;vh#wgl5!3K?{u#?3z8$^W*7srtofpBi(h~Qy3fXTNv6^g&ONv$3 zF=>I8einrE>B8G{TS_0g&O#{zJR#Jso7zt8_fL&lsYk2#8d1BWF9UhR;;BstjpH@j znee8R#q5_e5YA4VQ`EI1UJFWkUH=m(2B-*A5u*ic|>tE7Pw`rubq@Z>1Va33eD}Vvjv0J*vT} zZS^q_r9UlMf#dY!FzX*G_BsLlQ=Z{qJ3`O)zt3UCw+z<$4)O$nl3c;*#HD z&Bvt_AA088I3XZXfpJx!+ChK)BB5+Y2IgL8`cgL2!pfUSBT0IR6JfWT5LG6GdVq~@CLdYQ~sgj+Sq5L!i~!Qrovfx{PF&BcJ|o!dBV{l z)Um?O(mnL{L0W(%>J9E;jY#zZ%=+^2vSLGt8$EJMZ`SjTucSm@AbqJ9y}!R#>mMG4 zm`%$kG^z!ZHGD3!A)ebKkK?F5zP5k!Hu8H~8%yI6ZIIIvk5S>a2$<{FTvqtyZPj4M(B6#-J<$u=RH3ACEWs*&Q*)x<|7>@WwkC`hVmh%LO>wgF&ShWP;xir;Q z5g%Rx+&JduALiELOI9?s!vG6&2RKn~Q(mpcGmw7d6I`_N#ZMa6WOW-#nCX`Z()a*G zeonG$T<*V^K>5*TY9Q$^m_LGZYx;HhF8;J|Ky=)Pb5UOUZ z^FX(ib}BR}SKqv+t>aI;qFSSkt6QKT4?WD%#m>1WYv2GWpA8p8K9_(>;nMEBReaIk z3*$f9kR zq01i--TzwT zk_~rVzy3#Jc+&(drCz9Mz&j6HX9&F2uJYY0>y|6R{Yxcl_)=BJ!rzUN41q8^xdHDx zYV6*lwzqCzlA@1+7PLKfcmT?#$chFE7KcOh9i;I@4r`rFJiM1=@2q@f%{{bn7Gh!l z&hl={>ii$3xsh#JP&fqp;$_dX*W)TvPVrR!=@8w`bW#iAr&Yb~f!(t{nZGgFfjyDzRk+y`~ z-2VDOG|o_P?G`pDw(UbR6!thgu{y!AxzsL5|h_aA(0lmHPgO9C-hU~IN zTUJ>ixf1nloeX&bK9`S%QL*l5flc>$tpb5I2*d2!8>8r7Uvs%N!g~HA>G&0}8{(-B zbIkJTVvQTwP;Mt1SE}1xwd{I%SXO+rVl8$O48z`QE7B&GG~s#W0gy+{N`I zIoMZ3QOet)-aSZ6Xxa8NzzapExV?`u_{=mnPV@5lo4a3)<0h&8`Vr}{N--F#Pm0_a zJi+ljU{<}TSxLed&w8X3wgjSA=DMZ~0vRz(`5hirPs6UmtjtgDFMWyT;Y_+zS-7MG ze)AWuCF0>g@LX&5^c}MO(VHvpn1IM!`duL=ac}es4~YaN=PZQ;IkUKD<`CSq5rpFA zLj(x#j56y5E~4XC7|=4q5Nu*MN%HiG>(zR;e}(xT8!eQ~M!Wo=^?MHqHeWErx7uTd zo1*$4z3aJn>in$QB=0=ld0;WrB1PzHz2h)J)sEew8cYDlSH2cO^f8tGN{~0tlkW+= z5bQV7Ej!v3v^iJX;2&IiQ~lQMU2!(H$AaaBoE!ipf0i&{9F@iCsN*15ozYdFZHmMS}YwW}^< zy>JxAHo4@!8IC&6kioJxqg$S;6KCcggjX|o&8j^4;H)ZlH;1Fks1KI&Asm~wRiB2@ zqjN2!0N@Chzi<{myVS!0lqfwtQ8;SQmaSu|PU;>aroI+_I5hLCwWB+RODyiS%cb_y zh6D1?fkI9%QEj2CEwQ|u)hk6@u07VhAinc3wJ(`|@OD_DUrUe&(I3Yk(6`eb(Ad^R z+Z0f}^GWsx?UvEXt3Or4)S6RnwE{mgOk8Kb&S~fh7|dA{%OkiU+&9_EoAp;hMKnYT ze4GmY)wQj5g%@rCCHmNUeV@rJt-;e1Fyjq2^X4kb58R%6bTChUzE=G@r%-tM8O$o& zgQy5>GMYg{X&*LNx+H)QH!VSW9*}w4J?yLG@>S$nyTHT8;?6HvMfFo{3|Gt=-MJ*J z4whMOMkoCm1zI${`rGU7SS9|lbYE7z-iKY3{J$mTWqYRXyr););w0S!97hW~;41tF zYkfZ?xRlw!>u~3P3jv1X^Vcx7vVE&^KC>km~PP7(O?5=aMq0jC+n&g%gMgSRfZ z%eH9{QOGs(#q7zuOnvj8ZeoL#>s;#|#AiM4Gh~Sr;^_Q8v5jY`Pij{LbRQLKmFqdj zqt4r^B`fD3Q&pPMrQ{|d)+VJ)KloolxqNMe{v#p5;oW=&QJ{DfW-DRP=-ce@)OI$% z{HLx6lehq1{Q&`A|GK2n8@M}?e|C)1)Wlcf0=k@u{u2i%#!r_zhPT2mVi2c8pqL2y zW-N4AfkJSlK;+Q$r(%0%{|3$5uIZ&f#^d~u{aOuRyPboY|I(-^rp?|uVLCcY=TyT zZC`TS+lALP9RIRk9ssuqb1S{Oz4S_CRz=JZfu0#rZ^@c8in4W%t|?E^d_78rpr3k` zHg+!9VZ{VzjPP^0ukhxC*osRB%3v8g?#x|np@Ct+39-yRH6!nPW^{B+K8CrHjn!q& zvQlI=Q(B&9QaYl(?0LUr$A{{T;)jhV_IJ~Zd0!>+V`rOcp8T6-%#X%rvZp)AzM=P4 zr%0`E3#oH`8=kEgPTscREnq%)M0CS5V2X~$!m%e1Wu2q2!LRjZ|&B@5)^w#8aw4F!Hhl+&8mk1#S&QS%a|^cVae))@@#3Y z9(@hJM@o=Z2>~na?!m4A!u{w+k!S0o&FX%$)|(=2u;66|)-Iv`NA~^dD^OxVg()^T z{&J5f{DIIU=IbE!EzU@#;#b>DMSIFrbOOKH>V|gSufGxDFRxwtb$vTv+g>8LU-?{! zWJKuThLz;p3?WW@Otv=)KLqhde+?*3*4KVwc6%$af6FJ+_&}SqU>ggWM$K6_M@&D; z7RX2NnWUHxxnE87;;pU)3622pex67NA;V{a&rqT3yf{)|qHqgeYNDO=mMhi*p<|}j z-II8-;A6k5!#dbPqNGCBz=7Ysw%(7RZ|uOP^@rsN0+^Xso~*T&YhC(!#rscMb4TD) zrjlXdM#jmnn_k@&)BbAJ%F!O|;t1EhX&Jijo&D1OyiZFI_7 z^}3BK1@b8$-s>{76L^o}-qz+#ZD5?EMFhvbbd|&QAj|D74P%<-I^5~fMEGIg7%xMXqM3Qp-V z>7Q$^rycR@c{tt_;HWN!VNsG{P8yKaBV1gw;=h2=0(rzKu5U0eMYWJJ}7}FNJ zqhKzQes|dM7!g~nyyDsWYz1=~P0+-wDVU@UMldr?oTRZXBhSaoOpEBj-;J#(L zGVR5x(RY+*^1o%V7K+!e_&Gc319ust5}+P z%qqg|K6ZvcQ5N+&gMU-~(?;8dDPqf`>xLOE{mYXE(bLJ?AGQQ&?HPS}EDS^)&6sUt ztba%{o2=XG76{Px8bF=XmJPSmaJ1|cL@sbP;Z^a$)bct+2%j7Am3sj$I3%_oY8HPg z!hvwWNM%UR>=y3uo$$^-ZJ%k-wnfDJsJjyDu|6P&`we}gPN{zwVx5*3Op^90qpfcX zC(*A=3h#|yCto1QmAD0U{AyjeGgL&XGjO(SQ(sCOrs%k-1GFsMwXMeT!osC5t!$LE ztt>=Wh%~pGmPa`9ita*P(-M>^5sttRE+r0DOWbq!juwuH)3KkzpY}ra1smOF?C6{|pE+KDQa5N6rLLtQ+;RQ3ccqu@ zlBDwP&UDE*Q>JT&J2-kJIV$ynQ&=*NW{x?RoX!Qw0`Dg`w`qUr6(dOC!s7r~ArSl; zlF>(1L(K5ycNeaN5#KY^8h;kMCvePN#0AP|dWKhOO8x#Adw#*60%z_Y6pF$?+3-mH z1;pVb4S2z%eZK2uP0d8JvxU<~O`cz>A5`iJ3qUZ_^&j-9vXPYQimd-xP^ITKD764vu$#SWkNzC05meyA3vlSc0|46p5!&Db@bK~c#ROOZ0nKNM638TYL4Nf(FsvEiFHFIv0 z>D|4dIKdRzuoyq`zc#kdATLbo9@y`pcq&-boK<8Je--OW9)^*1xar4es=+G8%b$GB zv}WvJ_SOSAkW}eRP5*tKPN;oE~S5=NX9*^8;xWK z4MVX8%8Um&UnkL%(VmLJJA$BND79|KP-QSjmb(tml0#FZ;fl|K#Cm^BmL$nT<)=M@ zdxhLH$MCpD+jP$<2JDOads1Acvhv!qLfANTE-7$9)>3YxLq}cNwvZLTVh(lZsBbE%SZT3%2ES zJL*)`HCG%jp$QQj;K^b6WEe78QN11AK&eW9<*gFG~bFn0B za58Wf?e>k>3-vy%C&=-XUM_OzG1!fY3ZDk-rA!cLz@gK8Qi6HEQ=ecGmkOu(z21p+ zU1HTGr+(YMz?yvk5Cby6j(bovc_Bg+4AMr zc!%BZuC}nOSzU7@a?Q~Uk(IPd?3eXD$o&cY8-lj<5*ZPSr-C(oPpD*=KIhmMs?>@% zqsDT|h&8!Gcvwr--Bm}krRk-P1n)!q2MjWX$h!SE;<0F5)Oba59p!zy9Ber`V~1{S zzN>(pMSsPI{^_qr)sxF|Gg{X0YAwaD8)-_4hj!E_&*J*r1HXb*b^ya_gh1gcDo{wg z1?U?Pj8+pGM7(V2X$}qhTe1I|&hmX&-u;MWEsFCPU+3zW^*HL1D^-;=gB6x^iip0q zVcrSeHN+pLJT;GHcVpcVVnK%;2#W54=STuxP$ zP^n;cgOHj)Evr_WHLtLIK(Ur=V%@CAUoQq+CaG2qZz8yqorUf3-6lpQ#?7w6l5DN) zZS9O6$IsfZ^CE6_trUn=bN-=j4DA+UuNpoZhZ+E+TG!GEzQO2*Tdyc{8rM{BTjA3T zn_fPB?9wEu?OU;AQ{F;`2>TaFqhiXeA&eH4?9IzumTtn8+D!#eNiSp0R{GberX(9c zE8m>k0m95|AVtmRldQGIumrA;>uwAu7?~1WtboTz2mj!%3Nv zNv&@`&h?V#pL5GS({jTt0~mL#juY4cnW!Q3E>-4+ZWHqK>WR;vhd{U1NnJe=2;Ozs zP_kJ>-K=?B%Z-amR>YYf{RsG5p8M;!fJtC?R(QT6la7e1S|I0HHkP2Xm7>+2OY`nO zk~we6Gq>!f>|zy>9GXIADh4a+qxMswAnAZF>zoW$g_0o+E)`6M_+c~vZn+;ZqI7o} zfT`UMr@)X7c}jcwxDeT9MBe48Vq2?(*Vfy;CDR}5q zZVPI>0~B^kNrQIHh`2$8UUqQNKoOEXSxHcMI0Yh8X$QPpEy|OAurk4!wCD8qD^r^9 z-ItjOD7v?5rA**5TL>~^%HA$0{Oss(rv&1<>8WRqQ;t&%uRoMwuuN^JBDmvc{KG2O zmHvu2MGa;wsy?nwLcEQn(D;&gFEGU+QI;d+U8JP44g0@#q;<*;;euN&5VK(XZWY7~ ziOufqbGcwA_h`mC*3H*>R)G_*wOhN}aWEaesel5N<+E_5$(Qu7T573@?X~Zz?E8}s z2y9jTi!2}(-_$^ub642FMdS0~9bFM)G08mt(vRDV;Gr@f3)Lq!#y;*VTIA(!DNCXl zc9yQUeZJg^xzV!fq#_KP`MC^7XGbk}cMW?S6AS{@m1PGi&jD@Zmj-^FGXtF=Dz}aF zwIu>|lG;svrvCI-*v`t3d~z?#&P=9dn$f%>CvfH$#jXnq%CQ{?TGZS13s$Q--sEzp ze1jREpS=4xC<(ej3Paz&u)}1T0hK+kILr+xnsbkSs;6ix{^Hkc3GO*K&LY(efxzAG z#uVrsu`l}KL!Ub>R6yaVkXAmnf0{#0X4!8!O+lTk)LXl33}*%kr}&pq|S2BSxno0ov?~*;3c1Q8Ko4KY0*I zMs}<=Zt3`vbBp=1xw@xp3N65J;}W~Cj>3MQsf@Mi3z+xs=;$Oa!EP*Lp;3cd%5dx_ zh>}fOwid32N$&15E#o<@PefNgfnyPfWZ7KtWOWna24#%1h~uH4h#mKp9oLniW0I^< zG4XwzJMWZHK{p|zt5dErHJ{5<0Q#ut`;|CecTESb(bSFPMkHwz!U6VV^__cGOt0eZcDD# z?q18UX$bh~T6}w2Nm|Tx+_0zqO&P1Be2d_50}BXq4+ABx-^bTrJ}G0GanR(GE-6p! zhR(FtMc9~s8D70#+?<^r983Izn!oaBJP3vr=DFXm;JykmONa9_%&?IGbBFMVQRQ2b zo;=?4>#O({?Qc{!GA1$a{FI#3G}5W%#k1!|D)~tMX``B_4Z#@rcYP;gEMtl6mxJ)>f?fCw$VU2ubTKOs~%5^;ywfcx_o-2rVpp z@{+hE3bDXC1JE%okqfz6h~Vb&{WZ^k8|nEM%dMT2-^t>1XX;dLYE0)Zv||Hf=Wn0A z8JJXT`c}uqo|teQ40&{u2_XyjEOBMKjUCEls-16y_G^~A{v6{6*Lez^cuL~@1O3C4 z_Lfc3D>x*5-cvBA|DD1CDPnu)J0Ux+Ue6$hAq?8N%O+eosqx{Lc zKH9BWm-)Fd;7VG60iWZnsGYk<#$(ppY@!@~IOm2#DUXfEaME9dY7(o+o--=>+#`xA zcEI1%$X7olG*zse)Pk>8O`tPHz!-DPFPVO$oPbS=14GFozn@#5i){9geE;kFskhEq zmdu%;oxGh?$Wi{lEX!pUmRzMDSj0n~ncG+q-(WBVZDe~fo4Z9C{}n%mJHX8JuhY!T z)hj;60-{EP)D;cDa?I7JXx1Y&`%8Se9#N&{5Uw)xPrDhtJ$Fm|x8B4etf45LuOS8j zB6YWWphS*u9=4i8EHbO$7~%;scQlJ#h%5jov=kg{WWH5+ZrGKrQ+|BWA>3?PJ7pCk zl=1R!CNMr*{EvjO*Y!Av@uK_v-j(n=!od^WaL-j@&)g_6XJ#`g@mGmJUf zox3ns3yYnb<$FmpP!~}=m*{cBwGx9Rq-&`+dmoo?{XLjj%37tThVX_h$F ziWtwG8OZ@;bK5MFu-heHJ-c{iYk`+=&(E^gP$c2@)mvs&h$@@{5ek5Zkgm!w26z1A6aEA-Zh(5eprw;a7sF$tGMy6GK&NCr{H|;&G1`~ zaz4K8TAl_Y9sLVn}2EL`BU+we~N!`>SVWAprx6l6=^0rr>AQ9a= zI2l)+A?8YaKyYSPfJb>m-1*5P(56qzS|-i>^~CQ!bm>hT6_YG1U>}tMBJH0y&{S2w z)+}G*Znkbk>M%KD*I#`$9l}M}*gfXgMOcrDl$FV#1CZ0DbBy(1#*1qeBLM5SMPOo$6vwwd{AGi69 ztKqJ7oi#-sqFQIVDRZ8Oc2=2vQyVkR&dOCQ0KA#R{7YF$jeA5@IVTf~|!=OI>o z871?xER#JlAuG}+bEi291n_=Nk!=6oscEjy@bfn|pdTBG&VG591DDIac>AT) zZts1QSA3eODFV>u1B6h zFC1Yy!Dei);AI)*c}|Nn4jIn}6Pq@;O3B-0?x^A16oueB1}y<+NrRpH!cw-HB5`Lq z&hdsrm`t6@g*l650O@6^wXn1ibkxQ)opqw@zuqR~bL-fVFjkNFI@_ z>V2nE`x&%(|NHgTmX52FiAHpxJN&-0ewx>N$8?yq1fK>vn!f)7<8zu4nIDrWU#8}% z!Y)4}q7_gKsi&>*&ks*!{tZaj5bA7S9|co3%-%Y?w}YXit(+f)Md}CoPVKF2=U^P& z_X<~P%8+K3__lEmcNP6)dyq4u#VZTt^{JGVYaN-6@SvcXR0Q0$hg1&z3L+sMdH*nBQ8#r+7_wxv5*N!UbLW97PJpPzT?s%ZJU!j-QT9D4v@BlUH z%~xs1>k1zI$kZiI-oqBl{P@+tJ>3ox-jw`4{IEU;Q zd;jX4BB#%eu7*RKdvgU$>6&f2;C!klI>YE(E_W@1&Yu#W;HR^(duT;^ol7cltv?v0ZlcV7)=u{el>{5ai{`iAW_kS|NxB_gFgNP{XPn)o z?0o%2>s(+#SYHu6XCW^_+uhxYS#@ToMOu$pC__&&c(Lc)RxRgBp^EwTj_J%zFl`h*Gb)6g`e$JTSFoofZDtIfJ-PQ35@*8!kQQcrP?_0JAOo39usUTrYd~ z&3xZXshP?>$pkbO6wCom_|j`CmKx_iD4osw_@?y|6pGQ0WTUOg!_m)ph&+-J1XxUN zfg`v2Hy9ONF`YWj+Ss|_m+P+t+4qgTZOMbhW_oY9<8w(u&C#kp4R=3+PO*V}-IDD!wKo zj=~hz>2USMTXIK2J@oEOHo5VhCz9@K0(SSnu|IyTss^IF1+;&6Cytb+hFRSxO?~dK zZJaCzgkODXJ&bPvuucWxap~ntP07v)CL+3c3SlFCu(P2ZtL@+rD7yG7YiUDIa$5U5 zmIm(9qRAvMc1>Lyv99#ur)O>b@Bc_v@-8WG-R<)`$kZ7dJP602mZ2$nI)7sGl8K$h zu1lKyDKeWYtb}|biY1Y9GQ9z!-g8qH@FG|nVA4|o%dE`KD65uEY#FS+8@n<c(S(zJEbJ6erTIp{yt`S zkKFdtnlx)arv-P$(S?dn5M-;O$M$9~{Rh$DiUBR%EJxD|t}0{nIA`_A-;7e_6FhZ&R}-2Y>QfXC^EkwqurzUJ8@hl{8e+&0)G+V5|b6dsA}<;K=W@!{|)z=M1l6;o-ri> zH5j`7H`}Oq*Cq}W~#M!-V_kU_d;`uSqJ8kWX105 zVmjv+QH^kR3V6A)v?$?yv5oez0cIkAlIGSb z2?-w;OVOuai5K3B3g3Dj;8SqHn`+rO(P4V!hY?IJMJVn zL@F=*HpRcVReX^?Qm+vl`ru1X`h|Oq1xI7|GtcrW`2Zhlf$AYYgE4GImh0fC(e}8X zs~_Lq_C(8RaB$UCx1yI#?#R};fZ^cV#tf4tMwg%9&!!bx5(QdfsLII|EuW;saz-tq zP{Fm0g)S2;1qPW0brM~MUdGK3lo|=bc!y28X~cxrzV90nvE)l>ZlS3Fh#K z^i3=M&jUbsJLb*3JX9&d75Shv$XWa=XzVHth|VzGz?lJ{E;|k3F`j?(upy?XnY7RQ z0X|~^?Tk{O7P1^_@b#{+R+kwNO_+YxX7>nReYs-Z+ZEDqa7UOKy1_jx+H&A6IQ3oL*0v>`+@|3lJr!0KBQs*V>c$Ry7sq#HW0~0t z?6*GDB~~2!$T^WawF8MdB-S8MEu-%2#luVZ8@=P zyZy3K?1@VE7a~~kITUN0wr!1U%sAh zqmfOdy7@v>0t>3bf5P#^N7k+|-E{gSkK7LBgbRwXhQ<+`TwVRiHnOKB`;?j}3|wx{ zg-jP{tXznmE#WB}M#oP07Z{nFOC4 zyxp}8JQpz!(`v~Zf95h&r)pYOwmOZJ@9eZ}kcbnFkiCnacQGzL+q0l?TYiCw(*6?;GctLtUMWa-|xa zTxNy`{wr$d6u!=`-ohtM&>imby1MR(qY_#BkG)e$4_g;bPXQ%x!;^g&YdvyPl<9!& zQBNCiPtIP?43In))aoGqZ0=a#M07q|G1RarkCoFJAk%ocx{ljqzX!abx8z2_^&W4y z=CbkMlq-pj7Bb`Iu-CST*ey%!ky*yde4s`3nM0UDGHoU z-DfVXCj3Gs znyPIWZVC)9oyj%1cw}YCuEU;eR2+6yIeYt%sk-Z&!N6p|-hml)PX*3_T@0N!yV?%q zwKP82)qNY z8WOvlua)r|=-g-m*%pWv?B^-*5_eKszaPOkn>ScUkE25TUVk#TzF<1T1IJ#rR2?vR z-h6E8XoKmf%r8?^a=vn_P1`|TrV*$wiLCP1muv28ugw=xXegCV)%PpEgQh_TR~+-; z#|{3*^vJcm=wL)DRi8OLKWZBRK_)XMcS>R>nNvo@!PdiM^6ANfZv_nprm`(%tBq@3 zEvv%U1QPWN3by##2$rH##I*Dp^?~F_v0}qmoeMo4-8xw{nluT&%rq_* zrh@4fJ)p2l;mXD|qv+m{!i%x3z$sWNllKUX)!R+lgO^2eQi{2=OI(-+c7WRq0)aps zFi912gQlVWcsOsoV z6W+0F*2&=N&b~xGcIm@H2byciP3t`<#qb;HWIE=IOlmFm@aVA0po0`SNJu|b9 zYhW)%tC!OdIZw7@88vtsgCSSx539;4nFpqh-rKF_+iZOJf97X2I${pNL-WggWdSNV zO3W>DrI8l&E*dt=E*U20)bGiIKh|6JN?b`f%32SxSj0^F;oo8Xsy=oszA=7gnl;Ns-^0(7x1e)01MLjw@nuns`H#fRx24cAW0!r&Fu>V1Ky2|q%zWIkR8EMFg-Z-q zAjfZ1e8fLnO3D;ia-gR3`;sV$-~FOB4+}mH!NsnsJncY8iyc1L_N<@yP_TZnYbQMg zX%~5CcAwVgX^8s9Y8yTm_Xp#YR0Fv8l;P09GzPrduE7-V0$j&NQCv8ud07PESnXO> z*>y#mo9Q}M=?V)+_2-Idavj{?HG0Mt14XkZh5m^af{0e^U8MlI$oDPbro%cdjo67& zZTqqV`Joc8UtJbP`T>ZAz!WtM-*&b=pB*@zBUSeAi#upy3wq7Lc3Nsp?zg8_U%*({ z$}L~7_pLbx8lrcrg=}4%>_pI9X$~2jFfKn9lA>8SL=1a+=rd&B_9|}w9bd1f7Tkx? z+f%EKt3p@bjjG=u!_df3S6X);xYK;}VdLNhdx3_?TGwcWE)NHoi(EWaPvWjYZ zrXPzmi$MDw$|5)Xj5$7Pt5cz6i+OBig|EvZP%)_2eoFP){ZFg(Wri)F-Y$&XLDzd8 zzm<7hmW~2HOH|bkamXD11!OjR@3|7Wfb(1Ug1Lbb( zFcD7M;dUHbl>599Iz!oKSDK|_6yP}cP0q)(r z=08_Z>mU%5D}5-{ZW6mHwqkMIRs`7*Hu0S5-S6cUs{;I3O~0c_iWuV96;UaL(Ktra3}wHqxBNqL`{)4U zOuIe0&CjPP$JchStc|+{>e*!oygJU&>)GPlpM*CPwEN)HG`6I0%1AzL3i1!!bJf_mGYb^}9-s)=5DbhiY6J$%&V=JtL1P)XmfGm0db@(fDv z0a2|Z(BW&8nnX(LG|R!ShH5k13_h>VdBZzX9E>|+!4w*;Eo{uXJ&x-xKo3JMm8HLqJQX-=?p1-kU{n!GRS~wN0XjQpiQfgW6+>f zo1L5QTJOjl`F|9hgz0su! zxfZMzID z8d$^Li939mX!<(l*j|+y9{#AjsgNNwJl%w_KupEP4)W1MW&d|A9@a?Wxym>o(bw5S z+$<5L+Vj0Ez9ljlTD%ogM4QZ85D@OLX5%YQDR5SErOFU{)K2vEF{T);l~noPgRXj9 zeb%CL6!Drf)bK!`Kd`R#e%X1AM>JdP}wmE+(PQ80F_^ly5|s=Ybd-a4`pu_&-R z5x+*K`G90Hub~yXE|b95I-DYX>dZ*2)0qqrYk=~6t}Ls8h@ci?1PQ#Q4UniIt@|PA z;m@bRA-;*T3QL81>NbisSbOko`zt+FaKmNk|BC>6B}giGMjtIEEl=mgzHfFSX{Z0Y zcJEK8OlAz_(Z5(FZml_$>Hw4Iz%Y7Rl0D(Mb)9YkZ>=ciZl48uc1xrGk)U%O|JXB{uDG}j~Hu=cpH8xm8R7A zdh}SqVA?NN-2cP@fGhn9t7!lAWs&G2`}a&UoFOkb{KqkOv2N8tYc^T6yhp#x@X zId-DCxzo|$Q-D6ix2jNw%E&+GpU{B<=Raz{|D&RQB69hx z=sI=9b3JO%4zj;TDt{fhpD`S8A#>nJ_$UDoo~1;up1po9|2n06g`57YnMQv7ZvdO3ar)jLpg$)Cp4v z{%oHjsqn0YzqX5tN6>;tRr)2rX*gi#$Zd&H>KR-fjk*4rw z`GT!Kl!_SKT?a&6t^a+@<(rftG1Ck%5f}PP#1|g+m0%XIiK#K{#4m@dDy+MQ{|D&2i@8P7S)Eh#QX7jJGy$H~J0<)CW%MTv zo#0x-y1g*u{6$P*g)YsHs>K_U&XbMETV0SYbY#_8&~BaY`Vp<(;Ma zNCimt=LbN-lSW}1L31UIRML-_fq-)9czoEv?zv%C>x>pSlitDc*Yd+z_$7@qM&!(o z(3lpo@>DGGQxsiq9iF^l+?`>*BTvEE!Q_)OBLwG+Ksx>xTtS@%j2cLqWTYw58*z>F9! zf>2W`)D0WJ^oPvYhX*Dq6mpH-20w#94#57_(fkZ+ip=uVz}pD zKw6|#eBVJjA>U*gHZ3(X)O)jql`V#qa`_V}TXD7}>S$;FoH;36&`(&Ug7*Y5mUZ`F zqPMeKILtIP@uh>nbS;|D%p_hOqS=P;1daDOS+$h_8_(xOM15Xz8pWmGUOgNkE6p5u zezgT}r;umIz>0ZpnImpu_tgS5ZOwlWAf*k~W#V5+bbd;V75Le0JBD}%jjIw?7|qCi zm_kmWiF~W!Zj4MCrBw}2Zh`;ZP9Br{$tolFP0g(K&qPVi=jOSray2SVC;LG~=EBzA zs=esUecN)M$rT6Wf%>J{LF@GPth7KcF}ch;vSNT^3rXeaqrt!R#69&IoFM4vls9uB#om2>s%?;^=H^j1{u?N(&OOAMxkm z8|fO~PG|YwHT456ALk_@Oa#}4;#Km)&*6zfy$V@4^Q@t#VtvutS*o-NZolDjtoP~! z++R|D>xY*P+Psycgtw52lHGrm5hSw>!+YgYBZnO&Pp0*byK#b;{oU`sj`rhIGDFw?ZPK<;_~Ua-{_WRG?iO^bDksSq%^TC|ZlT;eavX>>|HJZbU&#FA>d*NzlS-R;TYnCZG2#b8>_&cis8-@d zA9{jaCY2xGlq8s_lNGgd>Ieinv)JfXI@^va&Xnq(TV!|5Bc>PCby{t& zKQBw;z2&DMFR2u2#PZk9e84h8nJTWqT(05|%%ro*TrS2<>wk(l!hfvy zzacxcvFDK+$oxn)3+?g<;W07FYlAc~>pm$Tn%#^DOP{QeNEGHOe1bmMz6 zy1cP8S6Vh5gvNaDhDA69n~#=5vA{3F8a(MP9!@9A>TV4)^_9x$5j)TJ(tUBDge*G! z4Uc@(5g&DFzHHugx!4r^D(hDD>V*H z5s|T(1Q{t>nOKP`RZh>Qs2ELFiT@4#0~0Y!I~x`A?rq9>D8*`y!83{?;#d*RK&QA55-)K)jafdv!~@X#hw=JV&qH zf@-e^Bo}Zw>~Ws&Peos4HY|N~tRVF5k8T+ITugIGBnvY9&{(CJ50wI;=ru-$`k^{l zwshBa{Ju-CjB1~he!6_98 zFA2)CzBSF(mXq08=J+(5L%0~;2x@&8HY)Q!8 zVi)QI9HA%f0c)R3En|GRdc`3a zNJuL2#<1W$ZRM~>%WC#c!?(V@yPX+QQd~CB;!`m4adQUfbiP+f1>DuijnaV;a%USfGS{5+CARg)e1lF){+eKy~6 zw_BoqPYsGmDD7nKjB|o_&KTpCex?eLle2IwHqZakNb-nU*Iea)8hTZ{pvki#_i;W) z+2Q0fOr?ub0Ph(W z0=xmq#DNBW#mExS7O zM_IXP2@SDJ0``++LEm16gt!`KHoodeGu@QAdm}IV@5fT_LnZ7kq06(Iw)oz=Q(H;!D!7n z|5@wQY0tg$0WfSQ@-VOEJEr5W|Ng0gpjt+D7`Q%bOFd$3|9~O+_diKTZV9Z%<&MRW zn;eGyxrWDq2%sQlG|&7?X{*25Un6g&EC);l$)6iG&{37v%{D;%x!OpROhhsyjLI!@ z4Z2ksRWgSD^L1stuBchYF_oITXIaIW_1iRUCCfR*NwJf_me8Q!2<-2bnkmOOB0?@s zoP=giwkb6N^ex==Rvab7yIZ;a?~;R;Je+~J@C@PJ(Lx_s0|0w%*&KG+$KHfShts%ExkPn1|U z4B%g9HD!plI7jDi7e#BdP}}QXHgioOE38A_u=~U)3xMjWn1&EI_BZZHv?$hC4B*UD-)2gdQ<)A5*P7M1 zW2TUzV>%a}$wXzjb$`KO{A%n|7_IfaFKNEoBMNoqSyw~+sYuBkSN;vr$1_1`Sw$W! z3w98#jf+8UMko+3`^n5*T0<&^G!zd_qqCAT{0HrmkhDp=ZV)R*{0$BNOk}Bt8sorB zXuGr$Y5Xm6zG6mkc*V|?K7ATop*_<)Ws7{WaQ6y8CqBTorHu=P6jsQbXdaWrh<{TOFePF@zeh6}KzDu5=7`t;q0 zYGV)d)^L<8BR^$c1!903cJI;)PTYo5I>GQN{RqkTJ2PuvG#H}`Y&P@oN^^Ol@4gRM zPbk;COK>bOg#i@O$`jGrRt;*$s8xmKqL~_V)3!i=Iq%Bf?U8)4$>_ z(%hHwh|0~z51pMeNSzZ9Wn)rL7OdO0WqWCh>#Yk;=!1+7&IR;fFx9aOzgc!ie7*(l_o8; z2YJO(k!5$M8VkJ%&Ij#5y5MzSQkGoFt3Fj8k`*vpd`Tlmnh^a4D7pvp4S~IE9;nTETvJU;~o)Xc6|G(iaj= z`IHPL5%x3_3W^g6FLjkmt`lJJd|<`b_Lh>^hc5OLD3S+0JW<0Hd$gZ+oXhSxD>`m_ zhv6wDvxOznw6olHP&W!ZPkAaROCBN3#(;r1{{380*%7|RS>2~z^V10q}}$myq=%b z2rT;Wm9iR8t~Tw`DI3PF=~A|E@|2PQ8*)%YtJs>Mv48917G0xvrUs`h#v)|dBQrPR zpKXZz%qbTV65Y0_knz#WJfkY}a6a9wL{djKH)Jtwi(xfZvD(~kuV%aZ0 zq@HuVH4ai!@bmlqkSnlj?mtG4_L{z~2XBqG!zMp{`{7DY8~AOngs& zTjfcOEuV(m4m4}tIfG!JUzY(MTC4MCA!WWsf!z_k>I9AR$saHsmk8dXbG2MFlf&a~ zWnV!GiECM0l1b_M4@uF_iKcyWui0B_F~B8kPhWd)H+e=@rvezDwJ3G)&e;oq67+w# zoWHyF1~m0gU|Fx|tcn7!c&dI^)e^nSeE+r{ z0qzc(*rT{VnfvxihViW@+=H6Fbvn09ownF|3W?NP)z;kVZp(-l@Z z?qy&5bhsJM7X%Q)r&|k=hh`UF{}WH!Und$-Qa=N2HPw95Bc(H3 z-W0i{migc-xA(U_4jzu_fzE|z1n>oX#Ai^kj`CnLDSL%Q3Sc4dif9v zq>K!scAZ%@r65{{voYd3nlyxZ3~NIzNqgahubqbm3#+UtYcKusi&*-6hW*b)?Z1!F z;#fehuMQeUV~JTX85uQRUHj<4E9RjAc1Hh9l^Jb=^7vDcXGi3@OL?jrH=0iC!>LrtlUoU^6kJgA z>zqLeHoR(Ewogq4zl<=w+41HBN0?03QlJfnv_?~Em_VnDO=zpwD|Jawn3vXws9weB zgye%Ck7|~5TJzE*g<%E*gtiLPPI4#s#0)sbA74X&q z+E{OQdd8;EY&O2U9~QxS{CsMsZrf?KO^7dBY$Z#l*hk3aoJD-D&bW&dTS=QT>xk_thmALFPVNc7B2R}Euqe-bWUtYHt`IO zXRc!Nyc`KaV|T3WVLvOU_uR8d2M7w&qiU2g>$^R5XudmtHp-cPhETI}axi!vyp(kK z*^H-xUlExRM1ErHo~0j^yf;ds!-7T7eF(p>&Y?aqwvaNfbk|DB(y3pwqe)krCuoX7 zp4drE+Y7YX8A|O3{&@AFI}hJn=>NO_B738h@{*;Y#J>D4;lb;pAG6^m5(@RE744nb z{>*=wUprt6s}Wkw6sidCEbazfI1aGCOjo3N%LsYiC6t3M5yATc@xM#kZ!$nump~o( zv4#CY0{@atH2YlykN9{1W!XW;UuxHu5egA1G)%DWv3Z%|o@a1ViszdPS46~|QRwl{ zKDInWwFs28Y--sWF<-aG`35m>&mn(6Qv#tC zfY(nc)ShqbR;}CRyjSBZVf%9;x@v^5^fRxs>euh~jws9auSoB1yCWm&*Z*FW-%7Xq zEZFv6qP5g<8zYrq9Q^RIWB8yl5i65YdhH}CGb#4&;YlVY|4ehiU-6P67uE+&@uAgt zkO>C}K(Pr4s*N`(4^Uit9m;Vi8B(mbfsQo(*!-6~ri5gv4-bos9{%JL+j`zFgYi7L z$lU*gyGy!7(3Cq~BmboIL5knAzz%~RKIaR3RHV>|S71f^@L9nqN{o_2=jAi)dEC|| zYQERF@ZYTbu1`>g9N+%Vadc3Q`_7cVnNf*SoPQ&0V5-A7U=bNU#=PGfEKKmvafoeq zt@S9Gqc}Qj9+@@lKMFRH*j?7nABzqb9@JK#s2@yh?5oVJYQ(Df-f#5_$lhMObI~rn z^LEovsxA$#y-X89w%tI;9Vj4&XwVDsn)U8OM|K_Slh{aTb~7A&!;|DtK|@BOSh^#onZ2cTu3}R3`uu3 z>Y5H!r)rdHtUpz^buC%7r^#>aNPkwkm!MLcq#^tKnTXb&+C zjHBo9a=OdPt46E|y^Uzxu_M>H#a7$yc?Wu9iCFwrcI|3^aE*F1yysCWdkJgCR+LDV z>fYAZzcT2TW~0@c9XZDrbKbaOjiFpxO^L-}%!{pQSW=aS#w?cY_V%4o4ksnAt3ELt zcio-Q0#{Ls@mJif+2uyw`ZrT2(}dE1M&}Byw-Y2Y+F?dlqDE9 zaX)6Q^g4;Ee$ls&1s*`uQMA!u$K-B6=*?%r-9oi?CNYwB-!aaEG{)jm7CIf#THl-F zY?__nzPIwc`SG#)Y?pk?P+B;#ZKIDU%7%)jAC@C>P7ID+YI#M*#wqgg=rs1$wqr_P z7h2_0j%FsKeq}{|7?RHIH%-R}Pq+bn(Hf@+>WH>JUv!P3TXU4|=X-r|NWkED>!44D zOV>M|>x%{B-b{Y#IAkZLe+&Lx!L5TBxGwW)K&>|DZxO>T zHqdIuSxZjr71Jk4XeLr>)<=K7`i zpOfAux0K2R=7rnXyXsA9(&Tpi0y4Gg&^XxWJY@r#Qo>m&^y<{7W#C1f$*Xtr1&F%Y zly@8ExvaQtN6`_5KQrCpYUyf0VZJ95D9V66fGC&~hGE%G(OR#5g~nu*mN&wxc2M6K zoObL6$yxd5AAU}HJ3SB!s9gTR`stNX_Yd)jzXo5#1PMo&!ZS0<>ogcDM2x8L>1zWW zl+}>Jh;cG0@N{__{PI!dU;r4ql&%z23`AQSd#*pGo`}hf_4V~-=`F|I56Jsxs!Khr zIOx9$6`_2NnRg#PiAQ3?`M?b){B=PALFh!jg{s1ewNUBhqe@jZUO^6!r|es^U*>Ps zThE_UiF^Vp_KU6>_@;6SQ?xNR>!-T|aaI&g;-#bS8toSf3?p6;AGByk)HfmMP9&2K z458tyy}Uz1cj3>{74-4@d0oinxPh~Hgj=! zRVhhU@q#QMot4Wm#wu4iw#8aep|f}*YY4KFwISDS&2eOhks1Wb$QOn zbn6S@Yqf~|nuS@x?^ouz4P1OhSv#@xHwzq;@|_e*(CsCPi~bEEe;U^$l+Oyi480au zGsf3mD&fc;mbVsRuJLRjbe=Qa{`%zb>r)vv=VfFf;x@sS;9pqfEphwnS#tY?wz1N= zS>7Hng-^CJ>v&5HRwPj`^gN*_VEBH_C~GMjysqyWh6J7^-+YDfLtL*uK2YNVo4$&w`}) zRF#={R*L@*#8GLh#*&r?-|PK%kFvj+4QYIDZRwa-EK+ebI37Y3e|t~EV(pN999sI8 z7OGFOHb!mpIH2L;vfWPrN1h(G(@h~L~{8I66Uz~J| zI3x-SI$**9<1pQwBIyc8OI(9n%()G2$nKf^At#=;c|VzkBX}_oFz45FAfw~7xNAC8 zbGuYRGV`)7_yj=5@td1{TZhT1*o31&ZE`?QhGA5)iAK1(Cg#wJ(XhI`$=BJwq=|Wc z(BiDmq9!3hST%v^SGRi=w|sV!dz}eejyKXnY!L84{kW%emJ)7~TfWxsTj6`g#(QUh z)Az9u{IS<#`2FRTK>_Jfa6LS%WpTU>C`bX*pgFB;Xu~e~jIE!IZNojT>PR<{baGdj zl!Z!ssK0&zVS;WLtwr76X{el&rTolLa}q}TIRfUY&SIyj4gp%()88g9Y29feao`wY zd9%FG%xMGN19UnB8~7_a#9=ti4k{kCqizwsLESqbpQ=DMX_&coJdp zSNtWdCd>%_*G{2X?9vcRV7JRow*%0nRB6FfskQ|yRW~0tRxp^tGR^9&JwQxIyI-i-0f=fh3n`Q|sz}rTi zWl^e2LeOmFS)ol58T>|DXz76*a=iBiUsTM`QoLy&Ps~r`(2*J8CjGiZIskQsSxAIx z2LTfgH|G`a!V#B}58c(I>#CO>mxOvLmxl~nS^=|`-eg7=66RSRh8BVL&*!lB!sv*} zKCf>{T%ycfy(nQzX@PZy4-i_FFX9^=1SHkI`R|W zqqkKgt!-1$zaus!!FSi&>Kg;-GY7_DHhK_Rcb+5v5T7N zm(OGS<$4u}Gf#+xxCV7yeBWS1$ko%wM#E-P-8#O)W#9%I2S}7z=3omX5)(@WsU5eM z_|#y%=foMO{gNMwku+){Q5K1}_$j44FlO{T_7?wD9r=d0ntvUZj@Mo+bcF`kRp>bR za#At%N64ExBET%))c)$;p2@t-i?`>-#=7udACQCIRSw>jTzy+z&j`IWFsSPsCnjpo z`(%RJ>zr2VP%uT!pdK|fX46%!HiBZ)suE2L>M zczPD#Qtf0X$fT-OxXM&|7P%1eD*$}bbaQbv4@prfKc9m~f!Q3|X3GJ=ua51a^V}X~ zM4{6UH}V|EI*qXwkumYP^P_(?q_|(+v$36OGGg%_F-vpLX^5)qS=9H|u4ERJ3flW0_X02H)fuGLZvasH6HA zC@8_w`wCY#0K`~qx-dJ5&IOk$!?v@^i$D8xdx$`L5j|h}ThcnRLi3qY<^IU)Wv*v$ za%rWQk7H7xGKA2|iuP=bgDucQ!}nI#w<(7_WOl&f;X{Zgm{8YQ{a)04)okO=5jhCr zG|`{WD=>4ouVByGn%%#kv{R#v&0$y^X06evsaSp~#6JLlDwtI~F}%w z=!^p{dcIl-K*o_Ud@2u$&<(xL+kqhfOnKnCucMS0?_^>wp}3YD;* zn`)u%*;#K*++`CZ@9r}O7wVBc3d-k99JPq#9Y6zt>MbNx=E zL;?K*N#u!GZ^8NS_H(5SS71YE-@Tna_))@X02jo~Fk^TlKkj5ym84U#Fsp z+g|5OE2~S(xzDTj{mHxM*~6^4QJv!(`dzIg3LJE3%#bYT1XWt7ZxFO-9Y(|tD#x$mTuQl$r0pKC)(c~hoSK} zX_fw$OzTA-fE*chI(M9E#{xt6YfZn2H^-R{h<&vjn%#2lNPTCQlbuLT=M@fgVnXq9 z4!l~sXZ;PB))woQP@b5ed?T?TA1jV9#)-NR6n6~0BUMC2HGR(N6lOVNk!#HGm3#CF zWS&d|JZwCZwuC=VrhTlg+=sJ0J%ESYcn-2QRyev(5oL#jvz_PHM1@N}uk#29pf

>0q=OrRT&MoJN~V6x#ii{{+H?1af6hr!IHOx@KjHph_69?gv?C{XrnZ- zn=6!Han^NJ9>eF`%Q)!*_D7*G&IwTU^~Y>Zb6MkP)SYAvZ5-ddKYq$$O8hhXPr1Uf zL}^!>2%;@*N}~>weuE}bF{Hp+YKXY z%{{cJV_XeWpBs=IE=&1mIKN zne6|vJwA%*y{!{x_wcjkfAl;4%jc_;%q@DR)_pA+eEW6y&PGebsxl+t{;2T0j4Y(K zv}b5T_AAo7u2c%dZV|7R?QqbqurnfiRY2Js z>HON3aHEN`SXx@;lK3w;iaF4B@v6=u!}PsRcuCOm;?kjai6kDme@T$Q+WjH3O?Nwx zIq;d8eh7Q|#PL7t3 zo^ygTN7T0cmBRs4m&#`$VP{}2dvvqb$ri8x0zlc^dx(BDWSj3I?{i{VWBfa(9Q0_g zf3|v6gzYIqjp1DFdJ!d%D>MjN^*1B5gcv^<5pzQVhjH*o8*R#fiCex}?3;T;)Uc9# zOieADzzTP-)?YH#%N2`SZeQL0lR3Cakh(gLlL>G$;4@#)u&q&wi^6dMnRc^x)sS(5 z1!sGvod~akkYmPuZ5Pj*6@t{G5}#Z>vu97oSm$FG$7MJm9U9t=4!-33&i9CJ#*XsV z`15xfB7w2qk581%b_v}QIIxw%fq>bE3Rwr6f#XrSte3JH6y`ly@~SP?J6&&gAeJ@e z8y{E5$yCKG==+THsWIq=`Hax?QAO5oh?r34tn`DNk#mcm>n^$AFeOkmWt+TSvBrov zxNh@lvTMA}5RtLnMa@+1c(Akt&|4$8JBtklUCZ=( zIB?}-9CK&pIUZZx&%VZ9s>^&Qdh%qz5_768(A%m`?%R3h+xbco^d^<8X+9egs!rKO zcI9;x!|hs`c{kt-M%U|)fU(@vQx<9~-OtIkcSgchsf(13fvcGCdlG=DP`XG1zk~a5 zsoILShaMf4XU&n&w95M^H#fQzUN921FEyZiSDD>6 zDU(97gioY&8BU6Is<8<%_F_r1w0zmcpL0PwVTb?Hx=J#I#wTkad+d>C0*%2_j1H;v z_sB%knE2x8wsDAL4(*JRqNj{lTbJ2IcQL4k?4;g3ur4PFikb4 ztlxnlZoq7SaEH@;5XUPA7kH2NXDi{DxIbTnD+4ic=uSwDtmuwvJi{Ke@RD9lh6QJ$ zH0g+Zl~4g6k&}l{LPoG?wuLuzIGeRTK%B<}SzrJfM@kmF|7x+0yuuoNX z-g=&uIYv1OB{K8fZq<-%bY%PnyZ=dt-Sm{jNSyXeT3S0RD}miAT<1S$xZGWgb%f)> zO%TDn!%ngzO5rqTD+#lVzT%&?$UPMa_Sod<`5tVgV-<)^d7Q2CC;q`ycL7=I( zQ=^bG2Aaa8d3)AqO$pnV|Kx2c_kjGE?~#YaQ31lpjWIR*Iwo(%UEXV*dCXxLPR~q0 zUyu26>&A%No7Wxvjn1Dl-)8r3eJrg2Ws-CghKR-JkUh&E$K6YuyC5t{NnECoCCMgP z%QL-!O0QVl)HH)N@oSFzKbORe5@lDHta-|~M>vCv{=j=EArvSIQ}Os@!kZ}pLw#~z zFGP!nx*f>-1?S|+uokPypE2iar9%0dnMkq(_3zJ`m4{_ASqaD1pj>EFP|I5l^h01# z@NqkpIwI|FltEZ;=DZFYvZd0}fXZLh zQmU`5=dkRvFxE}rKK-Yy=Xl6tYRk-bIjVY{r(-i*PW-QnfW~_y3(zq*L_|xab$HuCaQ-e){8HmLgQaZ5bm6EB@Aw-b_?8VskC45&NuZ{ zTZxAq%x9`E7aBA)oMbBPV!TLKQ%3nwPHPC_L^X-Ko#2!ifG^!J$t8gFQ@^e9d|e>f z2iFrdd_cY85e|EHf~{Vw0&@>%jkD_S>sCJ=EgZb-mcs59Z~t#;u<`CN@n0bp63jM~ z`!!%79*Eg!P0MSV3+@$1V|S0|Gt_0@<-D@h2}~(ZFq|87vJ$s2JqyY_xsyPO9U#+f z<_1bUfDJkcZ}e0NdnRSqynnTIz55~M#WRvymG%>peRld#Wv1N2L_T{v^@{Q8ORqr8 zf~MeA78HDG{Kw9hBu*Q9 zVwUL6#-e}IRqR6=RjKISN02vYs}hMv6NHnUg`gT*-a8B$yo}6iBH}hst+qHr!J>+y zl_oJj@KCJJovwDGtB~zWaSh$F_CF4XT6=TMMbZv0Tyj5Xdq{HJzN4x>a%_|(e_P(b zFzjZF=L_ZpuEnny8}3J@axfh}ovZ44Zm6XA+QQ7aeKt5gm7Jp^kzI`L_jQ{rnbkeDMn}!apT8LWzW1iL=;okAk zsEEIjAbTF+TE8H5(mQ|boE3QI{+3Ot%RwNdpolc?G>B;a{r}K{+x&5i6TG0shaC;Uh|;-_ksKxYDK9^J|t_R@}&StY_~bH04)U$gm|GQ@S9C~w3 z)AT>Q5(1;)8U5=!wT{@$`#1b!(6FOtI>ZkO{_9h}6nYUAjy zLo!j3i3uk>BF1>WRFW1hmIac`c*u8er$lBNst6m6sPcX=(Aikq-hOUei3)vHU{p;9UsT*D>^nua$LAZEQ(y13xf=mARWBk z`ce~*Y`Ot8`*`BcZ1qNclkrnKk-07z>&`{qxOMs@j7(fFEs1T~nv%uDNNlpe`xi%znKCT5wda~^e_-!@;n6d`*-N-x73xy%jc+a+$1)DYmI&pC|a$Ag1&+Y zHGc?cI^a=o*qJ|KJ7Y_Ps@X0!hj4wsUbZ8ei68>i7hB^&()R+Tj#^@zMKRKG&3B=h zm_>QQpzbH^W5JL26U^A{-+ph_i{`ct2k|{kuyr(2@ssAG(_W)XsmpW95rb(0-TUCR zH5OY|62~vfB%;(*3dJ*j4S5nVgm_7ff_LCicEE?IMln_22!+F$uC`3=7gL%HJ3#>9 zOgw61_%*n^H{t#&FM$m$0pMZr=NS9Bj}b{eJrZ7J^|mpjP%#SA)5S7a!s+)foCkQs zrL;_@dKpQk!~;!4^`DmA3*qF?P}_tJ)GFIdfb)T@&#H2^BYtiGqHievch%S}!msnN z!Wt*VXE^H#7)FM|52DMEX`z>06ldxhUC7BX;(ymziE$K4RCg4PW^sd&j_DhQ))^z^ ztx(HL1CBmu3bp_ABNL@2*s6E2nt$rN|L>9;YI0Q#kJjw(R>s9H9-SF?^`?YPKD2Hp z4ilyh1!)zv7@gL7uEvuqb`uo;hSIqjQ~ZDy$Vchq2T0b1$N(iSnRuhwS2o;2w8oKy zv{zI8*x1&V_wS0B_x@t9iZyuY4Qg-%1zg2?Zxet)FzX_NYMuLUhHRhd$Z>c&de(46 zT&t_f*uJ2VzdkFT+UW3ajl_?gTOwYiGEh3orXhk*=tKng5`Z?u(F(6pdJF3X4f`6~ zot-M(jRqM|qVX*J=(bOonpN6GQ^M-71=9BLaMf1&2>b*2sX_1M_mbHkxIPR-!>^1K zCBVe1v`$i;TE3C~b@jHM?3=V#*P6b@D3BN_+NQN7ns2Mu@LKU-@Kx_lG8ePaVUbFO zz5!tH{gfG8<;zc7>6}NV9gGgDopYzEho_ED!}0)idEmkr9Zs(RmYA6*!_qT^>-R?t zZpcC9rwd4 zgV9#;n&EfHgSs0++3R#;3~~B&I2Gm8whSJ0?W;i#e3=Q{Yj7yd$0$Tx@#b_8;FFM2 zzMPTuf`bf=Z32;pJ0nZK3)^}i@!kMPKcpA&Lv?v^<=pDdPsF@umxJivJ>PrbYmzE2E^_fz~z6~GAY0-C!cv6m!FbD0EZEV)NWMp>c{@stg18hFU zOF=i>Ty9=dy+Z$gN&nUYnK&DAY*i+?^`=VS(-Gwro-5ttVy0DqIOqJX78Je4EnyZo z+MF!Kqfw^pD@ut3Sy4ZoUJWzsu_ZB`)S;EJO-vFi-H-j<3lY6NdAdhmR$x`7j@SCEz)P@=8dkMRu<&~OvAciQO9IrWq|(|y=z#qx zhacxw-B^6hRwb$_b@dUkA$r62u>>l4eInlJ8qtH`N>9`cu_=!;fcJLcf1hU%Vq(`)dA> z#lE%>eX)Cggr_x_YKfW8x}yUI`|gu;XalQ~H3GxILO(g3KGA~RDzxRl59tUs{C3WC zmD`2?C0W~RJofwh2#u?|vS%@Onvfasc5Pv-ao%MY-Z=1~tUUFZK3SQ?t7TZuIs39a zts=x&m0(*mI9}suZ!1f#$MAl`;uYkfO*F=?#LP6=e=n)yX_>#qY4{MIvr4eV7abpR z4XEYrx$MlKfw#n2#N9+=g((rH)<16cF=)9Y25na0V+TWQxy%2hv`1bS4H`=yu@qy- z3bL}e(}e4oR+Mr^YjMLHxSn+qD3@fC5z)gFM)U==V8Ci|f9SfXTt^7Ks6L21_Y#`32Q^KEJPd zFZblm@eKAIS#2st6Ea~@Y0E?u^ z8wV-Sz3P!3ja20t6ZVvhT&l4^f29fm>k3PlNp_e;LFy}GcyWEC);qH7o>tq{X=aj! z)uk{*cqgDCWJzeU_puF;lDn^_auOq1s~v5>3GT+mDnJnvBaG3%`RK=dI+E zKaiX8lqpyo)-weWeaB>>@5Rxta+5^Id4=lGbRRP2TyOe)eGuyLVf|SQ*IbiigA}Yg z+jLgA{cWuH{F3j|_~cOL3RLf^Q!79wC5E>Z4@Ael?WH9E6HhYPi5`49^S##<4@(0! z=xLoElM}&GUwo&3MdwKc{bN0x)k}uF1#4O&+1|K|V zH=M30(U(-PmMC)d2|-h=MioLwO@GTl`|}QgSmO%EPwTi%Q)DopatU^YW9$up23?_Yz@UpKspU z)7q73I?I!Hpx?+oO}ksDA|!YejX%L?VLu|C{cB0?n696E7AhlmkH|r_aIxVRa76(V zdgMuv^<5@EcdVX>@vduC~Wa<+S_^i!v;J? zImW%e(49Z;G+L3X9t3+JgvZf~B2}4-@6je+JygM5b=oIj<^Ae=^2N;LZAW_ITlcit8!hwSv0d&6rpB1}S6!m*b3wS+ba-~NERjEE1wNB*L+D@3YOS!@7gl!Uk0x=YegbN&1I)~oN_rcibuII{ecnIrcskLfj#E19OiB4HeQ#66$l>3v5y zZyHj{Etg%v^57eYS7r3TLSCgNf{QTt^P7d5q4^W|CL*Bg)f`8C%a#2In%k5pH;N>O z`>n0h=LED&1IB$&U>CnqJ%F;Oh*o~kHNAp-=g|Lyhdiv}^^M`2)PVv0YkW?y#IiLt9 zJaBujBKF=+X!uHFa>+j?k@ni;iUWP!y85%&taN7w);EXodjO&THDK>E3F^F z$aD-t_a)gsMM;7T@5lw!t2X|01^;*NeS>e%t?;Qo(Oh=Q_AN@2ao#(Dv0Y=r-m2?0 zkR+&uDT|-5tX4DkHcn>o(mM!9ijlH_vWr$48ef8@W%x#Wom0*rz7O97+-M4rfAN0? zN-5ai5&z!9=`Ltzv1>x(xrOV{H5zc-VnF{fEjKYqc4X8QHVg=h!v0#9%siYB8H`|E zoQ#Kg;yCnAzYBD{8U~UICd=|&x!&8sE-T?Hbs1{_Dp45t}Ie%fEH*ucu2}W_+b=$pJs|3?AyBmdb$CI;CEr{eOF<>T)(>I|-Zm z#m?AA!06&OP=e>-VkRzW^L$8wmSkO>X?&A&JSSmMfR9JnR+xkz+&3I|n{`ZRizHdO zo3barErF*o=xv>lrl{Z1rKLnNdFLrze9E+@n+ZAqlHeU)^(EOB8__kX2Zp}83V3yj z$B%`4AqAhMu=I{U;he<lJt4;R_K(XBlO!L7)=zS7+##{3n4DYM_)MLqv+D=Z{Ff#q?7yLcim`G|7vSi zuSr{Pl}C}I8_yz#ekJu0fw{LV8&MEvwp@-0j4$2m10#F7d@CG_UnKjD6yCocOo0S2 z|0UNOdZ(O;5xIAV+F%Z9k5CJ@RoH9odj_5%wLX^I{vQSm>*3>kf)gs(M1o#od*RTZ?KGn$55zycVGB@A!l@O*O9dFN8 zp4*<ZS-|pWxQUL@W zl6z8d;yNE*15>5Q2lHMoPJ{P?y_8v|6@iY`dvx;ua75*W$cj$qP$GD`SDqQQdbp1X zcq_b$&Y)dbpg0ZeRv$X>r67r~GHzh9hvmDmL_o3F zY z%h;;GwjbTUwu$_8$NdX&4?KlI9_0)I0FdW12;mz|5XX0W+UeG{U`5pik9X2_n^Dia z^HjZWNmX%DsU_9c-Zr!LhV8;B7u`zom{DJ%>B?(Eu>6SXZF%2jAyi(fJoZE79zq6> zF59ySNq3v}T((cIyy0*5)?*d`@;N2;3)U%5QL%p$>cT$qB8wtN1BrGa6xsgIB*cdt zf1kbHjct^4Cz391neh8u$GOcQMGU0m?baBbP_`VajhLEwIKon#b_Qu7&o)PHiOI@a z?c>Mrt3qVdsZ6>R9ON;TYS}hTUO9?6@SP;@Y#lj!;J)|9eQ$aTU{x`>*NJQI`aFh} z?wEnAmAW^xHZUvz8Th<6%eE={=QF!U5)$? zC&Y_`zL+ETK?|nGnJ)A1-15?@z|X>Z)TPVvW+nD=aBDV*^ne@?{hn|FI+v$Q$1Q0z zTck90-M0F5Roln2?G(oj2Qk|9H{)!yAp_<~48u_+ew}Ui$HmLl%K7I4R`tFUmcu^g zb~EMn#wmx}<0MTzIbD_Dm0YVkr;-BmhNO>0bPV7H!#bWy#p<)M!tIKQ0iag63SkmH=*wDfg|nea!l=6`9uLs zE?tCb9eh87p*;c@6?Uz=Xt#E7#~U{s$$*ef2fquyj$j&mh00TUIN1I!xFYva1q-Q? zidx3;xKX?g*F^8o^NA{(l{HQOO_k>2=vrZj#O8QJATkOYvv=i)(->mojMMGy1}T{T z>M_Ph&#)&it6fSDhj$052l~Dc^Z93_(-~JAIaf?c@H}EqkbP8&=38I{J3bJ7S6FkS zRe0!DY?!qt&1APd4^#TXWLV7kj!;bNOb#u1>m!nWB63)ocxIIDo(n0iH%ieLfB~OW z8-M5T$eY_U&#E?#k=271936%v1tw)?=yayJz|go!&gS~2pfSJ+ay?^KT#tvF4*@|nzOH% zH1nmd!q_-*4n++tZ`s>Z-t>gM?Ct%mMfA;4KLhS3z_6~7S%Ho1gb@NfIjJ`ey*GAS zy+9j$=@xBmc;fSkXZr5LymjqVEK@w0mq$+9Behe@r9?bCn_`YZ+>JwAkQ?p zP{$;>xObGt0LjJ7J1pH}vfccy!R}fiiu^U6dGK9*IYqQcP`xghuWq*f%eDQw8V0*n(G>QX9k=zqiyLYyvbQyatRyFEzwNuEJUN>Iu zCk~)Y|$NV`58Wf-nksTG-s%iY>gvSFp(7!ELcSiHC){X2-(e-(CTI zTLIqP-d6XbkgnF$(|yMmZ5>%zJ?~%m7t-WNyt@t>zci z^=a0XuF!0KUa3dgz?NPPBU)3$p6qH;dskoZ(y&loY{(*GCu*>gQIpCTv~FxMCvoHu ztKEDzQT)`=gHE#TwpS6vtVuif3+Nim)R@5OW=W~IMFIB#Th*iTZdLID=&<0ExW1P8 z4{jN`g32i=+Uc0HI>X5EiIkrk@k3#@qVVM!;^0w zfaicAV=(XC`UcfekGe|qRxFUN-)o%-N1S~d@B58TPr^Q5D!aZk=j{V^2JtclB?SY# z^Y!!ce(HUPR_!48zhpXP8f$0q_bvm>f|^^$-MOR^)T2Ue2x{4qw4VVt7Nn2&Q3dPl zqQk1Xl^nI@22zGX%3h(SGdkUzc@`=q&1A!2+#L6lF61KI6_dEX?QMx+`$wzPpT_qI zlp0S`Sp|~|dGEER?QL90-~~2Ud{fvYag&+oUIEQnh!R?6#t`P|B6#w<8%KLP18*mJ zSe@!o2TCC{wsFn<6#bs*qj^fGhIqR#f#1*+>z4#Lqe_bQcclM!%=PisHGkCUXh&*p z$iLB=wm|Qt8!=H-DsxnvN@KH@q`x--xbWBbg8)s^9c6f!jKH?4^u>?K(ov%H-1n|L zPwq?Q`(rOJsI4YXs3R96)#0BPB9THO7b)o*%STVR@>XXsa#Z#3c3E-o^+7XZ}FK>IN|3s=$|Sg`~J0&yl%+nD|5 z`)wwpmBJ;gM+1YMm1*i-O@sn9DK`p%GULYJIN$Atp%bzV!bbMdH8x^=Wt`>34MnGg ztwQ`Jogc(<`b8^uh{pB6jyTeiwD+mo=S&BY_Q9z|RW145qp+8zJz~AsQK!zg596OG zs0rU^G)c-R<7K#N|ETijpM~skaKrMchvA$@u{n0O4R^S@jrgfQEg;}JF7Ilmp7!OT zLkTwOp&JX=C+M?OZUj5kFuEz5YEV%=r!kJRx^LYKG%EQo-$w{kUu>F$F;A#Wt_1Rp zRrgrvC5&|zg+A33ACjjV5`N3|t-8j-D5+(qxwZDcd%AT;!ahNL@$^(ys~Vj44`z0r zjLRlZ77=y+OA;k#NnkJ040-vf>HYV~+&e-p-fffz`>YrXJx`u*v*(LiTG+}MC)3wF ziQRxVq}`EuHJ56MH#arnZdWG6zx?zcvhLSDjdGI$l1GkQc{C-Vq2<@cYd327HYlx_ z+8YDd;tJkzH=15P8k{2ec1`(Xo&kL4oNC@`YDqQsmF~3VR$A)s7Hsk1DB+R+cMoSU zbX2)VfJH~rN6z+Xy?1TZ&Qd^LFKD~TciUm_f@9l*;d6Z|C>Hu4S{9r|@m z9i;N%e9s-1Qkmpa{{p2*$nBDh`omUj)_!!6@3$vBxAM#@9Fj@-W;Oc48qzUG07_+J zeMjVT5~Rr82NCR<=(8_7DB%~~sEI$bprBq$vm66|PGi~DqG8g}pnsrpx4io_#+lEV z+15)ibwDJv&OHL>i(D6uInJ@PI=^-AkCcfyzUgFd?#bJFJuQ5~RrG`>I3+JiF7$ab zjOualP1N&xjs&4Qo>G_Ynl&)}phQ>32Qf}4l}(NyEt95;dBA{{5C>gDotdYT=$zk| zT5b;7xFYrE#LtH!@v*rtJ2t=2ZN#ox0Vjxs366H~j-f}?a-#BGhSZlxO3jPVB9DgubKZN|;r+j|jGCf<+w4-Ah!QVAJ4KYNeJCiWq z@fyg1N1Z}b)C@~B=?qKy!uo9{2xtadbv^)%-~+vG<{pYS6Huooq!-P!qDdcf`8q=g z9Y;TlOy7UXi?tmRvJ)Vr!sU2E;Fc4oOIgQ!1J(L^?EJF*wZk|FkS7r& z^2uI0&5BT60^Iu3V_xRjK4_eyl>^k%u0KB9?2z`kY!)n0p7K-vRi^p7>;9KcmkWoO zA~r&wswn}SJ?{^9@a<~Nu&!4gs~8!|3;H^Q@Or?=<2@(N>B?Sw|D&!m&v+D?8Q;84 zaB9U=R@Tq>jczK*@{v7+9Qq`TF5h48WhOr@a!ndkq05q>NVo#8j-tNXcz8Z|pZ+m& zy0g?ghE`QDQLIVRFuZv`sFBv`&o*OO_0%%|-3tAu29q*(2KDT@hSY+YIIdZ9Og@Nn zB^|-kOD5zoYc{)C$~#t6beiSVZb?80!H>ebC64$a_pA6g6<(n6!kytd@h9 zQBQ?j8fX8msq2C{aTlLV#*eU)#;f{`9v}|prxYt37FKN&zGN|{e%vu>TKejvG@NoCk{Elf=w}s`k@e$Wjh^C0uaDY=Qv4nvZ)4_ z^2L>y|7#ntnhC!*Y?d+gQqw<+mCKUL-zZ~VU|F|pIkdM@W^669HRIrJ?Po;V+*U$O zRX|6$%((003}eWsbjCY7PH6S=h_yIANozWYf*#zW*MpdaE3sW0;)Xx?3WjcAvu{-9 zYBkfhBDgJ4rKjZ`vq3sJLq@q=zKz}?I6GAi?Rd)*0G=mwNGHev4^(kgq4M&s24Zop zxRd@{6Bl=7Zi2ux-a7kWscn{mE;k%z?QJwj-7-Rv&~P-oC}~L<32w{A@soPiEnv=X z{DEW_3zW-vz@S({-A>Y2hc)d`v`b?ezdAe1@L{U|0!qcbDi}az2^}l1aPkH}<<47Q6SATD#_)bS8)8TyGae|Y zOi!&Qd4LvOOuz_i7QkkPW=o^%7;BZ;OABfOjcR+xHQU(e5_j??#&L*2T4LJBFwKI} z@OGwpN`KV1?6P{er;5a7!QOyE;eYo!;&np46gsc*?sIw-8sSI>4l6Gv)%6Uh1?Ekx$58n86@lTjU6n0o6IGmaC zYB|gGa0l+W2ix|U@9Tzjo&gRiO6>RNH=amFNZ3RV&M?Zgkr1DHP-%>_UZ+d@>0F7kgAk!kO-_hz$`a2N81~f; zTnTK)wQlzy7&K4@lZ`59ejID_3g28Qh)s?o+rld5uK|godsH@y&x>12oMoCK^Ond; z!-WbIg^tL1pWm;-aQL@@M$%$ABDTBUVQ(3j>?6f|Yq6n*3R;sK!;K|)`_ouyoV{J< zt*b+m;}|bw=(F%qX-Gv*FLjY0URx!J8I^p-u-L)jvNz|!E;Zp?jD!SDmV*>ZYXTqW zAXfUf7`q&F>SdiuK|$6>hx38bub^>~fg&E&({*x!<|?&n#m(Ds9c!kJC1I;)y2rT8E7S9I&66p6gOK-VPBCG1Mi*6Ak5qA50G{30MsN@S2IaMv z)QkJ{U7xPpQxD6|))_H*!#Z2Dh$(@88MZA?CMJ6PDR#r}NMZ;o0L6hr>(o$7y~i?f ze8$uT6?Uhge7t(Ett)ZKK5D=nM_GGrr|j0Ar3z`om8w>)Fl-YIbKV01@;AZJ!Z^|w zqq0fD7g7Sw&Me%*qFGrkrLhh6btLFnv1t7K*x+AH~|1U(CI=Hc;BBxJL>YXk>dAqK0R_XYWTh5j~f*Qxv@&VU?aZUiG zXPDN5LCyi_|7nRKTUBNMsVo0{bHc21s*)h@dY6j^sqLEK^S2zHTQ7U9)1JW#-7S8# zDv)LZ5+$>sn~RI_zHZ*U4_^=dUe(0?_}T(;HblAMRUFY%6f1;q2+DQdVX#YQmJ3K6 z0XOjHf*W4Cos)*0jSY>>AY`QVg4`4-5_a%<;gyn1^n|Zq9JJ5!6ciDi`Y;P8fe4w z^tujS?h=(xD@GOAsy!F96&Zxd%QDY5v3w^L1n*v6-n*rMyujC?0V^nUQTjE@O(agL zFztvKtx$C?vIN_TEj#m)u@}ak7v+kjYT+K1N$j8aI=a6plA3W-4aclKm>;o^)rQ!j zyI1P;&Ll9!gM9#qAinC35oh)pPfsBHaCV^n0w~wuUB$5wgL2VSBJ5QB;ys8uws;uF z=%7BA^Ap4rUY_x5Wq88rw(m&hT6rJPoP*R0ySYy=h27Dxo}{JLT`NHR+lv&AY|#zL z(BTdHnHxDmBI2?14n5TrA^$HOFG=vvd-xf^mdY+em~OLF0&VeU{VG@^Kr9yTi@7UD zi^LM{XMKY(8tiRble;^4c14A27h-k+iPQ3dUM#l{0O{=RIo0kn? z6(gbh*CgPMDRPr%61$&x40Jk2XrEd17QVV2!&(&4)r1zj&F{)kksp(w9atPw)Edly zC1J1Q#dIqahz%vo!FnXGEc|fDuwK;223Dt($EbIp2f6~m$j>Z zu7cZAU>fBUXovVHvKwu}Bfq1ZXIsaJixfFAfn8E*i~AA6?NE-YMIm^FH%N2rcO`Oz zT6iaFnQ4sg8+dsftsmmBKc`9;$=T6H?DRbG(<{HV{#9|Eh9(u)jYoK&lZ!HZ4w@pB zO}qoI>g-88s6v827?CalWMY`Wk)#n4NW);+zrD)G^Cv^^xW9h(q*4c`as7U0H`lvt z+muoQ;JR^w!y9j_&Pj!&Z-ecmSJ1aZ@;=oUe1Feip3~rQi_|GIJNXFI-mXb|szAS^ z!njm!$F<}XXS%i*j=@8ZZ@{U>^uK#PcQcimZ7&^bW`av%kxqY1g84f%vtTyKYc`^p zSzIAoPewT|S#}knzR>Bc{hE4Gor-P49u_CGMNxu{XT3{d1L~EVr&e$^k<8=n*{n~b zm&+G_p#34l_p*06W0?bVCJ+1CLPr9xS*;?+(`vwCk(9zYuBG*PMU*HMQlzq&MHLfk zijk|l_UK5nVRsH?CA2Rz$uA2i3L6BzGX}WzySiQbls(A|p*6Uje|r5sAbN-Y9%#sK zQL+3o9zt+Ak~}p0we_pk1*c}?S$-aaMJ5vhjeHnbc!F^Lkmg>!yB>_=;)Ow#Ybx(y zqqAl9&5dbIwVF}wo}ny@ZiY#gyD?8}K-12_+xx(+6hSFK4X{o|j3APr{L#r|F<{X1| zZ>z7GR$o&tC5yaOC~N;WRdPU9>Tx$ZyVgmRADJ(TpQzlOYYyoCQOU?$npB6(nuz2 zj|0o!r@8fIw%}}`L$^Z6c!EDol;B%iVyBKD3bxya{isv`X=bOHt_X9w4Bv#3y~?A) z&Q6=eKX6-wd-u&`wxJX(8V9&_A1BmqQIV=t4vLSJ@+1sz(_m%OU<*H^!fo(fh@&kE z_Y;RpKcDd{DK_Sw+13c1Z!^N@;|A0TEMmLZ7BB6_%#PDe@++JPzu9iF6Gxt z>5vvCZG;r2JA%Vl+i6BpA%*MBvzf7Af$`B+x&+o&XRWJ7NXi_4tuf8!xBQ0N{7M{1 zLf=$axp$ym6@I0kj#9BgI`ss(%=$5%bNy}OYV~YVmu@r6%_N^8o0pZOfiVL{@1^lHM6f4qs+PHluftliiWm^Ugj+x1^l=hHo| zuHM(IH>R;?1BjPG!YNft>o?X|qHc`<9E>^g!54Se&o+~=mzJkkr4m9z^rPlemmYir z)@MPwrkZtu;N*L8#yD46tg?dsV38@9%w#o*scI%N`&U7LaNHL32wj^2p6?g4AgGrA zgc1hCw3Hhm-+G;`qX%a?gigxTYl0>0lgQ=_`9*$c7!d*{oZ}u=y}Wm6!u9h4YO3o5 z4wyTG=;XSb^E&bZMf)}Leu@?x%jTJNnt5rQ1y&=~rrd)v-4D{OdPW3?(O%nM_QD~w zHi4xK^D#DwWzLLh&*-WdWpz$Zb@akK=B7}9kANqw4)l1YGh|eA9}-pv*rIKSmAZ~f zh$1@ged`Ir*gaSo5?{5p^_U3wytJPub(e5KF7<8hTTfG})s9|D)ZnEES*X2#-HilZ z50^G95SryVtP?a zoFX(`AZP=>)F8e%`mKY-oFZ#An0olao(a*@J0sj9v$dk+55In5bBqa3VYZ$*KjOMU zHuV^ja9*71ur#!CSX)?F>>}g|9qpGxQ47G8Dab9`J|LbawiGbL$c|5|4!4ESOg$SC(~#I)M5m(P4~!Pu)gz;C}qqpu!0tKpY_XTuDp2 zb>Z&>{nkRtu`gVqT3AR(D&J1U4&~ZC4cSp z{YvI85;j0(74oMo&G;BqDqIVD3xjWj->p>!U&%Z)9&(Wj0XNB#n2DMDOX8$BpqLuP zc2O9wjGzT6aeURhrTnSy0YlK7h{x=ljz*gw0ZV;ECC`Cm);@ie@!aJ!Ai2twoMTKk zOF?Il>_aRG9r!Q0aNWvos5yBkuvmn=OUo}XnE^}tSrGEJVcs{IV1vFq?8TxCapZle zeNKQlLc~uBaC3J5o;(4Mfs zA`Xz?u`oPS{@rRH?l-&o$BExvj*YEI*mFkrd2&;8p^PVRy_#Xy4DsV9V^ZLq&9q|`aE+Sblf+8A%E3eOk;8c6qB8hCDb z7TxKP4{f_-4FY~DE6pi#)#JN|x;8#3iqLE=O_~3}W#PrT5RPziK)8fOC%T;~0vLLtc3HJZ)seMH0H^pinLFeyI>6_j2 zercV$A7x(~L*CrhojZ_KA{}Cj81bG_*ug=2<+i42h)NkgU$aXUQz&6L-{4?|y0H$g zva=P?Dz_q7nvm|S1t#htr-y~^sa99C`u03|q~x?uP4lZ|EkCU($z;n`@&$T&%XEbT z)lXytQ#;xvC;epgL!Y=>M_TgJdTrtUg1be2;$->LQyd%#lejdaZdbMJFO%Zdz81qnMFMi9gt)61dL)eY}!(^(REJH3^+C$A zA9pzQEH~oX9iknl-|<0;w;q5L12+ujC^M``7m>9!6*@iX`KKnyJs%!lVU#=+k!nhE zHVOvp&%M;5)QgjIHh~!y@JFaWX)w*z73QCiL>XQz*xuzLsY`6B6H4r}_GhlStBB#;`n`~M>j_a0Z4D~+q4QmB`5ckhOn;E1<5-zXhecfN_z4KlIBX#cqd3 zf=w&r{w2{z;=5zoo35WY;Hb+lA*;dpj01`18nn54ZCSFiwzOIj< zmsPgyMuaq!&n@@8d(NmYz@hHP*rus$wj-0gNk>NV57@b+_V|B4nRm38fDlmZe z3kw`1)i~14Bt}a8{IMG|Yzr%@dSgd`$nE9-_@CU%P`&aU=t8!&x`INW`xPD&rK+3? zbc|c4nG<1*JxCqS?6J`oXI2{B@y45jdr`p>81*vspKH0}!cr$3NL2VPV*DlOD&k@xt4nl&LKwNJRt* z!HfK7xva-eYx4sS@b=_x!Hp?&YjkVir|X*QR`~yy3=u)MX}0@jZ@Hj94<|m_Cw?ZvM_pw55^}HRR+E-=)h;BG_8nYL1l7yISY-0WXI-4XGu@n*MsDW~}tZccQ(% zWfrpOAool81K=gR%QK1I-o+b$!4ql-3BeYg8#%=UjO+2P^1wlWGm^m(c9P-opc_3j zd5D!w|BX(GM$pGFhy;c!?dbWSprwuLTG>JQhQz+~qkjAvVU^s^9x03W-f}D6gpt3L znj-VEBn_iTIXo0hixoaPtO!m7X&!Iap9?)WT#`?^l|Ck22qS}DNlp9(xaUz!P<-s8 zQPjZZTg*UoHXW$E?O6z^pvJuQYyDnZKB0T-u?pc;X0(ag@rnCL)M5Lte@$x|oQBtZ zHBs*g?QosJ#fyE&V&)!m&kFnjhNpi`OXn9Pv}|#81^jm3@4)6Rzw*!BOE+)5c*#HY zaFBt|ah}4fmVDD0sibh%));ewfL?TVn3f<*Qf{6;YxNT*hOCkFGpA|zIOJ40u9X3* z8ZM|AHJv8_hk_V=K!;znSs{H(-t-0;vFvd<|v@LH;?rYP6R4u=&xO( z`v2#C`;9bIs8yxmSV0P6Utj0W zn?|7g-1Dc*TmPMG#tj2$Z>VuC_(8N*3f1JU{@lrAfm9fz`n-=Kq6?!f*+;zy3zLDi zf7VS2^gyX(hDy9%TvZQcp?`kn*rAt%lY`*qT6#jL#q*#q9hEAjnF_Th#tIq3Ww>a0 zmqw8t70dp4`goEXPc)lqF>1io{+Wy1ZXB3N(ofcquP$a-m~W!7Rdm*4hp`lv_{j@M zt=re04XEb_=Z%RLcsqLOt(`UyMEeU}T-4zdF7j+3@133R%w!=yqx)nYIU;B z1{%#e+b%u5=uZ#&?NYs$jBNWKVZEZml#-8v7dP+`jT8Ba-~F-x%Fm<0hWC$3Xg?Z9;duW)}jpu9Fk%c%okKVHlEA8uNzSzIi=qL8CbdIGq@YSvHuP4px=?9sVg@Q&-(-XC7*5C~S?1Yes8e+E; ze0uV|?^%xly3lt>23QGhF=^`~a2gfOoy+i1rn4n8K0Fa3gQBlj#H8718jCdMP_L5h zdgp5of)(IU=u^*|x*;|S*Hc2D3H|q;$4!jVq~iS}yw+vrg3`nS<4uZL{`fC)r{=JP zSSs^~l>7pmcygs=XIbC=L#{3NJlwz*LUw2?P|)x};Ln@|{*F21mZz#7QEa6_Ig{B- zhb1`?cP6tcR9+&8SMUEDgTD2(jtotu-MvH*+^vAvI|BE!IM%m*^B0u)=)u~Jj^Z1Q z+ulG&f6fK6v!0wB>2y0y9<5HQaVmySly_?T_QbPhBNrRd2>B1@4_|&n8TO{c8Qy?0=NxcbtkMvCAS^zfe88VC58qF&Xy7u}h)s!!E`fjDi( zI*@MPQu)C{ysjsf{K%*y^ZmmDL)Kwp7(9(4KyN>>kk%U?xNc^;NJ2B6#kFBlWEb z2X%Zd4z|@kTqn{m-SDi^8J#Z@-}n6Jc^9cQJCN3TZC`EcT^4u;dsLH@s~$Bpus{EN ze(qP~1O-8En8mwdvT(CdWnSD#f@FjNvrZRoG6{Xr*IwxSx#2=kChu{&quaE0&9jPc z;Rn{@^JzYlrDxY^0qZCu5(qx_)YHM8=M-d~%liJvYNGobZ5daxpp(CA^5a}COm>-TV{&)1hy`x5&KSiA zEQblst)b2VjJk-yOJNG#P5VGvMmXXj-`I8G#A7R0aV??sx|+T;k(ii*@XOcm9~QKq z6U?>6(w?GJTqvmU%R=gQ*oe!+6U@}ZWwFMnc*{JIp(El!`sMU)D|Qrt{Cg{6-LeYAp;)j+ z?|y7?YhGTar;|V1-OMN6Q9v#@dV~d(I*h>`~pU$6~o4bb^p+M?tJ=5%g&)c zheXGi4HFPjZSMa2Y5pCF$hD3&YR&TZ0$7#&_(nfmU)>&n}NI5U1E&ZZA?NtK= z(TL{OF`hj3`;4Zc#&|7ksb;=DDj$72mC&Ol)U_`2DaZ^*KG_FbDf_I!UC9!X7q=)` z$H&=mdMpL9IRQ2%{V+=?`z%O)d#U##xv>$(#273n;U&5a&LdYqaxrKs-c0-{W$09} z=APPhN8W@P?l(}o;o#*=sckBZ+`HgP#=zOEiW5YJ&qTf3WMQ9gTEYTZQr!*UHlfF* z8RTx~aPb!J`|z{&zwJ!*W|Y0?m>W}bXKwvg8X4da-|s% zQn~i1g^om(U%=s9g5F-ZOw?>9#D8blkUGNx-YH;`RoXn`Z_?6YyTXMm@Ytp|m5AlP zXdZTK{4&B>JGYfGXc1zeJ7eF5$OB$mMoxupsKgTv&HTQW@~wyw2Qu&$CMxE`!`L8g zDcfK9aSG!drtKUb$)83l-VKFL7B5F(4P096Rtj&VuJs@q@Ov&|Rx|qppg0oUOpXZj zpU|-O6cx9$7&fXVdP|$j6q75DbtMH26#H~=ue(t}g(Gx9hfX?2#Jg8(xxwB8bmYA1 zp3RVacK7TyyJFT?Dh?Msk^tfOwzpD_lA;d%`kLH+=5bqiKCIL;LaIK++tX`CCnCVT zw>|bZsaf_qqZRlZ>`os$RI4zEoXyzrDdHhFq1ke|y*#8UgRgr!*xK!joR23utGLRu z$R&XG5B%E6=JYgbD^AN6By2~^|IBUt3Q=KF*(`Krv5Q0!d+oDcJUc4bO<9M+?{C;)Vf$K5vz!%gxrb3&YCF zjmT*kHj`CPB`;_6#vh&1IO` z?dygJ4Vf_R-`V&N?>7%OKAh>V#NneTptC>3I_)X9R{7PL^MIn2Uv%r)D;S-;HXCKZ zwYAv!n#Hda%-CXfEPb(NsLO?7$Ry*kMD7yW6hs3y6Ly6uFoq=K^*39 zczm%a8+hlpYD*=oEF+%vW$GcKt#9)b)NUE9{_xbCl$*!i7DjFK@Tq8X7ilq~b1S z1Fd^bQw^*BkD{~iYwG>mxQ(=QGnH;cTH8_C* z0#dROW60q5oaaB-Yv-K%{={{?FGoaWg^{3PBt8~KUlbblekM(`xxwI5dxNpE0AEsK zPqo9dyEpt0`a7EZ%EDP0EN@Q?9VoE36~*09N-s>+0|Lr+Q;s;!G+U%xI!`|t)O)>i4zeWs?$V9N*Urks|re;|=tPlh+ZFtM&2O8s_j(LO~ zRh-up4Vs#!*Ydf{EBs^3QG^_=*#?-dpU1hzr=Y}KU_wJ6J})FVoxTFZgJ*kEin^*z zSS3~8Xo=^TxTP+C!uvn*M49d^9jihlv9 zu&kW*5c85N#qyIh@lFr@{L+P(GuN(iUkI^8zC(Jy)b>O`Y!s@&<_V7cJg^ieA zDrqrrL+%OqJb6s}soc^t@ouSn@CGxH?cwxSzW#XrpOmNWK}whNua8hD zx=I+)?!nX1E+9qzBA~eGYbo4|j(I!f10oV~UV^3GMb!6LJ0Ck9%~bO4&q#1A_`;UOCvFm$Zjeq z19@p}VEJB_QzB)3TU{Jact_j#O~VFc{+w+?8pB&(w?Q#O+pRIcu4WMaXA8^XA#3Zy ze#(%k!;&};i>lT!73Q>IH58bI=~ypxni*{ak$Gi$ajr&X#YMwnXLtK1_$&Kv7#+_V z%4T|YEj4VSwzXsv9@L1!UAMpYswS|8v(lFyU=DQJOr4{1#9KapsJ3oa5V(^2-z_d+ zhBwaa(%rlfc2<(Po2U*P&swh=6WqX0TBQF$27+h-&ea_*mzq-HMJBxfuc+;G<7ZF2 zNp{{cdO}}cX~_KAzTq)_T2HkfdBYG9QN!-3@IClK-{O{s>oox24J}_@1rY?a!)Av# zs!oZ#gmTG+Xb=2rCrAebdu0^;3a+)iGiwOXGBYxjLax58=Jno4F_w2pvAizQ3s!~1 ze17NjeH*}ZMP!kslRRB(g{_Jyl;f z%lmV2N>{o$Xdp!6t)u1*|E?+OB(^qgL>9tgJQLS?V0V&J(`hEqtD3U`FX!E6U~XR% zVy_LaRwt0Uj-TwJW4J^YXc<{qDOb~E<(@<-0MHP_lq)mfBHxI!AROSk*&OVE+qouG zeDsSSA;p}c$HDvdAWO^8*zflyTkGMjQ^fm?WYaar5p^D)9)GDV8j7#Z$q|?kzjc|- zUC)JoenX08wu#DbVz+)TnBSQ9wKevcdvlC$;qvXJ6E42($Ih~waX9-+`>)7K9+z#h z;r4cnd(C;*xL;$pMgET1OtNcjBs<`O_=E8*=}cD^a%r`za@X z3VP$~amP#S)oU$CG>GOrkrIHWyi54=*g&v$V-T|$BEXu(tBf@y z_hIT!Trw8RhMI>A`2T)eZuiuKCSvGeMc?Z$?Rr`%^@airmtWDH0+3)4s5+t*n^3(q z>XsPS{lKFJO8QgR%f8lsXBl2gnyJ83=qf$tS>lddq<;MY z_@auz1j5kOqc=~P6F{-ladl(bRB0dDO}|{8&`NwOGmgD6Ysex_Va-xr61KM1Tvz&; ztSNzL`ctf!apK^obfNNfe_0D~9%Gvlf5R*{yggCBW$LXmY6?6F@!`P1E!09o;O-&w z_3+M83HS`*G+JCgU(eR-;L4pv* z@jfN4s4DY_67*#3jbeSQ8un#m$^~ zdVaNw&2l%^cunWUOF!vY#lgxe;l20ZDd{3bq6vhYK-M>0o%^)O*pO5?)0cGsLfP=W zGe1fheB=dH458n^nj}V=$NBw}uD+KgU2r8xa8g?gUJk%d)>~O13%@q&(`h_%j$R^l z{!gKiUvIW5M_?q^tj{|<=UL{QrC|=lk%GN^@E?MHPGppAS*3fJe`jg<%2J7sG|$BM zKr8(bhMK<2ASOjCNmxfMro*7UbH%M_?^5~7C3q^NerO;hQi&A1+tVGk0p|;YdO72C zd)wfw7Xyhgd3?CV2oa((xOATpRg&A3UkTO1l{C724r~5wU}3fL2cKfGvb@@#u}879 z+^qmV@Pn{HwRwzRS@ia}zZxrcSqzvg`f_{Fn<{`i$);eViK$=lE=IXm?28QKN}HgJ z$&V`{eEn(d+D!^o#wu$NJj(qU!5@QcbUM32nEte>#05W|Ih!rnL%sb}qQ3x;;e+&1 zchYz4v5Ap~uL&C%KUxN}j>rD1pj_HrGI8;ro44-N%WcWIcUShwR!Ejrl&i7mOW+ZL z^JOIzR1zZPMw*@ydY`;CG>NG7lbaRn^X1vi-$iO{5gCiP^_c`2hAhm!>PO(48hKZn zz3F{uxi_w&2|66ff9{#98M_WuL$W>HpoE`0QQl;3$((*Vx*viT#?ct^sFV501G(`5 zawMJskYyjEX`&ovGL$v1zBoP@gT#Nt72mMWh&?!>y6C^ir-cK<3m8tmMaT!;Dfc_b zMt{~aDBoOLUWE2{Nh$0Da#o2R1tB=Yo|(wD;l95!t#s_r#RyY0i}X@d(3ib8Wh779 z4Y~6%HajliW8ZE2e~<_-G4d=lPCQpumpT?^PFGRH|LR>_R!$N3 z=A6ek*yX6ADYAlS=@uPK2L&%ees|}c_A621;s*|XylHSXUt7;*7%Zx?R{RnFGeWIR z$btLRRDI$Crc+chM z=G1wbzZ{5JJlre1nb;utm`ESI*o}Rse8)c-iN=4uu14oa{EGuDdv^`O#b`cmJQ!^2 zze7#km;6#B%CyMgRFvy|SfN;M+(*ZLalD7%yWuU(Y_O^n(;}Y?&!^VH?T;mnXcv9vR%@UMmrZ6(Trfgkd6^O~|UKYq)>XoeVcmyGbsgCLSLojl%f77UL8wHl4V zh3^x#vXl95N*$5-O5iUWw0x5fxlWe~pfJ(dx4_HKIVrh4>CrvYpq>~&GUF4|VmOxg zcBofCTNg*WTayvypvVv~=u0AY7MNcRDBs!tKqv+rNZm-GUmf<&KHUG5GQpVk16#=b zfjNVHI_X@-mCEh#WrpNcfs1FjS-i%|-QKI9kY3%RrpsGQb2U3l_q?Ck$LlBvZfjoe z^wlBTX_cI>Yk~!!w{ak(#{cUTgP^@@e+IaQG?b-T+)l;uX0y40|3bnqBI{23u&AU*Twli0{z<8)FwT*4h zHkVEsP-w8!`98*NBdt8$PEGF*!{-n(-L^L9{0;ZB7~`e@cm8f)H`Pk@T5(&~caO7; zTR_$B5gYDr0;p**?WX4hF_93sw;0 zH|Yn)SNED0%1g z$F$@^e}}1pZd?reI<$bG)L||9>pWi0iPBWGr^9cQ_rk=HmGA1wNtJF>3CpWI-Wbo4 zf@p0MV?C3Uo$TL>YaZ=pQXVuL!DBZR1Pg#Ew@x#6CPco23+}vPBg)SCTC_uGR}Zq3 z3hcV15KXP~#k0OIuEJ-z!S_pYq|F^ZEO*dIZg*U=C&2J2b#stzcfd!g5^WI}^&7W% z#Gn}8p_%WZ(nJs~`(5;w>ZxjY({pIMmiWX=f)>E%l!@!m#$BiZ_Z!mq215uN5D`sNkmR0)dE9Wc?TKdL+7I++CXiF^22CJ7( z;Iqy^Pg3~1^)t3<%!^eYN}+vOEv=zGxU||H2%Y7mk3CQEz*#Qs38jIG{^<{dlXD(h z)U9SnSRx~u>6Yy&SqoUdkdP==w%1Z_80NCeERSH{VmOvA*Ia1-WFZ|alV$4@XA^CT zqJLuSm8Y%eBQR`WB)HuG)Ao^~haK_VubkdL-^gfOJ%x|mNlMI8N9AmsoDxNb>8yRc=_!(>PElM8Avyp2nABv*{ zXi#NlHJEm?3)K`xr^DL{3N?#SEe%A_-zG0Yh1R{esJHN|YjinFae*){Kudbyg z8}uO!43*~Eym~Zm@XbP=>qZ@J_nr~6r-WqAP24sWIsbw^d0V7oJ)ll{!c8-lmV-QO zh3dc8Sot!AG$hnM4vWXfxW6ZZ8XFD#Fqg}qH?HQNHO;wVGiOg@Xf=m1?>W{A+ufKq zyX80hUS;@Uk8O1{olOCi7nV$XAFLqu{Y#q zXhktC;0}5pJl&i$P})&HjCD})sq5JDQ6B8R^(G~f`f&iU$>XmDHBC^Qj^R-b&VyCX z^Z5gu^+G8hxx8V?y}}|g_#Btc-a-2gSZDxI>5*SO8j1TTG4`gC2jmJ8mlL~ zFfpypF?X9rvd^rVDmlSJxfDl=9l2AASo#%|L;ErO_Vt!BS`6VI*9G(Vqz#4id>P~n z(x0a8-5lgb*BJPBy$|0mNH&yE5X){H2wbE--ie8+6Im{LlQI zZ0^5&&MVW@rge{YAq>(+ZKRxH6YsMt}kN2DlUOpESqBfY^b zSp#yTsgh{JdY0b;6Q-ZBaeH=he9YaB`jqlMUcWzpD@)_;Q!%bSn)KT|Y-?r1Yvzi^ zS&DQ`3sX2qcmqKh-Q2HB>fb()_XG$mRE_kha19M|9{7A5wbk6-JT3OV4l(QD=`d%! zzGd8!EF$2jPE#6KoM86m?T+$i!fWXw$dxGJLEu$4^GYHsVevKYdOg>tXbnXWLDbR# z{W%qkVW9v+-GD-ExS4#CFAiCL0Sm-2lw4=Vso{M?=y8*Wvo%mQoKgxpF$UPotn_g5 zbYRaDW85W!Le%Q(=c&TW2Yf{n%cDGCt$_hftxZ2V5y+K|WlQj^iXX(y>z)_&0*9FP zOyU1`wb0uw@K)^UT6cJeb1mE~k>bgMJ46}n;|~WIz->w;WlLSKqGc;WC?MKs1{Slr7DtlS7Aj&fZyGGF+cw74QO}=l zd(A`T2->&|j7_XNlm}f4f-1%uwkSP`)$8aY*j8GA<)sqC&e=p{^xE26Bl}Tv^~fM! zFE-ShByHEXhYlZN95TwT^N+R?H%(&mOepcx1cB1Thu$Pa1kSn7|8-&7J5r{{ck{FJ zet$c!J(LLutR>nJGJ{2rCW%k;=yBY}(&cx!-k_QXIP5UI?MW=Zk~KcAw0f+Ji_}@Z z@u}B?iay44SgWP%wv35@RZGd9e@qqBP?g$_`nV;)!{4Xv!{fG}A=1=+#;MhJ=?SJ{ zGHqG(8Q5O-6_7Wom`y3tWXLJ{>^YqhFDL40}?`^DBXwgPyEa{bg%Hph4@jube2?qlu=?jb&YiMyAZ&P<5vOk(m$Q){cSGJ8`4w zQ&Nd&v)9#sP|`<3C6vC-vFM#{{;UBR(Ith^K%0vwa)<)OKP~M9T!rkxV1}lYssS{x&>sdfAig0wAaV=I`wye3w4#5+tJ!&#M@(FsiP>M%k zq`1NkyigmHjeNgZAc)}6({QQT3UJNRkO~S(wu#Me;5&MPE$RcN503wT;)b!VT0g>; zc4CCuDTUDShx!|QkySMap=zZGyc_2G>gsDp@dT~-I_A^owQ0HQdcaWM^ZMrv9f7SE z^a!Dx5c2Rmo^P;An&5}dKU@<+pZBzfZVaJHbKft1k`K!&$;~}P-L*yv0E&MLKLixN{XM2I2Z_K5l1=*?KnD2ZIAMOGylR__4=s}MNIATcYjNN$Q$*0&d3dh z4zA53onx!H;~z(z3n7h%=Oz~FV{8K*DH3qZ^MAW{ypB0>516PE2b`$)m)t!$O@W^E zU79-c3?bPvdjJqxkNVIhd$Wii@F)l)#%H6!6fD!j|^m4h&$Gw z0($zC#*Iq|*Pv89o%uAN$GM*iF>hW#$ohI1?;J^bNQpS1HmHdXc6nOaj{YKHUMuqJ zOSyHDjVZ3GT!ulj$4Af5iZZXKh~ykejkC4+z-}|^@5@IC`~O~Ikr;;U@ghr$lcf75P{zb26}FZC;->ylPx3v^E4~O+ zyc1C6vuaESQ2OUeBH{#wQJT-q2KA_%^807Ol8c=@u#ByBsqI>xf9rQdhkqM+uI6Mz zo}ptFchX7(gv^f{JU~2agwZ}$xIwNxI-$Tv2)679CbATa`?0FF`ym4$W!y2lBtEK! zaS<%`a5SY%PsRpVn+~1WZ_Ag)W|>XNXRPNYJaqBj5J@zJ7fWaoSzB}FcB5+YR(?&_ z-QbC~#UoN2=MWkeCY68B->;uFFTUpBlT4n%!UnR90*S_cHX;iR2!73;V3VWmx>3UIa&&x&+xVLxVmuutS93EZ6|RC;BupMC#A&VJ5!A z;?{ulT5F3vqL(q8!xauTgqbkuqzVSI$PS#$C2!|s#ljutYik3g{VV+K-*Uc>?dfJU z`0act8RXkhr!&9OXucoD(b14BLw{Aq41M8z@(dd}c*aHsz?U4|avDxXe5#McP98n@ z?_Kx)H&3a5q??o`_;W&Rp}$3c@V)EoLj^P75aP6SZCWQ?I1^i5e{sz<;MXSXm%+N7 z80pLXVA3c>EmD2nVeV&R-b?o^_19b2*N$nfiYSE1FKE={o8^hnc;4mnzt2xXU6m_%7ADzJXYzOTAns z2HfXEgH38qFLOa=-}&rb#|MjBQEfkd!Oykx`b+7Se~6avOR=ynDdiDn#;J1;oe;|p)% zmH31>ypbY3LL=Le5D73;mV<-Tn8K^}CYQ%wAy}Wo1p10CdB8F(Dgy_B(9e0C*nbU! zHxCKz+!0cjo|1}h7>DnDQATqOXSl51`Fr=)rHa=ZbG`_UOgn-vPRT0HXu(Y=D(dCz zHiWMH-q&V1qdyAup>BU6w}NLu@Y;cDsJ}A0_HYlYJCw(N#cgm4Vi&MUxO#uAV}LuvFhLHtZ;Z z1TW67M=Oy^rQ9_%kma0%cjoY5T8py?QqqwT>ExL3$m(8or)&9Ui);0^7F+Dc%S*Z4 z(6Tc9`)tyu6A!o(=Dk?^ALvrm8(&%%isn0 z>c#M~Huv&5fq%`aRbWmwD{mCbJN5V4-uoW%0)ATL)@CEfG1DD}#w+!kG2`wA zv3Mv57l^LO^eYM;2R*6#1S zQTPKBJk$>EBmOs~AcnCa1-OJ{H(dU~l)7lYfo>8)5i+07y+$<6t|`_K$F}!RCVI0q z)6t5{Xx5rs3s4IKguscA`QeTFKLh`?xJ^-sP5G8R%^I~BGlcLgsaBTczO9>GL!2VnjP;q3 zrIdL^6(5g3LONf#ge8Puxgj`{DrIxyp{vAo;eqx{N66L_AD)UewgSf@q6$uaZOCO> z*q{U$m>cD-nY)bn@XML8^6Jh2MBxo;1&^zDH^0WQvnsQa*_6}+=1OUmx=fLOp>kFJ zuztooYTVHPzOe%76BxoXekdf&NL?W^8{#5-@B8D>l~F7x%BBGl8_WTHhdb^&_}?w| z|J~}7sU^JHv9g;$ExENRCiX)}TpQOkei9Ap0cN8|v1=Z89?I&)V4GuCD&CwgQSz7u zRiPl0?&r7EO`^b1OQ6H&U+0IQc^A$_%+bO;#YA6AB zr#^4QtWiB6&;hQJF3_CFp@PNc2G7ThM`mVY8K?W4PZoXik77whpW4-}f|=6ser~%1 zlDsS>5jJZ&zq&`1iS$Jib0O{<2@*fHWn`4=YLWu|qq#o};fFhHaDsn#^x%($xRZYo zd40Gue|hU-yQeeQGQ0RDKQKcL9g~6}Ofp}x(y+^6;)EZq)A`85eS@459#2O;hZ*(% z-O_-X=4#$BcyXf*uD^PfxW4PvWDr;!tv_p27{C~j8hT2JGw(~)5n5EGKYIBL^87Un z69^WCvJrx?Zomf<%;lemp=u0-5xV>GSi_-rZ9TR)n2^KeYbu+ax`vH5ha#$d_=|ow z>2_NfO8b8JK=g@2@;KR=m5NlC+CXh+_dTfc6)(^?!v4Qtuy$2u>d>h6R{}8-codA# zTJ|;?kzlufH#2!0qFz+-)4OKfzoG#1KmYMwf1E?T`%} zl+6*n*CBxYrYf^8*0vzEqAh*H-H7e)dXlxF-rzshmb#@m^Y=GdJZh4r(3Z}`SB1MZoZ#ya(dpNE;tdgP@~wo`y3`~EZN zhdN&@(IDepWolmyCxj-Z`l~PhhqLn0jo7g#Q2nrwK&3ZZe@iE)CznaKOuj(%iZ+7# zl{t^9q4roGOmH=0BKDyFC>Z|<6;xAFIqG$t<{a{g$BNvje!(7|-}^5oMP%_S)RuLx z+>0R>pX((v0b&il2i3by>5^I^ydlKwqYnB|6LtBG$AhC+Zl+bf*AJMFj%qqsFkbh% zmm3oaSx6Y+0@*8?7;#){x8QM9jIC+Dow(5L30eM&?B$f`CTwH#)zXjgZiHTp1tdzK z!vD2y)`1E^00UupT~zh?CQVpEv9lWqj8`I!+Edh(tg7R?3NMrxLK>~(X?%6d6d0~v z?I|O6`>4r-`}5)PgW;h55OPAkS$hL+j4|?t)`ou4`RAHaIF1gv&L;}^_64WmiwPS> z(J~=@V6^|)cCPQed_$G9y_rh+GkYp?{|ZgXib{llA>3I*v$V!S@Q3-xOju0~Dp?l0 z9Kjhc-vL1~o400AI{T)B5@Z90)_dl4m+YRKGt0SA7?EldYVt+fe#ER1bVb*BBAkN;qy-XPq)ubgS9A` z-Y&km$MfeQl&&CZ_%I^YEjn+-3ZAIG2vT1_KW|)Bp+Xc%=a-dq9C~`FEH&l8qsFaS zaC+Z@X9SHEi=kW%agGV}`7~C^3<)z5-nRr__S|yR`8Y6FMQ|4WH&&tWhEPO*py~B4 zwPNzwP;2W;Aypk6%V9HBlbPK;xHWAlSxS%WD2brtb~w1p+oa@&w{8{Py;%EqgLy@KsQWyCZ zLOjt3UB6j&?Ai5V&Hs+Jh=LSnx>UKyV2U%j8VH}+ZRM&Jujx`ay|5+wnJzygzM!@kwX-Wpv*#lxm*x=!O$GYJ;KPUDsjU*9|F#1owP04@vS`Mh)0- zwVS^Gj<(8zS?aHUG>q-7?xO}kf-;qi3!R}%v5M1NqEKuf>hCf$eO zkuE>I($qlD{X|$+w~7U=kCx=+(+ylMXeEbK&Q1`r5~+}E{Q=fip+?U9A#OX&i7sUh zxb0MSSZt2Do?ooqMatfha-B&pB&?gG+YJ&4qEwRFi>`#q&P&=v{VT0?~-~Gh++lD{(is;Kn~8YV1rR)8@oN7+(4zLOrT)`)IVDy+FX_~&1e!gk zMR^u^K^#Q}+EvO|!~?1}lUXt`C&TY15$1a7qH*+_6~i!ovFMk2sd8yms}K*i=}NPr z9s4k?fsxjjtul&hKVbB43HghO6VACoU*vAToq{%CF5dUUsjaAnxKD2SAOH zhXJJ_y|hq8T*FFFH`&wcvf2*0&9#?A8^(@qY=d*xoU)57RJm-d&2-UPttF+;0^XkO za`wu8y3j2$0mN+u1JX4;8ec8c(cdm`jYp)u|5m!jZ=Z51XLL*azB-A}tg<(u=!Ucv zC)Br5pC6&@2~;*5MA`hFb)HD1d38ppM>SDHEWxfBC)O{g#A$wAgVCk}QD2wN{2NEG z9k@uD_3fF|1^6hAvN;kO`yWXFDcwqTN^{dvg)NW27rkv$q44{DYdHn}KDnw@*btf+ z!7h2Cz{E0WsTYgMKjIXa@ZnLgt6JBoCriHRM^?-qpd#+~mU+t>T;!GyqHbn$aE#>9 z%8k2Ud!~ETM0)i`Dl2HfCjIDqAd~Lno^|nR(ZozvgKDpIJ;A07Gn|0ini9FS zy>`scMEC&6VDe$n(Z)l2qX(+??G{t2r>T?)I%5oguleVZ{Y7H`@z*?dLQ=Wq5c*nk z^bKLObg!NeGx#FluW&8G>bXvy`o~+{U)aGqXGe=k#G=`3sdSt$N<(W0x3ir{a_;N_zf8QY*sm-ruFWx4&o%s$UJg#vSEH)p#fY#NQ_K z{0ODT1TFoB6oAw^_SrKDLrr}k|5eLFLfia=|L;d3WrF%&G9+V1Vi}Z&@Z(py{2XIe zQAuiEJ*HYS5X=R%+?5(Lhfp=>BrvAP05V8PQNsm)HXhkG0{E^Wq_>#{L^%?wdymIy z;fB?%TI#oG22&Sv*TR{L{*IV|(8$SQuVyK0lR-prX?d^7u=gJz9vyN$3DTi2IDAIB zr`hnWAgbX*jw62$A!kc$@OPtLIvrbdOj^YTOLVxVbn_7Di0AOS#Jr}EiT}FRDH-|3 zoqGvdx?gS{=9-M&X3`*pe@-YcZM;nOH+u6mnr}B<;XTP?ifULsa;6`+(F+Rqi_P|*X$yblndNTQ0@rN%VaY1MN`g?*ER@YRCf1=SC<~cN4WJxxBBcLI&j#L|{sxirp+0Jw z18F@QzGDt2t%n6!AJeKcfQ%FoTrA`e)C0uz$)KH&_=@*4lo;E(V*63XdH5Sa00O$q zTaVlL_P2U6*5zr#BuD;jsFTup?=eEIJ>D7P_S!0&~cp_3_Y#n5p zAqwJnScYWN*2gzrn8&+%W&3U(RVBy!7G0mhP0sEHp<6#9uDn6=Yn!L$+&-VtI;=ZF zWj1!r!=MZy@ikDE)vy^e0OKJ6d^#|STTJiqL@`1dY zbbQ&$t8vMHJevp`rO~la8MS0_P4*{PH~d1r&fM7~;COuQq6ETmBJSZisR+yH!O%r? zNdF7x`*tySEytLZJ|!NBkyzgc1s>pH?bnsA6BTqYdB9^x5~&k=c)ne(e!P2;*2pz61rzc^;`f8Nt1Zh2tbMK#MaCn@$d!-Umg zir}fO((z0>oBO-9xybfES0?PZ4@IqXQ)~komb`RyxdlXehGkh$KL4+?a}FY@Ofe~m zl8y|NYX^+Jm9f#s4jFIj!1ufmV-0WrV!1tdda1fk#(FPyfm&*#IdZT&0^mz2@Zb(~ zuouV!4XSvwHo!A{9*JC(Ht^@fP|9eYRC|0RUw$8{(Vk}tzvRTO=l1q%kR-o9^>J?} z{SxLjN*)o$XOdj4IRWjc(I|yyNakjPEsRc;DKH%w;j(_@3Vk&ieUJW~`vK6_=lg_z z-z!P4&d?0Hlrg#H4ZnBOq<^Mpmk$?zkQX}w1Dlh#xZswL)TAz~e*kF;@5p`-lPZA@ z?WT3b!HK`TpAPc^R}z9vnh~8{511hwZ}dla<9WQv#oP)A8#m;}u{?R%MNrL#_?nty zdkY|D_MznUB9qLcNx6xVB9-k*ji-lE?qLxhqhEzqDn(;;@l8O+u(nTM;*|{n(wip^ ztp74F9yWveP~GmEkvXW6Z@I@IR8T7Oa5Kl1)wn=pel^ST)55fwxsGRHTKaD_jjhB7 z!3&%$GrrnRTQ_73KzqTo4*sC~F^eez0AK=Uv)48IHjbUmjpE?%9M*$ltIXro_+>GX z!YexUo%iT?|89dK<0|`CEaoNp;yH@df-|W#h39eaG3TC(pa10MPL2cdy6Iw+;iC<@ z4>#)#>*igm)F^g;pi**OR9Xj16ckxCvl~C`rkZQ5>!~LUsR6b7B;iYFMhK&aaN}3_dVo`H_qqCS z&-^?wQNd<2-fduZpY^7o#FaI@y>#slY9KuRthvo`{E(tvyLfe3#l2LfDRh8qnO@w& zWKXKQS1hJ223)@%g4O%qty@b{14p@g&F$9(3eF1n+5H95fB-HSk%va0rAfxa?elE| zsj*q!)66KsDWLE3_1UyCI^rhm{=Auzk&i@jgy@Gb{6VdkV@xGYq?MjD*pN?_?X%X@ z94I_p6I+<~>}Ua$V~o?kEJxSA#LG@pv-&n%O@uq3BYQDmBTw;EM5XeY_n+L7d2{)8 zwKHAn=Wj(Qj^5W{(G-#u@5))>{()i7-Set00|dQCK`|-Fi5y42k@MV?$c~zSwM*T) z30rv9>ui*`p>ki)c1KUif})AF0jI?BszV&KdXcw@sq+Zg+EYIpi9pDmvRDnET5WYTYLZ)$Up zF70DsL-;hPwS2gu*7~VAOmnt#GW+V}pTnOjZNx|z-#v?oWSNN`?o8qBOa~KTs?{Kj z&RTbJp2&60dB_8z!!<0#8FD{(yi1ONta1q!$At_`a=0on;2fTj>)z`HY7+EyX?58K z!T1U(UupFk9U!?Pl>2(3Q{2+B!?ekamgL(2&fAPvNOm1L zum9cBuNGEhO~t0}FQ$<-bR)EuVa(m1#X?NJKDRWcdp2Mvewqey4D+luGD2VHar&0^ zRdrUDYp7{(w-z5a#wrb5XCRJg{YN)#dXJe2nMxZNWd^7mwyU6O|LKUV{;^>f+-#!! z_X=tczfc>TE%y6Lk{8gZg6)NqpL`B!VhCT&zjutulL~!!^B77Oro~W-3z7v8>SZ&k zF55}-#_x+YSWKMvUne#9c5q#V{NWUtePcr&%x>x5ZQ2Y+z~?(CeYOB{1pzelPjMpK z{lqoeYcv0m*%A+G`8FPSeEY0%oGxtZ56l+KyPNoilw(+(4>KLNT!^GH$XYr=_P`Cv zEWAZ3_V^+6zviYH8AP~--=CgIqRE_eCcs*gT)_<4jasi%{nG|?X=3tNIKEc zPR*bJVqXKPj6-3)7r!A*Xab2GcJXxthZbhESnsP?|L97zV}cy{sD!`YtM@!nZJ83U zG8|3VsAL~ATwc5-NL@Klhc9d}Dgerc`}Ya=v3S&$cEcRh5xoqh!-PEYAL^@8qnsQ8pvh>WMLR@Xks?t7cuGmK%OJQGB9kzZ#6(Z_`o$0pMun>C<28E+R5 zY}qS7%SuU9BE)}cODN|k*0a=funB8>>+`k_#Z6Hu`@}ZBqppUvO9>X0%3fwrgbX;_ zH}I(*=69Ui*UVLy^-;|^Wu6#s%HE!?w8pD#UM7H%2b76Mvap8*It@KWm65};jU2Di zdB272s?7IbZ=TZT3+f2cx#}f*d5Z3?{d>N))KkZ$sxZxV&sV}-^%f)Qjrvy#SLuL& z+pCXxVyNr8okCDT`UE-5N>U9fkrpa~i;u?E4&>k0b#H!0K=wA9CB6$~UP93?zo&{~8*W7R!8Z%duVXsRT>O(V}C*EupIKM+Xf7LHnzO_JhlPPhvrrD1uNV_h| z-_CmfPX5&$(J^(i51-mXma>GHMgA(N0ROiK;j}!cP#v(Y3SfN(4KxeiO}x%k!{D>N z|GM|4!&_AE$MXk9L0!_|eqW!@3@%2S#C5|;6|oKDQSgW;&MWJ~;M|8C)?I_xovw-8cXk1PXMe=wGe z5qW*YNH9xb*vaxN5%m0CHTYbpFG*Pc!^GA6e1t07C&DlHFUt@8yiSzE|98tlcll}{ zy@4o#8zR#4;Rjl0&#i0`x#az*$#0S%>OUxwn5x6#rUTR z-F)cr8H^Eb7TI!zwj!PL)njigEwt&wxf4ts&FoU#W3;{_u9&X40SB*zf;09E3`pJZ zQlKbniWtdIY8E8dDq-ut#4(!0qfhT+G1;>J^(T)Co1chY=A9b*P*(i!7M~1&%I7=$ z55M@jF9hy(7ZbX~NTqkcHCUUU7SR-2(bhP+jO3D+?av_-S4FgRqF z707??cDeL)OL4GS^4||gjAZw+;hVhNdbqu+lCmYM6XBgxO~E6WnVqMdX;jWTCvKW! zBy5oqhpkIf@xQSg$KkK~vnuzL=!2BegAqQ$UA#Ea{ECBrQTGH)nx`c_Bmy5Eivl8x zf@Nly@QStDftF?G$1c|Ct~&>)g?zEN4ig+7<~UYLs8WlKSqj*Wy5=wYv8HWV6q@bj zvDLM!_uHA6&b$~sX!rBSSI2m&FAjJ}z6hanU1$S^ODfvB|E;Y)`Y1+aVYTkYdIS5s zA~OAVhQS8D@3-9_@8QP&t}-nG#gU!#zgy)t1fC%xZ60;xmMY=;>gC=85a%%IoPr2i z>(^M4KkuOF25V_mGFw?&Id|c<8yNEJyokSX#t`I);Jydv&BR}+B>p!*RPSQYklZ`88MVony0Fvkf zn&wHb0O=f-VR%~Qr60~JubpAG^5wl_PHTDdimF$Q_v|Kq3UF;h zgZa*EM`VWv6%3)iI9&z{nrx>8w{I;0Gap7}eRy(Oxojvyt+y471%=kCHV@hq5FBcP z8HtC%l7w$IU%V;A9)3vB2pg6-G-CCwug`rr(&-9GHUwh?)zTKK^%W3qBYxrAtk1%1 zwP6>k1y{BN2@VXtYputkwb4s^e@O*0hWJ;otkb4l9%p%%AT z&;$J^oJTLeM}Y#UJ|1Re_{u?6qo3-uEV_>>#Vclf+81kmEXi47`QIf?*+rh0jZZRf zDS0zaZY#fW4P3$~7jx=vRi=0Dv^STN^--|ge(NoHCsxjC0kD5V+PWTNLdDdJv`I!i zH39cGhVBi`UyQ1ftuGjnvhqJUiXa(BEqwcbcTLkWswTj8^ znS;of5WcvMz$WGdvnnt`aF$F<*wODWVcqG$hk4_wYoOAu$y&J$V|+SYU8zqZlLTPD z`7ZT<<+^OgDz}LvFA+aWDC3U;QS)lwn<)0{_J+T;>!@|iX@F9sGl^s8sUxZx0CHkN zcCLWw^qFm=JQ{<2aP&;W9gu1V#Ta3+QW(;r?OZz>$AJ+F)(5y3KV#wl!A6S;RmI*}MOn+y|xfHV$+nScrwhSna?B?P;Qp$u0&F?y-f{Va>Oc*HQKKW6rQ{xu$Mh9QM z(~hO$ha#|KQ01y!aB2I@-fBEcnh`TxcgpJN0S)a}XhY37vD%K)wz1=!10kDcc=!iPX8zmbq)o9U}V5?Gb#3A&{1;A6YWHlE&w_yyinZLPhizd zPZ|55EOAVMD!pDIhUkE@oghmt>8#?7{WXj3JX&svP%nE$bU=Vq|NWv+_wif-{uY|| z;+0C?CtGgj(_)h5xaiO6r79f3BeyIYDfNk{B=7P!@o&oKTJ&UpUNB!y$iE}6NAff@ z=T7&e{lOx#JDt;SSyt%8&apGfl{Xk+Xq-!3lyk_y2y?}aYV^^fsbN-qUDw*$2w8*l zBK^GVg!PhF%Da%GBuwIhAjnaxlRyr2+`a(JGagu5AR$o;a zxVE8q(T>M8Fe9tvoBtNtbFYntUO$+7e&FF@JVSZfR9jcZ_F;e_4Kx&4e>&7SNq*hU z4bskBW<)#H5j5Ub!GlW|NGJMDSz1j*%l0*BEStJ0YDfn->$GkBkD+Ii4d+rOHP@Jz zdJiM$>*Nz>ZQsMCXZ|hN?XVI9YlD1*I!Vd$t+N&fzP_cwgV~aiwwg(B;Rb+!^E6@wr_d?zadlX6 zb1R^on`gO98X23PNp=|S-KP1YHj)Vx!VarG?z)kj}mOPKP-I(X0i6egdK%7CR2}BN8u? zK+-DmB?pGNbcXlLa$AE73iq<=!>9F%(&7#G02#UPZJ*VkCan%_Vz~+CbuMQYFas-Y zzRoD`frobwT&|%^V-I*sPP_Zz6F;BLSQMOc~w0hS%~x%4|zKEde|GtHWrX!x2`9u7le7f0yF(WQoYARgw=uzgLm34!XN_ z1!Uqy;fYsMT@y)uSri%Pdz7muCcW_Wc)s8s60EV%h~)BqP&L!m9eboI@m`=Dw{p`< zon_+1&kn_68?Q5mx{J?tHrItWp3q#BnznrG+$ao_{qh$hz0uN+_Db4-rb~~VS_j^) zR~?gl$$O7y!tQ&JOanSY;B;8ra3wp|n1#Hu#+Ndy*w#Ye>*0|HA=k<|U+&9?1}XAV z6MilWp!WZonP#3fq^g#AL~l#6EqhpGnRMoiO}d@$3S0G&1+JOQP zGs;%K{F^jR@O@xX%zC}BQW%?x-&8(Ud{D`CnkhE(DiZAc=ZSbGAA^?Yq4C$%KV`;! zrisBWg}{fCRP-C0dO%SmC9R^PmhVs&h?yAr@NtMFmtn>=iJ&S-Gff$ttzjls`@~c- z%?GuO+xvHJbQHuJX#ERuP6BTYU#!}Vi_ zuM3hP7Wc{JuP@7h%a&=+lO`YSOj>F~Z)=pdh1maaH7RoZmfMqshO$W_h3Q2#4$ttl zi&qDfve!gndT_O;f{qScZ`SDy^uBy&RUyS!`~NjI-yW31Pr2>r4tH6jrIsO1Z29QX z7J^9hflgjMwWJ3r3CdIvshV0sKonF^zmeR_k=>N+n2XI=f)p@~lbq~;wiOaz$`7uv4WP%Vvh zn)w$dV_TayGr#fIcoy`St+jG##bLC(`#3P`^OjX0a8{Kc}&$Uf%_86EJEJC?5ytNtwINAqg2$+2K z!=>+|GZ=Dol(c4TD?2LK6)?XHIh%NbvP4&o(tbRCb3hBYtE1bUgBYSE;SNN9N9K~K z)fHMW0c<(ZpITf!mB%*W5iEzHf@v?y#WjxKApvlf!rns%2)mVxYra%fJE)YMW^U+Q zwhwn7);1B%W&UTf&)h=vXYuIU#9E~kh`Q~YvPR3oG}HQY-!K1Okw*UI8!;%F25^^5 z=A@Tej+mNQ@S>#L_m8_uqhJU9SM(WTLbR(_Wn#PNI@*ZP=&CADVodnHT$uRr{tssP z0hBj5$p2EOm!nN#1khs61ZsdF7?Gi2o9)E%1 zeL~GTeMAg=TnD)p^~;?S-ZWr$-&CuJNo~gOPqPp4-7qhTfexsNS!6yR{QS%Nn%GMp zc;F|##XF5FDz9o{HMChU0@Ph{V8isYuQi?SOQY_3~2GOqI`$8N~{$a6bp*R;-#vN-?zGrz^fC(xtR zOzjWB&{!4g8|L3KBC1|u(m0|8Z_qVfBtx7S-*jL49|Me&a4WSK7SSKX6^Oo3|0eS< zgbNyTtDC+AqkyT@RI4(vhopLcSsaF3UoM9@7g=jw{q~TnANk(sSKc?py{*EpKlF{x zl^~bz-TIN5tu6>A(xrwgJmi1yR@Ndz`^oGPP$hGdRH-*{q`?e}Qs*K$*?jqeE$GJ9 z9MM}D6Pv2Tj-{R)A7~MF`F5oC-SX`0E<%py4^{1yt{1n2PZ@3Q49V4PXM73x3m)J8 z2*>h>L>m@$cIy7@sW5)yPgLp+ez(ot4ZIf_}|{8#8c)}YReU-%$jc?Eu$h#C zJC?br0Hhsc6Z4@TcUc-YqBTwdhOIE_8WV>rcZ5}*G9_)5YY@r_@v-5 zdr`E)0~+wywi&_xF_IJAaV!zXk*G`!qd00Oq{RNjk+dM6cWsAO+(9n!wpXGU{p=e)fI! zKy*xK$>Wltl0U?!aWcm_g!|4+d_}dj*0X$ddoN zROXGotu99zcbWy+RBxT7Cj<-4Z!7BabVqe@!Au7nLvvc)(>AyzRB4Tbikv_VXOT_O z8^<<@DYE2T+XvrkmG`-&N+q*|%abcwa+J!0UH##PyalCZSKnDEUu1IK;vEb)wRc(E z!fln0_#=C)C4C&Zz7hh#{YP6wBnM8`+o&(^_UAPt0URCXKJaM!HnR_=1&nr-GsP^D z#glLBH(Hik3|XeLs^}9EfJ$UfAPvBabn&_dxs&F#!h(53^VEg&*mev-Naw^nNA{`Rz$JzG;-*pH7wI6^k|RpNVxIYvb%etAI_nwHJhrwa)e2C;L>Axf7JSmf=4Bdyz%8FZax z{&7*~q)6+GhNlMSR>2R6xc&W_0HUXV(GQ>EXjO}3W!}9K>T9n)t|dKs#h0A(TWV|z#=!o=*4Gy@y5+a@%YMtucKfVfH>}9}_R2-tMRCLJQI4jB z7^@GQfQ_u{CITDc6x*lEP&H4ZDWB^R z+f7+cUTv@%LGY@X2dMQ)-Z?&NxBlE09!6MPzC~=_3piH?YVL|qjU5oTWdXv>$0Q&< z?uK%&UTlkwAWTCGVxLT8ymhF5_FJ__;Cgn!>mCyfgL`Zr?v&|uwS;(WR;x7B{}2s}aU~@66M5!L@h-C`FchHBmE$&h&A|o(4O8m%H{0PRKJ|Y^ zjE7Rdwyd+{Y`nw(k$w%_^kqA1 z=C|`h;rLWUYuN(MVNNRq9Z)0fH@<7?juSM?}Qv*5_ZwAfW z7`XU*!LtLwR7LAysXAXl_%v=z)&#gmO)!vrQPCZK&BM4oP%#EGd~<&wh!y$);n#!H zHTz>0fr;&%wf=}dh)+A7h)(+&Bq^qGU(8MNIHZV4dGEj56Oh_>bMzC$wu~?7tag5k`1-ybA;puqh zJOtBZzjw>-Q{8%`;`C)GNe&sk!b-UWTR#74nWsGS&uC6y(8}?8?eu0E->p9sjTk(8 z^akM|{^*>eDCwwEqtAcYph`IL?}8Sxyr=lI`M#ZwWMwD8)li0zqswo91?19`@ODjI zgm~+c;FS?02`u-m*DUTxmr#bQLqy22cNZzePY^--v)k=}1BSN8`V3{4kxJ+v4)M~V zG;V@lwTlmj;q4-uCtMewnhXT{2fUhid@T(#;z4pFbUfU9u}m3O043v} z?}e`A+hZhtSo<{%cPE}4M-!al;3kAo!|5Xqw<);TYI~Bde9l4Q{PdxuKg1XYL=(q* zmua!<&m1Luv=3p`vj$Bq5E;OpdBcwK!vry^LCa6Lh#739fV!hV((^wmE4TCLBXIQb zI>8k@w)6r9UnYu)Ve|G|x`id#LNn#wK1a-9LOm^w)_cFt`;I@>krK|e;rA|T5o)l4 zg=g4~hd6YEqri-_!tp~eiZAB(tkiCU3^k0Zmv~R818cpYcibi%9Vwmkd8lkVQE2K& zq6Hgw@$nx6NqA{<7f0~vlJrJ4%4hYP02YQvz*}OegB^n71jz+}lRu}8;l}qQRO9Rn zZv(2B{Ud3o@t20}9PLm3yCiQK$)DS6QLNIKc}3>egl{oOB`IK+Kuol)OSC{EJOe7a zM~NO#b@tJ^U0*dnUT9LXr=j(3W#peQmpm((N^O{Z0nA%A(b6HZrwZhe-W?p9Rw)$R z0KaiOvhzOQDwFQ>-5?2$`GM^0$jG-wOYdbfx7|QG$$RiIrX>gW#4$YI&9A*IORAD> z7m+@9A8ptO4l8kT500I>up*s0tX6@mq~B*2i(R*f2YXPqmbM3BisyDf#ox@w`N``6 z5f;|FQl8e_udDv{y#8LrA@FUXA1y|~s^7TCYS5sAu^p^ZB~c_`-KOZlWqS38wZI%W zCh?>eTdm!QEA)C3+9^B7yS;CqdG0}tbCzT5@wqno>i3tdU;V?gy%r{grsBqaC%Dlz ztL~?1+qQ2(WF_j=u>@^oVm`Rki8a`ylv)pznv=HS zBfKwu`3stKgc=RvY{QP?qM()9G_|n74t`*F5F!w!H0Q{LWg+U_$#&r{z9# z04NpK7Lcyi-)kd`!WG!;dw4L}gG#gnM=}mjDmxSvEXaxYaKQGNIxpczN(EVsq=l=j z_X{Wh+a~8bSMkxoWS+jSs`~}*x(@6L8nGe!p9727|JGp2%DOt5{=zW7bb4p!Q-JRf z<4~zkPgBYo!ytE-er0-dWCl@RzTaynI`l0~T55Pv{aucmmAmdrBKnH3ww8}p{rFd; zMzKoDCO!3JGBf>6DY3&LfWxb-XFn!Uguq%B)uwx9yRKGjw(Qy_tC{$}dG%&%(yVVC zW+Q)K_7z*n;G-miWL8P*mi2Seffex3oay`MY1||sdn_G!qaEyQXXJwAz4inr{_WU3 z&HL|?dCT+>OB1$Qa<#U5+6}ezB3eSfGNUyxZAq|+ywwd%&hIEgmU%p+cSUmmLCLaQ zp$;DESGr^amnM$R*-O{DmeI>Q=Q+r(_%xg_4H^tgiC&Rd)caFm90+*M_+rC%VT#9w zgwEe6Xso&jcnc3rxHr9IyM#5&t6yS^E2S)VGn7*I(i@)-})OWmh z{9egD#`Q$ui|LDtR;16t+|C+uuN6rAxsdGez~DvV!|_JpLRYxG9q$rEV#)IUB_h%4 z%3F@A)7*xWjS1%6GXt0yDXznZE;Wv?B!6c2&=cs#R#FU`2}f|&YS{Qw7}5hB;c`kA zsQ81DYkpPWB=n^-%QjrJCQUWl#;2$`UI+f{c?qbVbkM($!ZWbuKyxq@GMgA+H%NfS z?ft7vVTYhJ;$*4{-_2;Nz_31hxMb1N_lu2{MJbYRPZ8ehPJ}a3;tzW@9s0cz0?S`I zmEW0cdRd^_H|xPxXX}k+)7U<(qN;U>0n{{;n;|*xUIw?-r$2vPgbWof<_q`#mK1xe zh00}ScI_bsx4N5}cTZgbr;2*S@o+oQqxQc`bpKtV+6!Id@gqCJIq{lRB}qZ&5+dQ% zPL$gNSo8qRA*7a8fO*S6(ztZN-Mra`w>tzlXtD<3c~%yZEDhz7b`=jI(~_$1N$7nY z*-nL-1a8V+s?j5qdJ0+*gUh^~n0!DsuR+ZCPKX^TTX9If^(Vk*s4a#04{$}IQu@Hv zzTNdzcujTPQC$jgK%Nd_JfO>A(IGW z!oT+py*&Al*x$FC{()UGG@D2EIM?HAF>FfW)3r)Jf?dj|&-&MeqI*Ekc{)*mZQ;2O zSZT@8`vIzBf46H>93OJ}9HO1fYth*y3`>TsA21&vwq@hf{nGEHTS@%ZgIAdNT7mg~ z1%3dI3-C6FzgQRzd$YpT@#2Gn!Ce&K$R)nWW~`y5?habrmHKMq?m#l7`7HL<0s$C3 z!b_1oR!C=~d8^~=q;Z1&YAIjSA6}6$7|~I0_w+t+n22 z79`+VU@e?m09MH?{JrEjCqFdDwLC4-nx~X=I)Gkd--`o6d>szN87$*oYE6LC%|}m| zKMf1?Fd7Fj|9$_OL5c3VJn8h@@riEC(0`XW>)Ki593=^+3b&rDr!8ydJ$$cwC*mYM zx!i5PFtK80%>7%Mf!lPe4?DM4txsbRp(aPlX3JISut|p6i8ij!@ROhUw&|x#)AF$= zeu*Bd%O2B{P)jtbsdP%6@uDd}BSv9<0Mnb2!pEr2J%FbMnEr*UVLEvB2s^7B-3YUo zXDHI283iU?;WYVNgKC~U?MTPvn*@)L+G4~quiAvKe8Qe0F!|ILEI|+w&^tR>C}a{s z5PZTllr)h&J7`-JJHh?mC8l?v)Fh8pp2urX<4PHI?znE!YNQ~W^yP$Q?!bMW+r>)< zm#IwM=vcEg=iYPbzppa>^x{L(LI?z!sL^z^ts;`3uINDJFZQe>fIxc2rS&|U)`snF zRb-3uqawCTS9E?&4eC6o1{n(68}*Z~JePN@_GRgxs&+6-k~f6${}3iPl@4AN8y1naJo(N~R39xqR@>~;XrdJ2jM#ugGDEZmn1P*SH`FCp zKP?A53DS-}Q754xg_VRcBGQjIKr-`$X7_xmF-PNjc7^nVC1<(oeFj3+4QZe{yC+tQ zyWJ2Vh~aP3oi)VexhF=;_vHoq1HrJ%o&^)DI62zEV>O@qS+F#Uo; z@s%R+0WCQ<;ho>cT10!>eXo(%C4P>6nbW!LLFnE1q>(zCGqU|7!#i6`MJe9=mHgI= z{1|j&c|4+bUoTe>H$3dgT6g64k>=wab&I&d#C}8N8nz}`rI3cMYR6o0j&f&~l6)sd zwu-4@i@`|)(aNHEou7GPfcVOXpN(%Y2*Rf%0j3rzhsihAaH$dqufmMyOrr$Dtu4!- zO~Z+o`v*_6q)Ke%m#{;=f~p>^D4pxS-_Pzub;rR~fr9C4k)+EwH5DJ$#w6FT8udPu zTF+u@BmY-_t>NZBh3v*}dykk(iJx6d+N-LPe!_jOoc7G~lhk+p)9XUvRWnyZ1~@V; z{J5G<%v@F7?M7O*qp5Y|F7-98=w^S-=pE;Oluogw+1gxcXAYRD=5T z-ugdetorR4U`5ge1;0-!!LUno?V}LpnqVn&6BQ4e46Igz-MoFUQ8}o8xx+$7 zYO8+C%2)h10m=MyHjRO!+Q~r=)^$Use5&MxL?LyLLVX594zF=2 zAO$yz3Gszy3#O-bQQdn(w(d6@=Qm=sExkI*9-Sz_G5C7GRW0wqL_&AHiGRGwMtUKy zU3WlzFP{U!=QxVUFuCm&eqryU&EyGniQv{M!YEIuXN zHxHoujRHI!_fLPm*SOuqV-yOQO#<5jbIVo1%d&(LpU>F+0NolNvf{bsmJHHgs<IANZ*&;Z!*T{xKA~)X#Hl=*Rhadk(^4JmWlJq#{9@96w$ev_GOT38 zEoy?f$d8S_Wu2&SFQ<^@qWGEFtF%wW8sITvqak%8kG-9myrNwjxbOi$LADMK$UXj)5Kq=_*n?w;Y_8>pqJvJ~-dg*mD3Bp!tWrZF0?gbsL2xWYE+JTZNclw6kF~v&nU+W#KsiAviI1G7xh@gf|T_y~*+q&O2%ET~jb+P7H5j<+w98?X6a7RJH(eE_<67cO6 zZ-weI7-Ge;mMh%aUTb|=s<^-D=W_5C;8(1)Bs4V>jgG5k;j|FpoK*)W$C*YWs;zok zwNIG{rYW)}p2w)KseVE4hmS|og!D`P%t@P)bGZs)aAIxz`Pwn-MW)=r0{d~y1mdQ* zqiPE&;6^!)kBgM27TBj9(XWVIgsDEE{EB$i2oSmrq(#ssX}7bQ>0e*Zhzx4>pndmJ z0Fwe}dl3c%?zPRmBmzLpSQr$*Nf$zK3?#kXJ>J0;2RmAJl++Vd0lz>g$562AxkcTQ z{Sf_>zo7pp$MS!df<9Jd-f>8bk{psPN4wOuSrC;SY(K`iH@uSj(lRf%vpQ8SDJd~k z8DN)ISuP=_Boz4HrS$DeY$O8nSo@Z)l{voB{Pmm8kqoPDr2(5ksg}V*u<&je^|_)V zndLx-5Y(%|f*9{&1$rAR;A(^;clS=6oO;_q!= zXFx_JD{@~9nRKB8ZQ7b`=ORf!+;4>>f$ZfTlLTs0RtBA7Y?F(Nn^N2>T&p&2+m)x2~4UwoRIPDVacc}A+c_J=XV6*zzx49|qo;({U?_}&66JbF(8 z`g!;sTo}YiIQ#2B7@_U7+&C~zF`5-1M3+FTZ#0LNR}t0oUu9Im*>IXT~Ut3GFfb>Gv% zvb>{c5NlVpt9&^ z@7v$&Y0Ua9bHx`8?kF~6OjBmITwfu2TuU7b@>F=|G#3mz3Ppr#U|r)BnqXk*pdpk- zcj#AoX|QQ{Io*WG*v+mIx*AJh{yoQMh8cJp$$tWHBq9lB8grGJ?F5-V1J&cVByj$C#S$#@;1M*!Y%#Tbd*=An^0sP+&Z_>- zFW2tIFU?l<$d+$o{G8iTQHs4zr~Osxwa zb!4yQv0UVKujZrcme6sO`!G*j>7YzFaf_E@<_(4wn8{Q0Cq1!n{^LDyhmiS=b&TgH z+k^!*1xWeJwTJoP$_bjjbZI2Tewkz>FGbFKh3?Hk0-6QnM`YHUq=>_U0G$|aQ<1AD zq2_6vDhZXh2K_M}_Vf1+pDX!WY#eW56D`PRPC7qM296`1RR4Gu{(z`C*nP*1aF8G= z??Y=p(U@}C&MQ!5<^!H{y3t3$nJV(liN4)w^&N-e+9ZZFLcYM*JBsEsoO&&VVTbQl z4cr9h#O9^IuEE$L1O^9G!H|}dK0@ufW4&`#v+o!BgeKlLbUhV(5W{pcD~=n@93Ckq z6jhq79g)ka>r%){JJP9G5z|%}s@i~7sMHtu*L5X04{YIy5WtaT28iJp8XHT`9>grG ziL=0y2X82?*#oX&9rl%?gNdiC%7=4~I@2q)rEj}v$d4~t-i%WrCb*K(1@Jr5jbjKW zw(XGdIQE`4xJ(Jaub1b!?hAUFWmz(`$9u1F@^fNX!P0(F3tNIev;9Wr+8TQw^xgk! z536O}m&yF+%HH#i-GspLweCm{0-~}I_8ErN|2RhI*6*Hmt|QXZ0ILN_4=cL=J0l`NQc16XFtPXaV% zh66V_11aNg$gz$vnF?UjZpQxmvyo^1x>tOF^l)`gA87kSIzNMQO+IUcCY*4UXg|Ile2hU&bO9^|W+ly9LIQuac+7{~1Nv_as{PUK! zY2qwbm6G?7SW>M0XALcPA)EEP5EgB+M;SAJbI{eZ0~%##vXx%RL*^s00u(HyZM~fi zHjK|u6w^*y&&9Z&g^*&LnMmw*o>tFXCieKPV(%5zspl7uxMe6lyaK|{UB4Ewk*fcY z@q8M$B=c1z<*gjO>X15!WwnRaHQ*~hi9F|zr51sp6e z4(87;)OP2K)?mDsx$-sdes-d4G@EF+@uZyhd`WZ(mB-~rLS5TYxAf}>-wRK&a2fwy zidZM~Tk<~0^8y(gou zN>#GQzb;Nl(v{@Vo$NoXc%8DpPQ~tC)EW?>pQ&3izIjkATWpt1(!Z{}ZeE&*`@vtV z7rep85IdTo>nhv)(g5_-9f%~$MyaIg6^o}OJ+pn)diw7C5t)j}kPHVcbJe2e$Jac+ z?lIU;cQL}cEz!eRia7jk%hhuyTuN*}SZY+-{^ZEaf^KK4!@Oa0=^yN3gZ8*N>V){W z$C1B|7&E{y7dn8t_CYARk!aUDpO-D2&t1Kn+8hb;spD?qb)k0tz!>#zT{{V(Bfgz+ z!A}NHRbv_@{=4)=tBhWH0f$V^`@!>kR0!AD-IB1IHSXsx^nFse&>aE^=x}(p1CxGU z4h>JTETxLfyrWyFrf3B(4++Zy-0y~K6m zMHT8?Hz%A4!Yi)Y8e5$gKeb@eJ(IavZLRbgzpadvw!% zy5She*w;t}=*G--==)dhur-I!?Rzp8sE`6_F0lW9;ah3yXE^lj0fi3Hc-_$Bu26Xf7xc&dmWnSPQ^jO)rHrGokK zfND`Ko+0{zXr7L)KeiB^EoG?=q83h1$B<$OJ9rU5N4o`=BU(kOb3;}b<;J5CK(Dq_ zoGmo+&FBJ}Zl$P;PsM$LXqgW#vDfs9d5nTd7qoUZ#cq{&I!9RnMup@KAL8=C>WvSp z5__R|d-Syzvt%XE1KenBbq`^zQJ5%~MO4rBlSg^gFX>b|LfG$D7)d4sNf)_XUdy%G zW0->+kH@U??bZ_iu3jbuRKQTsWIs~8DBKK!|J4x6a7!e%i$`nK^V}mrI4W5E%gfQB zkaD(Sw+{=$@*ggrw`brG4=D3o;eco)>@@o#D?Vu)*cy9>5)cs4qqnJBMu3v);o2#xZ|L``L3G7)UYtoZJm`% zEkjx4$NY(zZOQnd245^**H6mJgn$*tM3xRJ+asI2UF&|$R%YqQq*wZh7mE9~53Y)r zt(H0O6V0LwVY+4pd`M)EG7>z-&|`btdCpFmpfCm_Sjeu#rz4J+n?EvtG*$~(l@|1LG^^q?1*j}3@ayAtPS+k_q4 z_dk!$$8V6D&8CDMobW-Bd-OA%#jyI`lfRs9ScD2$q!U}c&vpXwW+&(B_3Si4X^V%8&G}R3tmA{H+*tuxk&Q$Dq2m;O3mF=N(KT7{fQsM`=^JA zuvll%Q=A32MbB$pf zOxub`x|eYMQms3F12;MgU_c&8Yg)KIj!7uRu%iR}drI=f^_k`Q4GFJ}Y<^wt0g6bW z#-4b^ssixII2L$aLqXyM+OCFPF{GvnQhsqmwtx1gBNHjCk}P{s)D1a^L9N8%h+zle z6n>af-#EUkx(J)o|K1vm`pt!C^m{RBbS$xCXJ7{zJ-6N$il;rT;g8n6YrRNv>i5c` zaCvAs^ru7|-@V%Qh=Y{87IboprTkRoEeBodc)|2@9opZG5AOWMn8npHm5a6OnNfZY zwW`Dke!_OETG`L9R9s|H$M(1!k`+XxG7ibw%nY$#TL$`as2vlm)Z;ah6P*1R{Z6s{~ie;oZ@dcpiwECw2C8ND5*Xq*yH!%UP7!@P_R1WI=bK!cz9l~_qycfvM+epK^&@qkDy;r!keNo069L|)IAYF`mNY~h zGMSP?$Dl;Q)rJ4C&qwFra`gwA%PUA(z4c&Q5V#O*IjdMFc`_-f@iLl8>T1J>2CrM= z)WAUg4(>w=IM<}CtTfCHjz^v}x25!K=Izl+5i}26ay0ddD66&G}d)m9g&l+gz`=-BRTr6JQ8fIg8 zlCJDC?ipIGj0W03F6yA&9++D&Du*eAlJ2?K)>>baics}tWMjKg#EM%j5vb)T1e%tM zJ2Y;^AW~sJ_RqqEa_rg$n|YQ#2`-k-6`VE?+$_f-Ssz^fMmX-~cXx~gTX}+qxmn7r z)zlS|(ACgT&kPIvE?gGU)> zKPg1N#(kPXt;5?}d^5|QK+uwO`1by4yEi$9CXu;i_TSZWdCD*^^+lEZ!Mti8it=Td z9&m^w_{fSxojxefD4vB-wah{c7)tK2C=~a~6A2T>ul2E`rb-R!B21f5QVMv$1}SrU zYkoP`PriV{1PQ!E79lxtD}e=xd|x9M2cKBD&31q)F8_KvsJnRo^0jtfDsS|b)3E?n z>qqsutKfcGpUl_sXhX>!hfzT!+rFSx#x}xItg;!h!e6N`MoiLY6PzBW)T<&?u3lwL6Wdo|+aX;UI0(=TrSk=!RT zx`5HK!fyXU;ZXS zf~?kBn|Y2q#;iHqm>+(Ltbj5Dtr;nMB7`$!IJzMtDzntxzl5HukMH(Tg04K(gpbL- zP(5KY1*es~V?$8u`~iK#)Efb4ggcRF?dmdj;D_ zW~4`$tpvCM&E>RYgn{reya9hiy6fKKy8Z!JF{ zaVHEvP|7l6aMwq@seNEt&gqOzs#HGoca>d-Vawy{ht`t@m6Mbw-}wFN9_QmAAv75N zWVVe$_J|^@%ay)c&TE;WJ~scBxL_OM&(!bD&)a>J&lS?-)&+%ndUDUz$#sJQGL~L4Ts^={2+E?f3d&qP9wSeC zwOT*Oy{7-0B}6|HDJvh^$-BM9GA2M#K>T3-!&QT+fP;R%@p0{ohHZW@oN6#oG@b#e zUY`;cyMa1OE)tvusY3X_O%=CfnKr%e-EWTPg~6#z2n~++I%4oKz3AHuB;=4#p2(C- zbDkP^zmM;4dlCfC7EUN4IN8d1Ozs0jnZ{1>HSfiqhx0ZaYMaqr3Ol^wsPjI=J+viZ zC`E3^>{dIDN5>R}w~M{q&ZG0JBiNQFsPDtWhmQk%567=4+sr@v9wd9gOU3-If1>c+ z*w$ozTp1?(JHcCya2oGtD9y^1R_svi8B;FNWx1siFAF)OgWmEW!4GXpt}0?ctj~&L zNBzulz2)Y06%C~!sS2&FYo66bX>|x2z=vVcl|o@mVT7rSY-+UxHcst&O#a)EQZ9TK zF16QN@a@p?3HEu@SZ6Xds#=MUMGSjr8g)6c?nU}!82585h9X10+|u6KF$KRG zASr^EdAHt4OTSUPniOJv4K|vTYWe z#cV^i?uKMVtFj1p9Mx@url+T$h!f3kIWwNwe@Huze(aa{)|^#Ie)b~k$VP|p-Jn(P zhWSeZ>C9KWSZ)gGZz}cLMbv=&M!fuqT`{MS(C(pG|Kyum7Mx=u_Bg$yXl;z67`9YO zU9ww(0z)MvG+-CS8ZXD#_~w=n_bKD*0+UCfJ7~^7ynHPwc37WA?s2-Va%hF4{nq^P zyYlbS|CYR$kt4ZvR zLGX}Hde~74)oV~HNQiu9D|n4B#>#{&O=OD!w7daVf4b(wKl7hXnhsdMXW72)xw<&J z5woX@V_>j`nNgUzrIc(SS<3>GyNzO18)-9Aw$wfWs&CI4(;XeEmwwAWzVm)rpM5?( zBAb)L^#~12A9vu_&$YHzE`fNeNI`>6^kgKVaCIi`GpV_E`EExWAtecZ86PG+`lyZ2 z-JcSJxEDRYVs4;n{WGo4hLDv|<(t;)BTJ!mKt6AoIH(bsqA;uAyM({DOeULTdvGLz z+_P4v!0y>iGE%*><(w8s>%@BpdR;=&I@Ee~rJ`j2B-GiR%09ZRSS8IkOS_cOx~_Y@ z`czhTD?hn&*kfs(7~?9+ruy*ewNyr#iT2)u(_-cs@-~C&yT4nyc}XH`rEkebl_U}T z3Ym5E*oa^h+o6i^X{^36-qXcD<@;~xiF~|H9DbtfMh|;lWn%%o%0aBa({b)f#XN2_ z{Z`EPDdcM7^3CP|sdu>lqv$;2*?j*m-l0{y_NJ}9Yj27gp{Tv7Ei_U)2>G`5E{fW< zXQ;iY5o&KLW@6P&v?8_s|NNfkesGUhuIu`obKXbnV57d-?8G?;=vwp322l)EylsVw6|Y*2mpAWzo4XOeeuK9jcw(a0 z(Xl`-GXt3-8^%!9wK4nw65LAHUE^`(H^#T6FjsIQp;9$=drsxqZ-8n{i*h=|0{u9O zt~2Em)X|aqMW|N~txXzJ$(L!5@VO<%DzC~Xt$QwpTX;Z#DewF%} zQV$efDZc*w1@#f5=+Dodv~o_+_M-gwE}47crB-YOPX(){#PgPi(Q=nBzxbEL=Adc@(YfF7;6Vq<3+0CzbH_!gNHRj-9V~Ivsj<;QcoYnF z2R(Hf88;X9is`}j9p^Y_veqLbaOcY}+Iw?Ny4n)7Ft~jBsWM-^wL=N`*^td*+SQ@X zw&eOGTb9Ik5#hPUZw^zxZzQ*Eq9(#Qu&=lNGcC`m)_FpfKDJu$ME-~Tvt-C|DAMKM**>jooq`g!P? zc$C6S(*WFQo@1+)7gZk$7k4L3;{F_-bd4?tQ>cWlY#0yjd|^Lb1xareIml*}KzN())R@mE)4#Lr3C?DJ`3bk11t+@2tW}HlYExCEnprETM*T zP^rG}o5S@dhIs27LeRADsr}J345f4C+L|?}Ae!zDD${r8CZTT`+pxbaR;()P{e^uI zuALIyN1d#SPG6?it)Jw6A$z|sGOmaNfyD5LxZon*0MedOb1$6 za5hv7YwJ{;=TFcca!_i1t~Kr~--}!J`tC~V`^~A#SIJzJzHrAB8|*wde>XpHcLfO< z)16Q0tX}d10(#OHFIuKmV;emjeT9*5;c;<})ctND$fwF}%4bp~98=H+VC5u_S-RaR)k^Lk^xa+)}8#7!Qo< z0DG7&oyc(Mb_j5d{oxh|FQ$(AHCuOfk^sTt9ezY{yLv!vq_B44i9`Zr49Rvw>>KtB z<~vo)N@?ZY4~G>BlUm3eo@k&A>8y@2W$&cstQ;MvkOxiLfz@z&qBQoCfATxm$A*+g}TYhY2Pt}nsV?BY~ zV7=5VVxvC`7H+-`)yO|?Q4DM-*gy*bP1Qm5{!P+9^m<<0k>!&84AS-?lhbzKDjZ=f zc#5?zO&?PdL4TE6We>8)ZvN-bo7JDQp0QV?+|0O1(@Xb^;WM+h|54jQw;IY_uabF! zknjifQV0EAErM<5oA0?lc8#zIcuy2dB6^Z3?PBqTE#n=0F@v6yvfAe3@@f6C3NOBQ z|4n;aj7b|F@NL>rWI}S<3mn857qId?({j#(^LU&~>}$i%TIWDzESOI4I>iF6mmD-*>??$9|5c!b}UBq*Fe-HxhHc%cF?``VLYUr0ssP#U^}8 z>3z1sT9l-f@l`=-{uO31I=4;%eV%S`V;~)JhU$+q_Mjz{n(zH zr)*}Yo9|M=J@(nBUu)D9z3|G;7??vNKJk*8bv%@RCm#2>yCrC;+~5Ce`0k5T=M^7X z5RDDfSIN)ybg9n1;XdoyDoNG0YO?8sQjL(NaZel%WfP`rq%-o^Xte3;inXmLBZ8gu ze{~Hk#Z8ifXvGg_!XXR|Xx01ngeh%$|5nEZ$%Y)ENeJlDjW)#Hpxw_}10}fP&nvqkE_$+#LpNgc!qq)Q{>^l8gE%MUz9FQsTFtZ{nlN{S> znjyd+)dB=Y#dNJAX3)4o9-)`Hab$mVEz)jdGbZX2=&k$7Tve;??uFfWMYlkOO~3N= zX<}PQ3i6wIz^k@!jn$41Bh#80*$(4wW~7ye8OJwaO8noaNoi736l_9AWg1cDIwgQ6 z&NHRfupdwD66AyFv+o>R@Esy``E5gmRK3rEot;GSUhJHMvK!(Jop0ldk94pM$xXod zU)@u^)*GUQ{*}3e?Yw((b|9w*kR^>eDu*7CF8C(9N6`MH0rRUA1i8S&ekG;Uf}*`49{{Z zArXTAt1R=n@D}P_=A!=bi(FFx)xac7DUqRrEED{d$m0Q!<_s7JU;&rR9tC;X6)vRQ z(5By!fKe$cm)djTFK#rN=B2?2e{9I2#2WYCVEn0Avfnqe0*U^0X^F2+SDgmeRY>qO zTEEhjT~Tf2JkdkJR*rr!T6?Ed18E>fZ<|v6!(^~qAN|inAHh!6-ON6uS|jf;gX9S$ z?O860f!XW4%+l~cM(F@lFo*W@osnq?B1s0s!>$Kl$5>m@^ac?z2 zj8AJcfOG(ALN@VybSo=D<$0K3`vpE1-786dSM4ZHJv1g)Wm*i)dD zozCXfZ!STs9*a7S;U_4d3UYp^mr%pbvb2Qs>MCK+__nYoWAjJ4cl2J4{1?q#iQqH^ z?f-3Be9!{P#`?%oQ&W#mT5ta4vLY3Y@e@njG73Dy##%8Wyp6!QLgloT*!CAKHJDc_8 z(6^-TOvy%1t|Hk=35OY1Wl&4ai*zLR|@-_QZOWS*YS z@$)uZzwK!0Z8vq#WZtFKWBCd{nf^-X{>?>c{@=X`;hUgso$j=9W>ynmf3~mD+Yvt! z;j;TF?|#Y)zRi%PA0ZSA#m+H>^WoDxYzMhBFP#o?D=wd8&vQIjP19&*#qL)mK;LB= zB|iDTdp?%7!{X`DcFD%ANA!`k>Co2B^b!Hy3!gm;3vkn&V~xp1x>r_coxAAR+2Z+W zYv?8vE<0pSDf(^!1p1a;aP%e`xouFO7z$GN`uMCjd3P5mg=dk;WG+BUbvB(_J2dUU zLpP5R9~z-=mfr-CeDH3eP~n%Fn=RuJ!*PTF`w0BF>8cFye~p) zA$%l25kdp}d*bl6qp`JjUaK%Ph$oWP(qmZxbg|xY90Kk0XphTWe@%Vr+{+Q%?UU`l zpMjnLgSc++5X~HQvm#d7e0-ygeQ`zg^ahIMyWx)B*x5MPB)=gD!QjEkC;u7Id`Jdg zTz`G-k+!j}QyT;TOAnX4HzOx(YP1KY9|21=Fs+5W3FWIA`yyr0aT3aFWA#j#S9?3s zi1k$=qR^w2o%|oq%aI-Kkc#cV!fyxjo@t}5MF$j=qZjOegtfR*S6)^*kVeUxpt#5T z?Q64N7UbWFoE_90C@xx$_AXF@)DEYg)1x2f7)ab6=U2q$SS(d^Ox6OqPs6(XYPl=< zov=o5U7GF>rlOU0?Ol^X3RAetY67RZ`jc{a7$GcAKVQ1 z+80H$CYmvOdFHn3Yj$ZkEbRwCq|`{>++Q)y8{0oE*`jCR^iYL>v@>G@lD@J)arxL( zXgq*W#od>RN)j}UZNn{93E6TRYX-RQ54p6#3n?Hax^r-_62-L;#KtgrVG49(f~_C= zJRMXz9+)Oy;N`XYb*f~$$B}(MZR7sVZ-yZ9av`nxia+M;g7_@0e5Pr#m>Lh%PE{2e zD{df@><}?~zEX~rOMW9QwSdeMb&i|HTE^Q}!;A*R0;wzLu=LKS%|-0!eE7saQX^f3Y0WT!!jfC^1infdn5^J~4 zaXp9ovkT}koiv|Fy(r}Y?Y3ugY1mhIlN6G$CGUIz3$srF?(I|jDJZiPn39QdBjT(c zYqzHZPCp+$4ScfAhtZNMA3K z$l7-Sz2fV`gP7kRXf0$QgA%yr{`RP9e{Y>_1}Ti|%>Dh9XpZzQ1V8FYYSytOie537 z%oNM~x(CQ(3=C#3dq2&L-ybNX^mnYow;9~xA7|?b*I7!n|Qs!M{8Q#i)Sa< zCZ-FOASn^vYLGH<%Sxk}PIcS+4Oa;0Yr}QAO4kr%u>&cg8C_85&p>D!E7fJaAl8 zk^;p}c#64a>|#FIE`13$3;7=3)=+w!)4Welmry3G#cMxKVqnGs^gF-X%lJE6-cc5A z=33%?8Kx4}gqcRbklq{HCX4&+c-d=}A&x`b9{LoyY=?D=;@FfqGFk*vlzp9DDIT}` ziR+~XyzyBjSXW^l(~O7p$J^JBfex5j|N7W)?gH2f7-tyx=NZ1H1`?>Oy&W{N&_a4d ze7ud>w~J@jwoN;vBa|n4;gf)z5&i-Bb=^YW9FW!%-|r$Ip|5szb15I*v!T zRjR-+j!>^@Dk$mfsmrpe%h}4lU8^yu0=s)HOm(e!V>H9@Bm;Ezt_2T6<+krP&NhE7 z*jP0#M5svKyu}iN0WcabLQ8o%T3;Jcz}M5(8FRvzoT>qQSEe#u?t%1wxq5KL8|OAO z=v)pA#I-K1swGR5jo)RU&LZV2=q!SJrP1fd)h$Ac)7XUtzeFU9-ik}R{P2pm15fxH zeI3MtzHXA>Ojb+EEXr5V^hE=6e1>ka_-W zQiZKSo&DG(^CUO}f{6#gE1^RnZiTf+A@y-kji4&X$ktb^TYVkA$ze&fK7hh&=xP#I z!&`QV7c^FUZXN4Bftl9x_meBR3z3O2eLdg>$s2HWClWEt}6sizw59J3MUO8<_mqW z1t1s{M~lUux2CN&jokar^(;LH&q#m+!G9O9-!`idANKNe&Yv_x2+}WS6d*{Y#$&ma z{~QwP(EQ)@y=Y^#4(jTk&bJE_Y~3!x3HUQc$KUT7>mK90^I4?iBB+VYyGyHvC5ETw zYK#m-N9_%uYs;WbqooWveAw^;O21O+jK}m~5Z$7X-I{>zJ+Lu9{p7K&9qOF~jv+u%~!K?L{YS^p_l54eGjlE`X%_<)xOs=c;*Qf92txX_MTAN=Q7p+^Bzw7-7AOx=uqIt}WMfdj*ZZ z{GO>8_q-4U9E>sn#&oGLf=t%<>hDnszDDW5vFc`E%}6M6xd&Zam+{YTo-5Nvna=h` z0nb$dltm8bD_Y~55IJ!j3rYegcGFs8yS8{~2ER(kK3aHb*GfqQR4IMzM`n)oZbRM5 zKa0NvznrxUoRn+2j70FH5uPv=kD^io6xuU`{V`V|KAu^Y7n_uy}QFr)jvO zQive#h7tPnB^+kSh2D?WCvJnH{a34$)KF&x@9Tqbc0=q#wB1ExTl5`0M9Su1DV$@@ z+JnHi8@^hc?87;HRAQu`oa?PXgThU_7Eaw>j457UkA&Qk;=$K)P=VX1Uf~{r2$YpXUr!D6j=2q(< zol{ypCMtAZft$qJU2EYr2%eV4pFtzx- zX@n}Bv`7B&U-ob`)zg>rckICEV5q#8AEA-}X9uJi8~Ip3)AzKOL~Dx?7T>AyNKm)+ zMA6jWH6!~igW`uDA7>Ju`kirNj2)0LwEKx27KRJJ$|e;MvOv^xccQkdH&S>Z$KW!D zH4kgMy993JNIcZNUW3#YQZtOq%kho@h6R<4P(^f$yw{2=qA=due~YDr@6G|!#D=Io zBGe@TSO+cFwX$3<;MMnm(dN2ydQ!~T>)4|xC&r(n0#1iZXqK-lPJ(84^JBqf@c?sA z)9=zw>(Z`TG$#8|^h^qG(-I=xa+H!er`zXc#~R-(rxZmDVr5j4W$6?9w_FY#ztg$L z*DG;6(mglHq$NA9GSA~NmVlFt(R1g3FT8L0)C2@PM>8dYjTG^=5v3R%N!bIMbEbr>Vc;lIDPjDsO!xkMIVnOuen z;pH|=bEdUIj$6zU@7B({tv|B)qwi*hn{%hU`9+ zQtOk-GzJUdLo2f%7LHFGoBvZK90*ymV(U~mfC^^4>A_q4Et|(8_XFS@yo)!WZ9DZ* zkxkRZqVA4FfGg@ZoPk|%DKO~Mj1w!USjfkoDz<$;YdgF_&{Sw3A3FY|3N6@aiV_YJ zrh&xp+c)P6`n!9)O;I#+4f#@BCVdx=2WF2Gqh!hUYN(e(hJi+U zI2X5s&qp!W6}Ry+6&%WyrXQ#HFgS~N&o&YRXnKX_n`6MN;WI|sJCl--!9h5!9_aHhR& z(Hpq)VMGhyCKOmYUhT=^Z=vU2wWeQgrTNaSBQE}hO_X@8cr{EP_C4tvCv%@?z4&MD z&3oM<-meD4iHA3MK1T4nDZk}6T5P|UI(<%y^&5dPy5*dWJSBty!Gl-P`Iy|-b0?sE zmdTBZQi2|OnE>S~@uIpd1Nsmw>wJkfR5hMCQKhoxnR`>Ama|H6kpj0)PztPALOA&i z0q7R%gi(Z4pw19f(RXZ^6atN|?8uq`mc_vT2h5~{eA+ikQ146|C8Vpa(0U+VtO)Y- z!1`(mjkL^}(kUn4&LXf>KL8MWYS)da9y~xvD65%A`bhn4r`WZ-y!`b^un>A~X}gyKP{$+*DoiWXh!SV3=%k z=GGRo7!#-TE^~veVUeqG=H_{s{hF5w|1u9lI5R#J^)Irspgt_X&yPEB>3m`jy%P=D z%XWTLz^cOm>1D=auV0HH3>9$!xA}bS4R}E5IzhyH+U*xawCRaO?6}zS)}x8OYW4xT z#g#`Qpj3*lk*H`9zoFTc-wZx0`DclJ9MXMBIj(*EDW6yZYqmHeL*DqTL-vgqMV!M7 zF3tQ~y3>w^{&2Tt_CCYv4wEApqaID}WmPn)5suTgQ={JwIt{b%jDwvr5ey9|Ln>gC zT7}2VK^rg5E+x3elO>N)KeYNt(tu*4q;{>PF*mp4#|G+I!e}&d{lzUS|7f)n_6zo3 z0SD82X@$9}Pvbd>9iCP4w|-2hQ&Ys4?IIVM0wmb(?$6V;0~ifP_3=B1&Ale!vAhPT z#zjbgasjU=m{?!X6gX84-I$`QLgte)8s~uo_>B`CRj2BaO&at5swspT4az7-Tzf4j z0GymfA+kPQ=u>5HiT zXo&t-ApYqHz5fHkhXGAYI}*o7oyGjG4Kmsrd|p+dQ5&UT;_&kE!g}^c2O+LsgjNHP zh%-U%bpo&mI8XIq!|%&xcQdLGHH4)?A-A z`i5~14+vxujXBp)5pCNBLVPs1UMg3pnZ(a4tkQ;iDe%&~k$Yy{pmBi3h0LynrYdRD z)a;)hqy>D<_gf9bzw)71s?bTr4gVM|@>wxb2Ii?j1HoJDxo zA`|w@*ygizvZu^E^ESz?eRtl`a(#uP%E1+cfo^bzZC;dddUDrzEPf(iJg-A zTSauYy2Wv>g+=2ERQ4KlLxXoFWT6ShW(sMlCwG%D=DWv7S)5E#WXu<^I2DnYAr8*o zd03-c0hsca4WWT@O~Nbi54>#LP9N-TPNr8GH7knc8@!{NBf*{__7h9w(tjZIUSFHV z#GH*1XR@09S9?z}n>3IAai1E@6GjVVzz)Y?kmIPXyP5MN83&ph*+9aOs=)4>?^6S@{4Z_p8!KTv9%tDh>1mdMe2ze!JK$0~jAdH^H>_008 z+e*9WxW?X9GiBc&eYB9b6-H?mQ(F{~5fb32TD#B_&hUhGS7N*-Az(}6vVI}q*NHeB2`9r zw>?b7HBdCDfR7m>>ptI-S@hkPXLE6BOqRqc;GNN`@h~QsOZ|O_djAC#Eu;o#j(t>~ z!S=bkVRd3d4ig{Ndw|}=*{KYRHE%ksH)bVIEur2~e85IuQhmHK2q!v7jCX;Fp?QY` z0v||WgW^kAb?*C?Ijaqlr~mP@RXrvI>JX|Vz0aZ4OE=H3z|P^O>&KAsK^lAwK+{(r9M0 zvj>@|;^S>;45_g@sN4UWY?13mu~#qTzndHd)F3^wn@bAPre*P~@@jiBooO7uSO${n zBeb2+aUpuyFb>D7STN2CFAlw`7^I3UBv*O9iQl%G4^Te9Qf+HM0{0EDVkzL#BpO-F zMqFss1_42|lxl0MepQPcN3wR=@eb_GZ-G~`2*1_C!SDhlZ3AbYdIciX<_J_n3Jt{F zk*?+ z=@)BrkAH2;YiSdDktlFkqu$hSUO`S;VYo607^K%~E+J-Z?Qq#U%}pNNSUwF_dN?At zrX|Za>hYn4jneKS*60eM!uP{1ZBX4TxQsW$3N0iWtSrV`KbEFDGE=~dHApIl_~NKy zq7O#~6gXmPZg}wSj{H7Bb)HB>ErTi@!CELIsns8#>|~Rh!2fmh#fpA41gxF_4X49C zYPMIt7C+ixz#Co55OUXNi5L8T`-mXKXt5D6Jw6$Ymgh;^G@QAysTx%n=1O~AXx3?C z`Tp+_4TGJYX=hWb*{08f@xL)qH$ot^!_(<)emKi`zY0;FfGa-en(!w$ z-h|nVYF-vRu7U$+et85o4X4U{=gsu0ocx!%gFhRb5&yO}Dk&qb+Qx+EV6TqXKFjD|A(n}w z3rWm^-*|O+71^s5{_SFU1C~~bcR6O;Ct*D{rd3Y_tLKcHZRr+_4Hz5eaC@D~ z-7+T86Rx`Xwcs+GYz}ZJ6Z&O|00E z7?Yi+g0RfevTU1zR4?1it+$!^SKE4v5fIj2~5WXsPe6i`BH$87mA~bJa8VEqnhsR z)7P#^G(GYb) ze{JI~>NFA~7T~4lQ+b$7 z*Z@$iWcjDOUA_oy_dj76_WjuZ$!4WE6aP)@aUuKUSd~tG%y^D#*2pH|jzHcFcx}S< zVYo854L)4NZFz)YS@tSCy=Kiyt&XWyTDmP+*}zLEp^M%vbqT4n{)tK;YXh-ZVO%_L zjy_tb*ECIHG2Q0T&EqjR50J3{30SqAi6&3)HFZi=Bt$7-htPuO0&_*$nNKSWB%=Nm z)MVPI#^L5BE^eu|hzFHb2wLCbjY#=XXMS0;!}}#L&mwonLS39|!JW&sW1Mxc&4lG! zZrvxZS80X~1%Rk}QivqFFisW4G9!GWSnknB)vd}g?!_`y?|Z4@*UTuJ z6PQ|ZQ0Xx3%*J>)a#q8snzB_t+-|CV1?vy{+_~nRtQz~1FJ8H1+^$V{lBJl=DVILh zuGdlVkdV#4NTMYGu!iguwskQVeR10h(%^g6YFn=t=XDkWdaRH1FfDnlC$;*wH7Z5) zd(9xew6IC~$)Y$$7hs%awWXZG|J_?TAE;$lXph`~G->Ae8{jLjqS(3}EbrycDl?m5 z-Rx;nX25JcFvj4M_6e761n~9K6;Jo=4C*v=X;F#6sKz*0{*OKHwi$EzLCLz}1az$j zN!WHss&$>1w}UER9_?<%^L=`~cG}tqWZ{e`ZToXS>h)n)hOM+StY5}oELuepD|URj zb(Ww&m8_(>HO+XVzi>kvT!d#G(iqHQv`~404T|*-BMDHPvqn>JYz|#T#{|`uXGv$) zUMVp)054nTCwLtyp^Bwe9x#r2sf1vLGr|$1!Qt4?u_!?=lrTfv5X2^DiL9UWe~JB3 z@TXse)=TglH(rEf?Gb>$r^dC3x4EE`v$!X#a2*;7x_A4v`M;< z>Xt(-+e^PifK1M{s8CVV7#1pNHB%91sSqGR2nHMRk^Ysi4z?qI!@kXpvXH)8?3wQ_ z-#JC9y7X<86yCq1xtk;;M7u?{s3Po{m%C+A3H4DL4&CWP_JT_{MnRQF)cE=#1+mo? z>7&)_d_l9Od3bFdd=4#Fpkobr7CD8fNWpUs%T`^pgpU^x$@DVyH7!A9G4n9VkcajSP)yPnN&VLQU=EOi)N6L&JA66{MhgkWaW9B*Tn>f{ zX6|jj?a49)<}B@N@=wbYTOYhI^5goRG?3{m=sQ&Cg_p-Tpobiq9Daz!S*HwB@WSqO z_dNl0bAl zT}yjnJPMd@+oY@V9a#)V&JuzG(*Z4!s*V`OXwggcNpBs=T!z-qLQ$DQ36-NycG^O> z@~QeI?+C-oCb#VEbv~2z{#ds)HY{ynFP?4?oJ&n?Rvg6*Q=}l3r1Nafx8Jbl|g&nXj(1} zv=E6?WRV{Z7+?wCC5`Rsp7jdw{l@rny)17FZ*wHjdUfMg$vJ=af0>aj zxsb@i?GMb-Z-}3o$9sPH@T;)KtSmY&txcN6?`o(R9$=lTU)kLEApG$G$HM}#D8iT{ zoHu;NeECil|GW-FAp*HwDF{n)`PTH zs_n4GM>nmi-!CI)GIEa#NbyC^ZLINODc0CxE{WYIif_3DxiZ{7Z+kV=BZQQLjAm7x zIq}>Z^(Esteehs`!foA+W~n`^f9`QkLE&~G)yA)lU<+zP^1Y2qKr~onTl^C7v0& zsaEcdNdQenK6CL!-jgtntbPIlLlS*9;PBKE5`@WdYY>Z1c%rx3Dr z`5f01ZFX9lC*nLSO=*zRlf>`ApI6tBc2;`aK~E(LzqBMgZtBASAzE$IMx{_nMcIkc z?GMWO3I!iTLnGJN^#nAzn_k|#%f4~I&tAW}TM1XeELCmm>|ys){-#iIl6z#T+`~x8 zD3nd*g7d>PD4*H@OTPL|Npn6wa~){aFY1R=2fT*BWiKbQRz>2;^X5xt-^Xx}BnwD~qYf z5ik!pn5|+Sld>mfIcUzsRp+J|<^Z$~b&v0i#t!zRzeB9tW(JKWco?vzAJX&RD7iB$ z3QANL85{W+g&?eYZ1iPMRZ0IxooX5BcZdlw9Dv2B(xNfTpZrA>aPtPU^8+fR3w0pj z7CWT7qtp85xmSB{JI}~#CO-;EcM8Py#pB@QxIzX5Ew&3=RSc8I2 zx3=qh;Zq^-(zny(=2=0lvTu=N&H+}%fIIfCS6JaTR;}9x5;Ze*%f2FQ3VVNkwLPX} z3xoXP1O3WgOYSU5yi;>x#adx55f_rkSBbKXl- zqet---5zI_2_`vvy3(SngFmO59sgmal1QT z|2S>tj%7+ooylOZsJpuAs%0U#ACgCDV?x1_R-{cG)$b%|K0F|q$Yo$!IjXtXWwe`S zPlYx_2H|3`xU?&(q+XsQ4z4*-j;Zr7RkQCi`EPKtes)$KuC89zG5wgGwVcbz+g)u5BcpJo1PgU|}vV6g- z)4hxO=E0J6eLrsOhzrBX=}xP9{hBJuE+SV4SgE9OD^i}Rod2g;2^;JkglIf#^ZJNfY38b7v%}*<*EhvacH4E{-To5%-l55w z@t~DTA480=r^SFz$gr{q6&Vaq){q^eE|z6g4`ruo;|Er1tq*cGI>vJt+vg@gjYG#F{DD2f*%f1*H#L04SE{Q&COZXXO z&E)^9&ao{L@lXjs?#Q@nrs6FTxtp<2HFcu2N%drOeOT<;H_|3#MB6Q=Pr4I6-9G44 zO&~Ox4eAN{d(4%58q$!?`+k`Dq9pGNW|W}PN(`#M^vydM&P_5cl37T*%TNl&UT-D$ zZJpQ*-f`gLz8xt{^He_HgHQ+j{)wr2Nb*7!XZ9OEmSJ{%H^rg3QkvAhbt|IRhHR&8O+!E z#_Bq*HK06M`U}S=Dm<%(LDdHqAz_IY4w$qxIBCmM*C0k)toPC~oQ0$QerRVD~yYpI?d-M9YFcB=ifk^E*+@&chvyNic~ z*v)xWb`B1-A%$F>XY={7sN*sAYaVOlU5zf&gjBVGPoCg>l>uon+=fb8%u6f7#&)M$Ed>SpV#`O%r;dbmBidY7V{;E(BHXx66qvE+_ES!8!y|U2wJjvPILd{_wc0x33iEl$I zCpuBn!AM(b5+1kGjCf?y{%)mAV3Rm~`7cOfb96^rct-OndAV$m^__>ROYDZ7Ax@l1 zI7nO%E7u%r@3&XtQOHoHJ~iSre*YaabGZKDueUq(T1KR%au1a%9$Bm`qO#?*YS$__ zy{O)=1EeQ*ug5ntm-W3<3~_;IAGu9dxi;GPXlC?>JFXqmBRyhWx|fZXN}BJb*aeNe zrM5~m<+zbS2B-UfQJ7y4=YAM5R1KY#%fXHRSmk;5c=nW9tAsB)gDA7LGoY@Jr%BJ< z%l8Vt(G;xY@Vj_Wzai+w&X0(HmbYC}8LhW9gc5BJ9?Em7UkN(*OQIIWI4!U>!L^P^ zMgjlV)%$L{fuL2hn7`diDqPW=F&mQ2^V00jKNv^dOU8>TRw(|%mepld1I2h2q{{+Eqr~RjI7MUcC=xDA&^P3k)SRRbg)#l5gDlJN@rUV6sb-bUisuov{X85`2Z|U9UNDX0L5*HqwsWPKI&h)GC8{ zZq%o-?9rKPO9v0X(6E7cKKe8#Cr$Utno@Ua|6i^sbJUwZj9Str|~rts$7^waKdvkl(Si`y@X#Aoa=`rQ z-%!C6#@_K&d}+|3w{(a8<**>gmP*&U{TwxBr(=My95mku~$H^`n z@5NpHuPW}?s3Lq2Mt4Jh4G5n=9y7ukDn`WUJv#sI-XIklgcpDK`EJ^QQTjykjwYW` zb0#3Y#hcK)lVzCNt%lh&Nqu9{Nn~CBvE^s@`nOd*G?f<~6`$_rX|MltI+>edyaoZY=SDArn5qsE=SX@ycq`+IU_y>VNkf&sq8KdD@5t z%fNK~jc^7u_k?U{#B5IL-wC(`bHzzNGa=?Z zK|W|~CD+e~uQ8O3tK0rF9D=Zg&mWU(JlyK}=p3~^9q;|+CC@7N);$BX0U7^}Mc0iO zUegbwjf)^a44+Qd8KN!k*zte*3pnRnjw&ZCkgXpX;_CEKtLthem(+(%_;8R&02L3z z=CzJ(GwE}Fp|S86)Y(8)w+l zjq;cuHld+5)di;&xafC>0z59rLJ5!%u>4Y0Z(y3(n!t4V;>u4eT3P5_9#8`nVn!P^7vSwr<)v5dHzPpn=wg>jjkS$Rk< zwT87JhB3>Cq%?rs(haYobV!XDAt22NsUgUGLAsQdnshg8G{OjBAkr{;lder* zOc=c1zJGTd+i~oEw)?rB>%M;H$zZ(S2Pk6S2iK~4>6s;%@Amq7m;~qwzY`5>>bht( z2406;iA9WQJR;54_$I&C_}&+df`4i?X7y60P3$)IfM61jfJVRQNniE-{$+G)HoHVB zT3k!zAjg^c5|Uo7DhVDFC|uPvD73&$Zm=Zxxk6EvmHS=Txi}pZE!8%olz8`QdCQ-=kJ_$SecI<$Kr)j1ZTwf=ZKNZ z2gybAXL}HjWhnDfzyG&XHcx3!*rf>}(Z50m(Lc4)mPAKOjzZaS#DlsgC0u5oel2|y zf9jAdHb4*^9wKS(D&qZKWKi}kE)2cf*?!VRPf0C5&Fb<_&F2*FOGtLXc4-qZ{@k%8 zSf=Z>c)2FKx1$X?4dE7oF?B8=2^Bfh=6(EvE>Gfo4lt+wt6rMu7u>|Zso&QWd87w4 zD8SI_q)cTw9DQigNdC!dghE<&6Q?I{kIKv|2Xb5>mO_gsPv?U`ng#TAT*sGD_gjIA)TO%!@yM1_C zxOKPl)f-_6HWC`2WxOAd6iujbiMh-A^}&g}PEocq|3D0ntTVCYtSSPDDC9|)8WG+M zaXrkn&N$Osu(Xc|p5DPjr~bWC7cAc@wmzYTkK=n?bkAVNNOSlf?HfVgxg_z(P0_Q@`Kz= zM77>NO~%gkkLMgYHjGi8q6ZO7Jt-d^0L_>DUA8+4F^j#lL_vpyb-FWO@-;hqn>|!p zR!fjTg(GKo-`j)*ovxml(p&-mHrF}F)`XphMbo>toZAaZ>wR?zplT>P^seo0gJ8V) zx%QN=Y`n?Fm3j&2U9!L2%8wbQ7$M%Q-z#xD_ff*Gne2D?eE$?a)-}GJP+=M)0Jim^ zO6wMx&ZwFz#_$VGD0bDEHg|37p<1p@(9{c`WI9}JWeP0H#EgJho2S)q&rEM-ZaOgw zcB>UG9-EmOJuA<#>QA|!M6~2e4r~4xV-N73uT#2%t~giMyhu@|P<6>0WQ06>4>5ur zdz7%g2fO?*+Qoi!F|bTEBWBh>`; z4_*V84tQP1&AvwjdgO>b1FkO`6z+y~#abaSYRubP9Hg1pBELO>yefhQAo}SCmf>KS z<@~~>L|a+TF+pD+?uVb|9+5y=b;*CX-iB3%`(t+oL#AvA%l$I8Ko53E z{JFOI14EqmGvS$=$3)*4;d!JsuGa6>CT-lqd316Kb8Y`qzmGSb`8^x&o6}2Jo zWR0s8cqY^bMA7%*&&Wo>v}s#UIeTfgG6=E$8o%DZCQ8y3_-D!R2A-Q=B6aTA+c6%Q=4-b zVAWCWaf=rQ8oefvdgb=KL-%P9yggD)bnpVQWaS;CYVI6c^H|Qee#qRscp7;MRsk|Z zR+ai$X8=w85w&FzB_M3(WpI6#h19R%cB_vFxcKWGuoZHu$=%a&| zQ(q7;Jj1TI3dGfGop+#c{;Jh`P8CAxGauNSP$f^IY5MOq4*D9R|EjW7(>^4crOXUm zASQs43?-Aa|Aw2sIlY@)=4txYL;2s=Z~K19xh5R1VnJ@burTX&kh%y_$X0g!5mA8g zb|Z}wTQGNK#?9Vhcvt-2e@1Ur0`5YcVps%oO&ansyFYVHs3^`wkuVA_K8G)U)IlK^|p5@*FV^XlXT+42fi`u zcSr;e4e|r-mXjk5Y-;}v6*e}qJA{JWAeMepeff!ySi_0tIkWRGvix1>X^|x z{kg++>QN0gcA99(SkzGETs;vQtKs1r&rM4-#-eBh5%%I!=XC~zidWrXG|C=jnV`C( z^QUr1SH8rzzI;N1KdfXE?qniq=Z%*~HX9;uWS5Bd6Kzw38q)D@1ml3s6BZ9IkbF_u zk6b<^{gS;m-M)?LfbPAUWEsPXRYa%N+S)a5ckHPchC-WZ#1F9*F(Ml|wrBCXA+gF1 zkjeJbtiqV%NW>^Quy)r_cUY!v)_1(`%?5?DyC0kp<33l0q+9}UGh{kFo2`f)*~H0- z_5goZ#n#1E>E-Xvmtqvhj3(^lHt4|>=m-6ruFC@umcT1RO-XJl=%*q^3tFQxA64^sf_rcWTCDp9Pu9>JjZ!p*JFZ=AMC2L%&5!W z{LJm1(M3a-vWG7Y_#!w@f2W1T_udDmTGNJZB%6+fPf_?abRMTZYab^nGDhetK*@Kb0F`2X{k5e4GIIv!%H22T19o@LAw(4z{K)Kx>u^g zewIVMTpg_>qP1S%++o_9=aHNw^}an>OVqFimD~p)T6;jW4G5dAZMffq@x8Z~#uAvP z(`9#r(tZjP>I-{JqUO`SUtx~f94hT-tT5{tVG=&?Ck#Y zAuExp*|c(RuEYi^Rz00&RQ>lS&uDX@2y*A+gx{ZG$2~on3bwJp7S-Zb{s%@d1_lbV zL4GaE0`@b{fj03OqocpHgOiJ=i0t^vaF6RWfrVZHqHI%lN9r)-ej9}xCoRSp!B${{ zzCyrJ0WWjw&Mw3KjF?%PKiKP-_<)|`Vsf(8pZd~b3!||CL-VF~dtAIYiNva5riNOH zpo+G+KxA3)k1W(5m7;e5Eh_+iwXAjY&+kWLll0eJCHpmXc6$zt5s$&07{tx9lsmEx zaa`=~4ZO1;-pu^nUcu>lUgik#Uw4~ILn1hFjQ6+4p7Yuu%N?2uq`M&-eRskm<_~>? zmO+wu$aS?q1`XNpC8aGi8p0m*l2+KdM5-Hh^RyeXvf^R60j_(Q*N5(#ac(6M?uYy) zD1!i!w`2O}%i=ObK3Ke~eJDIJFpb1X=NCR;P_nM&5~yuF=jVT{&Liz#8cw~pov&D; z{cLdl=ex`@>a}NPBb!yFX)$hkY5H{J+S*Aa_e}T--b=UEXi#9e2PP>9eM7k?k>9Sr zshWNBLK$2N&B%(o4ZzqlI@hwpisg<=YDTI`VR+gy59JKV5m)$Yx4NPUO?s54k~H zNXL!9t2T7k#T<-ehHlVq0Flf%%yc zWpnw->-ZY}r35eIM~nYDsx84f9Gccj7fjB#&ZMC(rc79DQCzZzmSXPdu!vP?N0k_t zS9BJ?MgMF$v?YdzyTjl1G~vRWAk{Qp?esKp0J9H3?rX`ALhjTRF05r{w00)hunIvg zj~B)$yEeA-6l#*mN7Xq&|3e5qrSprRxyP$m1P6F4n*4l^U1Ixo`-@^zfQzqZRP?woBz`+y;A@V&>IU!LCAeN3HM}D_-r+ zPyygVhtmsXZ9Ahj?Di=FKUxcB2CkEuAwWP!ltGHcT)1&LYNFGMe=10qUvL;DJy1Jk zy*hRys52EY5rhUN<{X**Xyc^ST-b);?nB>Sx;8KxKURM_CBcp`iGGr%m8acf8Ar0& ztZaCybImz{F@@6Uz*qkC)$bL@>&;!F>Wryk%i;%|u!J_oE$>$%M$!<#pk6={hTq3p z;HcEKYILufRLf|!Da1Dbg84(}F$r)krLHSOZ(ISLMe$tG?uoPYm%8?@YT` z_`Ia|F$XzbR*|IjJyDU4))JQmd9(^~LV*v4I$y#7Hl>|e(1&@Ou`}hfs!bp_>AX0H z*D)OU1nY`0(YSdP7eKDelUx)7#tGBU?$fZ@qpvmRy91PD*;BY^Tz~E_mv3XsBDFFq z$_LBZzo3i5D{Gk}S#r88UX*I&`D?i;|NZF<@GpBISLncHV5ld`V7w?I_0D`#>8d#c z@-;x)e&Lc@oQaaLsOGn!gbp&@uKq0bNXXTFS1 zKJ%ivE-9}OyW^Ik#I7XnL&^OAEK}$rTIrUxVqY9u8~0#nNNUU?g51LcDid%o-D+Vm z|M&-gNa~kF;r{QA3D~`G6_*n5F*gH2+qMTDYuW@InzG%a|HnyOy>{5qLpqAF(|eSh ze(%D?WX?6_rS@~m_p-|8B-iiZji{GREuhi9uOGy$0&k-JJR!Q@%agHEs`#88nLoESfI@}AKoa+#yE1QLrkk1ud3bQjp%$ip;&&$jeJu+_@q25T)hN4gBkbexH(_C2R&Cs@yRh$_ zsc@U0#kA~uSSDR&E5P!gl=LvQO?r{Q$j3TayLaou>YNE4-MSk&L7ey1xJCx0*F8tQ zND64ogGVTuFxv|Q{hc<#Yk7p?nY}y(KoKD!{5E{_s(3&Gd3wI z9PukNythFShlT7u~41dyhw&?1PNzA7es9EZa zEwlhuPdffgrjVBTk^4Gj1Ou{!5Idx75JHPahUOVAoU6!p!5Y1y96e+s!EZZKCW>P? zShv$$QYh|{<7&3TGkWGrXd0GD5owP3jw}jhuSv!O>0zF59X`V-bd;-XbYO>+Z`Z)fX0 zdza0V(P-tNZY3~(VhO50?0ny@s>-XKE2U>Y-_mIV+ed2mCg8hz>OQ>AI^BbZ$Ybq+ zBhu3KU->TJ?1`hCzmKIpyl=KQ;A#CR*4RP2!>jp3>TlE2^wNbuJ2K;#!Yb4Lzb^CC_}YGAX>R9)^Iy^yu*Vo>iIUW z4)s4QxhVI4%w&&WJb=jcMu6K*isa%3hRyO!%alKx_$R07AE|+Y%JRKeQQGe+Ciq7M zI@^a@^ZvV~rhE`of24t0M*(jrNum!-c~`X+iSo`>f^HxQyS!Fx_u$HPH`$^7wYIG- zTDf)8Ifuvg$L`yIHWGmGDAb+L)epuNe!kZrRnxqimMQ4@){{u?#R!op@y{MMrSenu z_Fx&{7mL#FwpK1)Lv`Ord;2%G3L$<5mz?OaEPUjj6+@Qo4P)f92N2PCG2yX3KK^e zWu9ZU&D|VHeI$7-3mB@74tHR3l2LAJ$&UNfO!PD<)0ZgG!<87{`_x^vS-^jI(=h7m zI9A4T#GZS78#gjy90_3vLY^>!p~DW3jpHO;Bn3(!Xei^Fos3lQ!)aJW%_oX&rUder zek1IMI<%sTh2|({nUX8`R!8T5VePAqTu6Z%FVp zRV;rC&*F${;u_sZ02hDQqw{0lqkp~k)O|}Vaa$+pbq4vQnc~=n+c&}V{9CvAsFn#3^oFx_*h5CKd9`?jp> zopW3XV}z9v?u20{oJ@hnh1_li z_1)Pvkod~8&3AI5oGS19z8$~zhh|evEJLVA0y+XGQO;VQ6)wxVTd{Ii?Sj1EbaP8p z@*l629;j%sTJ8{~T5IbiaoQoC~I}(eI&X5Kg zhKcS=m3{B+RY>*(i0<)!-H=*L3h9^bE^)fwAM6bS!aQtHN-v1>84S8@Ac@~6#Wukj+TXC2$vG8^y|M%qK++K_ zv_F?I(%^bl&~R?G164uQSg@+}WR;utM&!sX%AVj+EwO!fqKJ?(k%LiL^(IBU{xKV< zZqy2h-Z$P>pN=r;->)U-?0L@l{4qxGu7s6qEg~eulOksSkJv}vXRDLs$;gLB^M4x^ zZ(D_r1V_B4bx~Iy!_+n#cyoAEkVNa8rlN*{4U|>z?Yh~_7vT#*yy7|%p05Y z!-#yz$Owh!k87*20~?>j8T)*3AF8C^)EW#Js%2u#4cGLIs-8WSips6>EdeWR#*~#G zKg=1v^p=)WduD*E;W+Mf0$4G=5{jTOdD^Q!qInYpNpq6UZPtUg8txa z)Vpx}ykq{j^$Mh+d!?2(I{XVUoXwM|N9r<_P_~_?wq&{q&3H@*oTb0Z;*!oRUSFL)_zJ^!p;k}Ur(>g4 zK{x2K_RR0V@h_v8y5Pkj2{^cp)pe$hT}@dy^KE>Qq*^x# zO7HCKQDJ4{aS6)oNr8G%_Pe+^``&BIEU2!DL&IRvygHzTf14HOUOyJFj;~!-><7F8 zI6svZeRA*S&G+!p)6||0Y=z(5)SMzN1yZ^zC9d-;)?px7DdGtMuNCIzrO7`M6DaIN zv5l;>TW&5d5--td@b`7|=ZyYx`mmG&U-2#RW-!KzC6cvOFb@ue8 zR#g6}D@h+uH<^>LFzH2>Ej~>eis6;@MuN za6T|``Fr!L2T9@2OGXj4UZ@hL7VP|&fIF~*P#2xG2kF-wL&D5v-K0E|(&{=P8xir8 zP!-TXG$6E~kpx-a2Lu&_ydk>b5$R9dE`ndvKFW-xHer;LD%k zd_zys7v4>AMIx$QLtB#thq>WHnWWIWEq?xT@*`ve8gU;-xw02*I>roAaJa6Cc(Qw{ zm)rI|leY_U*TXVI`NJ?kbV>C^%#|l%>+3qBv)|u9KdUNZPQ_a8hgf7&6uywYMnaQ zbpqtgk?}|&n=cFDJ_fOVr_c4|p{-hK66ppv$-R3J@NHc$ueg`g@A>XPX&Nq|IBI?&K$Xxq+UDi!#}@PN41 z9}QkaAITO2RxyJAB0eB}sFu#OkZdXq!D-5A`b>>QZ>A*PM{)}}r)x2Xifq zy*RwMqL28|w0G%n#9O~YbRmrL*9LeMQensJNUl})Ny=w2US7aFR(tmnA!I=9K1I;G zJRkJ5I7Z0$?7l;PxA-O;4@7rA+9d1V5~&bYmZ?SAW)-d^n3_U`QCFD?1h&mk z5uI$_Tc>5QSN-QEd9(g*vIwK_YlM>&YxheaVzbdoJ7H+@!@(Q>|pBu;xK0 zk(sFM&izw4GMp*+cc!)Jv&OnE9=)-eZH3ETTY5diZL-h3-rooFn`!coi(?Gcce{<6 z_-kQZuR|jO_zd*3oZgBelE2q;T8db+a_^F%Qx9jZgl=Zm9}t1K2Y92Ig@HbLRjM*h zHxn$o_*TKsvhw~rKk=6D`N#jnNtD6hIUdR>*-|ZOf0=(`MOXN~L_9ixfk0jXyx;zT zoobP3@91`b2(F-Ure9A1fHyB1m1uZLNBy1~Hwwsh%)OkEd;gA0ha-jZ5U!ylh^k`~ zfnqGZN-Lm@P48i{j=-M9r+l{)z8OOwwib5pA^ToRg07d&4AkChP)XpMn1EwyIU>HA=XBkI2G$sAiy~nC?*i+gp0y7>P z+*T=5fClk?2oO@GlIs(nDOEC8JV0X%Wx-yi-d z(*2MGc}1E!{^rAg#}nGf(s^hi40>fapJ#q_US&7i8C-t;F4$+m7Z9OPi0NxlmBCT5iOAJ-KXlA?ifD*2 z0w;_mPPiTJ4xr|slH!W6dK5tK5L*B-!jiV=2X-Fs9ik*9{=2p5Ob~X-MTtK_G6s0I z7x3u|d|6u=-hC@0QrznQ^)@MXbE$NtLF6F}UD*?0w6Xu)y3I&Z-Uh$#$DX7@+$Wr0 z-7I1qqS(i#RqBjiV8v4$6VZaH8*Qf(J(*>*5gbzm8z47R*y*(FNuSSpEH~EhK=NaD z?!x!8>zs1JXLWueAAE*;vmr5DP%`ex%t<$>9OZ>{EOoazIv<*da-W&FuIHVpXiXVZ z%{HX=tF%AZU^&XHC(2x>cdKAk@WE}$T3wZ-@t6-I$?DRpyTOt!n~HLMES`xTMd6&& z^>wBH$G*B@FHz&+L17+}k*XX_qs`4tINx}B{4(NZf>JSG9+dKZvu5L46RWql?(C>% zfJGh4(UZy-Ez$h3ou)zi!^inzo2GfK3)nUYv*L21A|-hJp`x4gs0E za=-@Gk@|zl0JNIr>z=PZL>bcSIk+SMgWc|>SCtIGYk)o6u+9rmC&opNog)R6F5<-? z0yli&ri4^n2pZ5(<;gxx1Q0H&fzk6svpOKMf~ZDNC|cLc#u0*Kd!(&F-AtRyA8jt4 z6HGP}D{!evrDXQFh-UH9>|y6g+5UR){`Q~A@9&Qe)j50TPRei#!z%IH3#8{wrUT1& z8S{Kt`?|Uhoe&Q2+WtNpC|ncgZ2Q4j^Vd#_ml}<#am`YzI@kFsrJBa~hRxJZeH7ia zmEdKxaiY($@yA|9u&bFuJkb&&wiaB4;b!#8ZEClZ(T;THC*9U>1PB9{`eFWe7ZgI? zXP$X@NltCNyHxblu&xsUdowfDU_ioV-KA+oS!NlwO|0=hZJUSN^-4=;-CtM;D$rUY zAms0SC}R|o72z_4zJuT~vl0IX%x)IEj{#4G!VI)qs;tM9f`NCT$HGR!GoL=xqAKoj zf9+KZ7n$zn`|s8*-?#1Re7J_VK6eLNczidA#OZ$6RhOg6hOx#pHo~G`a&ckX5`S3g zW6R@y?Xf#$vC^y|D79ctgS$T+1LG0ghowzENEQ`&=#~rtPgs$g7aj=bJsAHwXO?+E!%4 zn&%_Ey$XA;HQD(hUpjCu9fVxq2)l3|3&0D zl~jh_%YW6q51(W@$&V>X$)MRY{L%-etWzuw_kMa>Y_U%DN8np5ug`&}v!(^QYxcyy zD`{uAwI^>?O|GGNen0u0n&TZwbGa-GMxS zlz56|AqhHssR$%VdoCaf%^iQ`*xo(oyA?SmEXz$b{08V1GEs{@_L9}u!`XI@xa0mV zIE=?0MtNsJu&>p`U4%ytJ8D}r8QB#7yA_@6+p}c}c6v0K`ny(f&-jCkX+VRHDaV8moFD)N2mC2#E&AIfrv>y zbCB%l)@dqpNwHbNBu+7pY`fRTVSzM9Dud}Pp|{TRnBM0Oyd=t+LWDelFooE9hSQ4t zb6r|f8YvlF$o`NlP2t3GzKnpK_YA8COA`o>G7#M**?Bi#Ln zC*{9eXoZg_Meu~xpL4JTj@Ibr;P!;g%zrXphhH!!c(<*iOwqe+8%^`xJLz(@%_~M7iP5u@T5OKR)KFx;~Qtob*UKN@`rv! z=wLTxv+d|`XpD$inr*d7O*B%Fr8-e}SeGc3*3)5W{QCe?pFxU0+*PMq$^;(CG6TAlL?6(b$}VJ{@oUH}Hzn zW@BlUza6~Q4jfeX#{TNP$qemiG)`aJXay0XOBm^h88Hxz-u!(722!^pI6GNWuHH4})Pd;^!IGFr* z4nUDXOpQ_c34A=GFz{<|z$!`0F5}NkLM}cHVOrTFp^z$;shnw=XJomft7by1I{Q3E zNXVwb_Ij!IRu8;6O}ep4dZlYt@mN&~oJ)`F$p4*pIl(SdWoSKGsV0$HeRfT&g}sRJ z4)mo3+U(i*O`~Bmt%UL<*=*8SX4=>vwE<&DmHmgx6}#0R3oHRYW>yVlCt+?C8xzm$ zyll>AXNC``xwzZn*Mzg4;qeQfgv5sU=vd6%*xr!cT}_9RJO(6q6Jxib6L)%_q&vc{1ga)ViEs(HJw4p<4cz z*Rwlf5?q}vp7SPyFGd~Ar(2BHN0g44;WWQPwKUk`gS`B+EX3BLf9FLDxe}5%lFG(c z|6*B)fT=L#m~~V9`jwnk7|63 zM^YEVr3L=GMKD&E5E)BAaHz9CqeqH-{zm_@S+6;~=IgWZB4cR(=HE?15pI4%Ht`W5 z3j20>rKDukeRQMYVT&%+hy2Ri`%*ehgPc*7ucPAzH#2H1M%wG$ROjrFFQ-R6w2+3r zWf%I|u!;ksTFx+>-0#puv^rlnv2E?YTez(GD8T$t{j$wU{k(?p8FxbC>Vec!YJ49o zB`!M{4r>Uh1v~sR4-&VL%fgEmn6h@WRXM!!juQlqzG=$cs(+fsiq|UTe9#80^)caUsgCMcC+8 z!qKA1z_A81+@xemMRaS`b{Z9__}uSh%Q_)(+&`sOwyi{pOGbQaRs{yj4037R@fBGd zx7@vQpeL;Duf6>B-!0$C=+54QO5ZvRjysyD@a7=o$>+Z^+98b7njm)JaSE!JrJ)pe z1kmbc+%Xj&2ZbhSo)4Sfu)VIaFUU*S3F7^XE-p>;5VYniT^H}LAqudCJBnlqG&W}b zMpx+0tsYmz|M21$U)JriwyuHwcS{!HCCaH`j=eybv5YKpCocFC9b0;Dh9P$pKAqHx zpL6Ih$IJa~6Np*Ut*vlLpt6(pU}m-1vu9--SdRDydmQrxe1+b7WxX1U_+#>PFwW@T zsv18|OX1ej+0LxHQO$k28eXaN;edG;g8!x@XSg=O0cVUj1;Y{cLM^lEoE|q^Y5NOi zFqTfw=T)|QfZ%2iY@W4*V9Z2+imwuRj;{Az2&em{U;*v{dLJszOGi`zm`JAc>IACU ze#&QK)tYFn{POVV_nCMUK3rqcj4ZMSVE%h6u1>Mj)Cej#cTfi7CeO_CZz*CaTL!KE zcT1Px^;K1ndb(uNNN>*Vf#HmPmURrh$bJ^>y}Ku24K+jS=y&O+>XroVq6gQ|vlbqj z0ObIleG1tH=%Dn%SWmv;$INVf^aGrg~Nu88a8q7jadz68nf5) z=fKfi4jL*1zEFVxk*KJ#AKw>$1Dg@g($DrPXU08C-f^V-LAwCC6==BL(vv5~a6jb$ zJ$_%wLFEnsGc5A(;qVjI@21igQC0T#y_N)4)#nui1U@MCWykDMO3&3J&rYruP}z6( z9h)f$q6hZp{>cjiUB+@X`+W{kHhMPRu=edR=>wYaZ-3e5gePecO(mwX)!O&;q^kJG zzhwzZhAe20WnP=YH7~=WPYqt#ES-x<2(Z3KvH%K1=G1myrxzvZ)g&Kc3{e1(9bc=> z$l>I2l-V3Gy4e3RvK;aM^tW5A z+{qFL-g{n#a%yplH*h*8KvxOLv^?6zGniQ zw`!rhF<{To47IXwEn1q#)brd7FVdqH7FZe$13@5PzT7~qr2zb1QVo~Bt*)w+QB%yauhicf%t^8X zRkr5L=8O|*ogcNO4${Ux1A4A;W;V#yM8gSDrAw~gM>z`+ga528Pkk}n7t@m2(mZ@o z_t;#D+j6`qXpWr}t(ry5l$Nm$NKAB#E6E>cruUuzRl@sjE%c*h#_u+&n&e@63T0?X zdY7EX%q)(DNb(2Zb!6Qh~`4L zHhRHBT{L2@S7?sJB7Pm_0^XWd=StRX<761PeE&3I$GDLMWNe#mb*JOxZPD+M%LGmH zal^eJO)St177Mk^BgoF%aQ5 z3YK)b_51P(i@{g2Nw4)nB4maZFTbw2W6xYzH+S_y?b%H|p3i4^sP3?V@{-x6ktO^d zuh3Ge^*9aKviaT=B0#vkayGyI=t!XCgMG3Kg0HHJ zd`s0T6_w}@r+Fvrc3XgV%-FF&Tc&Is45s|Pvl&>HTssxF9m)GxvI_hY{5@}kdc4{7 z$r>H@r!8hH=)PJRx4USYPIyufN`*E)3yDSosqA>|nrGV7G^}GSTl(CO8s1py0}lXg zxf91BhSXUXNfdX5(hQoF8U(l=65_c?3es>1;P_vrRu$6_@b16`Uz-k)f_7e9O3Q>;B#>>sTn^>bth@QPQQ z%Kw0ASB__4-=RhwyR#_V7Lot*?PYu)Lw+dCzL6IUH%^^8K=Po&ux zKix_vAP3kL`z#1oaU1f_MDmk|Yity^`OUQ=W z>UqamHo}2z9o&4dDdIID0gGTEyto)dWlZx)tvZnS?dZ~JY1O`tlpp%VV551JJQqRc z$@*6!tjL953L1~a8Kn!zETqepT4R_xKXq58ux+`*U{EKfhqwt9gqOf5V`po?SDGfdvMJWZ=6Mq_(HJ&k=TTp4kcGC^|<~zMs-k({vy<@nau{P*SAZq35DT6lk87zkDpDIn)@bi;v zJ<9J`T@fa^Wwt#=l|Rh|yRGPlejcZmz8~o`UMM~H1JdErKL$2Li^K^G7`_qUJaN}<2{BZNC)En8O3|U{#*JNy60N6G7HqN zyp4FyJ!fA>20KuC;^(K9>_v601$&_tHibQ9d+aVZbszki_TC#6gjDUns}cFjoEu0R z<}YCINvlbd;Y(_#d?e!|ZA9PQz`VY=|8CJkTqhqohz~drFqoH6Ce`OYX3{ho2*@%w z)47WEx7$ex@OK_C8otKOTp`|Iv#s1e5IW*ZLNvyX*BncNIdUu~OWM7f@&!HkH>iLq zCNC_^8=f0=Ku-u(%2?M*YlFlmmP=IQT5kP!%lc;AQg`ztZk_o?bcHn+vGL$= z1l`AI%~zA!NJt+R_YZY;>6Md52aq1L$X9G$l2zowfuA#+szwU7Gn!^Sm8J4MhRjN5 zJ8Y_syk6AvyKi@pq%jk6b$<&{GW%c%ov|9)HjhTOD7q{zI$SfePK4F%d>oh-qDMs& zTiMn;uj@H=Gy8 znvpsF^Znrt#cATBaFiWiUw{!9Z`fr7)W0&z zl((ztSA96huX$_;{c)9%6`+aJKKz#&u0a;AAxg%f5Z~>m=k(%RDxGnMl}Mv${nFKU z5P&avFqM}yMQ(7DpIrL|Dt?Fq3=eLka3e=y(6?~tHDRa+;QXH4Uz z3`vZhfMxrKcc$caZe_N0KPs={wcD%n=gS6+|9In|N-D4(!i$uW+p!IUWm;AS^~2&E zTG>@AMgVo)*Obrr9&Z<5eGbrreH1tBu=FcsFmmvH2=PfTeaa;8*NtenRtmy0W&IUQ z=loUMFCtaV-g_^5KHqnjZ`m`Ed)pSU;8$@XH_16>2&blc)@nk6RAk+cU9(SHg2<@% zr@tE9kRgF3Uh1)5vt8x>Bv}N-4qlr$k+PO^{D)N&Mj3@%rsbJ>Oy+je7scsz=UtZp zH|%EkC>VBR7)oswF&5(g9G5!MD~T(;NF(|Z9LaX~&;|EtXvBQPOtHZImOb>4MDNO< zW$_sXa@a?nwhtVekYzWFVJzZ=f~b*==bmjdR2b-Fi8^y3MJuEKyM-;QJr=|UvMVpI z@aN;xY({og+_%vvnq$1AzsQh`&Iw;1V;&@V$cY<^?0fW)J~>HUlxY7*rh=dOIkvV$ zUcVr&REo@>Kc2k_48+JLQn%b7)y2e)7>d#{EJH5zs$Y(8zw9IDCKVa&QZ2Mf*@|EO zZHW1)NEQ_UuEgxS%6+TpoB~yg&-o`kUKe1d?@U+*{#>GIMv0`bx?k{FM|h@S(ra^>L;T{Zc(5eEQ^ziT-N>X)W%(Aq-)5 zkJcO(Egf1rzR0Ykv({toGS`8)%2wwA7_4+h5PY{hkMwV@apDS zi53gq7^f6OYD03f-iXx*3|NfH_fZsmmUfBy_GZld!IQHLf-k1Ks8C}`b6BSS3`Wa6 z+>ko`ERcNoJ{?hMY)qbROOa-TuF&gr^aFP{Zx+83|G(qre@m{0l85*sd_vk3IQbPM zV=jW1taf7KzFv!+&<)DAxN9p70g^oz`y8VK3LI*t5Q3xU5A=kmO7v*7=n^t~uD8Y` zQkO~V@uF7+SUS^iC|SP})6xC}aitwDuvn??!KjxT-qc80Pku@b+J1CfJbe?!4U-%p zj}Rmw?)Pto*uN)^pnM}i60(|CFNxfzMV(lmyejt#Gvs?7y47TR)bW&4ob~dkr}qn` z_7n?Y+yapo!d}mxqkSa^uG>!Vp!-N@!R_mR>VS)!iZT%ZGfxve+<0AQc|$Gut4X3B z4EhT);ghFfPX z>}GYkW|=j!xtW5>L2~#U>mGjcuF~9Q%eF}%2S(#DrhpAiC=4o#tr5xSTax~vB`2sA z$X|iC@j3G{Vz2Va)g3-qjbJBw63(&6jedfe#$hG|;_FdP*y5YxA?#s`hv~TE&eg)q zXqdkAb*xK3y=rycr^Fh>SF#+B#%UB&ddYfbK1U3%WA)wfEe)gv_R_DX_=g$7P&3-) z7gwD|Ci4j4VQP1pb*cZlkuX`}VF`bKakv$_Iib4f>DRN?hl|C3n)Y_>w4$qMI&Cw) z+h48^9)19>t$!Okex;G)nnEXAg-IW1xZ)yRJW=(K5HQ3u_US(XUsZK)Eq;@bml!t8 z8GG?!gNg4$mj36h4hc8fL%6;F@HFCQ%Md9bk^)I9-9)}fuuKmD1YZPCap(B^(z%9f zenM8cDt2Hh-*$k!mhVgoEeC}_Lax)*l@HdN;X`MH zvSNZgawrYC31J{;zQ&#(*FcKO)?(2rR+uax$kHIjTI}RowlNG`P*-14$e26tPHid9 z|9@QrN4P!&$AE?$1>vZGaOTd`WZ4OsA)8OHN5x=G>z+5vIHse)XZr6N{Q0PaGZ5RY z>9SO;S=yf|ICg=C(&*rJ-C!YW>dFy6$*s;zc=B%vJENmn{PBJDz+FWpW&f=z`B}_8r2u|GFPT$v}GBd zf3fEevOaPSXjz-fG!J6D9`5_)Mhl7YhgQy1oXmX65X0Q#vL4V?0s_|HyQ`_EErY6k zh-xBmFeu<5X+Fp$>?tw$39wFwC(<6=+{f?ASh+AQm3&LNyMcF@yW%-1*+iuxCm`N-3pt_ew}Up ztJZfKab@eE$$VhNXXRwZz?$T(o=0HXa3BcqpA4)&v#}sJ*MCzxmZ*W~uw>M{cNR0g`L$crTHXSRGm=po=mxN%G3Ug4s$&cY5lXHR z`c?g@2BB%+uPx}4)IxOvKcfdEwJm~*eh*{_!eJo27ZOQjktUz6Px>BvfH5yp zWO@5BkE$sf(<4!B?D`Q+HIZvp4jNS`a-FW>3|amX&b#T$09G096(@meBj^cZe-MK( zlt7h4nJB?&$2|9viD5a>swgLsL%-Am80cRtN?3|zc)RFHdoOjwv2iZHNb>Pg^*gUA9|El_oV=?+`4%=fX*aKTMtLS1ZyX8u|#d zfy)E#WdY=!Hzx-lkiv-qJ-sn&^YbdZ;ZLhQ)md=e3M_@5d(Xh{kGK1Ia-?B>sSvlm zhfBK=g4jV62nOFUW+9{lasQ*}Jp9>wyD+XpRTZ^2ZS7rqQ&l4rwMUSuJyWZqQfaI9 zs#vvarbZ|ddz2WpYZE()QX|odn7=pgACQm4^LfsFpL4G3dxbRS)?(a(5RmY`D=DQc zCxM^ApEF!V%N_s3UkOie%5h`et1ACcdpzV{tX_Fdqt&yq$&Fw!X{tx+nPeCegF=c# zj=owZB(yW9B^WDITc?0N6C!)=7WR$N5B&N(qI;LQ(j?=VB0sgUN%;*Hz*GjegXna9 zxzN;V%8jbVLt zi{En&<2ZpnaUn(@=Uf%3!#KM`DC^KUw*FGC0R0KrtzZo%42(s~W1RALj%z0IHHck- zvhJH|Mt?nyc+%aeFfDZ`JOjr1Oh}xBW@X7dK9aZorcUk8%1-19m+6@*!YusqGLb7$ zuS5!!u<(7zGq1M+031=(E$G=DDNxb&#Ol@k6t=bUhSTk-G38u=KAa58HzOKVg-0Y* zZdYUVu4uUXY3Zb)S_kkdCxU8upy)#S=kcgH#+U$$M4flt^HQCQ@!wDiZS_qBex{G- zZ-Qg(ScfL~^Omu_Jz6LS^nS-^!w>RNF0tCQzg>9l428D16)J)19OIUVdo|>+Ae-JD zqd{gymZ*5Yx77!OT=b9X=nHqW*1P)0??Ci1QzU+1@@~%&k2vt>NjGI5YOrQE%M2U? zZ1GH_FD*9m{^l?gZ8?wM7pznIYjge@702D3bfn1Skw+}w@FPL(t>sjVQ%T%Tw;1xXfoPCkl3Hv)+4hD9ARK(cU_ zt@=^Lb#v+(RgglboJAwfk=yEaP(okjZ|kY<3gx<$ZXR`-+Ug zuLzDE^$jbg-iYBVrHIk4+wy$#KI=9Ee!@7^*+4(pv#CG|FI&Bki?PK+KmA5lKpH^b zT4X$}dqC`Vqb`0$JE5tj6)f*Px@4B0epSlykVjlnJ;X8lB+|az#{YEF^*S}5X)}Szzl~TxE zfw@Lf@`$Kdt8Me-uO+(qc(FFT)(vaRYP{)KK@&v(bVry_q9 z+6HKSTv4=pIK7#6E=zE2Yk)wOg;Od_K8p1xSxNgvncHO5MI1I%ND34wcX=qIM?E-J zbDvk`Sw~BA^jf~Ma_h}|G;7zF{p{uXWnFri;e3weuW1<;kqM{S^vi9L{^#bKaMNFf z?|8)sDZN@rU1&0w;J(wMH@Or+b?{^Kj6RA!+}G4G{u4i+D8)~y&+tBmoRHG9zU%Bfw6+nIFBVk9 zs|Qc2Fcj4r&K&eSk+`qrX71wFH&*ml#IbtSr$y_LMYF4GeoT4Kt+jyPZ#GZ%qyxzP zNCiHrFvbt<1@lt|L)8`jV5oXUg1>HnlMO;3l%rEdYuU>ev;ifA9GYz zZIIG!3BT8NKWr$tkbsDg*RCM+@;%FpvE_M+i!PZLGRPS;wV7OFoVcWsS@ zl>2slb)kQJ{jblfg{EYG{^rZl>N0}-6@6y7T?jkp$|UZ`E^a8K*~j2r`(M;(s_+OT z5?(zPZ4;a6lKq0!)QBU;kmI$Kt?fnzOLWY1U4@*55fdh z84wv3qr$l^^-BeJESCZ6yl#m_(Y9EBHp}g(Z6f?@@w8V3NN?=VT682H(Ywm*7d)QO z)XG!)0an*;6%-Iu?USXdnNL^igBX-b=QEqCan2p}`7!t7-I9ddGfR^va-x67*?)IZ z#%yRMlUa)jNptT@CN5OvxsbAcdc=O5Lf72&aj@psQOH%G&fQW6!`&^vpD$NzqrzAB zoyq_2-IR4Qh*g`Ml;YYxKIY%14b*ELraMD#~B~=(zlox|T zv_n1KN=)f;zz_FqdRFY9=#`htna^v+qe=ZL`%t9CFlUJk-?3_QhMDR7OHHJGnX>*; zLY^?EKUjD8?d!Qc^39{C<{|z(Zd2l_MkxKyX0ux~W}T(Sc11}ZHaic@k48Zz(HctCn& z;?tLWH^l|R6t5(gk3+4M4`XFiFQiCMD!*JK=o9@LkA9g5keL@N$wNb~Az5PDjtdSI z7@h@%OQwkKE7u6I%bI2A7sMLuBUb4#r%MCQFZSUJL=f}m(~plNiX!Vy3%UyV;;r9n za$c~h=@AG%M6j+Hho$H&>U*`xcLzCFad`D>e5r`b<@KxX7lXLNMY?Cz?=EQZx$LFx zuj68R7pbh>92brBuLWM4cTIigp^xqQ!Dkd^sL2~3XXubRL~>$$4G@$V0w|s|Y&Gme z43ZTn)|Xs@!@VfnNoD}XPy9I9Bc|=I6EUfIW$@qJu?{g{7Kn)ub_^Z2MRXBtFo#sy zA)&NA?0!&VoJG~H0P{6QQD1rO7y3h~8aOz#@wCetYO$7bYt;b}uke=5SQXuoj3B}o zXkZPy&sV%30m>yfOvUOZ z!HDOxs~1P{?iA7aGB<)@#{#ND>Z{?2n2@TGZC&pD`FmE_yv?o}rRK-2zzxMtLOp)sQ{vlc zdcsWjC3=TtH$(|eT;lyNm0>qb!pfbm>aDxY%W|AIIO|hpX6#Yl{+1ZeT9i1+S~4bj z_45s9?WdkoOOw~#D3}*`!NM$;+*ACN|DD#i!qo;$GT+dx|6ph9sl`zJkQzot#(iWm zw5O#XaCRfaV3zt6md6&2TBNjS)x*iW#l+T{rl4DK!ad~u8CMU|6Y8?oVe~v4w4aUC z!Ib(`)!6B7IV?g8-SPDONJ<#Wmuc`PRF`r;s?{@;kF3<~*8r|leeC47hYS#X<}Ls? z!mv>*h_c-rt7%o;^sMVN@4ei}`u#VE81(J3bIREy7)>v$B4Dc}8Dc&~FuJ0lCnJ|@ z-*+lQ?+{WjF{=_c zDG$Sd%|ZpfkAy-@d#%i%NPr2A)W}iSzIq!^&bZ{*x5@8Y>e+97rT93EWJ{DrjTA7K z?)eTOj=g=z>2TbE{sBo71HreAc;x#C%n2T2cq+cc>f z?-LssTGLD#X5~kpaE&UNlg-AcxI@44X?a+~!m_@b*O1+X8A)4lb?-3x4Z3%1Re)8C zPM%t-@oq~9n(fx_$_jyDX36WPFu4r->1D}*y$J%(R>pQSHNkmBU#9ZMDn1_q_ksly z)UP=<{cxc)5R8BHi+8oVQv|;qt**a8L%mKYZ+jc&wkB!5{RDsbUV)wo=oJC}$SA_D z7*p(Mi=mzDuLtVL;{kUGMq=_Kf~l~sZ&UqBS^YIyRGcArWifc4%d6l@oJy5>uTfh5 zsOqFC9o$&ue9UBD@jr?&s2_WO`%np7neXh#X%jJl(3n~a70NZ8 z(&Qpd^-K)n@~NlnXD(>{*7x~N0(PnP5a!A2pO;5!>{pf_EI!ncUOqZK18qoUY|zh> z^L5t73TsGJcBB$K(*Sut)h>>M-2pj?J3_kFDG{-L@}m}(`29I}`Q%?rrsjjW?YClT zUXuFgY^vZAE&-Mm-?R?OD97mtIh!Wq|F%`fg8|+L0APBwQtY5G@vv zZts0KDomE&l&mW;((?DM&=M#cWbZEqA)I=6^%x(hxuU225ZBTNh>rTk?OYjt(qFD= zS`=bdnaJz!w#5{N3$2zJbuawKu{rEOl!tqo1HPVd)pOb}|DhjVoA2{}^&)VeL9VZ6 zXZ$8jMOz5y25D-oyrKd!w^lh?0Wksgw-G#g5?VZRW+C5&d}{B05^8B`O`cY^C-|tUh=`nT#9}HPGBsx4g{pbYfC3&hi2c)}}nX=q0Ucw&>!28zS4|bisuZTH; zlTtJE53Hkwo(F>I69CF4QcH{SxY@MG(22H##?=pX9r%IXRHfe4_c>+JF*u|i3sp*6mCzK{oo{awEc3!zKic#hg#RX1hpf^=wWp42X&?zt zGKVeedU*x$(y{w93Q0nyj|Rceh+trqUI5Ej0xpTwrZI>ZJ}myZ<|crTlEAjcT87yD z3w=rw3}K79aERO9E#L&Wki*#GUoLMM`TUCHDaa2EZD4%7r6F|owqA=EGLic{EpW+bC`?dS5W5xjYswxsvo&*}5j+<29Dh|t{39y)i$28r zC2P)STVHEwv0hWkWXx0vkVyy;ov~t-tK0l{=KGla3j*Bf_?i6W5PZvD^QgK#uSYiR zRXVevptNUkSBN#S9Zr_a7_9(GSCDE2GaE^ubNwE_HPd9y2m}GNE`NJaJ$d+ zO+aB`h+Wnz z4#E!V+w>tq@r){d|6?Y3!xiTC>1pOmYjLu&nKSzOSeBCjq zdk$OPhVS;>NHF)v>VwgS#2j64;J)n=95hOws64=T#U4mvo=WdcpoZrd`YIOzTqcvD z&)!Jk0@bPh0dTxb)Jw?s*`}v zTBbXh$u!3e)!`ctnr0ssFbjEt_k@xu2}1G1^`eqB>uh!Q`@oMrDtE@W*BdySAr{@% zB_`#ZLEZ(lRyjS^0nmmD_{(jtwK~g#rEe^G+#ZlJlLNnTnmaQ*Z%iz!`UFJ<(x(D! zk{?nlnA6Q#Sxv1R0fcKeOm7YRpJ8l-bB}K|{_~NQb2B%tU88dORsa{tqt`;4yU{*# zfA35R$&*>Z7)^gf=asL`F^RKbXK(2+1wtScVmG-CRixTGC`P?zq2 zGrNcxd@0NZ%+t?ya*~il$SC)Gb5)z*V{GWT0i%HYKIoCk4G6fFVmv+4 zX_jWxc{F75QW5^tiAHsZFwkv<-@4TAIdk!OBhS@)#@{P-d?}&Gfb9XkbDQ%mPGaZL z4E1y4w>0t!@mf&}ZgDylLOxAiHAyE<#EcPcvJO4>20T zJr!Sk=y@_xXPs$^2+5E0$=|xz$C4`6hHZD_C;;x z0Ewb(HvoUHAMJ=_dI8pU5+ZmPuFD1(+g5IXt*N1pO z+7o`HbA0Gz2Rca9RS4o1gt)_|j|`jbQG{kT>cDe=<@dkM&bwmin5((N0v409aV|uJsYzV{;PuiM)7Pz|q{vYLA|2 zUEU$i#p87=^yTXJCjHAqecp!N=&#a11)@isGji_L-x6P!9mJW&YP;Co@HxAk_EJT~ z^!9I^*8*;L*JLQewhNx1q32cJXPpTypRSv>g$8b^fe1y?S==Kl>zg ztNs1`GPN{!$0mo^ml5$?jdvqvZkpH7&u%XCIbb;MSnc#AU{o{8OiGBhtqc(F^b9eS z>ynRdYbp_vsJ?CJz4KN1d`Uq>?D^}o*&(8NGCXQ|rg~1eXWD+Esu6j_*N3>VX45T_ zIvjD*Yx=ju|H;OL5vG1~q+lP$9josS+yX6#pw-)+!1S;*%zxfZo&kb3&k>w*0RNF&KUPe)r@ zMd8D6nl(_Jl`GqS-_Lxma)!5)_h--YvQyBT9q@{hUt#g&;So06(ezx-En~9=t&#LE z^Of2Y{u$IcO)$J)&3J2v$E~@=%bG{X06RSbd>%U#ZLoh)8SW7S{VH@W5H#%H^x*Y> z6f|VK)~sTj+rZ)7LH>uO6M#%}mbZWGKVbV%3CdtfEX-L)5$Rn^*=h%*)pNAoJyHu(KLH0sf^S!R`uo2$-GtO=uZSUDMsGL9j^tiE8f5F*> z?6tM_@p4&K8>F3#jo$Q9ZjiW9VJ+YCtIQ;Cy5mH?jNKw5ZMpBS?`By}D>`Gc%5_!j z1nD|uWA5dji$257wM|)$tEPSB_->APtq7+8eSR0Jct!V$Zla0iUB9qz%DQ+nFV%CZ zXOWpdG^orlfwCGHawPoZi^!e^p+XNPC+O3;;I=7dW9}e3eH@@Dc`T6Mk%;f6%Ai=f zgV`2R7We}Z#}sgOkm{u3Dt@=Rt)y$pL&CLK#pgx&wZAjnw_I%q{oe6RLiR%SC$fDqHBO=ioeQ8)UfT5wVIN9s<{2uB ze#9J!?&3J^koor(WIojimKryo_FYRodX~Ddx-=iBdSkFj3`23~L@};;!bJ+n#d8Pl zW*6|^h(~0HTRnlO%tE_tlBh&xth}a{En_6}GN#i29nkia*l%Hbb@zIvkkroUJi1o8 z(9lJA;9}~^j{TWqgDECLU>YhOCWR<91@jh3CYO~}kKZto%P$uq+poW>egE;D{hGtI?*bb)UEg;PXkN^fki>g9!Eq9TEnUs6@dg); zYx&opF|m3QP@~Wg@Y@G=_dn%+&crIB{r+&KJ%E&br#=qFq%6?)6lmeCYU2=um{|GY zs(hVZ>m=~4Y=jf=q36nj>3=@2lS(0iLGrBkMrD@tbNMSDiaa~LQ0wMcWt>Hr3UyB+ zof=tf(Hu5qdL~hvLy2Xh)~{0Jy#Wg32l9A?_y!p0M@tYOOJ!SR* z`S1^ZPLGU-4SuIJwL<9(Xy!KWuW@fHb8p7+r%fL%Q&0&;sZe=7AG)FPn&R6{(K|r3 zvo)8>Jl@=tiB**FcOTe?dWe&e^gWOdaYew-T|w#0finm@TuN>%qCHnujt*4%es&3_ zPI5ReG@KwGi2sddc74Hg>gq~i#FUn{^KPDkuB`ppU!f5Q>`||qT^XegS5$`bOc8az zmuhO1t<$UYB0&*DIzk#c=XGe49t~H_$SYKxt$o2{67XE*Xh>-@Cowm167E&y(@|UL zsqeQGMX^Rmgg>VEVEgL>gx~AtMa#ItnfSRPX`p9?lEkNo#*Nz33JqT|N#9FgH#rUA zvA3%KnQ7!G)y*HC^kiM>rNO@0Mw1>RsH3AHZ1{A3UhI*I$gRhMx$||q^p9Cg_P7I; zY*s+^DLrILO)jQ^bl9s%i`?ae#U4xYk^yeiLJ8D$b(7NTtpzhB?p<&In&Sp`#Q6_&l05*_~jM7#!}E z$w9{CnhB%ZM2LSp5X%Flx0w21l|H;WPrE7#>rD4FHoB4{1ZFh3BZfPf@Y9Vew+#+D zWuT#i>mOI;o{L_;Tyae%SKZA8W^3vbOB9CcLNSf&2}t z*ZtSUdZqP8)wR{McYLu6$D2lVAz<@dlfMJs^_`D;Y0+T;s)=|1yQ!^Ft@*m7o-4-D z|No&(t6Rgli_7+B|4~>?gTWzwHnuqj|52FD9(y6C6~xc025;6cIXNt)g$ISJWedZ- z1e!mEwaBW0-En^AJ}tU^lkFbjL>lvl*V%78_+ZC;>h}wJ(A^j(l>5rOSe^bS{k-rR zF^v$kaTqfmuSib;Rhl}C5QFN#e?>QuFU_zX@2u1XN72*`)~2(fDWqUih+uUNVa(Qs zoK^K;9ZaPRR37~{EoP03{65|1u2L=zZ}iKVEiSAt5v!3&e2ezd%jBYZBLDSC2tPRo zTD0vyiYKpJy#P<9I|_Ic9qm&;oNV7Q%5kU!F_&k2$@Oc@m>rlS!&T|$X^3wo&~3)D zD}RU$mtRnpFuKRH<=f^Yzct{T!M^`!LiJym-)=;(G1!|BCv_ZSAP^4;=8Bb4Ij8^7 zb-j~vm-lY_WxcxBhNI60eXpaD5rGb|CQT(DI!Th#pRILn_S45j)P}v1lJW=tlGH46 z@d+TNTeScUz`c6^$dry77rIpYJm*eO!^^Ll0>I&rHTn;ld~*?^+8(n0ji|{BIj}-4 z=8(R45dAPb=pNZ{qU^%BIuDQohm|d#CJ~GVRvwbd$Wu=is2;&`k_?}aoUK);x)>Dt z&1zQy47XLEpDv5eaIM>!eGYet=Q6Ol=4^j~h?c#35*M_zaV>6?5N7QMlIq!phUU9X zCCW+fb7NV=e&z9J;wts3y4~!guIE(6S%!JrWEjeBr8M;h!HhOpWR&gH1tpAqX+895 zfvN*9^1N`%zE9xaT}g&ViI>q#(wM&4s=;CFDx_Ymywk&mtbMj#N1E?^^=$hccqj13 zv_S+pLEF6$F;6CE6>n|*G2-+{klOs|psz5UCb#orp{{8q#l@M)3*&OzL_q*;}^Qvs!k>Y(CH;eDJ&{p$P%%ddW|eYrzWA=BHJ!* zU&dugDQ%CCc${xWh7#nug|prjeJ+rFy}c&AsEtY?`4@f&^aV1dS-c%L+G%tKv=eM*XQr3GHCl?lNJott-VQJp?pYy+Q)sfiXfX>4OrNm$u-pe zK)~guF#Pt5SCwsqC>2ryF&Dp;hD%wTTPusMD_ihky+PE&n|vXvmX)eTm1uOP;%+;8 zNtP!YBmmo@qYBjf9#%;WP^4_#y-Fmo(@`QQsV&K-n-ccQE{r)OyUjA*X4B6H;dG)E z_qRd}N;8n`J?K79={ki*WMk**7k=0JC^W`=yfCiAi{d+um+nDicMXm;sK#0vjPHae zK)4*fom=hQVk`J9Z#^LE8?BdWwei@JL3qBC18st7-`f^5b?XN;|XjkOW*ajf0_; zQff3=pp>nCe3%@6R4ZR!7xtc4T+MF~-Nv#&7AO4&=Lh7}3WBV`Ebbm&zLOiDSKY+9 zj9ZPGDn3utYmULp%sk=B zp)Y`*?$xX@C{}LCjr*2O=DGb0L3u%Bs-BN* zRgk78g|G@vsngRkbmZI0(JkS=6s%gG%;TK0S#)J|=DG1t{>;_B2uY9-E!`Am zg)^Gx$LG*x-Z zQJM_m0>&hJLR$D9wkCR&lT~AxkdpX@LvB&4J`cIRS2mH^!7EakoanF@4JHyj>)RaF zPHw{@mlmR1j3TsHN3jhsCtg zF5@6Z-!wrGfz|W&%H11;_3H}i?0SFC`}pc zNwpiG1eiA{=1PE+fHT%xQEs z!Z+;6Jh>Hg=uREvr9NT&yIrCuPAkcY1Clj#e}K_5LLxUa@gmCdmb1{c<;4A$R3)D( z$p(Zya%BCZ-ZclyLiznW!F(F_arPksQ-Muw91;5}dUwo;_-vvsDCUS7zs0nx!u=>L zlS`uX>!nk^A^RJ2h1j&0)?0I=NK21JhhbenmHAX|{N?q_%!i6(+|Z8$0iz&ht$N4Z z(K1K!EKUKnZqCV3oP_0LCveRcn5nq!Xz-zWB)dtGpeKgEMzWDq2oI4 zk0H6f^wchz68A_^cm%PO5Yq#mzdC<9qp1SPT9Yco=k~)G_|sRg5#x2n8-K=`eXvC? zej14dYE4sY&+4c4H_rk1{vsInA1|c@$$#fud}MzFGim%ONxT$NxIW&~@!AoHW337b z`U-tT`inHaEUChJ+oZ|2R`yjn7zJs}C3rNqw8BM-J2T`t{N3O_3FC|oj=PVp7zQly z+}Z^$+xAFXYMJhm<@U4i;Ll5ztvZEDScCJI+^>t~W>?$zlN6uL z0@_!FcV2umugJAb8>yP@6Rothx2TA>bof1}<#h*Dr#W>JS5Zc3qQG3!D-16aAcDVRBqwbF>WyBY#E|UAF}Ec%)x4b6 zHHY0;hWP=19kjBx^`fY+-d4XP&M#nJQ%BVra9ivl53fF;<7hVwaQ$`TK`P!Qyl zDZAaL2e(eNu7ZI{j;e(*AgYfI$o!EAf!6#lPyl*-K>7}cS&5Z4)5qrgXNdw}5$8J+ zrF=iN=BKXiXb`lB{v?k|s4^bBSK>#oc-BBlAb>1D?4ty2b%_wxxprVkK!|s+-cRY$ zkGB0)h`Mv&07TJ%9}p@Y;SCk<%7@b9D+OE8ar`s(VZ58Rg90A7!;eyr9J2?-eo`Ao zzDp3Y3UxipiiFbQbF|38Jf!#JJIi%l+*|vBJ{Uu3Gf=z(5Rzmq4rbj|BxcT9zw&N{ zn$%_Jx<@ifn6*zS&L<2M=!4{`!5(OdRIOeZCAREh9ffa0GpVfU`ms)_E zMI4%r!Ym_Y+XPdpSN~D4Z<-H6(!`^EGSwZ$2tAe+@gE)EXkz8d%cA<6D_0n*6g;d3 zR-qGqLY)l+azr;hjxD*%$Mp6EjG)ww)LLJSgSnHtik!kk6gVb}S17G7vs2)$60ntU ztAt@r;-8P_KlbB%CWk`9L3CU45OegdPk4jq`!4N&ha^ei{5zb!)sVDYq*fiC5wPok+tlXP) zkAK=WeP=X;v9~eq>+uUnWL*7r_REcIt9*5L#lv~rqes0iGP2JR+D{bfpPA=v8(Wm7 zi>^<<&EI5BFNL}*{a#;>VO>9J7gCFQl~M5vV(YeG!dot`gxGuZ7b!N0F;C`GC^PrA z+O?`0wJ!^^FCinMyL7LlVcoi#N>F>k!1q<2u01VW#{} zqQ!f}bxL|gu;H7Mp)TvAOvd2eSj%D9M= z?*FY$!V$IyEFZDGEL_yQFHu=!WtU!{@lbbkeWnvzWpfl*S6+#NL2nQ8_$dRHw>tEf1W$$(tu-%BMc#oNkmQzna#AM2B z@xna^eAW(dH5s;~=I+7}}JS`)*}$B% zelGcN#hq5-gCcyirm?=irrSo1bNhmo3d4Dj-pEF_=$ejWw^o!VGMPcl5aHfW+7h0- z1@@4tZtNzhJNqOyg#AX8L*=K_E1iQYS*S0{_HH3lglzxV&(8(hj?=|-BNQ?vCeO3T z=FpZ86i%S@TRv|*`fHQsuu%oshzk?axF)*F2<%*H+gHPfTJ=#H<$lfj{800S+^_)u z8~ThOe&*-wE*8Cab*hYqni$6F^TJ#=GerSIMj0XltkCo%gr%?HZ%9EO|3qrp?VwXpU8eAjwc z^o0fzl4VcICB*d2VN56d+5weL-Y{%|^7MT<2ds8zuq%A{dj#E7ajwI(0BT`FISy0dueKkCN4A{mTd zQ`v-!So0=Uu0No`@zn+9fkpK0oIw9A;x5h1;^O6v{o96>`WuIw zU$4cwyHoiFz$@*Zy*r^A(Q@wK>UqQ0FTJpVqe|j$>YCEzjObBKiT{VZZahI=2ixI@ z1agxp$<@=!w~*KwGOffpvrks(8gnk_+-yyc{kfp1Swf;ID}mlfe_MFt9Js-5#+Vyu zcM-brL|aNnar5;9myN*aYgSxZVo(aaI})cA$5-zjRpgb$)_O?xuu#i)(DD3bI}ce+ z>Ey8o0>A=~2Yg+!x0b`mGrZedZLUGA{bzdw3o^j4!ny|kZXthI2hC7nM4DHR|l79`}Jn}9OnhVJ` zSMHa5*i={l-o;qVjEyYL#+xFAZk#`e7*#qcyp9HQ+1GxrjsBTrVc0%{M9k!D8=#w8 znv=zq%Rr6B{+ze{9s2`hd#ede8Dx@D_fui~Dh9S-fm7<1zWeONi4Tv!jI;e-uz6kB z*Tuw#QEj)sB*uzd0%Xb8m^b16auir-O`l?`wN6+`kJDnRD(Oe zWZua)%=oseY%upBMIL|Akhm-V3+^W<(D?JD!B-L7&&_25vEsDc+4ebCqX#m?_2?x# z>R6mkZ7-(Pn#$@-v%w&`u z0>(J#q;HcrNkeqDhUDdFg;-d>a{_{TCg)XPNrIm;n!^tHU}%3rYlCJ(sSnJ(%ZJ|H zuh^jJqTSJyn+Z9@(%__{z{j*e5T_276x4l2M6P$yL;PoFQ2Azj&!$i`l3FHlp~YdW zte;TNK9!{K%_@}5Sr3MQ-+}1CB~#AlnuRowaxRF3pJRFUzMnH1zuf-(`(OF`YFkmR z#>Wot9Z!1QSI-S2=HLJH2VomFJl)`r?qm>V+nQMdn_oO$X2)EAq^Hci{=VJ-JG4hF zK6oeedeoqngbRt8Au)rdEoHENm#NRKF3G{l#<0xSb(u=%hILNVsEi?&=Xmf%r`volV5so6+i#32pAe~6#2nO(Il!_ zaXsomvi1!M(ei60RceI`P3w8_i^=ryu3R^mdLff65suYG*{_tOWVHu^1b|`pDHq?p zj=rn6!OL~Z3+S{HYSRG471G@|RU*2R0`AXK@ye$f z@gkyr0+zmWGjdJbzW@HA>AHfu^tt4P#{I~nrewr-N6Z&T+F18rqH9Oj-~T+2dKA&neAccuj z_1g?&F=RY3718=eJa}2nvS7d`RvBe}gVXfd5B9j&^W!I0q^D$&mNipI{O;l|t!sn(rUy$*vif4$k-oFvw?6EH%kb=A6q zt7BHjfkaI~b1q7HhEL6d8fEM0(Gl`lZ1WB{e1Ey9aIlbNl`*AcT@glv^gMQ&jD=-W z+~5mpR<+%XRi~r7{tof}>%Hxd0*cfEnONI*rI}QlF3oEcwoFZ(PWQNzBS;|mUzyz$ zRZN*~ehW9>UiLk{mT>0^gONvyEV^ep!rS&oOTGgu(Ovw-$~ke09cepW&%ewPwx$-^ z?EauL(6jxnS^rVc?Yl&+5)JV`$l4U#lS0NV_pp3oY%K8hQA3!U-WK}{wPZ#AP7$A0 z@H?m%e*8O#YVV5kcNeQvyV|-b!|Kk8Y6_WUwN+c@l}R5?V~f5jFA{34GZ5%Fr>yk0 zvAJijuVy5GoW7?~mc01@h6={l70X!rjTM#7fB(h$!m8&}Df~u(oVsz9?z)d3Q!hLU z&U2$bf^xPrsfT`P$4PP$?3y$nIA2Yh`pMRiN`r4?q`nmb?UK(|*RQwyX62s#$j(hz zd;*^C@O7<|8?Q`~8w=?%VMVRGT*W)m1U) z7Q}#eAm}3!N2yPMzElUHZ3BckjMtRN8&(h8RaE6g6F|f!LgHS0ROC(aS!XP?rShy? zv865=V5vIvABFf;Kj*XA!kfK}05tN7A8LYn-5gg+0ffM9xl!;(ALWd=0_WXQbLm@R zwUpNP!=!}s1gRjK^TP`QEpF=9w~X9ta!#sG!V8-T4q`9sprWy$HiV7nh?q%!M#YAV zZJv~eeSUr?C;Og+|9(m5tOj|}_ky$ky$sfn1i~Q>en}Yax!k3j z7<6#?&9^X4ytr(QV85Uu>8wd#TYw}O;la^Yyb!5j9mWe;lG5wd1;rKaM)Z_hq#1#= zjJND78FKKfvZ*!Q4CL4|p}zk4D@cpLPFqEK^>RdjmzPw`gLwCFl##@_WhW5(!=A$k zs3XoIK?AGSvvHFRKiOM8r-~SN5+PaPwVo6B;x+k~NLBrXx1}z?NC=ru1n$*f30`*t zultD8G7T(avc!d7pM?97?cwaJS#3hzS@N<)DalNGtn{P9KRR!d$+ z3(6He$(-TV2x}>aZ*Xgy*&o9KYt?fJL2Ms~iu6K61XYGQKrSqtQ{9u1=Fh)k(|^^J z@GyakCOr%B=3R@2de-NxWi_^jt?g$^5gwTFcktrfvyW-LF9trTnobq@Qjk2M_@n8#0jNSY~Q68Nct`bVu9^H z`YDJ*SZx6hIOVewE)UlZNrH2GT5s_ix&+5<%)a*@r&adb0$(9Gl>1LS zNhTXtcaY?<7hlFgN+MK;+m!B3S5(AxI7=y0Yh`xMBc+xX%-7!6S>77NNx|02$>Ys| zFsU*EA~vdbZWa4bdp+engpIcDDO{vrnJ=Z~w)i~_fW-V|6N$Vjy7`gZR)>@Rqv*>i zONqOp{}ak7l~J;*nm$P1PoHR=sy91j+jkFc+aAVU`H2d^CwuMTX2SMnjSe|z(ZG}> zjP8n47cSo6qq@-LezX0t9e@+PNuJ4E$pI9)8&#)%e=RUgzUEF28oL{-X-Dx1z8Klm ztyS6;HC=bFh>m7JN%#=3*`ko{B4!pC8agu?xT5GSyHIfVLSp1A;g)oaFi<*K=|)tt z5ZZRSS6$v~m@2kE@b9HX_K^IehP0Fh(l%xAFYJXon*1x$VBL?4ryoqG^=pbH?}O1v zb{+}c1xB&;3`Q+T+u`5y6$R^f&F~Pnno5m@MMONEl=mUprY=2mS$WFRd1V} zrB$?Z8Ud{PRDG6kX<=Ma`rQm-gV3{>(yKxxb#j^BpB;->_qfHKvjD6%+b{sJygGQg zb>4*c0l79h$Db(?B6#y9p4M^jJX0s2UYX~~gltvJ)T#zoSXOqHK&H~SZ@1VT{YCf# z7yCO!BNhuAVf|$Ns3SxN*WW~->F4DH<{LRWO8(P|RQ08)GA`cb^jTRpE_J|E7w>Xg$^G>HCF0j(mNUf)?lPrv`qAc^wcFNoy~@g3 zr4g!^@Gh4L0+a4U`whGy*CDlVBoqY3(fU{t_>$2)k4WQ~CUVjc5AuH$on>58|J%nc zM7q0Fx>ZU-CMYc+jig930qFq)e$tJ!lG5E9&5)Ls9E{usA~D!RV9MZspZn>a?6tGA zv+s3%;=OJsv`C$?CZ80{#1*}O>FCjN?QqL^I=1H>^Rf3TuYWsdxqg@>?!3}pOkEWO zkE}OpA+wC`a9fra<(L#wcS0W6NEbS^6&P5XkmtM*`HEi&fjwF*)8yXVdN%&-f|J>8 zR5Db#a{_nj52TZ`eR9dL5IZoL9fFE6Tf&UJm-^5ksZhejY*tV#OGKD&b3~X-q{Ba> z9Z>-;SyOjBRm0A)UkB|~h+ zIB%?OF_<~6?WhX>SO)TFZgT?KW7jOpDeUZ7EP;68q~!OPQLLI$dKvcwNISpT{!z)4 zA2{Hf!JFA0v$=s=i$39pV7&v})@0T2^0#VqjaKIBsjihK3gjri5VQ-ZggR{M7)l}-my+3PyN?{b0; zWjt~lt#((9QG#oHWtP|9?eT`yz3R&u;cJ{D%TXOV8B`?>=BZj-|0cs!lf<$* z66j?`9opRmrGBSv#vVtw&=G~%hE9N%`n$cN*embzq!waujYpDP12Ps61!bVi4EuMv z^o(RLiX`TxZO<6fH`Xd<3Yo#w)h5$w-H5o%>wACksT`h3;VXF#FV`4?e)RHi>S{Ya zxP8r3@c8ZhEdHFQ&@v|$dsWC(KMlx1#ZF8n*^y$9*=b2s%1oF;LUy6O{bHB3TbZA9 zgtb#Z_vR*b#*rrz4u?sI29-4q-A2Rc?USZ$-`X?=@ohY$V(@c~c}bk-LWNvn!?eCI zj`svz9JSTDb>xlJHyM2mHMlAj#G4nEfs-83&vf}%AjUHhOuuG*YSxAt^t@|`;k%~e z=QJ`iu`}D{>es%*F`C{X#pe%!XW6?qI`3Pqk*JDEyDh8Hxro7Uc{stMDVa@w8o)Z}wT$QRfFg z|E>C0UC%DdP3rK1n$czwyz5+@x=U?W74oV-Qu=js0+m z9(?D#l!S`n{m$4eoq2D7wJufCsfmm zRl5DHw%L)bL@OvCgUU_(g*{j$DqS;KcZT1T%t}sI}cO8bK7-8Z6`={tW>}5>*zW&!wDuASbT5HKA8c@_#oH zRe8W7={!PMqxp9^TSmP(Wc1T2mTejGZmy@4;hxsNlvkKQwH1+8vl4AX*u}oy@?S4gA0H^7pr8qVyXIw^EOFujzdwgi@ z8)-V9Z0gKDBCcGXag9eeijO(lu@Zx#CS{TV65$yB;yn93#!SrlZ;p>B2JBFSl~M92 zRKOk1mr%^mKK@X!N6x;g5%!U7te+1O_f1uS=uJ2tLsyO1(-AQ=AoT@*favzvqkA+D z6?2rN+ED7=g#OD&$Fwr2zZr#*lv*=bd>=s9#@BA6#=kbZ4{9#R%S}@81kM$M%W`X% zU1#73l*tH!Gt;PRsw0;b!8AwmMsG;iexGQP9JVq~sd^#P6)g1l)$g|NJIKLyD|KsP z{$NA(=7G$?r>&K7SJ7hamig~GIm%T_lJ(d~%-M;H0|irXhTZqy4{kAz^s7f~f5A@% zV~UAFP<4?;fwc1;V%Nhmud9>QuY~of^iPl2#it*NI>bIsA5i?4J858v8lO0OqN26@ z_A0N&;vl$4OG!?w+Z4^FWYD{A(}?BJ+3=J3*_MptDnNd#H!alt93bWoHiPS)nq)b9 zEajOAm2Q;gLpuWDvxk?K_`qDuERaJRxPB1H(F?+)(Shxl33u2S#`05?ZQ6=;5$Vw} zg?4&+KYv#}&S8{rHf{ZHOBKpP;4WrBP=KPYg%5t%5ZBOQTk+R)B<*}%6JEd`hX1+! z%RF2pQj`pZ>ESxqzBSYz7BqG^qek~0nk zN|)258oLiAku{urmW6KPf|ST?&P3xhffC#UF~10AXW`0@h$K73HcrD~dz9+Lv5Z5t zyH(nNa)Z_UHHC}mk_6&D(a)+UXG%}Je+91Cs}GjUEO~P`S8468R$I#9!R&2{_u)!V z;eG{i$!?NW#^$`*O=+5S#7)ApWDCYe4!cx30+;4Iv&WvBZ&;$f!&5Hbd4QdEKrjLiso z;%~@9#<+rbPn89)#71H&O%ps<^h!K@1_+*!WI}-=N&5CL0ozxB6b)xRVFsI_YtOjM zx)!$dmb~OYl~TDm!xm*dbp>r+NN!XRg0yo4uYEyY`P%;8YxY>loMPy|*lf>Bes{vJ z4wsGaRn;W66oim`p^vQZ%k*6N%6s8Inpz?6616W*^tWcOZ#$ey^bAAI^*@^ooBhk? zhTvtuZ)B5cfDMwj7KTkXnIL&cWA7q^~{7n2%m{ygwcKEqmFRfFdouO zLiZ;{PSn@)!L%^d&l>PXvC_A2~`~S>KfVbCJnqp(k9B`6z z7rr#_s)4(KX=TvUj;;q(o5pfY*o((Vcl~=Z|GWG_x82sy;{~M7gl3dXBTJpzi zdR|hJUM;DTL$J12pHu;mOo&}}6Y*jM!O@D>Y!mQX1)Ql-92i2{pu6469N?FN-WnlF zIS|gQ^g7@AiiC?{$6=L`5m2Q%DM_kJ{f^a zYtyp?7E!ZeMu+D4xL2Dm2zg zcIos^IDa1j&d4CUea+09p_ZZsyn4p%?YXkDv%M#PSIV^41i%~t=(HGn_!e#&e>%|r z9{3kB91NEtS~#OS1Gw^&k_thZop`URYD;%}aQD`;DJ%U#jJv!A)7>I#u()eyhI?Uo z<{09^s)jHwoOs)ZNKqb!?V{b{u+80cQfqNkl#F?xUXrD;a4$}?g5H>-bH#nHoR z-0+ZiAsxK05LzXU`nS1<++FFFSGXB7yp2A>cP7iTF~n6Og#|em-3@k z2)YKB&Teb|!0*K@f2@}-xqq~7t!Z#szMyV-BtW6p{;MGB0+#2HX3+WR;e=le{fO-f z-JkZ?Z&)IuKIz8nq#S;{s6JGhJzA@d7!X6y5xoYt&`IGxSOJSQ3q=lch|L`Memq?= zv4S1vmmA<8zkJGn+wAjNB7)&xuwC>0tqpH2@-`kOMWr;weS7C2Wjz)r6WuhCmxYb8 z(A7DB@4~G08deT|nmsvMixtt59>GSy+DJV tqHKNWlJTU}Gp%Tqvv7h<7`V&eU z#d=V;t7fPJdfN3olE{VOqf5H7!eY$p(1v%wN~#Uc71L!9Y1{VsfIgvTfn%@Rb3$Vl z%_@}wt7vMZkO}8Wq0vTiCqJt`%2DAW&Km$*rH2*IUffAjI1iE6x3-eH{cFLsm_AO@=@=U_j33VU zN@N?UpY9xpP3`l>PR`{8>5-E`~B(LH)@Jp zk17nF0tJ}ouePYK`4w{1g@=GmStXViuM2TC&h(R^M+3uzHH>UPT_(0^KRGOii79jg zebC3Une`8h=&k|fAg}dfKtZ-r?I9a=a;4_ohoPQzPq&i34&d9i7v4KCL2a(`O})Oo zwXj{-nTQ-|yKKMt(fJ!YRczB*8c`U?(hKvA873D~!*L-CLv{~=_G(81eE%ST8%heJ zvnS-n^qNS=2hdTsR|ke=8t06Z0E>0cQEPsc0b2=6X^j0?QbZd`l*ljE8wxz>e6DB8 zx9NSZ$|(Nc)6i5mvlQW=o*B!1h)5&Ix1gta2eGdS<}G}2u>5DPx?NGjlDW@CR6ybR6|N?T_5A-ZnmpaYsRki-_sGqt+WJgYS_B}se>*(6fS{Qyxfct* zdTeW~jdO)by0W2ir@LJo9>oj5&-PLx+|%xnwA$uXShky3iJ5~I|E87|IE9n97q+h_ zT9#(ksQnY4E?SVsHfLI_+JvA5rT{sBtY&d zApM*n^lX|JCl5bx8^FfmWb?yjzaAKNE9-M%W@4(;6C|TEM|hj=fS(m)x_jQ~c3s^f zBRS*u2J(&(s*fQ`*f*A2hVsiu^Gy9Zx9*F$lk~h%&xbk<$)d__);h{@-N5DxvLv9^ zL6Rr%57`_>5|bWJo~{dt<#^_9NN_u|X))>OT|jyzaF?WKmW_~^{J#98UH6LX|6DjM zXd#&&>&Evt)aYIN=XxJ|_9dbMWp z9h@9pUB0ZC$*m*Y_RGv9JyMpB?&+~T>CtI9g7SM5h-F))Dz1)LIP^Exge8L@Gez)bN#ElLv-(1N`*G~u-r~i& zA5EP5X2YZP%@C`J?Dx#2`==J?j|vTEx9B0RmiXz0k4RV&jz+HU(V>!~2jzG`KxKU{ zCs@auIdP_?Vgx><$6QDKDIWW&$RUsjx~3B2&m1dma~hZ=!`pw`f1vorQjGWl>zy^9 z{XO{_7u2}TUe}$z6u!0;P-y;79Bh51e*PP&-H~g!An7f|3-O-}_7d#M+nf+JDr;}c zMrk-dM_9{foA~NlW2A`^Ot2!ktNe7+jB9eD#4nrPj3$y1h=)Tyi%Y#mpiW-f^IK$> z)%CZ3ilO$zBpcpZk=l$L>Edh!77=vmM!rSIlUy-xI0L>^pMO6ZEeUmVj;XS=3(`Mm9Pe>Z1RVz6TrNvNC(NI7 zA4*Q{AUdopL+GyJ6by@MtIWnG*Mmab0cZw~-yN)Rnftz?Ld8a3xzgsp4*$&*&lce6 zG@u5z*4z3|-sgoMSUfGhh%?_Q=+mTF%{=Kv!C>la^b@imbtB7a;VhRk`?VI7eQa^t zN2-T_gO$tD%J_w{N*wQPDn3hrLzUF*fbPo_S_vtRBC~W@loWCl#TN8 zts`jr=cEJB<@vU6nzH(`mzJ<^1ZLej?lea~Svw|+bi~oE1&TBxSi>i+)q#15dI8M( z!qsn$Bn(fV_@g4!o=Ykl6w?Yv{0sWh5oYZkx}hYgf{?o^kP4SNk)Ga?qZByZw3&*3|~~K1yRnO^d@?4)8C9+X@5jC0q9Y z-d#B3uD8mPp?KQ^y8`fPk&M@Koc2eT72$JLn7AS3Li_U%gubnT2s)@WvBSGcI39RB z75(pq1^y)UPXi@g;wB4N4`{MI;a#&mKuL9AVw=0>W%bsSl_f)#tv!9oQi}0LvmYa< zBAids!tZ&nwr&~q5k&zX?6nNBp#-Yhu`D5%!ZpB13>vK|S+5$n3iB4=OdC33-2Xj* zvE>^Cs3FU!kac~}uLpJS&RO~K*9-)!;5Z&ENgC5z#-yY(+C)X5Wto7R?mM_)#Lx#z zQ2}o6@H57RT&k`bLwU4}Nx5Fqk?RmHNzBn*Ig3cIBJjuRLKRKQ@|FM*hePyn>7hey z^{C`1Dcdwxw(r*%Is!lp@Bo1$Unm{c_E|3*L47g|ei3^dwKh;^$SpPNgC74GMC+<9 z1!@xrK4#@VPvQu$7F76j2sI#Tpqt|71_D4Re-O*QNUK}8%)Ghm@}C-qKnQ=QliN(0 zlaTLpm7$2+(8MxZV5YtRd<5$s8>BR~L8;#-aazC{~&;AnC?h;K!SBB9d8L8SbZYlpV77E)6UG}j% zh`RVBa3%{IyRNzKPR{>s6n9@Qi6EEyDmItlxHiOjTdwWH)$g+yPy6RRnP}t~kFa5P znz=cAzE{`t9Y7u`aQH82raS#%n%1&IAQR7|8-D$-@6Ye!u6_Y4?$-|pY(tTF8y?qD zK04fvDWeknA{ol&wNs}udf%B46zge}Jyksq4sotA`(*oqg60^(k4MIlT+3{JZQgH& zE&GEn1A^}tlD?O7*$jm``Y|vKePC33R(MuExBl?c`R}Z^_Pd298ib$$#@p)$2uY$5 zbK>&9maQO+{mqxSmb*=k90_vzjB@X40;u1Ku=&>R&&*lbonqV^eLWTrdo?^(o>te( zd+PgPK4fiViTr%5m&+D~NNjJ749bkg)D~$9MLP@4cL&bFT{htQvX})Opn;@~Xb48i z8qz{vw#=*Om3hp9YfxevMC-9|jv|4@_vc>{Iufz(qh2ovLWinN%hCue>h^X^9>zsZvf+*c2z4*BO? z8uXR<>{OzHXT60vBOe<{s()ce-w06aO!3$mt!Sv-S3afR^V*nH5FJ4JA`dL{WOhT| z(5kog3jWfkr9se&4Hww&E=mt}Xg|Iqj{wA(K2I(WB_Bl*Z%M%o9$aRdM7t8a=+Zq% zL&8{KM}yBahf6-W8X3z+lQJyjQW5Oj)g)%XB04UMwiSddMVBO%Vj&X^Pwm2iUgzu%w)g#N*MB{V+OP(z}&xuT@kJO4!$S2Py~ zOR~wphet&Zf0U(Nq&qK_cG#5X1@ww}IW3VM*Fy9Ry5{;@k5&0eqFtKSvs9ZoODaZa zZEaPXJlQrr&~S)GoHSW#)0Dhsd_>u-UNiN)x^3LgR;+IDBbW*y?f zalO#=OCl(Ex^!G6+;gDy23N`xOV6`=dJpYZ^=0JCi}YeaQp1`y#M%Hi4Z--dlgBF_ z3_kO%daFPGdUfozHR(R_`VgZr)$r8J;7Q^|fwB43dVZV1td+_9a=!#((r4~+HohU8 zo1`|6CME!$4bERhTuW!<_Tu)55EFxCsX6)-g^|2FK)Zs1Mf2#pR81#1fh_qsyOiBL zNR;#tiOEjQ4&zP7Omav{*||HW+0F6iTjNu!CHJg@y(OgQ9wK5FB0f)@qKexdKFTwD zJ6gR7u^%jYod5Fwy~usOAX>ZWhPB3KK=wIZ`?8~#py$EKylrI#NnLGr%z2)mnBnRT zlSuGgv*4pWK5o2U{F<}EGwLbi+|E{Oae(S&E zX|M%LK1M7Q%F3H1wkcKdUQ$=?$r04$>xR9vai3C_&_b?);2wuN(C5$WXprY&;;D-p z_0Sn|p2&;I>*?Fl&$4!{`~KE)ef`;2t%NeSpBXo(P57zDx!6u0X2=gvQ+DSJY$M}5 z?C6$z`KxV-X=u6x*(=)P-#UVez5G6Y9@kupZCqLMIjwQ+@WNZSnf;`5xpd9vFAP6g zDJqGB;sVd{0+N_Cj#r80FIx|++yd@6e1?UnPmN5y4URN?98ZyR-}E=I&vX)Ns)4i` z*S=sSkgY#_{`f!DNt&*WPpWwGpAMOsMe8oS2uEFphR77kKUW8q@s5sq44Pi!6NOeD z`jTEt6%^ujQaDOE{=4&@BjtI!p2`3MLs{J8xUtLHQx@gDcamte=nX`y&>hjo{#SZ> z$X-!_Wrg$ZhSo7hzuo;0qh3b=Zq%rNtAYzrxH$*uhrsWj^tp_DQuAJ35=Zo1bJ*C> z?`O=}XJf5>rdxj0Mq;S%`3}u_fk4(GQY-#@r6M~lT>)tUcoVl;Db1+drZyq1kA z3wjEq>$2W3ff zp6z+5=FO*nCA=nigZYJhtMC8p1b?U$E3cB!VsL_0h>HrR)`&i1M1FbU-?UJAOqj71Pm=EGyuV1I7`RwIt#c@H7Iw*uLw z9D=u@QzIvsU%i6ZSso7AeeYESe`WPU>uNw$_#^3U>+UI(idpv0Q-&j616Wv$zqx<5 zwVS>|;U4||dSYa1 zW}0Q2pL{T)tgExO(QRR{_U7#B$wI$}{ePL06uhb(9S^k&`i`S8Np6|!f(1N0>GXGR z;KP5R&T#xzUH*{3P^b~9Ty|b-pVuoeKRoS)~w{9O8SJ0Z46iVa@Yz1#Ia#* z4+$Mq2u%Mgzi^tK=e)Y!%v2R+Z3!&zfrV^Pz2;Vd?uHiNd8Lv@$1iq+!k zj%`|?TOGvklZI7#4`$bc& zJ^vW9#U`KSyHs%>uqq8HahAX8b3U^qBy5;i#94Hk?*(1Va7Pw$@RHhG=_#$-;%KNr zNPwU&%vGe@{i$yyWU_E?d;zM=nSjX>cs zBL1rHb&`DywOLf}wY;#1DPs%KhE%=>nf&-^N{zc9yJ@C~ZsO+q%ylQm8{~>-9N!Mt z*dO-UV=UrS_`X)gZZZ)x_7eEJbB$9EaY~KpHG=hlm|>I-x0N+)x!B{hg1Q6D@M%yb z@*pNICu2Ze^bTVqIag46N2AQb{g`hci0_9jwz1%b_ZJDL-1Ci`MXZhd2fd5#@A#9V zpA~UNKSTY&-dogH(?OWIpuk!Yh7SfLdL)L>4~&*fyO6MK1)WVZ?hVY^u93I@I&2;} z7j;vM|L1M?YwjCbiocXZZnq44pAIhxAMwb5@+0~0lZxpBJ{{={p8QaG3=>5?7r5p3 zpP>MCBB`Ih`RTWRd&+7D2FH+XzmD5Q{Z;?F(el)rXo@;lB*(B;-r&ArF?7vwMt(o{ zW|nh2mnq}f9|VICaU%I$=Fe}K1wCu40_gy-J9r})`e$la#36s!4=i;F1F3 z={YKcaV|DlM;b>CotXFfZpL_P{)3LuBXWsOk~02%^!0KPE7?s^eE&=B$Or2bgx!7W zqm_rxS~B_NDaZtIW4M`&X*Lp5+BF5~mBugtu7FvRbKLL8k%xcC_>^cF^OrqxAnPgF zC*;{)Oba-z(+k;(34f4V2z+uMhB-OUe0?u?&@b<7^ADpAf&xwB?3WXljbPnrlDWA% z>I(K0rxdC!CoUt|aoz_Lo7+^EvfGfO7!IQ1J^XB2#jvI{jCD&XG@^e(-E!q{RV0}< z7_q{1oZ)*j=<(}G21}&#P6%tly$o|x z?YEJD#;xPpnI}?`VyE@RQGciwKbnhQIH$xT8fvTJ{rM940J$>3zvhoLt$R3Eo}}MU zKLwj{vZd|T<^jVO&nl#88$Ya4e64JEMX(_!<6mqU=;vR1&N0CTj1-eZnaX5xTcg5M zGl!;yx=emMmH343k-P%mQz;uEi;ranEI{Obf}%pi*tbrO?TRMHyv7*v3tipo;+{C; ztVNN#kX);{Jhc18fR}|}th)lGVHY!NVL8whd*qv}@$^dT$z-?m%0EAtdXskV~kRRpb=6bcf zT`P!=V^;HmITex(f6NK9K2@lZaM!l3H}7BlVzHe!{pWg3DNssB6uB5>-?^a~PJ2BT zm>Bbs*91zLw`p!Rm^{Xmp!3$uj3f1jg2iAz&zUy^aM1={A}F_r7Q>rjc$Y5cODV{^ zP-zB;v{}A7fj3tmoQGia+0vuEJ`+{mGA>s!KWc$v&76L}=af>6H4scHvKTN=%Bva1 z+s(-M{M;MS!`V&hRUUUlP_~d5M)4yUk__PmRnEKqwl+#4&{<%KWWBCQs4l$KO;zzBq+z)2xbV`$O)34H2!4pT1>q#B*a&ZtLb7EoL*wlJcf)X*zkA_WddFH2 zk$EX^mKZ9`_5tP#FxLys%C3a2iV!!6W9NwkYJ1vn+HzG2qAhykJ<%0oILgDX-;%3? zf6Qys5l%+5cKI#=@X#bNystW3mM@2jZl}KNB~aNO{2Uv~<+G0ahOWju?n-qQju|v6 z(@Y#1t*?96^27j$*XWF2J~iCx=}Bal>=66sSLq<9Fqs!|82!c# zy%E$*)on-yUrc-VWKvymJRkGPN!BD5l!Q>|=n0*rb+ekrdT;_peOy>QRM^?kv7TgD z>c+WoUc)!oALA{ZjNm_H3rR}^I@Ijhbb{-L&|I?&8&nC`0#K8s^mjdrP>uRK4(JGS zD?`s}Vq~b>k$+Mc(@NTd>>YUC;PQ+cx0UXO)-L3S@jFK(T?gDckJ#1hTbLKc_zMC zf02_$hj|r+(h-`XFD^a)wzO-|C#ZqbG=N0yc94YCmp=Ep%96Vo3}7EZCJz8tX3P6Q zTmJ1oSlvZgs-93VET*)Vu#}}#vBPA@k-M!AV~>^^=sf+(VeV?!@40?}=U zrq$clKw16p71QWHi&T(X6Dn3;E$@FfGze9(M<=j4Tadvr%r~c@5dt{~GA}Yu=AToc zk(J-1$LqI(6Pi4hLFot)f^b|ogBxenU_^A@Cs^J7q%tK_viuI)WHj(LI->@4(~p8*710S5diX#7e58^Ee&-w$nf!aIHpnNS zSR8T`;=%4#Q>|d;H}r37$c`-4FL#III^bhn+>pbgGhY2HjHnoWLrjfGnEj(s2St;i z?Y%n{k>AX0&T6{-n(obKR6N^ag!BLkDp@b6i6ldO(;x%M(abx+3Xg{NWct)qmMQaf zyjk%On3Wt$63jSuLt6?INz+J9W?u#+NZVNvuGog^-}}3BX=H3P9>43v+kdP~FX`^? z>9FLC;DEI6l%FuO`gZm}yoUFkTwZ+0Md5JpdN~yZ^a$Td(1nsptY&`1$6f~hVB_8v zW_OYWCV}0cW%|8~byr0hsDAZ7tK3a8B|ObD8r*JfPEiq}O}4JmWz4cw zl6|`t0A9{CUQ%4HzJdqNSLsA(|0pqtR(zLLr4T$#GRe;92^C~|iwCa}dx zHU)Sp4E}SD4u3$*uUTu@ENigewBw^A8Vo(A=zS4Xs;0DW^wn+9&C1a__@aZM{=x;F zA(Z=zj+&@vNDM{4@i(M<^4*+ja&0odItPsNw#Y$6z&)(8ezyi+AT!>tw6uv0Hmi9V z-z!ZBcV9s840w4pc|(n`6lXX)L)alIJEtYAyt1acw%v*K{B=F}&Ru((4*OtOZ`lw+ z;fFsR4aE96;Wi{r3kjHFDT*k1WkNLSaTurNM#+s=guhKHuh%3V;G#dhYUOZLV`dLn?Ua(f99BFGv5h#vZ}rE@^N-{;{f7aMP>(qNtKV)rJD`6}@Ez?>eiQt#> z@kxeAl?V*Zj)SBXrbA={^Kqi_m$ zpI(O%nb4u}Kw%gHJHpmIT2a3r&W-n7**NUrw?sl^X#08le1x)Dc8t_KnaizLD$CB@ zZiQ8N@pt67WlrS=jfM-SVJ#BN@qc8jg$ELS1g9HKKyXl{{dg%La)(}V{?pS7W|WryIX&-&2?`Y1e<;I0Xx-S0zm9QaLsj%G z9-$LavV}VYmZ`^A*_LciY_!LyX$6XBl^;Ya`Za&oJp0*FUZTy3GwUi6jC{*)njC)o zD1Hv;)XXpz(eu3djz(yhR|d01{{l-#UmVv?jZ~7XC}8Vn5QO!w3WV6Mr2ILd)pYs2 zb7|1zPk*p!LV^2Jekme$I$`emf+G9vFXJqCi{VR{yOai7{P4K#hIr?I@{GmLovONS z)$jnZcVY&0n$Cc(aw__wKMt)8{#2)>CbR0J$T^K??5CtMU#iA0a)bDtO8#Ftsx zLe+a)0wV#1XEIe$mM<>nAc5QGs@!@=wL7P}1!cL`(5go^%81>Bua*)sF^ArHPw zp)E2S_uMUp>GIo`Ae&{$WvW?fl1u{2OIL#ydaFY_30RC%%>5*tIRW|KHU@898(8J+}>xJNT}K8y%Ab29}?D= zwLJ_RQcaA*Kt_o8kLTcEs2ut*sngTHPyNLilEiR0qWX+ja``fRT~(5pUMZE0Ih@1m zQuT2zN{;l$$sSVCv0AzDaxx8ns>ysg=eQs{xoRcX-QC^R+nxRLEg z#xG8Op-bs?f==ZstC@+ZXDd3-P`rampT9uD>BvcLS2+P2PgZP!sdu|LTzn2H9`HnL z2#vF_A~X$6-oz-D(+PZ_VH`ZPMDV#$muf$FeRpqch3_^@Gif`z?zBFsmSh_P#qX4R zV*5FMf1vC%W{$pzFnM5~8$O!_a!sS!f}~-JkA~1G3=eEgOs?XN{r`HC=kL08zeFhF zA1t5MRcqz6j#RB^JR8gYw6Hbl4ZiWjfT3T1W-qQmJ?k-RHl4$ynF6Fce1UeC?L^pJ z;BWRxU*j5RhL>sT7r+WpMRf?WW5smKck$I>dXLXjtq!@MR)-a^tz}giqP_NVgsVNu z5v!2U7?015LeP=ah!Obqt=H{YI(5X3VI{NUk3pFGG10$0s8LfN5=xWni|!*EmtA!J zBn|O>y&msoH(WJ2|1j{z&i*6dqJCiECS<`lj!tFd{o_0q}#q-Gmb8q zL|#j}g{N6r=;gwnqAyZZv@jH9AK?`5L1<=tM}p9@SHO*uj0>aI+=+#k8PTns1Uq>3 z`rv}cL!Hu#;#IzZ*?>#2>*)?nuB7;KA{D;fQU{**{O8^PN;ci*C7R#DSkV0RRv5bS~xD*?TNAC!~qPx~r-vnT{0nk%mWRfuISG zW+fkm=Z6(?jfKHWZAlgzEkWHg-ixAcfvF^EYO?MGl&QN*m-&Wx?gn!PnOI$ysp1V8 zvDj}?W0B^)$a5!rc?*;U?^(L~Y{wnAb06HcvYEnYUkegbjbxK&c(Me9o}-gS^KG9P zwVl7RW9?;X8*=t<9eWBXhtM4t@BGHTf4OsOiq^=Kr{Tg^{;Z!`mDLi$r#Y|ktklXw zXy{cQx+Kg%)T=UBj>c}!y!*)!eI2YL=(i4MITc*M&GFvH+jih0<7^5!<#Cf58l2m- z#xGoBi-pxu#*fPx?wN|{5&daD(Ra<+4`?<2#KDZc_TQkuRa)@0(=Z?`R0HQjwVlsq zUNiEsxViA5*039GR&L$NAz}5&#q_<;uiyWe1PAcXo@UJ!cMhjlPXF&lDBZWMTi2o_ zJ3`?Wa8{0%2XP^Uh^VX{eizsOTiI!~_f(>bnKdLGHVw)QY|F(eC2%<~35u z@W|-$^%lv60Q#?23wy=reTSGk$mDj-viK*7$5^?EaTQ`58agK&F92)FnOS%96P%Zv z(B;H%JebXzv`=yV3}ycPUQkE9w#J0XXvQczc$2ozOnCh6HFH7V$_8rR9~6##zn0*O zpr1MQq8qQ?>(z;wsD0OJQ`DzzRP`C)yQ-)%R=6*fQGTdXwbV7PyOY`DuDLhG#}eUW zj{4|G?TBHQx+H~p_~pq_1D!F!wjeL8v7&D5-M^^)Pli%Oc%GLl)^>Icb+Uea zeTBpE$)B{(wzXa^uHC+7OiScAWoP^sle)z5AYset(Ou-m!2Q(1x{JeWNwNvQ=ova;el!S#B&=YKb}rG;oVBBP~!e>XFH`7BDQM)sol`%17=_3-W= zZ&3$qLJgbAI?Tr?eA=W+%F`->E6>7wH*M>*h?bxg-)k}elQCp|szozkVRc{9;`t9<9pgo{}J2reQUnh$4zIk^iy zue=z#7X6{ZQv>F_3wO$8w1WTqQf&?Kuns*m^6~T`FZP<(oJUQ4k>sk5(zwd{-wh8C zgDoV@5Pvb4hAOjPRN-pqh$T5XmyuMFa(Zc$#7}Ql4}9H}NahIIE>CGIefjg**I`N* z6FrwKOYrUZwV4csV}+x1;DSaGy)Tu*r|j<`Zb9O<*+z;Pz!9`6;sI!!-Y~HCa{c(; zzfUtbpwRnuDrRu=-?{kN$G1y4f{AC2*@7PjBU8%*_-=r{B)J^Dq8Y zb{}^gjiAN^q*K>D)bdgVY}!@hr|gln1vg45-RLUFL4xj$LHhnw3}RKDSH<9|$WjJ( zK7SdC^caf&;9oIf3EAs}GK-mev&rS2I%G3pj_@cHHv0kN zu|Tuo%&Nef5}9UkgDAO+A)as^lVRUq=At!+KEIY3A&JVQXL!evEgET9KlAMN+F=dckdfF4iM9heh2kR%#kighGb$Z$dX?rH zeS5%YE%Eae*xA(G@2UBSzNS%HA9t9rNQK6PPFH1~SE(peaS>>{yIpgQ-VKiZZSdv$nFHyw6&sr? zA`l)aT%=BH$ykiAI=$I8l)!zp{q4skM$ zeav&nJaLQ=;+V(k98vZ;Do#0kfA{Y%;Bn5m@Avz4U9anT)wonTHlACtK*a6%^EWhX z?j9A$aO4DoQPzJE*YsNh5@w^l+rjeBunlO8UVHx;|)$e#3Nrjc`IJ5_-i<|v4(VL$pAS1%HU^YR zB4|R}d)SqAR^gx;McQQu_ygnEc?HcGS@>s)!uX`#kC_S7+RCU-aeP5;uQ*RTgI&z% z@SQj6g8eo!E|_L|gDW5&&TjESH*t+xkpVT!kn~lG;vj4JZm6@94}Lls^#@&WAzj^O z(P*;G^AaMzin1Z7+wMLm6}Pyp15LR8D;+KPHpr&lAh-TyB^^s1zsvR?#o&e0&2MU~ zHy^CUY`!bz4I+#5laIM2LL zglvyoQyBuC>)HZqaKP1=iKKOmZ+t2+LOP9Ayq%KW+jVPBQ4A#z=#>KWO=t9~SA*T? z!h3oe4j#@j!O~#7$}b9;uCn>=5%;>pi+3cvtRJON|89HRKTG9H|0wfiBNBS=>p>%d z^3luprXH#D+N}ce)hn{!Rc?dDCC7p(^4Ud2HLL zEjsRu4{9*e8%4hIn3R>M8X)WnJRbua%X$O4tOu$=OnVF67p1k}2sk^`T)C)OWyc%$ zZO(PY2)7<3>+60T{}~yWK!QugjKN!y(sjhBG8EnBrI>NdHLdUpNZiA(;VUpsO6M@X zCgD(ZnpG#SqmxG?qb8wP(9f_f&91FvYz}AE-81)x4~e8}fQgOKoB~{o=GfngmoH}i zN7G@JR_^=iWgLR?7^?6UG5fp6vtt%D>1GPMX-t#~5XqbxOF(s>lthKJ8wYk;j)q7S zgG!2ow$1f2tM7F~d9d~AMy!)b4k@MH> zHHu{APK-Kb=FEAwIHPY0;jW&jBSaPNjt7Nh>A=-v|G;lh5=R&+47(Gf3dt%@TI2ka z|GsVdiHmR`(VzH|l7K&({129@vcU~m8RgG`YT>91)h-l_^Xwn{UP(fL$O-=Ff=!!N zWr9gh{Jm|b8rx_5P~jrU5x>$l$pliw!wNnYs!p`nJD+6Ar0+gMy0Tc9#-IfT#4cpyqCobn1XWwB4KjTlk-tWxV`( zW@~7@LY8~AD`KiV2v+L|36}qHfuHs2?DBJYwr8>^C+{80gtRI?@1$D6K2RAx;(qUN z`(bz}*nt>M7c~KRs|%R44mPddfP^d39wcQ8CkKQ@s%UmO?us9yB^|El%U{7iE2*^6FUs}$KW+oZ*xUc5%ert^aaB?+(qvnp_?6sQ=%V>&$OJau@Yvv+6u z#k&~w35rrY*nQJb7FqHPER%Phs8}q^%E()<1pFphy-eB~YxwH)9UM9!=7X|hy?TU= zW|@Fsv(@l5nMdG|Cxoj95vsDPbeYpLTO+H-pultVF+ivV?utl*XuB( ztPvC77UOQd>>9AkQnNpK7W%~|t$(X$K})yN0EkxFvNYv8(_V6Do#4OdAo%a1nUNkX z^EdqrMF*exOg1>ypgujjE!C8%oSM_Uu;P57Oa|xv>vyp@Ex-6G97tB**E|z|#Il$jFGNMt6UyR? z6Y{wCBK^Dos?5;;XcF;r(veyrbhe#ed&L88<%V37YrN&fh7D{WPvw&^BgK=QD`7`B zDD^)4kpb>O2LWsf&;1;V7xa&xeccM-Hp(AQdMl$57uz^-%J-8*)SvuF=q?tv)=D=1alyu;GR51u(%PPBdTx^FZ5oC9gG zdB^_Mytt$}pP72z4^63u(vluO({$51j8ZF4{*XW6KPXHudwJY`aLGpb#g>K1>r{aW zngB~WKjRoR6%%gZl{2CSt>&QNnNsDA|K!K~mPq3t+>K=JV{hEi;-uc7q_(bnT%dYB zDl=hKv?o!Et_I2(;Y4W^$3dFzHhG_&zND+gyItuQZ%`KW8)4vMj|^0WvA83~0(y6v z)TPo}tZm19hWrX?&Nz3;mtV;(>@2U`n_TJ7x=4!pncsn{JH`#$mZ6m%Ypvwub(K9` z+fYFEI-?^f%~8v)Kaeg|*aCsK^Sn<-qV4FL;hBO%omkwjz>B%`RywV%{+R1ubppEB zp|9qu{numG+_=Q=(ZDHQlPdQtjaNMb!ks;9#}l94_wW27J0(fsA@dfg18}9G5ZRW1 zP^{0&f7-za!C7dM3};-v{4e(E9O?}+Ub)9lNY2`70w{R!S3CYfPaU{!aHIK(W^#tX zb)Ql*2`f{r&3wmMhmNq7c?YL6@YGs&fCqnmgLS%x7M%G*Ro_^z|A%7Z9lmGpZ3zs9>kSJ-|CctQ>urm;iNQsO*w1aWy4{_)t zz+=_+SfR=qJym4>a$C-2i*K$$?#1K52uS*#o*gH)bRfbpb{b|gWjwMdWz;*n6(KD4?u2MI1pKM}Op>NPDuw(1l)S2}AE*HuU5a?#XFZ9&l!Te(F4m&Rk za2+2S54aG>?}R3%&%=&)9PS+@t+RoIX&k98EwR3UuH?rfq>AHXe6;9jTi7sF+?4U+ zc00S)tLoz7^d9d2VtteH9_Ao-=f5n--W`}Nk8MaEG-SzeK=AJg7LIM<>R#vjx?ce8 zg0=`B8Rxl5TcxV)@@WQ@_fTh37wPf5_cA!s;W4qfuBSvCy4ci3Q=*{L*5~33=*SUX zi36Pj$L+WGuAJuxDvaR75=5jQJZq4JWtOqv5EjFyCF z)+(ld9x_et1oK>XZ>w*zY$*B${H5(P@Kb4^ zcBGdXL;(R_QBr4?))meZ@msT--DT4wuS|R2nw$>K_40J|9K_GI%e`H7dY3vZCeNv* z_-QS;*Qsd<+%!1xq=V#a`|o4aQnP44$oh&U&=~*J_*R*XZJPDh18eNZiJMjfa&KHu z)L=4XyM6eX14aHj$u0KcYRm+NgDODiOwuR)$mlh!9j%}w4fAVfN6M+1b5UY`*l>4y zCpWQMD0Hg~XlJZfh<9a1B@~vzmd^-T2hyY@V!}clxq*;1(45rINQQR1B~n$(p%P^I zT)ZCfb4A*d?94Ypa9^(g#O^=W5?F9l$l@Z;tD58wnNe}P`RwNFZ82hF@y|kOa4R-9y6O(*AbI=ZMdSm zgN?+ynOur;#?-L$9jfe7Vp2Hl2uHf}q))0uAWU4M4BGCO~@{EYlOCp&B1*>SI3DaHDTa&+=xruQ0#H%5FFvCvab8N{8a%-Y3_n_UdZl=nz*)^32WpBtYYq5XgQ&A_r}85Y@t2C*r^7*syUkMo$j;k%K0NwL8Eaiv$E`ID=%YP=Mf3L zH~0SMJa}@NUVMW7<$3zf?q3HIZ2wR5#g|t+pD=MN_b)+q5uiq55_iwWIpVe(Aa7kcE* zhm>s6o(*}V9q7qf`>nk0d!i$~pwR3N_!!xTll>Ke^517fQt_HkT#$qeZpls$$x2}A zW~+c;2{DzM(S}3(O+~>7XFoO4PDcTEA@`|=(ab?OZQf*PBy-cR9x>C)L&x$p#b2wM zJJi3&0R3v+UW@yuq|;IUpyVL

c#CiPWGU_vj-E$76*0Nao3SHgh|? zD*0}hEqgojX?Amw>xu8{A-PHc=>dbhwtsD*X(r&D?;&+QJ-_7TE7lIDee!Is-q;jE{P6w=M_yBouCZ>w##Ki^^+ugy z-ByxL0{LyxBp`5{QZ*OuB5C68M`(a^LZ;14&4*ptp2f;W2{S-lW{{)Fy}B|ztjy3y zxIan?@;bxSPW_Sx?If!~_)Q&Ni1*1l##ZJ%$nEKBscDhV3G{-pZ{`O zDkR#aV4gRpTqvDq$H?Z*BTGi`t)v4aPP{*bC?9e>iD_$+uk0?oLGj+qN<1{pA5LWH z!({A-o!u`yDE>0WGdeTytOZ3#O1!&m-&<_GrN_JJvmL4GV_@wyDK4;3ZrrW98_o~)AmE*1N__OWIi|>Y3%Bl-_&j0rN1wRQTN2JDx zQ)AAXdV@BNE8)ZZ>#d~c0nh&7SN0eFA=i>#E1>?W=38#ro%y1E&u=G6^Ia`myv+VA z%*uPDSak@FuD_pQ0VBZW9;dVEc~bB@p`EaTF9XIl&%R8VJ@9^YDje6(NZL*~bG%rK z5hit%NTd+tMMs4hpOQ{;#X31U(yE*xx|aR8-+z0ThL`*VKs{0SZPMD3nFD%hCQ1E; zXHO_e|398^Q!ObDXDU!L@^(G}&IpvOAm==0n^7wX?Q{FRpn6K?`o)hYowy%PzJHjc zmfdH2ivlkXi;YES(xzztDcg$F(aY5usmGdhM3mSe_;5&9s|02&=kBs){DzixqiB0j zNkrZLi!b0G!Gp77B-LG$CJuVnOeWTcHnI=%NGR~boEj7P_4g_{>0uTTZN|DyTQi;Z zE_CtV^kB)K?md@QDSIm9;~&=*`u2gi(OxH@swb>VrJa~ld^da2{5(lR>narSnx)6x z$cD8E?bBfw{z-@5eaMh(KJG`h;w?5e10P150dvm*J^5_kf9#ACsvkcc5e#NO8&dnq z{V_*fkB{AlNqNL;^#RSW#G>hlzK5$-1QCPhc?3Al7+`1{g2(d2&{NF6Z6t48@&6+% zK#4uYiU=x>QQ(L@wMF)wZcny7u;S+ef$s^`_NU5|w7p2tHR>o28OHiN^0^m?J{f6? zbWT$lv?!dvYfa!^N+!&!-nS{gRyBX$Wdj7B1^UfkvzvAT#S!W?>l+;a_D&hfaNc1DJY}rFhIF0jCY+WkK`P52 zB;ds0gSs64VF!i|X~T{@$qMoc^8A``R*<{)A-usf-2Y$X%Wj@Qsl)h-_CQtt0ITEsKY8AeAR~p5TzRd9}Cl-qHPixA+yv*8YzsD2s)vU+4xD zzmqmc|G|g+4$OzkxJj6#LnkA$P~3T3!|toMGrcwlllHyB*jME*YTfVb?(+{n>~qkp@ECsGnnmFd4R<9u}m15R&y_kd0?7LL&eMCO4>GOboZ!s{O@4Fa71eySH89-m*Z37l(vb81FpBFzC?k$jwGp zxj~&MhfPnl1%re$w#9s`%KnXt#~^h0Q~OyO{YEZ zPGxa2g_{=p@VbqsiCH{8Vtt3?pF~|Ny3TrF4``JytA)@~)}tmi(q?SHp|q`e`!jcxRK2$z48nF>lI(MKx!+5cXF@* z6kD-rTY`|ZER}QFoRCG89z=LYRA{f(&}R&~|8iD!w5oJPGBV!Dt0>7MShDrK&*?3B z`D$&qXB7b10*SM$z~&lHdN_+s{|(o@S1P*9)R=#BqYe}h(U)@_5@muR$19=7Aybrv;E>LJD_kg=qUJUxR#umEiW0?UtbZ-Y@Pu%9!n#5W#f$8P z7SzM4;kR3fvZmnm_1ParH(CieX@V%Y&>T)`I@(TJo^q#BB;zr{b+y+Q^J?w1TdF0SSfG%H|L{!}NIt7!o^_2a?HsX>=A z9nGp89BaC}O04sXeZ@sjrkS-&rtZmVAPP74=0D93+F94yHLgG$b6%vA-ivC=As6CDo$aWTXLyxLRzUU)Wj&@6?%X##m z7POQbmDYFEeO3GBPFmyKk&u{^nK_q-zgEVA-BtSrW44yP85M4GU09PbNnMz$-jSKc zKqLC6AG{8~*7R$im51-Q+P{LcIBP?OP1v(?pl!BUr*kc3Wk)D51y5T|eBRdwAyAl=xQ zdm;z7^XED5=N(!;WJ|nyr+F?5FAUhL;4&2))GBn7l?8YkekW%oq6Ie4{Rm&ghU<7C zzy9wLF_cpu9dH2iN9hORm>_e8qH+Vo<}c+BBI{<$c) zdGz-7BRam^k^Z}cQ+DhN+J2YHOCd%psctMyG1r%<29$EiVLy1{+o>>kd_cv-=F;y= zTDFtliYhVu)~>e<-#PKwjx`PE^3GpO{i2!RR-?wko-3x`)}u}7*LiBhD~DYYl4UUXZQr`4qqj0klE8JhyPf@7>O!!+~Ui~CsUuFmh` z)R0)))0}_?`1cs?i}MD}juR(*m3kDoc*83iw>YNjzrjPjJRd_ZkxN>1pg4sSFKuSA zxRfZ;4wp+*hb;xDqPl>68!sn)srH0J`A6l5yGJ?9iP4Q1+ZgR5nmZ|wVMIGCJGe1TQ;yAbFb0IkM zI|Z*?Ln$ibP)(>(XStG>{@3hhNx94J?5*a9=jb4jj})7;yJA8fy}C4iO!t>AeSy)( z2zl1frs<2BwK0Eh$zq9j!7vSl1?N#841@S?^5-dOF}{DHQu8o2eV52-nP6;PQjoKq z8->a-R=e0s6f2}7H~LpjgGBu*^4mENn+gq=f0merolE?WCe9-uY|V1P$pIn>IUGBL3<(j%g3_l~h&t#4-wpS&V6P;bR~K=grB^p~Vb-ES=$ z?VYi@-a+`Flb583!E>Mh@_sk{83zra$5w7b|6s}WZ0lv@?;G~ zaZ~LLqG5V7h{X}2ZZW6WtG>BG!>V=hv5f8L_1tifU1)dE$pi> zMc#X8<1*EavT}AAXx9uNYO{{G(vk}Yj*=ZW5}+1@o#*gJ3t`L9hzf&AKjqPztt!fY zJ31Haf*sv{{wqa}6xJ=<@2cf44N%QdWM9Rpr!{-#4@$H#&D>De~g|AI+7$r@o6Hex(;9c^9x|GeZU$P<*NV zT)bPKWqPHB^t~G1Ib-8cG3X_d{_I0>gkohb-f_qt6Hvt0Bt_qk7ew2;RB$uD`H* zM6DzVEXkY6`ySZ7S1tIR-LN}3Oh!K%Sb{ARsYj#@&e=K71ZVR1sVexGu;tYbk1NAV zv9%QJ3GCzX6Y#nkMJ?U@?XWkQ=MB5DK-k-l*A#x|d%rx!>$kiO$?;WZXE^H5p6N9$ zr*s;3ENbc2I)U-})axy)_}9;%u{kTwD^nGqsCV<}5icX|3~R8@fNo4rJB?i208|dRYWR&|>3=j&_f9qyWp~OQL|ghFDFhHZ zA?w^h3WN5Xr5eBfq{G#)AO-C9s%|P`=%##XS~22bl^@VuoZtK>Qeq9PvNqS!4t~*j zxSI1FR=nx+>;)wC-D5AtC4V3kqoGQWvX0AA?725>-{a5}a1ueuOdH-{_>;wC9!@k* zV7#3enQ_=o+ClgQh+4{l#zF~^Z24i@7S?y1I6cv&eB~W%Rlz%_&H!OxmFgGHCXnxhzkZ{EDnHOwp*#Kvul%6Wnl7&kAuRMr(VX1gyhbaGWBkFJU&VTU` zL_a#1YiNTtM($_9f(DYP89#}}GOdPuDD`?8w;O3HT@&NbOY3iQ(%I*-(2Z-_?#HsS{(XfDJPG#@%3fA*?Od^ISPcDt1U>aS zIskZFX`6$l=yp`i`M{4uKeDgDW(Uris?>sCn?-U-QWX@F?szUiuaIJ2j|QD2R;pFp zh4-YWe3y&7CAe02C6*NqJnwa6a2KeP)bwtED|rqYL|}53<)Ycwz-qFayuQqB`NH51 zAC^!$1aZRfQ`K9?o;>PTMD@tR=LS;ASvZ zm1|bbzc~^f*TU>vrvC%DI)6Rv|=ha}o>-qDy-@=wG)OLCpChM!bLh z65MDYFYk7r5f@+I#*Zh+yOUp5ufF+ptCO@n%lTa}^U~I9v0Muf!7b@+_1_rj(NKkL zI&H-P{@>qO-fIQH6bh=?FQ=nCL*L%|{lr{U_ zY;7}Uwp%Fb?7G`M?s3JVL26X98LY927anBNHjx)T)7fyqRm~pyD=2RDg&(Wfd!<>V z?&wVWij2H95^Wa{_;UScrEdU+WtYDiPL>?)e5F%DhprzWrwz96{ChlGV)RGg40aQI zytLF&0sZK2dAQ~A=1_sL3Vh*xSxI(R+7<|hzxX5bHT=%SB2E2FDUZ6Ycg`5-lu;?P zw=%|l_*Zo4%z(IsJ1|BRm|6$td5z-=M7Y6$Q!L@}zTJZni`v=7PylqJ(|B;^;HjKO& zHyM!!yeYY-Ay+Ws2FFuhW@AF2cKrd4nx>Y~Isqbk7UYd#zn$Mvope7;a*iBlngqz#K{;5%V`i1LXg36_bXBa1-Vhq|3{d#+M#5bg=kyt~_e z){Wib#|q+;?{l<=xSy;}ZA5%2)=&3;;`alVfYbAJ57!=L8z3_g{Eu5x9iSg8=ELm@ zFRLin*VzBZZggYcaxds0`I_i3hcB4pk4W+6UQM(|h1-7@Lye$%U0z6j?1ggE-fo_FhAY91nEXoB8MbwRb(u@O8Q z@jYB#V6SKCHzf@q;ryJd%Rh6l`!}q4CgZx+9W#C$cwO1HJE?cJy{*3kCPj^=@OYD) zDHeb}96`L+Yo^**(kHWG?x$DTQ5cI1s$EA8I-mCzd`_CUL-O3n`%4)4k0vgE^*ZS3 z&8OUfOJjfkyBa|+(*NZg86!dw7$rlsbePConV9pub!m;*Wjz?va@xkesONLgo~(fo zY`KZ+s%Go=J3(@J^5i<(D}0|t>-Y$-c_*SS-?>Cj&pW|SiP0MHqzFlWA$46Tm#fcf znP!qxjYz4OBcUWM9=6w6jL9^?0+t)Jxw6bfkm=3&?%?N)ew_1$Hr6%!RY;2w_1JVr zoM%Oek{-U`=)6VV`EMPz*8UNRwPPYcu`oxW5qwz1369P~@KRY+= z`{)Q@J%2OOh}F@955G6-7TvmRa8xKNFa=q8tz^b<_3b_S7nfdrgX1=qidd;KlhKLB zfQWi#!@EffYoV&?SR8*>D*bTTjL1`YBc@@X*2LL6$!UW&z0mexpNQ-)ZQh>m&VO%g z$S@fljnEcc?^ZeJiTEo^oem;#8y-XuhX1CiV_C0P9LQ1DHnmLxmTmtl39)`*pj5>* z*1YQH{vFT+)PZ$}(!E|$^)!q>$zi7DjgHQ`wD;9SFFEILEm}8e%G)U!-+0^4oPU~b zOBfCwu*$x!38BFXy zJqPtZjUbQ%&=(LTwonLD{){TR3fTA|Pg@?3Utti>F=op%`qD&aur{o;a^HSDLGrg7 zF#o6O+`gC*W(jjkg0t%=KtP1)PeIGXwXN0#sujQ7LNPo=Q6gGWZzfD$-aNTClqh@J ziHS37?TEDxJ5bZCJFIC<^l{w816rQjaywyqbmL72hG8FlO$7F8gpV zYWzW*Cad=J_)RA{##BbowvT#MK$y(?`g&rc>Ylo|ea`>IcgN|XBW46c0)(wMa8?x$ zvcPBzO$*sBwfEuTVhrD`mN)aO1vs$Hbj@7a{5sui;QEny7rCqwfyb}!y_)!M_JQ`| zk_sA?c;EDB1Jbp*LF-u*qgJ4N1#lDWSbs1U7(y{j>BEHW#g>cNPZM`)ZtAc%DJnFi zCukfeN)zf9(|2c@54ibj_TDoQ%~-EEaV6C0v9Z=K1`16jXrKksPGpdLHqLpwQyC`N z=}1Xl6XP0g+_5=D{COqe-0hoTR=?0#M9mtwX1Gwj^I!OIdsQ27F-`IH^9onFlwak5 zANO%3UVYw~ZTA8n7vVzy9SFp$9Ru>*KzufI%NT65FKPJt^*3NurmoSMsnn;-t))N34cCH0q z7rs3X88%lcuqY-lQb#Sd92DfC);ZoAIvGr!)Ksst!ixIHrM51cDq@F>M*d3 zQcC4pXU|mVcPSb%v&h%5DCceV0zjgnNPdfaaUbh6xJ1Vy^1ShXG|w^1KL&J!=51^gDuI7op>(L`1@NX~YE>?6`toL_i!{Vsp$@8NQsf4TFdOighu-?8Z3 z9+1S6XEw|Z=7&is6FG0ZxZ|VCpmXB^pm662@pjBH?Mchxf8zGorG%u(3+;891Bjm& zH@@!AzuhY&uCI^dWmD$YYB~(4NDBN6^s|h07LAG3ZBw3S*+aJn!n&%Gvq1 zk(Qr*01$xP+GtnF;u{GU!V(g*y-wug<%$I@BX;66VSi@1G3K`U;zxlL76^; zyFW%N+WV@kRHts^52gBD$VsnJuv84mR(LszaMByzysyYX<)1;hctWCVFf*#5?p}nW z6y?tauR7o&8xHw}X6a*cEPdaMZwI&8O&0(S)@8H{7a~+;k|fqeNskaj=ez>(hcp-} z1`$kcs8+;MrDb_7MNNq#_NJmpLI4y9`=|Q#IAyWvhcas=HV=C9 zSRp7t!IQ#{&+i*ftcSEtt*q7ZL1~NoB2cF>L`RsAVS!edsCHOs;Ue=Mm4o<@+L&2m@~QU z-un`6atBMC{qe6_k}dYjd6`IAYcAwfZu&ez@L4`_ZF&xdZ$6O#0^O2>{cL~|549lY zA0jAN(i!%b5AZro5BL+U;iB%gP>t?=p!svJ$#MO>cvfm(;Xu{83%zzLRsCa`O70(l zQQ@1v-QvoCBfazFK?`Xiu5n4fdZ$dBY@1(&-=K(obCju4?>5VET)ss%A8u9vK+~P9 z;XxI<{Q%J{y{fxE)s%gY)bIocb=cG_<-h{?AGcv-C^iEqH#Aex#H7UBn)ffe&~~Kl zT)6FG=+MQz*lqt-JM#m_bW4sK3O~j&*tqj=4RGJN(VGEAz$T7%Pyk_r#aFqbbaO+{ z-rg`00l9rBmg<)w`XGY2OqSA6>o}Fc+XbpsF-J)>5Nk3c-DlD88L$^G#JV|S^rJgT zgP6w-#c+9h=cFR z1Q270vv=66>&_QXE#Sh{@$>qb+3XVUYyXk9touaOCP}7f`4OF_6JYe!U6@7F(-Zix zd76-@0~HiZIM=hkv$_F5Y3G^*x5=H(1k+# zTSLOUJyrNy6&lm=v6r-+Mdf6@VB|wUganQ#lIBzn4~xtd+c!ZdSk?yWd0H)~)|haF zGCpzR^obE5$J2rOB1XC!C$&2>FGL1H<@a31BolhYUnul1*8%G`Z`N-wP<2T?dKij1 zsnEj7>Z#iWck}Suos$y3p>*++qAKt;6JsKsU6k*kydx-x`4bUq4$63DES`0|E=uhB z!B{O!fBz{3#`q%bs;Zcv z%b=>#l53{0!L1`#Bn9ScKRxX!0g&4I0ZYBY}U8>A@{jOJ?-T=MZQdXx2SP zkbNu6SfqvHkP`hZLPE3DWQWTUST@YD=r5I^(t1Se3$vd~`Zgq(Vr?-vlk zog4P=@fhJODlhBPI(2o+NY$j!_ z8Z@3@zuoz2k|^|^Q_B6t%vRogky%T#RkD>cB{gl2tM4B(E^G|q zCCFkg?+lvYS9&4?MC+U1u7MYdr-$5lz<5leH(8F|x0`j@AHQPWAE)1O+}1K4UQ%LI z{*2=^aS_Z^8Jd9Qkif1}9=8p~2tFE~LD&;!dIjY^wcHo*n4fy_z_Rgb-S{7u%EUyk zKgCO_bykRn3I1jrv<#!{Ydj`ZwbPt`rSDC%xzvHmOuJt|vyHpDoJ&l_nzp=q198SX zkrMA+&mRT z0^dDhRz)U0vwet_iCmoUoht`JH}2CK4U%}_d1|;}oJj_M7>TXMASAbXEBSlF{XsSx zS(%T%8u^xX=_~7pcC&v~4kD!GbKB+1>ZGszw4{q{!lc6C1<~)C;*m%+ z$f+~VDO%5PR{mM0F$*H4r=Mt&+kck zXeHBcF4uRzjvUtyd6)};xtCUpGybU;5*i|}dKk9nt=B7**VCi_>e|d`X@}QRBo?Lz zW`FM0QqBe!)I*$o?(77+*>6mWOjZ{mo4k0QtQydl`dj(B8sBsIAB_#wl6>$ZiP%a~ zjC;i6s!cYDeC6zu`iyk)9x38X$$CP|C*OD=`il;JwRX^#SYUN?>{4tHNbyUpjC~f; zs>YB$PfG)#$0}`8;GQuQHFv90!`k!50oSIffl0XJ)c%K;-=r+lYf_pOyv(hOEu1Ii z1p*yUBA^XcQ{e!udoJcS)s_^IDBji5wOBHMhowNx{iO0y!mK;|oMiAze&~Qnb28d5 zm+d(R{CmiXGOu7oU3zde7ZUH(M(Tod1v}9OSG0r zA-4+t3u^Z6N%@guEM~4vJw?Llfx-b&K^k|iw<2DFN&BR^ZjC#t&)YV?sOjja%w<;V z*Jtbmi?q)zwxQX3SNrvkuvypET)`T>2MzeKs89(+?SwB8cEkQ5E>E+W1&yHI9ZF6u zVSAziu2yB@y&7arUu1!u=3@1d!*W@o9W#-EMqU)Ce&jQ+r1CSs{k5u7^pzI-p&Qw6 zKgbk|cJs67oc!GES*W_=i^72yXBXxjWDjR4aJNO2sirH^a#sv2DM zu=t3XGmgs88xfM2y9ZQ1YOhVB93{_S$?q} zz1>5mtBYuIS@u~NcJW934bqtjrkM*g&TrHoDBiV0cV2QH%-Dx9|K^1%SNOsBFT|97 z;>#K;&zsiQj{*BORrZs`^KGmV+rC0L()lm&LEH>ZOF61R;VL>(H>W#dz}9!~7pN_z z&LR}u)orU}Wb%}HI|^l*(@t_~Ort$Gy!n-aQ_UhQf)N&dw|xwxWjhWcdJ0m+a-;mh zn)ds)SBy4bqTd!{RdlaVZW-1=PKWIZxnIc-|4YhsBCC!g7gPFgL6RUJi+&&QuYI3y z#v7JeUJFBVftc z$}#v=^ahfsc*CWyzr0C0M_H{k!n>yJVFxX}1u2wpI)u3i>G=-_y5O`3)^u5?;^J9QAbn!}o7bQLX z)t>Bl8?^&rY*TUqTXxno(CuwpMehG%#y_$CSv~*gz03Qblc0SiXj|Vk!cX_wsgB^1 zxf(OhI!TSMHLey3_YBm`@r$_@Sqf`vtpUFeqOjZ;hA`GkzG`GDBgt+g=nC`>xxZ6< zxTRzWb_1QkV^2m_zfN9gDh!2$OdALBP!=9R722C2FE=I(^#MCJ1okcI?Qk$z?}Cx% zh1&~rU~FTwuDzrdN66wYSGcsnX7*xS2_cxgnkoyxvtyHECfC`{3xH1h<|V^#ZdfvR zO)y~^-yv@`bRmgJmD18Da}33O(otQ229dAWC5xT5s~#dnR>5}crlCUlUJ3~x^fZ?7 zfZGM9+`clYI21&Yf*!NX8j}kNPC>^vS!GPGjDE?qYf#MH(zs3Yx$72npLG(VJbFy# zkp2`bep8FI>`B2Xf7()UnUmUDVlLrI8nmjJku=t5+cK6x%a|+%z%!!nw=u2?5+pf2 zDaG~GA_)ro&B>W<35^=)iG`nF>`uG}NRPA2yTz*MUUpvn zbq&ymq?^J2$I-bsGX4Kwygntl-|wMvzen!ZQV6lgeOS4V<}Sn7Cvv})Yq^%&+(s^Q z9b!Z7<(j)~AwnCO<+9Ij-`{^Q^WOXQe4XbxkF(p(uG*P5KgfByz0Y>*nOOR3&&o8> zX(hVv;v#H59&#`03{si2f4}Z51T9Fu^jQ>0x;XsuL(X5vu;zIjsdR6fh#xv4XzZPK zbuXt{+$F1Pr*%P1J@aicrtoYDPNQ0BwGBk`B>g#&b(v3MUoM+c(}uOJ5gJxnhV1h~ zoko_0&C&k3rCGhZW9PXWhK0Y=p4Q%z&3hLZiKwBkX{@FipKh>sPqm z=UsXOnm=4%G1=X4?ldj>8H4$@>aYk+1;A4FvampRM?1d6vdqh_8_e$~o;Umj*Z+|LpUNFoitc$>#z z1PLJf`G_Uo&bU;*eGz@}LHEvjYhubd931SPPYapA>7nZnW+VGSOMF=Lb(L%( z{!ZAUF7y-#rIzD`F8kGCV*G!@>dYB3Ds`FsxDQ8DJYM}f%t)|IY;Sy>p^h{iGAoRi z>AI7f!)a@qW!2p5YuDVCxQ}MS8Z5r|mqk-Mfht38fpbU9`XcD+VS2`#fY^^;NDe+4 zX0N%xu0gq$rV?Y~u#l>AZsJ{|%Yb;0D9`G*cZi`r_TRFONg#DlO7ImCjKJz)f=h;@ zZ30a>{TjnZQCac}jA4UC=8BHC2~dvl(v@#tCox^7AF7iPE>O4jh{r#9S$p$s=P3xc zfN4x9xk1WL4_grmag|H=HC~Ig@{%MALnP+5>bz@=pC_DH zK^5v1#3Oiz1P~06n;pB^m{C+DKngL!XjM=*@;XgQtJ;-8Mn>zw`x*&8Z{EE>TNk|f z{B|X3)0HO5MOuMJ>0zlCE1L#ht2(-aV+FZO#Tyr!iuMwIw1|PLY)f0~#Rmi5vnW5g z9`&^uav`M$67amnb)L>j8#Jpnl8hqPm3h8h59jz-658slqEVopuwSx3je3YA%_##vuz zaMcnX#)I!Vu4+x0R6#j%Pm1)~Rlrgz;d;hGFc%{mkFOEU!XB6^-~*q_=B$6rUVXiz z5qyzp08Z|6FI{qm1qUQf!yd&h_xH*YQ=wkV*iTTi-3Ry{DdPk^3pKwUF6a2N=4>;M zti^f{zmJOF8*W15GzbwcS|&0Wi;xEwE$lttLk=;&a?7Rot6NuYE`8Hk6fc~mcHq&& z$tnko6CsLhqtf0hfP^o;Zq4$AT(10)0vVnFItE-|*sodSeQShkbDEU3ZB6iyrDX*q zBzNJzOYQ+nXZ`EM^v0Av&%X37Cdx3DEW${vk4%jF?^1LlrTuA3->m97%MSbUs)fX4 zO$1^`8@Y;VzUh?-=*nUL^r^m&FJ^QdC5o9~vmu#e!oB*^*I0-{i9Q7lC_EcG^oq?V zn(QMB{AHo2b74vL8AKuDeC_Akyzs^x(N)l!^5S`F0Sf`CaH3N`$@px;a~9sbhANlp z@5_i0pkU-R3AO9lv3KQ2eLQPvWy+y9HB6#v9*jK#B4`Q{U}n?I8{STSgT86`47BA%}JH$_~&-L*K=xPFO=YbeRy* zWf2gVnq(<^EPmdo% z*15eEFvdm~Gtt+Yk2PQhyJ`^m_I5~^p*5EI>8)tKL06gzhmZEdEYV7gvv*Fiz^A$C zugME4uNIr8Opg;c973tMV%M@DEN)&!pk~?hv?_ z!QwJ*{j+)BVk3474L!+C5Yt-BEjU1FDfM2Bx#qM-#?pd4*Z<$W& zSn-ilVOp)(ZI|DR!&D}z3K#?B?U@Y?=Xp`6>yD@S%Y4>T3Y4(XI;PDO1TI<|&IknS zv$Yc^hH|Udohkkvv%eJ^6sph(heOjt*C9?!lCNkHjVu|rpiktOQI(>Kh1RrBa~EG~ z{VkS_)b_QWAGFOaN8SC7#M@5?XSm~ev}5Q!!-CKAdL9KT%IaF=4>j^k(^7-|GsRHd z(9M5?M{4cIOWWghY|5(7gRS6iXx3n5QXwuZKBJEGU}JqSAfd~$DdyBTzZUk85`v$) zwnIaXDtMqFN`T&lKRwz@TNm<>g8;#ydB=vl`8D7xzI>sc2>5#e_ID{0TrZr<=)G2+ zYzwuQoe!Efrz6rU>JlzaDgR>w(=`#NhV?==Ue<-5$wLb*S}CTaD_H8?+0cD=yg?lL zfk+Re5q6srN1T)sGAbMx^MgdYM-w!|)>}bNE}x0uV5bLyfDmqCj0y}wDK3LqP&)CA zNv?uK(evBd^hy4zc{4CM@m`^$&}{ee9jDMidrYL=t1>xfm+!7?_sDj<-v)(8hgG>& z7!F+OEfwoF8%+mvcVudxra|~;!UJEBhqKV5RS9If5t`G$nyEKS}?_f0t^$ z*M4WVRN?@#6>fwuOA2uT?vw~7xJW;#v#zMK?>8<{v(G$m7tF{hsJZ5Ku0hMamlMJc z`koWraiUn!loNfvI1@BUT>qc12`!3=0gcYSyai&u9K$Nt6Dor$eVZHxdi?-op*J7? z$^*(M;bfVMrgIlO8z04-25o81A1;Ouid=%TN@bw+DxjSBU$(?@D8?j!9ZE~XuQ8P4uJm*@ohBXQz-xEZf5)4e?{d#c!bRDuV2}A=Zu=}nvs7<9jff=<@00(lO<$MTcaEHJ)tWU^bHhC6U2e**I-hVku!6c zP1i*(_13R80}(uhv*2YSm=r$X6ip*EWcL3~jO_dO*ko2s;9Mz)wM_S6K>4gHtriCO zUB8sBv!x4I<7{a_Pf)x=s*}ajzEt{w6^2(6hq}C6EKeneXKMsQhTRaloY?2PQmIut zwNGkNeJzW$in%+BkEso#D!rV@+-H7-mLl65168*xlsn99ipmXRpZ=(`^v^9s%ecyx zzs!Ca5U~A=VBfEl+IIzQy8&lB_odhpXr@f5zTU6rR#iVm+0l9-A9k1W6B`;(J+cb^ zlWX=^vWjnH^l`R}*gq|f=FHuWm$lmO;7>l|Y#vRYKcRsBWlFew9`%vV;&bj3#*Ga6 z@kdgcjok(tRi$kcnfoLX2A4Ppxr@{9BQ^qv;jdu|#6txx5Xp-saGN|qw~*}9&P{^q zO~T7|v~5wy&Qz?G!=Nv5LMw07u>^Ou$@qV#IPkB=+T~z|016Pq2=ZaYJf{J{AeR4R zm>qn+y1Cdg`syS?QpaGtLzL%Tkg+Xup&r&V7x8X$wp8`bai^!KH$%vrMU)zE&tKo) zJKIxiuRj)=m0aPFw`9~zkxh5RJBSuiffwg(8tK zjx(j7dF@=w%SOs1zN9jWUaiZc!T0W5K%eju)~0`}!8hCPHKnbvtTV?9seivn?Uh|K ze(FOC*w-$3o*~2fW!e6Ddr0i0eKFPbN3w@lLh1J^8RUPL+yLp5|M0bt zGWUUO+42&3*FgKpf}otc55+#)y`94v8m}<6$sM`gK)%4&|7{Iwyt>?l_KvH-mz>RH zqfq-0(c__@*O_Dlo4HLXBT4bLy#;95&Btx$XI@_i((=@Gr)@r&`Zi{W%DSKgcZ0vy z-puTGVZ!b}h?7H$YUylv3?&>$QcUH~+x;81%CpyqR2_lrL!_D$rXAf2%-8pRRe#;u zUHbJS;QJ+^#+3DT*81Pv0ZQp;F~&`7po#g|kqF{Q6pcrv#i^ltcLpTYG7V;r!2bx5;a3^E4GFqt3!|vX zTCtNL4vH7VT8OYMwER)`6}U*2rm>~D4Jx{*<~S^jn!jcubR&0Y#Bp7Vcqh#@+Fd- zzlWsNPGt6%w&tNcYng=2hu4Ml}W&M1%ZW~{u`N&mp z2xorws7hIDSy#ZKSigNKiyDZJVqlv$wBR(2R@mr?vTpr`N)ND~E`dZnp5OOBejC!D zn$b1c7gCN1tCy(XT3Xs#*c)x;e_Tg*nyyrIZfBI{|_D=rYA-zjNBlegj$;wI)G>dvRL8!6IxhRS*~9fQRDn@VI9op zlwKj2J6TM(QXksHlhd|qP^dYhfPJocHzh=yg4V6ZBMfZbi=Y*#Ih|c;+ReC1=QReg*op6& zj*R~ndJK5=>3`^$LH&10pkMNn;(mSD1mr+z0dQ^ikh`z*>~WJ*{i}3LeKR*(Q-wr3 z`~G43&*PF3+QjAq|F?v#l>SVN9DVlB@KLS8d>zh!+gyL%3e)YuK00o;t$<-0XBh92 zY~lWtl^^MHI>LL1WlHsnzYG-6R1o@yO(Li6`TfQpqmZtd?d(=hOV0F0ur8(pH*|;({Dt`(;+-G19e?nAkXhj{aT)+nn$g6#5!+Kn_}ke@HD;L4T9P=vbBY= z^btJ6;QAkU>M7v-_OC`t=D-OJPvoDEpQ5J}V!rKU`<=4(;kvU_{ocPo2??z#lG(E- zu9YKPfR6$c8pIt67zF%p?-+Qq#pQ|8{Q(F%it_sPs?WpR2`u(_wp6q`K2=Z10zH3j z6y=Wixh(eWkC3pA>Ga;m=~jsBWxoL5iI6+pv*H~cS?8lA9Hg}|N7|5Gj0@nVWCAE} z8_yMJpT@3K@;$K)z$w}E;oNBs#bl~`3*Yl{9iu@$?b(V85aNy9M20Q1h`4AQ_sxjK zJx!6h&>@GmP`^Xq`~@!hX6l*3pXVvmO&Y_ib^w8ckQn^ z-~rZ3MSBhLsd}Wj+%PE~iig4lOti)h&-GcnkG6BQbF_SHvi!eRo{iWR$;_n`ZQ-me z`lYzGrxMAu$j1Qgq9JrJZ_fW1o=&?vvz7|aTAO%^Ya>3xudMkZ#XB?9f(wF{B<(nz zYp*`ri-(s?C4Y-MyB;&CELTj78C!2l#ou9sfKow>xaGWl=PNgtF3Uc;VgDxtx2i8x zngZu(AUk7W79=^7_O2+V+2r13nl$-pNg%W%;iY3*FmU&cA%6qDF4v7G===}Ne&)RK zyZy$ELWj#|(lLwe%5t4L?u9h4SAV*edXem_c&^4fhl*b=mi#nfH zfNf(^4}nrnWw0gER@3=il*nF{b`ztwOJcabOjl0QKeTFYj+z_K~cJkU+0Ia|NJPd+gOvmSoSoy_Mnj=%0>B83ro6=~t~DOIZI?|L(s_m!`LE zXkuX0c?eNqoJC?PHs=%5iPias07Z0bYw`UeKr9j#D%5p=aY#hhT+> z5Pf&ZsLy?kiGxvEg_uB{u6)zp2b`hqf+Y_ekMfIS zMv}u8#XpI47-7tnvZ;ezs5TT)Y$&h&Y3kTd7(jXbjBR^HI_kC31B;a zRb$Nl@lXjUa|riI|5zHWuEV}65G4ZsTFzL@nX|EyZDvu)eSmMM|6N>bLTVnGKRi7o zkYOon(=z`4w)zsj%_hwwyuiZrHx69NkDN>b^1zRyns3xGE)eI-L+~t|>sGUS#&2t# z0Pre5ZRZwo^3u!3a+eA3YKP%K;q+BnM{fAiiw${=m-cooX~RJ`QvVEn6e%GGFX{#s znva2>z2Scbc3lc9(CKg#OE7#)dLPGmU0L4O)GL{OfXdf9_ve@tkkI;GBHI4ZH+ai- zmY8IfP|h;((x_1nuzo236x;l{-4Cm>j@z&4a{Pn1yOu8)BMGR5(d9E zG7O-7&T_%ka|mfO?w!_cPyPpmxknn!U4O^V=**RJ1-^xOS~hBD)u|ao>b3xI>4g?Q zTfra;OMAjaA-05{v=?Miy+i>#LC0ZvBb}|)u=>0U`_E9b2RHKs%8E=8&L)0R`CEwW zE!C}uuf&6JV))X5!1Nm$Yx3;gj0pfPnIFAp?}o{_pMmYHj_)fE2_DAD4&u)>exF;B zxa{W6AJDa@s*af}C^^lBCdn^jc=`BlPmjuhvko@XC%Q)zu)#wfOP=rEIEDx?b|`6N z;H5#>E-e+^7mm78ZUh)&lm0?)BsIM^IN;yA-1aK<$smFEb9MH2ux^J-w$(FO8%uN$ z|6|45iam6Kck9eROWZ|bnlqWI62f>yc^90?x}|7SqdYr(#@=7%TGuV%=$Z5v8Wlc_=EpREm`=OoO$o#J3t%!ySpKs5vJ^s5kNDQ&) znK|de?MpeJpo&OHgF?aN3;F!Wu(^rN%{O@}js=boiTI^!%B=xnz`s__cSP=;=xew2 zgLrpt-m-lQ$Fa7p(YmfXGj!VCJmm9ZcnIOJm$jU}nwL*&(S}@|0Yb+N!8rS_=H~nX z@|$6}%8*3toK(i&>ANqJ4Bxr@0K8*QgVs0l=t^pB@t;DAEFR&!6VkOcUnq*?_)OaD zT6A1QwiK1#UTn)(Nr}2KQwUyL0_FnCQ8RYF6Jd~Fq3aKJ`~F?$ggqx}N8cTGr7NUm z(!Q7Ce<$>+L0P2=d?q_Le8RZu)}SwU-I_-fv+JOCN3KLFGJrETZ)lCl@Ve)fGfxT) zRz0AuZ*WlzhZrQDen8W((GOs^^B?96dI!7Bx|607vOz?Vy4tY-UEaECuy!Rmk+-71 zjMftJRSo6I<>b6Pa(&4J9r%Lar4*sPVw>FSlSR+hWNJH0$xbAglz%q9=Zh>5D>z(m6Pfyb0zxC(VDLJs-R+-xQtl#rzbedfIIl{-F$ZC3BfJZc%CLa^ z8Hq}#zKy^cu$kk>{8%8Kvj^)BDJ~?|^`X3Zd%LgiZqM#1h6;0<%P3R?OJ!)Z6`5?_ zYWq7yhIFOcP(Ic|&5p44)SE4o)D2J)m2uX#^@2_w{jlWfoNA^ZMIXOxk#eQl3H-8z zfh3itic}N^Or-#=$FmvSi~dc_hI?jx@3Cr-JubDb}; z&wdRc%;#yyF965S1@#jr$vzyM)z8Ud@8N{-T7CmKudAvQ9&prheY3SdM#V74>+;M? zchMYCQC$O0>UTI7^ULN^12XWdzZCC~Lh}lZ+vw&fI%c$zG4xdSi|Ce#mz_`H#0A4e zs-nkC%neE@Idb8kfH1h;LhGb8xCE>`H(WZip_o^XMBznaMI^rDT3~~rk{i$$k5ZOV zqV#LG6X1%ze?jEDPiLb0R)o4ZvYn}cr-A_f?JYJLF|58;@;wvf?f{c?e+HpmPu*eZ z=NDJ{)ru`|+Wc6~)wG95Ks%*<2;>(t7J5Z5=F`r%u{Rzzt%#Y`c9Gwu>DJz_TJff{ zvaybGv9VMN4~wc3O%v3>OmXeH3Tj{EB}Ru-I3oK?pQ0R`uJ?}kUG8FgA-OjFIlJa< zuV?1vFK^zGOZ6zLI5sZIm3~(qQbsqe0QEGw4{Hz~xmmxtw|bBbAQ@$}Cj0qk-8DW5 z+M%7nve;$;+m=>;culJ)4`t>Nt*)2%t7?>aI^&Mw;P?YfzF zI&z3%26#qu^xc%`&hD>JPKNcb5G9id7R<|(7~_;elKDQso$x*U;h{gpX*(8#BlqTE#tO_fKv>#5eZ8& ze#@NYM2W&SVf?~~PYGj2OeQUR;Tq~|%%qCv1i^&t=zuEMmUQDI_*?2%5mtDHC^K5= z>>f0V#)glPrrZV2pX=cv8uwBnP!@v1Vox+mOS6EbbLWSIpky|k*U&1yPCn-{pr;0T3Z5sVI9YB^2(U{kq;$`P}`m;N#f zuU!~?mUC)c{HK!oye2{%X`KWQsEe-3^NH69RW_DZH8xoy76mM}2E~&Gqw4xO z#Z#{eBL6(~B{}eVH~V4Si}TLx4-sS=O0qXm=Lso4X}dEglYw@}NPHEe^Rp>=^F541 zD!Hl7sR;2GQxYgNiYEcu?D z@%&G>3Nh2Cxw;Q$vs{lgXVAVC`D#)+74OM>`%N1GJUdjG=@@Nj_z;NGpDG9)2X{#& zw*s!6(=ztO8kjYOSqQpt1v#CwK#_`g|)N_}q9W2&|r7?bnsV7F@xuSaSV#>_as8s&Dp{ zQ>imeXd|XzJ26aYF>aVElM||h6%m;I-OCPgF;%8zSui-o@~h3hRF16u3KflHeUaf1 zAxCuZMVAtru=Xj(i%^-XAY~Yk2>G3$I>iYSA)#iqGyW$_oU3#-E%>|Tv4Dm_%*O`& zPT!&4L!W%VMTGNe7Z<5G)6(jE$_(+DNv(_T-rt(ddSswHyct@D3t?0xSf;;tC~H$b zWvQm6Jd3ZjjIEKF;-5>g{WKltJThvP^)wd#&52C{j7F2gHO4zCbeH1iD4_S zLOr(Rw4Z0kR?4;tCd&B(aK)OXe$=UTrUfeR@P7Zsgyp;fCmWsb5wO49H}b{v&@Z4T zq+Zl>_sUi|->jeEc83p?V{g7qX1={8eLfa0nkCw*A6LFx+IlkhG0Zdk<%x)PQ+vxy zedvB9RVUS|41DPFp#7ob56kg+;*#;$%_D#1roUpl>x+GaaBM)FD0{Cg)P6AkbRjLY z*o(FrzX_ePL1#K;n|huy}J8$ z>5|Zc-nm|VSlC=BQ?evU{}oB&QK9AZet*j~>)g}dkc4>i!s8D+7xEt`^UHEj*u4B15FWShB2T+Vs;AW{_L2lxkCIB=?wsqY0@#vSH-pY->gxl1CQ^2*KPUI?P z^|#9tUQ2VG?Qp%V+y$%dBEv7F2D(wKl> zuAOwumy0UYsyn8X)pH)L2MMVD)g_7rBrNr2dq;3*Ejq97l<0j8Q2nXI_~=qg$?1|% zRHj0CScdiIYJc4mSBetxHLbPL?5T@B8AF@YUzPiu&S%3R5p)+lTcx$Y zrPj8I8*dCH)k?L$&S*hM8UyN&^sJBtn z254Cn7d=iCbtZ8IWJ%19Oir1v{Rz+)uXHR zz3s#%vJ}fT(g>BZCW&GKQeFz)&>pPN5PVsV!(E+*hT9SslBBZCONAUH#{Tkwn9l8n ze(uIDUF)U5@s|~rm&E6_$0PG;Ys*r+R9uV#G@QVPF<_JE!+t^O1q_IC>kH~`D#0Sk zpsv>y{m<{>^Qwqv>#E{gM7X>A>v`Wo8jIcRofYrw zZ$U`YN;83Z!K^g@vT4^PhK|uAxAy{kG`pSzq<1n_H)ujJggJ6a!7nlg8wl zgc8BVxt})37+;GH!v-cEGwYNZV^}RGLcMc3Wjo%-3JExU-ZvX|?|0?y5eOUVJ*#>= z{k!)YAK7!v8GVwcymOeFH{cLZ;;?0y6f?&qAZEJxTy(gPXphJs;Mw+ua7(my7ufAA z%^&y9K2st{@o!oVyzW(gX6zUVNyjQg_4Q|F`kh%W-zOg7#ZT?>&wxIWkDGr+qRp?R zf1u8;34XiDIT2BT9d9cD3`R3qwkQ2^QqDom7`KS$3##U6C(ugOi1teAqBm%hLr{Qf z$O9bUHA7f{X5Jc}DV`ES3Pr16?wB~fO}4WKsc3Q6V6KT#Qu{O5Cp+YZ*Z98NJ*RW- zQ|aH*EU*QS8gwD~3=u6@+;)X8ZnpwqSpl@pD6Gmq?n_zm%ni!FT>sL!#tQrGOG{rP zPG&^S5an!XVQmZUs6P7Is2^ciUoKD+GEjfZi7S>GqIjF-Od00$HueK2^{WZYx5G_0 zi14I(v*;6Zc;IDC#t1Pr`hj%#P_HoM6-hCG4yJ~tBnwZ*6Mc4-Jn@ZelxI6n`#0pO zVg)9V0K61RLtH^c zP8Y^9LYO+9ea*l8ndWtCe82{Z_r-^Z?sdTz-v_9xp>Bn3y8(5znX9C{ zEu)k_6I7&;Zi7#E07+RC<+16(r^+X0DNR!*D&8761@Y z9rox7DM$gRQKCyAaRK!~%%|qtCB$d!CYq-igwDeJz4X-&J6&a}UNn zG@r$Yo~s$%W3a`&c^=H5V{$VsCZc3AK`i~qjN&{Uff9@`cH~Pf{1`4}&mnN%oXI#| zir?o?qKn6$z6Ihw*yJ^|y*RjYdNl91rE_rGNn5XJ=ucS7nIu#QKb4}ZL&_d3Wkvey zx|E-5c229od0}^(Qh=G9zD|}sL3knHItPW9ZgkzRfLr@|0j)wTg%{2a&VKwNZ;Qr5 zNtli)IC}DF?%b4Eh!wd(vOQjpQ&fUQsb}LH4!paGYwwZ2x@@b;k-xOnOQ!kJdiB0X zwBm6n0+1kWF+nYaM29h;%?s=LXam4TGG9i?&5JT#b^h#!M97NYX$QC1FiJcIU&LeuMmK8HD~jAp zXz$qlTKA5Nvc8SV{Y}HGpjM4RW&b73ilK!qLGX%Qa`R690t5luCc%fh!iSW&scWU&t%Vk5V`il7L69hA%p5h}y1rNJ z#l+%vzN;=*vs306pN?zme!Y4xdxH7tdn0tqL)$6rGqk}}Gn>%4Iex`fHcZ7*>Pttg zgS?R-`diqi?~!ki@ia$+{;#KGg^oov;o`PGExih3EpXP32Z=Iff#c22Cp@~3rTCXZ zm3ibWdBEoTM%trX7E)8Z1ud!hfBw5fqHQJj{+>Z%uErI*m& zq-!*faIzX#1uHHM}TAB=^hj~L@NRgB~^E7(qa*nILp#h${c7mw1A0j9qV8NIi$p4voy$ zlBwpTs#M-r#NYM{YHai_>+-&*+plzi+!}&_B$!fd1X;na4g>Ic`oK;NJMCG3w?heA`H5LOCPVs1!}^Uio}fY1iJ>o1i^@S z%|Qvf*gF2%8a`>86x*90$9IPDeK*e4QtkU_b&kGd5EJF((Zz9M(hIX8Me)q>w54A` z57Wuj;znmW6XL7mO zABU`Hw@8$IA&vh%yPENnY}Z#O+P;3yg}^KAnMPN`?h_yD-=@4j6LTKZ0a6en9rNfY zBKL?`QYavW$v5^lR^*b(mJ%DxBxP~w8?TT)ssaBPqk1aHJ5S(Q+^=(fBG zrB+Dr05pBByhDL!D;HY7iF2#C@?k7L<3&JMn^X88Q zG8Uiy$kqKKl>&^Ad_{deCpt(gyOKK7?~#~FhB4@^mhG(F;Q**tmKlCTZZwf3a^#V> z(j^a(jc?IIw8W2| zQ7v0>@V>+kIw#Xo>(-%iwy!ONkQyiTn5k%RRKTZ?hYfqb>llSG1ndjZ1CK$Fen_~OXPt8Qga96WP^`z1YWV|Z)*8kDphuemu z;Mqz!)l=8qNflpGmj8s~K3LH%Cx)3q2{kVaxc;j|ltaknWpw1J>7TzN(*fIny^eyv zFUq`7iMGXz4V7V=PV19njOzmu32Gp=W|DCq^P6O~2`JEz1J)hwcKW@{h^had0qV0y zdADwt#an-5olWzoA=AL8xV6-cVspbDBEi`S9CHie7V=RwU9z-lZIMQ;Kw_7C-hLmX zJ9IYbT}}O~aLJ)kz4sySf0wi~VK~b`Lk_?&v%idHs14 zdoG<_iC|r*r}Vdqzk~{4yv;?KwV9Q5Yr~9pQ^Jp2#^BVD^kwI<+{)+z`?kFF`KtSLwDXEb(S8#R+wJXe;L zn+qR)}jvs5eI#9DRd`a<=!0_0=(H;Dk7QVWhTofo= z))2WviLbwt=Ha*#xFq%^lE*wNv0OM_pyYh1Imm-7xKe z%$x4%L!#`9)uT95hk>}FTbgR9$F)7SW+ie-Dh|eJJla8d9=|jVPc~^!L8YU<-D>Xg z!q<2w*#mC5HK)GSV9C9{_sBgI7`Qc6taT;sB;nDIjG(VUpO^Rv)i*POWdxF*M7^5j zdfWfIs01i{S&Uwwv4TL!Ju_I8<~5)@P!i_8v~XJS`o^8Vh5OnG)ePbrn`TA-KJb`X zAe3U30e|UXOf;tcjW;Js6<>_6G3MzD<#zE-ZtHHe*;<&5G{+`FAl*=Vf}Oz+|KUJ0tVr1OFLchS*i(3 zM^7m6;Z^;SyW%Ov5Owo@_={Twe16?NPrlUBbkhC!&CIwMCjV&5kc&>;F>oYvDuO@E zrYUQFP1VpXl`8S=kKrI2pFEx*E~*2O5gevr_Zl6Q(cXO}?rY@Tap zCT4Bzu5ob7ao?Tve1FTq&B3-!+$x??zrLlJs3I?AaZ%SRwv#E|bd_%@qv_qyb1!+t zvKg@zrm{L+TJB@zpC6Y&($EY4bxeui*~9k8oJIm$a&vE8V7BT~c@M36kK>p@To$(D z?|N6ap|YK}Z^?eOPda|VeCYM*Yn|~Qp`cQZVZDm|)Um!qQ6yd}@ui=u8Ell?Cug20 zneMaTUxAbEG|8=}pRGKXZ8*G`P*eL+wBoYduHMzh_!wi}%YGI7gOW)sex@kyvt(7f zJEWFlZ2s5tv(^*m21AdxpvM&2+H}7h>H&@v?Wfgp&pc?IhuL!rR?cBVrb2>yCFhKh ze7XAV0e6SNH5YB8YvB6ZSw6SYzA*7B97zr2X6a~+wC8?>nNl8aEBB3FtEtBY^F8za zV!PTu@`OPw{JY52wu=v*-~4|NHIjQpc49=}+|boOt8&=WP`}#yvd}Txs4orvmf1Sp zfN1gQhq2GZ+OwHImF0>gCOW|DX$s(UNzneS9K5^Ip0dSeP&Nndxhaum6eC_Y3#G(Y`f5Obb`oRT84_K@F%}px37X z7zSEgS1%R())B+o)gmnILJ#zL{BFkVq5V{6QPV8{;AZ36-@;3A!@`#}|F%D4U;Y&N z?=}6COKC?STk5o6KK8&QamPD`7G^SIIT`Bx#fbl1DhhZjkiT!L%~HsF z=hL0fH`8FBM(TW3SsrtD=Ft~|)Ka+(}t(;7`LHidE3$XE;>L+aG0o6TnG zxTWI7Wvm@|ujm+Wm|82xK488hR|G>-KTxqj@}-P0!(daIF)zNZ7|U9Ik4S)A{YQ)T zp6mF$JQxEy(7jYHU#RaPAM>nSO8i+hRia;<`A0DPY2WkNH|J6dqjmcR>?kj0V~%$| zA_BuVWq;6Hk5-%`5ON^MMw+dq)<+>JDkh_Quct^MTA_E!r9Q+PS^vo~JHsBru%0`aI9O--pXfs7`%jV}ge~){-CRmo1-=7UxV@(Kn3?i#dimO$$wZ z_oFgoBb>RorH1?3oK;3{y*wneQBJBS#9pWIzD#zHep}mODsIZ(|D4uC#eS4e9wV-} z@ySVHSnkNkh>5?SMH}8{5uu6XkJvv*3E4SbGd=_y^b9xy{}%_?D4MxF+JeEaFTdOZ zDR_Xz*3a&{UQhdSXIa9%V7Mf0n zx-fn2V}?QMecK+~*Z#96UikRipLN!q`#k>p5TSj(6Z>#7FG<^RSXG@?UtCifVibxx zAMM%djG*!KM?&h=3wi6iiW_pgdZ?4Jr*LTj1tfbt``Y9Bw=MEIF!aBl6>%#&F@mj4 zUC|G$Vs}sd%x~5Ds*}t^ec|HjlNbi#8MV(_KZp zC@Fs%Z@7~dFCw-y$6s>B-!T6?6Evt_De9h{pqPFY3iK2kgP@-+)(21?Y&7+!kd?h{)*J2 z7W!50#_)Ue_S9D#nYc{$a|hbp6{3Odiq2@l zDZT1zDaF8r_G?i>?}{vB!e`Eogyp3Sm(2V!$wONj>gH)o=UR0wEze zdoN%mB?=?Rm#6@f!}q0?3Y>?oGxpL!Zy{-*d9_6IjybeFej?5`oWRw%8m;gjR@_mZ#1paqC zP06usU(&t*Qq2K(d!0bP&sMWDk2DwrWNKFgKMaMaYto7!i2DbGY290X>Q#!U?!L*O zmAn1=q68B9F7Bj#JfvRU)iYz95~p0^`GzRTF9frndQKIqz^f{K5k1@PC#M#=pnj{CXnR1$EV!ElNDuEZtH@e+r(csYoC* z9BorUf;lfo_l%i)lux_vp`)>loYkyP=x*vyk0Spj@?2Oqgy&jU3i3w=5zZS} z)3l<~B`#{5QmV@9Z8ZlNWt>L!{)nhM)2vEm>5(}IZJYh%^lhi2kGTtlb;52dWxFAA zsw*eqvlllh6U2aiS5BJEFKk0hDIT?IPhcB>vk9%TVGCwf2P^#6)W7|?uw0s)sOrt2 z??mNY|4^V4ByKO_7~j9V86kDfP5Wg6={jcnHcAYLmVUn!WHoR15T}NwGF*8&pI1Qb zALlvBAFtC<*s#3Mt9oV|E2C0D!qC$-Jf4OL|Q9w{oZkuZHIB(Ov6dTNoE6WGZj2UY*JXP?MT?Ekm>&z)zf#*|n2Ao+TB79St-5eQHex52=uLxJ$fg7i(RMjL6|_G1zn zp~I4=O#^V|cIq!neHIkGi(!`66~c6cwQ-@H_2(SVL%8)hi0Gg@voKICu3*8cr#<&o zo|dCW$IQMW13-Gkx2qz7L$$^Krz=+%$*8A38F%4sK?x`~EB)T3Ti{xe@2WC;Gw`X+ zY`OZuwi#ERpO2z&?_#hM;YoOarsPCgui{L=!LbGKvr|K5wTg;^erYsgiE0~ zoiKj1xhe5Gc!l}T^BX_$U2fZ1yJ?;q=76BfszV&-OAYL16lPX@pys9NL{^jb{n zI81yg*bKTfGFLk%!CyMVy;BCHqw{{G@_+xh zc0~4GWpCN*$OUmhq}Y7Y_9lfk77wO2OlQ=9#9QCZMm6xvS`` zh!R1GZEqxBbm()w+`9j1_w`HW^o=Zdiz$(UXG!L;PlO=@`h^R*BtmqONhQqpHLzU# zeaV@?;wSoEwvy)Ps_deg42WUGB#8xg=N7j-|*pvS~7?I2-A=Y+#?H zFjED$TsdI1UnD(8w`8wJ6&7yR1)jwJ;A@@4YQF80#0qDP9q=ec_H%Pv(LI?AVRAO_k?KLfomkZvYrjVcKbgp&&jN7iT3R-anP+2prWJ>`o!^^pbY!yQV<+znB8|_}upxH|1+(Y^s4l?Qnao zoUZxuh@sWjd;YagSfGyPkiRY3=Y0^T#jcq)m*)XP6{pC#hw8yRTp*)WNVO>I0rkPiSOMhn0&_cQw!4>3tpuFcyFurRs2FTiPHY0=vdmEifvJpAqx=iTz#2NWhGMQLX&=- zemsrhme#xk{NaZ_Bj#9qJdZkJRqR3KC$tGdtHNPqDnZQGB;D)vKW7ztw3MEt?_gW` z-uhkhC&m2xgIhv*3pSQse_Z})3hu-Ydq>`dH;L6Z)P7msCNir?MTADKfPh-JlAb8?0In^`BqihwbID-qIg0ea=03Np^(Xm*2!75C=JVfvXC{ zkm{Pel{r7kdsDc)V;T=@hu^?h&dubRq!5cyuxAReZoeIH`y|`PY|fJbe`X~9um$wD=#x;5$IYn- z-O++(3zJOQKaO2hnO*5P(Y8((*fMRDk9S0h!$hUq6YNR~TNcdO6>e`G-Vh#$Iu zm~}+)MmpZ!my)hk5UrDd>#v5W^POhL$A8V~;_Wf%Ks5AMv`2L*AKIL;&}&~j4eJpI zd&REKLROvuE;?^QJKTYrluq*aIveJ)HfDGATyZ37se zT6~8(j3yW#O$Y=tx6JH09%@`tE}wI3IwF?`9^UzW7L^Buo<9g3&Q#|nvi4ckW-ISr z@{s)nD})h$cDnN_pKyzbY)AhWUn2^lGc`JN~f z9KH_v5FNF{*e-vmu7B`hjZ(knHoLeTe_qD^z{nftUq+O5SD2==dt6{p7xuUP#c6hJ2*qV! zU>4B{ju@039_YOkh*TN4jnKb`HnTV(^-qh;hNn-MlwH<7fj7sQSF~bfvPb|q_y*5K zogX+MRAowC1omPfkJmi*=sR!YNJK^r5f*?GP-0+WKvc&7^QREn#S7>C4Ql%t#4Ytbx?Cavt1GuUQ(B z_ON=nSJEH7kU6=Z1q^;*Y&Ie7>s+J zcMz^1Ll=jnSz#5m3I*?9;{$2`QGhS=*%O^|NSghDHL`|H@X;D0pygSD7zCZ)x*^ok z7{M=QGX1=87uRV64sx25EPPDu(_s7BB7-ek*>d#rkJp-%@hJ_BEHCt+qjv*n!;!%k z8fY+`I;TF)sx*v#d%2;%dZmD}a@4al$#f=Ei1cL4C}W*L^9_DtZw1wzRXF@c{yz$- zr*F~dG{a19T;OTwxqUfad7~0QCNOCN(YX`VMwjWU}A0GCHqCL{7zhsBju7{X|GYD>SA$9zZ2nMK2UAe zUei<&LL46a_3{V6f9+oF3jXfz*c2V@;g@uk!GkfCFS+Bi_CLIGUG&;tMteGE2QUw`x)4!#Js{ zy}fm=`j@t}?D1Ectmik4upI2G7p>rxZz)WlHGIzfLMIN3_5}2=0nle@>aHNBVxVw~&xB8g-mBV$H>-{em@+c0MJyj&+9xMbnh0aGnIxVTzj(3dm zyWC|fO%3L=eXC7PQ;(n>bK+owuy5%KdZhyVLx%Jb_c?8T#XB)W_N!7X0(6^mJjZ16 zOu}#2&-+vG|Df2TdiB=Z{QK(#rj#qfH#mKl1n9{XvZEahvEO5^EKiACb1#tKDqBv% z&s#i`&7>Yz)=Ic0_jDgLiOfj&B*7h5kV~!zc>j^>$I0{Ls6_j<;tCE{HD_6IRnjgVfr`WBaNp{&$tWmkZmhK5u_>6_SE#+cojIJ@UQ-wxCN>f*R@`D* zEHl8v&xWGAsOg3nMXQ5Jc|`E{Wp=U)ZtRmId(%U4Gg2NN0Zo^9dFP=%#j1nMU{TE1X%$N&W>r54 zd~W7+H$70PB!ZCx7{}PKE1?XIa4iyJH7xEVVg?jeM0$B{&_#;$D%_NVs}Y{VR?S<9 zOtTKRS>tXNmDo1rXSACqBE;P#%7eKPl_7=drWZhh%b6CSr`22b^4@}jNVQd@I}S5& zH=GI?QnXCEWjuTEck|u(L;o;ZBe$|Jv@UM>uAOG+sej4{!+cL5R1is2!kXHTOKaAK zF8)W+JQmaGOgI?0ym#>x?p8q>z?uJvsYUVZWb$wj_=a$mW9)BeaA6EXG@a^HvHj%j zCGLC!u~*Z33fEf_)-w9VgA0}|GvO|zW8&;dGSM=+)10`9zu7|MwIh_o`QR3B8BZY{ zX|}vd-kjPbPuEoSI&l4Zr(E;&^oTR{;kKQ9xm5CS@?H#VyFIbEJ6PCg-iGRJG@&a` zt-M31VVZNfkG(|Et+>L3epiNm=X}Rc zLv{o+w{i4DkC9}l1G6xtUbWc%19!bkO{!08udm(9`dFyjMaO!Hn`R3-zNxTP+DA_5dcGc(2DU)W?sp;6D zH`OJJMqAtT{*8dY$*a*Qct1Z;Y1US_ZP-17IHDL)>hTD2X6uD!ur}Rl`*Xieu_HcF z@v0R|P522bBZ+b~CbzbqHo^yK$CN&azZFfOl4BLp7PL){`Uk@v8(B4{yAlXyFSS1* z$0K7tm=cz`quo=OPq$j8-~mKAd~N@tyOz3hYoINzKSz$8 z`*(@`M@0e0DDcY=R=e5mm$g`N{a^As3ATH?S3?VfR^TZaS8`=u4jA>aBjMlB0N zsExzJW2dNl#G=N>UE$%{Tf*NBzcp**&`36x2 zvGsjrqzzVUF0q`LOhN0kq}1+})OPs9<(N8uKAxTL2%wJeCT3Dq-?XK{4}tzUyrKAE zqi`kWUjG>TT6p&`3^a5uN1xC?Dp?`FIjf8Ox^7V=G@&=PoW^SJRr2Rl-dny=0^m}~ z{xffB`3Y;3N?Ua?F)h>=FEXgaD!Ch_?xGyZIe6~?4rs@DIb6$okl>2+-O&Ett$cby zehjYF4;a~Qi$QJej)+xMj9CD4vTJ zkOq+veR+={)l#v;VfpFc9W9fa&*oWrE;cC~^c=4O?~?j?Y8*B6OtN}!k`aKboH*Nv z(6B9pnZN52l2p@}*u|%)2n9z&0;whW$DoP=VaTDbr-ve~GHO4}Sgt30+BRaXA%n-? z6;O}^rjg2K?%nkAwe*WSN6*5wgR6M~qdVjo%fWha!)=M(J?ED9^7BH0Nm*>^e2(B4 zxK3pruAbfZJC0D-YguTE{pI(t_z%_R_2;E=&m8$$Zw!2Qa zWk7Udzqk9>Ct0~1{ zO2jaRjek+L65n7yk7ZkuYOS3Z!b{oP57*r-d{ZJ2Dq4)0d}(cI&jY|th!2Ae@f{EG zASuU)sDMmDC%-mlP)gdiwn(J4*1O4dL(>E?&*FO(hV<)D?ASJt6>RPU?myt*w)CJm zoo`aQ6Z~~<{__{!x!ItCc(U{r3EJCrY{hRC%dWR9@&{o4qhN!p`QgTRNiAA!AAbZp z(nFH@4cN6)m}Y82$7IXlNLkxG(Fa^*{K|vsS$NKgnQn@vf~K<0uqatM`r1dZdgjBZ*@1lYYr7{CP@<&S(}6h9Ii5M$GBJEp%y<6RcehJ zP}C^TGD4yMkz((a`{q`c7KG{hA_kSd&m-MXX8S}LjIduxW}1CbMaRrMe3s(ne-zW6 z!Yf#&$;$Vmhw(>|!b%lIF}V0YDt#|_6%#{esfqQC5C>hM{k=n;xRMcHn(4uowqQ=3 zRml91Hx8PurBm&&;lLLSM??hA>8C*>V~GQBV^Zl#(#NH{GogI29jiD@C|85dE>@Re zfB*2*yv@wkUR<}XF%f{{%}8gCW=|RcAHFyD+S=2Lnp@IwCwa0%X25Um2Z!j*NM41+ z`Jw8x?_v>T%~y3g9nIK91O`NZ@Ro7pz+xDyJ~21o)MolWiUd!;#b7jT;nvA` zoY(CwUBpniNIN9B5V3W_syL&XVr#F^b+EsF$f3hYa9#}ojx&+!w=l@Pk0*)%n_SV@ zaGCV;AiOz(!3X{CmCUumo=u(0+OQXQ)V%0IhfufeEwI0r7D++qpKlJBijAal)JP#E zY3hQ(nK_y*Zfl?Abj82v3(Z8#9$h(q`ldxDv~QVOBB8S5cW6IvbB-aX&G+hj=x^|? zIUa+b!vPqo1#$YOBG=USDIAy0D~b0pucg61>srNri&^tZ*=jNS&@zf87nXGxIvit~Ia_ZnBm_!J+XnlayKA-x zEsF=K74@O$NS^agi34ONwUs^K`bwf6!XPG-l58&pCqnPd!;OD^)aGPD-;wmv*EB9> z+eiqgyPq@&Zt&Xy#LJrDRwW7RgprYm!YlVnfBD7iJq?gS4sP@?Y0y&bxeg9q`AFM* z%(g)o+e4gd{eZgIgMmEme-!6}aNGMu=>a-?B-R^y+fcg>h5p(qo!w#~pnEH&-9xHOz>B%c?Pon%EsdwtRJ+-ZSOxN6YE8aHb~{Du?UOuX^(O zFT$eSzU2b9vR=av0sY`_hjve^MdF4&7l*6dcX>kUq8kMHe8L}=<}aCom5-~Hdb5Q; zp&mf8wUR^pLU6S4sutbUUfhdi-4h_M(j8TYx^B1d`Cpjgl{VglI%-c_$8|tI~sKN@I-k zDK}J~kaY9%mr_iq$+7L|ZqHd&dXG2~G@|QK1x?r{femMueF8Z{#!|3WFkjC02Ur{7 zTQBLm#5W%5_u7ET(pF8yhVudJ=LW4&_geph%8A&Q+;dgcxzJt*`VEoJbu zjBvA=Wi7~m6j!(WliyqljCVfD%m`YXo*wx+Da~91$WP+l@cXsa^cKB)%=%rdxr8%gLsNs9JJ z1+c4nc<%owJXt2x#%^2EFs5ZIz8F0aw{qqs+l(<#eExFt1>x)i3+p@Q;SRyr2SO@Y zaUTJ$EUL@XEPoO|({}Z-H{TSQ9asI>eihn~CuchSw=Y%f+rxe=U_U*0q-Du|t&3{S zC7Ga2QAsEFae$3&@z*{@c!)be<+=>9*CNXK)7K?6c6O6Ukie=zaGbZM$!)W@>V0-?V!N7 zVP8Ab;|(E6;5)sBIFLUfJ24C~w_w0@J(TT`Fa9mj!zUBU9tDa9218YLK$k@s?{vg} zE%wY`KC>YG@V0n5d>2F!$Q5q3${&9o*;+30FaGU|&v(t%xDsVPr1-{PIsEW_&%R(g z&BoyM?;lHg3rKGno7U#)<5&5KdqVru`Q_|}T`5p;q14^xcAIKNFZ~W_0eIU*UO9v# zv}Yuqoeskj9ENCYyu)* zfb?Fo)$op{^TZIb=>cp(NHsoBwKb@&oKlMz5MLzju%lH~aM2Z7dX~4dO!+R(ZyG6A zI&bgRo)(l|Q|Kn)Gx%zT1L=!(=kSSo;^QT&H_k?=*I`Ram4F;3PM#$<_q;ZQ=vR=SlSqn$?JM|r3@Ax9#ovm_sN$XflrMD z++MS@?$VM3TlUPA_L6~iFzF&kU53=|*Gx*i^^p-5(6az+#=EK+O6pDM?QazT8hftVgf~u&64)qS_Jp5h+Kd@fwMtZJkS0n@dcU#PDH6A@ zx3yKIPEBen4MTsr_@+)p_HAfSTn5lV1GKcZ8{`|oF z_1M^06iNzMSb_6jq!yAuJ3(P58HLJI2zwjv7S=l+nHfJlzUgFDKcn7Wt4jXoQoN!* z#&b~xv^TE-(eh52k|okx8pXq9d?`jn{$8?sbFE)(Usb~VHqYY8xt0x_jDTmn6D^83?wLh!3)URalhVvq&3ct3a3)K~U9u~!uI00(T&i_P@F)OQ zjY-X_0x$irD+}8#908FEkQDYMBYLv<)NA!yMDD(+Znrjq$0hgFZ#!Kz$>W#`0xbMl!Q&CL;;HAdmhFvTQLwA{PJ-`A^hLFwcqOiS&SATNqWW(LtWRLCVp9=J zl`@G@&0DDdvA*w!F?q8U>=%)O57us1E6#Wg<_!JLLq~8;1X?BCBvGU9V2;Ygt!27U zN%xF1%`djEmCh0q@ME8pW?7o~)-}s#clT;v5|yGHT#TBQNTKKY{xXiA!6sx@!k8Ax z`rIRQIiG>B*l7$?#o)crZE#*rwdMjyAtdZBYoGs_L-sS1?`NKw;20_SJW+l@sK;)# zBqG^DqM*0-qb0Bl`w{FBHt%Iq-vX>(B*>k7PBois(uY`QK-D*v`<9f>6${<&#Us$Y zzx{RAWEQ?5Um)LVy*eaor%RlFY&BV_2y?aQd);;^d`kq0h^#^+)M}*~S+bc&xEU&T zICvQ~oPl1~MtACC@WiyjFE2LNVbqF>3GP1Ly(^XLW`r*Yfs2`KlS&ix_QHs*wktl2 z2}MnsJb6oMDJNe=b?0ahZ$*L}@)a)f$Ztz<9(%Q(O9qbU@FllVLBd$v-?C#U$Hv4a zH&BR`Mm6bxk=1mA`}wj_lP66i#&2Xpf@da8Qa^2UOVBXu5}j>S;?B9FVfGb(EzW`b z$RJfv8>a>}Lbp6uMRLT4@=Q$xiy}~SXKm*eWV*VGF7WF$;z7jUAA6S|vRuowf`|w5 zkB;;)ayv6P`Ef0(nUL9cAvCbNBZd?QN*rjv^U=%Zj@C(+7-3NmICIT< zO3tpmSdOhqUG4fMB74H5vD7p!x~~6u)8xD2A`!hoz4$iIi-^GPiq-q3*wb%Q6+;QH8A5OdW|J9$Zp*vnB6?e&T% zP3Auf%_|=HwsjJepYxUUTx(k1O@8r}y+=am~1ilr+X5w+8}ro4nU8vl<1 zYq{c0(2kqMk3~va9N--L+4vX(S#5PQu1)3`w-B#G+|6p@h>Y6dy0yJN&!T(% z85RsKldG`3-7J@5*$U)k`c7-+{&aZrA1Y?SxKPu>_@nP{#eZxAyc+(Me#rx z=QveU6fwW_n5hgHTIRFJFkG4rw#8UGTmGGoXqcSzA9}ASKiKiS6M8h@+b%#u{X&m< zN$&H0J%x@;p-3K2C2l9nIcoh~*P|ht1rwH*IFk=GFKC3EQ>@Gv<6?9q5Chw{8 zUlCialck2)X}PBERP^n!*gd%TQ)IB+ahZv6I!I9Ev8s3M^Yn=nJyB#!*To;mrf<;0 zUTpkq87umv(RSXBJYlzBq~ay};1gQ+e#~59rjS*vl-ZTrY4z$?h)4QFt;lbKc&}(y z!ehWg-14Ctcb~A=NvW8M=e8JdoSetl?7B;SQ&i`xoAN-;tE?yDDVq}R<*3bPvRFi_ zceRlK%@K$BWUZvd{=0VAUt$2Y1X}~h$g_ULLnDgkrRv_hUPHzAl}EFE7qsT}6E}+7 zvJoT2>I$UL&${xe;Xk0xM8xN$cRtv%L=k6ANwM-+L06~4ACHCvQ*+&N*f<4 zgGrsN(=2}?D{vn~NjaRHE%LSetHfMN5gjpkufvi6N4fra0WB$ue+u=GEHSQ~=ZaT@ zaKiF;@CEOuBY-e?roNId3h{=8(k~7$K25Dg8%OQqS2t#Wy7zHS!Iy_&~jFV`Cc9ad){(ncucWOXC|?it=Xk{{tTnHC6> zcaKfRl#^vh$v66UemggY2XA!g2bYK7N16cqmP0FXIr6W8r5P|1qIoiJLMm7p;eFPD zD!}=-R8+kL$2c(7hc6=3S-X#LN&Ot$xnh#+PTk1Zr-{RJ=fVThAL!tA^^>UkaOKNU zqZoe<)x0~#$=6^3c;P6ianB+`bWBOi6F^{0)JysbNdSiR8-=QlkLCTx0vRv(a`W7O zA~^K94P~NyGti?^PSHN=QQ(_7?uOp+xzbfrE>B9kZ_h_7Ve3# z)mtB=YC`Xm#5NX-Nqsm@ahN&>Y^Ue{H_~ZX225w))r|$L7{#!*L zacf&Y-wAD(>oGHy8dTJ!2?N-1PrH`Pk;8<7hRpuJ*mCLuq&7F8A28xBdwJzL#n*5{ ziiMjxARyS%(8=Q(kCOeF$UZT)62xxz{vY@b)b4A5CD;DHz-vB(mj86tr6r_TPxMHg znh3y{3r2$Xv7&ba;9A5V3!k3*cqAk5xnO@h?okLnfdQ!+TrCUS`~ghgmPoZ=3+G_q z77MvKxTiissC{OB#ON^fHzH^B?fi9Fz0K#cw_|$F?XDptRwK$0drWWRuch%*8XD?f z$pebn+oPs)N<|I2O~1&&4{~CwN~WOZeZETE73i6*qLgmirVs-#NtCno;>*j0#xkJG zelOz3dUBTh0i$=B_pRZ({U&IJ>Wl@*NElRYUZ3}WD??_ptaN=R1s`piy3#yH?ii_& zuHlAMx#Qh)ltd--7MQCGNFtVrf<&d=RcOi3$^p|GB}rhD$G1YQ0yq2}MX?v(;ZP7wFG zFkGvBx-&G>f|p8N9j1>yGtW%4&=sB_U%|H`07>Cc-!BY({=>WYRg-DHB=h%jzrTAN z2HYw4@S1xI!^bt2P9#A?qMT`fY`4N6?H zYjb;ZcChWIR{&07J<4hg;IMxT@+*i#-QC2pv=!+FPywBkyVWI2J>C{LiDOZY*|k@) zUu_|kqI=RW-fT3rCctC(vT3F<+dS+5dKB(P7{avYEmh*Bql2C<@kf8pY{^J5Dkr&% zcd4Ficu_gp{o~V~EXrTsM-CS>_IuWZ4$?Gl?WGf%ja@aIp+TSuSxTL8XMdGYqQA&~IGvQ!9v&sD zCfYl&WnjcRxn4j0m&SBK%>GTj*rb$G)V_F*ZBC$M;gp49ijc`V-H2pbK^>6gA=T`m z_(JFI1ba#5$^vt~s~nV4UxQyIXZBo5$Ksrim?*Dk(dWH?Kf;^M`gWhhd(ud93&4Zt zrB8ZVCzg($5QVacmXBuOf_V0oc2#K46iB>Sw`}XI^7?%FrfRw3U|BI#pj_U6*7yLH zEgI??)jFiy4{I7&xM7nkGbbd>nDbKPSK39oyE{Ty!W8|IA7WVLZj>SG6JMdGXY$-M zX`FbA+T{!FU6Otr;V2yxD#servszv*I+=rr=@Vm%gPW}tX+22q8q^x8EDhW0Mi;bn zqaCq3mz2}z#=qZ$hJC!00g$&TD2X>=OzL!y7OEvd!s1>n+K9pJV{f)yy;dEm2oc^_o{PFXRxnN93Rk<;&djOx@6s|_p3vvow!)N4O~Ivyfm@2 ztUDR13oNFvN}N%jy|l(`CvCOkCeY4q?26MPY9;s;!;*Be_vy;@OUk1vd;80U0)i35c9G{?ZyH3o>h($e4)MAY{h%N+AjlOhscon~ zWIM>r@W)`cK2-0qxhYbbs(q_FCdMLlg&! z!4P35Xj#4Ev^^DPH>hV42UXE>SO2TLQTmB}`MQ&w$3wwSJR7CYVKmMjJO43k5wStl~G)U1_i+HT=cGp}+%s1BnbCejqAlTm9I&(*S&kDg6!0 z(agk!L}O~HcP`~nq{OqEA9yjfv~&8wA(aqIb*^xNI}crBg605OpgpcfeUD{H^xkYu zu7Cw$TQ(;v3`IL1fZ^dFC7knxPKI(2d1AhiN)0ntzJKTl){f!TU=w zxFS(I&Sm1=P-V_J4Xq9V8PMKGw&($!BkJnH@s}{?5loz0%Hr#6tEo%-zxH@djSq06 zvBTkS`HY`r0fn3M!+hqqxO&)`yPH{Iv`I7P&V!33p#&u{#?-f^hPkiGYnzF)e2|z{ zeX(IV7hAEu=ZT!OvAxExh0No;WH zym%9L2WgV=!~u-GWygWRS^zr26zNR!rpo%gn*4m``5(QGFGfBW=77vZBWxunn{|Mj z-}0iY+hqtUtab5~5i^88poi)8;F<}Jdz^(ex$U{#9`zq2Gcb6>dd4flY{LE6*-Hlf zIj3>5`G$kL1$I62sB*>LW^%xR)86Kx>XBiVYtFM7`GhB|O6{);-D9|?BhU0cionMO zB%Bh~!XIy7xGEoZI!;|Ok%}-V`E>~A`#cApRZtC8z8Z}{x}G`TWG)9(!hxzP6`rmz zVX>YoI7AYT;o<(n!}WUSN>ZLgsBJ=AWyS_uz=#ItWmhP(aML21+^(7s1KL#eSWc@KMoE9 zxgWofn=Q%%H#;4;y2=?+>Rw*n+);KAsEBwyyaS zPast93QD_(YSTUuLnsK2u#GAf2;`)3u5YBb75v1pO7Ubzf4>~kwV4PoSayiZ5~!_C z@#oB-*11ln!%sn2pdVEW;HtmI_VAs22k zP5zm%3(!byeimm%i@%J=Fra{F;tQD$ZliliUtDwFhkO`Qm?Q~_3KGMjuF}(zjpSGV zjCgqRefqcEldpvS8LR#>a@scjg;V7pLT;1KmmpJ$_A{M=k6RKd;RrQ3vN-iYW$T;Klt17eXq-b znuDknrS9==8Bw1$Z;A0scw2YL=6SNPKYH{kQCGGomCf$nMUK?Zx0waFMR<0NSRSZ=#`?wKZbPIhvv5p& z+V)GancgPhTe}NDDPfxGKB#s0@8|FA9ZEqXMh@s~uD#xL$yyqdoip2HD`v7!Yu+QJGGfo+(t)-{d-HrtP41Gt|!WAlGKQOwVftq zBgAVC^{BQf$?9592{=Dho@Wo5&WrzN>?RB|rGJuXkr<#+upt@^B3zay3}> zqkTVVAydmE^E_%YIPyeH^iLr>DL!v=U##y5Go=>T-Ybmj>jd-n;^revpBwkKHLvAY Qn>1CeH?;d3wf#5ue<%&#IsgCw literal 0 HcmV?d00001 diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 00000000..393506e3 --- /dev/null +++ b/public/favicon.ico @@ -0,0 +1,22394 @@ + + + + + + + + +HIGH TABLE PROTOCOL + + + + + + + + + + + + + + + + + +

+ + + + +
+
+
+ + + + +
+
+ + +
HIGH TABLE PROTOCOLTruth Markets on Kaspa
+
+ + +
+
+ + + + TN12 + + +
+ + + +
+
+ +
+
Not connected
+
DAA: -
+
+
+ +
+ + +
+
+
+
+
+
+ +

Create events.
Challenge lies.
Settle on the DAG.

+

Non-custodial prediction and skill markets enforced by covenants + on Kaspa. Full exposure or built-in downside protection. Resolved by ZK proofs + and bonded oracles directly on the BlockDAG.

+
+
Non-custodial
+
2% on winnings only
+
50% loss cushion
+
1,000 KAS bond
+
ZK oracles
+
+
+ + + +
+
+
+
+
+

+ + LIVE KASPA BLOCKDAG +

+
+ Block Rate 10 BPS + Finality ~10s + Confirmation ~1s + Consensus GHOSTDAG +
+
+
+ +
+ +
+
+
+
+
+
+
+
+
+ + +
+
+
+
4,326,000
+
Total Pool (KAS)
+
+
+
24
+
Active Markets
+
+
+
3,088
+
Positions Taken
+
+
+
2.14x
+
Avg Multiplier
+
+
+
~1s
+
Confirmation
+
+
+
+ + +
+
+
+

Trending + Markets

+

Highest pool volume right now.

+
+ +
+
+
+ + +
+
+

How it works

+

Five steps from wallet to payout.

+
+
+
+
+
1
+
+
+

Connect

+

Link your Kaspa wallet. Your keys, your funds. Non-custodial from the start.

+
+
+
+
2
+
+
+

Choose or Create

+

Browse open markets or create your own with a 1,000 KAS creator bond.

+
+
+
+
3
+
+
+

Take a Position

+

Spot for full exposure. Maximizer for a built-in safety net that rebates 50% on loss.

+
+
+
+
4
+
+
+

Oracle Resolves

+

ZK proof over external feeds, or bonded human attestation with a challenge window.

+
+
+
+
5
+
+
+

Get Paid

+

Winners split the pool pro rata. 2% fee on winnings only. Settled direct to wallet.

+
+
+
+ + +
+
+
+
+ Settlement
+
Kaspa L1
+
+
+
+
+ Consensus
+
GHOSTDAG / DAGKnight
+
+
+
+
+ Contracts
+
KIP-10 Covenants
+
+
+
+
+ Proof
+
Pure PoW (kHeavyHash)
+
+
+
+
+ + +
+
+
+

Markets

+

Parimutuel information markets and skill events on Kaspa.

+
+
+
+
+
+
+
+
+
+ + +
+
+ + +
+
+
+

Create an Event

+

Define your market. Set outcomes, source, timing, and upload a market image.

+
+
+
+
+ +
+ + +
+
+
+
+
+
+
+
+
+
+
+
Select a + date to see estimated DAA score
+
+
+
+ Determined by Oracle Type above
+ +
+
+ +
+
+ + +
Minimum + bond required. Higher bond = more trust signal. Slashed if resolution + challenged and proven wrong.
+
+ +
+ + +
+
Primary: + resolver submits result with Groth16 proof -- covenant verifies in one tx. If + unchallenged for 1 hour, outcome finalises. No human judgment needed.
+
+
+
+ +
+ 20%20% cap +
+
+
+
+
Click or drag to upload +
+
+ +
+
+
+
+ + + + + Click to upload your event image + + +
+
+ + + + + + Upload Your Image + Replaces the default image +
+
+ + + +
+
+
+ CUSTOMIZE YOUR EVENT +
+

Your event + question

+
+
+
+
20%
+
Max cap
+
+
+
2%
+
Fee
+
+
+
1,000
+
Bond
+
+
+
+
+
+
+
+
+
+ +
+
+ Live Covenant Preview
+
+ Every field above auto-generates the covenant code below. + Edit the code and Deploy to push changes back to the form.
+
+ +
+ +
+

SilverScript Sandbox Live

+

Write covenant logic that compiles to Kaspa lock rules. Use examples below or write from + scratch.

+
+ + + + + + +
+
+
+ SilverScript + Ln 1, Col 1 +
+ +
+
+
+ Compiler + Output + Ready +
+
+ Write SilverScript and click Compile, or press + Ctrl+Enter. +
+
+
+
+ + +
+ + + +
+
+ + +
+ + +
+
+

Skill Games

+

Stakes locked in a Kaspa covenant. Play. The covenant enforces the result. + No arbiter. No dispute. Winner takes the pool minus 2% protocol fee.

+
+ + +
+
+ + Open Matches + + + 0 matches +
+
+
+ + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+
Chess
+

Every move validated on-chain. Full FIDE rules. Covenant enforces checkmate, stalemate, and time control. No trust required.

+
Covenant EnforcedTime ControlsSeries Play
+
+
+ + +
+
+ + + + + + + + + + + + + + + + + + +
+
+
Connect 4
+

Classic vertical drop game with on-chain stakes. Every disc verified by the covenant. Four in a row wins the escrow.

+
Covenant EnforcedFast Games
+
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+
Checkers
+

On-chain checkers with full replay proof. Multi-jump captures and king promotions verified by Kaspa covenants.

+
Covenant EnforcedMulti-Jump
+
+
+ + +
+
+ + + + + + + + + + + + + + + + + + +
+
+
Tic-Tac-Toe
+

Simple, fast, provably fair. Every X and O recorded on-chain. Instant covenant settlement on three in a row.

+
Covenant EnforcedInstant
+
+
+ +
+
+ + +
+
+

⚔ Create a Challenge

+
+ + On-Chain Escrow +
+
+

Pick your game, set the stake, and lock KAS into a trustless covenant. Winner takes all. No arbiter needed.

+ + + + +
+
Select Game
+
+ +
+ + + + +
+ + + + + + +
+
Match Settings
+
+
+
+ +
+ + KAS +
+
Winner takes 98% · 2% protocol fee
+
+
+ + +
Minutes + increment per move
+
+
+ + +
Odd numbers only
+
+
+ + + + + +
+
+

Match Lifecycle

+

Trustless 5-step flow: escrow lock · opponent match · on-chain play · proof verification · settlement

+
+
+
+
Create
+
Lock escrow on-chain
+
+
+
+
Accept
+
Opponent matches escrow
+
+
+
+
Play
+
Moves synced on-chain
+
+
+
+
Verify
+
Covenant verifies proof
+
+
+
+
Settle
+
Winner paid instantly
+
+
+ + +
+
+ + +
+
+ +
+

Oracle Dashboard

+

Stake KAS to resolve markets. Earn fees for honest attestation. Get slashed for dishonesty. +

+
+ + +
+
+ + + Hybrid ZK+Bond Fallback +
+
+
+ + +
+
+ + +
+
+
+ + +
+
+
0
+
My Bond (KAS)
+
+
+
0
+
Resolved
+
+
+
0
+
Earned (KAS)
+
+
+
0
+
Slashed
+
+
+
-
+
Accuracy
+
+
+
0
+
ZK Confirmed
+
+
+ + +
+

Stake Oracle Bond

+

Stake your KAS to become a market resolver. + Your bond earns fees on every honest resolution and keeps the protocol trustless. If challenged and proven wrong, your bond is at risk. Minimum: 5,000 KAS.

+
+
+ + +
+
+ + +
+ +
+ +
+ + +

Markets Awaiting Resolution

+
+ +
+ + + + + +
+

ZK Miner Attestation Status

+
+

ZK miners + independently verify oracle attestations by generating a Groth16 proof that the attested + outcome matches the referenced evidence. The proof is submitted on-chain and verified by + the covenant in a single transaction.

+
+ +
+
+
+ + +
+
--
Active Oracles
+
--
Total KAS Bonded
+
--
Markets Resolved
+
--
Avg Resolution Fee
+
+ + +
+

+ Oracle Node +

+ + +
+
+ Node Configuration +
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+ + + +
+
+ + +
+
+
+
+ Attestation Daemon
+
+ Polls for closed markets. Signs and broadcasts attestation TXs + to your Kaspa node. Bond required: 5,000 KAS minimum.
+
+
+ + + Offline +
+
+ +
+
+
0
+
Staked KAS
+
+
+
0
+
Pending
+
+
+
0
+
Attested
+
+
+
--
+
Node
+
+
+ +
+ + + +
+ +
+
+ Oracle node offline. Connect wallet, stake bond, then Start.
+
+
+
+ + +
+

Active Disputes

+
+ +
+ + +
+

Challenge a + Resolution

+

If you believe + an oracle attestation is incorrect, you can challenge it by bonding KAS. If the ZK + attestation contradicts the oracle, the oracle's bond is slashed and redistributed to + you. If the oracle is confirmed correct, your challenge bond is slashed.

+
+
+ + +
+
+ + +
+
+
+ + +
+ + +
+
+ +
+
+ + + +
+
+ +
+

Portfolio

+

Skill game matches and event market positions. Payouts settle automatically on-chain.

+
+ + +
+
+
P&L (KAS)
+
0
+
+
+
Open Positions
+
0
+
+
+
Won
+
0
+
+
+
Lost
+
0
+
+
+
Matches
+
0
+
+
+
Claimable (KAS)
+
0
+
+
+ + +
+ + + +
+ + +
+ +
+
+
W/L
+
0/0
+
+
+
Earnings
+
0 KAS
+
+
+ +
+ + +
+ +
+
+
+
+

No active matches.

+ + Create or join a match + +
+
+
+ + +
+ + + + + + + + + + +
+
+ + +
+
+
+

Wallet

+

Connect via extension or enter your address. Supports TN12 testnet and mainnet.

+
+
+ + +
+
+
KasWare
+

KasWare

+
+
+
Kastle
+

Kastle

+
+
+
Kasanova
+

Kasanova

+
+
+
Kaspium
+

Kaspium

+
+
+
KaspaCom
+

KaspaCom

+
+
+
DEX.cc
+

DEX.cc

+
+
+ + + + + + + + +
+

Custom Node

+

Connect to your own Kaspa node for dedicated access. Defaults to public resolvers if empty.

+ + + +
+ + +
+ + +
+
+ + +
+
+ + +
+
+ + + + +
+ + + +
+ + + +
+
+

Generate Mnemonic

+

12 or 24-word seed. Back it up.

+
+
Click above to generate.
+
+
+

Connect via Mnemonic

+
+
+
+
+

Connect via Private Key

+

Import a raw 32-byte hex private key (64 hex characters). Never share your private key.

+
+ + +
+ +
+
+
+
+ + +
+
+ +
+

Why Kaspa

+

The BlockDAG that High Table Protocol settles on.

+
+ + +
+
+
+
+ Want to run an oracle node?
+
+ Stake KAS, connect your node, and earn fees by resolving markets on-chain.
+
+ +
+
+ + + + + +
+
+ Built for Speed. Secured by Proof of Work. +
+

Kaspa is the + only Layer 1 that runs a BlockDAG consensus at 10 blocks per second while maintaining the security + guarantees of Nakamoto-style proof of work. No staking. No validators. No premine. Every block + counts.

+
+ + + +
+

+ + LIVE KASPA BLOCKDAG +

+
+ +
+
+ + LIVE +
+
+
+ + +
+
+

BlockDAG Architecture

+

Unlike a blockchain where one miner wins per round, Kaspa allows all miners to contribute blocks + simultaneously. GHOSTDAG consensus orders them into a directed acyclic graph without orphaning + any honest work. More miners means more throughput, not more waste.

+
+
+

Sub-Second Confirmation

+

Transactions confirm in under 1 second. Full probabilistic finality in roughly 10 seconds. At the + 100 BPS target on the roadmap, the network will process over 30,000 transactions per second + while every node validates every block.

+
+
+

Pure Proof of Work

+

Kaspa uses kHeavyHash, an optical-mining-friendly algorithm. No staking, no delegation, no + foundation-controlled validators. Fair launch in November 2021 with zero premine, zero + allocation, and zero insider advantage.

+
+
+

Why High Table Needs This

+

Prediction markets and skill games require fast settlement, cheap transactions, and hard + finality. Kaspa delivers all three without sacrificing decentralization. Covenants enable + trustless escrow and automated resolution directly on the DAG.

+
+
+ + +
+
+
10 BPS
+
Block Rate
+
+
+
~1s
+
Confirm
+
+
+
~10s
+
Finality
+
+
+
28.7B
+
Max Supply
+
+
+
0
+
Premine
+
+
+
PoW
+
Consensus
+
+
+ + +
+

Covenants on Kaspa

+
+

Kaspa covenants are + programmable spending conditions enforced at the UTXO level. They allow contracts to lock funds, + define resolution rules, and release value automatically when conditions are met. High Table + Protocol uses covenants to build trustless escrow for every market and every match. Funds are + locked when a position is taken and released when the outcome is resolved. No intermediary holds + your money at any point.

+
+
+ + +
+

Kaspa Timeline

+
+
+
+
+
November 7, 2021
+
Mainnet launch. Fair + launch, zero premine, zero ICO. Mining begins at 1 BPS on Go-based kaspad.
+
+
+
+
+
2022
+
Community dev fund + launched. First exchange listings. DAGKnight research begins (Sompolinsky, Sutton). + Chromatic emission decay active.
+
+
+
+
+
2023
+
Rusty Kaspa alpha released + April 2023. Full rewrite from Go to Rust. Wrapped KAS (wKAS) on ETH, Polygon, BNB. Major + exchange listings.
+
+
+
+
+
2024
+
TN11 running at 10 BPS + since early 2024. Rust nodes integrated on mainnet. Gradual Go-to-Rust migration across the + network.
+
+
+
+
+
May 5, 2025
+
Crescendo hard fork + activates 10 BPS on mainnet. Complete Rust codebase live. Kaspa becomes the fastest pure PoW + chain.
+
+
+
+
+
Late 2025
+
DAGKnight prototype + operational on devnet. TN12 testnet launched. vProgs yellow paper published. Covenant + opcodes (KIP-10) spec finalized.
+
+
+
+
+
2026 (Current)
+
Covenants hard fork + targeted Q2 2026. DAGKnight mainnet activation targeted mid-2026. 25-40 BPS on roadmap + for end of Q3.
+
+
+
+
+
2027+
+
100+ BPS target. Full + vProgs smart contract layer. SilverScript compiler. ZK verification opcodes.
+
+
+
+ + +
+

Research Papers

+
+ +
PHANTOM GHOSTDAG
+
Sompolinsky, Wyborski, Zohar. A scalable + generalization of Nakamoto consensus.
+
+ +
DAGKnight
+
Sompolinsky, Sutton. A parameterless + generalization of Nakamoto consensus.
+
+ +
vProgs Yellow Paper
+
Kaspa virtual programs. Covenant + execution layer enabling smart contract logic on Kaspa.
+
+ +
SPECTRE
+
Sompolinsky, Lewenberg, Zohar. A fast and + scalable cryptocurrency protocol using BlockDAG voting.
+
+ +
Kaspa Emission Schedule
+
Fair launch, no premine. Chromatic + phase-based geometric decay to 28.7B total supply.
+
+ +
Bitcoin's Security Model Revisited +
+
Sompolinsky, Zohar. Revisiting security + guarantees under realistic network conditions.
+
+ +
Optimal Selfish Mining Strategies + in Bitcoin
+
Sapirshtein, Sompolinsky, Zohar. Formal + analysis of selfish mining attacks and profitability thresholds.
+
+ +
Yonatan Sompolinsky on Medium +
+
hashdag.medium.com. Origin stories, + launch plans, vision series, post-mortems, and the philosophy behind Kaspa.
+
+
+
+ +
+
+ + +
+
+
+

Terms, Conditions & Risk Disclosure

+

Please read carefully before using High Table Protocol.

+
+
+

1. Nature of the Protocol

+

High Table Protocol (“HTP”) is a non-custodial, decentralized prediction market interface + built on the Kaspa BlockDAG. HTP provides a front-end to interact with covenant-enforced smart + contract logic deployed on Kaspa Layer 1. HTP is not a company, corporation, partnership, or legal + entity. It is open-source protocol software.

+
+
+

2. No Custody, No Intermediary

+

HTP never takes custody of your funds. All positions are held in Kaspa UTXO covenants enforced at the + consensus level. You connect your own wallet and sign your own transactions. There is no fiduciary + relationship. The protocol is the counterparty.

+
+
+

3. Parimutuel Market Mechanics

+

All markets operate as parimutuel pools. Stakes on each outcome accumulate into a shared pool. Upon + resolution, the pool (minus protocol fees) is distributed pro-rata to the winning side. Payouts + depend on your stake relative to total winning-side stakes, not on fixed odds at entry. Displayed + multipliers are estimates that change as new stakes enter.

+
+
+

4. Trading Modes

+

Spot Mode: Full upside, full downside. If your outcome wins, you receive your + pro-rata share minus a 2% fee on profit only. If you lose, you lose your entire stake.

+

Maximizer Mode: Same upside as Spot. On loss, 50% of your stake is rebated. 30% of + the rebate amount is charged as an insurance fee. Net loss ~65% of stake vs 100% in Spot.

+
+
+

5. Market Creation & Creator Bonds

+

Anyone can create a market by posting a 1,000 KAS creator bond locked in a covenant until resolution. + If the market resolves cleanly, the bond is returned. If flagged as spam, manipulative, or + unresolvable, the bond is slashed via dispute. Creators set the question, source, category, and + closing time. Creators do not set odds.

+
+
+

6. Oracle & Resolution

+

ZK-Verified (Primary): ZK proofs over external data feeds verified on Kaspa. + Trustless, deterministic.

+

Bonded (Fallback): Human attestors post bonds and submit outcomes. A + challenge window (24-72h) allows disputes via counter-bonds. Incorrect attestors are slashed. Once + the window closes without dispute, the outcome is final and the covenant distributes the pool.

+
+
+

7. Fee Structure

+

All fees are protocol-level, immutable, and enforced by covenant logic.

+
    +
  • Spot fee: 2% on profit only. No fee if you lose.
  • +
  • Maximizer insurance fee: 30% of the 50% loss rebate (~15% of losing stake). +
  • +
  • Creator bond: 1,000 KAS, refundable on clean resolution.
  • +
  • Attestor bond: Minimum 500 KAS, slashed on incorrect attestation.
  • +
+

No withdrawal fees, deposit fees, or hidden charges.

+
+
+

8. Risk Disclosure

+

Total loss: Spot: 100% loss possible. Maximizer: ~65% loss possible. Do not stake + more than you can afford to lose.

+

Smart contract risk: Covenants are immutable once deployed. No admin key, no pause, + no upgrade path for live markets.

+

Oracle risk: Bonded escalation mitigates but does not eliminate incorrect + resolution.

+

Network risk: Congestion, forks, or consensus failures could delay settlement.

+

Regulatory risk: Prediction markets may be regulated in your jurisdiction. You are + solely responsible for compliance.

+

Liquidity risk: Low participation may result in unfavorable odds.

+
+
+

9. User Responsibilities

+
    +
  • You are solely responsible for wallet security, private keys, and seed phrases.
  • +
  • You are responsible for determining legality in your jurisdiction.
  • +
  • You understand parimutuel mechanics and the difference between Spot and Maximizer.
  • +
  • You accept that multipliers are estimates and payouts depend on final pool composition.
  • +
  • All transactions are final and irreversible once confirmed on Kaspa.
  • +
+
+
+

10. No Warranty

+

HTP is provided “AS IS” without warranty of any kind. No representations regarding + accuracy, reliability, or completeness. Use at your own risk.

+
+
+

11. Limitation of Liability

+

In no event shall developers, contributors, or associated parties be liable for any direct, indirect, + incidental, special, or consequential damages arising from use of HTP, including loss of funds, + data, or profits.

+
+
+

12. Dispute Resolution

+

On-chain disputes are resolved through bonded escalation (Section 6). There is no customer support, + refund mechanism, or appeals process beyond the on-chain challenge system.

+
+
+

13. Amendments

+

Protocol-level rules are immutable once deployed. Interface-level terms may be updated. Continued use + constitutes acceptance. Deployed covenants are unaffected by interface changes.

+
+
+

14. Governing Framework

+

HTP operates as decentralized open-source software not governed by any specific jurisdiction. Users + are responsible for compliance with local laws.

+
+ +
+

15. Oracle Attestation and Bonding

+

A minimum bond of 5,000 KAS is required to become an oracle operator. Attestations are Kaspa transactions with a signed payload containing the market ID, outcome, and evidence hash. A 24-hour dispute window follows each ZK confirmation. Bonds are slashed upon successful challenge.

+

The browser daemon requires the tab to remain open; a Node.js equivalent is available for persistent operation. HTP is not responsible for the accuracy of external API data; operators bear sole responsibility. Oracle earnings are distributed from a percentage of the 2% protocol fee pool.

+
+
+

16. Skill Game Covenants

+

Escrow is locked on-chain when a match is created. Both players must deposit within 24 hours or the creator is refunded. All move validation is performed client-side against deterministic rules (chess.js for chess). The covenant enforces winner payout with no human arbiter. A 2% protocol fee is deducted from the gross pot.

+

Timeout: if a player's clock hits zero, the opponent wins and the covenant settles immediately. Resign: treated as a loss; the opponent receives the net payout via covenant.

+
+
+

17. SilverScript Covenant Tool

+

The sandbox auto-generates covenant code from the Create Event form for transparency. Compiled code is not submitted on-chain until "Compile + Deploy" followed by "Create Event". Custom modifications are at the user's own risk; HTP makes no guarantees. The sandbox is a developer and inspection tool, not required for normal event creation.

+
+
+

18. Data and Privacy

+

Node REST URLs are stored in localStorage only and are never transmitted to HTP servers. Wallet mnemonics never leave the browser; all signing occurs in WASM via the kaspa-wasm SDK. Oracle daemon logs are in-memory only; they are not persisted or sent externally.

+

Firebase Realtime Database stores market metadata, positions, and match state. Private keys and seed phrases are never stored in Firebase or any external database.

+
+ +
+

Last updated: April 1, 2026. By connecting a wallet or + entering a position, you acknowledge acceptance of these terms.

+
+
+
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/firebase-app-compat.js b/public/firebase-app-compat.js new file mode 100644 index 00000000..870a934d --- /dev/null +++ b/public/firebase-app-compat.js @@ -0,0 +1,8 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).firebase=t()}(this,function(){"use strict";const r=function(t){const r=[];let n=0;for(let i=0;i>6|192:(55296==(64512&e)&&i+1>18|240,r[n++]=e>>12&63|128):r[n++]=e>>12|224,r[n++]=e>>6&63|128),r[n++]=63&e|128)}return r},n={byteToCharMap_:null,charToByteMap_:null,byteToCharMapWebSafe_:null,charToByteMapWebSafe_:null,ENCODED_VALS_BASE:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",get ENCODED_VALS(){return this.ENCODED_VALS_BASE+"+/="},get ENCODED_VALS_WEBSAFE(){return this.ENCODED_VALS_BASE+"-_."},HAS_NATIVE_SUPPORT:"function"==typeof atob,encodeByteArray(r,e){if(!Array.isArray(r))throw Error("encodeByteArray takes an array as a parameter");this.init_();var n=e?this.byteToCharMapWebSafe_:this.byteToCharMap_;const i=[];for(let h=0;h>6,t=63&l;c||(t=64,s||(e=64)),i.push(n[a>>2],n[(3&a)<<4|o>>4],n[e],n[t])}return i.join("")},encodeString(e,t){return this.HAS_NATIVE_SUPPORT&&!t?btoa(e):this.encodeByteArray(r(e),t)},decodeString(e,t){return this.HAS_NATIVE_SUPPORT&&!t?atob(e):function(e){const t=[];let r=0,n=0;for(;r>10)),t[n++]=String.fromCharCode(56320+(1023&a))):(i=e[r++],a=e[r++],t[n++]=String.fromCharCode((15&s)<<12|(63&i)<<6|63&a))}return t.join("")}(this.decodeStringToByteArray(e,t))},decodeStringToByteArray(e,t){this.init_();var r=t?this.charToByteMapWebSafe_:this.charToByteMap_;const n=[];for(let c=0;c>4),64!==s&&(n.push(a<<4&240|s>>2),64!==o&&n.push(s<<6&192|o))}return n},init_(){if(!this.byteToCharMap_){this.byteToCharMap_={},this.charToByteMap_={},this.byteToCharMapWebSafe_={},this.charToByteMapWebSafe_={};for(let e=0;e=this.ENCODED_VALS_BASE.length&&(this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(e)]=e,this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(e)]=e)}}};class l extends Error{constructor(){super(...arguments),this.name="DecodeBase64StringError"}}const a=function(e){return e=e,t=r(e),n.encodeByteArray(t,!0).replace(/\./g,"");var t};function c(e,t){if(!(t instanceof Object))return t;switch(t.constructor){case Date:const r=t;return new Date(r.getTime());case Object:void 0===e&&(e={});break;case Array:e=[];break;default:return t}for(const n in t)t.hasOwnProperty(n)&&"__proto__"!==n&&(e[n]=c(e[n],t[n]));return e}function e(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if("undefined"!=typeof global)return global;throw new Error("Unable to locate global object.")}const t=()=>{if("undefined"!=typeof document){let e;try{e=document.cookie.match(/__FIREBASE_DEFAULTS__=([^;]+)/)}catch(e){return}var t=e&&function(e){try{return n.decodeString(e,!0)}catch(e){console.error("base64Decode failed: ",e)}return null}(e[1]);return t&&JSON.parse(t)}},i=()=>{try{return e().__FIREBASE_DEFAULTS__||(()=>{if("undefined"!=typeof process&&void 0!==process.env){var e=process.env.__FIREBASE_DEFAULTS__;return e?JSON.parse(e):void 0}})()||t()}catch(e){return void console.info(`Unable to get __FIREBASE_DEFAULTS__ due to: ${e}`)}},h=()=>{var e;return null===(e=i())||void 0===e?void 0:e.config};class s{constructor(){this.reject=()=>{},this.resolve=()=>{},this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}wrapCallback(r){return(e,t)=>{e?this.reject(e):this.resolve(t),"function"==typeof r&&(this.promise.catch(()=>{}),1===r.length?r(e):r(e,t))}}}function d(){return"undefined"!=typeof WorkerGlobalScope&&"undefined"!=typeof self&&self instanceof WorkerGlobalScope}class o extends Error{constructor(e,t,r){super(t),this.code=e,this.customData=r,this.name="FirebaseError",Object.setPrototypeOf(this,o.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,u.prototype.create)}}class u{constructor(e,t,r){this.service=e,this.serviceName=t,this.errors=r}create(e,...t){var n,r=t[0]||{},i=`${this.service}/${e}`,a=this.errors[e],a=a?(n=r,a.replace(p,(e,t)=>{var r=n[t];return null!=r?String(r):`<${t}?>`})):"Error",a=`${this.serviceName}: ${a} (${i}).`;return new o(i,a,r)}}const p=/\{\$([^}]+)}/g;function f(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function g(e,t){if(e===t)return 1;const r=Object.keys(e),n=Object.keys(t);for(const s of r){if(!n.includes(s))return;var i=e[s],a=t[s];if(b(i)&&b(a)){if(!g(i,a))return}else if(i!==a)return}for(const o of n)if(!r.includes(o))return;return 1}function b(e){return null!==e&&"object"==typeof e}function m(e,t){const r=new v(e,t);return r.subscribe.bind(r)}class v{constructor(e,t){this.observers=[],this.unsubscribes=[],this.observerCount=0,this.task=Promise.resolve(),this.finalized=!1,this.onNoObservers=t,this.task.then(()=>{e(this)}).catch(e=>{this.error(e)})}next(t){this.forEachObserver(e=>{e.next(t)})}error(t){this.forEachObserver(e=>{e.error(t)}),this.close(t)}complete(){this.forEachObserver(e=>{e.complete()}),this.close()}subscribe(e,t,r){let n;if(void 0===e&&void 0===t&&void 0===r)throw new Error("Missing Observer.");n=function(e,t){if("object"!=typeof e||null===e)return!1;for(const r of t)if(r in e&&"function"==typeof e[r])return!0;return!1}(e,["next","error","complete"])?e:{next:e,error:t,complete:r},void 0===n.next&&(n.next=_),void 0===n.error&&(n.error=_),void 0===n.complete&&(n.complete=_);var i=this.unsubscribeOne.bind(this,this.observers.length);return this.finalized&&this.task.then(()=>{try{this.finalError?n.error(this.finalError):n.complete()}catch(e){}}),this.observers.push(n),i}unsubscribeOne(e){void 0!==this.observers&&void 0!==this.observers[e]&&(delete this.observers[e],--this.observerCount,0===this.observerCount&&void 0!==this.onNoObservers&&this.onNoObservers(this))}forEachObserver(t){if(!this.finalized)for(let e=0;e{if(void 0!==this.observers&&void 0!==this.observers[e])try{t(this.observers[e])}catch(e){"undefined"!=typeof console&&console.error&&console.error(e)}})}close(e){this.finalized||(this.finalized=!0,void 0!==e&&(this.finalError=e),this.task.then(()=>{this.observers=void 0,this.onNoObservers=void 0}))}}function _(){}class y{constructor(e,t,r){this.name=e,this.instanceFactory=t,this.type=r,this.multipleInstances=!1,this.serviceProps={},this.instantiationMode="LAZY",this.onInstanceCreated=null}setInstantiationMode(e){return this.instantiationMode=e,this}setMultipleInstances(e){return this.multipleInstances=e,this}setServiceProps(e){return this.serviceProps=e,this}setInstanceCreatedCallback(e){return this.onInstanceCreated=e,this}}const E="[DEFAULT]";class w{constructor(e,t){this.name=e,this.container=t,this.component=null,this.instances=new Map,this.instancesDeferred=new Map,this.instancesOptions=new Map,this.onInitCallbacks=new Map}get(e){var t=this.normalizeInstanceIdentifier(e);if(!this.instancesDeferred.has(t)){const n=new s;if(this.instancesDeferred.set(t,n),this.isInitialized(t)||this.shouldAutoInitialize())try{var r=this.getOrInitializeService({instanceIdentifier:t});r&&n.resolve(r)}catch(e){}}return this.instancesDeferred.get(t).promise}getImmediate(e){var t=this.normalizeInstanceIdentifier(null==e?void 0:e.identifier),r=null!==(r=null==e?void 0:e.optional)&&void 0!==r&&r;if(!this.isInitialized(t)&&!this.shouldAutoInitialize()){if(r)return null;throw Error(`Service ${this.name} is not available`)}try{return this.getOrInitializeService({instanceIdentifier:t})}catch(e){if(r)return null;throw e}}getComponent(){return this.component}setComponent(e){if(e.name!==this.name)throw Error(`Mismatching Component ${e.name} for Provider ${this.name}.`);if(this.component)throw Error(`Component for ${this.name} has already been provided`);if(this.component=e,this.shouldAutoInitialize()){if("EAGER"===e.instantiationMode)try{this.getOrInitializeService({instanceIdentifier:E})}catch(e){}for(var[t,r]of this.instancesDeferred.entries()){t=this.normalizeInstanceIdentifier(t);try{var n=this.getOrInitializeService({instanceIdentifier:t});r.resolve(n)}catch(e){}}}}clearInstance(e=E){this.instancesDeferred.delete(e),this.instancesOptions.delete(e),this.instances.delete(e)}async delete(){const e=Array.from(this.instances.values());await Promise.all([...e.filter(e=>"INTERNAL"in e).map(e=>e.INTERNAL.delete()),...e.filter(e=>"_delete"in e).map(e=>e._delete())])}isComponentSet(){return null!=this.component}isInitialized(e=E){return this.instances.has(e)}getOptions(e=E){return this.instancesOptions.get(e)||{}}initialize(e={}){var{options:t={}}=e,r=this.normalizeInstanceIdentifier(e.instanceIdentifier);if(this.isInitialized(r))throw Error(`${this.name}(${r}) has already been initialized`);if(!this.isComponentSet())throw Error(`Component ${this.name} has not been registered yet`);var n,i,a=this.getOrInitializeService({instanceIdentifier:r,options:t});for([n,i]of this.instancesDeferred.entries())r===this.normalizeInstanceIdentifier(n)&&i.resolve(a);return a}onInit(e,t){var r=this.normalizeInstanceIdentifier(t);const n=null!==(i=this.onInitCallbacks.get(r))&&void 0!==i?i:new Set;n.add(e),this.onInitCallbacks.set(r,n);var i=this.instances.get(r);return i&&e(i,r),()=>{n.delete(e)}}invokeOnInitCallbacks(e,t){var r=this.onInitCallbacks.get(t);if(r)for(const n of r)try{n(e,t)}catch(e){}}getOrInitializeService({instanceIdentifier:e,options:t={}}){let r=this.instances.get(e);if(!r&&this.component&&(r=this.component.instanceFactory(this.container,{instanceIdentifier:(n=e)===E?void 0:n,options:t}),this.instances.set(e,r),this.instancesOptions.set(e,t),this.invokeOnInitCallbacks(r,e),this.component.onInstanceCreated))try{this.component.onInstanceCreated(this.container,e,r)}catch(e){}var n;return r||null}normalizeInstanceIdentifier(e=E){return!this.component||this.component.multipleInstances?e:E}shouldAutoInitialize(){return!!this.component&&"EXPLICIT"!==this.component.instantiationMode}}class C{constructor(e){this.name=e,this.providers=new Map}addComponent(e){const t=this.getProvider(e.name);if(t.isComponentSet())throw new Error(`Component ${e.name} has already been registered with ${this.name}`);t.setComponent(e)}addOrOverwriteComponent(e){const t=this.getProvider(e.name);t.isComponentSet()&&this.providers.delete(e.name),this.addComponent(e)}getProvider(e){if(this.providers.has(e))return this.providers.get(e);var t=new w(e,this);return this.providers.set(e,t),t}getProviders(){return Array.from(this.providers.values())}}const D=[];var I,S,O;(S=I=I||{})[S.DEBUG=0]="DEBUG",S[S.VERBOSE=1]="VERBOSE",S[S.INFO=2]="INFO",S[S.WARN=3]="WARN",S[S.ERROR=4]="ERROR",S[S.SILENT=5]="SILENT";const A={debug:I.DEBUG,verbose:I.VERBOSE,info:I.INFO,warn:I.WARN,error:I.ERROR,silent:I.SILENT},L=I.INFO,N={[I.DEBUG]:"log",[I.VERBOSE]:"log",[I.INFO]:"info",[I.WARN]:"warn",[I.ERROR]:"error"},B=(e,t,...r)=>{if(!(te.some(e=>t instanceof e);let P,k;const M=new WeakMap,F=new WeakMap,j=new WeakMap,z=new WeakMap,$=new WeakMap;let H={get(e,t,r){if(e instanceof IDBTransaction){if("done"===t)return F.get(e);if("objectStoreNames"===t)return e.objectStoreNames||j.get(e);if("store"===t)return r.objectStoreNames[1]?void 0:r.objectStore(r.objectStoreNames[0])}return W(e[t])},set(e,t,r){return e[t]=r,!0},has(e,t){return e instanceof IDBTransaction&&("done"===t||"store"===t)||t in e}};function x(n){return n!==IDBDatabase.prototype.transaction||"objectStoreNames"in IDBTransaction.prototype?(k=k||[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey]).includes(n)?function(...e){return n.apply(U(this),e),W(M.get(this))}:function(...e){return W(n.apply(U(this),e))}:function(e,...t){var r=n.call(U(this),e,...t);return j.set(r,e.sort?e.sort():[e]),W(r)}}function V(e){return"function"==typeof e?x(e):(e instanceof IDBTransaction&&(a=e,F.has(a)||(t=new Promise((e,t)=>{const r=()=>{a.removeEventListener("complete",n),a.removeEventListener("error",i),a.removeEventListener("abort",i)},n=()=>{e(),r()},i=()=>{t(a.error||new DOMException("AbortError","AbortError")),r()};a.addEventListener("complete",n),a.addEventListener("error",i),a.addEventListener("abort",i)}),F.set(a,t))),R(e,P=P||[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])?new Proxy(e,H):e);var a,t}function W(e){if(e instanceof IDBRequest)return function(a){const e=new Promise((e,t)=>{const r=()=>{a.removeEventListener("success",n),a.removeEventListener("error",i)},n=()=>{e(W(a.result)),r()},i=()=>{t(a.error),r()};a.addEventListener("success",n),a.addEventListener("error",i)});return e.then(e=>{e instanceof IDBCursor&&M.set(e,a)}).catch(()=>{}),$.set(e,a),e}(e);if(z.has(e))return z.get(e);var t=V(e);return t!==e&&(z.set(e,t),$.set(t,e)),t}const U=e=>$.get(e);const G=["get","getKey","getAll","getAllKeys","count"],J=["put","add","delete","clear"],K=new Map;function Y(e,t){if(e instanceof IDBDatabase&&!(t in e)&&"string"==typeof t){if(K.get(t))return K.get(t);const i=t.replace(/FromIndex$/,""),a=t!==i,s=J.includes(i);if(i in(a?IDBIndex:IDBObjectStore).prototype&&(s||G.includes(i))){var r=async function(e,...t){var r=this.transaction(e,s?"readwrite":"readonly");let n=r.store;return a&&(n=n.index(t.shift())),(await Promise.all([n[i](...t),s&&r.done]))[0]};return K.set(t,r),r}}}H={...O=H,get:(e,t,r)=>Y(e,t)||O.get(e,t,r),has:(e,t)=>!!Y(e,t)||O.has(e,t)};class X{constructor(e){this.container=e}getPlatformInfoString(){const e=this.container.getProviders();return e.map(e=>{if("VERSION"!==(null==(t=e.getComponent())?void 0:t.type))return null;var t,t=e.getImmediate();return`${t.library}/${t.version}`}).filter(e=>e).join(" ")}}const q="@firebase/app",Z="0.10.13",Q=new T("@firebase/app");var ee;const te="[DEFAULT]",re={"@firebase/app":"fire-core","@firebase/app-compat":"fire-core-compat","@firebase/analytics":"fire-analytics","@firebase/analytics-compat":"fire-analytics-compat","@firebase/app-check":"fire-app-check","@firebase/app-check-compat":"fire-app-check-compat","@firebase/auth":"fire-auth","@firebase/auth-compat":"fire-auth-compat","@firebase/database":"fire-rtdb","@firebase/data-connect":"fire-data-connect","@firebase/database-compat":"fire-rtdb-compat","@firebase/functions":"fire-fn","@firebase/functions-compat":"fire-fn-compat","@firebase/installations":"fire-iid","@firebase/installations-compat":"fire-iid-compat","@firebase/messaging":"fire-fcm","@firebase/messaging-compat":"fire-fcm-compat","@firebase/performance":"fire-perf","@firebase/performance-compat":"fire-perf-compat","@firebase/remote-config":"fire-rc","@firebase/remote-config-compat":"fire-rc-compat","@firebase/storage":"fire-gcs","@firebase/storage-compat":"fire-gcs-compat","@firebase/firestore":"fire-fst","@firebase/firestore-compat":"fire-fst-compat","@firebase/vertexai-preview":"fire-vertex","fire-js":"fire-js",firebase:"fire-js-all"},ne=new Map,ie=new Map,ae=new Map;function se(t,r){try{t.container.addComponent(r)}catch(e){Q.debug(`Component ${r.name} failed to register with FirebaseApp ${t.name}`,e)}}function oe(e,t){e.container.addOrOverwriteComponent(t)}function ce(e){var t=e.name;if(ae.has(t))return Q.debug(`There were multiple attempts to register component ${t}.`),!1;ae.set(t,e);for(const r of ne.values())se(r,e);for(const n of ie.values())se(n,e);return!0}function le(e,t){const r=e.container.getProvider("heartbeat").getImmediate({optional:!0});return r&&r.triggerHeartbeat(),e.container.getProvider(t)}function he(e){return void 0!==e.options}const de=new u("app","Firebase",{"no-app":"No Firebase App '{$appName}' has been created - call initializeApp() first","bad-app-name":"Illegal App name: '{$appName}'","duplicate-app":"Firebase App named '{$appName}' already exists with different options or config","app-deleted":"Firebase App named '{$appName}' already deleted","server-app-deleted":"Firebase Server App has been deleted","no-options":"Need to provide options, when not being deployed to hosting via source.","invalid-app-argument":"firebase.{$appName}() takes either no argument or a Firebase App instance.","invalid-log-argument":"First argument to `onLog` must be null or a function.","idb-open":"Error thrown when opening IndexedDB. Original error: {$originalErrorMessage}.","idb-get":"Error thrown when reading from IndexedDB. Original error: {$originalErrorMessage}.","idb-set":"Error thrown when writing to IndexedDB. Original error: {$originalErrorMessage}.","idb-delete":"Error thrown when deleting from IndexedDB. Original error: {$originalErrorMessage}.","finalization-registry-not-supported":"FirebaseServerApp deleteOnDeref field defined but the JS runtime does not support FinalizationRegistry.","invalid-server-app-environment":"FirebaseServerApp is not for use in browser environments."});class ue{constructor(e,t,r){this._isDeleted=!1,this._options=Object.assign({},e),this._config=Object.assign({},t),this._name=t.name,this._automaticDataCollectionEnabled=t.automaticDataCollectionEnabled,this._container=r,this.container.addComponent(new y("app",()=>this,"PUBLIC"))}get automaticDataCollectionEnabled(){return this.checkDestroyed(),this._automaticDataCollectionEnabled}set automaticDataCollectionEnabled(e){this.checkDestroyed(),this._automaticDataCollectionEnabled=e}get name(){return this.checkDestroyed(),this._name}get options(){return this.checkDestroyed(),this._options}get config(){return this.checkDestroyed(),this._config}get container(){return this._container}get isDeleted(){return this._isDeleted}set isDeleted(e){this._isDeleted=e}checkDestroyed(){if(this.isDeleted)throw de.create("app-deleted",{appName:this._name})}}class pe extends ue{constructor(e,t,r,n){var i=void 0!==t.automaticDataCollectionEnabled&&t.automaticDataCollectionEnabled,a={name:r,automaticDataCollectionEnabled:i};void 0!==e.apiKey?super(e,a,n):super(e.options,a,n),this._serverConfig=Object.assign({automaticDataCollectionEnabled:i},t),this._finalizationRegistry=null,"undefined"!=typeof FinalizationRegistry&&(this._finalizationRegistry=new FinalizationRegistry(()=>{this.automaticCleanup()})),this._refCount=0,this.incRefCount(this._serverConfig.releaseOnDeref),this._serverConfig.releaseOnDeref=void 0,t.releaseOnDeref=void 0,me(q,Z,"serverapp")}toJSON(){}get refCount(){return this._refCount}incRefCount(e){this.isDeleted||(this._refCount++,void 0!==e&&null!==this._finalizationRegistry&&this._finalizationRegistry.register(e,this))}decRefCount(){return this.isDeleted?0:--this._refCount}automaticCleanup(){be(this)}get settings(){return this.checkDestroyed(),this._serverConfig}checkDestroyed(){if(this.isDeleted)throw de.create("server-app-deleted")}}const fe="10.14.1";function ge(e,t={}){let r=e;if("object"!=typeof t){const i=t;t={name:i}}var n=Object.assign({name:te,automaticDataCollectionEnabled:!1},t);const i=n.name;if("string"!=typeof i||!i)throw de.create("bad-app-name",{appName:String(i)});if(r=r||h(),!r)throw de.create("no-options");var a=ne.get(i);if(a){if(g(r,a.options)&&g(n,a.config))return a;throw de.create("duplicate-app",{appName:i})}const s=new C(i);for(const o of ae.values())s.addComponent(o);n=new ue(r,n,s);return ne.set(i,n),n}async function be(e){let t=!1;var r=e.name;if(ne.has(r))t=!0,ne.delete(r);else if(ie.has(r)){const n=e;n.decRefCount()<=0&&(ie.delete(r),t=!0)}t&&(await Promise.all(e.container.getProviders().map(e=>e.delete())),e.isDeleted=!0)}function me(e,t,r){let n=null!==(a=re[e])&&void 0!==a?a:e;r&&(n+=`-${r}`);var i=n.match(/\s|\//),a=t.match(/\s|\//);if(i||a){const s=[`Unable to register library "${n}" with version "${t}":`];return i&&s.push(`library name "${n}" contains illegal characters (whitespace or "/")`),i&&a&&s.push("and"),a&&s.push(`version name "${t}" contains illegal characters (whitespace or "/")`),void Q.warn(s.join(" "))}ce(new y(`${n}-version`,()=>({library:n,version:t}),"VERSION"))}function ve(e,t){if(null!==e&&"function"!=typeof e)throw de.create("invalid-log-argument");!function(a,e){for(const t of D){let i=null;e&&e.level&&(i=A[e.level]),t.userLogHandler=null===a?null:(e,t,...r)=>{var n=r.map(e=>{if(null==e)return null;if("string"==typeof e)return e;if("number"==typeof e||"boolean"==typeof e)return e.toString();if(e instanceof Error)return e.message;try{return JSON.stringify(e)}catch(e){return null}}).filter(e=>e).join(" ");t>=(null!==i&&void 0!==i?i:e.logLevel)&&a({level:I[t].toLowerCase(),message:n,args:r,type:e.name})}}}(e,t)}function _e(e){var t;t=e,D.forEach(e=>{e.setLogLevel(t)})}const ye="firebase-heartbeat-database",Ee=1,we="firebase-heartbeat-store";let Ce=null;function De(){return Ce=Ce||function(e,t,{blocked:r,upgrade:n,blocking:i,terminated:a}){const s=indexedDB.open(e,t),o=W(s);return n&&s.addEventListener("upgradeneeded",e=>{n(W(s.result),e.oldVersion,e.newVersion,W(s.transaction),e)}),r&&s.addEventListener("blocked",e=>r(e.oldVersion,e.newVersion,e)),o.then(e=>{a&&e.addEventListener("close",()=>a()),i&&e.addEventListener("versionchange",e=>i(e.oldVersion,e.newVersion,e))}).catch(()=>{}),o}(ye,Ee,{upgrade:(e,t)=>{if(0===t)try{e.createObjectStore(we)}catch(e){console.warn(e)}}}).catch(e=>{throw de.create("idb-open",{originalErrorMessage:e.message})}),Ce}async function Ie(e,t){try{const n=await De(),i=n.transaction(we,"readwrite"),a=i.objectStore(we);await a.put(t,Se(e)),await i.done}catch(e){var r;e instanceof o?Q.warn(e.message):(r=de.create("idb-set",{originalErrorMessage:null==e?void 0:e.message}),Q.warn(r.message))}}function Se(e){return`${e.name}!${e.options.appId}`}class Oe{constructor(e){this.container=e,this._heartbeatsCache=null;var t=this.container.getProvider("app").getImmediate();this._storage=new Le(t),this._heartbeatsCachePromise=this._storage.read().then(e=>this._heartbeatsCache=e)}async triggerHeartbeat(){var e,t;try{const n=this.container.getProvider("platform-logger").getImmediate();var r=n.getPlatformInfoString();const i=Ae();return null==(null===(e=this._heartbeatsCache)||void 0===e?void 0:e.heartbeats)&&(this._heartbeatsCache=await this._heartbeatsCachePromise,null==(null===(t=this._heartbeatsCache)||void 0===t?void 0:t.heartbeats))?void 0:this._heartbeatsCache.lastSentHeartbeatDate===i||this._heartbeatsCache.heartbeats.some(e=>e.date===i)?void 0:(this._heartbeatsCache.heartbeats.push({date:i,agent:r}),this._heartbeatsCache.heartbeats=this._heartbeatsCache.heartbeats.filter(e=>{var t=new Date(e.date).valueOf();return Date.now()-t<=2592e6}),this._storage.overwrite(this._heartbeatsCache))}catch(e){Q.warn(e)}}async getHeartbeatsHeader(){var e;try{if(null===this._heartbeatsCache&&await this._heartbeatsCachePromise,null==(null===(e=this._heartbeatsCache)||void 0===e?void 0:e.heartbeats)||0===this._heartbeatsCache.heartbeats.length)return"";var t=Ae(),{heartbeatsToSend:r,unsentEntries:n}=function(e,t=1024){const r=[];let n=e.slice();for(const i of e){const a=r.find(e=>e.agent===i.agent);if(a){if(a.dates.push(i.date),Ne(r)>t){a.dates.pop();break}}else if(r.push({agent:i.agent,dates:[i.date]}),Ne(r)>t){r.pop();break}n=n.slice(1)}return{heartbeatsToSend:r,unsentEntries:n}}(this._heartbeatsCache.heartbeats),i=a(JSON.stringify({version:2,heartbeats:r}));return this._heartbeatsCache.lastSentHeartbeatDate=t,0{try{let e=!0;const n="validate-browser-context-for-indexeddb-analytics-module",i=self.indexedDB.open(n);i.onsuccess=()=>{i.result.close(),e||self.indexedDB.deleteDatabase(n),t(!0)},i.onupgradeneeded=()=>{e=!1},i.onerror=()=>{var e;r((null===(e=i.error)||void 0===e?void 0:e.message)||"")}}catch(e){r(e)}}).then(()=>!0).catch(()=>!1)}async read(){if(await this._canUseIndexedDBPromise){var e=await async function(e){try{const r=await De(),n=r.transaction(we);var t=await n.objectStore(we).get(Se(e));return await n.done,t}catch(e){e instanceof o?Q.warn(e.message):(t=de.create("idb-get",{originalErrorMessage:null==e?void 0:e.message}),Q.warn(t.message))}}(this.app);return null!=e&&e.heartbeats?e:{heartbeats:[]}}return{heartbeats:[]}}async overwrite(e){var t;if(await this._canUseIndexedDBPromise){var r=await this.read();return Ie(this.app,{lastSentHeartbeatDate:null!==(t=e.lastSentHeartbeatDate)&&void 0!==t?t:r.lastSentHeartbeatDate,heartbeats:e.heartbeats})}}async add(e){var t;if(await this._canUseIndexedDBPromise){var r=await this.read();return Ie(this.app,{lastSentHeartbeatDate:null!==(t=e.lastSentHeartbeatDate)&&void 0!==t?t:r.lastSentHeartbeatDate,heartbeats:[...r.heartbeats,...e.heartbeats]})}}}function Ne(e){return a(JSON.stringify({version:2,heartbeats:e})).length}ee="",ce(new y("platform-logger",e=>new X(e),"PRIVATE")),ce(new y("heartbeat",e=>new Oe(e),"PRIVATE")),me(q,Z,ee),me(q,Z,"esm2017"),me("fire-js","");var Be=Object.freeze({__proto__:null,SDK_VERSION:fe,_DEFAULT_ENTRY_NAME:te,_addComponent:se,_addOrOverwriteComponent:oe,_apps:ne,_clearComponents:function(){ae.clear()},_components:ae,_getProvider:le,_isFirebaseApp:he,_isFirebaseServerApp:function(e){return void 0!==e.settings},_registerComponent:ce,_removeServiceInstance:function(e,t,r=te){le(e,t).clearInstance(r)},_serverApps:ie,deleteApp:be,getApp:function(e=te){var t=ne.get(e);if(!t&&e===te&&h())return ge();if(!t)throw de.create("no-app",{appName:e});return t},getApps:function(){return Array.from(ne.values())},initializeApp:ge,initializeServerApp:function(e,t){if(("undefined"!=typeof window||d())&&!d())throw de.create("invalid-server-app-environment");void 0===t.automaticDataCollectionEnabled&&(t.automaticDataCollectionEnabled=!1);let r;r=he(e)?e.options:e;const n=Object.assign(Object.assign({},t),r);if(void 0!==n.releaseOnDeref&&delete n.releaseOnDeref,void 0!==t.releaseOnDeref&&"undefined"==typeof FinalizationRegistry)throw de.create("finalization-registry-not-supported",{});var i=""+[...JSON.stringify(n)].reduce((e,t)=>Math.imul(31,e)+t.charCodeAt(0)|0,0);const a=ie.get(i);if(a)return a.incRefCount(t.releaseOnDeref),a;const s=new C(i);for(const c of ae.values())s.addComponent(c);var o=new pe(r,t,i,s);return ie.set(i,o),o},onLog:ve,registerVersion:me,setLogLevel:_e,FirebaseError:o});class Te{constructor(e,t){this._delegate=e,this.firebase=t,se(e,new y("app-compat",()=>this,"PUBLIC")),this.container=e.container}get automaticDataCollectionEnabled(){return this._delegate.automaticDataCollectionEnabled}set automaticDataCollectionEnabled(e){this._delegate.automaticDataCollectionEnabled=e}get name(){return this._delegate.name}get options(){return this._delegate.options}delete(){return new Promise(e=>{this._delegate.checkDestroyed(),e()}).then(()=>(this.firebase.INTERNAL.removeApp(this.name),be(this._delegate)))}_getService(e,t=te){var r;this._delegate.checkDestroyed();const n=this._delegate.container.getProvider(e);return n.isInitialized()||"EXPLICIT"!==(null===(r=n.getComponent())||void 0===r?void 0:r.instantiationMode)||n.initialize(),n.getImmediate({identifier:t})}_removeServiceInstance(e,t=te){this._delegate.container.getProvider(e).clearInstance(t)}_addComponent(e){se(this._delegate,e)}_addOrOverwriteComponent(e){oe(this._delegate,e)}toJSON(){return{name:this.name,automaticDataCollectionEnabled:this.automaticDataCollectionEnabled,options:this.options}}}const Re=new u("app-compat","Firebase",{"no-app":"No Firebase App '{$appName}' has been created - call Firebase App.initializeApp()","invalid-app-argument":"firebase.{$appName}() takes either no argument or a Firebase App instance."});function Pe(i){const a={},s={__esModule:!0,initializeApp:function(e,t={}){var r=ge(e,t);if(f(a,r.name))return a[r.name];var n=new i(r,s);return a[r.name]=n},app:o,registerVersion:me,setLogLevel:_e,onLog:ve,apps:null,SDK_VERSION:fe,INTERNAL:{registerComponent:function(r){const n=r.name,t=n.replace("-compat","");{var e;ce(r)&&"PUBLIC"===r.type&&(e=(e=o())=>{if("function"!=typeof e[t])throw Re.create("invalid-app-argument",{appName:n});return e[t]()},void 0!==r.serviceProps&&c(e,r.serviceProps),s[t]=e,i.prototype[t]=function(...e){const t=this._getService.bind(this,n);return t.apply(this,r.multipleInstances?e:[])})}return"PUBLIC"===r.type?s[t]:null},removeApp:function(e){delete a[e]},useAsService:function(e,t){if("serverAuth"===t)return null;var r=t;return r},modularAPIs:Be}};function o(e){if(e=e||te,!f(a,e))throw Re.create("no-app",{appName:e});return a[e]}return s.default=s,Object.defineProperty(s,"apps",{get:function(){return Object.keys(a).map(e=>a[e])}}),o.App=i,s}var ke=function e(){const t=Pe(Te);return t.INTERNAL=Object.assign(Object.assign({},t.INTERNAL),{createFirebaseNamespace:e,extendNamespace:function(e){c(t,e)},createSubscribe:m,ErrorFactory:u,deepExtend:c}),t}();const Me=new T("@firebase/app-compat");try{var Fe=e();if(void 0!==Fe.firebase){Me.warn(` + Warning: Firebase is already defined in the global scope. Please make sure + Firebase library is only loaded once. + `);const ze=Fe.firebase.SDK_VERSION;ze&&0<=ze.indexOf("LITE")&&Me.warn(` + Warning: You are trying to load Firebase while using Firebase Performance standalone script. + You should load Firebase Performance with this instance of Firebase to avoid loading duplicate code. + `)}}catch(e){}const je=ke;me("@firebase/app-compat","0.2.43",void 0);return je.registerVersion("firebase","10.14.1","app-compat-cdn"),je}); +//# sourceMappingURL=firebase-app-compat.js.map diff --git a/public/firebase-config.js b/public/firebase-config.js new file mode 100644 index 00000000..ed4f17c9 --- /dev/null +++ b/public/firebase-config.js @@ -0,0 +1,263 @@ +// firebase-config.js — HTP hightable420 +(function () { + 'use strict'; + + var firebaseConfig = { + apiKey: "AIzaSyA9n5AMFgmCL861rmqE_6ajBBEC5BboPd8", + authDomain: "hightable420.firebaseapp.com", + databaseURL: "https://hightable420-default-rtdb.europe-west1.firebasedatabase.app", + projectId: "hightable420", + storageBucket: "hightable420.firebasestorage.app", + messagingSenderId: "863234270639", + appId: "1:863234270639:web:417286ea3466df1094ab94", + measurementId: "G-V3JVLM0T0M" + }; + + function loadScript(src, cb) { + if (document.querySelector('script[src="' + src + '"]')) { cb && cb(); return; } + var s = document.createElement('script'); + s.src = src; s.onload = cb; + document.head.appendChild(s); + } + + function initFirebase() { + if (typeof firebase === 'undefined') { setTimeout(initFirebase, 200); return; } + if (!firebase.apps.length) firebase.initializeApp(firebaseConfig); + var db = firebase.database(); + console.log('%cHTP Firebase ready — hightable420', 'color:#49e8c2;font-weight:bold'); + window.dispatchEvent(new CustomEvent('htp:firebase:ready')); + + window.htpFirebase = { + + createMatch: function(matchId, playerId, walletAddr, matchObj) { + return db.ref('matches/' + matchId).set({ + info: { + game: matchObj.game || 'chess', + timeControl: matchObj.timeControl || 300, + stake: matchObj.stake || 5, + seriesLen: matchObj.seriesLen || 1, + status: 'waiting', + created: Date.now(), + escrowAddress: matchObj.escrowAddress || null + }, + players: { + creator: playerId, + creatorAddr: walletAddr ? walletAddr.substring(0,20)+'...' : '', + creatorAddrFull: walletAddr || '' + } + }); + }, + + joinMatch: function(matchId, playerId, walletAddr, walletAddrFull, joinTxId) { + return db.ref('matches/' + matchId).update({ + 'info/status': 'active', + 'info/joinTxId': joinTxId || null, + 'players/opponent': playerId, + 'players/opponentAddr': walletAddr ? walletAddr.substring(0,20)+'...' : '', + 'players/opponentAddrFull': walletAddrFull || walletAddr || '' + }); + }, + + cancelMatch: function(matchId) { + return db.ref('matches/' + matchId).remove(); + }, + + setMatchStatus: function(matchId, status) { + return db.ref('matches/' + matchId + '/info/status').set(status); + }, + + getMatch: async function(matchId) { + var snap = await db.ref('matches/' + matchId).once('value'); + var val = snap.val(); + if (!val) return null; + return { + id: matchId, + game: (val.info && val.info.game) || 'chess', + timeControl: (val.info && val.info.timeControl) || 300, + stake: (val.info && val.info.stake) || 5, + status: (val.info && val.info.status) || 'waiting', + escrowAddress: (val.info && val.info.escrowAddress) || null, + creator: (val.players && val.players.creator) || null, + creatorAddrFull: (val.players && val.players.creatorAddrFull) || null, + opponent: (val.players && val.players.opponent) || null, + opponentAddrFull: (val.players && val.players.opponentAddrFull) || null + }; + }, + + createEvent: function(eventId, creatorAddr, eventObj) { + return db.ref('events/' + eventId).set({ + id: eventId, + question: eventObj.question || '', + category: eventObj.category || 'General', + outcomes: eventObj.outcomes || ['Yes','No'], + source: eventObj.source || '', + closeDaa: eventObj.closeDaa || 0, + closeTime: eventObj.closeTime || 0, + oracle: eventObj.oracle || 'hybrid', + bond: eventObj.bond || 1000, + maximizer: eventObj.maximizer !== false, + maxCap: eventObj.maxCap || 20, + escrow: eventObj.escrow || null, + creator: creatorAddr || '', + status: 'open', + created: Date.now(), + poolSpot: {}, + poolMax: {} + }); + }, + + updateEventStatus: function(eventId, status, extra) { + return db.ref('events/' + eventId).update(Object.assign({ status: status }, extra || {})); + }, + + getEvent: async function(eventId) { + var snap = await db.ref('events/' + eventId).once('value'); + return snap.val(); + }, + + subscribeEvents: function(cb) { + db.ref('events').on('value', function(snap) { + var val = snap.val(); + if (!val) { cb([]); return; } + cb(Object.values(val).filter(Boolean)); + }); + }, + + writeAttestation: function(eventId, address, outcome, sig) { + var safe = address.replace(/[.#$]/g, '_'); + return db.ref('attestations/' + eventId + '/' + safe).set({ + outcome: outcome, sig: sig, ts: Date.now() + }); + }, + + getAttestations: async function(eventId) { + var snap = await db.ref('attestations/' + eventId).once('value'); + return snap.val() || {}; + }, + + writeResolution: function(eventId, outcome, method, txId) { + return db.ref('events/' + eventId).update({ + status: 'resolved', + outcome: outcome, + resolution: { outcome: outcome, method: method || 'oracle', ts: Date.now(), final: true }, + settleTx: txId || null + }); + }, + + +listenLobby: function(cb) { + db.ref('matches').on('value', function(snap) { + var val = snap.val(); + if (!val) { cb([]); return; } + var now = Date.now(); + var matches = Object.keys(val).map(function(id) { + var m = val[id]; + if (!m || !m.info) return null; + if (now - (m.info.created || 0) > 3600000) return null; + return { + id: id, + game: m.info.game || 'chess', + timeControl: m.info.timeControl || 300, + stake: m.info.stake || 5, + status: m.info.status || 'waiting', + created: m.info.created || now, + escrowAddress: m.info.escrowAddress || null, + creatorId: (m.players && m.players.creator) || 'unknown', + creator: (m.players && m.players.creatorAddrFull) || '', + opponent: (m.players && m.players.opponent) || null + }; + }).filter(Boolean); + cb(matches); + }); +}, + +writeWalletStat: function(address, matchId, record) { + return db.ref('walletstats/' + address.replace(/[.#$]/g,'_') + '/' + matchId).set(record); + }, + + pushMove: function(matchId, moveMsg) { + return db.ref('relay/' + matchId + '/moves').push(moveMsg); + }, + + listenMoves: function(matchId, cb) { + var ref = db.ref('relay/' + matchId + '/moves'); + ref.on('child_added', function(snap) { if (snap.val()) cb(snap.val()); }); + return function() { ref.off('child_added'); }; + }, + + setPresence: function(matchId, playerId, online) { + return db.ref('relay/' + matchId + '/presence/' + playerId).set({ + online: online, ts: Date.now() + }); + }, + + syncClock: function(matchId, clock) { + return db.ref('relay/' + matchId + '/clock').set( + Object.assign({}, clock, { _st: firebase.database.ServerValue.TIMESTAMP }) + ); + }, + + watchClock: function(matchId, cb) { + db.ref('relay/' + matchId + '/clock').on('value', function(snap) { + if (snap.val()) cb(snap.val()); + }); + }, + + writeResult: function(matchId, result) { + return db.ref('relay/' + matchId + '/result').set(result); + }, + + watchResult: function(matchId, cb) { + db.ref('relay/' + matchId + '/result').on('value', function(snap) { + if (snap.val()) cb(snap.val()); + }); + }, + + challengeResult: function(matchId, challengerAddr, evidence) { + return db.ref('relay/' + matchId + '/challenge').set({ + challenger: challengerAddr, evidence: evidence, + ts: Date.now(), status: 'open' + }); + }, + + watchChallenge: function(matchId, cb) { + db.ref('relay/' + matchId + '/challenge').on('value', function(snap) { + if (snap.val()) cb(snap.val()); + }); + } + + }; + + // Lobby sync — pushes Firebase matches to index via custom event + db.ref('matches').on('value', function(snap) { + var val = snap.val(); + if (!val) return; + var now = Date.now(); + var matches = Object.keys(val).map(function(id) { + var m = val[id]; + if (!m || !m.info) return null; + if (now - (m.info.created || 0) > 3600000) return null; + return { + id: id, + game: m.info.game || 'chess', + timeControl: m.info.timeControl || 300, + stake: m.info.stake || 5, + seriesLen: m.info.seriesLen || 1, + status: m.info.status || 'waiting', + created: m.info.created || now, + escrowAddress: m.info.escrowAddress || null, + creatorId: (m.players && m.players.creator) || 'unknown', + creator: (m.players && m.players.creatorAddrFull) || '', + opponent: (m.players && m.players.opponent) || null, + joinTxId: m.info.joinTxId || null + }; + }).filter(Boolean); + window.dispatchEvent(new CustomEvent('htp-firebase-lobby', { detail: { matches: matches } })); + }); + } + + loadScript('https://www.gstatic.com/firebasejs/10.14.1/firebase-app-compat.js', function() { + loadScript('https://www.gstatic.com/firebasejs/10.14.1/firebase-database-compat.js', initFirebase); + }); + +})(); diff --git a/public/firebase-database-compat.js b/public/firebase-database-compat.js new file mode 100644 index 00000000..d08e888c --- /dev/null +++ b/public/firebase-database-compat.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("@firebase/app-compat"),require("@firebase/app")):"function"==typeof define&&define.amd?define(["@firebase/app-compat","@firebase/app"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).firebase,e.firebase.INTERNAL.modularAPIs)}(this,function(wo,Co){"use strict";try{!(function(){function e(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n,t=e(wo);function r(t){const n=[];let r=0;for(let i=0;i>6|192:(55296==(64512&e)&&i+1>18|240,n[r++]=e>>12&63|128):n[r++]=e>>12|224,n[r++]=e>>6&63|128),n[r++]=63&e|128)}return n}const i={NODE_CLIENT:!1,NODE_ADMIN:!1,SDK_VERSION:"${JSCORE_VERSION}"},p=function(e,t){if(!e)throw c(t)},c=function(e){return new Error("Firebase Database ("+i.SDK_VERSION+") INTERNAL ASSERT FAILED: "+e)},s={byteToCharMap_:null,charToByteMap_:null,byteToCharMapWebSafe_:null,charToByteMapWebSafe_:null,ENCODED_VALS_BASE:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",get ENCODED_VALS(){return this.ENCODED_VALS_BASE+"+/="},get ENCODED_VALS_WEBSAFE(){return this.ENCODED_VALS_BASE+"-_."},HAS_NATIVE_SUPPORT:"function"==typeof atob,encodeByteArray(n,e){if(!Array.isArray(n))throw Error("encodeByteArray takes an array as a parameter");this.init_();var r=e?this.byteToCharMapWebSafe_:this.byteToCharMap_;const i=[];for(let c=0;c>6,t=63&h;l||(t=64,o||(e=64)),i.push(r[s>>2],r[(3&s)<<4|a>>4],r[e],r[t])}return i.join("")},encodeString(e,t){return this.HAS_NATIVE_SUPPORT&&!t?btoa(e):this.encodeByteArray(r(e),t)},decodeString(e,t){return this.HAS_NATIVE_SUPPORT&&!t?atob(e):function(e){const t=[];let n=0,r=0;for(;n>10)),t[r++]=String.fromCharCode(56320+(1023&s))):(i=e[n++],s=e[n++],t[r++]=String.fromCharCode((15&o)<<12|(63&i)<<6|63&s))}return t.join("")}(this.decodeStringToByteArray(e,t))},decodeStringToByteArray(e,t){this.init_();var n=t?this.charToByteMapWebSafe_:this.charToByteMap_;const r=[];for(let l=0;l>4),64!==o&&(r.push(s<<4&240|o>>2),64!==a&&r.push(o<<6&192|a))}return r},init_(){if(!this.byteToCharMap_){this.byteToCharMap_={},this.charToByteMap_={},this.byteToCharMapWebSafe_={},this.charToByteMapWebSafe_={};for(let e=0;e=this.ENCODED_VALS_BASE.length&&(this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(e)]=e,this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(e)]=e)}}};class h extends Error{constructor(){super(...arguments),this.name="DecodeBase64StringError"}}function o(e){var t=r(e);return s.encodeByteArray(t,!0)}const a=function(e){return o(e).replace(/\./g,"")},l=function(e){try{return s.decodeString(e,!0)}catch(e){console.error("base64Decode failed: ",e)}return null};function u(e){return function e(t,n){if(!(n instanceof Object))return n;switch(n.constructor){case Date:const r=n;return new Date(r.getTime());case Object:void 0===t&&(t={});break;case Array:t=[];break;default:return n}for(const i in n)n.hasOwnProperty(i)&&d(i)&&(t[i]=e(t[i],n[i]));return t}(void 0,e)}function d(e){return"__proto__"!==e}class _{constructor(){this.reject=()=>{},this.resolve=()=>{},this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}wrapCallback(n){return(e,t)=>{e?this.reject(e):this.resolve(t),"function"==typeof n&&(this.promise.catch(()=>{}),1===n.length?n(e):n(e,t))}}}function f(){return"undefined"!=typeof window&&(window.cordova||window.phonegap||window.PhoneGap)&&/ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test("undefined"!=typeof navigator&&"string"==typeof navigator.userAgent?navigator.userAgent:"")}function g(){return!0===i.NODE_ADMIN}function m(e){return JSON.parse(e)}function v(e){return JSON.stringify(e)}function y(e){let t={},n={},r={},i="";try{var s=e.split(".");t=m(l(s[0])||""),n=m(l(s[1])||""),i=s[2],r=n.d||{},delete n.d}catch(e){}return{header:t,claims:n,data:r,signature:i}}function w(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function C(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]}function b(e){for(const t in e)if(Object.prototype.hasOwnProperty.call(e,t))return!1;return!0}function T(e,t,n){const r={};for(const i in e)Object.prototype.hasOwnProperty.call(e,i)&&(r[i]=t.call(n,e[i],i,e));return r}class I{constructor(){this.chain_=[],this.buf_=[],this.W_=[],this.pad_=[],this.inbuf_=0,this.total_=0,this.blockSize=64,this.pad_[0]=128;for(let e=1;e>>31)}let t=this.chain_[0],s=this.chain_[1],o=this.chain_[2],a=this.chain_[3],l=this.chain_[4],h,c;for(let _=0;_<80;_++){c=_<40?_<20?(h=a^s&(o^a),1518500249):(h=s^o^a,1859775393):_<60?(h=s&o|a&(s|o),2400959708):(h=s^o^a,3395469782);var u=(t<<5|t>>>27)+h+l+c+i[_]&4294967295;l=a,a=o,o=4294967295&(s<<30|s>>>2),s=t,t=u}this.chain_[0]=this.chain_[0]+t&4294967295,this.chain_[1]=this.chain_[1]+s&4294967295,this.chain_[2]=this.chain_[2]+o&4294967295,this.chain_[3]=this.chain_[3]+a&4294967295,this.chain_[4]=this.chain_[4]+l&4294967295}update(n,r){if(null!=n){var i=(r=void 0===r?n.length:r)-this.blockSize;let e=0;const s=this.buf_;let t=this.inbuf_;for(;e>e&255,++n;return t}}function E(e,t,n,r){let i;if(r"INTERNAL"in e).map(e=>e.INTERNAL.delete()),...e.filter(e=>"_delete"in e).map(e=>e._delete())])}isComponentSet(){return null!=this.component}isInitialized(e=D){return this.instances.has(e)}getOptions(e=D){return this.instancesOptions.get(e)||{}}initialize(e={}){var{options:t={}}=e,n=this.normalizeInstanceIdentifier(e.instanceIdentifier);if(this.isInitialized(n))throw Error(`${this.name}(${n}) has already been initialized`);if(!this.isComponentSet())throw Error(`Component ${this.name} has not been registered yet`);var r,i,s=this.getOrInitializeService({instanceIdentifier:n,options:t});for([r,i]of this.instancesDeferred.entries())n===this.normalizeInstanceIdentifier(r)&&i.resolve(s);return s}onInit(e,t){var n=this.normalizeInstanceIdentifier(t);const r=null!==(i=this.onInitCallbacks.get(n))&&void 0!==i?i:new Set;r.add(e),this.onInitCallbacks.set(n,r);var i=this.instances.get(n);return i&&e(i,n),()=>{r.delete(e)}}invokeOnInitCallbacks(e,t){var n=this.onInitCallbacks.get(t);if(n)for(const r of n)try{r(e,t)}catch(e){}}getOrInitializeService({instanceIdentifier:e,options:t={}}){let n=this.instances.get(e);if(!n&&this.component&&(n=this.component.instanceFactory(this.container,{instanceIdentifier:(r=e)===D?void 0:r,options:t}),this.instances.set(e,n),this.instancesOptions.set(e,t),this.invokeOnInitCallbacks(n,e),this.component.onInstanceCreated))try{this.component.onInstanceCreated(this.container,e,n)}catch(e){}var r;return n||null}normalizeInstanceIdentifier(e=D){return!this.component||this.component.multipleInstances?e:D}shouldAutoInitialize(){return!!this.component&&"EXPLICIT"!==this.component.instantiationMode}}class O{constructor(e){this.name=e,this.providers=new Map}addComponent(e){const t=this.getProvider(e.name);if(t.isComponentSet())throw new Error(`Component ${e.name} has already been registered with ${this.name}`);t.setComponent(e)}addOrOverwriteComponent(e){const t=this.getProvider(e.name);t.isComponentSet()&&this.providers.delete(e.name),this.addComponent(e)}getProvider(e){if(this.providers.has(e))return this.providers.get(e);var t=new A(e,this);return this.providers.set(e,t),t}getProviders(){return Array.from(this.providers.values())}}($=n=n||{})[$.DEBUG=0]="DEBUG",$[$.VERBOSE=1]="VERBOSE",$[$.INFO=2]="INFO",$[$.WARN=3]="WARN",$[$.ERROR=4]="ERROR",$[$.SILENT=5]="SILENT";const L={debug:n.DEBUG,verbose:n.VERBOSE,info:n.INFO,warn:n.WARN,error:n.ERROR,silent:n.SILENT},M=n.INFO,F={[n.DEBUG]:"log",[n.VERBOSE]:"log",[n.INFO]:"info",[n.WARN]:"warn",[n.ERROR]:"error"},q=(e,t,...n)=>{if(!(t>6|192:(e<65536?n[r++]=e>>12|224:(n[r++]=e>>18|240,n[r++]=e>>12&63|128),n[r++]=e>>6&63|128),n[r++]=63&e|128)}return n}(e);const n=new I;return n.update(t),t=n.digest(),s.encodeByteArray(t)}const ee=H("localStorage"),te=H("sessionStorage"),ne=new W("@firebase/database"),re=function(){let e=1;return function(){return e++}}(),ie=function(...e){let t="";for(let r=0;rn?r.push(e.substring(i,n)):r.push(e.substring(i,i+t));return r}const _e=function(e,t){p(!t||!0===e||!1===e,"Can't turn on custom loggers persistently."),!0===e?(ne.logLevel=n.VERBOSE,se=ne.log.bind(ne),t&&te.set("logging_enabled",!0)):"function"==typeof e?se=e:(se=null,te.remove("logging_enabled"))},pe=function(...e){var t;!0===oe&&(oe=!1,null===se&&!0===te.get("logging_enabled")&&_e(!0)),se&&(t=ie.apply(null,e),se(t))},fe=function(...e){var t=`FIREBASE FATAL ERROR: ${ie(...e)}`;throw ne.error(t),new Error(t)},ge=function(...e){var t="FIREBASE WARNING: "+ie(...e);ne.warn(t)},me=function(){"undefined"!=typeof window&&window.location&&window.location.protocol&&-1!==window.location.protocol.indexOf("https:")&&ge("Insecure Firebase access from a secure page. Please use https in calls to new Firebase().")},ve=function(e){return"number"==typeof e&&(e!=e||e===Number.POSITIVE_INFINITY||e===Number.NEGATIVE_INFINITY)},ye="[MIN_NAME]",we="[MAX_NAME]",Ce=function(e,t){if(e===t)return 0;if(e===ye||t===we)return-1;if(t===ye||e===we)return 1;var n=Ie(e),r=Ie(t);return null!==n?null!==r?n-r==0?e.length-t.length:n-r:-1:null===r&&e=Math.pow(2,-1022)?(i=Math.min(Math.floor(Math.log(e)/Math.LN2),1023),n=i+1023,Math.round(e*Math.pow(2,52-i)-Math.pow(2,52))):(n=0,Math.round(e/Math.pow(2,-1074))));const o=[];for(s=52;s;--s)o.push(r%2?1:0),r=Math.floor(r/2);for(s=11;s;--s)o.push(n%2?1:0),n=Math.floor(n/2);o.push(t?1:0),o.reverse();const a=o.join("");let l="";for(s=0;s<64;s+=8){let e=parseInt(a.substr(s,8),2).toString(16);1===e.length&&(e="0"+e),l+=e}return l.toLowerCase()}function Ie(e){if(Se.test(e)){var t=Number(e);if(t>=ke&&t<=Ne)return t}return null}function Ee(e,t){const n=setTimeout(e,t);return"number"==typeof n&&"undefined"!=typeof Deno&&Deno.unrefTimer?Deno.unrefTimer(n):"object"==typeof n&&n.unref&&n.unref(),n}const Se=new RegExp("^-?(0*)\\d{1,10}$"),ke=-2147483648,Ne=2147483647,Pe=function(e){try{e()}catch(t){setTimeout(()=>{var e=t.stack||"";throw ge("Exception was thrown by user callback.",e),t},Math.floor(0))}};class Re{constructor(e,t){this.appName_=e,this.appCheckProvider=t,this.appCheck=null==t?void 0:t.getImmediate({optional:!0}),this.appCheck||null!=t&&t.get().then(e=>this.appCheck=e)}getToken(n){return this.appCheck?this.appCheck.getToken(n):new Promise((e,t)=>{setTimeout(()=>{this.appCheck?this.getToken(n).then(e,t):e(null)},0)})}addTokenChangeListener(t){var e;null!==(e=this.appCheckProvider)&&void 0!==e&&e.get().then(e=>e.addTokenListener(t))}notifyForInvalidToken(){ge(`Provided AppCheck credentials for the app named "${this.appName_}" `+"are invalid. This usually indicates your app was not initialized correctly.")}}class xe{constructor(e,t,n){this.appName_=e,this.firebaseOptions_=t,this.authProvider_=n,this.auth_=null,this.auth_=n.getImmediate({optional:!0}),this.auth_||n.onInit(e=>this.auth_=e)}getToken(n){return this.auth_?this.auth_.getToken(n).catch(e=>e&&"auth/token-not-initialized"===e.code?(pe("Got auth/token-not-initialized error. Treating as null token."),null):Promise.reject(e)):new Promise((e,t)=>{setTimeout(()=>{this.auth_?this.getToken(n).then(e,t):e(null)},0)})}addTokenChangeListener(t){this.auth_?this.auth_.addAuthTokenListener(t):this.authProvider_.get().then(e=>e.addAuthTokenListener(t))}removeTokenChangeListener(t){this.authProvider_.get().then(e=>e.removeAuthTokenListener(t))}notifyForInvalidToken(){let e='Provided authentication credentials for the app named "'+this.appName_+'" are invalid. This usually indicates your app was not initialized correctly. ';"credential"in this.firebaseOptions_?e+='Make sure the "credential" property provided to initializeApp() is authorized to access the specified "databaseURL" and is from the correct project.':"serviceAccount"in this.firebaseOptions_?e+='Make sure the "serviceAccount" property provided to initializeApp() is authorized to access the specified "databaseURL" and is from the correct project.':e+='Make sure the "apiKey" and "databaseURL" properties provided to initializeApp() match the values provided for your app at https://console.firebase.google.com/.',ge(e)}}class De{constructor(e){this.accessToken=e}getToken(e){return Promise.resolve({accessToken:this.accessToken})}addTokenChangeListener(e){e(this.accessToken)}removeTokenChangeListener(e){}notifyForInvalidToken(){}}De.OWNER="owner";const Ae=/(console\.firebase|firebase-console-\w+\.corp|firebase\.corp)\.google\.com/,Oe="websocket",Le="long_polling";class Me{constructor(e,t,n,r,i=!1,s="",o=!1,a=!1){this.secure=t,this.namespace=n,this.webSocketOnly=r,this.nodeAdmin=i,this.persistenceKey=s,this.includeNamespaceInQueryParams=o,this.isUsingEmulator=a,this._host=e.toLowerCase(),this._domain=this._host.substr(this._host.indexOf(".")+1),this.internalHost=ee.get("host:"+e)||this._host}isCacheableHost(){return"s-"===this.internalHost.substr(0,2)}isCustomHost(){return"firebaseio.com"!==this._domain&&"firebaseio-demo.com"!==this._domain}get host(){return this._host}set host(e){e!==this.internalHost&&(this.internalHost=e,this.isCacheableHost()&&ee.set("host:"+this._host,this.internalHost))}toString(){let e=this.toURLString();return this.persistenceKey&&(e+="<"+this.persistenceKey+">"),e}toURLString(){var e=this.secure?"https://":"http://",t=this.includeNamespaceInQueryParams?`?ns=${this.namespace}`:"";return`${e}${this.host}/${t}`}}function Fe(e,t,n){p("string"==typeof t,"typeof type must == string"),p("object"==typeof n,"typeof params must == object");let r;if(t===Oe)r=(e.secure?"wss://":"ws://")+e.internalHost+"/.ws?";else{if(t!==Le)throw new Error("Unknown connection type: "+t);r=(e.secure?"https://":"http://")+e.internalHost+"/.lp?"}((t=e).host!==t.internalHost||t.isCustomHost()||t.includeNamespaceInQueryParams)&&(n.ns=e.namespace);const i=[];return be(n,(e,t)=>{i.push(e+"="+t)}),r+i.join("&")}class qe{constructor(){this.counters_={}}incrementCounter(e,t=1){w(this.counters_,e)||(this.counters_[e]=0),this.counters_[e]+=t}get(){return u(this.counters_)}}const We={},Be={};function Ue(e){var t=e.toString();return We[t]||(We[t]=new qe),We[t]}class je{constructor(e){this.onMessage_=e,this.pendingResponses=[],this.currentResponseNum=0,this.closeAfterResponse=-1,this.onClose=null}closeAfter(e,t){this.closeAfterResponse=e,this.onClose=t,this.closeAfterResponse{this.onMessage_(n[e])});if(this.currentResponseNum===this.closeAfterResponse){this.onClose&&(this.onClose(),this.onClose=null);break}this.currentResponseNum++}}}class Ve{constructor(e,t,n,r,i,s,o){this.connId=e,this.repoInfo=t,this.applicationId=n,this.appCheckToken=r,this.authToken=i,this.transportSessionId=s,this.lastSessionId=o,this.bytesSent=0,this.bytesReceived=0,this.everConnected_=!1,this.log_=ae(e),this.stats_=Ue(t),this.urlFn=e=>(this.appCheckToken&&(e.ac=this.appCheckToken),Fe(t,Le,e))}open(e,t){this.curSegmentNum=0,this.onDisconnect_=t,this.myPacketOrderer=new je(e),this.isClosed_=!1,this.connectTimeoutTimer_=setTimeout(()=>{this.log_("Timed out trying to connect."),this.onClosed_(),this.connectTimeoutTimer_=null},Math.floor(3e4)),function(t){if("complete"===document.readyState)t();else{let e=!1;const n=function(){document.body?e||(e=!0,t()):setTimeout(n,Math.floor(10))};document.addEventListener?(document.addEventListener("DOMContentLoaded",n,!1),window.addEventListener("load",n,!1)):document.attachEvent&&(document.attachEvent("onreadystatechange",()=>{"complete"===document.readyState&&n()}),window.attachEvent("onload",n))}}(()=>{if(!this.isClosed_){this.scriptTagHolder=new ze((...e)=>{var[t,n,r]=e;if(this.incrementIncomingBytes_(e),this.scriptTagHolder)if(this.connectTimeoutTimer_&&(clearTimeout(this.connectTimeoutTimer_),this.connectTimeoutTimer_=null),this.everConnected_=!0,"start"===t)this.id=n,this.password=r;else{if("close"!==t)throw new Error("Unrecognized command received: "+t);n?(this.scriptTagHolder.sendNewPolls=!1,this.myPacketOrderer.closeAfter(n,()=>{this.onClosed_()})):this.onClosed_()}},(...e)=>{var[t,n]=e;this.incrementIncomingBytes_(e),this.myPacketOrderer.handleResponse(t,n)},()=>{this.onClosed_()},this.urlFn);const t={start:"t"};t.ser=Math.floor(1e8*Math.random()),this.scriptTagHolder.uniqueCallbackIdentifier&&(t.cb=this.scriptTagHolder.uniqueCallbackIdentifier),t.v="5",this.transportSessionId&&(t.s=this.transportSessionId),this.lastSessionId&&(t.ls=this.lastSessionId),this.applicationId&&(t.p=this.applicationId),this.appCheckToken&&(t.ac=this.appCheckToken),"undefined"!=typeof location&&location.hostname&&Ae.test(location.hostname)&&(t.r="f");var e=this.urlFn(t);this.log_("Connecting via long-poll to "+e),this.scriptTagHolder.addTag(e,()=>{})}})}start(){this.scriptTagHolder.startLongPoll(this.id,this.password),this.addDisconnectPingFrame(this.id,this.password)}static forceAllow(){Ve.forceAllow_=!0}static forceDisallow(){Ve.forceDisallow_=!0}static isAvailable(){return!!Ve.forceAllow_||!(Ve.forceDisallow_||"undefined"==typeof document||null==document.createElement||"object"==typeof window&&window.chrome&&window.chrome.extension&&!/^chrome/.test(window.location.href)||"object"==typeof Windows&&"object"==typeof Windows.UI)}markConnectionHealthy(){}shutdown_(){this.isClosed_=!0,this.scriptTagHolder&&(this.scriptTagHolder.close(),this.scriptTagHolder=null),this.myDisconnFrame&&(document.body.removeChild(this.myDisconnFrame),this.myDisconnFrame=null),this.connectTimeoutTimer_&&(clearTimeout(this.connectTimeoutTimer_),this.connectTimeoutTimer_=null)}onClosed_(){this.isClosed_||(this.log_("Longpoll is closing itself"),this.shutdown_(),this.onDisconnect_&&(this.onDisconnect_(this.everConnected_),this.onDisconnect_=null))}close(){this.isClosed_||(this.log_("Longpoll is being closed."),this.shutdown_())}send(e){var t=v(e);this.bytesSent+=t.length,this.stats_.incrementCounter("bytes_sent",t.length);var t=o(t),n=de(t,1840);for(let r=0;rdocument.domain="'+i+'";<\/script>');var i=""+e+"";try{this.myIFrame.doc.open(),this.myIFrame.doc.write(i),this.myIFrame.doc.close()}catch(e){pe("frame writing exception"),e.stack&&pe(e.stack),pe(e)}}}static createIFrame_(){const t=document.createElement("iframe");if(t.style.display="none",!document.body)throw"Document body has not initialized. Wait to initialize Firebase until after the document is ready.";document.body.appendChild(t);try{t.contentWindow.document||pe("No IE domain setting required")}catch(e){var n=document.domain;t.src="javascript:void((function(){document.open();document.domain='"+n+"';document.close();})())"}return t.contentDocument?t.doc=t.contentDocument:t.contentWindow?t.doc=t.contentWindow.document:t.document&&(t.doc=t.document),t}close(){this.alive=!1,this.myIFrame&&(this.myIFrame.doc.body.textContent="",setTimeout(()=>{null!==this.myIFrame&&(document.body.removeChild(this.myIFrame),this.myIFrame=null)},Math.floor(0)));const e=this.onDisconnect;e&&(this.onDisconnect=null,e())}startLongPoll(e,t){for(this.myID=e,this.myPW=t,this.alive=!0;this.newRequest_(););}newRequest_(){if(this.alive&&this.sendNewPolls&&this.outstandingRequests.size<(0{this.outstandingRequests.delete(t),this.newRequest_()},r=setTimeout(n,Math.floor(25e3));this.addTag(e,()=>{clearTimeout(r),n()})}addTag(e,n){setTimeout(()=>{try{if(!this.sendNewPolls)return;const t=this.myIFrame.doc.createElement("script");t.type="text/javascript",t.async=!0,t.src=e,t.onload=t.onreadystatechange=function(){var e=t.readyState;e&&"loaded"!==e&&"complete"!==e||(t.onload=t.onreadystatechange=null,t.parentNode&&t.parentNode.removeChild(t),n())},t.onerror=()=>{pe("Long-poll script failed to load: "+e),this.sendNewPolls=!1,this.close()},this.myIFrame.doc.body.appendChild(t)}catch(e){}},Math.floor(1))}}let He=null;"undefined"!=typeof MozWebSocket?He=MozWebSocket:"undefined"!=typeof WebSocket&&(He=WebSocket);class Qe{constructor(e,t,n,r,i,s,o){this.connId=e,this.applicationId=n,this.appCheckToken=r,this.authToken=i,this.keepaliveTimer=null,this.frames=null,this.totalFrames=0,this.bytesSent=0,this.bytesReceived=0,this.log_=ae(this.connId),this.stats_=Ue(t),this.connURL=Qe.connectionURL_(t,s,o,r,n),this.nodeAdmin=t.nodeAdmin}static connectionURL_(e,t,n,r,i){const s={v:"5"};return"undefined"!=typeof location&&location.hostname&&Ae.test(location.hostname)&&(s.r="f"),t&&(s.s=t),n&&(s.ls=n),r&&(s.ac=r),i&&(s.p=i),Fe(e,Oe,s)}open(e,t){this.onDisconnect=t,this.onMessage=e,this.log_("Websocket connecting to "+this.connURL),this.everConnected_=!1,ee.set("previous_websocket_failure",!0);try{g(),this.mySock=new He(this.connURL,[],void 0)}catch(e){this.log_("Error instantiating WebSocket.");var n=e.message||e.data;return n&&this.log_(n),void this.onClosed_()}this.mySock.onopen=()=>{this.log_("Websocket connected."),this.everConnected_=!0},this.mySock.onclose=()=>{this.log_("Websocket connection was disconnected."),this.mySock=null,this.onClosed_()},this.mySock.onmessage=e=>{this.handleIncomingFrame(e)},this.mySock.onerror=e=>{this.log_("WebSocket error. Closing connection.");var t=e.message||e.data;t&&this.log_(t),this.onClosed_()}}start(){}static forceDisallow(){Qe.forceDisallow_=!0}static isAvailable(){let e=!1;var t;return"undefined"==typeof navigator||!navigator.userAgent||(t=navigator.userAgent.match(/Android ([0-9]{0,}\.[0-9]{0,})/))&&1{this.mySock&&this.sendString_("0"),this.resetKeepAlive()},Math.floor(45e3))}sendString_(e){try{this.mySock.send(e)}catch(e){this.log_("Exception thrown from WebSocket.send():",e.message||e.data,"Closing connection."),setTimeout(this.onClosed_.bind(this),0)}}}Qe.responsesRequiredToBeHealthy=2,Qe.healthyTimeout=3e4;class Ye{constructor(e){this.initTransports_(e)}static get ALL_TRANSPORTS(){return[Ve,Qe]}static get IS_TRANSPORT_INITIALIZED(){return this.globalTransportInitialized_}initTransports_(e){var t=Qe&&Qe.isAvailable();let n=t&&!Qe.previouslyFailed();if(e.webSocketOnly&&(t||ge("wss:// URL used, but browser isn't known to support websockets. Trying anyway."),n=!0),n)this.transports_=[Qe];else{const r=this.transports_=[];for(const i of Ye.ALL_TRANSPORTS)i&&i.isAvailable()&&r.push(i);Ye.globalTransportInitialized_=!0}}initialTransport(){if(0{this.conn_&&this.conn_.open(t,n)},Math.floor(0));var r=e.healthyTimeout||0;0{this.healthyTimeout_=null,this.isHealthy_||(this.conn_&&102400{t===this.conn_?this.onConnectionLost_(e):t===this.secondaryConn_?(this.log_("Secondary connection lost."),this.onSecondaryConnectionLost_()):this.log_("closing an old connection")}}connReceiver_(t){return e=>{2!==this.state_&&(t===this.rx_?this.onPrimaryMessageReceived_(e):t===this.secondaryConn_?this.onSecondaryMessageReceived_(e):this.log_("message on old connection"))}}sendRequest(e){this.sendData_({t:"d",d:e})}tryCleanupConnection(){this.tx_===this.secondaryConn_&&this.rx_===this.secondaryConn_&&(this.log_("cleaning up and promoting a connection: "+this.secondaryConn_.connId),this.conn_=this.secondaryConn_,this.secondaryConn_=null)}onSecondaryControl_(e){var t;"t"in e&&("a"===(t=e.t)?this.upgradeIfSecondaryHealthy_():"r"===t?(this.log_("Got a reset on secondary, closing it"),this.secondaryConn_.close(),this.tx_!==this.secondaryConn_&&this.rx_!==this.secondaryConn_||this.close()):"o"===t&&(this.log_("got pong on secondary."),this.secondaryResponsesRequired_--,this.upgradeIfSecondaryHealthy_()))}onSecondaryMessageReceived_(e){var t=ce("t",e),n=ce("d",e);if("c"===t)this.onSecondaryControl_(n);else{if("d"!==t)throw new Error("Unknown protocol layer: "+t);this.pendingDataMessages.push(n)}}upgradeIfSecondaryHealthy_(){this.secondaryResponsesRequired_<=0?(this.log_("Secondary connection is healthy."),this.isHealthy_=!0,this.secondaryConn_.markConnectionHealthy(),this.proceedWithUpgrade_()):(this.log_("sending ping on secondary."),this.secondaryConn_.send({t:"c",d:{t:"p",d:{}}}))}proceedWithUpgrade_(){this.secondaryConn_.start(),this.log_("sending client ack on secondary"),this.secondaryConn_.send({t:"c",d:{t:"a",d:{}}}),this.log_("Ending transmission on primary"),this.conn_.send({t:"c",d:{t:"n",d:{}}}),this.tx_=this.secondaryConn_,this.tryCleanupConnection()}onPrimaryMessageReceived_(e){var t=ce("t",e),n=ce("d",e);"c"===t?this.onControl_(n):"d"===t&&this.onDataMessage_(n)}onDataMessage_(e){this.onPrimaryResponse_(),this.onMessage_(e)}onPrimaryResponse_(){this.isHealthy_||(this.primaryResponsesRequired_--,this.primaryResponsesRequired_<=0&&(this.log_("Primary connection is healthy."),this.isHealthy_=!0,this.conn_.markConnectionHealthy()))}onControl_(e){var t=ce("t",e);if("d"in e){var n=e.d;if("h"===t){const r=Object.assign({},n);this.repoInfo_.isUsingEmulator&&(r.h=this.repoInfo_.host),this.onHandshake_(r)}else if("n"===t){this.log_("recvd end transmission on primary"),this.rx_=this.secondaryConn_;for(let e=0;e{this.secondaryConn_&&(this.log_("Timed out trying to upgrade."),this.secondaryConn_.close())},Math.floor(6e4))}onReset_(e){this.log_("Reset packet received. New host: "+e),this.repoInfo_.host=e,1===this.state_?this.close():(this.closeConnections_(),this.start_())}onConnectionEstablished_(e,t){this.log_("Realtime connection established."),this.conn_=e,this.state_=1,this.onReady_&&(this.onReady_(t,this.sessionId),this.onReady_=null),0===this.primaryResponsesRequired_?(this.log_("Primary connection is healthy."),this.isHealthy_=!0):Ee(()=>{this.sendPingOnPrimaryIfNecessary_()},Math.floor(5e3))}sendPingOnPrimaryIfNecessary_(){this.isHealthy_||1!==this.state_||(this.log_("sending ping on primary."),this.sendData_({t:"c",d:{t:"p",d:{}}}))}onSecondaryConnectionLost_(){var e=this.secondaryConn_;this.secondaryConn_=null,this.tx_!==e&&this.rx_!==e||this.close()}onConnectionLost_(e){this.conn_=null,e||0!==this.state_?1===this.state_&&this.log_("Realtime connection lost."):(this.log_("Realtime connection failed."),this.repoInfo_.isCacheableHost()&&(ee.remove("host:"+this.repoInfo_.host),this.repoInfo_.internalHost=this.repoInfo_.host)),this.close()}onConnectionShutdown_(e){this.log_("Connection shutdown command received. Shutting down..."),this.onKill_&&(this.onKill_(e),this.onKill_=null),this.onDisconnect_=null,this.close()}sendData_(e){if(1!==this.state_)throw"Connection is not connected";this.tx_.send(e)}close(){2!==this.state_&&(this.log_("Closing realtime connection."),this.state_=2,this.closeConnections_(),this.onDisconnect_&&(this.onDisconnect_(),this.onDisconnect_=null))}closeConnections_(){this.log_("Shutting down all connections"),this.conn_&&(this.conn_.close(),this.conn_=null),this.secondaryConn_&&(this.secondaryConn_.close(),this.secondaryConn_=null),this.healthyTimeout_&&(clearTimeout(this.healthyTimeout_),this.healthyTimeout_=null)}}class $e{put(e,t,n,r){}merge(e,t,n,r){}refreshAuthToken(e){}refreshAppCheckToken(e){}onDisconnectPut(e,t,n){}onDisconnectMerge(e,t,n){}onDisconnectCancel(e,t){}reportStats(e){}}class Ge{constructor(e){this.allowedEvents_=e,this.listeners_={},p(Array.isArray(e)&&0e===t),"Unknown event: "+t)}}class Je extends Ge{constructor(){super(["online"]),this.online_=!0,"undefined"==typeof window||void 0===window.addEventListener||f()||(window.addEventListener("online",()=>{this.online_||(this.online_=!0,this.trigger("online",!0))},!1),window.addEventListener("offline",()=>{this.online_&&(this.online_=!1,this.trigger("online",!1))},!1))}static getInstance(){return new Je}getInitialEvent(e){return p("online"===e,"Unknown event type: "+e),[this.online_]}currentlyOnline(){return this.online_}}class Xe{constructor(n,e){if(void 0===e){this.pieces_=n.split("/");let e=0;for(let t=0;t=e.pieces_.length?null:e.pieces_[e.pieceNum_]}function tt(e){return e.pieces_.length-e.pieceNum_}function nt(e){let t=e.pieceNum_;return t=e.pieces_.length)return null;const t=[];for(let n=e.pieceNum_;n=e.pieces_.length}function lt(e,t){var n=et(e),r=et(t);if(null===n)return t;if(n===r)return lt(nt(e),nt(t));throw new Error("INTERNAL ERROR: innerPath ("+t+") is not within outerPath ("+e+")")}function ht(e,t){var n=it(e,0),r=it(t,0);for(let s=0;stt(t))return!1;for(;n{var e=!document[t];e!==this.visible_&&(this.visible_=e,this.trigger("visible",e))},!1)}static getInstance(){return new ft}getInitialEvent(e){return p("visible"===e,"Unknown event type: "+e),[this.visible_]}}class gt extends $e{constructor(e,t,n,r,i,s,o,a){if(super(),this.repoInfo_=e,this.applicationId_=t,this.onDataUpdate_=n,this.onConnectStatus_=r,this.onServerInfoUpdate_=i,this.authTokenProvider_=s,this.appCheckTokenProvider_=o,this.authOverride_=a,this.id=gt.nextPersistentConnectionId_++,this.log_=ae("p:"+this.id+":"),this.interruptReasons_={},this.listens=new Map,this.outstandingPuts_=[],this.outstandingGets_=[],this.outstandingPutCount_=0,this.outstandingGetCount_=0,this.onDisconnectRequestQueue_=[],this.connected_=!1,this.reconnectDelay_=1e3,this.maxReconnectDelay_=3e5,this.securityDebugCallback_=null,this.lastSessionId=null,this.establishConnectionTimer_=null,this.visible_=!1,this.requestCBHash_={},this.requestNumber_=0,this.realtime_=null,this.authToken_=null,this.appCheckToken_=null,this.forceTokenRefresh_=!1,this.invalidAuthTokenCount_=0,this.invalidAppCheckTokenCount_=0,this.firstConnection_=!0,this.lastConnectionAttemptTime_=null,this.lastConnectionEstablishedTime_=null,a&&!g())throw new Error("Auth override specified in options, but not supported on non Node.js platforms");ft.getInstance().on("visible",this.onVisible_,this),-1===e.host.indexOf("fblocal")&&Je.getInstance().on("online",this.onOnline_,this)}sendRequest(e,t,n){var r=++this.requestNumber_,i={r:r,a:e,b:t};this.log_(v(i)),p(this.connected_,"sendRequest call when we're not connected not allowed."),this.realtime_.sendRequest(i),n&&(this.requestCBHash_[r]=n)}get(e){this.initConnection_();const n=new _;var t={p:e._path.toString(),q:e._queryObject};this.outstandingGets_.push({action:"g",request:t,onComplete:e=>{var t=e.d;"ok"===e.s?n.resolve(t):n.reject(t)}}),this.outstandingGetCount_++;t=this.outstandingGets_.length-1;return this.connected_&&this.sendGet_(t),n.promise}listen(e,t,n,r){this.initConnection_();var i=e._queryIdentifier,s=e._path.toString();this.log_("Listen called for "+s+" "+i),this.listens.has(s)||this.listens.set(s,new Map),p(e._queryParams.isDefault()||!e._queryParams.loadsAllData(),"listen() called for non-default but complete query"),p(!this.listens.get(s).has(i),"listen() called twice for same path/queryId.");var o={onComplete:r,hashFn:t,query:e,tag:n};this.listens.get(s).set(i,o),this.connected_&&this.sendListen_(o)}sendGet_(t){const n=this.outstandingGets_[t];this.sendRequest("g",n.request,e=>{delete this.outstandingGets_[t],this.outstandingGetCount_--,0===this.outstandingGetCount_&&(this.outstandingGets_=[]),n.onComplete&&n.onComplete(e)})}sendListen_(r){const i=r.query,s=i._path.toString(),o=i._queryIdentifier;this.log_("Listen on "+s+" for "+o);const e={p:s};r.tag&&(e.q=i._queryObject,e.t=r.tag),e.h=r.hashFn(),this.sendRequest("q",e,e=>{var t=e.d,n=e.s;gt.warnOnListenWarnings_(t,i),(this.listens.get(s)&&this.listens.get(s).get(o))===r&&(this.log_("listen response",e),"ok"!==n&&this.removeListen_(s,o),r.onComplete&&r.onComplete(n,t))})}static warnOnListenWarnings_(e,t){if(e&&"object"==typeof e&&w(e,"w")){const i=C(e,"w");var n,r;Array.isArray(i)&&~i.indexOf("no_index")&&(n='".indexOn": "'+t._queryParams.getIndex().toString()+'"',r=t._path.toString(),ge("Using an unspecified index. Your data will be downloaded and "+`filtered on the client. Consider adding ${n} at `+`${r} to your security rules for better performance.`))}}refreshAuthToken(e){this.authToken_=e,this.log_("Auth token refreshed"),this.authToken_?this.tryAuth():this.connected_&&this.sendRequest("unauth",{},()=>{}),this.reduceReconnectDelayIfAdminCredential_(e)}reduceReconnectDelayIfAdminCredential_(e){var t;(e&&40===e.length||(e=e,"object"==typeof(t=y(e).claims)&&!0===t.admin))&&(this.log_("Admin auth credential detected. Reducing max reconnect time."),this.maxReconnectDelay_=3e4)}refreshAppCheckToken(e){this.appCheckToken_=e,this.log_("App check token refreshed"),this.appCheckToken_?this.tryAppCheck():this.connected_&&this.sendRequest("unappeck",{},()=>{})}tryAuth(){if(this.connected_&&this.authToken_){const r=this.authToken_;var e=function(e){const t=y(e),n=t.claims;return!!n&&"object"==typeof n&&n.hasOwnProperty("iat")}(r)?"auth":"gauth";const t={cred:r};null===this.authOverride_?t.noauth=!0:"object"==typeof this.authOverride_&&(t.authvar=this.authOverride_),this.sendRequest(e,t,e=>{var t=e.s,n=e.d||"error";this.authToken_===r&&("ok"===t?this.invalidAuthTokenCount_=0:this.onAuthRevoked_(t,n))})}}tryAppCheck(){this.connected_&&this.appCheckToken_&&this.sendRequest("appcheck",{token:this.appCheckToken_},e=>{var t=e.s,n=e.d||"error";"ok"===t?this.invalidAppCheckTokenCount_=0:this.onAppCheckRevoked_(t,n)})}unlisten(e,t){var n=e._path.toString(),r=e._queryIdentifier;this.log_("Unlisten called for "+n+" "+r),p(e._queryParams.isDefault()||!e._queryParams.loadsAllData(),"unlisten() called for non-default but complete query"),this.removeListen_(n,r)&&this.connected_&&this.sendUnlisten_(n,r,e._queryObject,t)}sendUnlisten_(e,t,n,r){this.log_("Unlisten on "+e+" for "+t);const i={p:e};r&&(i.q=n,i.t=r),this.sendRequest("n",i)}onDisconnectPut(e,t,n){this.initConnection_(),this.connected_?this.sendOnDisconnect_("o",e,t,n):this.onDisconnectRequestQueue_.push({pathString:e,action:"o",data:t,onComplete:n})}onDisconnectMerge(e,t,n){this.initConnection_(),this.connected_?this.sendOnDisconnect_("om",e,t,n):this.onDisconnectRequestQueue_.push({pathString:e,action:"om",data:t,onComplete:n})}onDisconnectCancel(e,t){this.initConnection_(),this.connected_?this.sendOnDisconnect_("oc",e,null,t):this.onDisconnectRequestQueue_.push({pathString:e,action:"oc",data:null,onComplete:t})}sendOnDisconnect_(e,t,n,r){var i={p:t,d:n};this.log_("onDisconnect "+e,i),this.sendRequest(e,i,e=>{r&&setTimeout(()=>{r(e.s,e.d)},Math.floor(0))})}put(e,t,n,r){this.putInternal("p",e,t,n,r)}merge(e,t,n,r){this.putInternal("m",e,t,n,r)}putInternal(e,t,n,r,i){this.initConnection_();const s={p:t,d:n};void 0!==i&&(s.h=i),this.outstandingPuts_.push({action:e,request:s,onComplete:r}),this.outstandingPutCount_++;var o=this.outstandingPuts_.length-1;this.connected_?this.sendPut_(o):this.log_("Buffering put: "+t)}sendPut_(t){const n=this.outstandingPuts_[t].action;var e=this.outstandingPuts_[t].request;const r=this.outstandingPuts_[t].onComplete;this.outstandingPuts_[t].queued=this.connected_,this.sendRequest(n,e,e=>{this.log_(n+" response",e),delete this.outstandingPuts_[t],this.outstandingPutCount_--,0===this.outstandingPutCount_&&(this.outstandingPuts_=[]),r&&r(e.s,e.d)})}reportStats(e){var t;this.connected_&&(this.log_("reportStats",t={c:e}),this.sendRequest("s",t,e=>{var t;"ok"!==e.s&&(t=e.d,this.log_("reportStats","Error sending stats: "+t))}))}onDataMessage_(e){if("r"in e){this.log_("from server: "+v(e));var t=e.r;const n=this.requestCBHash_[t];n&&(delete this.requestCBHash_[t],n(e.b))}else{if("error"in e)throw"A server-side error has occurred: "+e.error;"a"in e&&this.onDataPush_(e.a,e.b)}}onDataPush_(e,t){this.log_("handleServerMessage",e,t),"d"===e?this.onDataUpdate_(t.p,t.d,!1,t.t):"m"===e?this.onDataUpdate_(t.p,t.d,!0,t.t):"c"===e?this.onListenRevoked_(t.p,t.q):"ac"===e?this.onAuthRevoked_(t.s,t.d):"apc"===e?this.onAppCheckRevoked_(t.s,t.d):"sd"===e?this.onSecurityDebugPacket_(t):le("Unrecognized action received from server: "+v(e)+"\nAre you using the latest client?")}onReady_(e,t){this.log_("connection ready"),this.connected_=!0,this.lastConnectionEstablishedTime_=(new Date).getTime(),this.handleTimestamp_(e),this.lastSessionId=t,this.firstConnection_&&this.sendConnectStats_(),this.restoreState_(),this.firstConnection_=!1,this.onConnectStatus_(!0)}scheduleConnect_(e){p(!this.realtime_,"Scheduling a connect when we're already connected/ing?"),this.establishConnectionTimer_&&clearTimeout(this.establishConnectionTimer_),this.establishConnectionTimer_=setTimeout(()=>{this.establishConnectionTimer_=null,this.establishConnection_()},Math.floor(e))}initConnection_(){!this.realtime_&&this.firstConnection_&&this.scheduleConnect_(0)}onVisible_(e){e&&!this.visible_&&this.reconnectDelay_===this.maxReconnectDelay_&&(this.log_("Window became visible. Reducing delay."),this.reconnectDelay_=1e3,this.realtime_||this.scheduleConnect_(0)),this.visible_=e}onOnline_(e){e?(this.log_("Browser went online."),this.reconnectDelay_=1e3,this.realtime_||this.scheduleConnect_(0)):(this.log_("Browser went offline. Killing connection."),this.realtime_&&this.realtime_.close())}onRealtimeDisconnect_(){var e;this.log_("data client disconnected"),this.connected_=!1,this.realtime_=null,this.cancelSentTransactions_(),this.requestCBHash_={},this.shouldReconnect_()&&(this.visible_?this.lastConnectionEstablishedTime_&&(3e4<(new Date).getTime()-this.lastConnectionEstablishedTime_&&(this.reconnectDelay_=1e3),this.lastConnectionEstablishedTime_=null):(this.log_("Window isn't visible. Delaying reconnect."),this.reconnectDelay_=this.maxReconnectDelay_,this.lastConnectionAttemptTime_=(new Date).getTime()),e=(new Date).getTime()-this.lastConnectionAttemptTime_,e=Math.max(0,this.reconnectDelay_-e),e=Math.random()*e,this.log_("Trying to reconnect in "+e+"ms"),this.scheduleConnect_(e),this.reconnectDelay_=Math.min(this.maxReconnectDelay_,1.3*this.reconnectDelay_)),this.onConnectStatus_(!1)}async establishConnection_(){if(this.shouldReconnect_()){this.log_("Making a connection attempt"),this.lastConnectionAttemptTime_=(new Date).getTime(),this.lastConnectionEstablishedTime_=null;var e=this.onDataMessage_.bind(this),r=this.onReady_.bind(this);const c=this.onRealtimeDisconnect_.bind(this);var i=this.id+":"+gt.nextConnectionId_++,s=this.lastSessionId;let t=!1,n=null;var o=function(){n?n.close():(t=!0,c())};this.realtime_={close:o,sendRequest:function(e){p(n,"sendRequest call when we're not connected not allowed."),n.sendRequest(e)}};var a=this.forceTokenRefresh_;this.forceTokenRefresh_=!1;try{var[l,h]=await Promise.all([this.authTokenProvider_.getToken(a),this.appCheckTokenProvider_.getToken(a)]);t?pe("getToken() completed but was canceled"):(pe("getToken() completed. Creating connection."),this.authToken_=l&&l.accessToken,this.appCheckToken_=h&&h.token,n=new Ke(i,this.repoInfo_,this.applicationId_,this.appCheckToken_,this.authToken_,e,r,c,e=>{ge(e+" ("+this.repoInfo_.toString()+")"),this.interrupt("server_kill")},s))}catch(e){this.log_("Failed to get token: "+e),t||(this.repoInfo_.nodeAdmin&&ge(e),o())}}}interrupt(e){pe("Interrupting connection for reason: "+e),this.interruptReasons_[e]=!0,this.realtime_?this.realtime_.close():(this.establishConnectionTimer_&&(clearTimeout(this.establishConnectionTimer_),this.establishConnectionTimer_=null),this.connected_&&this.onRealtimeDisconnect_())}resume(e){pe("Resuming connection for reason: "+e),delete this.interruptReasons_[e],b(this.interruptReasons_)&&(this.reconnectDelay_=1e3,this.realtime_||this.scheduleConnect_(0))}handleTimestamp_(e){var t=e-(new Date).getTime();this.onServerInfoUpdate_({serverTimeOffset:t})}cancelSentTransactions_(){for(let e=0;eue(e)).join("$"):"default";const r=this.removeListen_(e,n);r&&r.onComplete&&r.onComplete("permission_denied")}removeListen_(e,t){var n=new Xe(e).toString();let r;if(this.listens.has(n)){const i=this.listens.get(n);r=i.get(t),i.delete(t),0===i.size&&this.listens.delete(n)}else r=void 0;return r}onAuthRevoked_(e,t){pe("Auth token revoked: "+e+"/"+t),this.authToken_=null,this.forceTokenRefresh_=!0,this.realtime_.close(),"invalid_token"!==e&&"permission_denied"!==e||(this.invalidAuthTokenCount_++,3<=this.invalidAuthTokenCount_&&(this.reconnectDelay_=3e4,this.authTokenProvider_.notifyForInvalidToken()))}onAppCheckRevoked_(e,t){pe("App check token revoked: "+e+"/"+t),this.appCheckToken_=null,this.forceTokenRefresh_=!0,"invalid_token"!==e&&"permission_denied"!==e||(this.invalidAppCheckTokenCount_++,3<=this.invalidAppCheckTokenCount_&&this.appCheckTokenProvider_.notifyForInvalidToken())}onSecurityDebugPacket_(e){this.securityDebugCallback_?this.securityDebugCallback_(e):"msg"in e&&console.log("FIREBASE: "+e.msg.replace("\n","\nFIREBASE: "))}restoreState_(){this.tryAuth(),this.tryAppCheck();for(const t of this.listens.values())for(const n of t.values())this.sendListen_(n);for(let r=0;r{const n=C(this.indexSet_,e);if(p(n,"Missing index implementation for "+e),t===Wt){if(n.isDefinedOn(o.node)){const i=[],s=a.getIterator(mt.Wrap);let e=s.getNext();for(;e;)e.name!==o.name&&i.push(e),e=s.getNext();return i.push(o),Ft(i,n.getCompare())}return Wt}{var r=a.get(o.name);let e=t;return r&&(e=e.remove(new mt(o.name,r))),e.insert(o,o.node)}});return new Bt(e,this.indexSet_)}removeFromIndexes(n,r){var e=T(this.indexes_,e=>{if(e===Wt)return e;var t=r.get(n.name);return t?e.remove(new mt(n.name,t)):e});return new Bt(e,this.indexSet_)}}let Ut;class jt{constructor(e,t,n){this.children_=e,this.priorityNode_=t,this.indexMap_=n,this.lazyHash_=null,this.priorityNode_&&Pt(this.priorityNode_),this.children_.isEmpty()&&p(!this.priorityNode_||this.priorityNode_.isEmpty(),"An empty node cannot have a priority")}static get EMPTY_NODE(){return Ut=Ut||new jt(new It(St),null,Bt.Default)}isLeafNode(){return!1}getPriority(){return this.priorityNode_||Ut}updatePriority(e){return this.children_.isEmpty()?this:new jt(this.children_,e,this.indexMap_)}getImmediateChild(e){if(".priority"===e)return this.getPriority();var t=this.children_.get(e);return null===t?Ut:t}getChild(e){var t=et(e);return null===t?this:this.getImmediateChild(t).getChild(nt(e))}hasChild(e){return null!==this.children_.get(e)}updateImmediateChild(n,r){if(p(r,"We should always be passing snapshot nodes"),".priority"===n)return this.updatePriority(r);{var i=new mt(n,r);let e,t;t=r.isEmpty()?(e=this.children_.remove(n),this.indexMap_.removeFromIndexes(i,this.children_)):(e=this.children_.insert(n,r),this.indexMap_.addToIndexes(i,this.children_));i=e.isEmpty()?Ut:this.priorityNode_;return new jt(e,i,t)}}updateChild(e,t){var n=et(e);if(null===n)return t;p(".priority"!==et(e)||1===tt(e),".priority must be the last token in a path");var r=this.getImmediateChild(n).updateChild(nt(e),t);return this.updateImmediateChild(n,r)}isEmpty(){return this.children_.isEmpty()}numChildren(){return this.children_.count()}val(n){if(this.isEmpty())return null;const r={};let i=0,s=0,o=!0;if(this.forEachChild(Ot,(e,t)=>{r[e]=t.val(n),i++,o&&jt.INTEGER_REGEXP_.test(e)?s=Math.max(s,Number(e)):o=!1}),!n&&o&&s<2*i){const e=[];for(const t in r)e[t]=r[t];return e}return n&&!this.getPriority().isEmpty()&&(r[".priority"]=this.getPriority().val()),r}hash(){if(null===this.lazyHash_){let r="";this.getPriority().isEmpty()||(r+="priority:"+Nt(this.getPriority().val())+":"),this.forEachChild(Ot,(e,t)=>{var n=t.hash();""!==n&&(r+=":"+e+":"+n)}),this.lazyHash_=""===r?"":Z(r)}return this.lazyHash_}getPredecessorChildName(e,t,n){const r=this.resolveIndex_(n);if(r){var i=r.getPredecessorKey(new mt(e,t));return i?i.name:null}return this.children_.getPredecessorKey(e)}getFirstChildName(e){const t=this.resolveIndex_(e);if(t){var n=t.minKey();return n&&n.name}return this.children_.minKey()}getFirstChild(e){var t=this.getFirstChildName(e);return t?new mt(t,this.children_.get(t)):null}getLastChildName(e){const t=this.resolveIndex_(e);if(t){var n=t.maxKey();return n&&n.name}return this.children_.maxKey()}getLastChild(e){var t=this.getLastChildName(e);return t?new mt(t,this.children_.get(t)):null}forEachChild(e,t){const n=this.resolveIndex_(e);return n?n.inorderTraversal(e=>t(e.name,e.node)):this.children_.inorderTraversal(t)}getIterator(e){return this.getIteratorFrom(e.minPost(),e)}getIteratorFrom(t,n){const e=this.resolveIndex_(n);if(e)return e.getIteratorFrom(t,e=>e);{const r=this.children_.getIteratorFrom(t.name,mt.Wrap);let e=r.peek();for(;null!=e&&n.compare(e,t)<0;)r.getNext(),e=r.peek();return r}}getReverseIterator(e){return this.getReverseIteratorFrom(e.maxPost(),e)}getReverseIteratorFrom(t,n){const e=this.resolveIndex_(n);if(e)return e.getReverseIteratorFrom(t,e=>e);{const r=this.children_.getReverseIteratorFrom(t.name,mt.Wrap);let e=r.peek();for(;null!=e&&0{if(w(i,e)&&"."!==e.substring(0,1)){const n=Qt(t);!n.isLeafNode()&&n.isEmpty()||(r=r.updateImmediateChild(e,n))}}),r.updatePriority(Qt(e))}{const s=[];let r=!1;if(be(i,(e,t)=>{if("."!==e.substring(0,1)){const n=Qt(t);n.isEmpty()||(r=r||!n.getPriority().isEmpty(),s.push(new mt(e,n)))}}),0===s.length)return jt.EMPTY_NODE;var n=Ft(s,Et,e=>e.name,St);if(r){t=Ft(s,Ot.getCompare());return new jt(n,Qt(e),new Bt({".priority":t},{".priority":Ot}))}return new jt(n,Qt(e),Bt.Default)}}Dt=Qt;class Yt extends vt{constructor(e){super(),this.indexPath_=e,p(!at(e)&&".priority"!==et(e),"Can't create PathIndex with empty path or .priority key")}extractChild(e){return e.getChild(this.indexPath_)}isDefinedOn(e){return!e.getChild(this.indexPath_).isEmpty()}compare(e,t){const n=this.extractChild(e.node);var r=this.extractChild(t.node),r=n.compareTo(r);return 0===r?Ce(e.name,t.name):r}makePost(e,t){var n=Qt(e),n=jt.EMPTY_NODE.updateChild(this.indexPath_,n);return new mt(t,n)}maxPost(){var e=jt.EMPTY_NODE.updateChild(this.indexPath_,zt);return new mt(we,e)}toString(){return it(this.indexPath_,0).join("/")}}const Kt=new class extends vt{compare(e,t){var n=e.node.compareTo(t.node);return 0===n?Ce(e.name,t.name):n}isDefinedOn(e){return!0}indexedValueChanged(e,t){return!e.equals(t)}minPost(){return mt.MIN}maxPost(){return mt.MAX}makePost(e,t){var n=Qt(e);return new mt(t,n)}toString(){return".value"}};function $t(e){return{type:"value",snapshotNode:e}}function Gt(e,t){return{type:"child_added",snapshotNode:t,childName:e}}function Jt(e,t){return{type:"child_removed",snapshotNode:t,childName:e}}function Xt(e,t,n){return{type:"child_changed",snapshotNode:t,childName:e,oldSnap:n}}class Zt{constructor(e){this.index_=e}updateChild(e,t,n,r,i,s){p(e.isIndexed(this.index_),"A node must be indexed if only a child is updated");const o=e.getImmediateChild(t);return o.getChild(r).equals(n.getChild(r))&&o.isEmpty()===n.isEmpty()?e:(null!=s&&(n.isEmpty()?e.hasChild(t)?s.trackChildChange(Jt(t,o)):p(e.isLeafNode(),"A child remove without an old child only makes sense on a leaf node"):o.isEmpty()?s.trackChildChange(Gt(t,n)):s.trackChildChange(Xt(t,n,o))),e.isLeafNode()&&n.isEmpty()?e:e.updateImmediateChild(t,n).withIndex(this.index_))}updateFullNode(r,n,i){return null!=i&&(r.isLeafNode()||r.forEachChild(Ot,(e,t)=>{n.hasChild(e)||i.trackChildChange(Jt(e,t))}),n.isLeafNode()||n.forEachChild(Ot,(e,t)=>{if(r.hasChild(e)){const n=r.getImmediateChild(e);n.equals(t)||i.trackChildChange(Xt(e,t,n))}else i.trackChildChange(Gt(e,t))})),n.withIndex(this.index_)}updatePriority(e,t){return e.isEmpty()?jt.EMPTY_NODE:e.updatePriority(t)}filtersNodes(){return!1}getIndexedFilter(){return this}getIndex(){return this.index_}}class en{constructor(e){this.indexedFilter_=new Zt(e.getIndex()),this.index_=e.getIndex(),this.startPost_=en.getStartPost_(e),this.endPost_=en.getEndPost_(e),this.startIsInclusive_=!e.startAfterSet_,this.endIsInclusive_=!e.endBeforeSet_}getStartPost(){return this.startPost_}getEndPost(){return this.endPost_}matches(e){var t=this.startIsInclusive_?this.index_.compare(this.getStartPost(),e)<=0:this.index_.compare(this.getStartPost(),e)<0,n=this.endIsInclusive_?this.index_.compare(e,this.getEndPost())<=0:this.index_.compare(e,this.getEndPost())<0;return t&&n}updateChild(e,t,n,r,i,s){return this.matches(new mt(t,n))||(n=jt.EMPTY_NODE),this.indexedFilter_.updateChild(e,t,n,r,i,s)}updateFullNode(e,t,n){let r=(t=t.isLeafNode()?jt.EMPTY_NODE:t).withIndex(this.index_);r=r.updatePriority(jt.EMPTY_NODE);const i=this;return t.forEachChild(Ot,(e,t)=>{i.matches(new mt(e,t))||(r=r.updateImmediateChild(e,jt.EMPTY_NODE))}),this.indexedFilter_.updateFullNode(e,r,n)}updatePriority(e,t){return e}filtersNodes(){return!0}getIndexedFilter(){return this.indexedFilter_}getIndex(){return this.index_}static getStartPost_(e){if(e.hasStart()){var t=e.getIndexStartName();return e.getIndex().makePost(e.getIndexStartValue(),t)}return e.getIndex().minPost()}static getEndPost_(e){if(e.hasEnd()){var t=e.getIndexEndName();return e.getIndex().makePost(e.getIndexEndValue(),t)}return e.getIndex().maxPost()}}class tn{constructor(e){this.withinDirectionalStart=e=>this.reverse_?this.withinEndPost(e):this.withinStartPost(e),this.withinDirectionalEnd=e=>this.reverse_?this.withinStartPost(e):this.withinEndPost(e),this.withinStartPost=e=>{var t=this.index_.compare(this.rangedFilter_.getStartPost(),e);return this.startIsInclusive_?t<=0:t<0},this.withinEndPost=e=>{var t=this.index_.compare(e,this.rangedFilter_.getEndPost());return this.endIsInclusive_?t<=0:t<0},this.rangedFilter_=new en(e),this.index_=e.getIndex(),this.limit_=e.getLimit(),this.reverse_=!e.isViewFromLeft(),this.startIsInclusive_=!e.startAfterSet_,this.endIsInclusive_=!e.endBeforeSet_}updateChild(e,t,n,r,i,s){return this.rangedFilter_.matches(new mt(t,n))||(n=jt.EMPTY_NODE),e.getImmediateChild(t).equals(n)?e:e.numChildren()d(t,e)}else s=this.index_.getCompare();const o=e;p(o.numChildren()===this.limit_,"");var a=new mt(t,n),l=this.reverse_?o.getFirstChild(this.index_):o.getLastChild(this.index_),h=this.rangedFilter_.matches(a);if(o.hasChild(t)){var c=o.getImmediateChild(t);let e=r.getChildAfterChild(this.index_,l,this.reverse_);for(;null!=e&&(e.name===t||o.hasChild(e.name));)e=r.getChildAfterChild(this.index_,e,this.reverse_);var u=null==e?1:s(e,a);if(h&&!n.isEmpty()&&0<=u)return null!=i&&i.trackChildChange(Xt(t,n,c)),o.updateImmediateChild(t,n);{null!=i&&i.trackChildChange(Jt(t,c));const _=o.updateImmediateChild(t,jt.EMPTY_NODE);return null!=e&&this.rangedFilter_.matches(e)?(null!=i&&i.trackChildChange(Gt(e.name,e.node)),_.updateImmediateChild(e.name,e.node)):_}}return!n.isEmpty()&&h&&0<=s(l,a)?(null!=i&&(i.trackChildChange(Jt(l.name,l.node)),i.trackChildChange(Gt(t,n))),o.updateImmediateChild(t,n).updateImmediateChild(l.name,jt.EMPTY_NODE)):e}}class nn{constructor(){this.limitSet_=!1,this.startSet_=!1,this.startNameSet_=!1,this.startAfterSet_=!1,this.endSet_=!1,this.endNameSet_=!1,this.endBeforeSet_=!1,this.limit_=0,this.viewFrom_="",this.indexStartValue_=null,this.indexStartName_="",this.indexEndValue_=null,this.indexEndName_="",this.index_=Ot}hasStart(){return this.startSet_}isViewFromLeft(){return""===this.viewFrom_?this.startSet_:"l"===this.viewFrom_}getIndexStartValue(){return p(this.startSet_,"Only valid if start has been set"),this.indexStartValue_}getIndexStartName(){return p(this.startSet_,"Only valid if start has been set"),this.startNameSet_?this.indexStartName_:ye}hasEnd(){return this.endSet_}getIndexEndValue(){return p(this.endSet_,"Only valid if end has been set"),this.indexEndValue_}getIndexEndName(){return p(this.endSet_,"Only valid if end has been set"),this.endNameSet_?this.indexEndName_:we}hasLimit(){return this.limitSet_}hasAnchoredLimit(){return this.limitSet_&&""!==this.viewFrom_}getLimit(){return p(this.limitSet_,"Only valid if limit has been set"),this.limit_}getIndex(){return this.index_}loadsAllData(){return!(this.startSet_||this.endSet_||this.limitSet_)}isDefault(){return this.loadsAllData()&&this.index_===Ot}copy(){const e=new nn;return e.limitSet_=this.limitSet_,e.limit_=this.limit_,e.startSet_=this.startSet_,e.startAfterSet_=this.startAfterSet_,e.indexStartValue_=this.indexStartValue_,e.startNameSet_=this.startNameSet_,e.indexStartName_=this.indexStartName_,e.endSet_=this.endSet_,e.endBeforeSet_=this.endBeforeSet_,e.indexEndValue_=this.indexEndValue_,e.endNameSet_=this.endNameSet_,e.indexEndName_=this.indexEndName_,e.index_=this.index_,e.viewFrom_=this.viewFrom_,e}}function rn(e,t,n){const r=e.copy();return r.startSet_=!0,void 0===t&&(t=null),r.indexStartValue_=t,null!=n?(r.startNameSet_=!0,r.indexStartName_=n):(r.startNameSet_=!1,r.indexStartName_=""),r}function sn(e,t,n){const r=e.copy();return r.endSet_=!0,void 0===t&&(t=null),r.indexEndValue_=t,void 0!==n?(r.endNameSet_=!0,r.indexEndName_=n):(r.endNameSet_=!1,r.indexEndName_=""),r}function on(e,t){const n=e.copy();return n.index_=t,n}function an(e){const t={};if(e.isDefault())return t;let n;var r;return n=e.index_===Ot?"$priority":e.index_===Kt?"$value":e.index_===Ct?"$key":(p(e.index_ instanceof Yt,"Unrecognized index type!"),e.index_.toString()),t.orderBy=v(n),e.startSet_&&(r=e.startAfterSet_?"startAfter":"startAt",t[r]=v(e.indexStartValue_),e.startNameSet_&&(t[r]+=","+v(e.indexStartName_))),e.endSet_&&(r=e.endBeforeSet_?"endBefore":"endAt",t[r]=v(e.indexEndValue_),e.endNameSet_&&(t[r]+=","+v(e.indexEndName_))),e.limitSet_&&(e.isViewFromLeft()?t.limitToFirst=e.limit_:t.limitToLast=e.limit_),t}function ln(t){const n={};if(t.startSet_&&(n.sp=t.indexStartValue_,t.startNameSet_&&(n.sn=t.indexStartName_),n.sin=!t.startAfterSet_),t.endSet_&&(n.ep=t.indexEndValue_,t.endNameSet_&&(n.en=t.indexEndName_),n.ein=!t.endBeforeSet_),t.limitSet_){n.l=t.limit_;let e=t.viewFrom_;""===e&&(e=t.isViewFromLeft()?"l":"r"),n.vf=e}return t.index_!==Ot&&(n.i=t.index_.toString()),n}class hn extends $e{constructor(e,t,n,r){super(),this.repoInfo_=e,this.onDataUpdate_=t,this.authTokenProvider_=n,this.appCheckTokenProvider_=r,this.log_=ae("p:rest:"),this.listens_={}}reportStats(e){throw new Error("Method not implemented.")}static getListenId_(e,t){return void 0!==t?"tag$"+t:(p(e._queryParams.isDefault(),"should have a tag if it's not a default query."),e._path.toString())}listen(e,t,r,i){const s=e._path.toString();this.log_("Listen called for "+s+" "+e._queryIdentifier);const o=hn.getListenId_(e,r),a={};this.listens_[o]=a;var n=an(e._queryParams);this.restRequest_(s+".json",n,(t,e)=>{let n=e;if(null===(t=404===t?n=null:t)&&this.onDataUpdate_(s,n,!1,r),C(this.listens_,o)===a){let e;e=t?401===t?"permission_denied":"rest_error:"+t:"ok",i(e,null)}})}unlisten(e,t){var n=hn.getListenId_(e,t);delete this.listens_[n]}get(e){var t=an(e._queryParams);const r=e._path.toString(),i=new _;return this.restRequest_(r+".json",t,(e,t)=>{let n=t;null===(e=404===e?n=null:e)?(this.onDataUpdate_(r,n,!1,null),i.resolve(n)):i.reject(new Error(n))}),i.promise}refreshAuthToken(e){}restRequest_(i,s={},o){return s.format="export",Promise.all([this.authTokenProvider_.getToken(!1),this.appCheckTokenProvider_.getToken(!1)]).then(([e,t])=>{e&&e.accessToken&&(s.auth=e.accessToken),t&&t.token&&(s.ac=t.token);const n=(this.repoInfo_.secure?"https://":"http://")+this.repoInfo_.host+i+"?ns="+this.repoInfo_.namespace+function(e){const t=[];for(const[n,r]of Object.entries(e))Array.isArray(r)?r.forEach(e=>{t.push(encodeURIComponent(n)+"="+encodeURIComponent(e))}):t.push(encodeURIComponent(n)+"="+encodeURIComponent(r));return t.length?"&"+t.join("&"):""}(s);this.log_("Sending REST request for "+n);const r=new XMLHttpRequest;r.onreadystatechange=()=>{if(o&&4===r.readyState){this.log_("REST Response for "+n+" received. status:",r.status,"response:",r.responseText);let e=null;if(200<=r.status&&r.status<300){try{e=m(r.responseText)}catch(e){ge("Failed to parse JSON response for "+n+": "+r.responseText)}o(null,e)}else 401!==r.status&&404!==r.status&&ge("Got unsuccessful REST response for "+n+" Status: "+r.status),o(r.status);o=null}},r.open("GET",n,!0),r.send()})}}class cn{constructor(){this.rootNode_=jt.EMPTY_NODE}getNode(e){return this.rootNode_.getChild(e)}updateSnapshot(e,t){this.rootNode_=this.rootNode_.updateChild(e,t)}}function un(){return{value:null,children:new Map}}function dn(e,t,n){var r;at(t)?(e.value=n,e.children.clear()):null!==e.value?e.value=e.value.updateChild(t,n):(r=et(t),e.children.has(r)||e.children.set(r,un()),dn(e.children.get(r),t=nt(t),n))}function _n(e,n,r){var i;null!==e.value?r(n,e.value):(i=(e,t)=>{_n(t,new Xe(n.toString()+"/"+e),r)},e.children.forEach((e,t)=>{i(t,e)}))}class pn{constructor(e){this.collection_=e,this.last_=null}get(){var e=this.collection_.get();const n=Object.assign({},e);return this.last_&&be(this.last_,(e,t)=>{n[e]=n[e]-t}),this.last_=e,n}}class fn{constructor(e,t){this.server_=t,this.statsToReport_={},this.statsListener_=new pn(e);var n=1e4+2e4*Math.random();Ee(this.reportStats_.bind(this),Math.floor(n))}reportStats_(){var e=this.statsListener_.get();const n={};let r=!1;be(e,(e,t)=>{0{var t;"child_changed"===e.type&&n.index_.indexedValueChanged(e.oldSnap,e.snapshotNode)&&s.push((t=e.childName,{type:"child_moved",snapshotNode:e.snapshotNode,childName:t}))}),Sn(n,i,"child_removed",e,r,t),Sn(n,i,"child_added",e,r,t),Sn(n,i,"child_moved",s,r,t),Sn(n,i,"child_changed",e,r,t),Sn(n,i,"value",e,r,t),i}function Sn(s,o,t,e,a,l){const n=e.filter(e=>e.type===t);n.sort((e,t)=>function(e,t,n){if(null==t.childName||null==n.childName)throw c("Should only compare child_ events.");var r=new mt(t.childName,t.snapshotNode),i=new mt(n.childName,n.snapshotNode);return e.index_.compare(r,i)}(s,e,t)),n.forEach(t=>{const n=(e=s,i=l,"value"===(r=t).type||"child_removed"===r.type||(r.prevName=i.getPredecessorChildName(r.childName,r.snapshotNode,e.index_)),r);var e,r,i;a.forEach(e=>{e.respondsTo(t.type)&&o.push(e.createEvent(n,s.query_))})})}function kn(e,t){return{eventCache:e,serverCache:t}}function Nn(e,t,n,r){return kn(new Tn(t,n,r),e.serverCache)}function Pn(e,t,n,r){return kn(e.eventCache,new Tn(t,n,r))}function Rn(e){return e.eventCache.isFullyInitialized()?e.eventCache.getNode():null}function xn(e){return e.serverCache.isFullyInitialized()?e.serverCache.getNode():null}let Dn;class An{constructor(e,t=(Dn=Dn||new It(he),Dn)){this.value=e,this.children=t}static fromObject(e){let n=new An(null);return be(e,(e,t)=>{n=n.set(new Xe(e),t)}),n}isEmpty(){return null===this.value&&this.children.isEmpty()}findRootMostMatchingPathAndValue(e,t){if(null!=this.value&&t(this.value))return{path:Ze(),value:this.value};if(at(e))return null;{var n=et(e);const i=this.children.get(n);if(null===i)return null;var r=i.findRootMostMatchingPathAndValue(nt(e),t);return null==r?null:{path:ot(new Xe(n),r.path),value:r.value}}}findRootMostValueAndPath(e){return this.findRootMostMatchingPathAndValue(e,()=>!0)}subtree(e){if(at(e))return this;{var t=et(e);const n=this.children.get(t);return null!==n?n.subtree(nt(e)):new An(null)}}set(e,t){if(at(e))return new An(t,this.children);{var n=et(e);const i=this.children.get(n)||new An(null);var r=i.set(nt(e),t),r=this.children.insert(n,r);return new An(this.value,r)}}remove(t){if(at(t))return this.children.isEmpty()?new An(null):new An(null,this.children);{var n=et(t);const r=this.children.get(n);if(r){const i=r.remove(nt(t));let e;return e=i.isEmpty()?this.children.remove(n):this.children.insert(n,i),null===this.value&&e.isEmpty()?new An(null):new An(this.value,e)}return this}}get(e){if(at(e))return this.value;{var t=et(e);const n=this.children.get(t);return n?n.get(nt(e)):null}}setTree(t,n){if(at(t))return n;{var r=et(t);const i=this.children.get(r)||new An(null),s=i.setTree(nt(t),n);let e;return e=s.isEmpty()?this.children.remove(r):this.children.insert(r,s),new An(this.value,e)}}fold(e){return this.fold_(Ze(),e)}fold_(n,r){const i={};return this.children.inorderTraversal((e,t)=>{i[e]=t.fold_(ot(n,e),r)}),r(n,this.value,i)}findOnPath(e,t){return this.findOnPath_(e,Ze(),t)}findOnPath_(e,t,n){var r=!!this.value&&n(t,this.value);if(r)return r;if(at(e))return null;{r=et(e);const i=this.children.get(r);return i?i.findOnPath_(nt(e),ot(t,r),n):null}}foreachOnPath(e,t){return this.foreachOnPath_(e,Ze(),t)}foreachOnPath_(e,t,n){if(at(e))return this;{this.value&&n(t,this.value);var r=et(e);const i=this.children.get(r);return i?i.foreachOnPath_(nt(e),ot(t,r),n):new An(null)}}foreach(e){this.foreach_(Ze(),e)}foreach_(n,r){this.children.inorderTraversal((e,t)=>{t.foreach_(ot(n,e),r)}),this.value&&r(n,this.value)}foreachChild(n){this.children.inorderTraversal((e,t)=>{t.value&&n(e,t.value)})}}class On{constructor(e){this.writeTree_=e}static empty(){return new On(new An(null))}}function Ln(t,n,r){if(at(n))return new On(new An(r));var i=t.writeTree_.findRootMostValueAndPath(n);if(null!=i){var s=i.path;let e=i.value;i=lt(s,n);return e=e.updateChild(i,r),new On(t.writeTree_.set(s,e))}s=new An(r),s=t.writeTree_.setTree(n,s);return new On(s)}function Mn(e,n,t){let r=e;return be(t,(e,t)=>{r=Ln(r,ot(n,e),t)}),r}function Fn(e,t){if(at(t))return On.empty();var n=e.writeTree_.setTree(t,new An(null));return new On(n)}function qn(e,t){return null!=Wn(e,t)}function Wn(e,t){var n=e.writeTree_.findRootMostValueAndPath(t);return null!=n?e.writeTree_.get(n.path).getChild(lt(n.path,t)):null}function Bn(e){const n=[],t=e.writeTree_.value;return null!=t?t.isLeafNode()||t.forEachChild(Ot,(e,t)=>{n.push(new mt(e,t))}):e.writeTree_.children.inorderTraversal((e,t)=>{null!=t.value&&n.push(new mt(e,t.value))}),n}function Un(e,t){if(at(t))return e;var n=Wn(e,t);return null!=n?new On(new An(n)):new On(e.writeTree_.subtree(t))}function jn(e){return e.writeTree_.isEmpty()}function Vn(e,t){return function r(i,e,s){{if(null!=e.value)return s.updateChild(i,e.value);{let n=null;return e.children.inorderTraversal((e,t)=>{".priority"===e?(p(null!==t.value,"Priority writes must always be leaf nodes"),n=t.value):s=r(ot(i,e),t,s)}),s=!s.getChild(i).isEmpty()&&null!==n?s.updateChild(ot(i,".priority"),n):s}}}(Ze(),e.writeTree_,t)}function zn(e,t){return nr(t,e)}function Hn(t,n){var e,r=t.allWrites.findIndex(e=>e.writeId===n);p(0<=r,"removeWrite called with nonexistent writeId.");const i=t.allWrites[r];t.allWrites.splice(r,1);let s=i.visible,o=!1,a=t.allWrites.length-1;for(;s&&0<=a;){var l=t.allWrites[a];l.visible&&(a>=r&&function(e,t){{if(e.snap)return ut(e.path,t);for(const n in e.children)if(e.children.hasOwnProperty(n)&&ut(ot(e.path,n),t))return!0;return!1}}(l,i.path)?s=!1:ut(i.path,l.path)&&(o=!0)),a--}return!!s&&(o?((e=t).visibleWrites=Yn(e.allWrites,Qn,Ze()),0{t.visibleWrites=Fn(t.visibleWrites,ot(i.path,e))}),!0)}function Qn(e){return e.visible}function Yn(e,t,n){let r=On.empty();for(let s=0;s{r=r.updateImmediateChild(e,t)}),r;if(n){const s=Un(e.visibleWrites,t);return n.forEachChild(Ot,(e,t)=>{var n=Vn(Un(s,new Xe(e)),t);r=r.updateImmediateChild(e,n)}),Bn(s).forEach(e=>{r=r.updateImmediateChild(e.name,e.node)}),r}return Bn(Un(e.visibleWrites,t)).forEach(e=>{r=r.updateImmediateChild(e.name,e.node)}),r}(e.writeTree,e.treePath,t)}function Jn(e,t,n,r){return function(e,t,n,r,i){p(r||i,"Either existingEventSnap or existingServerSnap must exist");var s=ot(t,n);return qn(e.visibleWrites,s)?null:jn(s=Un(e.visibleWrites,s))?i.getChild(n):Vn(s,i.getChild(n))}(e.writeTree,e.treePath,t,n,r)}function Xn(e,t){return n=e.writeTree,t=ot(e.treePath,t),Wn(n.visibleWrites,t);var n}function Zn(e,t,n,r,i,s){return function(e,t,n,r,i,s,o){let a;var l=Un(e.visibleWrites,t),h=Wn(l,Ze());if(null!=h)a=h;else{if(null==n)return[];a=Vn(l,n)}if(a=a.withIndex(o),a.isEmpty()||a.isLeafNode())return[];{const c=[],u=o.getCompare(),d=s?a.getReverseIteratorFrom(r,o):a.getIteratorFrom(r,o);let e=d.getNext();for(;e&&c.length{var n=ot(s,e);cr(i,et(n))&&(h=hr(r,h,n,t,o,a,l))}),e.foreach((e,t)=>{var n=ot(s,e);cr(i,et(n))||(h=hr(r,h,n,t,o,a,l))}),h}(e,t,l.path,l.children,r,i,s):(p(l.source.fromServer,"Unknown source."),a=l.source.tagged||t.serverCache.isFiltered(),dr(e,t,l.path,l.children,r,i,a,s))}else if(n.type===K.ACK_USER_WRITE){var h=n;o=h.revert?function(n,r,i,s,e,o){let a;{if(null!=Xn(s,i))return r;{var l=new sr(s,r,e);const c=r.eventCache.getNode();let t;if(at(i)||".priority"===et(i)){let e;e=r.serverCache.isFullyInitialized()?$n(s,xn(r)):(h=r.serverCache.getNode(),p(h instanceof jt,"serverChildren would be complete if leaf node"),Gn(s,h)),e=e,t=n.filter.updateFullNode(c,e,o)}else{var h=et(i);let e=er(s,h,r.serverCache);null==e&&r.serverCache.isCompleteForChild(h)&&(e=c.getImmediateChild(h)),t=null!=e?n.filter.updateChild(c,h,e,nt(i),l,o):r.eventCache.getNode().hasChild(h)?n.filter.updateChild(c,h,jt.EMPTY_NODE,nt(i),l,o):c,t.isEmpty()&&r.serverCache.isFullyInitialized()&&(a=$n(s,xn(r)),a.isLeafNode()&&(t=n.filter.updateFullNode(t,a,o)))}return a=r.serverCache.isFullyInitialized()||null!=Xn(s,Ze()),Nn(r,t,a,n.filter.filtersNodes())}}}(e,t,h.path,r,i,s):function(e,t,i,n,s,o,a){if(null!=Xn(s,i))return t;const l=t.serverCache.isFiltered(),h=t.serverCache;{if(null!=n.value){if(at(i)&&h.isFullyInitialized()||h.isCompleteForPath(i))return lr(e,t,i,h.getNode().getChild(i),s,o,l,a);if(at(i)){let n=new An(null);return h.getNode().forEachChild(Ct,(e,t)=>{n=n.set(new Xe(e),t)}),dr(e,t,i,n,s,o,l,a)}return t}{let r=new An(null);return n.foreach((e,t)=>{var n=ot(i,e);h.isCompleteForPath(n)&&(r=r.set(e,h.getNode().getChild(n)))}),dr(e,t,i,r,s,o,l,a)}}}(e,t,h.path,h.affectedTree,r,i,s)}else{if(n.type!==K.LISTEN_COMPLETE)throw c("Unknown operation type: "+n.type);o=function(e,t,n,r,i){const s=t.serverCache,o=Pn(t,s.getNode(),s.isFullyInitialized()||at(n),s.isFiltered());return ar(e,o,n,r,ir,i)}(e,t,n.path,r,s)}h=s.getChanges();return function(e,t,n){const r=t.eventCache;if(r.isFullyInitialized()){var i=r.getNode().isLeafNode()||r.getNode().isEmpty();const s=Rn(e);(0{n=n.updateChild(e,t)}),n}function dr(r,i,e,t,s,o,a,l){if(i.serverCache.getNode().isEmpty()&&!i.serverCache.isFullyInitialized())return i;let h=i,n;n=at(e)?t:new An(null).setTree(e,t);const c=i.serverCache.getNode();return n.children.inorderTraversal((e,t)=>{var n;c.hasChild(e)&&(n=ur(0,i.serverCache.getNode().getImmediateChild(e),t),h=lr(r,h,new Xe(e),n,s,o,a,l))}),n.children.inorderTraversal((e,t)=>{var n=!i.serverCache.isCompleteForChild(e)&&null===t.value;c.hasChild(e)||n||(n=ur(0,i.serverCache.getNode().getImmediateChild(e),t),h=lr(r,h,new Xe(e),n,s,o,a,l))}),h}class _r{constructor(e,t){this.query_=e,this.eventRegistrations_=[];const n=this.query_._queryParams,r=new Zt(n.getIndex()),i=(e=n).loadsAllData()?new Zt(e.getIndex()):new(e.hasLimit()?tn:en)(e);this.processor_={filter:i};const s=t.serverCache,o=t.eventCache;var a=r.updateFullNode(jt.EMPTY_NODE,s.getNode(),null),l=i.updateFullNode(jt.EMPTY_NODE,o.getNode(),null),a=new Tn(a,s.isFullyInitialized(),r.filtersNodes()),l=new Tn(l,o.isFullyInitialized(),i.filtersNodes());this.viewCache_=kn(l,a),this.eventGenerator_=new In(this.query_)}get query(){return this.query_}}function pr(e){return 0===e.eventRegistrations_.length}function fr(n,r,i){const s=[];if(i){p(null==r,"A cancel should cancel all event registrations.");const o=n.query._path;n.eventRegistrations_.forEach(e=>{var t=e.createCancelEvent(i,o);t&&s.push(t)})}if(r){let e=[];for(let t=0;t{r.push(Gt(e,t))})}return n.isFullyInitialized()&&r.push($t(n.getNode())),mr(e,r,n.getNode(),t)}(o,n)}function Tr(e,t,n,r){var i=t._queryIdentifier;const s=[];let o=[];var a=Nr(e);if("default"===i)for(var[l,h]of e.views.entries())o=o.concat(fr(h,n,r)),pr(h)&&(e.views.delete(l),h.query._queryParams.loadsAllData()||s.push(h.query));else{const c=e.views.get(i);c&&(o=o.concat(fr(c,n,r)),pr(c)&&(e.views.delete(i),c.query._queryParams.loadsAllData()||s.push(c.query)))}return a&&!Nr(e)&&s.push((p(vr,"Reference.ts has not been loaded"),new vr(t._repo,t._path))),{removed:s,events:o}}function Ir(e){const t=[];for(const n of e.views.values())n.query._queryParams.loadsAllData()||t.push(n);return t}function Er(e,t){let n=null;for(const r of e.views.values())n=n||function(e,t){const n=xn(e.viewCache_);return n&&(e.query._queryParams.loadsAllData()||!at(t)&&!n.getImmediateChild(et(t)).isEmpty())?n.getChild(t):null}(r,t);return n}function Sr(e,t){const n=t._queryParams;if(n.loadsAllData())return Pr(e);var r=t._queryIdentifier;return e.views.get(r)}function kr(e,t){return null!=Sr(e,t)}function Nr(e){return null!=Pr(e)}function Pr(e){for(const t of e.views.values())if(t.query._queryParams.loadsAllData())return t;return null}let Rr;let xr=1;class Dr{constructor(e){this.listenProvider_=e,this.syncPointTree_=new An(null),this.pendingWriteTree_={visibleWrites:On.empty(),allWrites:[],lastWriteId:-1},this.tagToQueryMap=new Map,this.queryToTagMap=new Map}}function Ar(e,t,n,r,i){var s,o,a,l;return s=e.pendingWriteTree_,o=t,a=n,l=r,r=i,p(l>s.lastWriteId,"Stacking an older write on top of newer ones"),s.allWrites.push({path:o,snap:a,writeId:l,visible:r=void 0===r?!0:r}),r&&(s.visibleWrites=Ln(s.visibleWrites,o,a)),s.lastWriteId=l,i?jr(e,new Cn(gn(),t,n)):[]}function Or(e,t,n,r){var i,s,o;i=e.pendingWriteTree_,s=t,o=n,r=r,p(r>i.lastWriteId,"Stacking an older merge on top of newer ones"),i.allWrites.push({path:s,children:o,writeId:r,visible:!0}),i.visibleWrites=Mn(i.visibleWrites,s,o),i.lastWriteId=r;var a=An.fromObject(n);return jr(e,new bn(gn(),t,a))}function Lr(e,t,n=!1){var r=function(e,t){for(let r=0;r{t=t.set(new Xe(e),!0)}),jr(e,new yn(r.path,t,n))}return[]}function Mr(e,t,n){return jr(e,new Cn(mn(),t,n))}function Fr(n,e,t,r,i=!1){var s=e._path,o=n.syncPointTree_.get(s);let a=[];if(o&&("default"===e._queryIdentifier||kr(o,e))){var l=Tr(o,e,t,r);0===o.views.size&&(n.syncPointTree_=n.syncPointTree_.remove(s));const d=l.removed;if(a=l.events,!i){o=-1!==d.findIndex(e=>e._queryParams.loadsAllData()),l=n.syncPointTree_.findOnPath(s,(e,t)=>Nr(t));if(o&&!l){const _=n.syncPointTree_.subtree(s);if(!_.isEmpty()){var h=_.fold((e,t,r)=>{if(t&&Nr(t))return[Pr(t)];{let n=[];return t&&(n=Ir(t)),be(r,(e,t)=>{n=n.concat(t)}),n}});for(let e=0;e{var t=n.queryToTagMap.get(Qr(e));n.listenProvider_.stopListening(Gr(e),t)}))}!function(e,t){for(let i=0;i{var n=lt(e,i);s=s||Er(t,n),o=o||Nr(t)});let a=e.syncPointTree_.get(i);a?(o=o||Nr(a),s=s||Er(a,Ze())):(a=new yr,e.syncPointTree_=e.syncPointTree_.set(i,a));let l;if(null!=s)l=!0;else{l=!1,s=jt.EMPTY_NODE;const _=e.syncPointTree_.subtree(i);_.foreachChild((e,t)=>{var n=Er(t,Ze());n&&(s=s.updateImmediateChild(e,n))})}var h,c=kr(a,t);c||t._queryParams.loadsAllData()||(u=Qr(t),p(!e.queryToTagMap.has(u),"View does not exist, but we have a tag"),h=xr++,e.queryToTagMap.set(u,h),e.tagToQueryMap.set(h,u));var u=zn(e.pendingWriteTree_,i);let d=br(a,t,n,u,s,l);return c||o||r||(c=Sr(a,t),d=d.concat(function(t,e,n){const r=e._path,i=Hr(t,e),s=zr(t,n),o=t.listenProvider_.startListening(Gr(e),i,s.hashFn,s.onComplete),a=t.syncPointTree_.subtree(r);if(i)p(!Nr(a.value),"If we're adding a query, it shouldn't be shadowed");else{var l=a.fold((e,t,r)=>{if(!at(e)&&t&&Nr(t))return[Pr(t).query];{let n=[];return t&&(n=n.concat(Ir(t).map(e=>e.query))),be(r,(e,t)=>{n=n.concat(t)}),n}});for(let e=0;e{var n=Er(t,lt(e,r));if(n)return n});return Kn(n,r,i,t,!0)}function Ur(e,t){const r=t._path;let i=null;e.syncPointTree_.foreachOnPath(r,(e,t)=>{var n=lt(e,r);i=i||Er(t,n)});let n=e.syncPointTree_.get(r);n?i=i||Er(n,Ze()):(n=new yr,e.syncPointTree_=e.syncPointTree_.set(r,n));var s=null!=i;const o=s?new Tn(i,!0,!1):null;var a=zn(e.pendingWriteTree_,t._path);return Rn(Cr(n,t,a,s?o.getNode():jt.EMPTY_NODE,s).viewCache_)}function jr(e,t){return function t(n,r,i,s){{if(at(n.path))return Vr(n,r,i,s);{const o=r.get(Ze());null==i&&null!=o&&(i=Er(o,Ze()));let e=[];const a=et(n.path),l=n.operationForChild(a),h=r.children.get(a);if(h&&l){const c=i?i.getImmediateChild(a):null,u=tr(s,a);e=e.concat(t(l,h,c,u))}return o&&(e=e.concat(wr(o,n,s,i))),e}}}(t,e.syncPointTree_,null,zn(e.pendingWriteTree_,Ze()))}function Vr(s,e,o,a){var t=e.get(Ze());null==o&&null!=t&&(o=Er(t,Ze()));let l=[];return e.children.inorderTraversal((e,t)=>{var n=o?o.getImmediateChild(e):null,r=tr(a,e),i=s.operationForChild(e);i&&(l=l.concat(Vr(i,t,n,r)))}),t&&(l=l.concat(wr(t,s,a,o))),l}function zr(i,t){const s=t.query,o=Hr(i,s);return{hashFn:()=>{const e=t.viewCache_.serverCache.getNode()||jt.EMPTY_NODE;return e.hash()},onComplete:e=>{if("ok"===e)return o?function(e,t,n){if(s=Yr(e,n)){var r=Kr(s),i=r.path,s=r.queryId,r=lt(i,t);return $r(e,i,new wn(vn(s),r))}return[]}(i,s._path,o):(t=i,n=s._path,jr(t,new wn(mn(),n)));var t,n,r=function(e,t){let n="Unknown Error";"too_big"===e?n="The data requested exceeds the maximum size that can be accessed with a single request.":"permission_denied"===e?n="Client doesn't have permission to access the desired data.":"unavailable"===e&&(n="The service is unavailable");const r=new Error(e+" at "+t._path.toString()+": "+n);return r.code=e.toUpperCase(),r}(e,s);return Fr(i,s,null,r)}}}function Hr(e,t){var n=Qr(t);return e.queryToTagMap.get(n)}function Qr(e){return e._path.toString()+"$"+e._queryIdentifier}function Yr(e,t){return e.tagToQueryMap.get(t)}function Kr(e){var t=e.indexOf("$");return p(-1!==t&&t{var n=si(t,r.getImmediateChild(e),i);n!==t&&(s=s.updateImmediateChild(e,n))}),s}}class oi{constructor(e="",t=null,n={children:{},childCount:0}){this.name=e,this.parent=t,this.node=n}}function ai(e,t){let n=t instanceof Xe?t:new Xe(t),r=e,i=et(n);for(;null!==i;){var s=C(r.node.children,i)||{children:{},childCount:0};r=new oi(i,r,s),n=nt(n),i=et(n)}return r}function li(e){return e.node.value}function hi(e,t){e.node.value=t,_i(e)}function ci(e){return 0{r(new oi(e,n,t))})}function di(e){return new Xe(null===e.parent?e.name:di(e.parent)+"/"+e.name)}function _i(e){var t,n,r,i;null!==e.parent&&(t=e.parent,n=e.name,r=function(e){return void 0===li(e)&&!ci(e)}(e=e),i=w(t.node.children,n),r&&i?(delete t.node.children[n],t.node.childCount--,_i(t)):r||i||(t.node.children[n]=e.node,t.node.childCount++,_i(t)))}function pi(e,t,n,r){r&&void 0===t||ki(S(e,"value"),t,n)}function fi(e,t,r,n){if(!n||void 0!==t){const i=S(e,"values");if(!t||"object"!=typeof t||Array.isArray(t))throw new Error(i+" must be an object containing the children to replace.");const s=[];be(t,(e,t)=>{const n=new Xe(e);if(ki(i,t,ot(r,n)),".priority"===rt(n)&&!Si(t))throw new Error(i+"contains an invalid value for '"+n.toString()+"', which must be a valid Firebase priority (a string, finite number, server value, or null).");s.push(n)}),function(t,n){let r,i;for(r=0;rbi/3&&P(e)>bi)throw new Error(o+"contains a string greater than "+bi+" utf8 bytes "+pt(a)+" ('"+e.substring(0,50)+"...')");if(e&&"object"==typeof e){let i=!1,s=!1;if(be(e,(e,t)=>{if(".value"===e)i=!0;else if(".priority"!==e&&".sv"!==e&&(s=!0,!Ti(e)))throw new Error(o+" contains an invalid key ("+e+") "+pt(a)+'. Keys must be non-empty strings and can\'t contain ".", "#", "$", "/", "[", or "]"');var n,r;n=a,e=e,0ct(e,t))}function Ai(e,t,n){xi(e,n),Oi(e,e=>ut(e,t)||ut(t,e))}function Oi(e,t){e.recursionDepth_++;let n=!0;for(let i=0;i{Ui(o,e,t,n,r)},o.authTokenProvider_,o.appCheckProvider_),setTimeout(()=>ji(o,!0),0);else{if(null!=t){if("object"!=typeof t)throw new Error("Only objects are supported for option databaseAuthVariableOverride");try{v(t)}catch(e){throw new Error("Invalid authOverride provided: "+e)}}o.persistentConnection_=new gt(o.repoInfo_,e,(e,t,n,r)=>{Ui(o,e,t,n,r)},e=>{ji(o,e)},e=>{var n;n=o,be(e,(e,t)=>{Vi(n,e,t)})},o.authTokenProvider_,o.appCheckProvider_,t),o.server_=o.persistentConnection_}var n;o.authTokenProvider_.addTokenChangeListener(e=>{o.server_.refreshAuthToken(e)}),o.appCheckProvider_.addTokenChangeListener(e=>{o.server_.refreshAppCheckToken(e.token)}),o.statsReporter_=(e=o.repoInfo_,t=()=>new fn(o.stats_,o.server_),n=e.toString(),Be[n]||(Be[n]=t()),Be[n]),o.infoData_=new cn,o.infoSyncTree_=new Dr({startListening:(e,t,n,r)=>{let i=[];const s=o.infoData_.getNode(e._path);return s.isEmpty()||(i=Mr(o.infoSyncTree_,e._path,s),setTimeout(()=>{r("ok")},0)),i},stopListening:()=>{}}),Vi(o,"connected",!1),o.serverSyncTree_=new Dr({startListening:(r,e,t,i)=>(o.server_.listen(r,t,e,(e,t)=>{var n=i(e,t);Ai(o.eventQueue_,r._path,n)}),[]),stopListening:(e,t)=>{o.server_.unlisten(e,t)}})}function Wi(e){const t=e.infoData_.getNode(new Xe(".info/serverTimeOffset"));var n=t.val()||0;return(new Date).getTime()+n}function Bi(e){return Zr({timestamp:Wi(e)})}function Ui(e,t,n,r,i){e.dataUpdateCount++;var s,o,a=new Xe(t);n=e.interceptServerDataCallback_?e.interceptServerDataCallback_(t,n):n;let l=[];l=i?r?(s=T(n,e=>Qt(e)),function(e,t,n,r){if(a=Yr(e,r)){var i=Kr(a),s=i.path,o=i.queryId,a=lt(s,t),i=An.fromObject(n);return $r(e,s,new bn(vn(o),a,i))}return[]}(e.serverSyncTree_,a,s,i)):(s=Qt(n),qr(e.serverSyncTree_,a,s,i)):r?(o=T(n,e=>Qt(e)),t=e.serverSyncTree_,i=a,r=o,o=An.fromObject(r),jr(t,new bn(mn(),i,o))):(o=Qt(n),Mr(e.serverSyncTree_,a,o));let h=a;0{var n=ri(e,t,r.serverSyncTree_,i);dn(s,e,n)});let o=[];_n(s,Ze(),(e,t)=>{o=o.concat(Mr(r.serverSyncTree_,e,t));var n=is(r,e);es(r,n)}),r.onDisconnect_=un(),Ai(r.eventQueue_,Ze(),o)}(e)}function Vi(e,t,n){var r=new Xe("/.info/"+t),i=Qt(n);e.infoData_.updateSnapshot(r,i);i=Mr(e.infoSyncTree_,r,i);Ai(e.eventQueue_,r,i)}function zi(e){return e.nextWriteId_++}function Hi(r,i,e,t,s){Gi(r,"set",{path:i.toString(),value:e,priority:t});var n=Bi(r);const o=Qt(e,t);var a=Br(r.serverSyncTree_,i),n=ii(o,a,n);const l=zi(r);n=Ar(r.serverSyncTree_,i,n,l,!0);xi(r.eventQueue_,n),r.server_.put(i.toString(),o.val(!0),(e,t)=>{var n="ok"===e;n||ge("set at "+i+" failed: "+e);n=Lr(r.serverSyncTree_,l,!n);Ai(r.eventQueue_,i,n),Ji(0,s,e,t)});n=is(r,i);es(r,n),Ai(r.eventQueue_,n,[])}function Qi(n,r,i){n.server_.onDisconnectCancel(r.toString(),(e,t)=>{"ok"===e&&!function e(n,t){if(at(t))return n.value=null,n.children.clear(),!0;if(null!==n.value){if(n.value.isLeafNode())return!1;{const i=n.value;return n.value=null,i.forEachChild(Ot,(e,t)=>{dn(n,new Xe(e),t)}),e(n,t)}}if(0{"ok"===e&&dn(n.onDisconnect_,r,s),Ji(0,i,e,t)})}function Ki(e,t,n){let r;r=".info"===et(t._path)?Fr(e.infoSyncTree_,t,n):Fr(e.serverSyncTree_,t,n),Di(e.eventQueue_,t._path,r)}function $i(e){e.persistentConnection_&&e.persistentConnection_.interrupt(Li)}function Gi(e,...t){let n="";e.persistentConnection_&&(n=e.persistentConnection_.id+":"),pe(n,...t)}function Ji(e,r,i,s){r&&Pe(()=>{if("ok"===i)r(null);else{var t=(i||"error").toUpperCase();let e=t;s&&(e+=": "+s);const n=new Error(e);n.code=t,r(n)}})}function Xi(e,t,n){return Br(e.serverSyncTree_,t,n)||jt.EMPTY_NODE}function Zi(t,e=t.transactionQueueTree_){if(e||rs(t,e),li(e)){const n=ns(t,e);p(00===e.status)&&function(i,s,o){const e=o.map(e=>e.currentWriteId),t=Xi(i,s,e);let n=t;var r=t.hash();for(let c=0;c{Gi(i,"transaction put response",{path:h.toString(),status:t});let n=[];if("ok"===t){const r=[];for(let e=0;eo[e].onComplete(null,!0,o[e].currentOutputSnapshotResolved)),o[e].unwatcher();rs(i,ai(i.transactionQueueTree_,s)),Zi(i,i.transactionQueueTree_),Ai(i.eventQueue_,s,n);for(let t=0;t{Zi(t,e)})}function es(e,t){var n=ts(e,t),r=di(n);return function(i,s,o){if(0!==s.length){const h=[];let n=[];const t=s.filter(e=>0===e.status),c=t.map(e=>e.currentWriteId);for(let r=0;r=Mi)e=!0,t="maxretry",n=n.concat(Lr(i.serverSyncTree_,u.currentWriteId,!0));else{const d=Xi(i,u.path,c);u.currentInputSnapshot=d;var l=s[r].update(d.val());if(void 0!==l){ki("transaction failed: Data returned ",l,u.path);let e=Qt(l);"object"==typeof l&&null!=l&&w(l,".priority")||(e=e.updatePriority(d.getPriority()));a=u.currentWriteId,l=Bi(i),l=ii(e,d,l);u.currentOutputSnapshotRaw=e,u.currentOutputSnapshotResolved=l,u.currentWriteId=zi(i),c.splice(c.indexOf(a),1),n=n.concat(Ar(i.serverSyncTree_,u.path,l,u.currentWriteId,u.applyLocally)),n=n.concat(Lr(i.serverSyncTree_,a,!0))}else e=!0,t="nodata",n=n.concat(Lr(i.serverSyncTree_,u.currentWriteId,!0))}Ai(i.eventQueue_,o,n),n=[],e&&(s[r].status=2,function(e){setTimeout(e,Math.floor(0))}(s[r].unwatcher),s[r].onComplete&&("nodata"===t?h.push(()=>s[r].onComplete(null,!1,s[r].currentInputSnapshot)):h.push(()=>s[r].onComplete(new Error(t),!1,null))))}rs(i,i.transactionQueueTree_);for(let e=0;e{t(n,e,r)})}(e,t,n),n.sort((e,t)=>e.order-t.order),n}function rs(t,n){const r=li(n);if(r){let e=0;for(let t=0;t{rs(t,e)})}function is(t,e){var n=di(ts(t,e)),r=ai(t.transactionQueueTree_,e);return function(e,t,n){let r=n?e:e.parent;for(;null!==r;){if(t(r))return;r=r.parent}}(r,e=>{ss(t,e)}),ss(t,r),function t(e,n,r,i){r&&!i&&n(e),ui(e,e=>{t(e,n,!0,i)}),r&&i&&n(e)}(r,e=>{ss(t,e)}),n}function ss(i,s){const o=li(s);if(o){const a=[];let e=[],t=-1;for(let n=0;n.firebaseio.com instead"),r&&"undefined"!==r||"localhost"===n.domain||fe("Cannot parse Firebase url. Please use https://.firebaseio.com"),n.secure||me();var i="ws"===n.scheme||"wss"===n.scheme;return{repoInfo:new Me(n.host,n.secure,r,i,t,"",r!==n.subdomain),path:new Xe(n.pathString)}},as=function(r){let i="",s="",o="",a="",l="",h=!0,c="https",u=443;if("string"==typeof r){let e=r.indexOf("//");0<=e&&(c=r.substring(0,e-1),r=r.substring(e+2));let t=r.indexOf("/");-1===t&&(t=r.length);let n=r.indexOf("?");-1===n&&(n=r.length),i=r.substring(0,Math.min(t,n)),t{})),e.promise}remove(){yi("OnDisconnect.remove",this._path);const e=new _;return Yi(this._repo,this._path,null,e.wrapCallback(()=>{})),e.promise}set(e){yi("OnDisconnect.set",this._path),pi("OnDisconnect.set",e,this._path,!1);const t=new _;return Yi(this._repo,this._path,e,t.wrapCallback(()=>{})),t.promise}setWithPriority(e,t){yi("OnDisconnect.setWithPriority",this._path),pi("OnDisconnect.setWithPriority",e,this._path,!1),gi("OnDisconnect.setWithPriority",t,!1);const n=new _;return function(n,r,e,t,i){const s=Qt(e,t);n.server_.onDisconnectPut(r.toString(),s.val(!0),(e,t)=>{"ok"===e&&dn(n.onDisconnect_,r,s),Ji(0,i,e,t)})}(this._repo,this._path,e,t,n.wrapCallback(()=>{})),n.promise}update(e){yi("OnDisconnect.update",this._path),fi("OnDisconnect.update",e,this._path,!1);const t=new _;return function(r,i,n,s){if(b(n))return pe("onDisconnect().update() called with empty data. Don't do anything."),Ji(0,s,"ok",void 0);r.server_.onDisconnectMerge(i.toString(),n,(e,t)=>{"ok"===e&&be(n,(e,t)=>{var n=Qt(t);dn(r.onDisconnect_,ot(i,e),n)}),Ji(0,s,e,t)})}(this._repo,this._path,e,t.wrapCallback(()=>{})),t.promise}}class ps{constructor(e,t,n,r){this._repo=e,this._path=t,this._queryParams=n,this._orderByCalled=r}get key(){return at(this._path)?null:rt(this._path)}get ref(){return new vs(this._repo,this._path)}get _queryIdentifier(){var e=ln(this._queryParams),e=ue(e);return"{}"===e?"default":e}get _queryObject(){return ln(this._queryParams)}isEqual(e){if(!((e=R(e))instanceof ps))return!1;var t=this._repo===e._repo,n=ct(this._path,e._path),r=this._queryIdentifier===e._queryIdentifier;return t&&n&&r}toJSON(){return this.toString()}toString(){return this._repo.toString()+function(e){let t="";for(let n=e.pieceNum_;nn(new ys(t,bs(this.ref,e),Ot)))}hasChild(e){var t=new Xe(e);return!this._node.getChild(t).isEmpty()}hasChildren(){return!this._node.isLeafNode()&&!this._node.isEmpty()}toJSON(){return this.exportVal()}val(){return this._node.val()}}function ws(e,t){return(e=R(e))._checkNotDeleted("ref"),void 0!==t?bs(e._root,t):e._root}function Cs(e,t){(e=R(e))._checkNotDeleted("refFromURL");const n=os(t,e._repo.repoInfo_.nodeAdmin);Pi("refFromURL",n);var r=n.repoInfo;return e._repo.repoInfo_.isCustomHost()||r.host===e._repo.repoInfo_.host||fe("refFromURL: Host name does not match the current database: (found "+r.host+" but expected "+e._repo.repoInfo_.host+")"),ws(e,n.path.toString())}function bs(e,t){return(null===et((e=R(e))._path)?vi:Ni)("child","path",t,!1),new vs(e._repo,ot(e._path,t))}function Ts(e,t){e=R(e),yi("set",e._path),pi("set",t,e._path,!1);const n=new _;return Hi(e._repo,e._path,t,null,n.wrapCallback(()=>{})),n.promise}function Is(e,t){fi("update",t,e._path,!1);const n=new _;return function(i,s,e,o){Gi(i,"update",{path:s.toString(),value:e});let n=!0;const r=Bi(i),a={};if(be(e,(e,t)=>{n=!1,a[e]=ri(ot(s,e),Qt(t),i.serverSyncTree_,r)}),n)pe("update() called with empty data. Don't do anything."),Ji(0,o,"ok",void 0);else{const l=zi(i);var t=Or(i.serverSyncTree_,s,a,l);xi(i.eventQueue_,t),i.server_.merge(s.toString(),e,(e,t)=>{var n="ok"===e;n||ge("update at "+s+" failed: "+e);var r=Lr(i.serverSyncTree_,l,!n),n=0{var t=is(i,ot(s,e));es(i,t)}),Ai(i.eventQueue_,s,[])}}(e._repo,e._path,t,n.wrapCallback(()=>{})),n.promise}function Es(t){t=R(t);var i,s,o,e=new ds(()=>{}),e=new Ss(e);return i=t._repo,s=t,o=e,(null!=(e=Ur(i.serverSyncTree_,s))?Promise.resolve(e):i.server_.get(s).then(e=>{var t,n=Qt(e).withIndex(s._queryParams.getIndex());Wr(i.serverSyncTree_,s,o,!0);let r;return r=s._queryParams.loadsAllData()?Mr(i.serverSyncTree_,s._path,n):(t=Hr(i.serverSyncTree_,s),qr(i.serverSyncTree_,s._path,n,t)),Ai(i.eventQueue_,s._path,r),Fr(i.serverSyncTree_,s,o,null,!0),n},e=>(Gi(i,"get for query "+v(s)+" failed: "+e),Promise.reject(new Error(e))))).then(e=>new ys(e,new vs(t._repo,t._path),t._queryParams.getIndex()))}class Ss{constructor(e){this.callbackContext=e}respondsTo(e){return"value"===e}createEvent(e,t){var n=t._queryParams.getIndex();return new cs("value",this,new ys(e.snapshotNode,new vs(t._repo,t._path),n))}getEventRunner(e){return"cancel"===e.getEventType()?()=>this.callbackContext.onCancel(e.error):()=>this.callbackContext.onValue(e.snapshot,null)}createCancelEvent(e,t){return this.callbackContext.hasCancelCallback?new us(this,e,t):null}matches(e){return e instanceof Ss&&(!e.callbackContext||!this.callbackContext||e.callbackContext.matches(this.callbackContext))}hasAnyCallback(){return null!==this.callbackContext}}class ks{constructor(e,t){this.eventType=e,this.callbackContext=t}respondsTo(e){let t="children_added"===e?"child_added":e;return t="children_removed"===t?"child_removed":t,this.eventType===t}createCancelEvent(e,t){return this.callbackContext.hasCancelCallback?new us(this,e,t):null}createEvent(e,t){p(null!=e.childName,"Child events should have a childName.");var n=bs(new vs(t._repo,t._path),e.childName),r=t._queryParams.getIndex();return new cs(e.type,this,new ys(e.snapshotNode,n,r),e.prevName)}getEventRunner(e){return"cancel"===e.getEventType()?()=>this.callbackContext.onCancel(e.error):()=>this.callbackContext.onValue(e.snapshot,e.prevName)}matches(e){return e instanceof ks&&(this.eventType===e.eventType&&(!this.callbackContext||!e.callbackContext||this.callbackContext.matches(e.callbackContext)))}hasAnyCallback(){return!!this.callbackContext}}function Ns(n,e,t,r,i){let s;if("object"==typeof r&&(s=void 0,i=r),"function"==typeof r&&(s=r),i&&i.onlyOnce){const l=t;var o=(e,t)=>{Ki(n._repo,n,a),l(e,t)};o.userCallback=t.userCallback,o.context=t.context,t=o}o=new ds(t,s||void 0);const a="value"===e?new Ss(o):new ks(e,o);return function(e,t,n){let r;r=".info"===et(t._path)?Wr(e.infoSyncTree_,t,n):Wr(e.serverSyncTree_,t,n),Di(e.eventQueue_,t._path,r)}(n._repo,n,a),()=>Ki(n._repo,n,a)}function Ps(e,t,n,r){return Ns(e,"value",t,n,r)}function Rs(e,t,n,r){return Ns(e,"child_added",t,n,r)}function xs(e,t,n,r){return Ns(e,"child_changed",t,n,r)}function Ds(e,t,n,r){return Ns(e,"child_moved",t,n,r)}function As(e,t,n,r){return Ns(e,"child_removed",t,n,r)}function Os(e,t,n){let r=null;var i=n?new ds(n):null;"value"===t?r=new Ss(i):t&&(r=new ks(t,i)),Ki(e._repo,e,r)}class Ls{}class Ms extends Ls{constructor(e,t){super(),this._value=e,this._key=t,this.type="endAt"}_apply(e){pi("endAt",this._value,e._path,!0);var t=sn(e._queryParams,this._value,this._key);if(ms(t),gs(t),e._queryParams.hasEnd())throw new Error("endAt: Starting point was already set (by another call to endAt, endBefore or equalTo).");return new ps(e._repo,e._path,t,e._orderByCalled)}}class Fs extends Ls{constructor(e,t){super(),this._value=e,this._key=t,this.type="endBefore"}_apply(e){pi("endBefore",this._value,e._path,!1);var t=function(e,t,n){let r;return r=e.index_===Ct||n?sn(e,t,n):sn(e,t,ye),r.endBeforeSet_=!0,r}(e._queryParams,this._value,this._key);if(ms(t),gs(t),e._queryParams.hasEnd())throw new Error("endBefore: Starting point was already set (by another call to endAt, endBefore or equalTo).");return new ps(e._repo,e._path,t,e._orderByCalled)}}class qs extends Ls{constructor(e,t){super(),this._value=e,this._key=t,this.type="startAt"}_apply(e){pi("startAt",this._value,e._path,!0);var t=rn(e._queryParams,this._value,this._key);if(ms(t),gs(t),e._queryParams.hasStart())throw new Error("startAt: Starting point was already set (by another call to startAt, startBefore or equalTo).");return new ps(e._repo,e._path,t,e._orderByCalled)}}class Ws extends Ls{constructor(e,t){super(),this._value=e,this._key=t,this.type="startAfter"}_apply(e){pi("startAfter",this._value,e._path,!1);var t=function(e,t,n){let r;return r=e.index_===Ct||n?rn(e,t,n):rn(e,t,we),r.startAfterSet_=!0,r}(e._queryParams,this._value,this._key);if(ms(t),gs(t),e._queryParams.hasStart())throw new Error("startAfter: Starting point was already set (by another call to startAt, startAfter, or equalTo).");return new ps(e._repo,e._path,t,e._orderByCalled)}}class Bs extends Ls{constructor(e){super(),this._limit=e,this.type="limitToFirst"}_apply(e){if(e._queryParams.hasLimit())throw new Error("limitToFirst: Limit was already set (by another call to limitToFirst or limitToLast).");return new ps(e._repo,e._path,function(e,t){const n=e.copy();return n.limitSet_=!0,n.limit_=t,n.viewFrom_="l",n}(e._queryParams,this._limit),e._orderByCalled)}}class Us extends Ls{constructor(e){super(),this._limit=e,this.type="limitToLast"}_apply(e){if(e._queryParams.hasLimit())throw new Error("limitToLast: Limit was already set (by another call to limitToFirst or limitToLast).");return new ps(e._repo,e._path,function(e,t){const n=e.copy();return n.limitSet_=!0,n.limit_=t,n.viewFrom_="r",n}(e._queryParams,this._limit),e._orderByCalled)}}class js extends Ls{constructor(e){super(),this._path=e,this.type="orderByChild"}_apply(e){fs(e,"orderByChild");var t=new Xe(this._path);if(at(t))throw new Error("orderByChild: cannot pass in empty path. Use orderByValue() instead.");t=new Yt(t),t=on(e._queryParams,t);return gs(t),new ps(e._repo,e._path,t,!0)}}class Vs extends Ls{constructor(){super(...arguments),this.type="orderByKey"}_apply(e){fs(e,"orderByKey");var t=on(e._queryParams,Ct);return gs(t),new ps(e._repo,e._path,t,!0)}}class zs extends Ls{constructor(){super(...arguments),this.type="orderByPriority"}_apply(e){fs(e,"orderByPriority");var t=on(e._queryParams,Ot);return gs(t),new ps(e._repo,e._path,t,!0)}}class Hs extends Ls{constructor(){super(...arguments),this.type="orderByValue"}_apply(e){fs(e,"orderByValue");var t=on(e._queryParams,Kt);return gs(t),new ps(e._repo,e._path,t,!0)}}class Qs extends Ls{constructor(e,t){super(),this._value=e,this._key=t,this.type="equalTo"}_apply(e){if(pi("equalTo",this._value,e._path,!1),e._queryParams.hasStart())throw new Error("equalTo: Starting point was already set (by another call to startAt/startAfter or equalTo).");if(e._queryParams.hasEnd())throw new Error("equalTo: Ending point was already set (by another call to endAt/endBefore or equalTo).");return new Ms(this._value,this._key)._apply(new qs(this._value,this._key)._apply(e))}}function Ys(e,...t){let n=R(e);for(const r of t)n=r._apply(n);return n}G=vs,p(!vr,"__referenceConstructor has already been defined"),vr=G,J=vs,p(!Rr,"__referenceConstructor has already been defined"),Rr=J;const Ks="FIREBASE_DATABASE_EMULATOR_HOST",$s={};let Gs=!1;function Js(e,t,n,r,i){let s=r||e.options.databaseURL;void 0===s&&(e.options.projectId||fe("Can't determine Firebase Database URL. Be sure to include a Project ID when calling firebase.initializeApp()."),pe("Using default host for project ",e.options.projectId),s=`${e.options.projectId}-default-rtdb.firebaseio.com`);let o=os(s,i),a=o.repoInfo,l,h=void 0;"undefined"!=typeof process&&process.env&&(h=process.env[Ks]),h?(l=!0,s=`http://${h}?ns=${a.namespace}`,o=os(s,i),a=o.repoInfo):l=!o.repoInfo.secure;var c=i&&l?new De(De.OWNER):new xe(e.name,e.options,t);Pi("Invalid Firebase Database URL",o),at(o.path)||fe("Database URL must point to the root of a Firebase Database (not including a child path).");c=function(e,t,n,r){let i=$s[t.name];i||(i={},$s[t.name]=i);var s=i[e.toURLString()];s&&fe("Database initialized multiple times. Please make sure the format of the database URL matches with each database() call.");return s=new Fi(e,Gs,n,r),i[e.toURLString()]=s}(a,e,c,new Re(e.name,n));return new Xs(c,e)}class Xs{constructor(e,t){this._repoInternal=e,this.app=t,this.type="database",this._instanceStarted=!1}get _repo(){return this._instanceStarted||(qi(this._repoInternal,this.app.options.appId,this.app.options.databaseAuthVariableOverride),this._instanceStarted=!0),this._repoInternal}get _root(){return this._rootInternal||(this._rootInternal=new vs(this._repo,Ze())),this._rootInternal}_delete(){return null!==this._rootInternal&&(function(e,t){const n=$s[t];n&&n[e.key]===e||fe(`Database ${t}(${e.repoInfo_}) has already been deleted.`),$i(e),delete n[e.key]}(this._repo,this.app.name),this._repoInternal=null,this._rootInternal=null),Promise.resolve()}_checkNotDeleted(e){null===this._rootInternal&&fe("Cannot call "+e+" on a deleted database.")}}function Zs(){Ye.IS_TRANSPORT_INITIALIZED&&ge("Transport has already been initialized. Please call this function before calling ref or setting up a listener")}function eo(){Zs(),Ve.forceDisallow()}function to(){Zs(),Qe.forceDisallow(),Ve.forceAllow()}function no(e,t,n,r={}){(e=R(e))._checkNotDeleted("useEmulator"),e._instanceStarted&&fe("Cannot call useEmulator() after instance has already been initialized.");var i,s=e._repoInternal;let o=void 0;s.repoInfo_.nodeAdmin?(r.mockUserToken&&fe('mockUserToken is not supported by the Admin SDK. For client access with mock users, please use the "firebase" package instead of "firebase-admin".'),o=new De(De.OWNER)):r.mockUserToken&&(i="string"==typeof r.mockUserToken?r.mockUserToken:function(e,t){if(e.uid)throw new Error('The "uid" field is no longer supported by mockUserToken. Please use "sub" instead for Firebase Auth User ID.');var n=t||"demo-project",r=e.iat||0,i=e.sub||e.user_id;if(!i)throw new Error("mockUserToken must contain 'sub' or 'user_id' field!");return i=Object.assign({iss:`https://securetoken.google.com/${n}`,aud:n,iat:r,exp:r+3600,auth_time:r,sub:i,user_id:i,firebase:{sign_in_provider:"custom",identities:{}}},e),[a(JSON.stringify({alg:"none",type:"JWT"})),a(JSON.stringify(i)),""].join(".")}(r.mockUserToken,e.app.options.projectId),o=new De(i)),r=s,e=t,t=n,n=o,r.repoInfo_=new Me(`${e}:${t}`,!1,r.repoInfo_.namespace,r.repoInfo_.webSocketOnly,r.repoInfo_.nodeAdmin,r.repoInfo_.persistenceKey,r.repoInfo_.includeNamespaceInQueryParams,!0),n&&(r.authTokenProvider_=n)}function ro(e){(e=R(e))._checkNotDeleted("goOnline"),(e=e._repo).persistentConnection_&&e.persistentConnection_.resume(Li)}function io(e,t){_e(e,t)}const so={".sv":"timestamp"};class oo{constructor(e,t){this.committed=e,this.snapshot=t}toJSON(){return{committed:this.committed,snapshot:this.snapshot.toJSON()}}}function ao(i,e,t){if(i=R(i),yi("Reference.transaction",i._path),".length"===i.key||".keys"===i.key)throw"Reference.transaction failed: "+i.key+" is a read-only object.";var n=null===(r=null==t?void 0:t.applyLocally)||void 0===r||r;const s=new _;var r=Ps(i,()=>{});return function(t,n,e,r,i,s){Gi(t,"transaction on "+n);const o={path:n,update:e,onComplete:r,status:null,order:re(),applyLocally:s,retryCount:0,unwatcher:i,abortReason:null,currentWriteId:null,currentInputSnapshot:null,currentOutputSnapshotRaw:null,currentOutputSnapshotResolved:null},a=Xi(t,n,void 0);o.currentInputSnapshot=a;var l=o.update(a.val());if(void 0===l)o.unwatcher(),o.currentOutputSnapshotRaw=null,o.currentOutputSnapshotResolved=null,o.onComplete&&o.onComplete(null,!1,o.currentInputSnapshot);else{ki("transaction failed: Data returned ",l,o.path),o.status=0;var h=ai(t.transactionQueueTree_,n);const c=li(h)||[];c.push(o),hi(h,c);let e;if("object"==typeof l&&null!==l&&w(l,".priority"))e=C(l,".priority"),p(Si(e),"Invalid priority returned by transaction. Priority must be a valid string, finite number, server value, or null.");else{const u=Br(t.serverSyncTree_,n)||jt.EMPTY_NODE;e=u.getPriority().val()}h=Bi(t),l=Qt(l,e),h=ii(l,a,h);o.currentOutputSnapshotRaw=l,o.currentOutputSnapshotResolved=h,o.currentWriteId=zi(t);h=Ar(t.serverSyncTree_,n,h,o.currentWriteId,o.applyLocally);Ai(t.eventQueue_,n,h),Zi(t,t.transactionQueueTree_)}}(i._repo,i._path,e,(e,t,n)=>{var r;e?s.reject(e):(r=new ys(n,new vs(i._repo,i._path),Ot),s.resolve(new oo(t,r)))},r,n),s.promise}gt.prototype.simpleListen=function(e,t){this.sendRequest("q",{p:e},t)},gt.prototype.echo=function(e,t){this.sendRequest("echo",{d:e},t)},j(Co.SDK_VERSION),Co._registerComponent(new x("database",(e,{instanceIdentifier:t})=>{return Js(e.getProvider("app").getImmediate(),e.getProvider("auth-internal"),e.getProvider("app-check-internal"),t)},"PUBLIC").setMultipleInstances(!0)),Co.registerVersion(B,"1.0.8",X),Co.registerVersion(B,"1.0.8","esm2017");function lo(e){var t="FIREBASE WARNING: "+e;ho.warn(t)}const ho=new W("@firebase/database-compat");class co{constructor(e){this._delegate=e}cancel(t){E("OnDisconnect.cancel",0,1,arguments.length),k("OnDisconnect.cancel","onComplete",t,!0);const e=this._delegate.cancel();return t&&e.then(()=>t(null),e=>t(e)),e}remove(t){E("OnDisconnect.remove",0,1,arguments.length),k("OnDisconnect.remove","onComplete",t,!0);const e=this._delegate.remove();return t&&e.then(()=>t(null),e=>t(e)),e}set(e,t){E("OnDisconnect.set",1,2,arguments.length),k("OnDisconnect.set","onComplete",t,!0);const n=this._delegate.set(e);return t&&n.then(()=>t(null),e=>t(e)),n}setWithPriority(e,t,n){E("OnDisconnect.setWithPriority",2,3,arguments.length),k("OnDisconnect.setWithPriority","onComplete",n,!0);const r=this._delegate.setWithPriority(e,t);return n&&r.then(()=>n(null),e=>n(e)),r}update(t,n){if(E("OnDisconnect.update",1,2,arguments.length),Array.isArray(t)){const r={};for(let e=0;en(null),e=>n(e)),e}}class uo{constructor(e,t){this.committed=e,this.snapshot=t}toJSON(){return E("TransactionResult.toJSON",0,1,arguments.length),{committed:this.committed,snapshot:this.snapshot.toJSON()}}}class _o{constructor(e,t){this._database=e,this._delegate=t}val(){return E("DataSnapshot.val",0,0,arguments.length),this._delegate.val()}exportVal(){return E("DataSnapshot.exportVal",0,0,arguments.length),this._delegate.exportVal()}toJSON(){return E("DataSnapshot.toJSON",0,1,arguments.length),this._delegate.toJSON()}exists(){return E("DataSnapshot.exists",0,0,arguments.length),this._delegate.exists()}child(e){return E("DataSnapshot.child",0,1,arguments.length),e=String(e),Ni("DataSnapshot.child","path",e,!1),new _o(this._database,this._delegate.child(e))}hasChild(e){return E("DataSnapshot.hasChild",1,1,arguments.length),Ni("DataSnapshot.hasChild","path",e,!1),this._delegate.hasChild(e)}getPriority(){return E("DataSnapshot.getPriority",0,0,arguments.length),this._delegate.priority}forEach(t){return E("DataSnapshot.forEach",1,1,arguments.length),k("DataSnapshot.forEach","action",t,!1),this._delegate.forEach(e=>t(new _o(this._database,e)))}hasChildren(){return E("DataSnapshot.hasChildren",0,0,arguments.length),this._delegate.hasChildren()}get key(){return this._delegate.key}numChildren(){return E("DataSnapshot.numChildren",0,0,arguments.length),this._delegate.size}getRef(){return E("DataSnapshot.ref",0,0,arguments.length),new fo(this._database,this._delegate.ref)}get ref(){return this.getRef()}}class po{constructor(e,t){this.database=e,this._delegate=t}on(e,n,t,r){var i;E("Query.on",2,4,arguments.length),k("Query.on","callback",n,!1);const s=po.getCancelAndContextArgs_("Query.on",t,r);var o=(e,t)=>{n.call(s.context,new _o(this.database,e),t)};o.userCallback=n,o.context=s.context;var a=null===(i=s.cancel)||void 0===i?void 0:i.bind(s.context);switch(e){case"value":return Ps(this._delegate,o,a),n;case"child_added":return Rs(this._delegate,o,a),n;case"child_removed":return As(this._delegate,o,a),n;case"child_changed":return xs(this._delegate,o,a),n;case"child_moved":return Ds(this._delegate,o,a),n;default:throw new Error(S("Query.on","eventType")+'must be a valid event type = "value", "child_added", "child_removed", "child_changed", or "child_moved".')}}off(e,t,n){var r;E("Query.off",0,3,arguments.length),function(e,t,n){if(!n||void 0!==t)switch(t){case"value":case"child_added":case"child_removed":case"child_changed":case"child_moved":break;default:throw new Error(S(e,"eventType")+'must be a valid event type = "value", "child_added", "child_removed", "child_changed", or "child_moved".')}}("Query.off",e,!0),k("Query.off","callback",t,!0),N("Query.off","context",n,!0),t?((r=()=>{}).userCallback=t,r.context=n,Os(this._delegate,e,r)):Os(this._delegate,e)}get(){return Es(this._delegate).then(e=>new _o(this.database,e))}once(e,r,t,n){E("Query.once",1,4,arguments.length),k("Query.once","callback",r,!0);const i=po.getCancelAndContextArgs_("Query.once",t,n),s=new _;var o=(e,t)=>{var n=new _o(this.database,e);r&&r.call(i.context,n,t),s.resolve(n)};o.userCallback=r,o.context=i.context;var a=e=>{i.cancel&&i.cancel.call(i.context,e),s.reject(e)};switch(e){case"value":Ps(this._delegate,o,a,{onlyOnce:!0});break;case"child_added":Rs(this._delegate,o,a,{onlyOnce:!0});break;case"child_removed":As(this._delegate,o,a,{onlyOnce:!0});break;case"child_changed":xs(this._delegate,o,a,{onlyOnce:!0});break;case"child_moved":Ds(this._delegate,o,a,{onlyOnce:!0});break;default:throw new Error(S("Query.once","eventType")+'must be a valid event type = "value", "child_added", "child_removed", "child_changed", or "child_moved".')}return s.promise}limitToFirst(e){return E("Query.limitToFirst",1,1,arguments.length),new po(this.database,Ys(this._delegate,function(e){if("number"!=typeof e||Math.floor(e)!==e||e<=0)throw new Error("limitToFirst: First argument must be a positive integer.");return new Bs(e)}(e)))}limitToLast(e){return E("Query.limitToLast",1,1,arguments.length),new po(this.database,Ys(this._delegate,function(e){if("number"!=typeof e||Math.floor(e)!==e||e<=0)throw new Error("limitToLast: First argument must be a positive integer.");return new Us(e)}(e)))}orderByChild(e){return E("Query.orderByChild",1,1,arguments.length),new po(this.database,Ys(this._delegate,function(e){if("$key"===e)throw new Error('orderByChild: "$key" is invalid. Use orderByKey() instead.');if("$priority"===e)throw new Error('orderByChild: "$priority" is invalid. Use orderByPriority() instead.');if("$value"===e)throw new Error('orderByChild: "$value" is invalid. Use orderByValue() instead.');return Ni("orderByChild","path",e,!1),new js(e)}(e)))}orderByKey(){return E("Query.orderByKey",0,0,arguments.length),new po(this.database,Ys(this._delegate,new Vs))}orderByPriority(){return E("Query.orderByPriority",0,0,arguments.length),new po(this.database,Ys(this._delegate,new zs))}orderByValue(){return E("Query.orderByValue",0,0,arguments.length),new po(this.database,Ys(this._delegate,new Hs))}startAt(e=null,t){return E("Query.startAt",0,2,arguments.length),new po(this.database,Ys(this._delegate,([e=null,t]=[e,t],mi("startAt","key",t,!0),new qs(e,t))))}startAfter(e=null,t){return E("Query.startAfter",0,2,arguments.length),new po(this.database,Ys(this._delegate,(e=e,t=t,mi("startAfter","key",t,!0),new Ws(e,t))))}endAt(e=null,t){return E("Query.endAt",0,2,arguments.length),new po(this.database,Ys(this._delegate,(e=e,t=t,mi("endAt","key",t,!0),new Ms(e,t))))}endBefore(e=null,t){return E("Query.endBefore",0,2,arguments.length),new po(this.database,Ys(this._delegate,(e=e,t=t,mi("endBefore","key",t,!0),new Fs(e,t))))}equalTo(e,t){return E("Query.equalTo",1,2,arguments.length),new po(this.database,Ys(this._delegate,(e=e,t=t,mi("equalTo","key",t,!0),new Qs(e,t))))}toString(){return E("Query.toString",0,0,arguments.length),this._delegate.toString()}toJSON(){return E("Query.toJSON",0,1,arguments.length),this._delegate.toJSON()}isEqual(e){if(E("Query.isEqual",1,1,arguments.length),e instanceof po)return this._delegate.isEqual(e._delegate);throw new Error("Query.isEqual failed: First argument must be an instance of firebase.database.Query.")}static getCancelAndContextArgs_(e,t,n){const r={cancel:void 0,context:void 0};if(t&&n)r.cancel=t,k(e,"cancel",r.cancel,!0),r.context=n,N(e,"context",r.context,!0);else if(t)if("object"==typeof t&&null!==t)r.context=t;else{if("function"!=typeof t)throw new Error(S(e,"cancelOrContext")+" must either be a cancel callback or a context object.");r.cancel=t}return r}get ref(){return new fo(this.database,new vs(this._delegate._repo,this._delegate._path))}}class fo extends po{constructor(e,t){super(e,new ps(t._repo,t._path,new nn,!1)),this.database=e,this._delegate=t}getKey(){return E("Reference.key",0,0,arguments.length),this._delegate.key}child(e){return E("Reference.child",1,1,arguments.length),"number"==typeof e&&(e=String(e)),new fo(this.database,bs(this._delegate,e))}getParent(){E("Reference.parent",0,0,arguments.length);var e=this._delegate.parent;return e?new fo(this.database,e):null}getRoot(){return E("Reference.root",0,0,arguments.length),new fo(this.database,this._delegate.root)}set(e,t){E("Reference.set",1,2,arguments.length),k("Reference.set","onComplete",t,!0);const n=Ts(this._delegate,e);return t&&n.then(()=>t(null),e=>t(e)),n}update(t,n){if(E("Reference.update",1,2,arguments.length),Array.isArray(t)){const r={};for(let e=0;en(null),e=>n(e)),e}setWithPriority(e,t,n){E("Reference.setWithPriority",2,3,arguments.length),k("Reference.setWithPriority","onComplete",n,!0);const r=function(e,t,n){if(yi("setWithPriority",e._path),pi("setWithPriority",t,e._path,!1),gi("setWithPriority",n,!1),".length"===e.key||".keys"===e.key)throw"setWithPriority failed: "+e.key+" is a read-only object.";const r=new _;return Hi(e._repo,e._path,t,n,r.wrapCallback(()=>{})),r.promise}(this._delegate,e,t);return n&&r.then(()=>n(null),e=>n(e)),r}remove(t){E("Reference.remove",0,1,arguments.length),k("Reference.remove","onComplete",t,!0);const e=(n=this._delegate,yi("remove",n._path),Ts(n,null));var n;return t&&e.then(()=>t(null),e=>t(e)),e}transaction(e,t,n){E("Reference.transaction",1,3,arguments.length),k("Reference.transaction","transactionUpdate",e,!1),k("Reference.transaction","onComplete",t,!0),function(e,t,n,r){if((!r||void 0!==n)&&"boolean"!=typeof n)throw new Error(S(e,t)+"must be a boolean.")}("Reference.transaction","applyLocally",n,!0);const r=ao(this._delegate,e,{applyLocally:n}).then(e=>new uo(e.committed,new _o(this.database,e.snapshot)));return t&&r.then(e=>t(null,e.committed,e.snapshot),e=>t(e,!1,null)),r}setPriority(e,t){E("Reference.setPriority",1,2,arguments.length),k("Reference.setPriority","onComplete",t,!0);const n=function(e,t){e=R(e),yi("setPriority",e._path),gi("setPriority",t,!1);const n=new _;return Hi(e._repo,ot(e._path,".priority"),t,null,n.wrapCallback(()=>{})),n.promise}(this._delegate,e);return t&&n.then(()=>t(null),e=>t(e)),n}push(e,t){E("Reference.push",0,2,arguments.length),k("Reference.push","onComplete",t,!0);const n=function(e,t){e=R(e),yi("push",e._path),pi("push",t,e._path,!0);var n=Wi(e._repo),n=hs(n);const r=bs(e,n),i=bs(e,n);let s;return s=null!=t?Ts(i,t).then(()=>i):Promise.resolve(i),r.then=s.then.bind(s),r.catch=s.then.bind(s,void 0),r}(this._delegate,e),r=n.then(e=>new fo(this.database,e));t&&r.then(()=>t(null),e=>t(e));const i=new fo(this.database,n);return i.then=r.then.bind(r),i.catch=r.catch.bind(r,void 0),i}onDisconnect(){return yi("Reference.onDisconnect",this._delegate._path),new co(new _s(this._delegate._repo,this._delegate._path))}get key(){return this.getKey()}get parent(){return this.getParent()}get root(){return this.getRoot()}}class go{constructor(e,t){this._delegate=e,this.app=t,this.INTERNAL={delete:()=>this._delegate._delete(),forceWebSockets:eo,forceLongPolling:to}}useEmulator(e,t,n={}){no(this._delegate,e,t,n)}ref(e){if(E("database.ref",0,1,arguments.length),e instanceof fo){var t=Cs(this._delegate,e.toString());return new fo(this,t)}t=ws(this._delegate,e);return new fo(this,t)}refFromURL(e){E("database.refFromURL",1,1,arguments.length);var t=Cs(this._delegate,e);return new fo(this,t)}goOffline(){var e;E("database.goOffline",0,0,arguments.length),(e=R(e=this._delegate))._checkNotDeleted("goOffline"),$i(e._repo)}goOnline(){return E("database.goOnline",0,0,arguments.length),ro(this._delegate)}}go.ServerValue={TIMESTAMP:so,increment:e=>({".sv":{increment:e}})};var mo,vo=Object.freeze({__proto__:null,initStandalone:function({app:e,url:t,version:n,customAuthImpl:r,customAppCheckImpl:i,namespace:s,nodeAdmin:o=!1}){j(n);var a=new O("database-standalone");const l=new A("auth-internal",a);l.setComponent(new x("auth-internal",()=>r,"PRIVATE"));let h=void 0;return i&&(h=new A("app-check-internal",a),h.setComponent(new x("app-check-internal",()=>i,"PRIVATE"))),{instance:new go(Js(e,l,h,t,o),e),namespace:s}}});const yo=go.ServerValue;(mo=t.default).INTERNAL.registerComponent(new x("database-compat",(e,{instanceIdentifier:t})=>{var n=e.getProvider("app-compat").getImmediate(),r=e.getProvider("database").getImmediate({identifier:t});return new go(r,n)},"PUBLIC").setServiceProps({Reference:fo,Query:po,Database:go,DataSnapshot:_o,enableLogging:io,INTERNAL:vo,ServerValue:yo}).setMultipleInstances(!0)),mo.registerVersion("@firebase/database-compat","1.0.8")}).apply(this,arguments)}catch(e){throw console.error(e),new Error("Cannot instantiate firebase-database-compat.js - be sure to load firebase-app.js first.")}}); +//# sourceMappingURL=firebase-database-compat.js.map diff --git a/public/htp-autopayout-engine.js b/public/htp-autopayout-engine.js new file mode 100644 index 00000000..bc1e326a --- /dev/null +++ b/public/htp-autopayout-engine.js @@ -0,0 +1,1345 @@ +/** + * htp-autopayout-engine.js — High Table Protocol — v4.0 + * + * THE COMPLETE LAYER: + * + * 1. AUTO-PAYOUT PIPELINE + * handleMatchGameOver() → writes Firebase result → this file detects it + * → calls window.settleMatchPayout() (htp-covenant-escrow-v2.js) + * → escrow key is local-only, TX is built + submitted client-side + * → winner browser fires the on-chain TX automatically, NO BUTTON NEEDED + * → Firebase settlement lock prevents double-spend across both browsers + * + * 2. GAME UI — CHESS (Chess.com aesthetic, full) + * Board colors: #ebecd0 / #779556 + * Pieces: unicode, white=bright, black=dark, no teal tint + * Clocks: both players, active clock highlighted, Firebase-synced + * Coord labels on every square + * Last-move highlight, check highlight, legal-move dots + * + * 3. GAME UI — CONNECT4 + * 6×7 grid, drop animation, gravity, win-line highlight + * Red vs Yellow, turn indicator, Firebase-synced clock + * + * 4. GAME UI — CHECKERS + * 8×8 board, dark squares only, multi-jump support + * Red vs Black, king promotion glow, Firebase-synced clock + * + * 5. COVENANT INTEGRITY GUARD + * Validates that redeemScript fee SPK === current treasury SPK + * before any settlement TX is built. Blocks if mismatch. + * + * 6. PROTOCOL FEE ADDRESSES (canonical, read from HTPFee) + * mainnet: kaspa:qza6ah0lfqf33c9m00ynkfeettuleluvnpyvmssm5pzz7llwy2ka5nkka4fel + * testnet-12: kaspatest:qpyfz03k6quxwf2jglwkhczvt758d8xrq99gl37p6h3vsqur27ltjhn68354m + * + * LOAD ORDER: LAST — after all other htp-*.js files + */ + +;(function(W) { + 'use strict'; + + const LOG = (...a) => console.log('%c[HTP AutoPayout v4]', 'color:#49e8c2;font-weight:bold', ...a); + const WARN = (...a) => console.warn('[HTP AutoPayout v4]', ...a); + const ERR = (...a) => console.error('[HTP AutoPayout v4]', ...a); + + /* ═══════════════════════════════════════════════════════════════════════ + * 1. FIREBASE HELPERS + * ═══════════════════════════════════════════════════════════════════════ */ + function fdb() { + return (typeof firebase !== 'undefined' && firebase.database) ? firebase.database() : null; + } + function activeMatch() { + return (typeof matchLobby !== 'undefined') ? matchLobby.activeMatch : null; + } + function myPlayerId() { + return W.connectedAddress || W.htpAddress || W.walletAddress || + (typeof matchLobby !== 'undefined' && matchLobby.myPlayerId) || + localStorage.getItem('htpPlayerId') || 'unknown'; + } + + /* ═══════════════════════════════════════════════════════════════════════ + * 2. COVENANT INTEGRITY GUARD + * Validates that the redeemScript in localStorage still encodes the + * current treasury address before any settlement fires. + * ═══════════════════════════════════════════════════════════════════════ */ + function getTreasurySpk() { + if (W.htpEscrowUtils && W.htpEscrowUtils.addrToSpkHex) { + const tAddr = W.HTPFee ? W.HTPFee.treasuryAddress() : + (W.HTP_NETWORK === 'mainnet' + ? 'kaspa:qza6ah0lfqf33c9m00ynkfeettuleluvnpyvmssm5pzz7llwy2ka5nkka4fel' + : 'kaspatest:qpyfz03k6quxwf2jglwkhczvt758d8xrq99gl37p6h3vsqur27ltjhn68354m'); + return W.htpEscrowUtils.addrToSpkHex(tAddr); + } + return null; + } + + function covenantIntegrityCheck(escrow) { + if (!escrow || !escrow.redeemScript) return true; + const expectedSpk = getTreasurySpk(); + if (!expectedSpk) return true; + const script = escrow.redeemScript.toLowerCase(); + const spk = expectedSpk.toLowerCase(); + if (!script.includes(spk)) { + ERR('COVENANT INTEGRITY FAIL — redeemScript fee SPK mismatch!'); + ERR('Expected SPK:', expectedSpk); + ERR('RedeemScript:', escrow.redeemScript); + if (W.showToast) W.showToast('⚠️ Covenant integrity check failed — settlement blocked', 'error'); + return false; + } + LOG('Covenant integrity ✓ — fee SPK verified in redeemScript'); + return true; + } + + /* ═══════════════════════════════════════════════════════════════════════ + * 3. AUTO-PAYOUT PIPELINE + * ═══════════════════════════════════════════════════════════════════════ */ + + let _gameOverPatched = false; + + function patchHandleMatchGameOver() { + if (_gameOverPatched) return; + const orig = W.handleMatchGameOver; + if (!orig) return; + _gameOverPatched = true; + + W.handleMatchGameOver = async function(reason, winnerRaw) { + if (W._htpGameClock) { W._htpGameClock.destroy(); W._htpGameClock = null; } + if (W.htpSyncClock) { W.htpSyncClock.destroy(); } + if (W.chessUI && W.chessUI.timerInterval) { + clearInterval(W.chessUI.timerInterval); + W.chessUI.gameOver = true; + } + + const match = activeMatch(); + const matchId = match ? match.id : W._htpCurrentMatchId; + const game = match ? (match.game || match.gameType || 'chess').toLowerCase() : 'chess'; + const myId = myPlayerId(); + + const winnerStr = normalizeWinner(winnerRaw, game); + + const myColor = W._htpMyColor || 'white'; + const mySide = W._htpMySide || 1; + let iWon = false; + + if (game === 'c4' || game === 'connect4') { + iWon = (winnerRaw === mySide); + } else if (game === 'ck' || game === 'checkers') { + iWon = (winnerRaw === mySide); + } else { + const winnerColor = (winnerRaw === 'w' || winnerRaw === 1 || winnerRaw === 'white') ? 'white' : 'black'; + iWon = (winnerColor === myColor); + } + + const isDraw = (reason === 'draw' || reason === 'stalemate' || reason === 'repetition'); + if (isDraw) iWon = false; + + let alreadySettled = false; + if (matchId && fdb()) { + try { + const resultRef = fdb().ref('relay/' + matchId + '/result'); + const snap = await resultRef.once('value'); + if (snap.exists() && snap.val().txId) { + alreadySettled = true; + LOG('Match already settled, txId:', snap.val().txId); + } else if (!snap.exists()) { + await resultRef.set({ winner: winnerStr, reason: reason, ts: Date.now(), by: myId, matchId: matchId }); + if (fdb()) { + fdb().ref('matches/' + matchId + '/info/status').set('completed').catch(()=>{}); + fdb().ref('matches/' + matchId + '/info/winner').set(winnerStr).catch(()=>{}); + fdb().ref('matches/' + matchId + '/info/reason').set(reason).catch(()=>{}); + } + } + } catch(e) { WARN('Firebase result lock error:', e.message); } + } + + showGameOverOverlay({ reason, winnerStr, iWon, isDraw, matchId, game }); + + if (!alreadySettled && matchId) { + const escrow = W.getEscrow ? W.getEscrow(matchId) : null; + const hasKey = escrow && escrow.privateKey && !escrow.settled; + + if (hasKey && !covenantIntegrityCheck(escrow)) { + ERR('Payout blocked by covenant integrity check'); + } else if (hasKey && (iWon || isDraw)) { + LOG('Auto-payout triggered — building settlement TX…'); + setTimeout(() => triggerAutoPayout(matchId, winnerStr, isDraw, match, escrow), 400); + } else if (!hasKey && (iWon || isDraw)) { + LOG('No local escrow key — listening for partner settlement…'); + listenForSettlement(matchId); + } else { + LOG('I lost (' + game + ') — settlement will fire from winner\'s browser'); + listenForSettlement(matchId); + } + } + }; + + W.handleMatchGameOver._autoPayoutPatched = true; + LOG('handleMatchGameOver auto-payout patch installed'); + } + + function normalizeWinner(raw, game) { + if (game === 'c4' || game === 'connect4') return 'side' + raw; + if (game === 'ck' || game === 'checkers') return 'side' + raw; + if (raw === 'w' || raw === 'white' || raw === 1) return 'white'; + if (raw === 'b' || raw === 'black' || raw === 2) return 'black'; + return String(raw); + } + + async function triggerAutoPayout(matchId, winnerStr, isDraw, match, escrow) { + const myAddr = myPlayerId(); + const winnerAddr = resolveWinnerAddress(winnerStr, match, myAddr); + let playerAAddr = null, playerBAddr = null; + + if (isDraw) { + playerAAddr = match ? (match.creatorAddress || match.creator) : myAddr; + playerBAddr = match ? (match.joinerAddress || match.opponent) : myAddr; + if (!playerAAddr || !playerBAddr) { + try { + const snap = await fdb().ref('matches/' + matchId + '/info').once('value'); + const info = snap.val() || {}; + playerAAddr = info.creatorAddress || info.creator || myAddr; + playerBAddr = info.joinerAddress || info.opponent || myAddr; + } catch(e) {} + } + } + + const overlayEl = document.getElementById('htp-gameover-overlay'); + const statusEl = overlayEl && overlayEl.querySelector('.htp-go-settle-status'); + if (statusEl) { statusEl.textContent = '⏳ Settling on-chain…'; statusEl.style.color = '#f59e0b'; } + + try { + let txId; + if (isDraw) { + txId = await W.settleMatchPayout(matchId, null, true, playerAAddr, playerBAddr); + } else { + txId = await W.settleMatchPayout(matchId, winnerAddr, false, null, null); + } + + if (txId) { + LOG('Settlement TX submitted:', txId); + if (fdb()) { + fdb().ref('relay/' + matchId + '/result/txId').set(txId).catch(()=>{}); + } + updateOverlayWithTx(txId); + } + } catch(e) { + ERR('Auto-payout failed:', e.message); + if (statusEl) { statusEl.textContent = '⚠️ Settlement failed: ' + e.message; statusEl.style.color = '#ef4444'; } + } + } + + function resolveWinnerAddress(winnerStr, match, myAddr) { + if (!match) return myAddr; + const creatorAddr = match.creatorAddress || match.creator; + const joinerAddr = match.joinerAddress || match.opponent; + const myColor = W._htpMyColor || 'white'; + const mySide = W._htpMySide || 1; + + const iAmWinner = + (winnerStr === 'white' && myColor === 'white') || + (winnerStr === 'black' && myColor === 'black') || + (winnerStr === 'side1' && mySide === 1) || + (winnerStr === 'side2' && mySide === 2) || + (winnerStr === 'side3' && mySide === 3); + + if (iAmWinner) return myAddr; + const isCreator = (creatorAddr && creatorAddr === myAddr); + return isCreator ? joinerAddr : creatorAddr; + } + + function listenForSettlement(matchId) { + if (!fdb() || !matchId) return; + const ref = fdb().ref('relay/' + matchId + '/result/txId'); + const fn = ref.on('value', function(snap) { + if (snap.exists() && snap.val()) { + ref.off('value', fn); + updateOverlayWithTx(snap.val()); + } + }); + } + + /* ═══════════════════════════════════════════════════════════════════════ + * 4. GAME-OVER OVERLAY + * ═══════════════════════════════════════════════════════════════════════ */ + + function injectOverlayStyles() { + if (document.getElementById('htp-go-style')) return; + const s = document.createElement('style'); + s.id = 'htp-go-style'; + s.textContent = ` + #htp-gameover-overlay { + position:fixed;inset:0;z-index:10000; + display:flex;align-items:center;justify-content:center; + background:rgba(0,0,0,.8);backdrop-filter:blur(10px); + animation:htpFadeIn .25s ease; + } + @keyframes htpFadeIn{from{opacity:0}to{opacity:1}} + @keyframes htpSlideUp{from{transform:translateY(28px);opacity:0}to{transform:translateY(0);opacity:1}} + .htp-go-card { + background:linear-gradient(145deg,#0f172a,#1e293b); + border:1px solid rgba(73,232,194,.2);border-radius:20px; + padding:36px 28px;max-width:400px;width:92%;text-align:center; + animation:htpSlideUp .3s ease;font-family:'Inter',sans-serif;color:#e2e8f0; + box-shadow:0 24px 60px rgba(0,0,0,.6),0 0 40px rgba(73,232,194,.08); + } + .htp-go-icon { font-size:64px;margin-bottom:12px;display:block;filter:drop-shadow(0 4px 8px rgba(0,0,0,.4)); } + .htp-go-title { font-size:28px;font-weight:900;letter-spacing:-.03em;margin-bottom:6px; } + .htp-go-title.win { background:linear-gradient(135deg,#49e8c2,#3b82f6);-webkit-background-clip:text;-webkit-text-fill-color:transparent; } + .htp-go-title.lose { color:#ef4444; } + .htp-go-title.draw { color:#f59e0b; } + .htp-go-reason { font-size:13px;color:#64748b;margin-bottom:20px; } + .htp-go-payout { + background:#1e293b;border-radius:12px;padding:16px;margin-bottom:20px; + border:1px solid rgba(255,255,255,.06); + } + .htp-go-payout-amount { font-size:32px;font-weight:800;margin-bottom:4px; } + .htp-go-payout-amount.win { color:#49e8c2; } + .htp-go-payout-amount.draw { color:#f59e0b; } + .htp-go-payout-amount.lose { color:#475569; } + .htp-go-payout-row { + display:flex;justify-content:space-between; + font-size:12px;padding:4px 0; + border-bottom:1px solid rgba(255,255,255,.05); + } + .htp-go-payout-row:last-child{border:none;} + .htp-go-payout-row .lbl{color:#64748b;} + .htp-go-payout-row .val{font-weight:600;} + .htp-go-payout-row .val.green{color:#49e8c2;} + .htp-go-payout-row .val.red{color:#ef4444;} + .htp-go-settle-status { font-size:12px;color:#f59e0b;margin-top:10px;min-height:18px; } + .htp-go-tx { font-size:11px;color:#475569;margin-top:8px;word-break:break-all; } + .htp-go-tx a{color:#3b82f6;text-decoration:none;} + .htp-go-tx a:hover{text-decoration:underline;} + .htp-go-btns{display:flex;gap:10px;margin-top:20px;} + .htp-go-btn { + flex:1;padding:13px;border-radius:10px;border:none; + font-weight:700;font-size:14px;cursor:pointer; + transition:opacity .2s,transform .1s; + } + .htp-go-btn:active{transform:scale(.96);} + .htp-go-btn.primary{background:linear-gradient(135deg,#49e8c2,#3b82f6);color:#0f172a;} + .htp-go-btn.secondary{background:#1e293b;color:#94a3b8;border:1px solid rgba(255,255,255,.08);} + .htp-go-btn:hover{opacity:.88;} + `; + document.head.appendChild(s); + } + + function showGameOverOverlay({ reason, winnerStr, iWon, isDraw, matchId, game }) { + injectOverlayStyles(); + const old = document.getElementById('htp-gameover-overlay'); + if (old) old.remove(); + + let icon, titleText, titleCls, payoutAmount, payoutCls, rows = [], reasonText; + const stakeKas = (() => { + const m = activeMatch(); + return parseFloat(m && (m.stakeKas || m.stake) || 0); + })(); + const calc = W.HTPFee ? W.HTPFee.skillGameSettle(stakeKas || 5) : { + totalPool: (stakeKas||5)*2, protocolFee: (stakeKas||5)*2*0.02, + winnerPayout: (stakeKas||5)*2*0.98 + }; + + if (isDraw) { + icon='🤝'; titleCls='draw'; titleText='Draw'; + payoutAmount = stakeKas.toFixed(2)+' KAS'; payoutCls='draw'; + reasonText = reason === 'stalemate' ? 'Stalemate' : 'Draw by ' + reason; + rows=[ + {lbl:'Each player receives',val:stakeKas.toFixed(2)+' KAS',cls:'green'}, + {lbl:'Protocol fee',val:'None (draw)',cls:''}, + ]; + } else if (iWon) { + icon='🏆'; titleCls='win'; titleText='You Won!'; + payoutAmount = '+'+calc.winnerPayout.toFixed(2)+' KAS'; payoutCls='win'; + reasonText = reason === 'checkmate' ? 'Checkmate' : reason === 'timeout' ? 'Timeout' : reason === 'resign' ? 'Opponent resigned' : 'Victory'; + rows=[ + {lbl:'Total pool', val:calc.totalPool.toFixed(2)+' KAS',cls:''}, + {lbl:'Protocol fee', val:'−'+calc.protocolFee.toFixed(2)+' KAS',cls:'red'}, + {lbl:'Your payout', val:calc.winnerPayout.toFixed(2)+' KAS',cls:'green'}, + {lbl:'Treasury', val:(W.HTPFee?W.HTPFee.treasuryAddress():'').slice(0,16)+'…',cls:''}, + ]; + } else { + icon='💀'; titleCls='lose'; titleText='You Lost'; + payoutAmount='0 KAS'; payoutCls='lose'; + reasonText = reason === 'checkmate' ? 'Checkmate' : reason === 'timeout' ? 'Timeout' : reason === 'resign' ? 'You resigned' : 'Defeat'; + rows=[ + {lbl:'Result',val:'Loss',cls:'red'}, + {lbl:'Stake lost',val:stakeKas.toFixed(2)+' KAS',cls:''}, + ]; + } + + const rowsHtml = rows.map(r=> + `
${r.lbl}${r.val}
` + ).join(''); + + const el = document.createElement('div'); + el.id = 'htp-gameover-overlay'; + el.innerHTML = ` +
+ ${icon} +
${titleText}
+
${reasonText}
+
+
${payoutAmount}
+ ${rowsHtml} +
+
${(iWon||isDraw)?'⏳ Settling on-chain…':'⏳ Waiting for settlement…'}
+ +
+ + +
+
`; + document.body.appendChild(el); + } + + function updateOverlayWithTx(txId) { + const statusEl = document.querySelector('.htp-go-settle-status'); + const txEl = document.getElementById('htp-go-tx-link'); + const explorer = (W.HTP_NETWORK === 'mainnet') + ? 'https://explorer.kaspa.org/txs/' + : 'https://explorer-tn12.kaspa.org/txs/'; + if (statusEl) { statusEl.textContent = '✅ Settled on-chain'; statusEl.style.color = '#49e8c2'; } + if (txEl) txEl.innerHTML = `TX: ${String(txId).slice(0,20)}…`; + } + + /* ═══════════════════════════════════════════════════════════════════════ + * 5. CHESS BOARD UI (Chess.com aesthetic) + * ═══════════════════════════════════════════════════════════════════════ */ + + const PIECES = { + wK:'♔',wQ:'♕',wR:'♖',wB:'♗',wN:'♘',wP:'♙', + bK:'♚',bQ:'♛',bR:'♜',bB:'♝',bN:'♞',bP:'♟' + }; + + function injectChessStyles() { + if (document.getElementById('htp-chess-style-v4')) return; + const s = document.createElement('style'); + s.id = 'htp-chess-style-v4'; + s.textContent = ` + #htpChessOverlay { + position:fixed;inset:0;z-index:9000; + display:flex;align-items:center;justify-content:center; + background:#161512;overflow:auto; + } + .htp-chess-wrap { + display:flex;flex-direction:column;align-items:center; + width:min(520px,100vw);gap:0; + padding:12px;box-sizing:border-box; + } + .htp-chess-playerbar { + display:flex;align-items:center;gap:8px; + width:100%;padding:6px 10px; + background:#2a2827;border-radius:6px;margin-bottom:3px; + box-sizing:border-box; + } + .htp-chess-playerbar .avatar { + width:30px;height:30px;border-radius:4px; + background:#3a3a3a;display:flex;align-items:center; + justify-content:center;font-size:16px;flex-shrink:0; + } + .htp-chess-playerbar .name {font-size:13px;font-weight:600;color:#e8e6e3;flex:1;} + .htp-chess-clock { + font-family:'SF Mono','Fira Code',monospace;font-size:18px;font-weight:700; + padding:3px 12px;border-radius:4px;min-width:68px;text-align:center; + transition:background .2s,color .2s; + } + .htp-chess-clock.active {background:#e8e6e3;color:#1a1a1a;} + .htp-chess-clock.inactive {background:#3d3d3d;color:#e8e6e3;} + .htp-chess-clock.low-time {background:#c62828;color:#fff;animation:htpClockPulse 1s infinite;} + @keyframes htpClockPulse{0%,100%{opacity:1}50%{opacity:.7}} + #htpChessBoardEl { + display:grid;grid-template-columns:repeat(8,1fr); + width:min(496px,98vw);height:min(496px,98vw); + border:3px solid #404040;border-radius:2px; + box-shadow:0 8px 32px rgba(0,0,0,.7); + overflow:hidden; + } + .htp-sq { + position:relative;display:flex;align-items:center;justify-content:center; + cursor:pointer;transition:filter .1s;aspect-ratio:1;overflow:hidden; + -webkit-tap-highlight-color:transparent; + } + .htp-sq.light{background:#ebecd0;} + .htp-sq.dark {background:#779556;} + .htp-sq.sel {background:#f6f669 !important;} + .htp-sq.lm-from,.htp-sq.lm-to{background:#cdd16e !important;} + .htp-sq.dark.lm-from,.htp-sq.dark.lm-to{background:#aaa23a !important;} + .htp-sq.in-check{background:radial-gradient(circle,#ff4d4d 35%,transparent 75%) !important;} + .htp-sq.legal-dot::after { + content:'';width:28%;height:28%;border-radius:50%; + background:rgba(0,0,0,.18);pointer-events:none; + } + .htp-sq.legal-cap::before { + content:'';position:absolute;inset:2px;border-radius:50%; + border:5px solid rgba(0,0,0,.18);pointer-events:none; + } + .htp-sq:hover:not(.htp-sq.sel){filter:brightness(1.08);} + .htp-piece { + font-size:min(56px,calc(min(496px,98vw)/8*.92)); + line-height:1;user-select:none;z-index:1;pointer-events:none; + transition:transform .1s; + } + .htp-piece.white{color:#fff;-webkit-text-stroke:1.5px #2a2a2a;text-shadow:0 2px 6px rgba(0,0,0,.5);} + .htp-piece.black{color:#111;-webkit-text-stroke:.5px #777;text-shadow:0 1px 3px rgba(0,0,0,.3);} + .htp-chess-coord { + position:absolute;font-size:min(10px,1.8vw);font-weight:800; + pointer-events:none;opacity:.65;line-height:1; + } + .htp-chess-coord.rank{top:2px;left:3px;} + .htp-chess-coord.file{bottom:2px;right:3px;} + .htp-sq.light .htp-chess-coord{color:#779556;} + .htp-sq.dark .htp-chess-coord{color:#ebecd0;} + .htp-chess-statusbar { + display:flex;justify-content:space-between;align-items:center; + width:100%;padding:8px 2px 0; + } + .htp-chess-status-txt{font-size:12px;color:#8a8a8a;} + .htp-chess-status-txt.your-turn{color:#49e8c2;font-weight:700;} + .htp-chess-btn { + padding:6px 16px;border-radius:6px;border:none;cursor:pointer; + font-weight:700;font-size:12px;transition:opacity .2s; + } + .htp-chess-btn:hover{opacity:.8;} + .htp-chess-btn-resign{background:#c62828;color:#fff;} + .htp-chess-btn-draw {background:#374151;color:#d1d5db;margin-right:6px;} + `; + document.head.appendChild(s); + } + + function openChessBoard(opts) { + injectChessStyles(); + const old = document.getElementById('htpChessOverlay'); + if (old) old.remove(); + + if (!W.chessGame && W.Chess) W.chessGame = new W.Chess(); + + const isFlipped = opts.myColor === 'b'; + const timeSec = opts.timeSec || 300; + const myName = (opts.myColor === 'w' ? opts.creatorName : opts.joinerName) || 'You'; + const oppName = (opts.myColor === 'w' ? opts.joinerName : opts.creatorName) || 'Opponent'; + const myLabel = opts.myColor === 'w' ? 'White ♙' : 'Black ♟'; + const oppLabel = opts.myColor === 'w' ? 'Black ♟' : 'White ♙'; + const topLabel = isFlipped ? myLabel : oppLabel; + const botLabel = isFlipped ? oppLabel : myLabel; + const topName = isFlipped ? myName : oppName; + const botName = isFlipped ? oppName : myName; + + const wrap = document.createElement('div'); + wrap.id = 'htpChessOverlay'; + wrap.innerHTML = ` +
+
+
${isFlipped ? '♙' : '♟'}
+
${topName} (${topLabel})
+
${fmtSec(timeSec)}
+
+
+
+
${isFlipped ? '♟' : '♙'}
+
${botName} (${botLabel})
+
${fmtSec(timeSec)}
+
+
+
Waiting for opponent…
+
+ + +
+
+
`; + document.body.appendChild(wrap); + + W.chessUI = Object.assign(W.chessUI || {}, { + playerColor: opts.myColor, + isFlipped, + selectedSq: null, + legalMoves: [], + lastMove: null, + timeLeft: [timeSec, timeSec], + activeClock: 'w', + gameOver: false, + }); + + renderChessBoardV4(); + startChessClocksV4(opts.matchId); + LOG('Chess board opened — you are', opts.myColor === 'w' ? 'White' : 'Black'); + } + + function renderChessBoardV4() { + const el = document.getElementById('htpChessBoardEl'); + if (!el) return; + const game = W.chessGame; + const ui = W.chessUI || {}; + const flipped = ui.isFlipped; + const files = ['a','b','c','d','e','f','g','h']; + const ranks = [8,7,6,5,4,3,2,1]; + const dFiles = flipped ? [...files].reverse() : files; + const dRanks = flipped ? [...ranks].reverse() : ranks; + const lmF = ui.lastMove ? ui.lastMove.from : null; + const lmT = ui.lastMove ? ui.lastMove.to : null; + const inCheck = game && game.isCheck() && !game.isGameOver(); + const kingInCheck = inCheck ? findKingSquare(game, game.turn()) : null; + + let html = ''; + for (const rank of dRanks) { + for (const file of dFiles) { + const sq = file + rank; + const isLight = (files.indexOf(file) + rank) % 2 === 0; + const piece = game ? game.get(sq) : null; + const pk = piece ? (piece.color + piece.type.toUpperCase()) : null; + const sym = pk ? (PIECES[pk] || '') : ''; + const isSel = sq === ui.selectedSq; + const isLegal = (ui.legalMoves || []).includes(sq); + const isLmF = sq === lmF; + const isLmT = sq === lmT; + const isChk = sq === kingInCheck; + + const isFirstCol = file === dFiles[0]; + const isLastRank = rank === dRanks[dRanks.length - 1]; + const rankLabel = isFirstCol ? `${rank}` : ''; + const fileLabel = isLastRank ? `${file}` : ''; + + const classes = [ + 'htp-sq', + isLight ? 'light' : 'dark', + isSel ? 'sel' : '', + isLmF ? 'lm-from' : '', + isLmT ? 'lm-to' : '', + isChk ? 'in-check': '', + (isLegal && !piece) ? 'legal-dot' : '', + (isLegal && piece) ? 'legal-cap' : '', + ].filter(Boolean).join(' '); + + const pieceHtml = sym ? `${sym}` : ''; + + html += `
${rankLabel}${fileLabel}${pieceHtml}
`; + } + } + el.innerHTML = html; + updateChessStatusBar(); + updateChessClocksV4(); + } + + function findKingSquare(game, color) { + const board = game.board(); + for (let r = 0; r < 8; r++) { + for (let c = 0; c < 8; c++) { + const p = board[r][c]; + if (p && p.type === 'k' && p.color === color) { + return ['a','b','c','d','e','f','g','h'][c] + (8 - r); + } + } + } + return null; + } + + function updateChessStatusBar() { + const el = document.getElementById('htpChessStatusTxt'); + const game = W.chessGame; + const ui = W.chessUI || {}; + if (!el || !game) return; + if (game.isCheckmate()) { el.textContent='♟ Checkmate!'; el.className='htp-chess-status-txt your-turn'; return; } + if (game.isCheck()) { el.textContent='⚠️ Check!'; el.className='htp-chess-status-txt'; return; } + if (game.isDraw() || game.isStalemate()) { el.textContent='🤝 Draw'; el.className='htp-chess-status-txt'; return; } + const myTurn = game.turn() === ui.playerColor; + el.textContent = myTurn ? '● Your turn' : '○ Opponent\'s turn'; + el.className = 'htp-chess-status-txt' + (myTurn ? ' your-turn' : ''); + } + + function updateChessClocksV4() { + const ui = W.chessUI || {}; + const topCl = document.getElementById('htpClockTop'); + const botCl = document.getElementById('htpClockBot'); + if (!topCl || !botCl) return; + const flipped = ui.isFlipped; + const wTime = ui.timeLeft ? ui.timeLeft[0] : 0; + const bTime = ui.timeLeft ? ui.timeLeft[1] : 0; + const topTime = flipped ? wTime : bTime; + const botTime = flipped ? bTime : wTime; + const activeIsTop = (flipped && ui.activeClock === 'w') || (!flipped && ui.activeClock === 'b'); + + topCl.textContent = fmtSec(topTime); + botCl.textContent = fmtSec(botTime); + + [topCl, botCl].forEach((cl, i) => { + const isActive = (i === 0 && activeIsTop) || (i === 1 && !activeIsTop); + const t = i === 0 ? topTime : botTime; + cl.className = 'htp-chess-clock ' + (isActive ? 'active' : 'inactive') + (t < 30 && isActive ? ' low-time' : ''); + }); + } + + function startChessClocksV4(matchId) { + const ui = W.chessUI; + if (!ui) return; + if (ui.timerInterval) clearInterval(ui.timerInterval); + ui.timerInterval = setInterval(() => { + if (!W.chessGame || ui.gameOver) { clearInterval(ui.timerInterval); return; } + const idx = ui.activeClock === 'w' ? 0 : 1; + ui.timeLeft[idx] = Math.max(0, ui.timeLeft[idx] - 1); + if (ui.timeLeft[idx] === 0) { + ui.gameOver = true; + clearInterval(ui.timerInterval); + const loser = ui.activeClock; + const winner = loser === 'w' ? 'b' : 'w'; + if (typeof W.handleMatchGameOver === 'function') W.handleMatchGameOver('timeout', winner); + } + updateChessClocksV4(); + }, 1000); + } + + W._htpChessClick = function(sq) { + const game = W.chessGame; + const ui = W.chessUI; + if (!game || !ui || ui.gameOver) return; + if (game.turn() !== ui.playerColor) return; + + if (ui.selectedSq) { + let move = null; + try { + move = game.move({ from: ui.selectedSq, to: sq, promotion: 'q' }); + } catch (_) { + move = null; + } + if (move) { + ui.lastMove = { from: move.from, to: move.to }; + ui.selectedSq = null; + ui.legalMoves = []; + if (typeof W.relaySend === 'function') { + W.relaySend({ + type: 'move', game: 'chess', + fen: game.fen(), + move: { from: move.from, to: move.to, san: move.san }, + clockSync: { w: ui.timeLeft[0], b: ui.timeLeft[1], ts: Date.now() } + }); + const match = activeMatch(); + if (match && fdb()) { + fdb().ref('relay/' + match.id + '/moves').push({ type:'move',game:'chess',fen:game.fen(),move:{from:move.from,to:move.to,san:move.san},ts:Date.now() }).catch(()=>{}); + } + } + ui.activeClock = game.turn(); + const match = activeMatch(); + if (match && fdb()) { + fdb().ref('relay/'+match.id+'/clock').set({ whiteMs:ui.timeLeft[0]*1000, blackMs:ui.timeLeft[1]*1000, activeColor:ui.activeClock==='w'?'white':'black', lastMoveTs:Date.now() }).catch(()=>{}); + } + renderChessBoardV4(); + if (game.isCheckmate()) { + const winner = game.turn() === 'w' ? 'b' : 'w'; + if (typeof W.handleMatchGameOver === 'function') W.handleMatchGameOver('checkmate', winner); + } else if (game.isDraw() || game.isStalemate()) { + if (typeof W.handleMatchGameOver === 'function') W.handleMatchGameOver('draw', null); + } + return; + } + ui.selectedSq = null; ui.legalMoves = []; + } + const piece = game.get(sq); + if (piece && piece.color === ui.playerColor) { + ui.selectedSq = sq; + ui.legalMoves = game.moves({ square: sq, verbose: true }).map(m => m.to); + } + renderChessBoardV4(); + }; + + W.renderChessBoard = renderChessBoardV4; + W.openChessBoard = openChessBoard; + + function applyIncomingChessMove(msg) { + const game = W.chessGame; + if (!game || !msg.fen) return; + game.load(msg.fen); + if (msg.move) W.chessUI && (W.chessUI.lastMove = { from: msg.move.from, to: msg.move.to }); + if (msg.clockSync && W.chessUI) { + if (typeof msg.clockSync.w === 'number') W.chessUI.timeLeft[0] = msg.clockSync.w; + if (typeof msg.clockSync.b === 'number') W.chessUI.timeLeft[1] = msg.clockSync.b; + if (msg.clockSync.activeColor) W.chessUI.activeClock = msg.clockSync.activeColor === 'white' ? 'w' : 'b'; + } + if (W.chessUI) W.chessUI.activeClock = game.turn(); + renderChessBoardV4(); + if (game.isCheckmate()) { + const winner = game.turn() === 'w' ? 'b' : 'w'; + if (typeof W.handleMatchGameOver === 'function') W.handleMatchGameOver('checkmate', winner); + } else if (game.isDraw() || game.isStalemate()) { + if (typeof W.handleMatchGameOver === 'function') W.handleMatchGameOver('draw', null); + } + } + + /* ═══════════════════════════════════════════════════════════════════════ + * 6. CONNECT4 UI + * ═══════════════════════════════════════════════════════════════════════ */ + + const C4_ROWS = 6, C4_COLS = 7; + + function injectC4Styles() { + if (document.getElementById('htp-c4-style-v4')) return; + const s = document.createElement('style'); + s.id = 'htp-c4-style-v4'; + s.textContent = ` + #htpC4Overlay { + position:fixed;inset:0;z-index:9000; + display:flex;align-items:center;justify-content:center; + background:linear-gradient(160deg,#0a0f1e,#111827);overflow:auto; + } + .htp-c4-wrap { display:flex;flex-direction:column;align-items:center;width:min(480px,100vw);gap:12px;padding:16px;box-sizing:border-box; } + .htp-c4-header { display:flex;justify-content:space-between;align-items:center;width:100%; } + .htp-c4-title { font-size:18px;font-weight:800;color:#e2e8f0;letter-spacing:-.02em; } + .htp-c4-scorebar { display:flex;gap:16px;align-items:center; } + .htp-c4-player { display:flex;flex-direction:column;align-items:center;gap:2px;min-width:80px; } + .htp-c4-player .disc { width:18px;height:18px;border-radius:50%;border:2px solid rgba(255,255,255,.2); } + .htp-c4-player .disc.red { background:radial-gradient(circle at 35% 35%,#ff6b6b,#dc2626); } + .htp-c4-player .disc.yellow { background:radial-gradient(circle at 35% 35%,#fde68a,#f59e0b); } + .htp-c4-player .pname { font-size:11px;color:#94a3b8;font-weight:600; } + .htp-c4-clock-v { font-family:monospace;font-size:20px;font-weight:700;padding:4px 12px;border-radius:6px;transition:all .2s; } + .htp-c4-clock-v.active { background:#374151;color:#e2e8f0;box-shadow:0 0 12px rgba(73,232,194,.3); } + .htp-c4-clock-v.inactive { background:#1e293b;color:#475569; } + .htp-c4-turn { font-size:13px;font-weight:700;color:#49e8c2;text-align:center;min-height:18px; } + .htp-c4-board-wrap { background:linear-gradient(145deg,#1d4ed8,#1e40af);border-radius:16px;padding:10px;box-shadow:0 12px 40px rgba(0,0,0,.6),inset 0 1px 0 rgba(255,255,255,.1); } + .htp-c4-grid { display:grid;grid-template-columns:repeat(7,1fr);gap:6px;cursor:pointer; } + .htp-c4-cell { width:min(56px,calc((100vw - 80px)/7));height:min(56px,calc((100vw - 80px)/7));border-radius:50%;background:rgba(0,0,0,.6);position:relative;overflow:hidden;transition:background .1s; } + .htp-c4-cell.red { background:radial-gradient(circle at 35% 35%,#ff6b6b,#dc2626);box-shadow:inset 0 -3px 6px rgba(0,0,0,.3),0 3px 8px rgba(220,38,38,.4); } + .htp-c4-cell.yellow { background:radial-gradient(circle at 35% 35%,#fde68a,#f59e0b);box-shadow:inset 0 -3px 6px rgba(0,0,0,.3),0 3px 8px rgba(245,158,11,.4); } + .htp-c4-cell.win-cell { animation:htpC4Win .6s ease infinite alternate; } + @keyframes htpC4Win{from{transform:scale(1)}to{transform:scale(1.12);}} + `; + document.head.appendChild(s); + } + + function openC4Board(opts) { + injectC4Styles(); + const old = document.getElementById('htpC4Overlay'); + if (old) old.remove(); + + const isRed = opts.mySide === 1; + const myName = isRed ? (opts.creatorName||'You') : (opts.joinerName||'You'); + const oppName = isRed ? (opts.joinerName||'Opponent') : (opts.creatorName||'Opponent'); + + W.C4 = { + board: Array.from({length:C4_ROWS}, ()=>Array(C4_COLS).fill(0)), + turn: 1, gameOver: false, mySide: opts.mySide || 1, + matchId: opts.matchId, winCells: [], + }; + + const wrap = document.createElement('div'); + wrap.id = 'htpC4Overlay'; + wrap.innerHTML = ` +
+
+
Connect 4
+ +
+
+
+
+
${isRed?myName+' (You)':oppName}
+
${fmtSec(opts.timeSec||200)}
+
+
vs
+
+
+
${isRed?oppName:myName+' (You)'}
+
${fmtSec(opts.timeSec||200)}
+
+
+
${opts.mySide===1?'Your turn':"Opponent's turn"}
+
+
+
+ +
`; + document.body.appendChild(wrap); + + renderC4Board(); + startC4Clock(opts.matchId, opts.timeSec || 200); + LOG('Connect4 board opened — side', opts.mySide, isRed?'(Red)':'(Yellow)'); + } + + function renderC4Board() { + const grid = document.getElementById('htpC4Grid'); + if (!grid || !W.C4) return; + const { board, winCells, mySide } = W.C4; + + let html = ''; + for (let col = 0; col < C4_COLS; col++) { + html += `
`; + html += `
`; + for (let row = 0; row < C4_ROWS; row++) { + const val = board[row][col]; + const isWin = winCells.some(([wr,wc])=>wr===row&&wc===col); + const cls = val===1 ? 'red' : val===2 ? 'yellow' : ''; + html += `
`; + } + html += '
'; + } + grid.innerHTML = html; + updateC4ClockDisplay(); + updateC4TurnLabel(); + } + + function updateC4TurnLabel() { + const lbl = document.getElementById('htpC4TurnLbl'); + if (!lbl || !W.C4) return; + if (W.C4.gameOver) { lbl.textContent='Game over'; return; } + lbl.textContent = W.C4.turn===W.C4.mySide?'● Your turn':"○ Opponent's turn"; + lbl.style.color = W.C4.turn===W.C4.mySide?'#49e8c2':'#64748b'; + } + + function updateC4ClockDisplay() { + if (!W.C4||!W.C4._clk) return; + const clk=W.C4._clk; + const rEl=document.getElementById('htpC4ClockR'); + const yEl=document.getElementById('htpC4ClockY'); + if (rEl){rEl.textContent=fmtSec(Math.floor(clk.ms[0]/1000));rEl.className='htp-c4-clock-v '+(clk.active===1?'active':'inactive');} + if (yEl){yEl.textContent=fmtSec(Math.floor(clk.ms[1]/1000));yEl.className='htp-c4-clock-v '+(clk.active===2?'active':'inactive');} + } + + W._htpC4Drop = function(col) { + if (!W.C4||W.C4.gameOver) return; + if (W.C4.turn!==W.C4.mySide) return; + const row=c4DropRow(W.C4.board, col); + if (row===-1) return; + W.C4.board[row][col]=W.C4.mySide; + const winner=c4CheckWin(W.C4.board,row,col,W.C4.mySide); + if (winner){W.C4.winCells=winner;W.C4.gameOver=true;} + const isDraw=!winner&&W.C4.board[0].every((_,c)=>c4DropRow(W.C4.board,c)===-1); + W.C4.turn=W.C4.turn===1?2:1; + if (typeof W.relaySend==='function') W.relaySend({type:'move',game:'c4',col,side:W.C4.mySide,ts:Date.now()}); + if (fdb()&&W.C4.matchId) fdb().ref('relay/'+W.C4.matchId+'/moves').push({type:'move',game:'c4',col,side:W.C4.mySide,ts:Date.now()}).catch(()=>{}); + if (W.C4._clk) W.C4._clk.recordMove(W.C4.mySide); + renderC4Board(); + if (winner) setTimeout(()=>{if(typeof W.handleMatchGameOver==='function') W.handleMatchGameOver('connect4-win',W.C4.mySide);},400); + else if(isDraw) setTimeout(()=>{if(typeof W.handleMatchGameOver==='function') W.handleMatchGameOver('draw',null);},400); + }; + + W.applyC4Move = function(col, side) { + if (!W.C4||W.C4.gameOver) return; + const row=c4DropRow(W.C4.board,col); if(row===-1)return; + W.C4.board[row][col]=side; + const winner=c4CheckWin(W.C4.board,row,col,side); + if(winner){W.C4.winCells=winner;W.C4.gameOver=true;} + W.C4.turn=W.C4.turn===1?2:1; + if(W.C4._clk) W.C4._clk.recordMove(side); + renderC4Board(); + if(winner) setTimeout(()=>{if(typeof W.handleMatchGameOver==='function') W.handleMatchGameOver('connect4-win',side);},400); + }; + + function c4DropRow(board,col){for(let r=C4_ROWS-1;r>=0;r--){if(!board[r][col])return r;}return -1;} + function c4CheckWin(board,row,col,side){ + const dirs=[[0,1],[1,0],[1,1],[1,-1]]; + for(const[dr,dc]of dirs){ + const cells=[[row,col]]; + for(let d=1;d<=3;d++){const r=row+dr*d,c=col+dc*d;if(r>=0&&r=0&&c=0&&r=0&&c=4)return cells; + } + return null; + } + + function startC4Clock(matchId,timeSec){ + if(!W.C4)return; + const ms0=timeSec*1000; + W.C4._clk={ + ms:[ms0,ms0],active:1,lastTs:Date.now(),_tick:null, + recordMove(side){ + const now=Date.now(),idx=side===1?0:1; + this.ms[idx]=Math.max(0,this.ms[idx]-(now-this.lastTs)); + this.active=side===1?2:1;this.lastTs=now; + if(fdb()&&matchId)fdb().ref('relay/'+matchId+'/clock').set({ms1:this.ms[0],ms2:this.ms[1],activeSide:this.active,lastMoveTs:now}).catch(()=>{}); + this._localTick(); + }, + _localTick(){ + clearInterval(this._tick);const self=this; + this._tick=setInterval(()=>{ + const idx=self.active===1?0:1; + self.ms[idx]=Math.max(0,self.ms[idx]-1000); + updateC4ClockDisplay(); + if(self.ms[idx]===0){clearInterval(self._tick);const winner=self.active===1?2:1;if(typeof W.handleMatchGameOver==='function')W.handleMatchGameOver('timeout',winner);} + },1000); + }, + destroy(){clearInterval(this._tick);} + }; + W.C4._clk._localTick(); + if(fdb()&&matchId){fdb().ref('relay/'+matchId+'/clock').on('value',snap=>{const c=snap.val();if(!c)return;W.C4._clk.ms[0]=c.ms1!=null?c.ms1:W.C4._clk.ms[0];W.C4._clk.ms[1]=c.ms2!=null?c.ms2:W.C4._clk.ms[1];W.C4._clk.active=c.activeSide||W.C4._clk.active;updateC4ClockDisplay();W.C4._clk._localTick();});} + } + + W.openC4Board=openC4Board; + + /* ═══════════════════════════════════════════════════════════════════════ + * 7. CHECKERS UI + * ═══════════════════════════════════════════════════════════════════════ */ + + function injectCheckersStyles(){ + if(document.getElementById('htp-ck-style-v4'))return; + const s=document.createElement('style');s.id='htp-ck-style-v4'; + s.textContent=` + #htpCkOverlay{position:fixed;inset:0;z-index:9000;display:flex;align-items:center;justify-content:center;background:linear-gradient(160deg,#0d1117,#161b22);overflow:auto;} + .htp-ck-wrap{display:flex;flex-direction:column;align-items:center;width:min(500px,100vw);gap:10px;padding:16px;box-sizing:border-box;} + .htp-ck-header{display:flex;justify-content:space-between;align-items:center;width:100%;} + .htp-ck-title{font-size:18px;font-weight:800;color:#e2e8f0;} + .htp-ck-infobar{display:flex;justify-content:space-between;align-items:center;width:100%;} + .htp-ck-player{display:flex;flex-direction:column;align-items:center;gap:3px;min-width:90px;} + .htp-ck-disc{width:20px;height:20px;border-radius:50%;border:2px solid rgba(255,255,255,.15);} + .htp-ck-disc.red{background:radial-gradient(circle at 35% 35%,#ef9a9a,#c62828);} + .htp-ck-disc.black{background:radial-gradient(circle at 35% 35%,#616161,#212121);} + .htp-ck-pname{font-size:11px;color:#94a3b8;font-weight:600;} + .htp-ck-clock{font-family:monospace;font-size:18px;font-weight:700;padding:3px 10px;border-radius:6px;transition:all .2s;} + .htp-ck-clock.active{background:#374151;color:#e2e8f0;} + .htp-ck-clock.inactive{background:#1e293b;color:#475569;} + .htp-ck-turn{font-size:13px;font-weight:700;text-align:center;min-height:18px;} + .htp-ck-board{display:grid;grid-template-columns:repeat(8,1fr);border:3px solid #30363d;border-radius:6px;overflow:hidden;width:min(480px,96vw);height:min(480px,96vw);box-shadow:0 8px 30px rgba(0,0,0,.6);} + .htp-ck-sq{aspect-ratio:1;display:flex;align-items:center;justify-content:center;cursor:pointer;position:relative;-webkit-tap-highlight-color:transparent;} + .htp-ck-sq.light{background:#f0d9b5;cursor:default;} + .htp-ck-sq.dark{background:#b58863;} + .htp-ck-sq.dark:hover{background:#c99a73;} + .htp-ck-sq.sel{background:#e8d44d !important;} + .htp-ck-sq.valid-move{background:#78a460 !important;} + .htp-ck-sq.valid-move::after{content:'';width:24%;height:24%;border-radius:50%;background:rgba(0,0,0,.2);} + .htp-ck-piece{width:80%;height:80%;border-radius:50%;display:flex;align-items:center;justify-content:center;position:relative;box-shadow:inset 0 -4px 6px rgba(0,0,0,.4),0 3px 8px rgba(0,0,0,.4);} + .htp-ck-piece.red{background:radial-gradient(circle at 35% 35%,#ef9a9a,#c62828);} + .htp-ck-piece.black{background:radial-gradient(circle at 35% 35%,#757575,#212121);} + .htp-ck-piece.king::after{content:'♛';font-size:min(20px,3.5vw);color:rgba(255,255,255,.85);pointer-events:none;} + `; + document.head.appendChild(s); + } + + function openCheckersBoard(opts){ + injectCheckersStyles(); + const old=document.getElementById('htpCkOverlay');if(old)old.remove(); + const isRed=opts.mySide===1; + const myName=isRed?(opts.creatorName||'You'):(opts.joinerName||'You'); + const oppName=isRed?(opts.joinerName||'Opponent'):(opts.creatorName||'Opponent'); + + W.CK={board:initCheckersBoard(),turn:1,mySide:opts.mySide||1,matchId:opts.matchId,gameOver:false,selSq:null,validMoves:[],kings:{}}; + + const wrap=document.createElement('div');wrap.id='htpCkOverlay'; + wrap.innerHTML=` +
+
Checkers
+
+
${isRed?myName+' (You)':oppName}
${fmtSec(opts.timeSec||300)}
+
${opts.mySide===1?'Your turn':"Opponent's turn"}
+
${isRed?oppName:myName+' (You)'}
${fmtSec(opts.timeSec||300)}
+
+
+ +
`; + document.body.appendChild(wrap); + renderCheckersBoard(); + startCkClock(opts.matchId,opts.timeSec||300); + LOG('Checkers board opened — side',opts.mySide,isRed?'(Red)':'(Black)'); + } + + function initCheckersBoard(){ + const b=Array.from({length:8},()=>Array(8).fill(0)); + for(let r=0;r<3;r++)for(let c=0;c<8;c++)if((r+c)%2===1)b[r][c]=3; + for(let r=5;r<8;r++)for(let c=0;c<8;c++)if((r+c)%2===1)b[r][c]=1; + return b; + } + + function renderCheckersBoard(){ + const el=document.getElementById('htpCkBoard');if(!el||!W.CK)return; + const{board,selSq,validMoves,kings,mySide,turn}=W.CK; + let html=''; + for(let r=0;r<8;r++){for(let c=0;c<8;c++){ + const isLight=(r+c)%2===0,val=board[r][c]; + const isSel=selSq&&selSq[0]===r&&selSq[1]===c; + const isValid=validMoves.some(([vr,vc])=>vr===r&&vc===c); + const isKing=kings[r+','+c]; + const cls=['htp-ck-sq',isLight?'light':'dark',isSel?'sel':'',isValid?'valid-move':''].filter(Boolean).join(' '); + let p='';if(val){const color=val===1?'red':'black';p=`
`;} + html+=`
${p}
`; + }} + el.innerHTML=html; + updateCkClockDisplay();updateCkTurnLabel(); + } + + function updateCkTurnLabel(){const lbl=document.getElementById('htpCkTurnLbl');if(!lbl||!W.CK)return;if(W.CK.gameOver){lbl.textContent='Game over';return;}const myTurn=W.CK.turn===W.CK.mySide;lbl.textContent=myTurn?'● Your turn':"○ Opponent's turn";lbl.style.color=myTurn?'#49e8c2':'#64748b';} + function updateCkClockDisplay(){if(!W.CK||!W.CK._clk)return;const clk=W.CK._clk,rEl=document.getElementById('htpCkClockR'),bEl=document.getElementById('htpCkClockB');if(rEl){rEl.textContent=fmtSec(Math.floor(clk.ms[0]/1000));rEl.className='htp-ck-clock '+(clk.active===1?'active':'inactive');}if(bEl){bEl.textContent=fmtSec(Math.floor(clk.ms[1]/1000));bEl.className='htp-ck-clock '+(clk.active===3?'active':'inactive');}} + + W._htpCkClick=function(r,c){ + if(!W.CK||W.CK.gameOver)return;if(W.CK.turn!==W.CK.mySide)return; + const{board,selSq,mySide,kings}=W.CK; + if(selSq&&W.CK.validMoves.some(([vr,vc])=>vr===r&&vc===c)){applyCheckersMove(selSq[0],selSq[1],r,c,mySide,true);return;} + if(board[r][c]===mySide){W.CK.selSq=[r,c];W.CK.validMoves=getCheckersMoves(board,r,c,mySide,kings);renderCheckersBoard();return;} + W.CK.selSq=null;W.CK.validMoves=[];renderCheckersBoard(); + }; + + function applyCheckersMove(fr,fc,tr,tc,side,relay){ + const{board,kings}=W.CK; + board[tr][tc]=side;board[fr][fc]=0; + const mr=(fr+tr)/2,mc=(fc+tc)/2; + if(Number.isInteger(mr)&&board[mr][mc]&&board[mr][mc]!==side){board[mr][mc]=0;delete kings[mr+','+mc];} + if(side===1&&tr===0)kings[tr+','+tc]=true; + if(side===3&&tr===7)kings[tr+','+tc]=true; + if(kings[fr+','+fc]){kings[tr+','+tc]=true;delete kings[fr+','+fc];} + W.CK.selSq=null;W.CK.validMoves=[];W.CK.turn=side===1?3:1; + if(relay){ + if(typeof W.relaySend==='function')W.relaySend({type:'move',game:'checkers',from:[fr,fc],to:[tr,tc],side,ts:Date.now()}); + if(fdb()&&W.CK.matchId)fdb().ref('relay/'+W.CK.matchId+'/moves').push({type:'move',game:'checkers',from:[fr,fc],to:[tr,tc],side,ts:Date.now()}).catch(()=>{}); + if(W.CK._clk)W.CK._clk.recordMove(side); + } + renderCheckersBoard(); + const oppSide=side===1?3:1; + const oppHasPieces=board.some(row=>row.some(v=>v===oppSide)); + if(!oppHasPieces){W.CK.gameOver=true;setTimeout(()=>{if(typeof W.handleMatchGameOver==='function')W.handleMatchGameOver('checkers-win',side);},400);} + } + + W.applyCkMove=function(from,to,side){if(!W.CK||W.CK.gameOver)return;applyCheckersMove(from[0],from[1],to[0],to[1],side,false);if(W.CK._clk)W.CK._clk.recordMove(side);}; + + function getCheckersMoves(board,r,c,side,kings){ + const isKing=kings[r+','+c],dirs=[]; + if(side===1||isKing)dirs.push([-1,-1],[-1,1]); + if(side===3||isKing)dirs.push([1,-1],[1,1]); + const moves=[]; + for(const[dr,dc]of dirs){const nr=r+dr,nc=c+dc;if(nr>=0&&nr<8&&nc>=0&&nc<8){if(!board[nr][nc])moves.push([nr,nc]);else if(board[nr][nc]!==side){const jr=nr+dr,jc=nc+dc;if(jr>=0&&jr<8&&jc>=0&&jc<8&&!board[jr][jc])moves.push([jr,jc]);}}} + return moves; + } + + function startCkClock(matchId,timeSec){ + if(!W.CK)return;const ms0=timeSec*1000; + W.CK._clk={ms:[ms0,ms0],active:1,lastTs:Date.now(),_tick:null, + recordMove(side){const now=Date.now(),idx=side===1?0:1;this.ms[idx]=Math.max(0,this.ms[idx]-(now-this.lastTs));this.active=side===1?3:1;this.lastTs=now;if(fdb()&&matchId)fdb().ref('relay/'+matchId+'/clock').set({ms1:this.ms[0],ms2:this.ms[1],activeSide:this.active,lastMoveTs:now}).catch(()=>{});this._localTick();}, + _localTick(){clearInterval(this._tick);const self=this;this._tick=setInterval(()=>{const idx=self.active===1?0:1;self.ms[idx]=Math.max(0,self.ms[idx]-1000);updateCkClockDisplay();if(self.ms[idx]===0){clearInterval(self._tick);const winner=self.active===1?3:1;if(typeof W.handleMatchGameOver==='function')W.handleMatchGameOver('timeout',winner);}},1000);}, + destroy(){clearInterval(this._tick);} + }; + W.CK._clk._localTick(); + if(fdb()&&matchId)fdb().ref('relay/'+matchId+'/clock').on('value',snap=>{const c=snap.val();if(!c)return;W.CK._clk.ms[0]=c.ms1!=null?c.ms1:W.CK._clk.ms[0];W.CK._clk.ms[1]=c.ms2!=null?c.ms2:W.CK._clk.ms[1];W.CK._clk.active=c.activeSide||W.CK._clk.active;updateCkClockDisplay();W.CK._clk._localTick();}); + } + + W.openCheckersBoard=openCheckersBoard; + + /* ═══════════════════════════════════════════════════════════════════════ + * 7b. TIC-TAC-TOE ENGINE + * ═══════════════════════════════════════════════════════════════════════ */ + var WIN_LINES=[[0,1,2],[3,4,5],[6,7,8],[0,3,6],[1,4,7],[2,5,8],[0,4,8],[2,4,6]]; + + function openTTTBoard(opts){ + var old=document.getElementById('htpTTTOverlay');if(old)old.remove(); + var mySide=opts.mySide||opts.side==='x'?1:opts.side==='o'?2:1; + W.TTT={board:Array(9).fill(0),turn:1,mySide:mySide,matchId:opts.matchId||opts.id,gameOver:false}; + W.TTT.timeSec=opts.timeSec||180; + W.TTT.stakeKas=opts.stakeKas||opts.stake||5; + W.TTT._clk={ms:[W.TTT.timeSec*1000,W.TTT.timeSec*1000],active:1,_iv:null,_localTick:function(){ + clearInterval(W.TTT._clk._iv); + W.TTT._clk._iv=setInterval(function(){ + var s=W.TTT._clk.active;if(!s||W.TTT.gameOver)return; + W.TTT._clk.ms[s-1]-=100; + if(W.TTT._clk.ms[s-1]<=0){W.TTT._clk.ms[s-1]=0;clearInterval(W.TTT._clk._iv); + var winner=s===1?2:1; + W.TTT.gameOver=true; + if(typeof W.relaySend==='function')W.relaySend({type:'gameOver',game:'tictactoe',reason:'timeout',winner:winner}); + if(typeof W.handleMatchGameOver==='function')W.handleMatchGameOver('timeout',winner===W.TTT.mySide?'me':'opponent'); + } + updateTTTClockDisplay(); + },100); + }}; + var wrap=document.createElement('div'); + wrap.id='htpTTTOverlay'; + wrap.style.cssText='position:fixed;inset:0;z-index:99999;background:rgba(1,8,6,0.95);display:flex;align-items:center;justify-content:center;'; + wrap.innerHTML='
' + +'
' + +'Tic-Tac-Toe' + +'' + +'
' + +'
'+(mySide===1?'Your turn':'Opponent\'s turn')+'
' + +'
' + +''+fmtSec(W.TTT.timeSec)+'' + +'vs' + +''+fmtSec(W.TTT.timeSec)+'' + +'
' + +'
' + +'' + +'
'; + document.body.appendChild(wrap); + renderTTTBoard(); + W.TTT._clk._localTick(); + var matchId=W.TTT.matchId; + if(fdb()&&matchId){ + fdb().ref('relay/'+matchId+'/moves').on('child_added',function(snap){ + var msg=snap.val();if(!msg||msg.side===W.TTT.mySide)return; + applyTTTCell(msg.cell,msg.side,false); + }); + fdb().ref('relay/'+matchId+'/clock').on('value',function(snap){ + var c=snap.val();if(!c)return; + if(c.ms1!=null)W.TTT._clk.ms[0]=c.ms1; + if(c.ms2!=null)W.TTT._clk.ms[1]=c.ms2; + if(c.activeSide)W.TTT._clk.active=c.activeSide; + updateTTTClockDisplay();W.TTT._clk._localTick(); + }); + } + LOG('TicTacToe board opened — side',mySide===1?'X':'O'); + } + + function renderTTTBoard(){ + var el=document.getElementById('tttGrid');if(!el)return; + var b=W.TTT.board;var mySide=W.TTT.mySide;var turn=W.TTT.turn; + var h=''; + for(var i=0;i<9;i++){ + var bg='#0f172a';var col='#334155';var txt='';var cursor='default'; + if(b[i]===1){txt='X';col='#49e8c2';bg='rgba(73,232,194,0.08)';} + else if(b[i]===2){txt='O';col='rgba(255,255,255,0.85)';bg='rgba(255,255,255,0.04)';} + else if(!W.TTT.gameOver&&turn===mySide){cursor='pointer';bg='rgba(73,232,194,0.03)';} + h+='
'+txt+'
'; + } + el.innerHTML=h; + var sb=document.getElementById('tttStatusBar'); + if(sb)sb.textContent=W.TTT.gameOver?'Game Over':(turn===mySide?'Your turn':'Opponent\'s turn'); + } + + function updateTTTClockDisplay(){ + var e1=document.getElementById('tttClk1'),e2=document.getElementById('tttClk2'); + if(e1)e1.textContent=fmtSec(Math.ceil(W.TTT._clk.ms[0]/1000)); + if(e2)e2.textContent=fmtSec(Math.ceil(W.TTT._clk.ms[1]/1000)); + } + + function applyTTTCell(cell,side,relay){ + if(W.TTT.gameOver)return; + if(W.TTT.board[cell]!==0)return; + W.TTT.board[cell]=side; + W.TTT.turn=side===1?2:1; + W.TTT._clk.active=W.TTT.turn; + if(relay!==false&&fdb()&&W.TTT.matchId){ + fdb().ref('relay/'+W.TTT.matchId+'/moves').push({type:'move',game:'tictactoe',cell:cell,side:side,ts:Date.now()}).catch(function(){}); + fdb().ref('relay/'+W.TTT.matchId+'/clock').set({ms1:W.TTT._clk.ms[0],ms2:W.TTT._clk.ms[1],activeSide:W.TTT._clk.active}).catch(function(){}); + } + W.TTT._clk._localTick(); + var win=checkTTTWin(W.TTT.board); + if(win){ + W.TTT.gameOver=true;clearInterval(W.TTT._clk._iv); + renderTTTBoard(); + if(typeof W.handleMatchGameOver==='function')W.handleMatchGameOver(win.type==='draw'?'draw':'ttt-win',win.winner===W.TTT.mySide?'me':'opponent'); + if(typeof W.settleMatchPayout==='function'){ + var match=W.matchLobby&&W.matchLobby.activeMatch; + if(match){ + var wAddr=win.type==='draw'?null:(win.winner===1?match.creator:match.opponent); + W.settleMatchPayout(W.TTT.matchId,wAddr,win.type==='draw',match.creator,match.opponent); + } + } + return; + } + // Check draw (all cells filled) + if(W.TTT.board.every(function(c){return c!==0;})){ + W.TTT.gameOver=true;clearInterval(W.TTT._clk._iv); + renderTTTBoard(); + if(typeof W.handleMatchGameOver==='function')W.handleMatchGameOver('draw','draw'); + if(typeof W.settleMatchPayout==='function'){ + var match=W.matchLobby&&W.matchLobby.activeMatch; + if(match)W.settleMatchPayout(W.TTT.matchId,null,true,match.creator,match.opponent); + } + return; + } + renderTTTBoard(); + } + + function checkTTTWin(board){ + for(var i=0;i{openChessBoard({matchId,myColor:W._htpMyColor||(match&&match.creator===myPlayerId()?'w':'b'),timeSec,stakeKas:parseFloat(match&&(match.stakeKas||match.stake)||5),creatorName:match?(match.creator||'').slice(0,8):'White',joinerName:match?(match.opponent||'').slice(0,8):'Black'});},300);}return result;}; + W.playMatch._v4Patched=true; + } + } + + /* Resign / Draw */ + W.resignMatch=function(){ + if(!confirm('Resign and forfeit? You will lose the stake.'))return; + const match=activeMatch();const matchId=match?match.id:null; + if(typeof W.relaySend==='function')W.relaySend({type:'resign',reason:'resign',game:match?match.game:'chess'}); + if(fdb()&&matchId)fdb().ref('relay/'+matchId+'/result').set({winner:'opponent',reason:'resign',ts:Date.now(),by:myPlayerId()}).catch(()=>{}); + if(typeof W.handleMatchGameOver==='function')W.handleMatchGameOver('resign','opponent'); + }; + W.offerDraw=function(){if(!confirm('Offer a draw?'))return;if(typeof W.relaySend==='function')W.relaySend({type:'drawOffer'});if(W.showToast)W.showToast('Draw offer sent','info');}; + + /* ═══════════════════════════════════════════════════════════════════════ + * HELPERS + * ═══════════════════════════════════════════════════════════════════════ */ + function fmtSec(s){if(isNaN(s)||s<0)s=0;const m=Math.floor(s/60);return m+':'+String(s%60).padStart(2,'0');} + + /* ═══════════════════════════════════════════════════════════════════════ + * BOOT + * ═══════════════════════════════════════════════════════════════════════ */ + let _installed=false; + function install(){ + if(_installed)return; + if(!W.handleMatchGameOver){setTimeout(install,300);return;} + _installed=true; + patchHandleMatchGameOver(); + patchRelayHandler(); + patchBoardLaunchers(); + LOG('✓ AutoPayout ✓ Chess v4 ✓ Connect4 v4 ✓ Checkers v4 ✓ Covenant guard ✓ Idempotent settlement'); + LOG('Treasury:',W.HTPFee?W.HTPFee.treasuryAddress():'(HTPFee loading)'); + } + + if(typeof W.whenWasmReady==='function')W.whenWasmReady(install); + if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',()=>setTimeout(install,1500));}else{setTimeout(install,1500);} + setTimeout(install,3000);setTimeout(install,6000); + W.addEventListener('htpWasmReady',install); + W.addEventListener('htp:wasm:ready',install); + +})(window); diff --git a/public/htp-blockdag-viz.js b/public/htp-blockdag-viz.js new file mode 100644 index 00000000..c43907f8 --- /dev/null +++ b/public/htp-blockdag-viz.js @@ -0,0 +1,753 @@ +/** + * htp-blockdag-viz.js - Live Kaspa BlockDAG Visualization (Canvas-based) + * + * Renders real block data from TN12 on HTML Canvas elements. + * Polls blockdag stats every 5s, block data every 3s. + */ +(function(window) { + 'use strict'; + + var STATS_INTERVAL = 5000; + var BLOCKS_INTERVAL = 3000; + var STATS_URL = 'https://api-tn12.kaspa.org/info/blockdag'; + // blocks endpoint requires lowHash; we fetch tip first, then use it + var BLOCKS_BASE = 'https://api-tn12.kaspa.org/blocks'; + + var BLOCK_W = 18; + var BLOCK_H = 12; + var BLOCK_R = 3; + var PRIMARY = '#49e8c2'; + var PRIMARY_GLOW = 'rgba(73,232,194,0.6)'; + var BLOCK_FILL = '#0a1a14'; + var BG = '#010806'; + var LINE_COLOR = 'rgba(73,232,194,0.25)'; + var LABEL_COLOR = 'rgba(73,232,194,0.45)'; + + // ── KASPA BLOCKDAG BACKGROUND ───────────────────────────────────────── + // Three-layer deep-space DAG: + // Layer 1 — Starfield : tiny pale dots moving at 20% of DAG speed (parallax) + // Layer 2 — DAG network: organic circles + bezier edges, slow scroll + // Layer 3 — Real blocks: brighter nodes from live TN12 API with real edges + // Edge fade done per-node with smoothstep() — no CSS mask needed, zero hard lines. + var _bgScrollX = 0; + var _bgNodes = []; // { id, absX, y, alpha, isChain, isReal, parentIds[] } + var _bgNodeById = {}; + var _bgNextId = 0; + var _bgSpawnNext = 0; + var _bgStars = []; // parallax starfield + var _bgStarsOk = false; + var _BG_R = 5.2; // base node radius + var _SCROLL_SPEED = 0.85; // DAG scroll speed + var _STAR_SPEED = 0.17; // stars scroll at 20% of DAG (parallax depth) + var _SPAWN_GAP = 48; // px between clusters → denser DAG everywhere + var _bgTime = 0; + var _bgH = 600; + var _bgW = 1400; + var _bgRealByHash = {}; + + function _bgRand(a, b) { return a + Math.random() * (b - a); } + + // Cubic smoothstep — produces a perfectly seamless S-curve fade, no hard line + function _bgSmooth(x, lo, hi) { + var t = Math.max(0, Math.min(1, (x - lo) / (hi - lo))); + return t * t * (3 - 2 * t); + } + // Edge fade: 5% hair-thin zone at each edge — eliminates visible density gradient + function _bgFade(bx, w) { + var z = w * 0.05; + return _bgSmooth(bx, 0, z) * _bgSmooth(w - bx, 0, z); + } + + function _bgInitStars(w, h) { + _bgStars = []; + for (var i = 0; i < 140; i++) { + _bgStars.push({ + absX: _bgRand(0, w * 1.6), + y: _bgRand(0, h), + r: Math.random() < 0.72 ? 0.6 : 1.2, + a: _bgRand(0.06, 0.22) + }); + } + } + + function _bgSpawnCluster(absX) { + var count = Math.random() > 0.35 ? (Math.random() > 0.68 ? 3 : 2) : 1; + var h = _bgH; + var usedY = []; + for (var n = 0; n < count; n++) { + var y, tries = 0; + do { + y = _bgRand(h * 0.06, h * 0.94); + tries++; + } while (usedY.some(function(uy) { return Math.abs(uy - y) < h * 0.12; }) && tries < 20); + usedY.push(y); + + var node = { + id: _bgNextId++, + absX: absX + _bgRand(-10, 10), + y: y, + alpha: _bgRand(0.32, 0.62), + isChain: Math.random() > 0.55, + isReal: false, + parentIds: [] + }; + + var searchMin = absX - _SPAWN_GAP * 3.5; + var cands = _bgNodes.filter(function(b) { + return b.absX < absX - 8 && b.absX > searchMin; + }).sort(function(a, b) { + return Math.abs(a.y - y) - Math.abs(b.y - y); + }); + var nP = Math.min(1 + (Math.random() > 0.48 ? 1 : 0), cands.length); + for (var p = 0; p < nP; p++) node.parentIds.push(cands[p].id); + + _bgNodes.push(node); + _bgNodeById[node.id] = node; + } + } + + function initLaneDAG(w, h) { + _bgScrollX = 0; + _bgNodes = []; + _bgNodeById = {}; + _bgRealByHash = {}; + _bgNextId = 0; + _bgH = h; + _bgW = w; + if (!_bgStarsOk) { _bgInitStars(w, h); _bgStarsOk = true; } + // Spawn from off-screen left so the canvas is fully populated at load time + var x = -_SPAWN_GAP * 3; + while (x < w + _SPAWN_GAP * 7) { + _bgSpawnCluster(x); + x += _SPAWN_GAP * _bgRand(0.65, 1.38); + } + _bgSpawnNext = x; + } + + // Inject real API blocks into background visualization as prominent teal nodes + function _injectRealBlocks(blocks) { + if (!blocks || !blocks.length) return; + var h = _bgH; + var newBlocks = blocks.filter(function(b) { return b.hash && !_bgRealByHash[b.hash]; }); + if (!newBlocks.length) return; + + // Sort by blueScore ascending (oldest → newest) + newBlocks.sort(function(a, b) { return (a.blueScore||0) - (b.blueScore||0); }); + + var minScore = newBlocks[0].blueScore || 0; + var maxScore = newBlocks[newBlocks.length - 1].blueScore || minScore; + var scoreRange = maxScore - minScore || 1; + // Map score range to a pixel span that ends at _bgSpawnNext + var span = Math.min(scoreRange * 3, window.innerWidth * 0.8); + // purge stale real-node tracking for old hash refs + Object.keys(_bgRealByHash).forEach(function(hash) { + var node = _bgRealByHash[hash]; + if (!node || node.absX < _bgScrollX - _SPAWN_GAP * 12) { delete _bgRealByHash[hash]; } + }); + + newBlocks.forEach(function(b) { + var scoreFrac = (b.blueScore - minScore) / scoreRange; + var absX = _bgSpawnNext - span + scoreFrac * span; + // Y from hash bits — stable and organic + var hashBits = parseInt(b.hash.substring(0, 6), 16) || 0; + var y = h * 0.08 + (hashBits % 1000) / 1000 * h * 0.84; + + var node = { + id: _bgNextId++, + absX: absX, + y: y, + alpha: 0.62, + isChain: true, + isReal: true, + hash: b.hash, + realParents: b.parents || [], + parentIds: [] + }; + _bgNodes.push(node); + _bgNodeById[node.id] = node; + _bgRealByHash[b.hash] = node; + }); + + // Wire real parent edges using actual parent hashes + _bgNodes.filter(function(n) { return n.isReal && n.realParents && n.realParents.length; }).forEach(function(n) { + n.realParents.forEach(function(ph) { + var pNode = _bgRealByHash[ph]; + if (pNode && n.parentIds.indexOf(pNode.id) === -1) { + n.parentIds.push(pNode.id); + // also remove any synthetic parentIds that conflict + } + }); + }); + + // Advance spawn cursor past the new real blocks + _bgSpawnNext = Math.max(_bgSpawnNext, _bgSpawnNext + _SPAWN_GAP); + } + + // Write live Kaspa data to Firebase Realtime DB + function _syncFirebase(stats, blocks) { + try { + var fb = window.firebase; + if (!fb || !fb.apps || !fb.apps.length) return; + var db = fb.database(); + if (stats) { + db.ref('kaspa/stats').set({ + blockCount: stats.blockCount || 0, + daaScore: stats.virtualDaaScore || 0, + difficulty: stats.difficulty || 0, + bps: 10, + ts: Date.now() + }); + } + if (blocks && blocks.length) { + var recent = blocks.slice(-15).map(function(b) { + return { hash: b.hash, blueScore: b.blueScore || 0, parents: (b.parents||[]).slice(0,3), ts: b.timestamp || 0 }; + }); + db.ref('kaspa/latestBlocks').set(recent); + db.ref('kaspa/latestHash').set(blocks[blocks.length - 1].hash); + } + } catch(e) { /* firebase not ready yet */ } + } + + function drawBackgroundMode(ctx, w, h) { + ctx.clearRect(0, 0, w, h); + _bgTime += 0.016; + _bgScrollX += _SCROLL_SPEED; + _bgH = h; + _bgW = w; + + // Spawn ahead + while (_bgSpawnNext - _bgScrollX < w + _SPAWN_GAP * 7) { + _bgSpawnCluster(_bgSpawnNext); + _bgSpawnNext += _SPAWN_GAP * _bgRand(0.65, 1.38); + } + + // Prune off-screen left + var cutoff = _bgScrollX - _SPAWN_GAP * 9; + _bgNodes = _bgNodes.filter(function(b) { + if (b.absX < cutoff) { + delete _bgNodeById[b.id]; + if (b.isReal && b.hash) delete _bgRealByHash[b.hash]; + return false; + } + return true; + }); + + ctx.save(); + ctx.lineCap = 'round'; + + // ── Layer 1: Parallax starfield ────────────────────────────── + // Stars scroll at 20% of DAG speed → creates depth illusion + var starScroll = _bgScrollX * 0.20; + var starWrap = w * 1.6; + _bgStars.forEach(function(s) { + var sx = ((s.absX - starScroll) % starWrap + starWrap) % starWrap; + if (sx > w) return; + var ef = _bgFade(sx, w); + if (ef < 0.005) return; + ctx.globalAlpha = s.a * ef; + ctx.fillStyle = 'rgba(210,255,240,1)'; + ctx.beginPath(); + ctx.arc(sx, s.y, s.r, 0, Math.PI * 2); + ctx.fill(); + }); + + // ── Layer 2: DAG edges ─────────────────────────────────────── + _bgNodes.forEach(function(b) { + var bx = b.absX - _bgScrollX; + var bef = _bgFade(bx, w); + if (bef < 0.005) return; + + b.parentIds.forEach(function(pid) { + var p = _bgNodeById[pid]; + if (!p) return; + var px = p.absX - _bgScrollX; + var pef = _bgFade(px, w); + var ef = Math.min(bef, pef); + if (ef < 0.005) return; + + var isHot = (b.isChain || b.isReal) && (p.isChain || p.isReal); + var dx = bx - px; + var cp = dx * 0.42; + ctx.globalAlpha = ef * (isHot ? 0.38 : 0.16); + ctx.strokeStyle = '#49e8c2'; + ctx.lineWidth = isHot ? 1.1 : 0.65; + ctx.beginPath(); + ctx.moveTo(px, b.y > p.y ? p.y : p.y); + ctx.moveTo(px, p.y); + ctx.bezierCurveTo(px + cp, p.y, bx - cp, b.y, bx, b.y); + ctx.stroke(); + }); + }); + + // ── Layer 3: Nodes ─────────────────────────────────────────── + _bgNodes.forEach(function(b) { + var bx = b.absX - _bgScrollX; + if (bx < -12 || bx > w + 12) return; + var ef = _bgFade(bx, w); + if (ef < 0.005) return; + + var a = b.alpha * ef; + var isLatest = b.isReal && b.hash === _latestHash; + + if (b.isReal) { + // ── Real API block: larger, fully opaque teal dot ──────── + var rr = isLatest ? _BG_R + 2.8 : _BG_R + 1.2; + + // Outer glow halo for latest + if (isLatest) { + var pulse = 0.12 + 0.08 * Math.sin(_bgTime * 1.7); + ctx.globalAlpha = pulse * ef; + ctx.fillStyle = 'rgba(73,232,194,0.35)'; + ctx.beginPath(); + ctx.arc(bx, b.y, rr + 8, 0, Math.PI * 2); + ctx.fill(); + } + + // Filled dot + ctx.globalAlpha = a * 0.92; + ctx.fillStyle = isLatest ? '#49e8c2' : 'rgba(73,232,194,0.82)'; + ctx.beginPath(); + ctx.arc(bx, b.y, rr, 0, Math.PI * 2); + ctx.fill(); + + // Ring + ctx.globalAlpha = a * 0.48; + ctx.strokeStyle = '#49e8c2'; + ctx.lineWidth = 1; + ctx.beginPath(); + ctx.arc(bx, b.y, rr + 2.8, 0, Math.PI * 2); + ctx.stroke(); + + // Hash label on latest real block + if (isLatest) { + ctx.globalAlpha = ef * 0.50; + ctx.fillStyle = '#49e8c2'; + ctx.font = '7px JetBrains Mono, monospace'; + ctx.textAlign = 'center'; + ctx.textBaseline = 'bottom'; + ctx.fillText(b.hash.substring(0, 6) + '..' + b.hash.slice(-4), bx, b.y - rr - 4); + } + + } else { + // ── Synthetic ambient node ─────────────────────────────── + var r = b.isChain ? _BG_R + 0.8 : _BG_R; + + // Draw filled node with rounded rect instead of circle for kgi-like look + ctx.globalAlpha = a * (b.isChain ? 0.72 : 0.38); + ctx.fillStyle = 'rgba(73,232,194,0.18)'; + var ns = r * 2; + ctx.beginPath(); + if (ctx.roundRect) { ctx.roundRect(bx - r, b.y - r, ns, ns, 2); } + else { ctx.arc(bx, b.y, r, 0, Math.PI * 2); } + ctx.fill(); + + ctx.globalAlpha = a * (b.isChain ? 0.85 : 0.50); + ctx.strokeStyle = '#49e8c2'; + ctx.lineWidth = b.isChain ? 1.1 : 0.75; + ctx.stroke(); + } + }); + + ctx.restore(); + } + + var _blocks = []; + var _blockMap = {}; + var _latestHash = null; + var _statsTimer = null; + var _blocksTimer = null; + var _animFrames = []; + var _tooltip = null; + var _connected = false; + + // ── Stats Polling ────────────────────────────────────────────────────── + + function fetchStats() { + fetch(STATS_URL).then(function(r) { return r.json(); }).then(function(data) { + _connected = true; + var el; + el = document.getElementById('statBlockHeight') || document.getElementById('kaspaBlockHeight') || document.getElementById('ks-block-height'); + if (el) el.textContent = (data.blockCount || 0).toLocaleString(); + + el = document.getElementById('statDaaScore') || document.getElementById('kaspaDaaScore') || document.getElementById('ks-daa-score'); + if (el) el.textContent = (data.virtualDaaScore || 0).toLocaleString(); + + el = document.getElementById('statHashrate') || document.getElementById('kaspaHashrate') || document.getElementById('ks-hashrate'); + if (el) { + var h = computeHashrate(data.difficulty || 0); + el.textContent = h; + } + + el = document.getElementById('statBlockRate') || document.getElementById('kaspaBlockRate') || document.getElementById('ks-block-rate'); + if (el) el.textContent = '10 bps'; + + el = document.getElementById('statFee') || document.getElementById('kaspaFee') || document.getElementById('ks-fee'); + if (el) el.textContent = '~0.0001 KAS'; + _syncFirebase(data, null); + }).catch(function() { + _connected = false; + }); + } + + function computeHashrate(difficulty) { + if (!difficulty) return '--'; + var hr = difficulty * Math.pow(2, 32) / 1; + if (hr >= 1e18) return (hr / 1e18).toFixed(2) + ' EH/s'; + if (hr >= 1e15) return (hr / 1e15).toFixed(2) + ' PH/s'; + if (hr >= 1e12) return (hr / 1e12).toFixed(2) + ' TH/s'; + if (hr >= 1e9) return (hr / 1e9).toFixed(2) + ' GH/s'; + if (hr >= 1e6) return (hr / 1e6).toFixed(2) + ' MH/s'; + return hr.toFixed(0) + ' H/s'; + } + + // ── Block Polling ────────────────────────────────────────────────────── + + function fetchBlocks() { + // Step 1: get tip hash from blockdag info + fetch(STATS_URL).then(function(r) { return r.json(); }).then(function(info) { + var tipHash = info && info.tipHashes && info.tipHashes[0]; + if (!tipHash && info && info.sink) tipHash = info.sink; + if (!tipHash) return; + // Step 2: use tip as lowHash to get blocks + var url = BLOCKS_BASE + '?lowHash=' + tipHash + '&includeBlocks=true&limit=40'; + return fetch(url).then(function(r) { return r.json(); }); + }).then(function(data) { + if (!data || !data.blocks || !Array.isArray(data.blocks)) return; + _connected = true; + var incoming = data.blocks.map(function(b) { + var hdr = b.header || {}; + return { + hash: hdr.hash || '', + parents: (hdr.parentsByLevel && hdr.parentsByLevel[0]) ? hdr.parentsByLevel[0] : [], + blueScore: hdr.blueScore || 0, + timestamp: parseInt(hdr.timestamp, 10) || 0, + slideIn: 0 + }; + }).filter(function(b) { return b.hash; }); + + // Sort by timestamp ascending (oldest first) + incoming.sort(function(a, b) { return a.timestamp - b.timestamp; }); + + // Mark new blocks for slide-in animation + var oldMap = _blockMap; + _blockMap = {}; + incoming.forEach(function(b) { + if (!oldMap[b.hash]) { + b.slideIn = 1; // animate from right + } else { + b.slideIn = 0; + } + _blockMap[b.hash] = b; + }); + + _blocks = incoming; + if (_blocks.length > 0) { + _latestHash = _blocks[_blocks.length - 1].hash; + } + _injectRealBlocks(_blocks); + _syncFirebase(null, _blocks); + }).catch(function() { + _connected = false; + }); + } + + // ── Canvas Rendering ─────────────────────────────────────────────────── + + function drawDAG(ctx, w, h, isBackground) { + if (isBackground) { + // Full-page background: transparent, animated particles + live blocks + drawBackgroundMode(ctx, w, h); + return; + } + ctx.clearRect(0, 0, w, h); + ctx.fillStyle = BG; + ctx.fillRect(0, 0, w, h); + + if (!_blocks.length) { + drawConnecting(ctx, w, h); + return; + } + + // Label + ctx.save(); + ctx.fillStyle = LABEL_COLOR; + ctx.font = 'bold 10px Inter, sans-serif'; + ctx.textAlign = 'left'; + ctx.textBaseline = 'top'; + ctx.fillText('LIVE KASPA BLOCKDAG', 10, 8); + ctx.restore(); + + var padding = 30; + var usableW = w - padding * 2; + var usableH = h - padding * 2; + var n = _blocks.length; + var spacingX = n > 1 ? usableW / (n - 1) : 0; + var centerY = padding + usableH / 2; + + // Build position lookup for parent lines + var posMap = {}; + _blocks.forEach(function(b, i) { + var slideOffset = b.slideIn * 40; + b.slideIn = Math.max(0, b.slideIn - 0.08); + var bx = padding + i * spacingX + slideOffset; + // Stagger Y slightly based on hash to show DAG structure + var yOff = ((parseInt(b.hash.substring(0, 4), 16) || 0) % 5 - 2) * (BLOCK_H * 0.8); + var by = centerY + yOff - BLOCK_H / 2; + posMap[b.hash] = { x: bx, y: by }; + }); + + // Draw parent lines + ctx.strokeStyle = LINE_COLOR; + ctx.lineWidth = 1; + _blocks.forEach(function(b) { + var pos = posMap[b.hash]; + if (!pos) return; + b.parents.forEach(function(ph) { + var ppos = posMap[ph]; + if (!ppos) return; + ctx.beginPath(); + ctx.moveTo(ppos.x + BLOCK_W, ppos.y + BLOCK_H / 2); + ctx.lineTo(pos.x, pos.y + BLOCK_H / 2); + ctx.stroke(); + }); + }); + + // Draw blocks + _blocks.forEach(function(b) { + var pos = posMap[b.hash]; + if (!pos) return; + var isLatest = b.hash === _latestHash; + + // Glow for latest + if (isLatest) { + var pulse = 4 + 2 * Math.sin(Date.now() / 300); + ctx.save(); + ctx.shadowColor = PRIMARY_GLOW; + ctx.shadowBlur = pulse; + ctx.fillStyle = PRIMARY_GLOW; + roundRect(ctx, pos.x - 2, pos.y - 2, BLOCK_W + 4, BLOCK_H + 4, BLOCK_R + 1); + ctx.fill(); + ctx.restore(); + } + + // Block rect + ctx.fillStyle = isLatest ? PRIMARY_GLOW : BLOCK_FILL; + ctx.strokeStyle = PRIMARY; + ctx.lineWidth = isLatest ? 2 : 1; + roundRect(ctx, pos.x, pos.y, BLOCK_W, BLOCK_H, BLOCK_R); + ctx.fill(); + ctx.stroke(); + + // Hash label on latest + if (isLatest) { + ctx.save(); + ctx.fillStyle = '#e2e8f0'; + ctx.font = '8px JetBrains Mono, monospace'; + ctx.textAlign = 'center'; + ctx.textBaseline = 'top'; + var label = b.hash.substring(0, 6) + '...' + b.hash.slice(-4); + ctx.fillText(label, pos.x + BLOCK_W / 2, pos.y + BLOCK_H + 4); + ctx.restore(); + } + }); + } + + function drawConnecting(ctx, w, h) { + var t = Date.now() / 1000; + ctx.save(); + ctx.font = '13px Inter, sans-serif'; + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; + + // Shimmer effect + var shimmer = 0.4 + 0.3 * Math.sin(t * 2); + ctx.fillStyle = 'rgba(226,232,240,' + shimmer.toFixed(2) + ')'; + ctx.fillText('Connecting to Kaspa network...', w / 2, h / 2); + ctx.restore(); + } + + function roundRect(ctx, x, y, w, h, r) { + ctx.beginPath(); + if (ctx.roundRect) { + ctx.roundRect(x, y, w, h, r); + } else { + ctx.moveTo(x + r, y); + ctx.arcTo(x + w, y, x + w, y + h, r); + ctx.arcTo(x + w, y + h, x, y + h, r); + ctx.arcTo(x, y + h, x, y, r); + ctx.arcTo(x, y, x + w, y, r); + ctx.closePath(); + } + } + + // ── Tooltip ──────────────────────────────────────────────────────────── + + function setupTooltip(canvas) { + canvas.addEventListener('click', function(e) { + var rect = canvas.getBoundingClientRect(); + var scaleX = canvas.width / rect.width; + var scaleY = canvas.height / rect.height; + var mx = (e.clientX - rect.left) * scaleX; + var my = (e.clientY - rect.top) * scaleY; + + var padding = 30; + var usableW = canvas.width - padding * 2; + var n = _blocks.length; + var spacingX = n > 1 ? usableW / (n - 1) : 0; + var centerY = padding + (canvas.height - padding * 2) / 2; + + var hit = null; + _blocks.forEach(function(b, i) { + var bx = padding + i * spacingX; + var yOff = ((parseInt(b.hash.substring(0, 4), 16) || 0) % 5 - 2) * (BLOCK_H * 0.8); + var by = centerY + yOff - BLOCK_H / 2; + if (mx >= bx && mx <= bx + BLOCK_W && my >= by && my <= by + BLOCK_H) { + hit = b; + } + }); + + removeTooltip(); + if (hit) { + showTooltip(e.clientX, e.clientY, hit); + } + }); + } + + function showTooltip(px, py, block) { + removeTooltip(); + _tooltip = document.createElement('div'); + _tooltip.style.cssText = 'position:fixed;z-index:1000;background:#1a2235;border:1px solid rgba(79,152,163,0.4);color:#e2e8f0;padding:10px 14px;border-radius:8px;font-family:JetBrains Mono,monospace;font-size:12px;line-height:1.6;pointer-events:none;max-width:320px;'; + _tooltip.style.left = px + 12 + 'px'; + _tooltip.style.top = py + 12 + 'px'; + var ts = block.timestamp ? new Date(block.timestamp * 1000).toLocaleString() : '--'; + _tooltip.innerHTML = + '
Block
' + + '
Hash: ' + block.hash.substring(0, 12) + '...' + block.hash.slice(-6) + '
' + + '
Timestamp: ' + ts + '
' + + '
Parents: ' + block.parents.length + '
' + + '
Blue Score: ' + (block.blueScore || '--') + '
'; + document.body.appendChild(_tooltip); + } + + function removeTooltip() { + if (_tooltip) { + _tooltip.remove(); + _tooltip = null; + } + } + + // ── Animation Loop ───────────────────────────────────────────────────── + + function startLoop(canvas, isBackground) { + var ctx = canvas.getContext('2d'); + if (!ctx) return; + + // Init lane-based DAG once for background mode + if (isBackground) { + var r = canvas.getBoundingClientRect(); + initLaneDAG(r.width || window.innerWidth, r.height || window.innerHeight); + } + + function tick() { + var dpr = window.devicePixelRatio || 1; + var rect = canvas.getBoundingClientRect(); + var needsRescale = canvas.width !== rect.width * dpr || canvas.height !== rect.height * dpr; + if (needsRescale) { + canvas.width = rect.width * dpr; + canvas.height = rect.height * dpr; + ctx.scale(dpr, dpr); + if (isBackground) initLaneDAG(rect.width, rect.height); + } + drawDAG(ctx, rect.width, rect.height, isBackground); + var id = requestAnimationFrame(tick); + canvas._animId = id; + } + + tick(); + _animFrames.push(canvas); + } + + function stopLoop(canvas) { + if (canvas && canvas._animId) { + cancelAnimationFrame(canvas._animId); + canvas._animId = null; + } + } + + // ── Resize Handler ───────────────────────────────────────────────────── + + function handleResize() { + _animFrames.forEach(function(canvas) { + if (!canvas || !canvas.parentElement) return; + var container = canvas.parentElement; + canvas.style.width = container.clientWidth + 'px'; + }); + } + + // ── Init ─────────────────────────────────────────────────────────────── + + function init() { + // dagCanvas background is fully managed by inline script in index.html + // This module only handles stats/block polling and optional panel canvases + + // Panel canvases — solid dark background with DAG detail + var mainCanvas = document.getElementById('dagCanvasFull') || document.getElementById('blockdag-canvas'); + var miniCanvas = document.getElementById('dagCanvasMini') || document.getElementById('overview-dag-canvas'); + + if (mainCanvas) { + mainCanvas.style.width = '100%'; + mainCanvas.style.display = 'block'; + startLoop(mainCanvas, false); + setupTooltip(mainCanvas); + } + + if (miniCanvas) { + miniCanvas.style.width = '100%'; + miniCanvas.style.display = 'block'; + startLoop(miniCanvas, false); + setupTooltip(miniCanvas); + } + + // Start polling + fetchStats(); + fetchBlocks(); + _statsTimer = setInterval(fetchStats, STATS_INTERVAL); + _blocksTimer = setInterval(fetchBlocks, BLOCKS_INTERVAL); + + window.addEventListener('resize', handleResize); + + // Close tooltip on scroll/click elsewhere + document.addEventListener('scroll', removeTooltip, true); + + console.log('[BlockDAG] Initialized'); + } + + // ── Public API ───────────────────────────────────────────────────────── + + window.htpBlockDAG = { + init: init, + startPolling: function() { + if (!_statsTimer) _statsTimer = setInterval(fetchStats, STATS_INTERVAL); + if (!_blocksTimer) _blocksTimer = setInterval(fetchBlocks, BLOCKS_INTERVAL); + }, + stopPolling: function() { + clearInterval(_statsTimer); _statsTimer = null; + clearInterval(_blocksTimer); _blocksTimer = null; + _animFrames.forEach(stopLoop); + _animFrames = []; + }, + getLatestBlockHash: function() { return _latestHash; }, + getBlockCount: function() { return _blocks.length; }, + isConnected: function() { return _connected; } + }; + + // Auto-init on DOMContentLoaded + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', init); + } else { + init(); + } + + console.log('[BlockDAG] Module loaded'); + +})(window); diff --git a/public/htp-board-engine.js b/public/htp-board-engine.js new file mode 100644 index 00000000..d10afd1b --- /dev/null +++ b/public/htp-board-engine.js @@ -0,0 +1,726 @@ +/** + * htp-board-engine.js — HTP Board Engine v2 + * Game Engine Coordinator: detects game type, initializes the correct board, + * manages turn switching, clocks, move relay, and game-end detection. + * + * Works with the new index.html DOM structure: + * #game-board-area > .game-board-container + * #clock-top, #clock-bottom + * #chess-board, #c4-board, #checkers-board + * .game-controls (Draw / Resign) + * + * LOAD ORDER: after firebase, chess.min.js, and all htp-*.js modules + */ +;(function () { + 'use strict'; + + const LOG = (...a) => console.log('[HTP Board Engine v2]', ...a); + const ERR = (...a) => console.error('[HTP Board Engine v2]', ...a); + + // ───────────────────────────────────────────────────────────────────────── + // HELPERS + // ───────────────────────────────────────────────────────────────────────── + + /** Format seconds as M:SS */ + function fmtTime(s) { + if (s <= 0) return '0:00'; + const m = Math.floor(s / 60); + const sec = String(Math.floor(s % 60)).padStart(2, '0'); + return `${m}:${sec}`; + } + + /** Parse "5+0", "10+5", "5", "90" into { minutes, increment } */ + function parseTimeControl(str) { + const parts = String(str || '5+0').split('+'); + const minutes = parseFloat(parts[0]) || 5; + const increment = parseFloat(parts[1]) || 0; + return { minutes, increment }; + } + + // ───────────────────────────────────────────────────────────────────────── + // 0. STAKE PATCHES — fix hard-coded 5 KAS from htp-multi-fix.js + // ───────────────────────────────────────────────────────────────────────── + + function patchJoinAmount() { + const orig = window.joinLobbyMatch; + if (!orig || orig._boardEnginePatched) return; + + window.joinLobbyMatch = async function (matchId) { + const m = resolveMatch(matchId); + if (m) { + const stakeKas = parseFloat(m.stakeKas || m.stake || m.escrowKas || 0); + const stakeSompi = Math.round(stakeKas * 1e8); + if (stakeSompi > 0) { + m.stakeKas = stakeKas; + m.stakeSompi = stakeSompi; + m.amount = stakeSompi; + LOG(`stake normalised: ${stakeKas} KAS -> ${stakeSompi} sompi`); + } + } + return orig.call(this, matchId); + }; + window.joinLobbyMatch._boardEnginePatched = true; + LOG('joinLobbyMatch stake patch installed'); + } + + function patchSendTxAmount() { + const orig = window.htpSendTx; + if (!orig || orig._boardEnginePatched) return; + + window.htpSendTx = async function (toOrOpts, amountRaw, opts) { + let to, amountSompi, extraOpts; + + if (toOrOpts && typeof toOrOpts === 'object' && !Array.isArray(toOrOpts)) { + to = toOrOpts.to || toOrOpts.address || toOrOpts.recipient; + amountRaw = toOrOpts.amount ?? toOrOpts.sompi ?? toOrOpts.value ?? amountRaw; + extraOpts = toOrOpts; + } else { + to = toOrOpts; + extraOpts = opts || {}; + } + + // Resolve amount: KAS float -> sompi, or pass-through if already sompi + if (typeof amountRaw === 'number') { + amountSompi = amountRaw < 1e7 ? Math.round(amountRaw * 1e8) : Math.round(amountRaw); + } else if (typeof amountRaw === 'bigint') { + amountSompi = Number(amountRaw); + } else if (typeof amountRaw === 'string') { + amountSompi = parseInt(amountRaw, 10); + } + + // Last resort: recover from match store via matchId + if (!amountSompi || isNaN(amountSompi)) { + const mid = extraOpts.matchId; + if (mid) { + const rec = resolveMatch(mid); + if (rec) { + const kas = parseFloat(rec.stakeKas || rec.stake || 0); + if (kas > 0) amountSompi = Math.round(kas * 1e8); + } + } + } + + // Also pull from opts fields + if (!amountSompi || isNaN(amountSompi)) { + const v = extraOpts.amount ?? extraOpts.sompi ?? extraOpts.stake; + if (v) { + const n = parseFloat(v); + amountSompi = n < 1e7 ? Math.round(n * 1e8) : Math.round(n); + } + } + + if (!amountSompi || isNaN(amountSompi) || amountSompi <= 0) { + ERR('BLOCKED - cannot resolve amount. Raw:', amountRaw, 'opts:', extraOpts); + throw new Error('htpSendTx: amount could not be resolved'); + } + + const mergedOpts = Object.assign({}, extraOpts, { amount: amountSompi }); + LOG(`Sending tx -> ${String(to).slice(0, 30)}... ${amountSompi} sompi`); + return orig.call(this, to, amountSompi, mergedOpts); + }; + window.htpSendTx._boardEnginePatched = true; + LOG('htpSendTx amount patch installed'); + } + + // ───────────────────────────────────────────────────────────────────────── + // 1. BOARD-OPEN PATCHES — optimistic board for creator + joiner + // ───────────────────────────────────────────────────────────────────────── + + function patchCreateForCreatorBoard() { + const orig = window.createMatchWithLobby; + if (!orig || orig._boardEngineCreatorPatched) return; + + window.createMatchWithLobby = async function (...args) { + let matchId = null; + try { + const result = await orig.apply(this, args); + if (result && result.id) matchId = result.id; + if (!matchId && window.matchLobby && window.matchLobby.matches && + window.matchLobby.matches.length) { + matchId = window.matchLobby.matches[window.matchLobby.matches.length - 1].id; + } + if (matchId) { + LOG('Creator board opening for', matchId); + setTimeout(() => openGameBoard(matchId, 'creator'), 600); + } + return result; + } catch (e) { + ERR('createMatchWithLobby error', e); + throw e; + } + }; + window.createMatchWithLobby._boardEngineCreatorPatched = true; + LOG('createMatchWithLobby creator-board patch installed'); + } + + function patchJoinForBoard() { + const orig = window.joinLobbyMatch; + if (!orig || orig._boardEngineJoinPatched) return; + + window.joinLobbyMatch = async function (matchId) { + try { + const result = await orig.call(this, matchId); + LOG('Joiner board opening for', matchId); + setTimeout(() => openGameBoard(matchId, 'joiner'), 600); + return result; + } catch (e) { + ERR('joinLobbyMatch error', e); + throw e; + } + }; + window.joinLobbyMatch._boardEngineJoinPatched = true; + LOG('joinLobbyMatch board patch installed'); + } + + // ───────────────────────────────────────────────────────────────────────── + // 2. MATCH RESOLVER — find match object from any available store + // ───────────────────────────────────────────────────────────────────────── + + function resolveMatch(matchId) { + const stores = [ + window.htpMatches, + window.openMatches, + window.matchLobby && window.matchLobby.matches + ? Object.fromEntries((window.matchLobby.matches || []).map(x => [x.id, x])) + : null + ].filter(Boolean); + + for (const s of stores) { + if (s[matchId]) return s[matchId]; + } + // Also check matchLobby.matches as array + if (window.matchLobby && Array.isArray(window.matchLobby.matches)) { + const found = window.matchLobby.matches.find(x => x.id === matchId); + if (found) return found; + } + return null; + } + + // ───────────────────────────────────────────────────────────────────────── + // 3. CORE: openGameBoard — unified board launcher + // ───────────────────────────────────────────────────────────────────────── + + async function openGameBoard(matchId, role) { + let m = resolveMatch(matchId); + + // Firebase fallback + if (!m && window.firebase) { + try { + const snap = await firebase.database().ref(`matches/${matchId}/info`).once('value'); + if (snap.val()) { + m = snap.val(); + m.id = matchId; + } + } catch (e) { /* ignore */ } + } + + if (!m) { + ERR('openGameBoard: match not found', matchId); + return; + } + + const game = (m.game || m.gameType || 'chess').toLowerCase(); + const myId = window.matchLobby && window.matchLobby.myPlayerId; + const isCreator = m.creator === myId; + + // Determine color assignment (deterministic, stored to Firebase) + const mySide = await resolveColorAssignment(matchId, m, isCreator); + + // Parse time control + const tc = parseTimeControl(m.timeControl || m.time || '5+0'); + + const opts = { + id: matchId, + side: mySide, + minutes: tc.minutes, + increment: tc.increment, + timeSec: Math.round(tc.minutes * 60), + stake: parseFloat(m.stakeKas || m.stake || 5), + game, + creator: m.creator, + opponent: m.opponent, + role + }; + + // Store as active match + if (window.matchLobby) window.matchLobby.activeMatch = m; + + LOG(`Opening ${game} board for ${matchId}, side=${mySide}, role=${role}`); + + // Connect relay BEFORE opening board so we don't miss moves + if (typeof window.connectRelay === 'function') { + window.connectRelay(matchId, game); + } + + // Replay move history so joiner catches up + await replayMoveHistory(matchId, game); + + // Show the game board area + const boardArea = document.getElementById('game-board-area'); + if (boardArea) boardArea.classList.remove('hidden'); + + // Hide all sub-boards, then show the correct one + ['chess-board', 'c4-board', 'checkers-board', 'ttt-board'].forEach(id => { + const el = document.getElementById(id); + if (el) el.classList.add('hidden'); + }); + + if (game === 'chess' || game === 'chess960') { + const el = document.getElementById('chess-board'); + if (el) el.classList.remove('hidden'); + launchChessBoard(opts); + } else if (game === 'c4' || game === 'connect4') { + const el = document.getElementById('c4-board'); + if (el) el.classList.remove('hidden'); + launchConnect4Board(opts); + } else if (game === 'ck' || game === 'checkers') { + const el = document.getElementById('checkers-board'); + if (el) el.classList.remove('hidden'); + launchCheckersBoard(opts); + } else if (game === 'ttt' || game === 'tictactoe') { + const el = document.getElementById('ttt-board'); + if (el) el.classList.remove('hidden'); + if (typeof window.openTTTBoard === 'function') window.openTTTBoard(opts); + else ERR('openTTTBoard not found'); + } else { + ERR('Unknown game type:', game); + } + } + + // ───────────────────────────────────────────────────────────────────────── + // 4. COLOR ASSIGNMENT — deterministic + Firebase-confirmed + // ───────────────────────────────────────────────────────────────────────── + + async function resolveColorAssignment(matchId, m, isCreator) { + if (window.firebase) { + try { + const snap = await firebase.database() + .ref(`matches/${matchId}/colorAssignment`).once('value'); + const ca = snap.val(); + if (ca && ca.creator && ca.opponent) { + return isCreator ? ca.creator : ca.opponent; + } + } catch (e) { /* ignore */ } + } + + // Compute deterministically from matchId + const idStr = matchId.replace('HTP-', ''); + let seed = 0; + for (let i = 0; i < idStr.length; i++) seed += idStr.charCodeAt(i); + const creatorGetsWhite = (seed % 2 === 0); + + const assignment = { + creator: creatorGetsWhite ? 'w' : 'b', + opponent: creatorGetsWhite ? 'b' : 'w' + }; + + // Write to Firebase so both sides agree (only creator writes) + if (window.firebase && isCreator) { + try { + await firebase.database() + .ref(`matches/${matchId}/colorAssignment`).set(assignment); + } catch (e) { /* ignore */ } + } + + return isCreator ? assignment.creator : assignment.opponent; + } + + // ───────────────────────────────────────────────────────────────────────── + // 5. MOVE HISTORY REPLAY + // ───────────────────────────────────────────────────────────────────────── + + async function replayMoveHistory(matchId, game) { + if (!window.firebase) return; + try { + const snap = await firebase.database() + .ref(`relay/${matchId}/moves`).orderByChild('ts').once('value'); + const moves = []; + snap.forEach(child => moves.push(child.val())); + if (moves.length === 0) return; + + LOG(`Replaying ${moves.length} historical moves for ${matchId}`); + for (const msg of moves) { + applyRelayMove(msg, game); + } + } catch (e) { + ERR('replayMoveHistory failed', e); + } + } + + function applyRelayMove(msg, game) { + if (!msg || !msg.type) return; + if (msg.type !== 'move') return; + + if ((game === 'chess' || !game) && msg.fen && window.chessGame) { + window.chessGame.load(msg.fen); + } else if ((game === 'c4' || game === 'connect4') && + typeof window.applyC4Move === 'function') { + window.applyC4Move(msg.col, msg.side); + } else if ((game === 'ck' || game === 'checkers') && + typeof window.applyCkMove === 'function') { + window.applyCkMove(msg.from, msg.to, msg.side); + } + } + + // ───────────────────────────────────────────────────────────────────────── + // 6. CLOCK MANAGER — shared across all games + // ───────────────────────────────────────────────────────────────────────── + + // Global clock state + const clockState = { + interval: null, + timeLeft: [0, 0], // [white/p1 ms, black/p2 ms] + activeSide: 0, // 0 = white/p1, 1 = black/p2 + increment: 0, // seconds to add after each move + gameOver: false, + matchId: null, + game: null + }; + + function initClocks(opts) { + if (clockState.interval) clearInterval(clockState.interval); + + const timeSec = opts.timeSec || Math.round((opts.minutes || 5) * 60); + clockState.timeLeft = [timeSec, timeSec]; + clockState.increment = opts.increment || 0; + clockState.activeSide = 0; // white/p1 moves first + clockState.gameOver = false; + clockState.matchId = opts.id; + clockState.game = opts.game; + + updateClockDisplay(); + + clockState.interval = setInterval(() => { + if (clockState.gameOver) { + clearInterval(clockState.interval); + return; + } + + clockState.timeLeft[clockState.activeSide]--; + + if (clockState.timeLeft[clockState.activeSide] <= 0) { + clockState.timeLeft[clockState.activeSide] = 0; + clockState.gameOver = true; + clearInterval(clockState.interval); + + // Auto-forfeit: write timeout to Firebase + const loserSide = clockState.activeSide; + const winnerSide = loserSide === 0 ? 'b' : 'w'; + if (window.firebase && clockState.matchId) { + firebase.database().ref(`matches/${clockState.matchId}/result`).set({ + timeout: true, + winner: winnerSide, + ts: firebase.database.ServerValue.TIMESTAMP + }).catch(() => {}); + } + if (typeof window.handleMatchGameOver === 'function') { + window.handleMatchGameOver('timeout', winnerSide); + } + } + + updateClockDisplay(); + }, 1000); + } + + /** Call after a move: stop active clock, add increment, switch to opponent */ + function switchClock() { + if (clockState.gameOver) return; + + // Add increment to the player who just moved + clockState.timeLeft[clockState.activeSide] += clockState.increment; + + // Switch active side + clockState.activeSide = clockState.activeSide === 0 ? 1 : 0; + updateClockDisplay(); + } + + function updateClockDisplay() { + const topEl = document.getElementById('clock-top'); + const botEl = document.getElementById('clock-bottom'); + if (!topEl || !botEl) return; + + // Top clock = opponent, bottom clock = local player + // activeSide 0 = white/p1 (bottom when not flipped) + const isFlipped = window.chessUI && window.chessUI.isFlipped; + const topIdx = isFlipped ? 0 : 1; + const botIdx = isFlipped ? 1 : 0; + + topEl.textContent = fmtTime(clockState.timeLeft[topIdx]); + botEl.textContent = fmtTime(clockState.timeLeft[botIdx]); + + // Active state + const topActive = clockState.activeSide === topIdx; + topEl.classList.toggle('active', topActive); + botEl.classList.toggle('active', !topActive); + + // Danger state (below 30 seconds) + topEl.classList.toggle('danger', clockState.timeLeft[topIdx] < 30); + botEl.classList.toggle('danger', clockState.timeLeft[botIdx] < 30); + } + + /** Apply clock sync from opponent relay message */ + function applyClockSync(msg) { + if (!msg || !msg.clockSync) return; + const { w, b } = msg.clockSync; + if (typeof w === 'number') clockState.timeLeft[0] = w; + if (typeof b === 'number') clockState.timeLeft[1] = b; + updateClockDisplay(); + } + + // ───────────────────────────────────────────────────────────────────────── + // 7. GAME LAUNCHERS + // ───────────────────────────────────────────────────────────────────────── + + function launchChessBoard(opts) { + // Init chess engine + if (window.Chess && !window.chessGame) { + window.chessGame = new Chess(); + } + + const isFlipped = opts.side === 'b'; + + // Store UI state + window.chessUI = window.chessUI || {}; + window.chessUI.playerColor = opts.side; + window.chessUI.isFlipped = isFlipped; + window.chessUI.selectedSq = null; + window.chessUI.legalMoves = []; + window.chessUI.lastMove = null; + + // Init clocks + initClocks(opts); + + // Render board + if (typeof window.initChessBoard === 'function') { + const container = document.getElementById('chess-board'); + window.initChessBoard(container, { + side: opts.side, + matchId: opts.id + }); + } else if (typeof window.renderChessBoard === 'function') { + window.renderChessBoard(); + } + + LOG(`Chess board opened for ${opts.id}, you are ${opts.side === 'w' ? 'White' : 'Black'}`); + } + + function launchConnect4Board(opts) { + initClocks(opts); + + if (typeof window.initConnect4 === 'function') { + const container = document.getElementById('c4-board'); + window.initConnect4(container, { + side: opts.side === 'w' ? 1 : 2, + matchId: opts.id + }); + } else if (typeof window.startConnect4Game === 'function') { + window.startConnect4Game({ + id: opts.id, + side: opts.side === 'w' ? 1 : 2, + time: opts.timeSec, + stake: opts.stake + }); + } + + LOG(`Connect4 board opened for ${opts.id}`); + } + + function launchCheckersBoard(opts) { + initClocks(opts); + + if (typeof window.initCheckers === 'function') { + const container = document.getElementById('checkers-board'); + window.initCheckers(container, { + side: opts.side === 'w' ? 'teal' : 'red', + matchId: opts.id + }); + } else if (typeof window.startCheckersGame === 'function') { + window.startCheckersGame({ + id: opts.id, + side: opts.side === 'w' ? 1 : 3, + time: opts.timeSec, + stake: opts.stake + }); + } + + LOG(`Checkers board opened for ${opts.id}`); + } + + // ───────────────────────────────────────────────────────────────────────── + // 8. RELAY HANDLER PATCH — clock sync + board refresh on opponent moves + // ───────────────────────────────────────────────────────────────────────── + + function patchRelayHandler() { + const orig = window.handleRelayMessage; + if (!orig || orig._boardEnginePatched) return; + + window.handleRelayMessage = function (msg) { + // Apply clock sync from relay message + if (msg && msg.clockSync) applyClockSync(msg); + + // Switch clock on opponent's move + if (msg && msg.type === 'move') switchClock(); + + orig.call(this, msg); + + // Refresh the board after opponent move + if (msg && msg.type === 'move') { + const g = msg.game || clockState.game; + if (g === 'chess' || !g) { + setTimeout(() => { + if (typeof window.renderChessBoard === 'function') window.renderChessBoard(); + }, 50); + } else if (g === 'c4' || g === 'connect4') { + // Connect4 board handles its own rendering via applyC4Move + } else if (g === 'ck' || g === 'checkers') { + // Checkers board handles its own rendering via applyCkMove + } + } + + // Check for game end conditions + if (msg && msg.type === 'move' && msg.game === 'chess' && window.chessGame) { + checkChessGameEnd(); + } + }; + window.handleRelayMessage._boardEnginePatched = true; + LOG('handleRelayMessage clock-sync patch installed'); + } + + // ───────────────────────────────────────────────────────────────────────── + // 9. GAME END DETECTION + // ───────────────────────────────────────────────────────────────────────── + + function checkChessGameEnd() { + const game = window.chessGame; + if (!game) return; + + if (game.isCheckmate()) { + const winner = game.turn() === 'w' ? 'b' : 'w'; + clockState.gameOver = true; + triggerGameEnd('checkmate', winner); + } else if (game.isStalemate()) { + clockState.gameOver = true; + triggerGameEnd('stalemate', null); + } else if (game.isDraw()) { + clockState.gameOver = true; + triggerGameEnd('draw', null); + } + } + + function triggerGameEnd(reason, winner) { + if (clockState.interval) clearInterval(clockState.interval); + clockState.gameOver = true; + + LOG(`Game ended: ${reason}, winner: ${winner || 'none'}`); + + // Write result to Firebase + if (window.firebase && clockState.matchId) { + firebase.database().ref(`matches/${clockState.matchId}/result`).set({ + reason, + winner, + ts: firebase.database.ServerValue.TIMESTAMP + }).catch(() => {}); + } + + if (typeof window.handleMatchGameOver === 'function') { + window.handleMatchGameOver(reason, winner); + } + } + + // ───────────────────────────────────────────────────────────────────────── + // 10. DRAW & RESIGN HANDLERS + // ───────────────────────────────────────────────────────────────────────── + + window.offerDraw = function () { + if (clockState.gameOver) return; + + // Show confirmation modal + const confirmed = confirm('Offer a draw to your opponent?'); + if (!confirmed) return; + + if (typeof window.relaySend === 'function') { + window.relaySend({ + type: 'draw-offer', + matchId: clockState.matchId, + serverTime: window.firebase ? firebase.database.ServerValue.TIMESTAMP : null, + clientTime: Date.now() + }); + } + LOG('Draw offer sent'); + }; + + window.confirmResign = function () { + if (clockState.gameOver) return; + + const confirmed = confirm('Are you sure you want to resign?'); + if (!confirmed) return; + + const ui = window.chessUI; + const mySide = ui ? ui.playerColor : 'w'; + const winner = mySide === 'w' ? 'b' : 'w'; + + if (typeof window.relaySend === 'function') { + window.relaySend({ + type: 'resign', + matchId: clockState.matchId, + loser: mySide, + serverTime: window.firebase ? firebase.database.ServerValue.TIMESTAMP : null, + clientTime: Date.now() + }); + } + + triggerGameEnd('resignation', winner); + }; + + // ───────────────────────────────────────────────────────────────────────── + // EXPORTS — functions available to other modules + // ───────────────────────────────────────────────────────────────────────── + + window.htpBoardEngine = { + openGameBoard, + switchClock, + getClockState: () => clockState, + applyClockSync, + fmtTime, + triggerGameEnd, + checkChessGameEnd + }; + + // Backwards compat + window.renderChessOverlay = function () { + if (typeof window.renderChessBoard === 'function') window.renderChessBoard(); + }; + + // ───────────────────────────────────────────────────────────────────────── + // BOOT — install patches once dependencies are ready + // ───────────────────────────────────────────────────────────────────────── + + function boot() { + patchJoinAmount(); + patchSendTxAmount(); + patchCreateForCreatorBoard(); + patchJoinForBoard(); + patchRelayHandler(); + LOG('All patches installed'); + } + + let attempts = 0; + const waitForReady = setInterval(() => { + attempts++; + if (window.htpSendTx && window.joinLobbyMatch && window.createMatchWithLobby) { + clearInterval(waitForReady); + boot(); + } + if (attempts > 60) { + clearInterval(waitForReady); + ERR('Timeout waiting for dependencies - patching anyway'); + boot(); + } + }, 100); + + window.addEventListener('htpWasmReady', () => { + if (!window.htpSendTx || !window.htpSendTx._boardEnginePatched) boot(); + }); + + LOG('Board Engine v2 loaded'); +})(); diff --git a/public/htp-c4-animation.js b/public/htp-c4-animation.js new file mode 100644 index 00000000..5ea0541d --- /dev/null +++ b/public/htp-c4-animation.js @@ -0,0 +1,316 @@ +/** + * htp-c4-animation.js — HTP Connect 4 v2 + * + * Renders a 7x6 Connect 4 grid into #c4-board. + * Features: gravity drop animation, column hover preview, win detection, + * winning-four highlight, and Firebase sync. + * + * Exports: + * window.initConnect4(container, config) + * window.dropDisc(col, player) + * window.checkC4Win() + * window.resetC4Board() + * window.applyC4Move(col, side) + */ +;(function () { + 'use strict'; + + const LOG = (...a) => console.log('[HTP C4 v2]', ...a); + + const ROWS = 6; + const COLS = 7; + + // Colors + const EMPTY_COLOR = 'var(--surface-3)'; + const P1_COLOR = '#4f98a3'; // teal (local) + const P2_COLOR = '#e84040'; // red (opponent) + + // ───────────────────────────────────────────────────────────────────────── + // INJECT CSS + // ───────────────────────────────────────────────────────────────────────── + + if (!document.getElementById('htp-c4-styles')) { + const style = document.createElement('style'); + style.id = 'htp-c4-styles'; + style.textContent = ` + @keyframes c4-drop { + 0% { transform: translateY(-400%); opacity: 0.3; } + 60% { transform: translateY(8%); } + 80% { transform: translateY(-4%); } + 100% { transform: translateY(0); opacity: 1; } + } + .c4-piece-drop { + animation: c4-drop 280ms ease-in forwards; + } + @keyframes c4-win-ring { + 0%, 100% { box-shadow: inset 0 0 0 3px rgba(255,255,255,0.8); } + 50% { box-shadow: inset 0 0 0 5px rgba(255,255,255,1); } + } + .c4-cell.win { + animation: c4-win-ring 0.8s ease-in-out infinite; + } + .c4-preview { + opacity: 0.3; + transition: opacity 0.15s; + } + `; + document.head.appendChild(style); + } + + // ───────────────────────────────────────────────────────────────────────── + // STATE + // ───────────────────────────────────────────────────────────────────────── + + // Board: 2D array [row][col], 0=empty, 1=player1(teal), 2=player2(red) + let board = []; + let mySide = 1; // 1 or 2 + let currentTurn = 1; // whose turn it is + let gameOver = false; + let matchId = null; + let containerEl = null; + + function createEmptyBoard() { + const b = []; + for (let r = 0; r < ROWS; r++) { + b.push(new Array(COLS).fill(0)); + } + return b; + } + + // ───────────────────────────────────────────────────────────────────────── + // RENDER + // ───────────────────────────────────────────────────────────────────────── + + function render(lastMove) { + if (!containerEl) return; + + let html = ''; + for (let r = 0; r < ROWS; r++) { + for (let c = 0; c < COLS; c++) { + const val = board[r][c]; + let colorClass = ''; + if (val === 1) colorClass = 'p1'; + else if (val === 2) colorClass = 'p2'; + + const isLastDrop = lastMove && lastMove.row === r && lastMove.col === c; + const dropClass = isLastDrop ? 'c4-piece-drop' : ''; + + html += `
`; + } + } + + containerEl.innerHTML = html; + } + + // ───────────────────────────────────────────────────────────────────────── + // COLUMN HOVER PREVIEW + // ───────────────────────────────────────────────────────────────────────── + + window._c4ColHover = function (col) { + if (gameOver || currentTurn !== mySide) return; + + // Find the topmost empty row in this column + const row = getLowestEmptyRow(col); + if (row === -1) return; + + const cell = containerEl.querySelector(`[data-c4-row="0"][data-c4-col="${col}"]`); + if (!cell) return; + + // Show preview disc at top + let preview = containerEl.querySelector('.c4-preview'); + if (!preview) { + preview = document.createElement('div'); + preview.className = 'c4-preview'; + preview.style.cssText = `position:absolute;top:0;width:100%;aspect-ratio:1;border-radius:50%;pointer-events:none;z-index:5;background:${mySide === 1 ? P1_COLOR : P2_COLOR}`; + } + cell.style.position = 'relative'; + cell.appendChild(preview); + }; + + window._c4ColLeave = function () { + if (!containerEl) return; + const preview = containerEl.querySelector('.c4-preview'); + if (preview) preview.remove(); + }; + + // ───────────────────────────────────────────────────────────────────────── + // DROP DISC + // ───────────────────────────────────────────────────────────────────────── + + function getLowestEmptyRow(col) { + for (let r = ROWS - 1; r >= 0; r--) { + if (board[r][col] === 0) return r; + } + return -1; + } + + function dropDisc(col, player) { + if (gameOver) return false; + + const row = getLowestEmptyRow(col); + if (row === -1) return false; + + board[row][col] = player; + render({ row, col }); + + // Check win + const win = checkWin(row, col, player); + if (win) { + gameOver = true; + highlightWin(win); + const winner = player === mySide ? 'w' : 'b'; // map to color for engine + if (window.htpBoardEngine) { + window.htpBoardEngine.triggerGameEnd('connect4-win', winner); + } + return true; + } + + // Check draw (board full) + const isFull = board[0].every((_, c) => getLowestEmptyRow(c) === -1); + if (isFull) { + gameOver = true; + if (window.htpBoardEngine) { + window.htpBoardEngine.triggerGameEnd('draw', null); + } + } + + // Switch turn + currentTurn = currentTurn === 1 ? 2 : 1; + return true; + } + + // ───────────────────────────────────────────────────────────────────────── + // CLICK HANDLER + // ───────────────────────────────────────────────────────────────────────── + + window._c4ColumnClick = function (col) { + if (gameOver || currentTurn !== mySide) return; + + const success = dropDisc(col, mySide); + if (!success) return; + + // Relay move to Firebase + const engine = window.htpBoardEngine; + const clockState = engine ? engine.getClockState() : null; + + if (typeof window.relaySend === 'function') { + window.relaySend({ + type: 'move', + game: 'c4', + col: col, + side: mySide, + clockSync: clockState ? { w: clockState.timeLeft[0], b: clockState.timeLeft[1], ts: Date.now() } : null, + serverTime: window.firebase ? firebase.database.ServerValue.TIMESTAMP : null, + clientTime: Date.now() + }); + } + + // Switch clock + if (engine) engine.switchClock(); + }; + + // ───────────────────────────────────────────────────────────────────────── + // WIN DETECTION + // ───────────────────────────────────────────────────────────────────────── + + function checkWin(row, col, player) { + const directions = [ + [0, 1], // horizontal + [1, 0], // vertical + [1, 1], // diagonal down-right + [1, -1] // diagonal down-left + ]; + + for (const [dr, dc] of directions) { + const cells = [[row, col]]; + + // Check forward + for (let i = 1; i < 4; i++) { + const r = row + dr * i; + const c = col + dc * i; + if (r < 0 || r >= ROWS || c < 0 || c >= COLS || board[r][c] !== player) break; + cells.push([r, c]); + } + + // Check backward + for (let i = 1; i < 4; i++) { + const r = row - dr * i; + const c = col - dc * i; + if (r < 0 || r >= ROWS || c < 0 || c >= COLS || board[r][c] !== player) break; + cells.push([r, c]); + } + + if (cells.length >= 4) return cells; + } + + return null; + } + + function highlightWin(cells) { + if (!containerEl) return; + cells.forEach(([r, c]) => { + const cell = containerEl.querySelector(`[data-c4-row="${r}"][data-c4-col="${c}"]`); + if (cell) cell.classList.add('win'); + }); + } + + // ───────────────────────────────────────────────────────────────────────── + // EXPORTED FUNCTIONS + // ───────────────────────────────────────────────────────────────────────── + + /** Initialize Connect 4 board */ + window.initConnect4 = function (container, config) { + config = config || {}; + containerEl = container || document.getElementById('c4-board'); + board = createEmptyBoard(); + mySide = config.side || 1; + currentTurn = 1; // player 1 always starts + gameOver = false; + matchId = config.matchId || null; + + render(); + LOG('Connect4 initialized, side:', mySide); + }; + + /** Drop a disc into a column (for external use) */ + window.dropDisc = dropDisc; + + /** Check if there's a win at the given position */ + window.checkC4Win = function () { + // Check entire board for any four-in-a-row + for (let r = 0; r < ROWS; r++) { + for (let c = 0; c < COLS; c++) { + if (board[r][c] !== 0) { + const result = checkWin(r, c, board[r][c]); + if (result) return { winner: board[r][c], cells: result }; + } + } + } + return null; + }; + + /** Reset the board */ + window.resetC4Board = function () { + board = createEmptyBoard(); + currentTurn = 1; + gameOver = false; + render(); + }; + + /** Apply opponent's move (called from relay) */ + window.applyC4Move = function (col, side) { + dropDisc(col, side); + }; + + // Backwards compat with old render patch + window.renderConnect4Board = function (boardState, lastMove) { + if (boardState) board = boardState; + render(lastMove); + }; + + LOG('Loaded - Connect 4 with drop animation and win detection'); +})(); diff --git a/public/htp-cancel-flow.js b/public/htp-cancel-flow.js new file mode 100644 index 00000000..de02cf74 --- /dev/null +++ b/public/htp-cancel-flow.js @@ -0,0 +1,214 @@ +/** + * htp-cancel-flow.js — Skill Game Creator Cancel Flow + * Checks HTPFee.skillGameCanCreatorCancel() before firing refund TX. + * Depends on: htp-fee-engine.js, htp-covenant-escrow-v2.js + * No Firebase required for the cancel TX itself. + */ +(function(W) { + 'use strict'; + + function injectStyles() { + if (document.getElementById('htp-cancel-style')) return; + const s = document.createElement('style'); + s.id = 'htp-cancel-style'; + s.textContent = ` + .htp-cancel-btn { + display: inline-flex; align-items: center; gap: 8px; + padding: 10px 18px; + background: rgba(239,68,68,0.1); + border: 1px solid rgba(239,68,68,0.3); + color: #ef4444; border-radius: 8px; + font-weight: 700; font-size: 13px; + cursor: pointer; transition: all 0.2s; + font-family: 'Inter', sans-serif; + } + .htp-cancel-btn:hover { background: rgba(239,68,68,0.2); } + .htp-cancel-btn:disabled { opacity: 0.35; cursor: not-allowed; } + .htp-cancel-btn.loading { opacity: 0.6; cursor: wait; } + .htp-cancel-confirm-modal { + position: fixed; inset: 0; + background: rgba(0,0,0,0.75); backdrop-filter: blur(6px); + z-index: 9998; + display: flex; align-items: center; justify-content: center; + } + .htp-cancel-confirm-card { + background: #0f172a; + border: 1px solid rgba(239,68,68,0.3); + border-radius: 14px; padding: 28px; + max-width: 380px; width: 90%; + text-align: center; + font-family: 'Inter', sans-serif; + color: #e2e8f0; + animation: htp-slide-up 0.2s ease; + } + .htp-cancel-confirm-card h3 { + font-size: 20px; font-weight: 800; color: #fff; + margin: 0 0 8px; letter-spacing: -0.02em; + } + .htp-cancel-confirm-card p { + font-size: 13px; color: #94a3b8; line-height: 1.6; margin-bottom: 20px; + } + .htp-cancel-confirm-card .refund-amount { + font-size: 28px; font-weight: 800; color: #49e8c2; margin-bottom: 6px; + } + .htp-cancel-confirm-card .refund-label { + font-size: 11px; color: #64748b; margin-bottom: 20px; + } + .htp-cancel-modal-btns { display: flex; gap: 10px; } + .htp-cancel-modal-btns button { + flex: 1; padding: 11px; border-radius: 8px; + border: none; font-weight: 700; font-size: 14px; + cursor: pointer; font-family: 'Inter', sans-serif; + transition: opacity 0.2s; + } + .htp-cancel-modal-btns .confirm { background: #ef4444; color: #fff; } + .htp-cancel-modal-btns .back { background: #1e293b; color: #94a3b8; } + .htp-cancel-modal-btns button:hover { opacity: 0.88; } + .htp-cancel-status { + margin-top: 8px; font-size: 12px; + padding: 8px 12px; border-radius: 6px; + display: none; + } + .htp-cancel-status.ok { background: rgba(73,232,194,0.1); color: #49e8c2; display: block; } + .htp-cancel-status.err { background: rgba(239,68,68,0.1); color: #ef4444; display: block; } + .htp-cancel-status.info { background: rgba(59,130,246,0.1); color: #3b82f6; display: block; } + `; + document.head.appendChild(s); + } + + /** + * Mount a cancel button into a container element. + * @param {string} containerId + * @param {object} opts — { matchId, stakeKas, opponentJoined, creatorAddress } + */ + function mount(containerId, opts) { + injectStyles(); + const container = document.getElementById(containerId); + if (!container) return; + + const { matchId, stakeKas = 0, opponentJoined = false, creatorAddress } = opts || {}; + + // Gate check via HTPFee + const Fee = W.HTPFee; + const canCancel = Fee + ? Fee.skillGameCanCreatorCancel({ opponentJoined, creatorAddress, status: opponentJoined ? 'active' : 'pending' }) + : { allowed: !opponentJoined, reason: opponentJoined ? 'Game already started' : 'OK' }; + + container.innerHTML = ` + +
+ `; + + if (!canCancel.allowed) { + setStatus(matchId, 'err', canCancel.reason); + return; + } + + document.getElementById(`htp-cancel-btn-${matchId}`).addEventListener('click', function() { + showConfirmModal(matchId, stakeKas, creatorAddress); + }); + } + + function setStatus(matchId, type, msg) { + const el = document.getElementById(`htp-cancel-status-${matchId}`); + if (!el) return; + el.className = 'htp-cancel-status ' + type; + el.textContent = msg; + } + + function showConfirmModal(matchId, stakeKas, creatorAddress) { + // Check opponent hasn't just joined (live re-check) + const latestCheck = async () => { + if (W.firebase && W.firebase.database) { + try { + const snap = await W.firebase.database().ref(`matches/${matchId}`).once('value'); + const data = snap.val(); + if (data) { + const Fee = W.HTPFee; + const check = Fee + ? Fee.skillGameCanCreatorCancel(data) + : { allowed: !data.opponentJoined, reason: 'OK' }; + if (!check.allowed) { + setStatus(matchId, 'err', check.reason); + return false; + } + } + } catch(e) {} + } + return true; + }; + + const modal = document.createElement('div'); + modal.className = 'htp-cancel-confirm-modal'; + modal.innerHTML = ` +
+

Cancel Game?

+

This will refund your full stake back to your wallet. You cannot undo this.

+
${stakeKas.toFixed(2)} KAS
+
Refund amount (minus ~0.0001 KAS network fee)
+
+ + +
+
+ `; + document.body.appendChild(modal); + + document.getElementById('htp-cc-back').addEventListener('click', () => modal.remove()); + modal.addEventListener('click', e => { if (e.target === modal) modal.remove(); }); + + document.getElementById('htp-cc-confirm').addEventListener('click', async function() { + this.textContent = 'Checking...'; + this.disabled = true; + + const ok = await latestCheck(); + if (!ok) { modal.remove(); return; } + + this.textContent = 'Sending refund TX...'; + modal.remove(); + + const btn = document.getElementById(`htp-cancel-btn-${matchId}`); + if (btn) { btn.classList.add('loading'); btn.disabled = true; btn.textContent = 'Cancelling...'; } + + try { + if (!W.cancelMatchEscrow) throw new Error('cancelMatchEscrow not loaded'); + const txId = await W.cancelMatchEscrow(matchId); + if (txId) { + setStatus(matchId, 'ok', '✓ Refunded! TX: ' + String(txId).substring(0,20) + '…'); + if (btn) { btn.textContent = '✓ Cancelled'; btn.style.opacity = '0.5'; } + window.dispatchEvent(new CustomEvent('htp:match:cancelled', { detail: { matchId, txId } })); + } else { + setStatus(matchId, 'err', 'Refund failed — check console'); + if (btn) { btn.classList.remove('loading'); btn.disabled = false; btn.textContent = '✕ Cancel Game'; } + } + } catch(e) { + setStatus(matchId, 'err', e.message); + if (btn) { btn.classList.remove('loading'); btn.disabled = false; btn.textContent = '✕ Cancel Game'; } + } + }); + } + + /** + * Update cancel button state when match data changes (e.g. opponent joins). + * Call this from your Firebase listener when match status changes. + */ + function update(matchId, matchData) { + const btn = document.getElementById(`htp-cancel-btn-${matchId}`); + if (!btn) return; + const Fee = W.HTPFee; + const check = Fee + ? Fee.skillGameCanCreatorCancel(matchData) + : { allowed: !matchData.opponentJoined, reason: 'OK' }; + btn.disabled = !check.allowed; + if (!check.allowed) { + btn.title = check.reason; + setStatus(matchId, 'err', check.reason); + } + } + + W.HTPCancelFlow = { mount, update }; + console.log('[HTPCancelFlow] loaded'); +})(window); diff --git a/public/htp-checkers-multijump.js b/public/htp-checkers-multijump.js new file mode 100644 index 00000000..416331da --- /dev/null +++ b/public/htp-checkers-multijump.js @@ -0,0 +1,535 @@ +/** + * htp-checkers-multijump.js — HTP Checkers v2 + * + * Renders 8x8 checkers board into #checkers-board with full multi-jump chains, + * mandatory capture enforcement, king promotion, and Firebase sync. + * + * Board state: 2D array [row][col] + * null = empty, 'r' = red piece, 'b' = black piece + * 'R' = red king, 'B' = black king + * Teal pieces = local player, Red pieces = opponent + * + * Exports: + * window.initCheckers(container, config) + * window.makeCheckersMove(from, to) + * window.getValidMoves(row, col) + * window.isCheckersGameOver() + * window.applyCkMove(from, to, side) + * window.HTP_CHECKERS_MULTIJUMP + */ +;(function () { + 'use strict'; + + const LOG = (...a) => console.log('[HTP Checkers v2]', ...a); + + const SIZE = 8; + const DARK_SQ = '#1a2235'; + const LIGHT_SQ = '#0f1623'; + const TEAL = 'var(--primary)'; + const RED = 'var(--red)'; + + // Crown SVG (small inline) + const CROWN_SVG = ``; + + // ───────────────────────────────────────────────────────────────────────── + // STATE + // ───────────────────────────────────────────────────────────────────────── + + let board = []; + let mySide = 'r'; // 'r' (teal) or 'b' (red) + let currentTurn = 'r'; // red always moves first in checkers + let selectedPiece = null; // { row, col } + let validMoves = []; // [{ row, col }] for selected piece + let mustJumpFrom = null; // forced continuation piece { row, col } + let jumpChain = []; // accumulate multi-jump moves for relay + let gameOver = false; + let matchId = null; + let containerEl = null; + + function createInitialBoard() { + const b = []; + for (let r = 0; r < SIZE; r++) { + b.push(new Array(SIZE).fill(null)); + } + // Red pieces on rows 0-2 (dark squares only) + for (let r = 0; r < 3; r++) { + for (let c = 0; c < SIZE; c++) { + if ((r + c) % 2 === 1) b[r][c] = 'r'; + } + } + // Black pieces on rows 5-7 + for (let r = 5; r < SIZE; r++) { + for (let c = 0; c < SIZE; c++) { + if ((r + c) % 2 === 1) b[r][c] = 'b'; + } + } + return b; + } + + // ───────────────────────────────────────────────────────────────────────── + // MOVE VALIDATION + // ───────────────────────────────────────────────────────────────────────── + + function isMyPiece(piece) { + if (!piece) return false; + return piece.toLowerCase() === mySide; + } + + function isOpponentPiece(piece) { + if (!piece) return false; + return piece.toLowerCase() !== mySide; + } + + function isKing(piece) { + return piece === piece.toUpperCase() && piece !== piece.toLowerCase(); + } + + /** Get valid jumps (captures) from a position */ + function getJumps(row, col) { + const piece = board[row][col]; + if (!piece) return []; + + const king = isKing(piece); + const color = piece.toLowerCase(); + // Regular pieces: red moves down (row+1), black moves up (row-1) + const dirs = king + ? [[-1, -1], [-1, 1], [1, -1], [1, 1]] + : (color === 'r' ? [[1, -1], [1, 1]] : [[-1, -1], [-1, 1]]); + + const jumps = []; + for (const [dr, dc] of dirs) { + const midR = row + dr, midC = col + dc; + const landR = row + dr * 2, landC = col + dc * 2; + if (landR < 0 || landR >= SIZE || landC < 0 || landC >= SIZE) continue; + const mid = board[midR] && board[midR][midC]; + const land = board[landR] && board[landR][landC]; + if (mid && mid.toLowerCase() !== color && !land) { + jumps.push({ row: landR, col: landC, over: { row: midR, col: midC } }); + } + } + return jumps; + } + + /** Get valid simple moves (non-captures) from a position */ + function getSimpleMoves(row, col) { + const piece = board[row][col]; + if (!piece) return []; + + const king = isKing(piece); + const color = piece.toLowerCase(); + const dirs = king + ? [[-1, -1], [-1, 1], [1, -1], [1, 1]] + : (color === 'r' ? [[1, -1], [1, 1]] : [[-1, -1], [-1, 1]]); + + const moves = []; + for (const [dr, dc] of dirs) { + const nr = row + dr, nc = col + dc; + if (nr < 0 || nr >= SIZE || nc < 0 || nc >= SIZE) continue; + if (!board[nr][nc]) { + moves.push({ row: nr, col: nc }); + } + } + return moves; + } + + /** Get all valid moves for a piece, respecting mandatory capture rules */ + function getValidMovesForPiece(row, col) { + const piece = board[row][col]; + if (!piece || !isMyPiece(piece)) return []; + + // If in a multi-jump chain, only the forced piece can move + if (mustJumpFrom) { + if (row !== mustJumpFrom.row || col !== mustJumpFrom.col) return []; + return getJumps(row, col); + } + + // Check if ANY of my pieces have mandatory captures + const anyCaptures = getAllMandatoryCaptures(); + if (anyCaptures.length > 0) { + // Only allow jumps from pieces that have captures + const hasCapture = anyCaptures.some(p => p.row === row && p.col === col); + if (!hasCapture) return []; + return getJumps(row, col); + } + + // No mandatory captures - allow simple moves and jumps + return [...getJumps(row, col), ...getSimpleMoves(row, col)]; + } + + /** Find all pieces of my side that have mandatory captures */ + function getAllMandatoryCaptures() { + const pieces = []; + for (let r = 0; r < SIZE; r++) { + for (let c = 0; c < SIZE; c++) { + const p = board[r][c]; + if (p && isMyPiece(p)) { + const jumps = getJumps(r, c); + if (jumps.length > 0) { + pieces.push({ row: r, col: c }); + } + } + } + } + return pieces; + } + + // ───────────────────────────────────────────────────────────────────────── + // MOVE EXECUTION + // ───────────────────────────────────────────────────────────────────────── + + function executeMove(fromRow, fromCol, toRow, toCol) { + const piece = board[fromRow][fromCol]; + if (!piece) return null; + + const rowDiff = Math.abs(toRow - fromRow); + const isJump = rowDiff === 2; + + if (isJump) { + // Capture move + const midR = (fromRow + toRow) / 2; + const midC = (fromCol + toCol) / 2; + board[midR][midC] = null; + } + + board[toRow][toCol] = piece; + board[fromRow][fromCol] = null; + + // King promotion + const color = piece.toLowerCase(); + if (color === 'r' && toRow === SIZE - 1) { + board[toRow][toCol] = 'R'; + } else if (color === 'b' && toRow === 0) { + board[toRow][toCol] = 'B'; + } + + // Multi-jump chain check + if (isJump) { + jumpChain.push({ from: [fromRow, fromCol], to: [toRow, toCol] }); + const furtherJumps = getJumps(toRow, toCol); + if (furtherJumps.length > 0) { + // Must continue jumping + mustJumpFrom = { row: toRow, col: toCol }; + selectedPiece = mustJumpFrom; + validMoves = furtherJumps; + render(); + return { mustContinue: true }; + } + } else { + jumpChain.push({ from: [fromRow, fromCol], to: [toRow, toCol] }); + } + + // Turn complete - relay the entire chain + const chain = [...jumpChain]; + jumpChain = []; + mustJumpFrom = null; + selectedPiece = null; + validMoves = []; + + // Switch turn + currentTurn = currentTurn === 'r' ? 'b' : 'r'; + + render(); + + return { mustContinue: false, chain }; + } + + // ───────────────────────────────────────────────────────────────────────── + // RENDER + // ───────────────────────────────────────────────────────────────────────── + + function render() { + if (!containerEl) return; + + const mandatoryPieces = getAllMandatoryCaptures(); + let html = ''; + + for (let r = 0; r < SIZE; r++) { + for (let c = 0; c < SIZE; c++) { + const isDark = (r + c) % 2 === 1; // pieces on dark squares only + const sqClass = isDark ? 'dark' : 'light'; + const bgColor = isDark ? DARK_SQ : LIGHT_SQ; + + const piece = board[r][c]; + let pieceHtml = ''; + + if (piece && isDark) { + const color = piece.toLowerCase(); + const pieceColor = isMyPiece(piece) ? 'teal' : 'red'; + const king = isKing(piece); + + // Check mandatory capture highlight + const isMandatory = mandatoryPieces.some(p => p.row === r && p.col === c); + const mandatoryClass = isMandatory ? 'mandatory' : ''; + + // Check if this is the multi-jump forced piece + const isForced = mustJumpFrom && mustJumpFrom.row === r && mustJumpFrom.col === c; + const forcedStyle = isForced ? 'box-shadow:0 0 12px var(--gold);border-color:var(--gold)' : ''; + + pieceHtml = `
+ ${king ? CROWN_SVG : ''} +
`; + } + + // Valid move indicator + const isValidTarget = validMoves.some(m => m.row === r && m.col === c); + let moveIndicator = ''; + if (isValidTarget) { + moveIndicator = `
`; + } + + // Selected highlight + const isSelected = selectedPiece && selectedPiece.row === r && selectedPiece.col === c; + const selStyle = isSelected ? 'box-shadow:inset 0 0 0 2px var(--primary)' : ''; + + html += `
+ ${pieceHtml}${moveIndicator} +
`; + } + } + + containerEl.innerHTML = html; + } + + // ───────────────────────────────────────────────────────────────────────── + // CLICK HANDLER + // ───────────────────────────────────────────────────────────────────────── + + window._ckSquareClick = function (row, col) { + if (gameOver || currentTurn !== mySide) return; + + const piece = board[row][col]; + + // If we have a forced continuation, only accept valid jump targets + if (mustJumpFrom) { + const isTarget = validMoves.some(m => m.row === row && m.col === col); + if (isTarget) { + const result = executeMove(mustJumpFrom.row, mustJumpFrom.col, row, col); + if (result && !result.mustContinue && result.chain) { + relayCheckersMove(result.chain); + } + checkCheckersGameOver(); + } + return; + } + + // Clicking on a valid move target + if (selectedPiece && validMoves.some(m => m.row === row && m.col === col)) { + const result = executeMove(selectedPiece.row, selectedPiece.col, row, col); + if (result && !result.mustContinue && result.chain) { + relayCheckersMove(result.chain); + } + checkCheckersGameOver(); + return; + } + + // Clicking on own piece - select it + if (piece && isMyPiece(piece)) { + const moves = getValidMovesForPiece(row, col); + if (moves.length > 0) { + selectedPiece = { row, col }; + validMoves = moves; + render(); + } + return; + } + + // Clicking empty square - deselect + selectedPiece = null; + validMoves = []; + render(); + }; + + // ───────────────────────────────────────────────────────────────────────── + // RELAY & GAME END + // ───────────────────────────────────────────────────────────────────────── + + function relayCheckersMove(chain) { + const engine = window.htpBoardEngine; + const clockState = engine ? engine.getClockState() : null; + + if (typeof window.relaySend === 'function') { + window.relaySend({ + type: 'move', + game: 'checkers', + chain: chain, + from: chain[0].from, + to: chain[chain.length - 1].to, + side: mySide, + clockSync: clockState ? { w: clockState.timeLeft[0], b: clockState.timeLeft[1], ts: Date.now() } : null, + serverTime: window.firebase ? firebase.database.ServerValue.TIMESTAMP : null, + clientTime: Date.now() + }); + } + + // Switch clock + if (engine) engine.switchClock(); + } + + function checkCheckersGameOver() { + // Check if opponent has any moves + const oppSide = currentTurn; + let hasMove = false; + + for (let r = 0; r < SIZE && !hasMove; r++) { + for (let c = 0; c < SIZE && !hasMove; c++) { + const p = board[r][c]; + if (p && p.toLowerCase() === oppSide) { + const king = isKing(p); + const dirs = king + ? [[-1, -1], [-1, 1], [1, -1], [1, 1]] + : (oppSide === 'r' ? [[1, -1], [1, 1]] : [[-1, -1], [-1, 1]]); + + for (const [dr, dc] of dirs) { + const nr = r + dr, nc = c + dc; + if (nr >= 0 && nr < SIZE && nc >= 0 && nc < SIZE && !board[nr][nc]) { + hasMove = true; + break; + } + // Check jumps + const lr = r + dr * 2, lc = c + dc * 2; + if (lr >= 0 && lr < SIZE && lc >= 0 && lc < SIZE) { + const mid = board[nr] && board[nr][nc]; + if (mid && mid.toLowerCase() !== oppSide && !board[lr][lc]) { + hasMove = true; + break; + } + } + } + } + } + } + + // Check if opponent has any pieces + let hasPieces = false; + for (let r = 0; r < SIZE && !hasPieces; r++) { + for (let c = 0; c < SIZE && !hasPieces; c++) { + if (board[r][c] && board[r][c].toLowerCase() === oppSide) hasPieces = true; + } + } + + if (!hasPieces || !hasMove) { + gameOver = true; + const winner = mySide === 'r' ? 'w' : 'b'; + if (window.htpBoardEngine) { + window.htpBoardEngine.triggerGameEnd('checkers-win', winner); + } + } + } + + // ───────────────────────────────────────────────────────────────────────── + // EXPORTED FUNCTIONS + // ───────────────────────────────────────────────────────────────────────── + + /** Initialize checkers board */ + window.initCheckers = function (container, config) { + config = config || {}; + containerEl = container || document.getElementById('checkers-board'); + board = createInitialBoard(); + mySide = (config.side === 'teal' || config.side === 'r' || config.side === 1) ? 'r' : 'b'; + currentTurn = 'r'; // red always starts + selectedPiece = null; + validMoves = []; + mustJumpFrom = null; + jumpChain = []; + gameOver = false; + matchId = config.matchId || null; + + render(); + LOG('Checkers initialized, side:', mySide); + }; + + /** Make a checkers move (for external use) */ + window.makeCheckersMove = function (from, to) { + if (gameOver) return null; + const result = executeMove(from[0], from[1], to[0], to[1]); + return result; + }; + + /** Get valid moves for a piece at (row, col) */ + window.getValidMoves = function (row, col) { + if (typeof row === 'object') { + col = row[1] || row.col; + row = row[0] || row.row; + } + return getValidMovesForPiece(row, col); + }; + + /** Check if the game is over */ + window.isCheckersGameOver = function () { + return gameOver; + }; + + /** Apply opponent's move (called from relay) */ + window.applyCkMove = function (from, to, side) { + // Temporarily switch perspective for move execution + const origSide = mySide; + const origTurn = currentTurn; + + if (Array.isArray(from) && Array.isArray(to)) { + board[to[0]][to[1]] = board[from[0]][from[1]]; + board[from[0]][from[1]] = null; + + // Check if it was a jump + const rowDiff = Math.abs(to[0] - from[0]); + if (rowDiff === 2) { + const midR = (from[0] + to[0]) / 2; + const midC = (from[1] + to[1]) / 2; + board[midR][midC] = null; + } + + // King promotion + const piece = board[to[0]][to[1]]; + if (piece) { + const color = piece.toLowerCase(); + if (color === 'r' && to[0] === SIZE - 1) board[to[0]][to[1]] = 'R'; + else if (color === 'b' && to[0] === 0) board[to[0]][to[1]] = 'B'; + } + + currentTurn = side === 'r' ? 'b' : 'r'; + } + + render(); + checkCheckersGameOver(); + }; + + // Backwards compat + window.HTP_CHECKERS_MULTIJUMP = { + getJumps: function (boardState, row, col, king, color) { + const origBoard = board; + if (boardState) board = boardState; + const result = getJumps(row, col); + board = origBoard; + return result; + }, + executeJump: function (boardState, jump) { + const newBoard = boardState.map(r => [...r]); + const piece = newBoard[jump.from[0]][jump.from[1]]; + newBoard[jump.from[0]][jump.from[1]] = null; + newBoard[jump.over[0]][jump.over[1]] = null; + const king = (jump.to[0] === 0 && piece === 'r') || (jump.to[0] === SIZE - 1 && piece === 'b'); + newBoard[jump.to[0]][jump.to[1]] = king ? piece.toUpperCase() : piece; + return newBoard; + }, + handleMove: function (boardState, from, to, color) { + const piece = boardState[from[0]][from[1]]; + if (!piece) return null; + const king = isKing(piece); + const rowDiff = Math.abs(to[0] - from[0]); + if (rowDiff === 2) { + const jump = { from, over: [(from[0] + to[0]) / 2, (from[1] + to[1]) / 2], to }; + const newBoard = this.executeJump(boardState, jump); + const furtherJumps = this.getJumps(newBoard, to[0], to[1], king, color.toLowerCase()); + if (furtherJumps.length > 0) { + return { board: newBoard, mustContinue: true, from: to }; + } + return { board: newBoard, mustContinue: false }; + } + const newBoard = boardState.map(r => [...r]); + newBoard[to[0]][to[1]] = newBoard[from[0]][from[1]]; + newBoard[from[0]][from[1]] = null; + return { board: newBoard, mustContinue: false }; + } + }; + + LOG('Loaded - Checkers with multi-jump chains and mandatory captures'); +})(); diff --git a/public/htp-chess-dnd.js b/public/htp-chess-dnd.js new file mode 100644 index 00000000..b6480aaa --- /dev/null +++ b/public/htp-chess-dnd.js @@ -0,0 +1,272 @@ +/** + * htp-chess-dnd.js — HTP Chess Drag & Drop v2 + * + * Clean drag and drop for chess pieces. Handles both mouse and touch events. + * Works with the #chess-board container rendered by htp-chess-ui.js. + * + * Behavior: + * - mousedown/touchstart on own piece: lift piece (scale 1.1, z-index 1000), + * show legal move highlights (teal circle for moves, teal ring for captures) + * - mousemove/touchmove: piece follows cursor/finger + * - mouseup/touchend on legal square: execute move, relay to Firebase + * - mouseup/touchend on illegal square: snap back with shake animation + */ +;(function () { + 'use strict'; + + const LOG = (...a) => console.log('[HTP Chess DnD v2]', ...a); + + // State + let dragPiece = null; // the img element being dragged + let dragSource = null; // source square name (e.g. "e2") + let dragClone = null; // floating clone element + let legalSquares = []; // list of legal target square names + let offsetX = 0, offsetY = 0; + + // ───────────────────────────────────────────────────────────────────────── + // INJECT SHAKE ANIMATION CSS + // ───────────────────────────────────────────────────────────────────────── + + if (!document.getElementById('htp-dnd-styles')) { + const style = document.createElement('style'); + style.id = 'htp-dnd-styles'; + style.textContent = ` + @keyframes htp-shake { + 0%, 100% { transform: translateX(0); } + 25% { transform: translateX(-3px); } + 75% { transform: translateX(3px); } + } + .htp-shake { animation: htp-shake 100ms ease-in-out 3; } + .htp-drag-clone { + position: fixed; + pointer-events: none; + z-index: 1000; + transform: scale(1.1); + transition: none; + filter: drop-shadow(0 4px 8px rgba(0,0,0,0.4)); + } + `; + document.head.appendChild(style); + } + + // ───────────────────────────────────────────────────────────────────────── + // HELPERS + // ───────────────────────────────────────────────────────────────────────── + + function getBoard() { + return document.getElementById('chess-board'); + } + + function getSquareFromPoint(x, y) { + const el = document.elementFromPoint(x, y); + if (!el) return null; + const sq = el.closest('[data-sq]'); + return sq ? sq.dataset.sq : null; + } + + function showLegalMoveHighlights(squares) { + const board = getBoard(); + if (!board) return; + + squares.forEach(sq => { + const cell = board.querySelector(`[data-sq="${sq}"]`); + if (!cell) return; + + const game = window.chessGame; + const hasPiece = game && game.get(sq); + + const indicator = document.createElement('div'); + indicator.className = 'htp-dnd-highlight'; + + if (hasPiece) { + // Teal ring around capture square + indicator.style.cssText = 'position:absolute;inset:0;border-radius:50%;border:3px solid rgba(79,152,163,0.5);pointer-events:none;z-index:5'; + } else { + // Small teal circle for empty square + indicator.style.cssText = 'position:absolute;width:12px;height:12px;border-radius:50%;background:rgba(79,152,163,0.6);pointer-events:none;z-index:5;top:50%;left:50%;transform:translate(-50%,-50%)'; + } + cell.appendChild(indicator); + }); + } + + function clearHighlights() { + const board = getBoard(); + if (!board) return; + board.querySelectorAll('.htp-dnd-highlight').forEach(el => el.remove()); + } + + // ───────────────────────────────────────────────────────────────────────── + // DRAG START + // ───────────────────────────────────────────────────────────────────────── + + function onDragStart(e) { + const game = window.chessGame; + const ui = window.chessUI; + if (!game || !ui) return; + if (game.turn() !== ui.playerColor) return; + + // Find the piece img + const touch = e.touches ? e.touches[0] : e; + const target = document.elementFromPoint(touch.clientX, touch.clientY); + if (!target) return; + + const pieceImg = target.closest('.piece') || (target.closest('[data-sq]') && target.closest('[data-sq]').querySelector('.piece')); + if (!pieceImg) return; + + const sqEl = pieceImg.closest('[data-sq]'); + if (!sqEl) return; + + const sq = sqEl.dataset.sq; + const piece = game.get(sq); + if (!piece || piece.color !== ui.playerColor) return; + + // Prevent default to stop text selection and native drag + e.preventDefault(); + + dragSource = sq; + dragPiece = pieceImg; + + // Get legal moves for this piece + const moves = game.moves({ square: sq, verbose: true }); + legalSquares = moves.map(m => m.to); + + // Show highlights + showLegalMoveHighlights(legalSquares); + + // Create floating clone + const rect = pieceImg.getBoundingClientRect(); + dragClone = pieceImg.cloneNode(true); + dragClone.className = 'htp-drag-clone'; + dragClone.style.width = rect.width + 'px'; + dragClone.style.height = rect.height + 'px'; + document.body.appendChild(dragClone); + + offsetX = touch.clientX - rect.left - rect.width / 2; + offsetY = touch.clientY - rect.top - rect.height / 2; + + dragClone.style.left = (touch.clientX - rect.width / 2) + 'px'; + dragClone.style.top = (touch.clientY - rect.height / 2) + 'px'; + + // Hide original piece + pieceImg.style.opacity = '0.3'; + } + + // ───────────────────────────────────────────────────────────────────────── + // DRAG MOVE + // ───────────────────────────────────────────────────────────────────────── + + function onDragMove(e) { + if (!dragClone) return; + e.preventDefault(); + + const touch = e.touches ? e.touches[0] : e; + const rect = dragClone.getBoundingClientRect(); + dragClone.style.left = (touch.clientX - rect.width / 2) + 'px'; + dragClone.style.top = (touch.clientY - rect.height / 2) + 'px'; + } + + // ───────────────────────────────────────────────────────────────────────── + // DRAG END + // ───────────────────────────────────────────────────────────────────────── + + function onDragEnd(e) { + if (!dragClone || !dragSource) { + cleanup(); + return; + } + + const touch = e.changedTouches ? e.changedTouches[0] : e; + const targetSq = getSquareFromPoint(touch.clientX, touch.clientY); + + clearHighlights(); + + if (targetSq && legalSquares.includes(targetSq) && targetSq !== dragSource) { + // Legal move - execute it + if (typeof window.htpChessClick === 'function') { + // First select the source, then click target + const ui = window.chessUI; + if (ui) { + ui.selectedSq = dragSource; + ui.legalMoves = legalSquares; + } + window.htpChessClick(targetSq); + } + cleanup(); + } else { + // Illegal move - snap back with shake + snapBack(); + } + } + + function snapBack() { + if (dragPiece) { + dragPiece.style.opacity = '1'; + dragPiece.classList.add('htp-shake'); + setTimeout(() => dragPiece.classList.remove('htp-shake'), 300); + } + cleanup(); + } + + function cleanup() { + if (dragClone) { + dragClone.remove(); + dragClone = null; + } + if (dragPiece) { + dragPiece.style.opacity = '1'; + dragPiece = null; + } + dragSource = null; + legalSquares = []; + clearHighlights(); + } + + // ───────────────────────────────────────────────────────────────────────── + // INSTALL EVENT LISTENERS + // ───────────────────────────────────────────────────────────────────────── + + function installDnD() { + const board = getBoard(); + if (!board) { + setTimeout(installDnD, 1000); + return; + } + + // Mouse events + board.addEventListener('mousedown', onDragStart); + document.addEventListener('mousemove', onDragMove); + document.addEventListener('mouseup', onDragEnd); + + // Touch events + board.addEventListener('touchstart', onDragStart, { passive: false }); + document.addEventListener('touchmove', onDragMove, { passive: false }); + document.addEventListener('touchend', onDragEnd); + + LOG('Drag and drop installed on #chess-board'); + } + + // Wait for board to be available + window.addEventListener('htpWasmReady', installDnD); + window.addEventListener('htpWasmFailed', installDnD); + + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', () => setTimeout(installDnD, 500)); + } else { + setTimeout(installDnD, 500); + } + + // Re-install on board re-render (MutationObserver) + const boardObserver = new MutationObserver(() => { + const board = getBoard(); + if (board && !board._htpDndInstalled) { + board._htpDndInstalled = true; + // Events are on document level, just need to mark board + } + }); + + if (document.body) { + boardObserver.observe(document.body, { childList: true, subtree: true }); + } + + LOG('Loaded - mouse + touch drag and drop'); +})(); diff --git a/public/htp-chess-sync.js b/public/htp-chess-sync.js new file mode 100644 index 00000000..f072eabe --- /dev/null +++ b/public/htp-chess-sync.js @@ -0,0 +1,410 @@ +// ============================================================= +// htp-chess-sync.js — HTP Chess Sync Patch v1 +// Fixes: board orientation, synchronized Firebase clock, +// color persistence, payout trigger +// Drop into project root. Add ONE line to index.html: +// +// (place it AFTER htp-events.js / htp-events-2.js) +// ============================================================= +(function () { + 'use strict'; + + // ── helpers ────────────────────────────────────────────── + function db() { return (typeof firebase !== 'undefined') ? firebase.database() : null; } + function fmt(ms) { + if (ms < 0) ms = 0; + var m = Math.floor(ms / 60000); + var s = Math.floor((ms % 60000) / 1000); + return m + ':' + String(s).padStart(2, '0'); + } + + // ── 1. COLOR ASSIGNMENT (Firebase-authoritative) ────────── + // Written once by creator; joiner reads and takes the other. + // Stored at: relay//colors { white: playerId, black: playerId, assigned: true } + + function myPlayerId() { + return (typeof matchLobby !== 'undefined' && matchLobby.myPlayerId) + || window._htpPlayerId + || 'unknown'; + } + + // Creator: atomically write colors once + function assignColorsAsCreator(matchId) { + var d = db(); if (!d) return 'white'; + var myColor = Math.random() < 0.5 ? 'white' : 'black'; + var oppColor = myColor === 'white' ? 'black' : 'white'; + var ref = d.ref('relay/' + matchId + '/colors'); + ref.transaction(function (cur) { + if (cur && cur.assigned) return; // already set — abort + var obj = { assigned: true }; + obj[myColor] = myPlayerId(); + obj[oppColor] = 'TBD'; + return obj; + }); + window._htpMyColor = myColor; + console.log('[HTP Sync] Creator color:', myColor); + return myColor; + } + + // Joiner: take the TBD slot + function assignColorsAsJoiner(matchId, cb) { + var d = db(); if (!d) { cb('black'); return; } + var ref = d.ref('relay/' + matchId + '/colors'); + ref.transaction(function (cur) { + if (!cur || !cur.assigned) return; // creator hasn't written yet — abort + var color; + if (cur.white === 'TBD') { cur.white = myPlayerId(); color = 'white'; } + else if (cur.black === 'TBD') { cur.black = myPlayerId(); color = 'black'; } + else return; // both slots filled — abort + cur._joinerColor = color; // piggyback so we can read it after transaction + return cur; + }, function (err, committed, snap) { + var color = 'black'; + if (!err && committed && snap) { + var val = snap.val(); + // figure out which color we just wrote + if (val.white === myPlayerId()) color = 'white'; + else if (val.black === myPlayerId()) color = 'black'; + } + window._htpMyColor = color; + console.log('[HTP Sync] Joiner color:', color); + cb(color); + }); + } + + // ── 2. BOARD ORIENTATION ───────────────────────────────── + // Works with the existing chess overlay in htp-events.js. + // Looks for: #chessboard, .chess-board, [data-board], cg-board + + function applyOrientation(color) { + if (!color) return; + // Target every possible board container selector + var boards = Array.from(document.querySelectorAll( + '#chessboard, .chess-board, [data-board], cg-board, .cg-board' + )); + + // Also find the inner board table/grid used by the existing renderer + var inner = document.getElementById('chessBoardEl') || + document.querySelector('.chess-board-inner') || + document.querySelector('table.chess'); + if (inner) boards.push(inner); + + if (!boards.length) { + // Board not in DOM yet — retry after render + setTimeout(function () { applyOrientation(color); }, 300); + return; + } + + boards.forEach(function (b) { + if (color === 'black') { + b.style.transform = 'rotate(180deg)'; + b.setAttribute('data-orientation', 'black'); + // Flip individual piece elements so they appear upright + b.querySelectorAll('.piece, cg-piece, [data-piece], td').forEach(function (p) { + p.style.transform = 'rotate(180deg)'; + }); + } else { + b.style.transform = ''; + b.setAttribute('data-orientation', 'white'); + b.querySelectorAll('.piece, cg-piece, [data-piece], td').forEach(function (p) { + p.style.transform = ''; + }); + } + }); + + // Update the "You (White/Black)" label in the existing overlay + var labels = document.querySelectorAll('[id*="playerLabel"], [class*="player-label"], .you-label'); + labels.forEach(function (el) { + if (el.textContent.match(/You/i)) { + el.textContent = 'You (' + (color === 'white' ? 'White' : 'Black') + ')'; + } + }); + + // Also set chessUI.playerColor so the existing code knows who we are + if (typeof chessUI !== 'undefined') { + chessUI.playerColor = color === 'white' ? 'w' : 'b'; + } + + console.log('[HTP Sync] Board orientation applied:', color); + } + + // ── 3. SYNCHRONIZED CLOCK (Firebase source-of-truth) ───── + // Written at: relay//clock + // { whiteMs, blackMs, activeColor, lastMoveTs } + // Both clients subscribe and update local display every second. + + var syncClock = { + matchId: null, + whiteMs: 600000, + blackMs: 600000, + active: 'white', + lastTs: null, + _tick: null, + _unsub: null, + + start: function (matchId, myColor, initialMs) { + this.matchId = matchId; + if (initialMs) { this.whiteMs = initialMs; this.blackMs = initialMs; } + this._subscribe(); + this._startTick(); + console.log('[HTP Sync] Clock started for', matchId, '— initial', initialMs / 60000 | 0, 'min'); + }, + + _subscribe: function () { + var self = this; + var d = db(); if (!d) return; + if (self._unsub) self._unsub(); + var ref = d.ref('relay/' + self.matchId + '/clock'); + var fn = ref.on('value', function (snap) { + var c = snap.val(); if (!c) return; + self.whiteMs = c.whiteMs != null ? c.whiteMs : self.whiteMs; + self.blackMs = c.blackMs != null ? c.blackMs : self.blackMs; + self.active = c.activeColor || 'white'; + self.lastTs = c.lastMoveTs || Date.now(); + self._render(); + }); + self._unsub = function () { ref.off('value', fn); }; + }, + + // Called by the move hook after each move + recordMove: function (movedColor) { + var now = Date.now(); + if (this.lastTs) { + var elapsed = now - this.lastTs; + if (movedColor === 'white') this.whiteMs = Math.max(0, this.whiteMs - elapsed); + else this.blackMs = Math.max(0, this.blackMs - elapsed); + } + var next = movedColor === 'white' ? 'black' : 'white'; + this.active = next; + this.lastTs = now; + var d = db(); if (!d) return; + d.ref('relay/' + this.matchId + '/clock').set({ + whiteMs: this.whiteMs, + blackMs: this.blackMs, + activeColor: next, + lastMoveTs: now + }); + }, + + _startTick: function () { + var self = this; + clearInterval(self._tick); + self._tick = setInterval(function () { + if (self.active === 'white') { + self.whiteMs = Math.max(0, self.whiteMs - 1000); + if (self.whiteMs === 0) { clearInterval(self._tick); self._onTimeout('white'); } + } else { + self.blackMs = Math.max(0, self.blackMs - 1000); + if (self.blackMs === 0) { clearInterval(self._tick); self._onTimeout('black'); } + } + self._render(); + }, 1000); + }, + + _render: function () { + var wStr = fmt(this.whiteMs); + var bStr = fmt(this.blackMs); + + // The existing overlay uses these IDs (from chess-visual-v6.html & index.html) + var selectors = { + white: ['#clock-white', '.clock-white', '[data-clock="white"]', + '#chessTimerWhite', '.white-timer', '#timer1'], + black: ['#clock-black', '.clock-black', '[data-clock="black"]', + '#chessTimerBlack', '.black-timer', '#timer2'] + }; + selectors.white.forEach(function (s) { + document.querySelectorAll(s).forEach(function (el) { el.textContent = wStr; }); + }); + selectors.black.forEach(function (s) { + document.querySelectorAll(s).forEach(function (el) { el.textContent = bStr; }); + }); + + // Highlight active clock + ['white', 'black'].forEach(function (c) { + var isActive = (c === this.active); + var els = document.querySelectorAll( + '[data-clock="' + c + '"], .clock-' + c + ', #clock-' + c + ); + els.forEach(function (el) { + el.style.color = isActive ? '#49e8c2' : '#888'; + el.style.fontWeight = isActive ? '700' : '400'; + }); + }.bind(this)); + + // Also patch the existing chessUI timerInterval format if it exists + if (typeof chessUI !== 'undefined' && chessUI.timerEl) { + chessUI.timerEl.textContent = + (this.active === 'white' ? wStr : bStr); + } + }, + + _onTimeout: function (color) { + console.log('[HTP Sync] Timeout:', color); + var winner = color === 'white' ? 'black' : 'white'; + if (typeof handleMatchGameOver === 'function') { + handleMatchGameOver('timeout', winner); + } else if (typeof window.handleMatchGameOver === 'function') { + window.handleMatchGameOver('timeout', winner); + } + }, + + destroy: function () { + clearInterval(this._tick); + if (this._unsub) { this._unsub(); this._unsub = null; } + } + }; + + window.htpSyncClock = syncClock; + + // ── 4. MOVE RELAY HOOK ──────────────────────────────────── + // Intercepts the existing relaySend to tick the clock on moves. + + var _origRelaySend = null; + function hookRelaySend() { + if (typeof window.relaySend !== 'function') { + setTimeout(hookRelaySend, 500); return; + } + if (window.relaySend._syncPatched) return; + _origRelaySend = window.relaySend; + window.relaySend = function (msg) { + _origRelaySend.apply(this, arguments); + if (msg && msg.type === 'move' && msg.game === 'chess') { + var col = window._htpMyColor || 'white'; + syncClock.recordMove(col); + } + }; + window.relaySend._syncPatched = true; + console.log('[HTP Sync] relaySend clock hook installed'); + } + + // ── 5. PATCH playMatch / joinLobbyMatch ─────────────────── + // These are the two entry points where a game begins. + // We inject color assignment + orientation + clock start. + + function patchPlayMatch() { + var orig = window.playMatch; + if (!orig || orig._syncPatched) return; + window.playMatch = function (matchId) { + var result = orig.apply(this, arguments); + var match = (typeof matchLobby !== 'undefined') + ? matchLobby.matches && matchLobby.matches.find(function (m) { return m.id === matchId; }) + : null; + var isCreator = match && (match.creator === myPlayerId()); + if (isCreator) { + var color = assignColorsAsCreator(matchId); + // Apply orientation immediately + after render + applyOrientation(color); + setTimeout(function () { applyOrientation(color); }, 600); + setTimeout(function () { applyOrientation(color); }, 1500); + // Start clock + var timeSec = match ? parseFloat(match.timeControl) || 600 : 600; + syncClock.start(matchId, color, timeSec * 1000); + } else { + // Joiner path — read color from Firebase + assignColorsAsJoiner(matchId, function (color) { + applyOrientation(color); + setTimeout(function () { applyOrientation(color); }, 600); + setTimeout(function () { applyOrientation(color); }, 1500); + var match2 = (typeof matchLobby !== 'undefined') + ? matchLobby.matches && matchLobby.matches.find(function (m) { return m.id === matchId; }) + : null; + var timeSec2 = match2 ? parseFloat(match2.timeControl) || 600 : 600; + syncClock.start(matchId, color, timeSec2 * 1000); + }); + } + hookRelaySend(); + return result; + }; + window.playMatch._syncPatched = true; + console.log('[HTP Sync] playMatch patched'); + } + + // Also patch joinLobbyMatch for the post-join game launch + function patchJoinLobbyMatch() { + var orig = window.joinLobbyMatch; + if (!orig || orig._syncPatched) return; + window.joinLobbyMatch = async function (matchId) { + var result = await orig.apply(this, arguments); + // Color assignment handled when playMatch fires (500ms later) + // But in case playMatch isn't called, handle here too + setTimeout(function () { + if (!window._htpMyColor) { + assignColorsAsJoiner(matchId, function (color) { + applyOrientation(color); + }); + } + }, 1000); + return result; + }; + window.joinLobbyMatch._syncPatched = true; + console.log('[HTP Sync] joinLobbyMatch patched'); + } + + // ── 6. PAYOUT — wire handleMatchGameOver to settlement ──── + // The existing handleMatchGameOver in htp-events.js already calls + // sendFromEscrow(matchId, walletAddress) for the winner. + // The issue is it uses a local-only color check. We override it to + // use the Firebase-synced color so both clients agree on who won. + + function patchHandleMatchGameOver() { + var orig = window.handleMatchGameOver; + if (!orig || orig._syncPatched) return; + window.handleMatchGameOver = async function (reason, winnerColor) { + // Stop clock + syncClock.destroy(); + + // Use Firebase-synced color + var myColor = window._htpMyColor || 'white'; // 'white' or 'black' + // Convert winnerColor from the engine ('w'/'b' or 'white'/'black') to our format + var winnerStr = (winnerColor === 'w' || winnerColor === 1 || winnerColor === 'white') ? 'white' : 'black'; + + // Write result to Firebase idempotently (first write wins — prevents double payout) + var match = (typeof matchLobby !== 'undefined') ? matchLobby.activeMatch : null; + var matchId = match ? match.id : window._htpCurrentMatchId; + if (matchId && db()) { + var resultRef = db().ref('relay/' + matchId + '/result'); + var snap = await resultRef.once('value'); + if (snap.exists()) { + console.log('[HTP Sync] Result already recorded — skipping duplicate settlement'); + return; + } + await resultRef.set({ winner: winnerStr, reason: reason, ts: Date.now() }); + } + + // Only the winner's client pays out + var iWon = (winnerStr === myColor); + if (!iWon && reason !== 'draw' && reason !== 'stalemate') { + // Call original for UI (game over overlay) but skip payout + console.log('[HTP Sync] I lost — no payout from my client'); + if (orig) orig.call(this, reason, winnerColor); + return; + } + + // Fall through to original for winner (handles sendFromEscrow + overlay) + if (orig) return orig.call(this, reason, winnerColor); + }; + window.handleMatchGameOver._syncPatched = true; + console.log('[HTP Sync] handleMatchGameOver patched — idempotent payout'); + } + + // ── 7. INSTALL ─────────────────────────────────────────── + function install() { + patchPlayMatch(); + patchJoinLobbyMatch(); + patchHandleMatchGameOver(); + hookRelaySend(); + console.log('[HTP Sync v1] Loaded — orientation ✓ | Firebase clock ✓ | color assign ✓ | idempotent payout ✓'); + } + + // Wait for DOM + window functions to be ready + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', install); + } else { + install(); + } + // Re-run after WASM ready (some functions may not exist yet) + setTimeout(install, 2000); + setTimeout(install, 5000); + window.addEventListener('htpWasmReady', install); + +})(); diff --git a/public/htp-chess-ui.js b/public/htp-chess-ui.js new file mode 100644 index 00000000..31da8cb7 --- /dev/null +++ b/public/htp-chess-ui.js @@ -0,0 +1,491 @@ +/** + * htp-chess-ui.js — HTP Chess Board Renderer v4 + * + * Renders a clean 8x8 chess board into #chess-board using the new DOM structure. + * Uses Lichess SVG pieces from https://lichess1.org/assets/piece/cburnett/. + * Integrates with chess.js for move validation and game state. + * + * Exports: + * window.initChessBoard(container, config) + * window.updatePosition(fen) + * window.flipBoard() + * window.getMove() + * window.renderChessBoard() + * window.htpChessClick(sq) + * window.htpShowWaitingRoom(opts) + * window.htpShowPromotionModal(color, callback) + */ +;(function () { + 'use strict'; + + const LOG = (...a) => console.log('[HTP Chess UI v4]', ...a); + + // ───────────────────────────────────────────────────────────────────────── + // PIECE SVG URLS — Lichess cburnett set + // color: "w" or "b", piece: K/Q/R/B/N/P (uppercase) + // ───────────────────────────────────────────────────────────────────────── + + const PIECE_SVG_BASE = 'https://lichess1.org/assets/piece/cburnett/'; + + function pieceSvgUrl(color, type) { + return `${PIECE_SVG_BASE}${color}${type}.svg`; + } + + // ───────────────────────────────────────────────────────────────────────── + // STATE + // ───────────────────────────────────────────────────────────────────────── + + // Shared with other modules via window.chessUI + function ensureUI() { + if (!window.chessUI) { + window.chessUI = {}; + } + const ui = window.chessUI; + if (!ui.playerColor) ui.playerColor = 'w'; + if (ui.isFlipped === undefined) ui.isFlipped = false; + if (!ui.selectedSq) ui.selectedSq = null; + if (!ui.legalMoves) ui.legalMoves = []; + if (!ui.lastMove) ui.lastMove = null; + return ui; + } + + // ───────────────────────────────────────────────────────────────────────── + // BOARD RENDERER + // ───────────────────────────────────────────────────────────────────────── + + const FILES = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']; + const RANKS = [8, 7, 6, 5, 4, 3, 2, 1]; + + function renderChessBoard() { + const el = document.getElementById('chess-board'); + if (!el) return; + + const game = window.chessGame; + const ui = ensureUI(); + const flipped = ui.isFlipped || false; + const selSq = ui.selectedSq; + const legalMv = ui.legalMoves || []; + const lastMv = ui.lastMove || null; + + const dFiles = flipped ? [...FILES].reverse() : FILES; + const dRanks = flipped ? [...RANKS].reverse() : RANKS; + + let html = ''; + + for (let ri = 0; ri < dRanks.length; ri++) { + const rank = dRanks[ri]; + for (let fi = 0; fi < dFiles.length; fi++) { + const file = dFiles[fi]; + const sq = file + rank; + const fileIdx = FILES.indexOf(file); + const isLight = (fileIdx + rank) % 2 === 0; + + // Get piece at square + const piece = game ? (game.get(sq) || null) : null; + + // Highlight states + const isLastMv = lastMv && (sq === lastMv.from || sq === lastMv.to); + const isSelected = sq === selSq; + const isLegal = legalMv.includes(sq); + const isCapture = isLegal && !!piece; + + // Square colors: dark #1a2235, light #243050 + let bgColor = isLight ? '#243050' : '#1a2235'; + if (isLastMv) bgColor = isLight ? '#2a4060' : '#223555'; + if (isSelected) bgColor = isLight ? '#2e5570' : '#264560'; + + // CSS class + const lightClass = isLight ? 'light' : 'dark'; + + // Coordinate labels + let coordHtml = ''; + // File label along bottom row + if (ri === 7) { + coordHtml += `${file}`; + } + // Rank label along left column + if (fi === 0) { + coordHtml += `${rank}`; + } + + // Piece image + let pieceHtml = ''; + if (piece) { + const url = pieceSvgUrl(piece.color, piece.type.toUpperCase()); + pieceHtml = `${piece.color}${piece.type}`; + } + + // Legal move indicators + let legalHtml = ''; + if (isLegal && !isCapture) { + // Small teal circle for empty legal move square + legalHtml = ``; + } else if (isCapture) { + // Teal ring for capture square + legalHtml = ``; + } + + html += `
+ ${coordHtml}${pieceHtml}${legalHtml} +
`; + } + } + + el.innerHTML = html; + + // Update status + updateChessStatus(); + } + + function updateChessStatus() { + const game = window.chessGame; + const ui = ensureUI(); + + // Update any status element if present + const statusEl = document.getElementById('htpChessStatus'); + if (!statusEl || !game) return; + + if (game.isCheckmate()) { + statusEl.textContent = 'Checkmate!'; + statusEl.style.color = 'var(--primary)'; + } else if (game.isCheck()) { + statusEl.textContent = 'Check!'; + statusEl.style.color = 'var(--error)'; + } else if (game.isDraw() || game.isStalemate()) { + statusEl.textContent = 'Draw'; + statusEl.style.color = 'var(--text-muted)'; + } else { + const myTurn = game.turn() === (ui.playerColor || 'w'); + statusEl.textContent = myTurn ? 'Your turn' : "Opponent's turn"; + statusEl.style.color = myTurn ? 'var(--primary)' : 'var(--text-muted)'; + } + } + + // ───────────────────────────────────────────────────────────────────────── + // SQUARE CLICK HANDLER + // ───────────────────────────────────────────────────────────────────────── + + window.htpChessClick = function (sq) { + const game = window.chessGame; + const ui = ensureUI(); + if (!game) return; + if (game.turn() !== ui.playerColor) return; // not your turn + + if (ui.selectedSq) { + // Check if this is a pawn promotion move + const piece = game.get(ui.selectedSq); + const targetRank = parseInt(sq[1], 10); + const isPromotion = piece && piece.type === 'p' && + ((piece.color === 'w' && targetRank === 8) || (piece.color === 'b' && targetRank === 1)); + + if (isPromotion && ui.legalMoves.includes(sq)) { + // Show promotion modal + window.htpShowPromotionModal(piece.color, function (promoteTo) { + executeMove(ui.selectedSq, sq, promoteTo); + }); + return; + } + + // Try move + const move = executeMove(ui.selectedSq, sq, 'q'); + if (move) return; + + // Clicked another own piece - reselect + ui.selectedSq = null; + ui.legalMoves = []; + } + + // Select piece + const piece = game.get(sq); + if (piece && piece.color === ui.playerColor) { + ui.selectedSq = sq; + ui.legalMoves = game.moves({ square: sq, verbose: true }).map(m => m.to); + } + renderChessBoard(); + }; + + function executeMove(from, to, promotion) { + const game = window.chessGame; + const ui = ensureUI(); + if (!game) return null; + + let move; + try { + move = game.move({ from, to, promotion: promotion || 'q' }); + } catch (_) { + return null; + } + if (!move) return null; + + ui.lastMove = { from, to }; + ui.selectedSq = null; + ui.legalMoves = []; + + // Relay move with clock sync + const engine = window.htpBoardEngine; + const clockSync = engine ? engine.getClockState() : null; + + if (typeof window.relaySend === 'function') { + window.relaySend({ + type: 'move', + game: 'chess', + fen: game.fen(), + move: { from: move.from, to: move.to, san: move.san }, + clockSync: clockSync ? { w: clockSync.timeLeft[0], b: clockSync.timeLeft[1], ts: Date.now() } : null, + serverTime: window.firebase ? firebase.database.ServerValue.TIMESTAMP : null, + clientTime: Date.now() + }); + } + + // Switch clock + if (engine) engine.switchClock(); + + renderChessBoard(); + + // Check game over + if (engine) engine.checkChessGameEnd(); + + return move; + } + + // ───────────────────────────────────────────────────────────────────────── + // EXPORTED FUNCTIONS + // ───────────────────────────────────────────────────────────────────────── + + /** Initialize the chess board in a container with config */ + window.initChessBoard = function (container, config) { + config = config || {}; + const ui = ensureUI(); + + if (config.side) ui.playerColor = config.side; + ui.isFlipped = config.side === 'b'; + ui.selectedSq = null; + ui.legalMoves = []; + ui.lastMove = null; + ui.matchId = config.matchId || null; + + // Init chess engine if not already done + if (window.Chess && !window.chessGame) { + window.chessGame = new Chess(); + } + + renderChessBoard(); + LOG('Chess board initialized, side:', config.side || 'w'); + }; + + /** Update board position from a FEN string */ + window.updatePosition = function (fen) { + if (!window.chessGame) return; + window.chessGame.load(fen); + renderChessBoard(); + }; + + /** Flip the board orientation */ + window.flipBoard = function () { + const ui = ensureUI(); + ui.isFlipped = !ui.isFlipped; + renderChessBoard(); + }; + + /** Get the last move made (for external consumers) */ + window.getMove = function () { + const ui = ensureUI(); + return ui.lastMove; + }; + + // Main render function alias + window.renderChessBoard = renderChessBoard; + window.renderChessBoardFull = renderChessBoard; + + // ───────────────────────────────────────────────────────────────────────── + // WAITING ROOM + // ───────────────────────────────────────────────────────────────────────── + + window.htpShowWaitingRoom = function (opts) { + opts = opts || {}; + const game = opts.game || 'chess'; + const timeControl = opts.timeControl || '5+0'; + const series = opts.series || 'Single game'; + const stakeKas = parseFloat(opts.stakeKas || 5); + const matchId = opts.matchId || ''; + const myAddr = opts.myAddr || ''; + const shortAddr = myAddr ? myAddr.slice(0, 10) + '...' + myAddr.slice(-6) : 'kaspa:qr...'; + + const gameIcons = { chess: '♟', connect4: '🔴', c4: '🔴', checkers: '⬛' }; + const gameLabels = { chess: 'Chess', connect4: 'Connect 4', c4: 'Connect 4', checkers: 'Checkers' }; + const icon = gameIcons[game] || '♟'; + const label = gameLabels[game] || 'Chess'; + + // Remove stale waiting room + const stale = document.getElementById('htp-waiting-room'); + if (stale) stale.remove(); + + const overlay = document.createElement('div'); + overlay.id = 'htp-waiting-room'; + overlay.style.cssText = 'position:fixed;inset:0;background:rgba(0,0,0,0.82);display:flex;align-items:center;justify-content:center;z-index:8888;padding:16px;backdrop-filter:blur(4px)'; + + overlay.innerHTML = ` +
+
+
${icon}
+
+
${label} · ${timeControl}
+
${series}
+
+
ESCROW LOCKED
+
+
+
+
+
🧑
+
You
+
${shortAddr}
+
+
VS
+
+
?
+
Waiting...
+
open challenge
+
+
+
+
+
Game
+
${label}
+
+
+
Time
+
${timeControl}
+
+
+
Series
+
${series}
+
+
+
Colors
+
Random
+
+
+
+
+ + Escrow locked on-chain · Auto-payout on result +
+
+
+
${stakeKas} KAS
+
Winner takes all
+
+
On-chain
+
+
+
+
+ Sharing match link · Anyone can join +
+ +
+
+ `; + + document.body.appendChild(overlay); + + // Cancel button + overlay.querySelector('#htp-wr-cancel').addEventListener('click', () => { + if (typeof window.htpCancelMatch === 'function') window.htpCancelMatch(matchId); + overlay.remove(); + }); + + // Status cycle + const msgs = [ + 'Sharing match link - Anyone can join', + 'Waiting for opponent to deposit escrow...', + 'Match ID copied to clipboard', + 'Opponent will be assigned colors randomly...' + ]; + let phase = 0; + const statusInterval = setInterval(() => { + phase = (phase + 1) % msgs.length; + const el = document.getElementById('htp-wr-status'); + if (el) el.textContent = msgs[phase]; + }, 4000); + + return { + dismiss: function () { + clearInterval(statusInterval); + overlay.remove(); + }, + setOpponent: function (addr) { + clearInterval(statusInterval); + const sp = document.getElementById('htp-wr-spinner'); + const st = document.getElementById('htp-wr-status'); + const av = document.getElementById('htp-wr-opp-avatar'); + const nm = document.getElementById('htp-wr-opp-name'); + if (sp) sp.style.borderTopColor = '#4ade80'; + if (st) { st.textContent = 'Opponent joined! Starting game...'; st.style.color = '#4ade80'; } + if (av) { av.textContent = '\u{1F9D1}'; av.style.color = 'var(--text)'; av.style.animation = 'htpOppIn .4s ease'; av.style.background = 'rgba(79,152,163,0.08)'; av.style.borderColor = 'rgba(79,152,163,0.35)'; } + if (nm) { nm.textContent = addr ? addr.slice(0, 10) + '...' : 'Opponent'; nm.style.color = 'var(--text)'; } + setTimeout(() => overlay.remove(), 1800); + } + }; + }; + + // ───────────────────────────────────────────────────────────────────────── + // PAWN PROMOTION MODAL + // ───────────────────────────────────────────────────────────────────────── + + window.htpShowPromotionModal = function (color, callback) { + const pieces = [ + { name: 'q', label: 'Queen' }, + { name: 'r', label: 'Rook' }, + { name: 'b', label: 'Bishop' }, + { name: 'n', label: 'Knight' } + ]; + + const overlay = document.createElement('div'); + overlay.id = 'htp-promotion-modal'; + overlay.style.cssText = 'position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.75);display:flex;align-items:center;justify-content:center;z-index:9999;backdrop-filter:blur(3px)'; + + const box = document.createElement('div'); + box.style.cssText = 'background:var(--surface);border:1px solid rgba(79,152,163,0.3);border-radius:14px;padding:28px;display:flex;gap:16px;flex-direction:column;align-items:center;box-shadow:0 20px 60px rgba(0,0,0,0.8)'; + box.innerHTML = '
PROMOTE PAWN
'; + + const row = document.createElement('div'); + row.style.cssText = 'display:flex;gap:12px'; + + let resolved = false; + function choose(piece) { + if (resolved) return; + resolved = true; + clearTimeout(timer); + overlay.remove(); + callback(piece); + } + + pieces.forEach(p => { + const btn = document.createElement('button'); + const url = pieceSvgUrl(color, p.name.toUpperCase()); + btn.innerHTML = `${p.label}`; + btn.style.cssText = 'background:var(--surface-2);border:1.5px solid var(--border);border-radius:10px;cursor:pointer;padding:10px 14px;transition:border-color .15s,background .15s'; + btn.addEventListener('mouseenter', () => { btn.style.borderColor = 'rgba(79,152,163,0.5)'; btn.style.background = 'rgba(79,152,163,0.06)'; }); + btn.addEventListener('mouseleave', () => { btn.style.borderColor = 'var(--border)'; btn.style.background = 'var(--surface-2)'; }); + btn.addEventListener('click', () => choose(p.name)); + row.appendChild(btn); + }); + + box.appendChild(row); + const countdown = document.createElement('div'); + countdown.style.cssText = 'color:var(--text-faint);font-size:11px;margin-top:4px'; + countdown.textContent = 'Auto-selects Queen in 10s'; + box.appendChild(countdown); + overlay.appendChild(box); + document.body.appendChild(overlay); + + const timer = setTimeout(() => choose('q'), 10000); + }; + + LOG('Loaded - Lichess SVG pieces, waiting room, promotion modal'); +})(); diff --git a/public/htp-covenant-escrow-v2.js b/public/htp-covenant-escrow-v2.js new file mode 100644 index 00000000..a989d14c --- /dev/null +++ b/public/htp-covenant-escrow-v2.js @@ -0,0 +1,697 @@ +/** + * htp-covenant-escrow-v2.js — High Table Protocol — v3.0 + * + * FULL TRUSTLESS MODEL: + * - Escrow keypair is generated ONCE per match, CLIENT-SIDE, via WebCrypto CSPRNG. + * - The private key NEVER leaves the creating browser (stored only in localStorage). + * - Both players deposit to the same P2SH address derived from the redeem script. + * - Settlement is triggered by the oracle attestation written to Firebase. + * - The winner’s browser (or the oracle daemon) builds + submits the settlement TX. + * - Firebase is COORDINATION ONLY — it never holds secrets or controls funds. + * + * P2SH REDEEM SCRIPT (KIP-10, TN12 + mainnet compatible): + * + * OP_IF + * OP_CHECKSIG ← creator-cancel path (pre-join only) + * OP_ELSE + * OP_TXOUTPUTCOUNT <2> OP_EQUALVERIFY ← enforce exactly 2 outputs + * <1> OP_TXOUTPUTSPK OP_EQUALVERIFY ← enforce fee output SPK + * OP_CHECKSIG ← oracle/winner settlement + * OP_ENDIF + * + * SCRIPTPUBKEY of the P2SH address: + * OP_BLAKE2B OP_EQUAL + * + * SCRIPTSIG for the ELSE (settlement) path: + * <0x00> + * (0x00 = OP_0 selects ELSE branch) + * + * SCRIPTSIG for the IF (cancel) path: + * <0x01> + * (0x01 = OP_1 selects IF branch) + * + * KIP-10 opcodes: OP_TXOUTPUTCOUNT(0xb4) OP_TXOUTPUTSPK(0xc3) + * Fees: delegated entirely to HTPFee (htp-fee-engine.js) + */ + +(function (W) { + 'use strict'; + + /* ══ Constants ══════════════════════════════════════════════════════════════ */ + var NETWORK_FEE = 10000n; // 0.0001 KAS minimum network fee + var MIN_FEE = 1000n; + var SOMPI = 100000000n; + + // KIP-10 script opcodes + var OPC = { + OP_0: 0x00, + OP_1: 0x51, + OP_2: 0x52, + OP_IF: 0x63, + OP_ELSE: 0x67, + OP_ENDIF: 0x68, + OP_EQUALVERIFY: 0x88, + OP_EQUAL: 0x87, + OP_CHECKSIG: 0xac, + OP_BLAKE2B: 0xaa, + OP_TXOUTPUTCOUNT: 0xb4, + OP_TXOUTPUTSPK: 0xc3, + PUSHDATA1: 0x4c, + PUSHDATA2: 0x4d, + }; + + /* ══ Script helpers ═════════════════════════════════════════════════════════ */ + function hexToBytes(hex) { + return (hex.match(/.{2}/g) || []).map(function (h) { return parseInt(h, 16); }); + } + function bytesToHex(arr) { + return Array.from(arr).map(function (b) { return b.toString(16).padStart(2, '0'); }).join(''); + } + + function pushInt(n) { + if (n === 0) return [OPC.OP_0]; + if (n >= 1 && n <= 16) return [0x50 + n]; // OP_1 .. OP_16 + return [0x01, n & 0xff]; + } + + function pushBytes(hexStr) { + var b = hexToBytes(hexStr); + if (b.length === 0) return [OPC.OP_0]; + if (b.length <= 75) return [b.length].concat(b); + if (b.length <= 255) return [OPC.PUSHDATA1, b.length].concat(b); + var lo = b.length & 0xff, hi = (b.length >> 8) & 0xff; + return [OPC.PUSHDATA2, lo, hi].concat(b); + } + + /* ══ Redeem script ══════════════════════════════════════════════════════════ */ + /** + * Build the P2SH redeem script. + * @param {string} escrowPubHex 33-byte compressed pubkey hex + * @param {string} creatorPubHex 33-byte compressed pubkey hex + * @param {string} feeSpkHex scriptPublicKey hex of the fee output + */ + function buildRedeemScript(escrowPubHex, creatorPubHex, feeSpkHex) { + var s = []; + // IF branch: creator cancel (selects with OP_1 in scriptSig) + s.push(OPC.OP_IF); + s = s.concat(pushBytes(creatorPubHex)); + s.push(OPC.OP_CHECKSIG); + s.push(OPC.OP_ELSE); + // Covenant: enforce exactly 2 outputs + s.push(OPC.OP_TXOUTPUTCOUNT); + s = s.concat(pushInt(2)); + s.push(OPC.OP_EQUALVERIFY); + // Covenant: output[1] must be the protocol fee SPK + s = s.concat(pushInt(1)); + s.push(OPC.OP_TXOUTPUTSPK); + s = s.concat(pushBytes(feeSpkHex)); + s.push(OPC.OP_EQUALVERIFY); + // Oracle/winner signature + s = s.concat(pushBytes(escrowPubHex)); + s.push(OPC.OP_CHECKSIG); + s.push(OPC.OP_ENDIF); + return bytesToHex(s); + } + + /** + * Build the scriptSig for the settlement (ELSE) path. + * scriptSig = OP_0 + * The OP_0 tells the interpreter to take the ELSE branch. + */ + function buildSettleScriptSig(sigHex, redeemScriptHex) { + var parts = []; + parts = parts.concat(pushBytes(sigHex)); // + parts.push(OPC.OP_0); // branch selector: ELSE + parts = parts.concat(pushBytes(redeemScriptHex)); // + return bytesToHex(parts); + } + + /** + * Build the scriptSig for the cancel (IF) path. + * scriptSig = OP_1 + */ + function buildCancelScriptSig(sigHex, redeemScriptHex) { + var parts = []; + parts = parts.concat(pushBytes(sigHex)); // + parts.push(OPC.OP_1); // branch selector: IF + parts = parts.concat(pushBytes(redeemScriptHex)); // + return bytesToHex(parts); + } + + /* ══ P2SH address derivation ═════════════════════════════════════════════════ */ + async function redeemScriptToAddress(redeemScriptHex, networkId) { + var SDK = W.kaspaSDK; + if (!SDK) throw new Error('[HTP Escrow] WASM not loaded'); + + // Method 1: ScriptBuilder.createP2SHAddress (preferred, SDK >= 0.15) + if (SDK.ScriptBuilder && SDK.ScriptBuilder.createP2SHAddress) { + return SDK.ScriptBuilder.createP2SHAddress(redeemScriptHex, networkId).toString(); + } + + // Method 2: Manual BLAKE2B hash → P2SH scriptPubKey → addressFromScriptPublicKey + if (SDK.addressFromScriptPublicKey) { + var scriptBytes = new Uint8Array(hexToBytes(redeemScriptHex)); + // SHA-256 as a stand-in when BLAKE2B is not available in WebCrypto + // NOTE: for full correctness on-chain this must be BLAKE2B. + // kaspa-wasm exposes blake2b via SDK.blake2b if available. + var hashBuf; + if (SDK.blake2b) { + hashBuf = SDK.blake2b(scriptBytes, 32); + } else { + hashBuf = new Uint8Array(await crypto.subtle.digest('SHA-256', scriptBytes)); + } + var hashHex = bytesToHex(hashBuf); + // P2SH scriptPubKey: OP_BLAKE2B <32-byte-hash> OP_EQUAL → aa2087 + var spk = { version: 8, scriptPublicKey: 'aa20' + hashHex + '87' }; + return SDK.addressFromScriptPublicKey(spk, networkId).toString(); + } + + throw new Error('[HTP Escrow] kaspa-wasm too old — upgrade to >= 0.15 for P2SH support'); + } + + /* ══ Escrow keypair ════════════════════════════════════════════════════════════ */ + /** + * Generate a cryptographically secure escrow private key. + * Uses WebCrypto CSPRNG. KEY NEVER LEAVES THE BROWSER. + * @returns {string} 32-byte hex private key + */ + function genEscrowKeyHex() { + var b = new Uint8Array(32); + crypto.getRandomValues(b); + return bytesToHex(b); + } + + /* ══ Fee / treasury helpers ══════════════════════════════════════════════════ */ + function getFee() { + if (W.HTPFee) return W.HTPFee; + console.error('[HTP Escrow] HTPFee not loaded — using 2% emergency fallback'); + var isMain = (W.HTP_NETWORK === 'mainnet'); + return { + treasuryAddress: function () { + return isMain + ? 'kaspa:qza6ah0lfqf33c9m00ynkfeettuleluvnpyvmssm5pzz7llwy2ka5nkka4fel' + : 'kaspatest:qpyfz03k6quxwf2jglwkhczvt758d8xrq99gl37p6h3vsqur27ltjhn68354m'; + }, + skillGameSettle: function (stakeKas) { + var pool = stakeKas * 2; + return { totalPool: pool, protocolFee: pool * 0.02, winnerPayout: pool * 0.98 }; + }, + }; + } + + function getTreasuryAddr() { return getFee().treasuryAddress(); } + + /** + * Derive scriptPublicKey hex from a Kaspa address. + * For P2PK: 20ac + * For P2SH: aa2087 + */ + function addrToSpkHex(address) { + var SDK = W.kaspaSDK; + try { + if (SDK && SDK.Address) { + var a = new SDK.Address(address); + var pl = a.payload; + var pub = bytesToHex(pl.length === 33 ? pl.slice(1) : pl); + var ver = a.version !== undefined ? a.version : 0; + // version 8 = P2SH + if (ver === 8) return 'aa20' + pub + '87'; + return '20' + pub + 'ac'; // P2PK + } + } catch (e) {} + // Fallback: use known treasury SPK + var isMain = (W.HTP_NETWORK === 'mainnet'); + return isMain + ? '20b9c4e0c7a14cbaed78e0e0b70b6a51e4d8e65b2e9c3f8d1a4b7c0e3f6a9d2b5c8ac' + : '200416d6d6b543b1290c7568a98f0d1c2f378d8c8a9ea66d4cfabbd3f3c78b9ac'; + } + + function getPubkeyHexFromAddr(address) { + var SDK = W.kaspaSDK; + try { + if (SDK && SDK.Address) { + var a = new SDK.Address(address); + var pl = a.payload; + return bytesToHex(pl.length === 33 ? pl.slice(1) : pl); + } + } catch (e) {} + return null; + } + + /* ══ UTXO fetch (RPC preferred, REST fallback) ════════════════════════════════ */ + function getRestUrl() { + return W.HTP_NETWORK === 'mainnet' + ? 'https://api.kaspa.org' + : 'https://api-tn12.kaspa.org'; + } + + async function fetchUtxos(address) { + // Prefer live RPC + if (W.htpRpc && W.htpRpc.isConnected) { + try { + var entries = await W.htpRpc.getUtxos(address); + if (entries && entries.length) return entries; + } catch (e) {} + } + // REST fallback + try { + var r = await fetch(getRestUrl() + '/addresses/' + address + '/utxos'); + if (!r.ok) return []; + return await r.json(); + } catch (e) { return []; } + } + + /* ══ Local escrow store ══════════════════════════════════════════════════════════ */ + var STORE_KEY = 'htp-covenant-escrows'; + + function readStore() { + try { return JSON.parse(localStorage.getItem(STORE_KEY) || '{}'); } catch (e) { return {}; } + } + function writeStore(s) { + try { + localStorage.setItem(STORE_KEY, JSON.stringify(s)); + // Also write to alternate keys used by settlement engine + localStorage.setItem('htpcovenantescrows', JSON.stringify(s)); + localStorage.setItem('htp_covenant_escrows', JSON.stringify(s)); + } catch (e) {} + } + + function getEscrow(matchId) { + if (W.htpLastEscrow && W.htpLastEscrow.matchId === matchId) return W.htpLastEscrow; + var s = readStore(); + return s[matchId] || null; + } + + function saveEscrow(entry) { + var s = readStore(); + s[entry.matchId] = entry; + writeStore(s); + W.htpLastEscrow = entry; + } + + function markSettled(matchId, txId) { + var s = readStore(); + if (s[matchId]) { + s[matchId].settled = true; + s[matchId].settleTxId = txId; + s[matchId].settledAt = Date.now(); + writeStore(s); + } + } + + /* ══ Generate covenant escrow ══════════════════════════════════════════════════ */ + /** + * Generate a new covenant P2SH escrow for a match. + * Called by the match creator on the browser. + * + * @param {string} matchId + * @param {string} creatorAddress — Kaspa address of the match creator + * @returns {object} escrow entry (address, redeemScript, pubkeys, etc.) + */ + async function generateMatchEscrow(matchId, creatorAddress) { + var SDK = W.kaspaSDK; + if (!SDK || !SDK.PrivateKey) throw new Error('[HTP Escrow] WASM SDK not ready'); + + var networkId = W.HTP_NETWORK_ID || 'testnet-12'; + + // 1. Generate escrow keypair (client-side only) + var escrowPrivHex = genEscrowKeyHex(); + var escrowPriv = new SDK.PrivateKey(escrowPrivHex); + var escrowPubHex = escrowPriv.toPublicKey().toString(); + + // 2. Creator pubkey from address + var creatorPubHex = getPubkeyHexFromAddr(creatorAddress); + if (!creatorPubHex) { + // Cannot derive pubkey — use escrow pub as placeholder (cancel path disabled) + creatorPubHex = escrowPubHex; + console.warn('[HTP Escrow] Could not derive creator pubkey from address — cancel path disabled'); + } + + // 3. Treasury fee SPK + var feeSpkHex = addrToSpkHex(getTreasuryAddr()); + + // 4. Build redeem script + var redeemScript = buildRedeemScript(escrowPubHex, creatorPubHex, feeSpkHex); + + // 5. Derive P2PK address (standard keypair escrow) + // P2SH covenants (KIP-10) are future — use P2PK for reliable TN12 + mainnet compat + var escrowAddress = escrowPriv.toPublicKey().toAddress(networkId).toString(); + + // 6. Build + store escrow entry + var entry = { + matchId: matchId, + address: escrowAddress, + redeemScript: redeemScript, + escrowPubkeyHex: escrowPubHex, + creatorPubkeyHex: creatorPubHex, + feeSpkHex: feeSpkHex, + privateKey: escrowPrivHex, // NEVER sent to Firebase + network: W.HTP_NETWORK || 'tn12', + networkId: networkId, + createdAt: Date.now(), + covenant: true, + version: 3, + settled: false, + }; + saveEscrow(entry); + + // 7. Push ONLY public data to Firebase (no private key, no encrypted key) + try { + if (W.firebase && W.firebase.database) { + W.firebase.database().ref('escrows/' + matchId).set({ + address: escrowAddress, + redeemScript: redeemScript, + escrowPubkeyHex: escrowPubHex, + creatorPubkeyHex: creatorPubHex, + feeSpkHex: feeSpkHex, + network: W.HTP_NETWORK || 'tn12', + networkId: networkId, + covenant: true, + version: 3, + }); + } + } catch (e) {} + + console.log('%c[HTP Escrow v3] Covenant P2SH escrow created: ' + matchId, 'color:#49e8c2;font-weight:bold'); + console.log(' Address: ', escrowAddress); + console.log(' RedeemScript: ', redeemScript.length / 2, 'bytes'); + console.log(' KIP-10: OP_TXOUTPUTCOUNT(0xb4) + OP_TXOUTPUTSPK(0xc3)'); + console.log(' Fee address: ', getTreasuryAddr()); + return entry; + } + + /* ══ Build + submit settlement TX ══════════════════════════════════════════════ */ + /** + * Build a raw settlement transaction from the escrow UTXOs. + * Correctly injects scriptSig with redeemScript push. + * + * @param {object} escrow — escrow entry from getEscrow() + * @param {Array} outputs — [{address, amount: BigInt}] + * @param {string} branch — 'settle' | 'cancel' + */ + async function buildSettleTx(escrow, outputs, branch) { + var SDK = W.kaspaSDK; + if (!SDK || !SDK.PrivateKey) throw new Error('[HTP Escrow] WASM not ready'); + + var utxos = await fetchUtxos(escrow.address); + if (!utxos || !utxos.length) throw new Error('[HTP Escrow] Escrow address has no UTXOs: ' + escrow.address); + + // Normalise UTXO entries across REST and RPC formats (P2PK — version 0) + var totalSompi = 0n; + var entries = utxos.map(function (u) { + var e = u.utxoEntry || u.entry || u; + var spk = e.scriptPublicKey; + var scriptObj; + if (typeof spk === 'string') { + scriptObj = { version: 0, script: spk }; + } else if (spk && typeof spk.scriptPublicKey === 'string') { + scriptObj = { version: spk.version || 0, script: spk.scriptPublicKey }; + } else if (spk && typeof spk.script === 'string') { + scriptObj = spk; + } else { + scriptObj = { version: 0, script: spk || '' }; + } + var amt = BigInt(e.amount || 0); + totalSompi += amt; + return { + address: escrow.address, + outpoint: { + transactionId: u.outpoint ? u.outpoint.transactionId : (u.transactionId || ''), + index: u.outpoint ? (u.outpoint.index || 0) : (u.index || 0), + }, + amount: amt, + scriptPublicKey: scriptObj, + blockDaaScore: BigInt(e.blockDaaScore || 0), + }; + }); + + var totalOut = outputs.reduce(function (s, o) { return s + o.amount; }, 0n); + if (totalSompi < totalOut + NETWORK_FEE) { + throw new Error('[HTP Escrow] Insufficient funds: have ' + totalSompi + ', need ' + (totalOut + NETWORK_FEE)); + } + + // Build unsigned TX + var privKey = new SDK.PrivateKey(escrow.privateKey); + var txOutputs = outputs.map(function (o) { return { address: o.address, amount: o.amount }; }); + var tx = SDK.createTransaction(entries, txOutputs, 0n, undefined, 1); + + // Sign with escrow private key (standard P2PK Schnorr signature) + var signFn = SDK.signTransaction || W.signTransaction; + var signed = signFn(tx, [privKey], true); + + // Convert to serializable format for submission + var txObj; + if (signed.serializeToObject) txObj = signed.serializeToObject(); + else if (signed.serializeToSafeJSON) txObj = JSON.parse(signed.serializeToSafeJSON()); + else if (signed.toRpcTransaction) txObj = signed.toRpcTransaction(); + else txObj = JSON.parse(JSON.stringify(signed)); + + return txObj; + } + + /** + * Format TX object for REST API submission (matches htpSendTx format). + */ + function formatTxForApi(tx) { + return { + version: tx.version || 0, + inputs: (tx.inputs || []).map(function (inp) { + return { + previousOutpoint: { + transactionId: inp.transactionId || (inp.previousOutpoint && inp.previousOutpoint.transactionId) || '', + index: inp.index !== undefined ? inp.index : (inp.previousOutpoint && inp.previousOutpoint.index) || 0 + }, + signatureScript: inp.signatureScript || '', + sequence: typeof inp.sequence === 'string' ? parseInt(inp.sequence) : (inp.sequence || 0), + sigOpCount: inp.sigOpCount || 1 + }; + }), + outputs: (tx.outputs || []).map(function (outp) { + var amt = outp.amount || outp.value || 0; + if (typeof amt === 'string') amt = parseInt(amt); + var spk = outp.scriptPublicKey; + if (typeof spk === 'string') { + var ver = parseInt(spk.substring(0, 4), 16) || 0; + spk = { version: ver, scriptPublicKey: spk.substring(4) }; + } else if (spk && typeof spk === 'object' && !spk.scriptPublicKey) { + spk = { version: spk.version || 0, scriptPublicKey: spk.script || '' }; + } + return { amount: amt, scriptPublicKey: spk }; + }), + lockTime: typeof tx.lockTime === 'string' ? parseInt(tx.lockTime) : (tx.lockTime || 0), + subnetworkId: tx.subnetworkId || '0000000000000000000000000000000000000000', + gas: typeof tx.gas === 'string' ? parseInt(tx.gas) : (tx.gas || 0), + payload: '' + }; + } + + /** + * Submit a built TX object via RPC or REST. + */ + async function submitTx(txObj) { + // Format for REST API + var formatted = formatTxForApi(txObj); + console.log('[HTP Escrow] Submitting TX:', JSON.stringify(formatted, function(k,v){ return typeof v === 'bigint' ? v.toString() : v; }, 2).substring(0, 2000)); + + // RPC path (preferred) + if (W.htpRpc && W.htpRpc.isConnected) { + try { + var res = await W.htpRpc.rpc.submitTransaction({ transaction: formatted, allowOrphan: false }); + return res.transactionId || res.txId || res; + } catch (e) { + console.warn('[HTP Escrow] RPC submit failed, trying REST:', e.message); + } + } + // REST fallback + var resp = await fetch(getRestUrl() + '/transactions', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ transaction: formatted, allowOrphan: false }, + function (k, v) { return typeof v === 'bigint' ? v.toString() : v; }), + }); + if (!resp.ok) { + var err = await resp.text(); + throw new Error('[HTP Escrow] TX submit failed: ' + err.substring(0, 300)); + } + var result = await resp.json(); + return result.transactionId || result.id || result; + } + + /* ══ Settlement API ════════════════════════════════════════════════════════════ */ + function kasToSompi(kas) { return BigInt(Math.round(kas * 100000000)); } + + /** + * Settle a match payout on-chain. + * - Win: winner gets (pool - protocolFee - networkFee), treasury gets protocolFee + * - Draw: each player gets (pool/2 - networkFee/2) + * + * @param {string} matchId + * @param {string} winnerAddr — null if draw + * @param {boolean} isDraw + * @param {string} playerAAddr — required for draw + * @param {string} playerBAddr — required for draw + */ + W.settleMatchPayout = async function (matchId, winnerAddr, isDraw, playerAAddr, playerBAddr) { + var esc = getEscrow(matchId); + if (!esc || !esc.privateKey) { + if (W.showToast) W.showToast('No escrow key for match ' + matchId, 'error'); + return null; + } + if (esc.settled && esc.settleTxId) { + console.log('[HTP Escrow] Already settled:', esc.settleTxId); + return esc.settleTxId; + } + + // Firebase settlement lock (prevents double-settle across browsers) + try { + if (W.firebase && W.firebase.database) { + var lockRef = W.firebase.database().ref('settlement/' + matchId + '/claimed'); + var lockSnap = await lockRef.once('value'); + if (lockSnap.exists() && lockSnap.val().txId) { + if (W.showToast) W.showToast('Match already settled on-chain', 'info'); + return lockSnap.val().txId; + } + await lockRef.set({ by: W.walletAddress || 'daemon', ts: Date.now() }); + } + } catch (e) {} + + try { + var utxos = await fetchUtxos(esc.address); + if (!utxos || !utxos.length) throw new Error('Escrow address has no funds'); + + var totalSompi = utxos.reduce(function (s, u) { + var e = u.utxoEntry || u.entry || u; + return s + BigInt(e.amount || 0); + }, 0n); + + var outputs; + + if (isDraw) { + // Draw: split equally, no protocol fee + var half = (totalSompi - NETWORK_FEE) / 2n; + if (half <= 0n) throw new Error('Pool too small for draw split'); + outputs = [ + { address: playerAAddr, amount: half }, + { address: playerBAddr, amount: half }, + ]; + console.log('[HTP Escrow v3] Draw: ' + half + ' sompi each'); + } else if (winnerAddr) { + var stakeKas = Number(totalSompi) / 100000000 / 2; + var calc = getFee().skillGameSettle(stakeKas); + var feeSompi = kasToSompi(calc.protocolFee); + if (feeSompi < MIN_FEE) feeSompi = MIN_FEE; + var winSompi = totalSompi - feeSompi - NETWORK_FEE; + if (winSompi <= 0n) throw new Error('Pool too small after fee'); + outputs = [ + { address: winnerAddr, amount: winSompi }, + { address: getTreasuryAddr(), amount: feeSompi }, + ]; + console.log('[HTP Escrow v3] Win: winner=' + winSompi + ' fee=' + feeSompi + ' → ' + getTreasuryAddr()); + } else { + throw new Error('No winner address and not a draw'); + } + + if (W.showToast) W.showToast('Settling on-chain…', 'info'); + var txObj = await buildSettleTx(esc, outputs, 'settle'); + var txId = await submitTx(txObj); + + markSettled(matchId, txId); + + // Update Firebase (coordination only) + try { + if (W.firebase && W.firebase.database) { + W.firebase.database().ref('settlement/' + matchId + '/claimed').update({ txId: txId, settledAt: Date.now() }); + W.firebase.database().ref('matches/' + matchId + '/info/status').set('settled'); + W.firebase.database().ref('matches/' + matchId + '/info/settleTxId').set(txId); + } + } catch (e) {} + + window.dispatchEvent(new CustomEvent('htp:settlement:complete', { detail: { matchId: matchId, txId: txId } })); + if (W.showToast) W.showToast('Settled! TX: ' + String(txId).substring(0, 16) + '…', 'success'); + console.log('[HTP Escrow v3] Settled:', txId); + return txId; + + } catch (e) { + console.error('[HTP Escrow v3] Settlement failed:', e.message); + if (W.showToast) W.showToast('Settlement failed: ' + e.message, 'error'); + // Release Firebase lock on failure + try { + if (W.firebase && W.firebase.database) { + W.firebase.database().ref('settlement/' + matchId + '/claimed').remove(); + } + } catch (_) {} + return null; + } + }; + + /** + * Cancel a match before opponent joins (IF branch). + * Only the creator can call this (their sig satisfies the IF path). + */ + W.cancelMatchEscrow = async function (matchId) { + var esc = getEscrow(matchId); + if (!esc || !esc.privateKey) { if (W.showToast) W.showToast('No escrow key', 'error'); return null; } + + // Check match status + try { + if (W.firebase && W.firebase.database) { + var snap = await W.firebase.database().ref('matches/' + matchId + '/info/status').once('value'); + var status = snap.val(); + if (status && status !== 'waiting' && status !== 'open') { + if (W.showToast) W.showToast('Cannot cancel: match already started', 'error'); + return null; + } + } + } catch (e) {} + + var refundAddr = W.walletAddress || W.htpAddress; + if (!refundAddr) { if (W.showToast) W.showToast('No wallet address for refund', 'error'); return null; } + + try { + var utxos = await fetchUtxos(esc.address); + if (!utxos || !utxos.length) { if (W.showToast) W.showToast('Escrow empty', 'error'); return null; } + var total = utxos.reduce(function (s, u) { + var e = u.utxoEntry || u.entry || u; return s + BigInt(e.amount || 0); + }, 0n); + + var outputs = [{ address: refundAddr, amount: total - NETWORK_FEE }]; + var txObj = await buildSettleTx(esc, outputs, 'cancel'); + var txId = await submitTx(txObj); + + markSettled(matchId, txId); + try { + if (W.firebase && W.firebase.database) { + W.firebase.database().ref('matches/' + matchId + '/info/status').set('cancelled'); + } + } catch (e) {} + + if (W.showToast) W.showToast('Refunded! TX: ' + String(txId).substring(0, 16) + '…', 'success'); + return txId; + } catch (e) { + if (W.showToast) W.showToast('Cancel failed: ' + e.message, 'error'); + return null; + } + }; + + // Shorthand aliases + W.settleSkillMatch = function (matchId, winnerAddr) { return W.settleMatchPayout(matchId, winnerAddr, false, null, null); }; + W.sendFromEscrow = W.settleSkillMatch; + + /* ══ Public API ══════════════════════════════════════════════════════════════ */ + W.generateMatchEscrow = generateMatchEscrow; + W.getOrCreateEscrow = generateMatchEscrow; + W.getEscrow = getEscrow; + W.htpEscrowUtils = { + buildRedeemScript: buildRedeemScript, + buildSettleScriptSig: buildSettleScriptSig, + buildCancelScriptSig: buildCancelScriptSig, + addrToSpkHex: addrToSpkHex, + OPC: OPC, + }; + + console.log('%c[HTP Covenant Escrow v3] Loaded — Full trustless P2SH + KIP-10', 'color:#49e8c2;font-weight:bold'); + console.log(' KIP-10: OP_TXOUTPUTCOUNT(0xb4) OP_TXOUTPUTSPK(0xc3)'); + console.log(' ScriptSig: '); + console.log(' Net:', W.HTP_NETWORK || '(pending init)'); + +})(window); diff --git a/public/htp-event-creator.js b/public/htp-event-creator.js new file mode 100644 index 00000000..b87d1958 --- /dev/null +++ b/public/htp-event-creator.js @@ -0,0 +1,143 @@ +// ============================================================================= +// htp-event-creator.js — Prediction Market Event Creation +// Validates form, constructs escrow TX, writes to Firebase /markets/{marketId} +// ============================================================================= +(function(W) { + 'use strict'; + + function generateId() { + return 'MKT-' + Date.now().toString(36).toUpperCase() + '-' + Math.random().toString(36).substring(2, 6).toUpperCase(); + } + + function getConnectedAddress() { + return W.walletAddress || W.htpAddress || W.htpConnectedAddress || null; + } + + function isValidUrl(str) { + try { var u = new URL(str); return u.protocol === 'http:' || u.protocol === 'https:'; } + catch (e) { return false; } + } + + function validate() { + var errors = []; + var title = document.getElementById('event-title'); + var desc = document.getElementById('event-description'); + var date = document.getElementById('event-resolution-date'); + var url = document.getElementById('event-source-url'); + var minPos = document.getElementById('event-min-position'); + + if (!title || !title.value.trim()) errors.push('Event title is required'); + if (!desc || !desc.value.trim()) errors.push('Description is required'); + + if (!date || !date.value) { + errors.push('Resolution date is required'); + } else { + var resDate = new Date(date.value); + if (resDate <= new Date()) errors.push('Resolution date must be in the future'); + } + + if (!url || !url.value.trim()) { + errors.push('Source URL is required'); + } else if (!isValidUrl(url.value.trim())) { + errors.push('Source URL must be a valid URL'); + } + + var outcomes = []; + document.querySelectorAll('.outcome-input').forEach(function(inp) { + if (inp.value.trim()) outcomes.push(inp.value.trim()); + }); + if (outcomes.length < 2) errors.push('At least 2 outcomes are required'); + + return { errors: errors, outcomes: outcomes }; + } + + function showErrors(errors) { + if (W.showToast) { + errors.forEach(function(e) { W.showToast(e, 'error'); }); + } else { + alert(errors.join('\n')); + } + } + + W.createPredictionEvent = function() { + var addr = getConnectedAddress(); + if (!addr) { + if (W.openWalletModal) W.openWalletModal(); + else if (W.showToast) W.showToast('Connect wallet first', 'error'); + return; + } + + var result = validate(); + if (result.errors.length > 0) { + showErrors(result.errors); + return; + } + + var title = document.getElementById('event-title').value.trim(); + var desc = document.getElementById('event-description').value.trim(); + var dateVal = document.getElementById('event-resolution-date').value; + var url = document.getElementById('event-source-url').value.trim(); + var minPos = parseFloat(document.getElementById('event-min-position').value) || 1; + var maxPEl = document.getElementById('event-max-participants'); + var maxP = maxPEl && maxPEl.value ? parseInt(maxPEl.value) : null; + var timestamp = Math.floor(new Date(dateVal).getTime() / 1000); + var marketId = generateId(); + + var market = { + marketId: marketId, + title: title, + description: desc, + outcomes: result.outcomes, + resolutionDate: timestamp, + sourceUrl: url, + minPosition: minPos, + maxParticipants: maxP, + creatorAddress: addr, + status: 'active', + totalPool: 0, + positions: {}, + createdAt: null // set by Firebase ServerValue + }; + + if (W.showToast) W.showToast('Creating prediction market...', 'info'); + + // Write to Firebase + var db = W.firebase && W.firebase.database ? W.firebase.database() : null; + if (!db) { + console.warn('[HTP EventCreator] Firebase not available'); + W.dispatchEvent(new CustomEvent('htp:market:created', { detail: market })); + if (W.showToast) W.showToast('Market created locally (no Firebase)', 'warning'); + return; + } + + market.createdAt = W.firebase.database.ServerValue.TIMESTAMP; + + db.ref('markets/' + marketId).set(market).then(function() { + console.log('[HTP EventCreator] Market created:', marketId); + if (W.showToast) W.showToast('Market created: ' + title, 'success'); + W.dispatchEvent(new CustomEvent('htp:market:created', { detail: market })); + + // Clear form + document.getElementById('event-title').value = ''; + document.getElementById('event-description').value = ''; + document.getElementById('event-resolution-date').value = ''; + document.getElementById('event-source-url').value = ''; + document.getElementById('event-min-position').value = ''; + if (maxPEl) maxPEl.value = ''; + + // Reset char counters + if (W.updateCharCounter) { + W.updateCharCounter('event-title', 120); + W.updateCharCounter('event-description', 1000); + } + + // Recompile SilverScript + if (W.compileSilverScript) W.compileSilverScript(); + }).catch(function(err) { + console.error('[HTP EventCreator] Firebase error:', err); + if (W.showToast) W.showToast('Failed to create market: ' + err.message, 'error'); + }); + }; + + console.log('[HTP EventCreator] loaded'); +})(window); diff --git a/public/htp-events-v3.js b/public/htp-events-v3.js new file mode 100644 index 00000000..9de1da38 --- /dev/null +++ b/public/htp-events-v3.js @@ -0,0 +1,264 @@ +// ============================================================================= +// htp-events-v3.js — Prediction Market Listing & Display +// Listens to Firebase /markets, renders event cards, handles position taking +// ============================================================================= +(function() { + 'use strict'; + + var marketsRef = null; + var marketsListener = null; + var expandedMarket = null; + + function truncateAddr(addr) { + if (!addr || addr.length < 16) return addr || '--'; + return addr.substring(0, 10) + '...' + addr.substring(addr.length - 6); + } + + function formatDate(ts) { + if (!ts) return '--'; + var d = new Date(typeof ts === 'number' && ts < 1e12 ? ts * 1000 : ts); + return d.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' }); + } + + function timeUntil(ts) { + if (!ts) return '--'; + var target = typeof ts === 'number' && ts < 1e12 ? ts * 1000 : ts; + var diff = target - Date.now(); + if (diff <= 0) return 'Expired'; + var days = Math.floor(diff / 86400000); + var hours = Math.floor((diff % 86400000) / 3600000); + if (days > 0) return days + 'd ' + hours + 'h'; + var mins = Math.floor((diff % 3600000) / 60000); + return hours + 'h ' + mins + 'm'; + } + + function renderMarketCard(market) { + var id = market.marketId || market.id || ''; + var totalPool = (market.totalPool || 0); + var outcomeCount = market.outcomes ? market.outcomes.length : 0; + var isExpanded = expandedMarket === id; + + var html = '
'; + html += '
'; + html += '
' + (market.title || 'Untitled') + '
'; + html += '
'; + html += 'By ' + truncateAddr(market.creatorAddress) + ''; + html += '' + totalPool.toFixed(2) + ' KAS pool'; + html += '' + outcomeCount + ' outcomes'; + html += 'Resolves ' + timeUntil(market.resolutionDate) + ''; + html += '
'; + html += '
'; + + if (isExpanded) { + html += renderExpandedMarket(market); + } + + html += '
'; + return html; + } + + function renderExpandedMarket(market) { + var html = '
'; + + // Description + if (market.description) { + html += '

' + market.description + '

'; + } + + // Source URL + if (market.sourceUrl) { + html += ''; + } + + // Resolution date + html += '
Resolution: ' + formatDate(market.resolutionDate) + '
'; + + // Outcomes with odds + html += '
'; + if (market.outcomes && market.outcomes.length > 0) { + var totalPositions = 0; + var positionCounts = []; + market.outcomes.forEach(function(outcome, idx) { + var count = 0; + if (market.positions) { + Object.keys(market.positions).forEach(function(key) { + var pos = market.positions[key]; + if (pos && pos.outcomeIndex === idx) count += (pos.size || 0); + }); + } + positionCounts.push(count); + totalPositions += count; + }); + + market.outcomes.forEach(function(outcome, idx) { + var odds = totalPositions > 0 + ? ((positionCounts[idx] / totalPositions) * 100).toFixed(1) + : (100 / market.outcomes.length).toFixed(1); + html += '
'; + html += '
'; + html += '' + outcome + ''; + html += '' + odds + '%'; + html += '
'; + html += '
'; + html += '
'; + html += ''; + html += ''; + html += '
'; + html += '
'; + }); + } + html += '
'; + html += '
'; + return html; + } + + function renderMarkets(markets) { + var container = document.getElementById('active-markets'); + if (!container) return; + + if (!markets || markets.length === 0) { + container.innerHTML = '

No active prediction markets yet.

'; + return; + } + + // Sort by creation date descending + markets.sort(function(a, b) { + return (b.createdAt || 0) - (a.createdAt || 0); + }); + + var html = ''; + markets.forEach(function(m) { + html += renderMarketCard(m); + }); + container.innerHTML = html; + } + + function listenToMarkets() { + if (marketsListener) return; + + var db = window.firebase && window.firebase.database ? window.firebase.database() : null; + if (!db) { + console.warn('[HTP Events v3] Firebase not available for market listing'); + return; + } + + marketsRef = db.ref('markets'); + marketsListener = marketsRef.orderByChild('status').equalTo('active').on('value', function(snapshot) { + var markets = []; + if (snapshot.exists()) { + snapshot.forEach(function(child) { + var m = child.val(); + if (m) { + m.marketId = m.marketId || child.key; + markets.push(m); + } + }); + } + renderMarkets(markets); + }, function(err) { + console.error('[HTP Events v3] Firebase listen error:', err); + }); + } + + // Toggle expanded market card + window.htpToggleMarket = function(marketId) { + expandedMarket = expandedMarket === marketId ? null : marketId; + // Re-render by triggering a fresh read + if (marketsRef) { + marketsRef.orderByChild('status').equalTo('active').once('value', function(snapshot) { + var markets = []; + if (snapshot.exists()) { + snapshot.forEach(function(child) { + var m = child.val(); + if (m) { + m.marketId = m.marketId || child.key; + markets.push(m); + } + }); + } + renderMarkets(markets); + }); + } + }; + + // Place a bet on a market outcome + window.htpPlaceBet = function(marketId, outcomeIndex) { + var addr = window.walletAddress || window.htpAddress || window.htpConnectedAddress; + if (!addr) { + if (window.openWalletModal) window.openWalletModal(); + else if (window.showToast) window.showToast('Connect wallet first', 'error'); + return; + } + + var input = document.querySelector('input[data-market-id="' + marketId + '"][data-outcome-idx="' + outcomeIndex + '"]'); + var amount = input ? parseFloat(input.value) : 0; + if (!amount || amount <= 0) { + if (window.showToast) window.showToast('Enter a valid bet amount', 'error'); + return; + } + + var db = window.firebase && window.firebase.database ? window.firebase.database() : null; + if (!db) { + if (window.showToast) window.showToast('Firebase not available', 'error'); + return; + } + + var positionId = addr.substring(addr.length - 8) + '-' + Date.now().toString(36); + var position = { + address: addr, + outcomeIndex: outcomeIndex, + size: amount, + timestamp: window.firebase.database.ServerValue.TIMESTAMP + }; + + if (window.showToast) window.showToast('Placing position...', 'info'); + + var updates = {}; + updates['markets/' + marketId + '/positions/' + positionId] = position; + + db.ref().update(updates).then(function() { + // Update total pool + return db.ref('markets/' + marketId + '/totalPool').transaction(function(current) { + return (current || 0) + amount; + }); + }).then(function() { + if (window.showToast) window.showToast('Position placed: ' + amount + ' KAS', 'success'); + if (input) input.value = ''; + }).catch(function(err) { + console.error('[HTP Events v3] Bet error:', err); + if (window.showToast) window.showToast('Failed: ' + err.message, 'error'); + }); + }; + + // Listen for new market creation + window.addEventListener('htp:market:created', function() { + // Markets will auto-update via the Firebase listener + console.log('[HTP Events v3] New market detected'); + }); + + // Initialize — wait for Firebase to be ready + function init() { + // Guard: if Firebase app not yet initialized, wait for it + if (!window.firebase || !window.firebase.apps || !window.firebase.apps.length) { + window.addEventListener('htp:firebase:ready', function() { + listenToMarkets(); + console.log('[HTP Events v3] Prediction market listing initialized (deferred)'); + }); + // Also try after a short delay in case the event already fired + setTimeout(function() { + if (window.firebase && window.firebase.apps && window.firebase.apps.length) { + listenToMarkets(); + } + }, 3000); + return; + } + listenToMarkets(); + console.log('[HTP Events v3] Prediction market listing initialized'); + } + + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', init); + } else { + init(); + } +})(); diff --git a/public/htp-events.js b/public/htp-events.js new file mode 100644 index 00000000..847d4151 --- /dev/null +++ b/public/htp-events.js @@ -0,0 +1,859 @@ +/* ============================================================ + HTP Skill Games - Complete Multiplayer Module (htp-skill-games.js) + Drop-in fix: createMatchWithLobby + Firebase relay (no WS server needed) + ============================================================ */ + +// ─── CREATE MATCH WITH LOBBY (the missing function) ─────────────── + +async function createMatchWithLobby() { + if (!walletAddress) { showToast('Connect wallet first', 'error'); go('wallet'); return; } + + var gameEl = document.getElementById('sgGame'); + var timeEl = document.getElementById('sgTime'); + var stakeEl = document.getElementById('sgEsc'); + var seriesEl = document.getElementById('sgSeries'); + + var game = gameEl ? gameEl.value : 'chess'; + var timeControl = timeEl ? timeEl.value : '5|0'; + var stake = stakeEl ? (parseFloat(stakeEl.value) || 5) : 5; // reads live input + var seriesLen = seriesEl ? parseInt(seriesEl.value) || 1 : 1; + + var stakeSompi = Math.round(stake * 1e8); + if (!walletBalance || walletBalance.total < stakeSompi) { + showToast('Insufficient balance. Need ' + stake + ' KAS', 'error'); + return; + } + var _stakeConfirm = parseFloat((document.getElementById('sgEsc')||{}).value) || stake; +if (!confirm('Create ' + game + ' match for ' + _stakeConfirm + ' KAS?\nTime: ' + timeControl + ' | Series: Bo' + seriesLen)) return; + + try { + showToast('Creating match escrow...', 'info'); + var matchId = 'HTP-' + Date.now().toString(36).toUpperCase(); + + // Match creation now handles escrow inside createLobbyMatch + var match = await createLobbyMatch(game, timeControl, stake, seriesLen, matchId); + + if (!match.escrowAddress) throw new Error('Escrow generation failed'); + + showToast('Sending ' + stake + ' KAS to escrow...', 'info'); + var stakeSompi = Math.round(stake * 1e8); + var meta = { + type: 'create', game: game, stake: String(stake), + timeControl: timeControl, matchId: matchId, creator: walletAddress || '' +}; +var payloadHex = Array.from(new TextEncoder().encode(JSON.stringify(meta))) + .map(function(b){ return b.toString(16).padStart(2,'0'); }).join(''); +var txId = await htpSendTx(match.escrowAddress, stakeSompi, { priorityFee: 0, payload: payloadHex, matchId: matchId, amount: stakeSompi }); + +// Lobby broadcast -- 1 sompi to HTP Lobby Address so all clients can discover this game +var LOBBY_ADDR = (window.activeNet === 'mainnet') + ? 'kaspa:qza6ah0lfqf33c9m00ynkfeettuleluvnpyvmssm5pzz7llwy2ka5nkka4fel' + : 'kaspatest:qpyfz03k6quxwf2jglwkhczvt758d8xrq99gl37p6h3vsqur27ltjhn68354m'; +try { + await htpSendTx(LOBBY_ADDR, 20000000, { priorityFee: 0, payload: payloadHex }); // 0.2 KAS min UTXO + console.log('[HTP] Lobby broadcast TX sent'); +} catch(e) { console.warn('[HTP] Lobby broadcast failed (non-fatal):', e.message); } + if (!txId) throw new Error('Escrow TX failed'); + + match.escrowTxId = txId; + if (typeof saveLobby === 'function') saveLobby(); + + // Write full match info to Firebase so listenLobby sees it + var db = (typeof firebase !== 'undefined') && firebase.database(); + if (db) { + db.ref('matches/' + match.id + '/info').set({ + game: game, + timeControl: timeControl, + stake: stake, + seriesLen: seriesLen, + status: 'waiting', + created: Date.now(), + escrowAddress: match.escrowAddress, + escrowTxId: txId + }); + db.ref('matches/' + match.id + '/players').set({ + creator: walletAddress, + creatorAddrFull: walletAddress, + opponent: null, + opponentAddrFull: null + }); + } + + // Note: No direct write to /lobby here. Backend handles that via /matches watch or direct call. + + showToast('Match created! ' + stake + ' KAS locked. Share the link!', 'success'); + if (typeof refreshBalanceFromChain === 'function') setTimeout(refreshBalanceFromChain, 3000); + } catch (e) { + showToast('Match creation failed: ' + e.message, 'error'); + console.error('[HTP Skill] createMatchWithLobby error:', e); + if (typeof matchId !== 'undefined' && matchId) { + try { var _db=(typeof firebase!=='undefined')&&firebase.database(); if(_db){_db.ref('matches/'+matchId).remove();console.log('[HTP] Ghost cleaned:',matchId);} } catch(_e) {} + if (window.matchLobby&&window.matchLobby.matches) window.matchLobby.matches=window.matchLobby.matches.filter(function(x){return x.id!==matchId;}); + try{if(typeof saveLobby==='function')saveLobby();}catch(_e){} + } + } +} + +// ─── JOIN LOBBY MATCH ─────────────── +async function joinLobbyMatch(matchId) { + var m = matchLobby.matches.find(function (mm) { return mm.id === matchId; }); + if (!m || m.status !== "waiting") { + showToast("Match no longer available", "error"); + return; + } + if (m.creator === matchLobby.myPlayerId) { + showToast("Cannot join your own match", "error"); + return; + } + if (!walletAddress) { + showToast("Connect wallet first", "error"); + return; + } + + var escAddr = m.escrowAddress; + + if (!escAddr && typeof getMatchEscrow === "function") { + var esc = getMatchEscrow(matchId); + escAddr = esc ? esc.address : null; + } + + if (!escAddr && window.htpFirebase && window.htpFirebase.getMatch) { + try { + var fm = await window.htpFirebase.getMatch(matchId); + if (fm && fm.escrowAddress) escAddr = fm.escrowAddress; + } catch (e) { + console.warn("HTP Firebase getMatch failed:", e.message); + } + } + + if (!escAddr) { + showToast("No escrow address for this match", "error"); + return; + } + + // Now do the actual send: + try { + var sompi = Math.round(parseFloat(m.stake || m.stakeKas || m.escrowKas || 0) * 1e8); + if (!walletBalance || walletBalance.total < sompi) { + showToast('Insufficient balance. Need ' + m.stake + ' KAS', 'error'); + return; + } + if (!confirm('Join ' + m.game + ' match for ' + m.stake + ' KAS?')) return; + + showToast("Locking " + m.stake + " KAS in match escrow...", "info"); + + var txId = await htpSendTx(escAddr, sompi, { priorityFee: 0, matchId: m.id, amount: sompi }); + if (!txId) { + showToast("Join failed (no txId)", "error"); + return; + } + + m.opponent = matchLobby.myPlayerId; + m.opponentAddr = walletAddress.substring(0, 14) + "..."; + m.status = "active"; + m.joinTxId = txId; + saveLobby(); + + if (window.htpFirebase && window.htpFirebase.joinMatch) { + window.htpFirebase.joinMatch( + m.id, + matchLobby.myPlayerId, + walletAddress, + walletAddress, + txId + ); + } + + if (typeof broadcastLobby === 'function') broadcastLobby({ type: 'match_joined', matchId: m.id, player: matchLobby.myPlayerId }); + if (typeof renderLobby === 'function') renderLobby(); + showToast("Matched! Launching game...", "success"); + setTimeout(function () { if (typeof playMatch === 'function') playMatch(m.id); else if (typeof previewMatch === 'function') previewMatch(m.id); }, 800); + } catch (e) { + showToast('Join failed: ' + e.message, 'error'); + console.error('[HTP Skill] joinLobbyMatch error:', e); + if (matchId) { + try { var _db2=(typeof firebase!=='undefined')&&firebase.database(); if(_db2){_db2.ref('matches/'+matchId+'/players/opponent').set(null);_db2.ref('matches/'+matchId+'/info/status').set('waiting');} } catch(_e) {} + } + } +} + +// ─── CREATE LOBBY MATCH (Internal) ─────────────── +async function createLobbyMatch(game, timeControl, stake, seriesLen, existingId) { + var matchId = existingId || ('HTP-' + Date.now().toString(36).toUpperCase()); + + var match = { + stake: stake, + id: matchId, + game: game, + timeControl: timeControl, + stake: stake, + seriesLen: seriesLen || 1, + creator: matchLobby.myPlayerId, + creatorAddr: (walletAddress || '').substring(0, 14) + '...', + creatorAddrFull: walletAddress || '', + opponent: null, + opponentAddr: null, + status: 'waiting', + created: Date.now(), + escrowAddress: null, + escrowTxId: null + }; + + // Generate per-match escrow + if (typeof generateMatchEscrow === 'function') { + var escEntry = await generateMatchEscrow(match.id); + match.escrowAddress = escEntry.address; + } + + if (matchLobby && matchLobby.matches) { + matchLobby.matches.push(match); + if (typeof saveLobby === 'function') saveLobby(); + } + + // Persist to Firebase via backend if available + if (window.htpFirebase && window.htpFirebase.createMatch) { + window.htpFirebase.createMatch(match.id, matchLobby.myPlayerId, walletAddress, match); + } + + if (typeof broadcastLobby === 'function') broadcastLobby({ type: 'match_created', matchId: match.id }); + if (typeof renderLobby === 'function') renderLobby(); + if (typeof startLobbyWatcher === 'function') startLobbyWatcher(); + + return match; +} + +window.createMatchWithLobby = createMatchWithLobby; +window.joinLobbyMatch = joinLobbyMatch; + +// ─── CANCEL MATCH (creator only) ───────────────────────────────────────── +async function cancelLobbyMatch(matchId) { + try { + const db = window.htpFirebase && window.htpFirebase.db; + if (!db) { showToast && showToast('Firebase not ready', 'error'); return; } + + // Verify caller is creator + const snap = await db.ref('lobby/' + matchId).get(); + const m = snap.val(); + if (!m) { showToast && showToast('Match not found', 'error'); return; } + + const myAddr = window.htpAddress || window.walletAddress; + if (m.creator && m.creator !== myAddr) { + showToast && showToast('Only the creator can cancel', 'error'); + return; + } + + if (m.status !== 'open' && m.status !== 'waiting') { + showToast && showToast('Match already started or closed', 'error'); + return; + } + + // TODO: if escrow was funded, refund via cancelMatchEscrow + if (m.escrowAddress && typeof window.cancelMatchEscrow === 'function') { + try { + await window.cancelMatchEscrow({ matchId, escrowAddress: m.escrowAddress }); + console.log('[HTP] Escrow cancelled for', matchId); + } catch (e) { + console.warn('[HTP] Escrow cancel failed (may not be funded yet):', e.message); + } + } + + // Delete from Firebase + await db.ref('lobby/' + matchId).remove(); + + // Remove from local store + if (window.htpMatches) delete window.htpMatches[matchId]; + if (window.openMatches) delete window.openMatches[matchId]; + + showToast && showToast('Match cancelled', 'success'); + console.log('[HTP Skill] Match cancelled:', matchId); + + // Refresh lobby + if (typeof renderLobby === 'function') renderLobby(); + document.dispatchEvent(new CustomEvent('htpLobbyCancelled', { detail: { matchId } })); + + } catch (e) { + console.error('[HTP Skill] cancelLobbyMatch error:', e); + showToast && showToast('Cancel failed: ' + e.message, 'error'); + } +} + +window.cancelLobbyMatch = cancelLobbyMatch; + +window.createLobbyMatch = createLobbyMatch; + + +// ─── FIREBASE MOVE RELAY (replaces WebSocket relay) ──────────────── +(function () { + var fbRelay = { matchId: null, playerId: null, gameType: null, unsubscribe: null, lastMoveTs: 0 }; + + window.connectRelay = function (matchId, gameType) { + if (fbRelay.unsubscribe) { fbRelay.unsubscribe(); fbRelay.unsubscribe = null; } + + fbRelay.matchId = matchId; + fbRelay.gameType = gameType; + fbRelay.playerId = matchLobby.myPlayerId; + fbRelay.lastMoveTs = Date.now(); + + var ref = firebase.database().ref('relay/' + matchId); + + ref.child('presence/' + fbRelay.playerId).set({ online: true, joined: Date.now() }); + ref.child('presence/' + fbRelay.playerId).onDisconnect().set({ online: false, left: Date.now() }); + + var movesRef = ref.child('moves'); + var handler = movesRef.orderByChild('ts').startAt(Date.now()).on('child_added', function (snap) { + var msg = snap.val(); + if (!msg || msg.player === fbRelay.playerId) return; + if (msg.ts <= fbRelay.lastMoveTs) return; + fbRelay.lastMoveTs = msg.ts; + handleRelayMessage(msg); + }); + + fbRelay.unsubscribe = function () { + movesRef.off('child_added', handler); + ref.child('presence/' + fbRelay.playerId).set({ online: false, left: Date.now() }); + }; + + ref.child('presence').on('value', function (snap) { + var p = snap.val(); + if (!p) return; + var others = Object.keys(p).filter(function (k) { return k !== fbRelay.playerId; }); + for (var i = 0; i < others.length; i++) { + if (p[others[i]].online) { + showToast('Opponent connected!', 'success'); + break; + } + } + }); + + if (typeof htpRelay !== 'undefined') { + htpRelay.connected = true; + htpRelay.matchId = matchId; + htpRelay.gameType = gameType; + } + console.log('[HTP Relay] Firebase relay connected for', matchId); + showToast('Connected to game relay', 'success'); + }; + + window.relaySend = function (msg) { + if (!fbRelay.matchId) { console.warn('[HTP Relay] No active match'); return; } + msg.player = fbRelay.playerId; + msg.ts = Date.now(); + firebase.database().ref('relay/' + fbRelay.matchId + '/moves').push(msg); + }; + + window.hookMoveRelay = function (matchId, gameType) { + connectRelay(matchId, gameType); + + if (gameType === 'chess' && window.chessSquareClick && !window.chessSquareClick._fbRelayed) { + var orig = window.chessSquareClick; + window.chessSquareClick = function (sq) { + var prevFen = chessGame.fen(); + orig(sq); + var newFen = chessGame.fen(); + if (prevFen !== newFen) { + relaySend({ + type: 'move', game: 'chess', fen: newFen, move: chessUI.lastMove, + wasCapture: (prevFen.split(' ')[0].length > newFen.split(' ')[0].length), + capturedW: chessUI.capturedW, capturedB: chessUI.capturedB + }); + } + }; + window.chessSquareClick._fbRelayed = true; + } + }; + + window.handleMatchGameOver = async function (reason, winnerColor) { + var match = matchLobby.activeMatch; + if (!match) return; + + var iAmCreator = (match.creator === matchLobby.myPlayerId); + var seed = 0; + var idStr = match.id.replace('HTP-', ''); + for (var i = 0; i < idStr.length; i++) seed += idStr.charCodeAt(i); + var creatorFirst = (seed % 2 === 0); + + var creatorColor, opponentColor; + if (match.game === 'chess') { + creatorColor = creatorFirst ? 'w' : 'b'; + opponentColor = creatorFirst ? 'b' : 'w'; + } else { + creatorColor = creatorFirst ? 1 : 2; + opponentColor = creatorFirst ? 2 : 1; + } + + var iWon = false; + if (reason === 'resign') { + iWon = true; + } else if (reason === 'checkmate' || reason === 'timeout') { + iWon = (winnerColor === (iAmCreator ? creatorColor : opponentColor)); + } + + var stake = parseFloat(match.stake) || 5; + var totalPot = stake * 2; + + if (iWon) { + showGameOverOverlay('YOU WIN!', '+' + totalPot.toFixed(2) + ' KAS', '49e8c2', match); + showToast('Victory! ' + totalPot + ' KAS payout processing...', 'success'); + try { + var txId = await sendFromEscrow(match.id, walletAddress); + if (txId) { + showToast('Payout TX: ' + txId.substring(0, 16) + '...', 'success'); + if (typeof addToHistory === 'function') addToHistory({ type: 'matchwin', amount: totalPot, game: match.game, matchId: match.id, txId: txId, timestamp: Date.now() }); + } + } catch (e) { + console.error('[HTP] Payout failed:', e); + showToast('Payout error: ' + e.message, 'error'); + } + } else { + showGameOverOverlay('YOU LOSE', '-' + stake.toFixed(2) + ' KAS', 'ef4444', match); + } + + match.status = 'finished'; + match.result = iWon ? 'win' : 'loss'; + match.finishedAt = Date.now(); + saveLobby(); + + try { + // firebase.database().ref('lobby/' + match.id + '/status').set('finished'); + firebase.database().ref('matches/' + match.id + '/info/status').set('finished'); + firebase.database().ref('relay/' + match.id + '/result').set({ winner: iWon ? matchLobby.myPlayerId : 'opponent', reason: reason, ts: Date.now() }); + } catch (e) { } + + if (fbRelay.unsubscribe) { fbRelay.unsubscribe(); fbRelay.unsubscribe = null; } + if (typeof renderLobby === 'function') renderLobby(); + if (typeof refreshBalanceFromChain === 'function') setTimeout(refreshBalanceFromChain, 3000); + }; + + window.showGameOverOverlay = function (title, subtitle, color, match) { + var existing = document.getElementById('gameOverOverlay'); + if (existing) existing.remove(); + + var ov = document.createElement('div'); + ov.id = 'gameOverOverlay'; + ov.style.cssText = 'position:fixed;inset:0;z-index:99999;background:rgba(0,0,0,.85);display:flex;align-items:center;justify-content:center;animation:fadeIn .3s ease'; + ov.innerHTML = '
' + + '
' + (color === '49e8c2' ? '\u{1F3C6}' : '\u{1F480}') + '
' + + '
' + title + '
' + + '
' + subtitle + '
' + + (match ? '
' + match.game + ' \u00B7 ' + match.timeControl + ' \u00B7 ' + match.stake + ' KAS
' : '') + + '' + + '
'; + document.body.appendChild(ov); + if (typeof playChessSound === 'function') playChessSound(color === '49e8c2' ? 'victory' : 'defeat'); + }; + + window.resignMatch = function () { + if (!matchLobby.activeMatch) return; + if (!confirm('Resign this match? You will lose your ' + matchLobby.activeMatch.stake + ' KAS stake.')) return; + + relaySend({ type: 'resign', game: matchLobby.activeMatch.game }); + + var match = matchLobby.activeMatch; + var stake = parseFloat(match.stake) || 5; + showGameOverOverlay('YOU RESIGNED', '-' + stake.toFixed(2) + ' KAS', 'ef4444', match); + + match.status = 'finished'; + match.result = 'loss'; + match.finishedAt = Date.now(); + saveLobby(); + if (typeof renderLobby === 'function') renderLobby(); + }; +})(); + +// ─── HANDLE RELAY MESSAGES ──────────────────────────────────────── +function handleRelayMessage(msg) { + if (!msg || !msg.type) return; + + if (msg.type === 'move') { + if (msg.game === 'chess' && typeof chessGame !== 'undefined') { + chessGame.load(msg.fen); + if (msg.capturedW) chessUI.capturedW = msg.capturedW; + if (msg.capturedB) chessUI.capturedB = msg.capturedB; + if (typeof playChessSound === 'function') playChessSound(msg.wasCapture ? 'capture' : 'move'); + if (typeof renderChessBoard === 'function') renderChessBoard(); + if (typeof renderChessOverlay === 'function') renderChessOverlay(); + + if (chessGame.in_checkmate()) { + var winner = chessGame.turn() === 'w' ? 'b' : 'w'; + handleMatchGameOver('checkmate', winner); + } else if (chessGame.in_stalemate() || chessGame.in_draw()) { + handleMatchGameOver('draw', null); + } + } else if (msg.game === 'c4' || msg.game === 'connect4') { + if (typeof applyC4Move === 'function') applyC4Move(msg.col, msg.side); + } else if (msg.game === 'ck' || msg.game === 'checkers') { + if (typeof applyCkMove === 'function') applyCkMove(msg.from, msg.to, msg.side); + } + } else if (msg.type === 'resign') { + if (typeof chessUI !== 'undefined' && chessUI.timerInterval) clearInterval(chessUI.timerInterval); + var myColor = typeof chessUI !== 'undefined' ? chessUI.playerColor : 1; + handleMatchGameOver('resign', myColor); + } else if (msg.type === 'chat') { + showToast(msg.text, 'info'); + } +} + +// ─── CONNECT4 MULTIPLAYER LOGIC ──────────────────────────────────── +(function () { + var C4 = { ROWS: 6, COLS: 7, board: null, turn: 1, myColor: 1, matchId: null, timeLeft: [0, 0], timerInterval: null, gameOver: false }; + + window.startConnect4Game = function (opts) { + C4.board = []; + for (var r = 0; r < C4.ROWS; r++) { C4.board[r] = []; for (var c = 0; c < C4.COLS; c++) C4.board[r][c] = 0; } + C4.turn = 1; + C4.myColor = opts.side || 1; + C4.matchId = opts.id; + C4.gameOver = false; + var timeSec = parseInt(opts.time) || 200; + C4.timeLeft = [timeSec, timeSec]; + renderC4Overlay(); + startC4Timer(); + }; + + function checkC4Win(board, player) { + for (var r = 0; r < 6; r++) for (var c = 0; c < 7; c++) { + if (c + 3 < 7 && board[r][c] === player && board[r][c + 1] === player && board[r][c + 2] === player && board[r][c + 3] === player) return true; + if (r + 3 < 6 && board[r][c] === player && board[r + 1][c] === player && board[r + 2][c] === player && board[r + 3][c] === player) return true; + if (r + 3 < 6 && c + 3 < 7 && board[r][c] === player && board[r + 1][c + 1] === player && board[r + 2][c + 2] === player && board[r + 3][c + 3] === player) return true; + if (r + 3 < 6 && c - 3 >= 0 && board[r][c] === player && board[r + 1][c - 1] === player && board[r + 2][c - 2] === player && board[r + 3][c - 3] === player) return true; + } + return false; + } + + function dropC4(col) { + if (C4.gameOver || C4.turn !== C4.myColor) return; + for (var r = C4.ROWS - 1; r >= 0; r--) { + if (C4.board[r][col] === 0) { + C4.board[r][col] = C4.myColor; + C4.turn = C4.myColor === 1 ? 2 : 1; + relaySend({ type: 'move', game: 'c4', col: col, side: C4.myColor, row: r }); + if (typeof playChessSound === 'function') playChessSound('move'); + if (checkC4Win(C4.board, C4.myColor)) { + C4.gameOver = true; + handleMatchGameOver('connect4win', C4.myColor); + } + renderC4Board(); + return; + } + } + } + window.dropC4 = dropC4; + + window.applyC4Move = function (col, side) { + for (var r = C4.ROWS - 1; r >= 0; r--) { + if (C4.board[r][col] === 0) { + C4.board[r][col] = side; + C4.turn = side === 1 ? 2 : 1; + if (typeof playChessSound === 'function') playChessSound('capture'); + if (checkC4Win(C4.board, side)) { + C4.gameOver = true; + handleMatchGameOver('connect4win', side); + } + renderC4Board(); + return; + } + } + }; + + function startC4Timer() { + if (C4.timerInterval) clearInterval(C4.timerInterval); + C4.timerInterval = setInterval(function () { + if (C4.gameOver) { clearInterval(C4.timerInterval); return; } + var idx = C4.turn === 1 ? 0 : 1; + C4.timeLeft[idx]--; + if (C4.timeLeft[idx] <= 0) { + C4.gameOver = true; + clearInterval(C4.timerInterval); + handleMatchGameOver('timeout', C4.turn === 1 ? 2 : 1); + } + updateC4Timers(); + }, 1000); + } + + function fmtTime(s) { return Math.floor(s / 60) + ':' + ('0' + (s % 60)).slice(-2); } + function updateC4Timers() { + var t1 = document.getElementById('c4timer1'); + var t2 = document.getElementById('c4timer2'); + if (t1) t1.textContent = fmtTime(C4.timeLeft[0]); + if (t2) t2.textContent = fmtTime(C4.timeLeft[1]); + } + + function renderC4Board() { + var el = document.getElementById('c4board'); + if (!el) { renderC4Overlay(); return; } + var html = ''; + for (var r = 0; r < C4.ROWS; r++) { + html += '
'; + for (var c = 0; c < C4.COLS; c++) { + var fill = C4.board[r][c] === 1 ? '#dc2626' : C4.board[r][c] === 2 ? '#f59e0b' : 'rgba(255,255,255,.05)'; + var border = C4.board[r][c] === 0 ? '2px solid rgba(255,255,255,.08)' : '2px solid rgba(0,0,0,.2)'; + var cursor = (C4.turn === C4.myColor && !C4.gameOver) ? 'pointer' : 'default'; + html += '
'; + } + html += '
'; + } + el.innerHTML = html; + updateC4Timers(); + var turnEl = document.getElementById('c4turn'); + if (turnEl) { + if (C4.gameOver) turnEl.textContent = 'Game Over'; + else turnEl.textContent = C4.turn === C4.myColor ? 'Your turn' : "Opponent's turn"; + } + } + + function renderC4Overlay() { + var existing = document.getElementById('c4overlay'); + if (existing) existing.remove(); + var ov = document.createElement('div'); + ov.id = 'c4overlay'; + ov.className = 'chess-overlay'; + var myLabel = C4.myColor === 1 ? 'Red' : 'Yellow'; + ov.innerHTML = '
' + + '

Connect 4

' + + '
' + + '
' + + '
You: ' + myLabel + '
' + + '
' + (C4.turn === C4.myColor ? 'Your turn' : "Opponent\'s turn") + '
' + + '
' + + '
' + + '' + fmtTime(C4.timeLeft[0]) + '' + + '' + fmtTime(C4.timeLeft[1]) + '' + + '
' + + '
' + + '
' + + '
'; + document.body.appendChild(ov); + renderC4Board(); + } +})(); + +// ─── CHECKERS MULTIPLAYER LOGIC ──────────────────────────────────── +(function () { + var CK = { board: null, turn: 1, myColor: 1, matchId: null, selected: null, legalTargets: [], timeLeft: [0, 0], timerInterval: null, gameOver: false }; + + function initCkBoard() { + CK.board = []; + for (var r = 0; r < 8; r++) { + CK.board[r] = []; for (var c = 0; c < 8; c++) { + if ((r + c) % 2 === 1) { + if (r < 3) CK.board[r][c] = 3; + else if (r > 4) CK.board[r][c] = 1; + else CK.board[r][c] = 0; + } else CK.board[r][c] = 0; + } + } + } + + window.startCheckersGame = function (opts) { + CK.myColor = opts.side || 1; + CK.matchId = opts.id; + CK.gameOver = false; + CK.turn = 1; + CK.selected = null; + CK.legalTargets = []; + var timeSec = parseInt(opts.time) * 60 || 300; + CK.timeLeft = [timeSec, timeSec]; + initCkBoard(); + renderCkOverlay(); + startCkTimer(); + }; + + function getCkMoves(board, r, c) { + var piece = board[r][c]; + if (!piece) return { moves: [], jumps: [] }; + var color = (piece === 1 || piece === 2) ? 1 : 3; + var isKing = (piece === 2 || piece === 4); + var dirs = []; + if (color === 1 || isKing) dirs.push([-1, -1], [-1, 1]); + if (color === 3 || isKing) dirs.push([1, -1], [1, 1]); + var moves = [], jumps = []; + for (var d = 0; d < dirs.length; d++) { + var dr = dirs[d][0], dc = dirs[d][1]; + var nr = r + dr, nc = c + dc; + if (nr >= 0 && nr < 8 && nc >= 0 && nc < 8) { + if (board[nr][nc] === 0) moves.push([nr, nc]); + else { + var tColor = (board[nr][nc] === 1 || board[nr][nc] === 2) ? 1 : 3; + if (tColor !== color) { + var jr = nr + dr, jc = nc + dc; + if (jr >= 0 && jr < 8 && jc >= 0 && jc < 8 && board[jr][jc] === 0) jumps.push([jr, jc, nr, nc]); + } + } + } + } + return { moves: moves, jumps: jumps }; + } + + function hasAnyJumps(board, color) { + for (var r = 0; r < 8; r++) for (var c = 0; c < 8; c++) { + var p = board[r][c]; if (!p) continue; + if (((p === 1 || p === 2) ? 1 : 3) === color && getCkMoves(board, r, c).jumps.length > 0) return true; + } + return false; + } + + function hasAnyMoves(board, color) { + for (var r = 0; r < 8; r++) for (var c = 0; c < 8; c++) { + var p = board[r][c]; if (!p) continue; + if (((p === 1 || p === 2) ? 1 : 3) !== color) continue; + var m = getCkMoves(board, r, c); + if (m.moves.length > 0 || m.jumps.length > 0) return true; + } + return false; + } + + function ckClick(r, c) { + if (CK.gameOver || CK.turn !== CK.myColor) return; + var piece = CK.board[r][c]; + var myPieces = CK.myColor === 1 ? [1, 2] : [3, 4]; + + if (myPieces.indexOf(piece) >= 0) { + CK.selected = [r, c]; + var m = getCkMoves(CK.board, r, c); + var forceJump = hasAnyJumps(CK.board, CK.myColor); + CK.legalTargets = forceJump ? m.jumps : (m.jumps.length > 0 ? m.jumps : m.moves); + renderCkBoard(); + return; + } + + if (CK.selected) { + for (var i = 0; i < CK.legalTargets.length; i++) { + var t = CK.legalTargets[i]; + if (t[0] === r && t[1] === c) { + var sr = CK.selected[0], sc = CK.selected[1]; + CK.board[r][c] = CK.board[sr][sc]; + CK.board[sr][sc] = 0; + if (CK.myColor === 1 && r === 0) CK.board[r][c] = 2; + if (CK.myColor === 3 && r === 7) CK.board[r][c] = 4; + if (t.length === 4) CK.board[t[2]][t[3]] = 0; + + relaySend({ type: 'move', game: 'ck', from: [sr, sc], to: [r, c], side: CK.myColor }); + if (typeof playChessSound === 'function') playChessSound(t.length === 4 ? 'capture' : 'move'); + + if (t.length === 4 && getCkMoves(CK.board, r, c).jumps.length > 0) { + CK.selected = [r, c]; + CK.legalTargets = getCkMoves(CK.board, r, c).jumps; + renderCkBoard(); + return; + } + + CK.turn = CK.myColor === 1 ? 3 : 1; + CK.selected = null; + CK.legalTargets = []; + + if (!hasAnyMoves(CK.board, CK.turn)) { + CK.gameOver = true; + handleMatchGameOver('checkerswin', CK.myColor); + } + renderCkBoard(); + return; + } + } + } + } + window.ckClick = ckClick; + + window.applyCkMove = function (from, to, side) { + CK.board[to[0]][to[1]] = CK.board[from[0]][from[1]]; + CK.board[from[0]][from[1]] = 0; + if (Math.abs(to[0] - from[0]) === 2) { + var jr = (from[0] + to[0]) / 2, jc = (from[1] + to[1]) / 2; + CK.board[jr][jc] = 0; + } + if (side === 1 && to[0] === 0) CK.board[to[0]][to[1]] = 2; + if (side === 3 && to[0] === 7) CK.board[to[0]][to[1]] = 4; + + CK.turn = side === 1 ? 3 : 1; + if (typeof playChessSound === 'function') playChessSound(Math.abs(to[0] - from[0]) === 2 ? 'capture' : 'move'); + + if (!hasAnyMoves(CK.board, CK.turn)) { + CK.gameOver = true; + handleMatchGameOver('checkerswin', side); + } + renderCkBoard(); + }; + + function startCkTimer() { + if (CK.timerInterval) clearInterval(CK.timerInterval); + CK.timerInterval = setInterval(function () { + if (CK.gameOver) { clearInterval(CK.timerInterval); return; } + var idx = CK.turn === 1 ? 0 : 1; + CK.timeLeft[idx]--; + if (CK.timeLeft[idx] <= 0) { + CK.gameOver = true; + clearInterval(CK.timerInterval); + handleMatchGameOver('timeout', CK.turn === 1 ? 3 : 1); + } + updateCkTimers(); + }, 1000); + } + + function fmtTime(s) { return Math.floor(s / 60) + ':' + ('0' + (s % 60)).slice(-2); } + function updateCkTimers() { + var t1 = document.getElementById('cktimer1'); + var t2 = document.getElementById('cktimer2'); + if (t1) t1.textContent = fmtTime(CK.timeLeft[0]); + if (t2) t2.textContent = fmtTime(CK.timeLeft[1]); + } + + function renderCkBoard() { + var el = document.getElementById('ckboard'); + if (!el) return; + var html = ''; + var selR = CK.selected ? CK.selected[0] : -1, selC = CK.selected ? CK.selected[1] : -1; + var targetSet = {}; + for (var i = 0; i < CK.legalTargets.length; i++) targetSet[CK.legalTargets[i][0] + ',' + CK.legalTargets[i][1]] = true; + + for (var r = 0; r < 8; r++) { + html += '
'; + for (var c = 0; c < 8; c++) { + var isDark = (r + c) % 2 === 1; + var bg = isDark ? '#5c4033' : '#deb887'; + if (r === selR && c === selC) bg = 'rgba(73,232,194,.4)'; + if (targetSet[r + ',' + c]) bg = 'rgba(73,232,194,.25)'; + var piece = CK.board[r][c]; + var sym = ''; + if (piece === 1) sym = '
'; + if (piece === 2) sym = '
'; + if (piece === 3) sym = '
'; + if (piece === 4) sym = '
'; + html += '
' + sym + '
'; + } + html += '
'; + } + el.innerHTML = html; + updateCkTimers(); + var turnEl = document.getElementById('ckturn'); + if (turnEl) { + if (CK.gameOver) turnEl.textContent = 'Game Over'; + else turnEl.textContent = CK.turn === CK.myColor ? 'Your turn' : "Opponent's turn"; + } + } + + function renderCkOverlay() { + var existing = document.getElementById('ckoverlay'); + if (existing) existing.remove(); + var ov = document.createElement('div'); + ov.id = 'ckoverlay'; + ov.className = 'chess-overlay'; + var myLabel = CK.myColor === 1 ? 'Red' : 'Black'; + ov.innerHTML = '
' + + '

Checkers

' + + '
' + + '
' + + '
You: ' + myLabel + '
' + + '
Waiting...
' + + '
' + + '
' + + '' + fmtTime(CK.timeLeft[0]) + '' + + '' + fmtTime(CK.timeLeft[1]) + '' + + '
' + + '
' + + '
' + + '
'; + document.body.appendChild(ov); + renderCkBoard(); + } +})(); + +console.log('[HTP Skill Games] Module loaded - createMatchWithLobby, Firebase relay, Connect4, Checkers'); diff --git a/public/htp-fee-engine.js b/public/htp-fee-engine.js new file mode 100644 index 00000000..bd0c4360 --- /dev/null +++ b/public/htp-fee-engine.js @@ -0,0 +1,240 @@ +/** + * htp-fee-engine.js v2.1 — HTP Protocol Fee & Maximizer Engine + * + * FEE RULES: + * Skill games (1v1, winner-takes-all): + * - Winner pays 2% protocol fee on total pool + * - Creator can cancel anytime before opponent joins (full refund) + * - Creator who leaves after game starts = forfeit (counted as loss, no refund) + * + * Events (parimutuel pools): + * - Standard bet: full amount goes to pool + * - Maximizer bet: 50% to pool, 50% hedged + * WIN: payout as if 100% was in pool × odds, then 2% fee on winnings + * LOSE: can claim 50% hedge back, but pays 30% of hedge as protocol fee + * → net hedge recovery = 50% × 0.70 = 35% of original bet + * - Maximizers are parasitic (lower odds for everyone) — event creators can + * limit them via maxMaximizerPct + expectedVolume + * + * TREASURY: + * mainnet: kaspa:qza6ah0lfqf33c9m00ynkfeettuleluvnpyvmssm5pzz7llwy2ka5nkka4fel + * testnet-12: kaspatest:qpyfz03k6quxwf2jglwkhczvt758d8xrq99gl37p6h3vsqur27ltjhn68354m + * + * LOAD ORDER: after htp-init.js (reads window.HTP_NETWORK) + * before htp-covenant-escrow-v2.js, htp-events-v3.js + */ + +(function (W) { + 'use strict'; + + // ── Treasury addresses (canonical, one place) ────────────────────────── + var TREASURY = { + 'mainnet': 'kaspa:qza6ah0lfqf33c9m00ynkfeettuleluvnpyvmssm5pzz7llwy2ka5nkka4fel', + 'tn12': 'kaspatest:qpyfz03k6quxwf2jglwkhczvt758d8xrq99gl37p6h3vsqur27ltjhn68354m', + 'testnet-12': 'kaspatest:qpyfz03k6quxwf2jglwkhczvt758d8xrq99gl37p6h3vsqur27ltjhn68354m', + }; + + // ── Fee constants (change here, nowhere else) ────────────────────────── + var FEES = { + SKILL_GAME_WIN_PCT: 0.02, // 2% on total pool, paid by winner + EVENT_WIN_PCT: 0.02, // 2% on winnings for maximizer/standard wins + MAXIMIZER_HEDGE_LOSS_PCT: 0.30, // 30% of hedge taken if maximizer loses + MAXIMIZER_POOL_CONTRIBUTION: 0.50, // 50% of bet goes to pool, 50% hedged + }; + + // ── Network helper ───────────────────────────────────────────────────── + // Reads window.HTP_NETWORK set by htp-init.js. + // Default: 'tn12' (matches htp-init.js default — NOT mainnet). + function networkKey() { + return W.HTP_NETWORK || 'tn12'; + } + + function treasuryAddress() { + return TREASURY[networkKey()] || TREASURY['tn12']; + } + + // ── Sompi helpers (used by escrow + oracle) ──────────────────────────── + var SOMPI_PER_KAS = 100000000; + function kasToSompi(kas) { return BigInt(Math.round(kas * SOMPI_PER_KAS)); } + function sompiToKas(sompi){ return Number(sompi) / SOMPI_PER_KAS; } + + // ══════════════════════════════════════════════════════════════════════ + // SKILL GAMES + // ══════════════════════════════════════════════════════════════════════ + + /** + * Calculate skill game settlement amounts. + * @param {number} stakeKas — stake per player (each player puts in this amount) + * @returns {{ totalPool, protocolFee, winnerPayout, protocolFeeSompi, + * winnerPayoutSompi, treasuryAddress, feeBreakdown }} + */ + function skillGameSettle(stakeKas) { + var totalPool = stakeKas * 2; + var protocolFee = totalPool * FEES.SKILL_GAME_WIN_PCT; + var winnerPayout = totalPool - protocolFee; + return { + totalPool: totalPool, + protocolFee: protocolFee, + winnerPayout: winnerPayout, + // Sompi versions for on-chain use + protocolFeeSompi: kasToSompi(protocolFee), + winnerPayoutSompi: kasToSompi(winnerPayout), + feeBreakdown: '2% of ' + totalPool.toFixed(4) + ' KAS pool', + treasuryAddress: treasuryAddress(), + }; + } + + /** + * Can the skill game creator cancel? + * @param {object} game — { status, joinerId, opponentJoined } + */ + function skillGameCanCreatorCancel(game) { + var started = game.opponentJoined + || (game.joinerId && game.joinerId !== '') + || (game.status && game.status !== 'waiting' && game.status !== 'open'); + if (started) { + return { allowed: false, reason: 'Game already started — leaving counts as forfeit' }; + } + return { allowed: true, reason: 'No opponent yet — full refund available' }; + } + + // ══════════════════════════════════════════════════════════════════════ + // MAXIMIZER LOGIC + // ══════════════════════════════════════════════════════════════════════ + + function maximizerSplit(betKas) { + var pool = betKas * FEES.MAXIMIZER_POOL_CONTRIBUTION; + return { poolContribution: pool, hedgeAmount: pool, effectivePoolBet: pool }; + } + + function maximizerWinSettle(betKas, odds) { + var grossPayout = betKas * odds; + var netWinnings = grossPayout - betKas; + var protocolFee = netWinnings * FEES.EVENT_WIN_PCT; + var netPayout = grossPayout - protocolFee; + var hedge = maximizerSplit(betKas).hedgeAmount; + return { + grossPayout: grossPayout, + protocolFee: protocolFee, + netPayout: netPayout, + hedgeReturned: hedge, + feeBreakdown: '2% of ' + netWinnings.toFixed(4) + ' KAS winnings', + treasuryAddress: treasuryAddress(), + }; + } + + function maximizerLoseSettle(betKas) { + var hedge = maximizerSplit(betKas).hedgeAmount; + var protocolFee = hedge * FEES.MAXIMIZER_HEDGE_LOSS_PCT; + var claimable = hedge - protocolFee; + return { + hedgeAmount: hedge, + protocolFee: protocolFee, + claimable: claimable, + poolLoss: betKas * FEES.MAXIMIZER_POOL_CONTRIBUTION, + feeBreakdown: '30% of ' + hedge.toFixed(4) + ' KAS hedge', + treasuryAddress: treasuryAddress(), + }; + } + + function checkMaximizerAllowance(event, newBetKas) { + var maxPct = event.maxMaximizerPct || 0; + var expVol = event.expectedVolume || 0; + var curVol = event.currentVolume || 0; + var curMaxi = event.currentMaximizerTotal || 0; + + if (maxPct === 0) return { allowed: false, reason: 'Event creator disabled maximizers' }; + + var refVol = Math.max(expVol, curVol); + var cap = refVol * maxPct; + var contrib = maximizerSplit(newBetKas).poolContribution; + var avail = Math.max(0, cap - curMaxi); + + if (contrib > avail) { + return { + allowed: false, + cap: cap, + used: curMaxi, + available: avail, + reason: 'Maximizer cap reached: ' + curMaxi.toFixed(2) + '/' + cap.toFixed(2) + ' KAS used', + }; + } + return { + allowed: true, + cap: cap, + used: curMaxi, + available: avail, + newUsed: curMaxi + contrib, + reason: 'OK — ' + avail.toFixed(2) + ' KAS maximizer capacity remaining', + }; + } + + function maximizerCapRemaining(event) { + var maxPct = event.maxMaximizerPct || 0; + var expVol = event.expectedVolume || 0; + var curVol = event.currentVolume || 0; + var curMaxi = event.currentMaximizerTotal || 0; + return Math.max(0, Math.max(expVol, curVol) * maxPct - curMaxi); + } + + // ══════════════════════════════════════════════════════════════════════ + // STANDARD EVENT BET + // ══════════════════════════════════════════════════════════════════════ + + function standardEventWinSettle(betKas, odds) { + var gross = betKas * odds; + var winnings = gross - betKas; + var fee = winnings * FEES.EVENT_WIN_PCT; + var net = gross - fee; + return { + grossPayout: gross, + protocolFee: fee, + netPayout: net, + feeBreakdown: '2% of ' + winnings.toFixed(4) + ' KAS winnings', + treasuryAddress: treasuryAddress(), + }; + } + + // ── Generic summarize ───────────────────────────────────────────────── + function summarize(type, params) { + switch (type) { + case 'skill_win': return skillGameSettle(params.stakeKas); + case 'maximizer_win': return maximizerWinSettle(params.betKas, params.odds); + case 'maximizer_lose': return maximizerLoseSettle(params.betKas); + case 'standard_win': return standardEventWinSettle(params.betKas, params.odds); + default: throw new Error('Unknown fee type: ' + type); + } + } + + // ── Public API ──────────────────────────────────────────────────────── + W.HTPFee = { + FEES: FEES, + TREASURY: TREASURY, + treasuryAddress: treasuryAddress, + networkKey: networkKey, + + // Sompi converters (used by escrow + oracle) + kasToSompi: kasToSompi, + sompiToKas: sompiToKas, + + // Skill games + skillGameSettle: skillGameSettle, + skillGameCanCreatorCancel: skillGameCanCreatorCancel, + + // Events — maximizer + maximizerSplit: maximizerSplit, + maximizerWinSettle: maximizerWinSettle, + maximizerLoseSettle: maximizerLoseSettle, + checkMaximizerAllowance: checkMaximizerAllowance, + maximizerCapRemaining: maximizerCapRemaining, + + // Events — standard + standardEventWinSettle: standardEventWinSettle, + + // Generic + summarize: summarize, + }; + + console.log('[HTPFee] v2.1 loaded | net:', networkKey(), '| treasury:', treasuryAddress()); + +})(window); diff --git a/public/htp-games-sync.js b/public/htp-games-sync.js new file mode 100644 index 00000000..52000f2d --- /dev/null +++ b/public/htp-games-sync.js @@ -0,0 +1,428 @@ +// ============================================================= +// htp-games-sync.js — HTP All-Games Sync Patch v1 +// Fixes Connect4 + Checkers: +// • Firebase-synced side assignment (creator=1, joiner=2/3) +// • Firebase-synced clocks (replaces local interval) +// • Idempotent payout (only winner fires settlement) +// • "Your turn / Opponent's turn" label sync +// +// Complements htp-chess-sync.js (chess already handled there). +// Add ONE line to index.html after htp-events.js: +// +// ============================================================= +(function () { + 'use strict'; + + // ── helpers ────────────────────────────────────────────── + function fdb() { + return (typeof firebase !== 'undefined' && firebase.database) + ? firebase.database() : null; + } + function fmt(ms) { + if (ms < 0) ms = 0; + var m = Math.floor(ms / 60000); + var s = Math.floor((ms % 60000) / 1000); + return m + ':' + String(s).padStart(2, '0'); + } + function myPid() { + return (typeof matchLobby !== 'undefined' && matchLobby.myPlayerId) + || window._htpPlayerId || 'P?'; + } + function activeMatch() { + return (typeof matchLobby !== 'undefined') ? matchLobby.activeMatch : null; + } + + // ── 1. SIDE ASSIGNMENT ─────────────────────────────────── + // Stored at: relay//sides { p1: playerId, p2: playerId, assigned: true } + // C4: creator → side 1 (Red), joiner → side 2 (Yellow) + // Checkers: creator → side 1 (Red), joiner → side 3 (Black) + + function assignSideAsCreator(matchId, game) { + var d = fdb(); if (!d) return 1; + var ref = d.ref('relay/' + matchId + '/sides'); + ref.transaction(function (cur) { + if (cur && cur.assigned) return; // abort if already set + return { assigned: true, p1: myPid(), p2: 'TBD', game: game }; + }); + window._htpMySide = 1; + console.log('[HTP Games Sync] Creator side: 1 (' + game + ')'); + return 1; + } + + function assignSideAsJoiner(matchId, game, cb) { + var d = fdb(); + if (!d) { cb(game === 'checkers' ? 3 : 2); return; } + var ref = d.ref('relay/' + matchId + '/sides'); + // Retry until creator has written + function tryAssign(attempts) { + ref.transaction(function (cur) { + if (!cur || !cur.assigned || cur.p2 !== 'TBD') return; // not ready yet + cur.p2 = myPid(); + return cur; + }, function (err, committed, snap) { + if (!err && committed) { + var side = (game === 'checkers') ? 3 : 2; + window._htpMySide = side; + console.log('[HTP Games Sync] Joiner side: ' + side + ' (' + game + ')'); + cb(side); + } else if (attempts > 0) { + setTimeout(function () { tryAssign(attempts - 1); }, 400); + } else { + var fallback = (game === 'checkers') ? 3 : 2; + window._htpMySide = fallback; + cb(fallback); + } + }); + } + tryAssign(15); // up to 6 seconds of retries + } + + // ── 2. FIREBASE CLOCK (replaces local timer) ───────────── + // Path: relay//clock { ms1, ms2, activeSide, lastMoveTs } + // Side 1 = index 0 in arrays, Side 2/3 = index 1 + + function makeGameClock(matchId, mySide, initialMs, onTimeout) { + var clk = { + ms: [initialMs, initialMs], + active: 1, // side 1 goes first always + lastTs: Date.now(), + _tick: null, + _unsub: null, + + subscribe: function () { + var self = this; + var d = fdb(); if (!d) { self._localTick(); return; } + var ref = d.ref('relay/' + matchId + '/clock'); + var fn = ref.on('value', function (snap) { + var c = snap.val(); if (!c) return; + self.ms[0] = c.ms1 != null ? c.ms1 : self.ms[0]; + self.ms[1] = c.ms2 != null ? c.ms2 : self.ms[1]; + self.active = c.activeSide || 1; + self.lastTs = c.lastMoveTs || Date.now(); + self._render(); + clearInterval(self._tick); + self._localTick(); + }); + self._unsub = function () { ref.off('value', fn); }; + }, + + recordMove: function (movingSide) { + var now = Date.now(); + var idx = movingSide === 1 ? 0 : 1; + var elapsed = now - this.lastTs; + this.ms[idx] = Math.max(0, this.ms[idx] - elapsed); + this.active = movingSide === 1 ? 2 : 1; + this.lastTs = now; + var d = fdb(); if (!d) return; + d.ref('relay/' + matchId + '/clock').set({ + ms1: this.ms[0], ms2: this.ms[1], + activeSide: this.active, lastMoveTs: now + }); + }, + + _localTick: function () { + var self = this; + clearInterval(self._tick); + self._tick = setInterval(function () { + var idx = self.active === 1 ? 0 : 1; + self.ms[idx] = Math.max(0, self.ms[idx] - 1000); + self._render(); + if (self.ms[idx] === 0) { + clearInterval(self._tick); + onTimeout(self.active); + } + }, 1000); + }, + + _render: function () { + var s1 = fmt(this.ms[0]); + var s2 = fmt(this.ms[1]); + // C4 timer elements + var t1 = document.getElementById('c4timer1'); + var t2 = document.getElementById('c4timer2'); + if (t1) { t1.textContent = s1; t1.style.color = this.active === 1 ? '#49e8c2' : '#dc2626'; } + if (t2) { t2.textContent = s2; t2.style.color = this.active === 2 ? '#49e8c2' : '#f59e0b'; } + // Checkers timer elements + var ct1 = document.getElementById('cktimer1'); + var ct2 = document.getElementById('cktimer2'); + if (ct1) { ct1.textContent = s1; ct1.style.color = this.active === 1 ? '#49e8c2' : '#dc2626'; } + if (ct2) { ct2.textContent = s2; ct2.style.color = this.active === 3 ? '#49e8c2' : '#888'; } + // Turn labels + var c4turn = document.getElementById('c4turn'); + var ckturn = document.getElementById('ckturn'); + var isMyTurn = (mySide === this.active) || + (mySide === 3 && this.active === 3); + var turnText = isMyTurn ? 'Your turn' : "Opponent's turn"; + if (c4turn && !c4turn._gameOver) c4turn.textContent = turnText; + if (ckturn && !ckturn._gameOver) ckturn.textContent = turnText; + }, + + destroy: function () { + clearInterval(this._tick); + if (this._unsub) { this._unsub(); this._unsub = null; } + } + }; + clk.subscribe(); + return clk; + } + + window._htpGameClock = null; + + // ── 3. PATCH startConnect4Game ──────────────────────────── + // Original: opts = { side: 1|2, id: matchId, time: seconds } + // We intercept to: + // a) Assign side via Firebase instead of opts.side + // b) Replace local timer with Firebase clock + // c) Hook dropC4 to recordMove + + function patchConnect4() { + var orig = window.startConnect4Game; + if (!orig || orig._syncPatched) return; + + window.startConnect4Game = function (opts) { + var matchId = opts.id || (activeMatch() && activeMatch().id); + var timeSec = parseInt(opts.time) || 200; + var match = activeMatch(); + var isCreator = match && (match.creator === myPid()); + + function launch(side) { + // Override opts.side with the Firebase-assigned side + var patchedOpts = Object.assign({}, opts, { side: side }); + orig.call(this, patchedOpts); + + // Kill the local timer C4 just started — we replace it + if (typeof C4 !== 'undefined' && C4.timerInterval) { + clearInterval(C4.timerInterval); + C4.timerInterval = null; + } + + // Start Firebase clock + if (window._htpGameClock) window._htpGameClock.destroy(); + window._htpGameClock = makeGameClock(matchId, side, timeSec * 1000, function (timedOutSide) { + var winner = timedOutSide === 1 ? 2 : 1; + if (typeof C4 !== 'undefined') { + C4.gameOver = true; + if (typeof handleMatchGameOver === 'function') + handleMatchGameOver('timeout', winner); + } + }); + + // Hook dropC4 to tick the clock + var origDrop = window.dropC4; + if (origDrop && !origDrop._clockPatched) { + window.dropC4 = function (col) { + var before = typeof C4 !== 'undefined' ? C4.turn : null; + origDrop.call(this, col); + if (before !== null && typeof C4 !== 'undefined' && C4.turn !== before) { + window._htpGameClock && window._htpGameClock.recordMove(before); + } + }; + window.dropC4._clockPatched = true; + } + + console.log('[HTP Games Sync] Connect4 started — side:', side); + } + + if (isCreator) { + var side = assignSideAsCreator(matchId, 'c4'); + launch.call(this, side); + } else { + var self = this; + assignSideAsJoiner(matchId, 'c4', function (side) { + launch.call(self, side); + }); + } + }; + + window.startConnect4Game._syncPatched = true; + console.log('[HTP Games Sync] startConnect4Game patched'); + } + + // ── 4. PATCH startCheckersGame ──────────────────────────── + // Original: opts = { side: 1|3, id: matchId, time: seconds } + + function patchCheckers() { + var orig = window.startCheckersGame; + if (!orig || orig._syncPatched) return; + + window.startCheckersGame = function (opts) { + var matchId = opts.id || (activeMatch() && activeMatch().id); + var timeSec = parseInt(opts.time) || 300; + var match = activeMatch(); + var isCreator = match && (match.creator === myPid()); + + function launch(side) { + var patchedOpts = Object.assign({}, opts, { side: side }); + orig.call(this, patchedOpts); + + // Kill local timer + if (typeof CK !== 'undefined' && CK.timerInterval) { + clearInterval(CK.timerInterval); + CK.timerInterval = null; + } + + // Start Firebase clock (Checkers: side 1 vs side 3) + if (window._htpGameClock) window._htpGameClock.destroy(); + // Normalize: side 1 = turn 1, side 3 = turn 3 + // makeGameClock uses active=1 start; we map side 3 → idx 1 internally + window._htpGameClock = makeGameClock(matchId, side, timeSec * 1000, function (timedOutSide) { + var winner = timedOutSide === 1 ? 3 : 1; + if (typeof CK !== 'undefined') { + CK.gameOver = true; + if (typeof handleMatchGameOver === 'function') + handleMatchGameOver('timeout', winner); + } + }); + + // Hook ckClick to record moves + var origCkClick = window.ckClick; + if (origCkClick && !origCkClick._clockPatched) { + window.ckClick = function (r, c) { + var before = typeof CK !== 'undefined' ? CK.turn : null; + origCkClick.call(this, r, c); + if (before !== null && typeof CK !== 'undefined' && CK.turn !== before) { + window._htpGameClock && window._htpGameClock.recordMove(before); + } + }; + window.ckClick._clockPatched = true; + } + + console.log('[HTP Games Sync] Checkers started — side:', side); + } + + if (isCreator) { + var side = assignSideAsCreator(matchId, 'checkers'); + launch.call(this, side); + } else { + var self = this; + assignSideAsJoiner(matchId, 'checkers', function (side) { + launch.call(self, side); + }); + } + }; + + window.startCheckersGame._syncPatched = true; + console.log('[HTP Games Sync] startCheckersGame patched'); + } + + // ── 5. PAYOUT — idempotent for all games ───────────────── + // The existing handleMatchGameOver in htp-events.js uses a seed-based + // local color check. We override it with a Firebase idempotent lock so + // only the WINNER's browser fires sendFromEscrow, for ALL games. + // (htp-chess-sync.js patches this for chess; we extend it for c4+checkers) + + function patchGameOver() { + // Wait until htp-chess-sync.js has already patched it (it runs first) + // then wrap again to handle c4/checkers resign paths too + var attempts = 0; + function tryPatch() { + var orig = window.handleMatchGameOver; + if (!orig) { if (attempts++ < 20) setTimeout(tryPatch, 500); return; } + if (orig._allGamesSyncPatched) return; + + window.handleMatchGameOver = async function (reason, winnerSideOrColor) { + // Stop any Firebase clock + if (window._htpGameClock) { + window._htpGameClock.destroy(); + window._htpGameClock = null; + } + + var match = activeMatch(); + var matchId = match ? match.id : window._htpCurrentMatchId; + var game = match ? match.game : 'unknown'; + + // Determine if I won based on the game type + var iWon = false; + if (game === 'c4' || game === 'connect4') { + iWon = (winnerSideOrColor === window._htpMySide); + } else if (game === 'ck' || game === 'checkers') { + iWon = (winnerSideOrColor === window._htpMySide); + } else { + // Chess — handled by htp-chess-sync.js, but fall through + var myChessColor = window._htpMyColor || 'white'; + var winStr = (winnerSideOrColor === 'w' || winnerSideOrColor === 1 || winnerSideOrColor === 'white') ? 'white' : 'black'; + iWon = (winStr === myChessColor); + } + + if (reason === 'resign') iWon = true; // resigner calls this locally + + // Firebase idempotent lock + if (matchId && fdb()) { + try { + var resultRef = fdb().ref('relay/' + matchId + '/result'); + var snap = await resultRef.once('value'); + if (snap.exists()) { + console.log('[HTP Games Sync] Result already locked — no duplicate payout'); + // Still show game over overlay via original + return orig.call(this, reason, winnerSideOrColor); + } + await resultRef.set({ + winner: String(winnerSideOrColor), + reason: reason, + ts: Date.now(), + by: myPid() + }); + } catch (e) { + console.warn('[HTP Games Sync] Firebase lock error:', e.message); + } + } + + // Only winner fires payout + if (!iWon && reason !== 'draw' && reason !== 'stalemate') { + console.log('[HTP Games Sync] I lost (' + game + ') — skipping payout'); + return orig.call(this, reason, winnerSideOrColor); + } + + console.log('[HTP Games Sync] I won (' + game + ') — firing payout'); + return orig.call(this, reason, winnerSideOrColor); + }; + + window.handleMatchGameOver._allGamesSyncPatched = true; + console.log('[HTP Games Sync] handleMatchGameOver patched for all games'); + } + tryPatch(); + } + + // ── 6. RELAY MESSAGE SYNC ──────────────────────────────── + // Patch applyC4Move and applyCkMove to also tick the clock + // when the opponent's move arrives via Firebase relay + + function patchRelayMoves() { + var origC4 = window.applyC4Move; + if (origC4 && !origC4._clockPatched) { + window.applyC4Move = function (col, side) { + origC4.call(this, col, side); + if (window._htpGameClock) window._htpGameClock.recordMove(side); + }; + window.applyC4Move._clockPatched = true; + } + + var origCk = window.applyCkMove; + if (origCk && !origCk._clockPatched) { + window.applyCkMove = function (from, to, side) { + origCk.call(this, from, to, side); + if (window._htpGameClock) window._htpGameClock.recordMove(side); + }; + window.applyCkMove._clockPatched = true; + } + } + + // ── 7. INSTALL ─────────────────────────────────────────── + function install() { + patchConnect4(); + patchCheckers(); + patchGameOver(); + patchRelayMoves(); + console.log('[HTP Games Sync v1] Loaded — C4 ✓ | Checkers ✓ | Firebase clock ✓ | idempotent payout ✓'); + } + + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', install); + } else { + install(); + } + setTimeout(install, 2000); + setTimeout(install, 5000); + window.addEventListener('htpWasmReady', install); + +})(); diff --git a/public/htp-init.js b/public/htp-init.js new file mode 100644 index 00000000..6ba1c8b1 --- /dev/null +++ b/public/htp-init.js @@ -0,0 +1,422 @@ +/** + * htp-init.js — High Table Protocol — v3.0 + * + * RESPONSIBILITIES: + * 1. Detect TN12 vs mainnet → set window.HTP_NETWORK + window.activeNet (ONE place, done first) + * 2. WASM boot gate — unlock all .wasm-gate elements + fire _onWasmReady() callbacks + * 3. Identity / seat resolution + * 4. Wallet auto-connect (KasWare → KaspaWallet → localStorage) + * 5. Board CSS injection + * + * FULL TRUSTLESS MODEL: + * - Escrow keypair is generated client-side and NEVER leaves the browser. + * - Firebase is coordination-only (match state, oracle attestation). + * - Oracle signs the result; the winner's browser sends the settlement TX. + * - window.HTP_NETWORK / window.activeNet drives ALL on-chain calls. + * Switching TN12 ↔ mainnet is ONE place: the NETWORK_MAP below. + */ + +(function (window) { + 'use strict'; + + /* ═══════════════════════════════════════════════════════════════════════════ + * 1. NETWORK DETECTION (runs synchronously, before anything else) + * ═══════════════════════════════════════════════════════════════════════════ */ + + var NETWORK_MAP = { + mainnet: { + prefix: 'kaspa', + networkId: 'mainnet', + resolverAlias: 'mainnet', // Use Kaspa Resolver for load-balancing + useResolver: true, + explorerTx: 'https://explorer.kaspa.org/txs/', + }, + tn12: { + prefix: 'kaspatest', + networkId: 'testnet-12', + resolverAlias: 'tn12', // Use Kaspa Resolver for TN12 load-balancing + useResolver: true, + explorerTx: 'https://tn12.kaspa.stream/txs/', + }, + }; + + function detectNetwork() { + // Priority order: URL param → localStorage override → default (tn12 for now) + var param = (new URLSearchParams(window.location.search)).get('net'); + var stored = null; + try { stored = localStorage.getItem('htp_network'); } catch (e) {} + var key = (param || stored || 'tn12').toLowerCase(); + if (!NETWORK_MAP[key]) key = 'tn12'; + var net = NETWORK_MAP[key]; + // Expose globally — every other module reads these + window.HTP_NETWORK = key; // 'tn12' | 'mainnet' + window.activeNet = net; // full config object + window.HTP_RESOLVER_ALIAS= net.resolverAlias; // 'tn12' or 'mainnet' for Kaspa Resolver + window.HTP_USE_RESOLVER = net.useResolver; // true = use Resolver, false = direct endpoint + window.HTP_PREFIX = net.prefix; + window.HTP_NETWORK_ID = net.networkId; + window.HTP_EXPLORER = net.explorerTx; + try { localStorage.setItem('htp_network', key); } catch (e) {} + console.log('[HTP Init] Network:', key, '| Resolver:', net.resolverAlias, '| Using Resolver:', net.useResolver); + return net; + } + + // Run immediately — synchronous + detectNetwork(); + + /* ═══════════════════════════════════════════════════════════════════════════ + * 2. WASM BOOT GATE + * ═══════════════════════════════════════════════════════════════════════════ + * + * The inline init in index.html (or external loader) calls + * window._onWasmReady() once the WASM module is initialised. + * + * Pattern: + * - Before WASM ready: all .wasm-gate elements are disabled + dimmed. + * - After: they are enabled, opacity restored, and any queued callbacks fire. + */ + + var _wasmReadyCallbacks = []; + var _wasmReadyFired = false; + var _wasmWarnTimer = null; + + function _unlockGates() { + document.querySelectorAll('.wasm-gate').forEach(function (el) { + el.disabled = false; + el.style.opacity = '1'; + el.title = ''; + }); + } + + function _onWasmReady() { + if (_wasmReadyFired) return; + + // Clear any pending timeouts + if (typeof _wasmTimeoutHandle !== 'undefined') { + clearTimeout(_wasmTimeoutHandle); + } + + _wasmReadyFired = true; + window.wasmReady = true; + window.kaspaWasmReady = function () { return true; }; + _unlockGates(); + if (_wasmWarnTimer) { + clearTimeout(_wasmWarnTimer); + _wasmWarnTimer = null; + } + var oldBanner = document.getElementById('htp-wasm-warning'); + if (oldBanner) oldBanner.remove(); + console.log('[HTP Init] WASM ready — gates unlocked ✓'); + _wasmReadyCallbacks.forEach(function (cb) { + try { cb(); } catch (e) { console.warn('[HTP Init] wasmReady callback error', e); } + }); + _wasmReadyCallbacks = []; + window.dispatchEvent(new CustomEvent('htp:wasm:ready')); + } + + function whenWasmReady(cb) { + if (_wasmReadyFired) { try { cb(); } catch (e) {} } + else { _wasmReadyCallbacks.push(cb); } + } + + // Expose so external loader (inline @@ -8510,14 +8602,36 @@

18. Data and Privacy

else mult = selMkt.nM || 2.0; } - var payout = amt * mult; - var profit = payout - amt; - var fee = profit > 0 ? profit * 0.02 : 0; - var netPayout = payout - fee; + // Use shared HTPFee engine when available so spot vs maximizer math is consistent + var Fee = window.HTPFee; + var fee, netPayout, label; + if (typeof tMode !== 'undefined' && tMode === 'maximizer' && Fee && typeof Fee.maximizerWinSettle === 'function') { + // Maximizer WIN: full bet * odds, 2% fee on winnings (pool=50%, hedge=50%) + var w = Fee.maximizerWinSettle(amt, mult); + netPayout = w.netPayout; + fee = w.protocolFee; + var l = Fee.maximizerLoseSettle(amt); + label = "Maximizer · win " + netPayout.toFixed(2) + " KAS / lose claim " + l.claimable.toFixed(2) + " KAS hedge"; + } else if (Fee && typeof Fee.standardEventWinSettle === 'function') { + var s = Fee.standardEventWinSettle(amt, mult); + netPayout = s.netPayout; + fee = s.protocolFee; + label = "Standard · 2% fee on winnings"; + } else { + var payout = amt * mult; + var profit = payout - amt; + fee = profit > 0 ? profit * 0.02 : 0; + netPayout = payout - fee; + label = "2% fee on winnings"; + } if (eP) eP.textContent = netPayout.toFixed(2) + " KAS"; if (fV) fV.textContent = fee.toFixed(2) + " KAS"; if (betBtn) betBtn.textContent = "Place Bet · " + amt + " KAS on " + (tOut || "YES").toUpperCase(); + + // Show explanatory copy under the trade card if present + var disclosure = document.querySelector('.fee-disclosure'); + if (disclosure) disclosure.textContent = label; } @@ -8525,7 +8639,7 @@

18. Data and Privacy

var g = $('sgGame'); if (!g) return; var tSel = $('sgTime'), sSel = $('sgSeries'); - var gNames = { chess:'Chess', connect4:'Connect 4', checkers:'Checkers', tictactoe:'Tic-Tac-Toe' }; + var gNames = { chess:'Chess', connect4:'Connect 4', checkers:'Checkers', tictactoe:'Tic-Tac-Toe', poker:"Texas Hold'em", blackjack:'Blackjack' }; var pGame = document.getElementById('matchPreviewGame'); var pStake = document.getElementById('matchPreviewStake'); var pTime = document.getElementById('matchPreviewTime'); @@ -8566,6 +8680,8 @@

18. Data and Privacy

else if (g.value === 'connect4') hint.textContent = 'Minutes + increment per move'; else if (g.value === 'checkers') hint.textContent = 'Minutes + increment per move'; else if (g.value === 'tictactoe') hint.textContent = 'Seconds or minutes per move'; + else if (g.value === 'poker') hint.textContent = 'Hand timer (minutes)'; + else if (g.value === 'blackjack') hint.textContent = 'Round timer (minutes)'; } updPreview(); } diff --git a/public/patch-games.js b/public/patch-games.js index 47863ad9..06cdc215 100644 --- a/public/patch-games.js +++ b/public/patch-games.js @@ -55,8 +55,12 @@ function fixResolver(){ }; } -// 2. BIG SKILL GAME CARDS +// 2. BIG SKILL GAME CARDS - DISABLED (v8.1): main #v-skill panel now hosts all 6 games. +// Kept as a no-op so existing references don't break. Use showCreateModal() directly +// from the main panel cards which dispatch via createMatchWithLobby/sgGamePicker. function injectSkillSection(){ + return; + // legacy code path retained below for reference but unreachable if($('#skill-games-section'))return; var sec=document.createElement('section'); sec.id='skill-games-section'; From 50d0ac951f8fab37a090cd0bfe3bd077272f1152 Mon Sep 17 00:00:00 2001 From: HTP Agent Date: Tue, 28 Apr 2026 07:49:43 +0000 Subject: [PATCH 016/141] Stability & polish: fix net ReferenceError, WASM loader, Firebase noise, board UI - index.html: declare safe global net (defaults to 'both' or activeNet) so renderM no longer crashes; replace em-dashes in visible UI strings; restyle LIVE KASPA dot (solid, no pulse, no clipping); make all sgv2-card skill game cards fully keyboard accessible and route through a shared __htpPickGame helper that scrolls picker into view; add per-game extras panel (chess color, checkers forced capture, c4 first mover/board width, ttt quick mode, poker seats/blinds, blackjack decks/rounds); richer checkers board palette with gradient squares, glowing select/legal-target rings, and 3D rim-lit discs. - kaspa-wasm-sdk-inline.js: probe /kaspa_bg.wasm and verify wasm magic bytes before instantiating; fall back cleanly to lite mode when the binary is missing or served as HTML. - htp-init.js: replace blocking WASM error modal with a quiet Lite Mode banner + retry; add Toccata forward-compat network entry and HTP_TOCCATA_LIVE feature flag; carry direct TN12 wRPC fallbacks in NETWORK_MAP. - htp-blockdag-viz.js: catch permission_denied on /kaspa/stats writes and disable further writes after the first failure to stop the 5s spam loop. - firebase-config.js: skip the gstatic compat loaders if firebase-app-compat is already on the page so the duplicate-global warning goes away. - chess-sync, games-sync, board-engine: gate the install banner behind a one-shot flag so re-runs after WASM recovery do not re-log the same lines. - server.js: serve .wasm with application/wasm and refuse to fall through to the SPA for asset paths so missing assets return 404 rather than HTML. - firebase.json: add .wasm content-type header and exclude assets from SPA rewrite. --- firebase.json | 13 ++- public/firebase-config.js | 14 ++- public/htp-blockdag-viz.js | 30 ++++++- public/htp-board-engine.js | 3 +- public/htp-chess-sync.js | 6 +- public/htp-games-sync.js | 6 +- public/htp-init.js | 63 ++++++++----- public/index.html | 151 +++++++++++++++++++++++++------- public/kaspa-wasm-sdk-inline.js | 26 +++++- server.js | 17 +++- 10 files changed, 265 insertions(+), 64 deletions(-) diff --git a/firebase.json b/firebase.json index 69624846..e9243dd1 100644 --- a/firebase.json +++ b/firebase.json @@ -3,6 +3,17 @@ "site": "hightable420", "public": "public", "ignore": ["firebase.json", "**/.*", "**/node_modules/**"], - "rewrites": [{ "source": "**", "destination": "/index.html" }] + "headers": [ + { + "source": "**/*.wasm", + "headers": [{ "key": "Content-Type", "value": "application/wasm" }] + } + ], + "rewrites": [ + { + "source": "!/**/*.@(wasm|js|css|json|map|png|jpg|jpeg|svg|ico|gif|webp|woff|woff2|ttf)", + "destination": "/index.html" + } + ] } } diff --git a/public/firebase-config.js b/public/firebase-config.js index ed4f17c9..71a50a4d 100644 --- a/public/firebase-config.js +++ b/public/firebase-config.js @@ -256,8 +256,16 @@ writeWalletStat: function(address, matchId, record) { }); } - loadScript('https://www.gstatic.com/firebasejs/10.14.1/firebase-app-compat.js', function() { - loadScript('https://www.gstatic.com/firebasejs/10.14.1/firebase-database-compat.js', initFirebase); - }); + // Only load gstatic compat scripts if firebase was not already loaded locally. + // The local tag in index.html already + // defines window.firebase; loading the gstatic copy a second time triggers the + // "Firebase is already defined in the global scope" warning. + if (typeof firebase !== 'undefined' && firebase.database) { + initFirebase(); + } else { + loadScript('https://www.gstatic.com/firebasejs/10.14.1/firebase-app-compat.js', function() { + loadScript('https://www.gstatic.com/firebasejs/10.14.1/firebase-database-compat.js', initFirebase); + }); + } })(); diff --git a/public/htp-blockdag-viz.js b/public/htp-blockdag-viz.js index c43907f8..6e6169ba 100644 --- a/public/htp-blockdag-viz.js +++ b/public/htp-blockdag-viz.js @@ -183,14 +183,36 @@ _bgSpawnNext = Math.max(_bgSpawnNext, _bgSpawnNext + _SPAWN_GAP); } - // Write live Kaspa data to Firebase Realtime DB + // Write live Kaspa data to Firebase Realtime DB. + // Once we observe a permission_denied (anonymous client without write rules), + // stop retrying to avoid the 5s log spam. Reads/listens are unaffected. + var _fbWriteDisabled = false; + var _fbWarnedOnce = false; + function _disableFbWrites(reason) { + if (_fbWriteDisabled) return; + _fbWriteDisabled = true; + if (!_fbWarnedOnce) { + _fbWarnedOnce = true; + console.warn('[HTP BlockDAG] Firebase stats writes disabled:', reason || 'permission_denied'); + } + } + function _safeSet(ref, val) { + try { + var p = ref.set(val); + if (p && typeof p.catch === 'function') p.catch(function(err){ + var msg = (err && (err.code || err.message)) || ''; + if (/permission_denied|PERMISSION_DENIED/i.test(String(msg))) _disableFbWrites(msg); + }); + } catch(e) {} + } function _syncFirebase(stats, blocks) { + if (_fbWriteDisabled) return; try { var fb = window.firebase; if (!fb || !fb.apps || !fb.apps.length) return; var db = fb.database(); if (stats) { - db.ref('kaspa/stats').set({ + _safeSet(db.ref('kaspa/stats'), { blockCount: stats.blockCount || 0, daaScore: stats.virtualDaaScore || 0, difficulty: stats.difficulty || 0, @@ -202,8 +224,8 @@ var recent = blocks.slice(-15).map(function(b) { return { hash: b.hash, blueScore: b.blueScore || 0, parents: (b.parents||[]).slice(0,3), ts: b.timestamp || 0 }; }); - db.ref('kaspa/latestBlocks').set(recent); - db.ref('kaspa/latestHash').set(blocks[blocks.length - 1].hash); + _safeSet(db.ref('kaspa/latestBlocks'), recent); + _safeSet(db.ref('kaspa/latestHash'), blocks[blocks.length - 1].hash); } } catch(e) { /* firebase not ready yet */ } } diff --git a/public/htp-board-engine.js b/public/htp-board-engine.js index d10afd1b..b3c8f9a5 100644 --- a/public/htp-board-engine.js +++ b/public/htp-board-engine.js @@ -695,13 +695,14 @@ // BOOT — install patches once dependencies are ready // ───────────────────────────────────────────────────────────────────────── + var _bootLogged = false; function boot() { patchJoinAmount(); patchSendTxAmount(); patchCreateForCreatorBoard(); patchJoinForBoard(); patchRelayHandler(); - LOG('All patches installed'); + if (!_bootLogged) { _bootLogged = true; LOG('All patches installed'); } } let attempts = 0; diff --git a/public/htp-chess-sync.js b/public/htp-chess-sync.js index f072eabe..0b2ccbc5 100644 --- a/public/htp-chess-sync.js +++ b/public/htp-chess-sync.js @@ -388,12 +388,16 @@ } // ── 7. INSTALL ─────────────────────────────────────────── + var _installLogged = false; function install() { patchPlayMatch(); patchJoinLobbyMatch(); patchHandleMatchGameOver(); hookRelaySend(); - console.log('[HTP Sync v1] Loaded — orientation ✓ | Firebase clock ✓ | color assign ✓ | idempotent payout ✓'); + if (!_installLogged) { + _installLogged = true; + console.log('[HTP Sync v1] Loaded, orientation, Firebase clock, color assign, idempotent payout'); + } } // Wait for DOM + window functions to be ready diff --git a/public/htp-games-sync.js b/public/htp-games-sync.js index 52000f2d..e6bfc49e 100644 --- a/public/htp-games-sync.js +++ b/public/htp-games-sync.js @@ -408,12 +408,16 @@ } // ── 7. INSTALL ─────────────────────────────────────────── + var _installLogged = false; function install() { patchConnect4(); patchCheckers(); patchGameOver(); patchRelayMoves(); - console.log('[HTP Games Sync v1] Loaded — C4 ✓ | Checkers ✓ | Firebase clock ✓ | idempotent payout ✓'); + if (!_installLogged) { + _installLogged = true; + console.log('[HTP Games Sync v1] Loaded, C4, Checkers, Firebase clock, idempotent payout'); + } } if (document.readyState === 'loading') { diff --git a/public/htp-init.js b/public/htp-init.js index 6ba1c8b1..7b532cda 100644 --- a/public/htp-init.js +++ b/public/htp-init.js @@ -23,22 +23,40 @@ * 1. NETWORK DETECTION (runs synchronously, before anything else) * ═══════════════════════════════════════════════════════════════════════════ */ + // Toccata TN12 resolver abstraction. + // When Toccata mainnet activates (after audits/rehearsal), flip useResolver=true on toccata + // and update resolverAlias / endpoints. UI feature flags (covenants, ZK) can probe HTP_TOCCATA_LIVE. + var TOCCATA_LIVE = false; // mainnet covenants not yet live per kaspa.org/toccata-hard-fork-kaspa-covenants var NETWORK_MAP = { mainnet: { prefix: 'kaspa', networkId: 'mainnet', - resolverAlias: 'mainnet', // Use Kaspa Resolver for load-balancing + resolverAlias: 'mainnet', useResolver: true, explorerTx: 'https://explorer.kaspa.org/txs/', + covenants: TOCCATA_LIVE, // Silverscript / KIP-16/17/20/21 only when activated on mainnet }, tn12: { prefix: 'kaspatest', networkId: 'testnet-12', - resolverAlias: 'tn12', // Use Kaspa Resolver for TN12 load-balancing + resolverAlias: 'tn12', useResolver: true, + // Public TN12 wRPC fallbacks when Resolver is unreachable + directWrpc: ['wss://tn12.kaspa.stream/wrpc/borsh','wss://tn12-1.kaspa.stream/wrpc/borsh'], explorerTx: 'https://tn12.kaspa.stream/txs/', + covenants: true, // Toccata feature freeze branch on TN12 + }, + // Forward-compat alias: post-Toccata mainnet. One-flag flip when the hard fork goes live. + toccata: { + prefix: 'kaspa', + networkId: 'mainnet', + resolverAlias: 'mainnet', + useResolver: true, + explorerTx: 'https://explorer.kaspa.org/txs/', + covenants: TOCCATA_LIVE, }, }; + window.HTP_TOCCATA_LIVE = TOCCATA_LIVE; function detectNetwork() { // Priority order: URL param → localStorage override → default (tn12 for now) @@ -160,30 +178,35 @@ document.body.appendChild(modal); } + function _showLiteBanner() { + if (document.getElementById('htp-wasm-warning')) return; + var banner = document.createElement('div'); + banner.id = 'htp-wasm-warning'; + banner.style.cssText = 'position:fixed;left:50%;bottom:14px;transform:translateX(-50%);z-index:9000;background:#1a2235;color:#cbd5e1;border:1px solid rgba(79,152,163,0.35);border-radius:8px;padding:8px 14px;font:500 12px/1.4 Inter,sans-serif;box-shadow:0 6px 18px rgba(0,0,0,.25);max-width:90vw'; + banner.innerHTML = 'Lite Mode active. Kaspa WASM SDK unavailable, on-chain actions are disabled. '; + document.body.appendChild(banner); + var btn = document.getElementById('htp-wasm-retry'); + if (btn) btn.onclick = function () { window.location.reload(); }; + } + function _retryWasmLoad() { - if (_wasmRetried) { - _showWasmError( - 'Kaspa WASM SDK failed to initialize after retry. ' + - 'Verify you can reach the network and /kaspa_bg.wasm is accessible. ' + - 'If this persists, restart your browser and clear cache.' - ); + if (window.wasmLoadError) { + // Inline SDK already reported an unrecoverable failure (missing binary, wrong MIME). + // Surface lite-mode banner instead of a blocking modal; user has no node requirement. + _showLiteBanner(); window.dispatchEvent(new CustomEvent('htp:wasm:fatal')); return; } - - _wasmRetried = true; - console.warn('[HTP Init] WASM retry attempt — reloading module'); - // Attempt to reload kaspaSDK initialization - if (window.location.href.includes('localhost') || window.location.href.includes('127.0.0.1')) { - console.log('[HTP Init] Development mode detected — waiting another 20s'); - setTimeout(_retryWasmLoad, 20000); - } else { - _showWasmError( - 'Kaspa WASM SDK failed to load. The blockchain integration is unavailable. ' + - 'Please try again in a moment or check your internet connection.' - ); + if (_wasmRetried) { + _showLiteBanner(); window.dispatchEvent(new CustomEvent('htp:wasm:fatal')); + return; } + _wasmRetried = true; + console.warn('[HTP Init] WASM retry attempt'); + setTimeout(function () { + if (!_wasmReadyFired) _showLiteBanner(); + }, 8000); } // Primary timeout: 30 seconds diff --git a/public/index.html b/public/index.html index 83d19ef4..58ffa3c4 100644 --- a/public/index.html +++ b/public/index.html @@ -4654,7 +4654,7 @@

Create an Event

placeholder="e.g. 50000" value="50000" oninput="updPrev()" />
Maximizer cap = max(expected, actual) × cap%. - Soft floor only — once actual volume exceeds expected, the cap scales with it. + Soft floor only. Once actual volume exceeds expected, the cap scales with it. Example: 10% cap, 100K expected → 10K maximizer pool. When actual reaches 200K, cap auto-grows to 20K. Set cap to 0% to fully disable maximizers.
@@ -4931,7 +4931,7 @@

Skill Games

-
+
@@ -4966,7 +4966,7 @@

Skill Games

-
+
@@ -4995,7 +4995,7 @@

Skill Games

-
+
@@ -5029,7 +5029,7 @@

Skill Games

-
+
@@ -5058,7 +5058,7 @@

Skill Games

-
+
@@ -5094,7 +5094,7 @@

Skill Games

-
+
@@ -5125,7 +5125,7 @@

Skill Games

Blackjack
-

P2P heads-up — closest to 21 without busting wins. No house, no dealer. Card draws committed on-chain via shared seed.

+

P2P heads-up. Closest to 21 without busting wins. No house, no dealer. Card draws committed on-chain via shared seed.

Covenant EnforcedNo HouseP2P
@@ -5185,7 +5185,26 @@

⚔ Create a Challenge

Blackjack
- +
@@ -5212,6 +5231,62 @@

⚔ Create a Challenge

+ + + + '; // bj-table diff --git a/public/firebase-config.js b/public/firebase-config.js index 71a50a4d..2c6cbef1 100644 --- a/public/firebase-config.js +++ b/public/firebase-config.js @@ -1,7 +1,10 @@ -// firebase-config.js — HTP hightable420 +// firebase-config.js, HTP hightable420 (function () { 'use strict'; + if (window.__htpFirebaseConfigInstalled) return; + window.__htpFirebaseConfigInstalled = true; + var firebaseConfig = { apiKey: "AIzaSyA9n5AMFgmCL861rmqE_6ajBBEC5BboPd8", authDomain: "hightable420.firebaseapp.com", @@ -14,17 +17,25 @@ }; function loadScript(src, cb) { - if (document.querySelector('script[src="' + src + '"]')) { cb && cb(); return; } - var s = document.createElement('script'); - s.src = src; s.onload = cb; - document.head.appendChild(s); + // Match by ending segment, not exact src, so we never double-load app/database compat + // even if a previous tag used a different host (gstatic vs local). + var existing = document.querySelectorAll('script'); + for (var i = 0; i < existing.length; i++) { + var s = existing[i].src || ''; + if (s && (s === src || s.indexOf(src.split('/').slice(-1)[0]) !== -1)) { cb && cb(); return; } + } + var sc = document.createElement('script'); + sc.src = src; sc.onload = cb; + document.head.appendChild(sc); } function initFirebase() { if (typeof firebase === 'undefined') { setTimeout(initFirebase, 200); return; } + if (window.__htpFirebaseInitialized) return; + window.__htpFirebaseInitialized = true; if (!firebase.apps.length) firebase.initializeApp(firebaseConfig); var db = firebase.database(); - console.log('%cHTP Firebase ready — hightable420', 'color:#49e8c2;font-weight:bold'); + console.log('%cHTP Firebase ready , hightable420', 'color:#49e8c2;font-weight:bold'); window.dispatchEvent(new CustomEvent('htp:firebase:ready')); window.htpFirebase = { @@ -228,7 +239,7 @@ writeWalletStat: function(address, matchId, record) { }; - // Lobby sync — pushes Firebase matches to index via custom event + // Lobby sync , pushes Firebase matches to index via custom event db.ref('matches').on('value', function(snap) { var val = snap.val(); if (!val) return; diff --git a/public/htp-autopayout-engine.js b/public/htp-autopayout-engine.js index bc1e326a..e436e12d 100644 --- a/public/htp-autopayout-engine.js +++ b/public/htp-autopayout-engine.js @@ -1,5 +1,5 @@ /** - * htp-autopayout-engine.js — High Table Protocol — v4.0 + * htp-autopayout-engine.js , High Table Protocol , v4.0 * * THE COMPLETE LAYER: * @@ -10,18 +10,18 @@ * → winner browser fires the on-chain TX automatically, NO BUTTON NEEDED * → Firebase settlement lock prevents double-spend across both browsers * - * 2. GAME UI — CHESS (Chess.com aesthetic, full) + * 2. GAME UI , CHESS (Chess.com aesthetic, full) * Board colors: #ebecd0 / #779556 * Pieces: unicode, white=bright, black=dark, no teal tint * Clocks: both players, active clock highlighted, Firebase-synced * Coord labels on every square * Last-move highlight, check highlight, legal-move dots * - * 3. GAME UI — CONNECT4 + * 3. GAME UI , CONNECT4 * 6×7 grid, drop animation, gravity, win-line highlight * Red vs Yellow, turn indicator, Firebase-synced clock * - * 4. GAME UI — CHECKERS + * 4. GAME UI , CHECKERS * 8×8 board, dark squares only, multi-jump support * Red vs Black, king promotion glow, Firebase-synced clock * @@ -33,12 +33,15 @@ * mainnet: kaspa:qza6ah0lfqf33c9m00ynkfeettuleluvnpyvmssm5pzz7llwy2ka5nkka4fel * testnet-12: kaspatest:qpyfz03k6quxwf2jglwkhczvt758d8xrq99gl37p6h3vsqur27ltjhn68354m * - * LOAD ORDER: LAST — after all other htp-*.js files + * LOAD ORDER: LAST , after all other htp-*.js files */ ;(function(W) { 'use strict'; + if (W.__htpAutoPayoutInstalled) return; + W.__htpAutoPayoutInstalled = true; + const LOG = (...a) => console.log('%c[HTP AutoPayout v4]', 'color:#49e8c2;font-weight:bold', ...a); const WARN = (...a) => console.warn('[HTP AutoPayout v4]', ...a); const ERR = (...a) => console.error('[HTP AutoPayout v4]', ...a); @@ -81,13 +84,13 @@ const script = escrow.redeemScript.toLowerCase(); const spk = expectedSpk.toLowerCase(); if (!script.includes(spk)) { - ERR('COVENANT INTEGRITY FAIL — redeemScript fee SPK mismatch!'); + ERR('COVENANT INTEGRITY FAIL , redeemScript fee SPK mismatch!'); ERR('Expected SPK:', expectedSpk); ERR('RedeemScript:', escrow.redeemScript); - if (W.showToast) W.showToast('⚠️ Covenant integrity check failed — settlement blocked', 'error'); + if (W.showToast) W.showToast('⚠️ Covenant integrity check failed , settlement blocked', 'error'); return false; } - LOG('Covenant integrity ✓ — fee SPK verified in redeemScript'); + LOG('Covenant integrity ✓ , fee SPK verified in redeemScript'); return true; } @@ -162,13 +165,13 @@ if (hasKey && !covenantIntegrityCheck(escrow)) { ERR('Payout blocked by covenant integrity check'); } else if (hasKey && (iWon || isDraw)) { - LOG('Auto-payout triggered — building settlement TX…'); + LOG('Auto-payout triggered , building settlement TX…'); setTimeout(() => triggerAutoPayout(matchId, winnerStr, isDraw, match, escrow), 400); } else if (!hasKey && (iWon || isDraw)) { - LOG('No local escrow key — listening for partner settlement…'); + LOG('No local escrow key , listening for partner settlement…'); listenForSettlement(matchId); } else { - LOG('I lost (' + game + ') — settlement will fire from winner\'s browser'); + LOG('I lost (' + game + ') , settlement will fire from winner\'s browser'); listenForSettlement(matchId); } } @@ -563,7 +566,7 @@ renderChessBoardV4(); startChessClocksV4(opts.matchId); - LOG('Chess board opened — you are', opts.myColor === 'w' ? 'White' : 'Black'); + LOG('Chess board opened , you are', opts.myColor === 'w' ? 'White' : 'Black'); } function renderChessBoardV4() { @@ -850,7 +853,7 @@ renderC4Board(); startC4Clock(opts.matchId, opts.timeSec || 200); - LOG('Connect4 board opened — side', opts.mySide, isRed?'(Red)':'(Yellow)'); + LOG('Connect4 board opened , side', opts.mySide, isRed?'(Red)':'(Yellow)'); } function renderC4Board() { @@ -1025,7 +1028,7 @@ document.body.appendChild(wrap); renderCheckersBoard(); startCkClock(opts.matchId,opts.timeSec||300); - LOG('Checkers board opened — side',opts.mySide,isRed?'(Red)':'(Black)'); + LOG('Checkers board opened , side',opts.mySide,isRed?'(Red)':'(Black)'); } function initCheckersBoard(){ @@ -1166,7 +1169,7 @@ updateTTTClockDisplay();W.TTT._clk._localTick(); }); } - LOG('TicTacToe board opened — side',mySide===1?'X':'O'); + LOG('TicTacToe board opened , side',mySide===1?'X':'O'); } function renderTTTBoard(){ diff --git a/public/htp-blockdag-viz.js b/public/htp-blockdag-viz.js index 6e6169ba..20db90a6 100644 --- a/public/htp-blockdag-viz.js +++ b/public/htp-blockdag-viz.js @@ -25,10 +25,10 @@ // ── KASPA BLOCKDAG BACKGROUND ───────────────────────────────────────── // Three-layer deep-space DAG: - // Layer 1 — Starfield : tiny pale dots moving at 20% of DAG speed (parallax) - // Layer 2 — DAG network: organic circles + bezier edges, slow scroll - // Layer 3 — Real blocks: brighter nodes from live TN12 API with real edges - // Edge fade done per-node with smoothstep() — no CSS mask needed, zero hard lines. + // Layer 1 , Starfield : tiny pale dots moving at 20% of DAG speed (parallax) + // Layer 2 , DAG network: organic circles + bezier edges, slow scroll + // Layer 3 , Real blocks: brighter nodes from live TN12 API with real edges + // Edge fade done per-node with smoothstep() , no CSS mask needed, zero hard lines. var _bgScrollX = 0; var _bgNodes = []; // { id, absX, y, alpha, isChain, isReal, parentIds[] } var _bgNodeById = {}; @@ -47,12 +47,12 @@ function _bgRand(a, b) { return a + Math.random() * (b - a); } - // Cubic smoothstep — produces a perfectly seamless S-curve fade, no hard line + // Cubic smoothstep , produces a perfectly seamless S-curve fade, no hard line function _bgSmooth(x, lo, hi) { var t = Math.max(0, Math.min(1, (x - lo) / (hi - lo))); return t * t * (3 - 2 * t); } - // Edge fade: 5% hair-thin zone at each edge — eliminates visible density gradient + // Edge fade: 5% hair-thin zone at each edge , eliminates visible density gradient function _bgFade(bx, w) { var z = w * 0.05; return _bgSmooth(bx, 0, z) * _bgSmooth(w - bx, 0, z); @@ -148,7 +148,7 @@ newBlocks.forEach(function(b) { var scoreFrac = (b.blueScore - minScore) / scoreRange; var absX = _bgSpawnNext - span + scoreFrac * span; - // Y from hash bits — stable and organic + // Y from hash bits , stable and organic var hashBits = parseInt(b.hash.substring(0, 6), 16) || 0; var y = h * 0.08 + (hashBits % 1000) / 1000 * h * 0.84; @@ -184,10 +184,11 @@ } // Write live Kaspa data to Firebase Realtime DB. - // Once we observe a permission_denied (anonymous client without write rules), - // stop retrying to avoid the 5s log spam. Reads/listens are unaffected. - var _fbWriteDisabled = false; + // Disabled by default for anonymous clients to avoid permission_denied SDK log spam. + // Set window.HTP_FB_STATS_WRITES = true to opt in (requires database rules to allow). + var _fbWriteDisabled = (typeof window !== 'undefined' && window.HTP_FB_STATS_WRITES === true) ? false : true; var _fbWarnedOnce = false; + var _fbWriteFailures = 0; function _disableFbWrites(reason) { if (_fbWriteDisabled) return; _fbWriteDisabled = true; @@ -197,13 +198,14 @@ } } function _safeSet(ref, val) { + if (_fbWriteDisabled) return; try { var p = ref.set(val); if (p && typeof p.catch === 'function') p.catch(function(err){ var msg = (err && (err.code || err.message)) || ''; - if (/permission_denied|PERMISSION_DENIED/i.test(String(msg))) _disableFbWrites(msg); + if (/permission_denied|PERMISSION_DENIED/i.test(String(msg)) || ++_fbWriteFailures > 2) _disableFbWrites(msg); }); - } catch(e) {} + } catch(e) { _disableFbWrites('exception'); } } function _syncFirebase(stats, blocks) { if (_fbWriteDisabled) return; @@ -712,7 +714,7 @@ // dagCanvas background is fully managed by inline script in index.html // This module only handles stats/block polling and optional panel canvases - // Panel canvases — solid dark background with DAG detail + // Panel canvases , solid dark background with DAG detail var mainCanvas = document.getElementById('dagCanvasFull') || document.getElementById('blockdag-canvas'); var miniCanvas = document.getElementById('dagCanvasMini') || document.getElementById('overview-dag-canvas'); diff --git a/public/htp-board-engine.js b/public/htp-board-engine.js index b3c8f9a5..7ec1be7c 100644 --- a/public/htp-board-engine.js +++ b/public/htp-board-engine.js @@ -1,5 +1,5 @@ /** - * htp-board-engine.js — HTP Board Engine v2 + * htp-board-engine.js , HTP Board Engine v2 * Game Engine Coordinator: detects game type, initializes the correct board, * manages turn switching, clocks, move relay, and game-end detection. * @@ -14,6 +14,9 @@ ;(function () { 'use strict'; + if (window.__htpBoardEngineInstalled) return; + window.__htpBoardEngineInstalled = true; + const LOG = (...a) => console.log('[HTP Board Engine v2]', ...a); const ERR = (...a) => console.error('[HTP Board Engine v2]', ...a); @@ -38,7 +41,7 @@ } // ───────────────────────────────────────────────────────────────────────── - // 0. STAKE PATCHES — fix hard-coded 5 KAS from htp-multi-fix.js + // 0. STAKE PATCHES , fix hard-coded 5 KAS from htp-multi-fix.js // ───────────────────────────────────────────────────────────────────────── function patchJoinAmount() { @@ -123,7 +126,7 @@ } // ───────────────────────────────────────────────────────────────────────── - // 1. BOARD-OPEN PATCHES — optimistic board for creator + joiner + // 1. BOARD-OPEN PATCHES , optimistic board for creator + joiner // ───────────────────────────────────────────────────────────────────────── function patchCreateForCreatorBoard() { @@ -173,7 +176,7 @@ } // ───────────────────────────────────────────────────────────────────────── - // 2. MATCH RESOLVER — find match object from any available store + // 2. MATCH RESOLVER , find match object from any available store // ───────────────────────────────────────────────────────────────────────── function resolveMatch(matchId) { @@ -197,7 +200,7 @@ } // ───────────────────────────────────────────────────────────────────────── - // 3. CORE: openGameBoard — unified board launcher + // 3. CORE: openGameBoard , unified board launcher // ───────────────────────────────────────────────────────────────────────── async function openGameBoard(matchId, role) { @@ -288,7 +291,7 @@ } // ───────────────────────────────────────────────────────────────────────── - // 4. COLOR ASSIGNMENT — deterministic + Firebase-confirmed + // 4. COLOR ASSIGNMENT , deterministic + Firebase-confirmed // ───────────────────────────────────────────────────────────────────────── async function resolveColorAssignment(matchId, m, isCreator) { @@ -363,7 +366,7 @@ } // ───────────────────────────────────────────────────────────────────────── - // 6. CLOCK MANAGER — shared across all games + // 6. CLOCK MANAGER , shared across all games // ───────────────────────────────────────────────────────────────────────── // Global clock state @@ -547,7 +550,7 @@ } // ───────────────────────────────────────────────────────────────────────── - // 8. RELAY HANDLER PATCH — clock sync + board refresh on opponent moves + // 8. RELAY HANDLER PATCH , clock sync + board refresh on opponent moves // ───────────────────────────────────────────────────────────────────────── function patchRelayHandler() { @@ -673,7 +676,7 @@ }; // ───────────────────────────────────────────────────────────────────────── - // EXPORTS — functions available to other modules + // EXPORTS , functions available to other modules // ───────────────────────────────────────────────────────────────────────── window.htpBoardEngine = { @@ -692,7 +695,7 @@ }; // ───────────────────────────────────────────────────────────────────────── - // BOOT — install patches once dependencies are ready + // BOOT , install patches once dependencies are ready // ───────────────────────────────────────────────────────────────────────── var _bootLogged = false; diff --git a/public/htp-c4-animation.js b/public/htp-c4-animation.js index 5ea0541d..fc22c407 100644 --- a/public/htp-c4-animation.js +++ b/public/htp-c4-animation.js @@ -1,5 +1,5 @@ /** - * htp-c4-animation.js — HTP Connect 4 v2 + * htp-c4-animation.js , HTP Connect 4 v2 * * Renders a 7x6 Connect 4 grid into #c4-board. * Features: gravity drop animation, column hover preview, win detection, diff --git a/public/htp-cancel-flow.js b/public/htp-cancel-flow.js index de02cf74..2feb654d 100644 --- a/public/htp-cancel-flow.js +++ b/public/htp-cancel-flow.js @@ -1,5 +1,5 @@ /** - * htp-cancel-flow.js — Skill Game Creator Cancel Flow + * htp-cancel-flow.js , Skill Game Creator Cancel Flow * Checks HTPFee.skillGameCanCreatorCancel() before firing refund TX. * Depends on: htp-fee-engine.js, htp-covenant-escrow-v2.js * No Firebase required for the cancel TX itself. @@ -79,7 +79,7 @@ /** * Mount a cancel button into a container element. * @param {string} containerId - * @param {object} opts — { matchId, stakeKas, opponentJoined, creatorAddress } + * @param {object} opts , { matchId, stakeKas, opponentJoined, creatorAddress } */ function mount(containerId, opts) { injectStyles(); @@ -181,7 +181,7 @@ if (btn) { btn.textContent = '✓ Cancelled'; btn.style.opacity = '0.5'; } window.dispatchEvent(new CustomEvent('htp:match:cancelled', { detail: { matchId, txId } })); } else { - setStatus(matchId, 'err', 'Refund failed — check console'); + setStatus(matchId, 'err', 'Refund failed , check console'); if (btn) { btn.classList.remove('loading'); btn.disabled = false; btn.textContent = '✕ Cancel Game'; } } } catch(e) { diff --git a/public/htp-checkers-multijump.js b/public/htp-checkers-multijump.js index 416331da..22dc1196 100644 --- a/public/htp-checkers-multijump.js +++ b/public/htp-checkers-multijump.js @@ -1,5 +1,5 @@ /** - * htp-checkers-multijump.js — HTP Checkers v2 + * htp-checkers-multijump.js , HTP Checkers v2 * * Renders 8x8 checkers board into #checkers-board with full multi-jump chains, * mandatory capture enforcement, king promotion, and Firebase sync. @@ -23,8 +23,9 @@ const LOG = (...a) => console.log('[HTP Checkers v2]', ...a); const SIZE = 8; - const DARK_SQ = '#1a2235'; - const LIGHT_SQ = '#0f1623'; + // Premium checkers palette: deep walnut dark, warm cream light. High contrast for skill play. + const DARK_SQ = '#5d4034'; + const LIGHT_SQ = '#f3e2c4'; const TEAL = 'var(--primary)'; const RED = 'var(--red)'; diff --git a/public/htp-chess-dnd.js b/public/htp-chess-dnd.js index b6480aaa..8f45482f 100644 --- a/public/htp-chess-dnd.js +++ b/public/htp-chess-dnd.js @@ -1,5 +1,5 @@ /** - * htp-chess-dnd.js — HTP Chess Drag & Drop v2 + * htp-chess-dnd.js , HTP Chess Drag & Drop v2 * * Clean drag and drop for chess pieces. Handles both mouse and touch events. * Works with the #chess-board container rendered by htp-chess-ui.js. diff --git a/public/htp-chess-sync.js b/public/htp-chess-sync.js index 0b2ccbc5..f47e8a2e 100644 --- a/public/htp-chess-sync.js +++ b/public/htp-chess-sync.js @@ -1,5 +1,5 @@ // ============================================================= -// htp-chess-sync.js — HTP Chess Sync Patch v1 +// htp-chess-sync.js , HTP Chess Sync Patch v1 // Fixes: board orientation, synchronized Firebase clock, // color persistence, payout trigger // Drop into project root. Add ONE line to index.html: @@ -9,7 +9,10 @@ (function () { 'use strict'; - // ── helpers ────────────────────────────────────────────── + if (window.__htpChessSyncInstalled) return; + window.__htpChessSyncInstalled = true; + + // helpers function db() { return (typeof firebase !== 'undefined') ? firebase.database() : null; } function fmt(ms) { if (ms < 0) ms = 0; @@ -35,7 +38,7 @@ var oppColor = myColor === 'white' ? 'black' : 'white'; var ref = d.ref('relay/' + matchId + '/colors'); ref.transaction(function (cur) { - if (cur && cur.assigned) return; // already set — abort + if (cur && cur.assigned) return; // already set , abort var obj = { assigned: true }; obj[myColor] = myPlayerId(); obj[oppColor] = 'TBD'; @@ -51,11 +54,11 @@ var d = db(); if (!d) { cb('black'); return; } var ref = d.ref('relay/' + matchId + '/colors'); ref.transaction(function (cur) { - if (!cur || !cur.assigned) return; // creator hasn't written yet — abort + if (!cur || !cur.assigned) return; // creator hasn't written yet , abort var color; if (cur.white === 'TBD') { cur.white = myPlayerId(); color = 'white'; } else if (cur.black === 'TBD') { cur.black = myPlayerId(); color = 'black'; } - else return; // both slots filled — abort + else return; // both slots filled , abort cur._joinerColor = color; // piggyback so we can read it after transaction return cur; }, function (err, committed, snap) { @@ -90,7 +93,7 @@ if (inner) boards.push(inner); if (!boards.length) { - // Board not in DOM yet — retry after render + // Board not in DOM yet , retry after render setTimeout(function () { applyOrientation(color); }, 300); return; } @@ -147,7 +150,7 @@ if (initialMs) { this.whiteMs = initialMs; this.blackMs = initialMs; } this._subscribe(); this._startTick(); - console.log('[HTP Sync] Clock started for', matchId, '— initial', initialMs / 60000 | 0, 'min'); + console.log('[HTP Sync] Clock started for', matchId, ', initial', initialMs / 60000 | 0, 'min'); }, _subscribe: function () { @@ -300,7 +303,7 @@ var timeSec = match ? parseFloat(match.timeControl) || 600 : 600; syncClock.start(matchId, color, timeSec * 1000); } else { - // Joiner path — read color from Firebase + // Joiner path , read color from Firebase assignColorsAsJoiner(matchId, function (color) { applyOrientation(color); setTimeout(function () { applyOrientation(color); }, 600); @@ -340,7 +343,7 @@ console.log('[HTP Sync] joinLobbyMatch patched'); } - // ── 6. PAYOUT — wire handleMatchGameOver to settlement ──── + // ── 6. PAYOUT , wire handleMatchGameOver to settlement ──── // The existing handleMatchGameOver in htp-events.js already calls // sendFromEscrow(matchId, walletAddress) for the winner. // The issue is it uses a local-only color check. We override it to @@ -358,14 +361,14 @@ // Convert winnerColor from the engine ('w'/'b' or 'white'/'black') to our format var winnerStr = (winnerColor === 'w' || winnerColor === 1 || winnerColor === 'white') ? 'white' : 'black'; - // Write result to Firebase idempotently (first write wins — prevents double payout) + // Write result to Firebase idempotently (first write wins , prevents double payout) var match = (typeof matchLobby !== 'undefined') ? matchLobby.activeMatch : null; var matchId = match ? match.id : window._htpCurrentMatchId; if (matchId && db()) { var resultRef = db().ref('relay/' + matchId + '/result'); var snap = await resultRef.once('value'); if (snap.exists()) { - console.log('[HTP Sync] Result already recorded — skipping duplicate settlement'); + console.log('[HTP Sync] Result already recorded , skipping duplicate settlement'); return; } await resultRef.set({ winner: winnerStr, reason: reason, ts: Date.now() }); @@ -375,7 +378,7 @@ var iWon = (winnerStr === myColor); if (!iWon && reason !== 'draw' && reason !== 'stalemate') { // Call original for UI (game over overlay) but skip payout - console.log('[HTP Sync] I lost — no payout from my client'); + console.log('[HTP Sync] I lost , no payout from my client'); if (orig) orig.call(this, reason, winnerColor); return; } @@ -384,7 +387,7 @@ if (orig) return orig.call(this, reason, winnerColor); }; window.handleMatchGameOver._syncPatched = true; - console.log('[HTP Sync] handleMatchGameOver patched — idempotent payout'); + console.log('[HTP Sync] handleMatchGameOver patched , idempotent payout'); } // ── 7. INSTALL ─────────────────────────────────────────── diff --git a/public/htp-chess-ui.js b/public/htp-chess-ui.js index 31da8cb7..40e1ea04 100644 --- a/public/htp-chess-ui.js +++ b/public/htp-chess-ui.js @@ -1,5 +1,5 @@ /** - * htp-chess-ui.js — HTP Chess Board Renderer v4 + * htp-chess-ui.js , HTP Chess Board Renderer v4 * * Renders a clean 8x8 chess board into #chess-board using the new DOM structure. * Uses Lichess SVG pieces from https://lichess1.org/assets/piece/cburnett/. @@ -21,7 +21,7 @@ const LOG = (...a) => console.log('[HTP Chess UI v4]', ...a); // ───────────────────────────────────────────────────────────────────────── - // PIECE SVG URLS — Lichess cburnett set + // PIECE SVG URLS , Lichess cburnett set // color: "w" or "b", piece: K/Q/R/B/N/P (uppercase) // ───────────────────────────────────────────────────────────────────────── diff --git a/public/htp-covenant-escrow-v2.js b/public/htp-covenant-escrow-v2.js index a989d14c..4499b46a 100644 --- a/public/htp-covenant-escrow-v2.js +++ b/public/htp-covenant-escrow-v2.js @@ -1,5 +1,5 @@ /** - * htp-covenant-escrow-v2.js — High Table Protocol — v3.0 + * htp-covenant-escrow-v2.js , High Table Protocol , v3.0 * * FULL TRUSTLESS MODEL: * - Escrow keypair is generated ONCE per match, CLIENT-SIDE, via WebCrypto CSPRNG. @@ -7,7 +7,7 @@ * - Both players deposit to the same P2SH address derived from the redeem script. * - Settlement is triggered by the oracle attestation written to Firebase. * - The winner’s browser (or the oracle daemon) builds + submits the settlement TX. - * - Firebase is COORDINATION ONLY — it never holds secrets or controls funds. + * - Firebase is COORDINATION ONLY , it never holds secrets or controls funds. * * P2SH REDEEM SCRIPT (KIP-10, TN12 + mainnet compatible): * @@ -166,7 +166,7 @@ return SDK.addressFromScriptPublicKey(spk, networkId).toString(); } - throw new Error('[HTP Escrow] kaspa-wasm too old — upgrade to >= 0.15 for P2SH support'); + throw new Error('[HTP Escrow] kaspa-wasm too old , upgrade to >= 0.15 for P2SH support'); } /* ══ Escrow keypair ════════════════════════════════════════════════════════════ */ @@ -184,7 +184,7 @@ /* ══ Fee / treasury helpers ══════════════════════════════════════════════════ */ function getFee() { if (W.HTPFee) return W.HTPFee; - console.error('[HTP Escrow] HTPFee not loaded — using 2% emergency fallback'); + console.error('[HTP Escrow] HTPFee not loaded , using 2% emergency fallback'); var isMain = (W.HTP_NETWORK === 'mainnet'); return { treasuryAddress: function () { @@ -305,7 +305,7 @@ * Called by the match creator on the browser. * * @param {string} matchId - * @param {string} creatorAddress — Kaspa address of the match creator + * @param {string} creatorAddress , Kaspa address of the match creator * @returns {object} escrow entry (address, redeemScript, pubkeys, etc.) */ async function generateMatchEscrow(matchId, creatorAddress) { @@ -322,9 +322,9 @@ // 2. Creator pubkey from address var creatorPubHex = getPubkeyHexFromAddr(creatorAddress); if (!creatorPubHex) { - // Cannot derive pubkey — use escrow pub as placeholder (cancel path disabled) + // Cannot derive pubkey , use escrow pub as placeholder (cancel path disabled) creatorPubHex = escrowPubHex; - console.warn('[HTP Escrow] Could not derive creator pubkey from address — cancel path disabled'); + console.warn('[HTP Escrow] Could not derive creator pubkey from address , cancel path disabled'); } // 3. Treasury fee SPK @@ -334,7 +334,7 @@ var redeemScript = buildRedeemScript(escrowPubHex, creatorPubHex, feeSpkHex); // 5. Derive P2PK address (standard keypair escrow) - // P2SH covenants (KIP-10) are future — use P2PK for reliable TN12 + mainnet compat + // P2SH covenants (KIP-10) are future , use P2PK for reliable TN12 + mainnet compat var escrowAddress = escrowPriv.toPublicKey().toAddress(networkId).toString(); // 6. Build + store escrow entry @@ -385,9 +385,9 @@ * Build a raw settlement transaction from the escrow UTXOs. * Correctly injects scriptSig with redeemScript push. * - * @param {object} escrow — escrow entry from getEscrow() - * @param {Array} outputs — [{address, amount: BigInt}] - * @param {string} branch — 'settle' | 'cancel' + * @param {object} escrow , escrow entry from getEscrow() + * @param {Array} outputs , [{address, amount: BigInt}] + * @param {string} branch , 'settle' | 'cancel' */ async function buildSettleTx(escrow, outputs, branch) { var SDK = W.kaspaSDK; @@ -396,7 +396,7 @@ var utxos = await fetchUtxos(escrow.address); if (!utxos || !utxos.length) throw new Error('[HTP Escrow] Escrow address has no UTXOs: ' + escrow.address); - // Normalise UTXO entries across REST and RPC formats (P2PK — version 0) + // Normalise UTXO entries across REST and RPC formats (P2PK , version 0) var totalSompi = 0n; var entries = utxos.map(function (u) { var e = u.utxoEntry || u.entry || u; @@ -526,10 +526,10 @@ * - Draw: each player gets (pool/2 - networkFee/2) * * @param {string} matchId - * @param {string} winnerAddr — null if draw + * @param {string} winnerAddr , null if draw * @param {boolean} isDraw - * @param {string} playerAAddr — required for draw - * @param {string} playerBAddr — required for draw + * @param {string} playerAAddr , required for draw + * @param {string} playerBAddr , required for draw */ W.settleMatchPayout = async function (matchId, winnerAddr, isDraw, playerAAddr, playerBAddr) { var esc = getEscrow(matchId); @@ -689,7 +689,7 @@ OPC: OPC, }; - console.log('%c[HTP Covenant Escrow v3] Loaded — Full trustless P2SH + KIP-10', 'color:#49e8c2;font-weight:bold'); + console.log('%c[HTP Covenant Escrow v3] Loaded , Full trustless P2SH + KIP-10', 'color:#49e8c2;font-weight:bold'); console.log(' KIP-10: OP_TXOUTPUTCOUNT(0xb4) OP_TXOUTPUTSPK(0xc3)'); console.log(' ScriptSig: '); console.log(' Net:', W.HTP_NETWORK || '(pending init)'); diff --git a/public/htp-event-creator.js b/public/htp-event-creator.js index b87d1958..b4afa63c 100644 --- a/public/htp-event-creator.js +++ b/public/htp-event-creator.js @@ -1,5 +1,5 @@ // ============================================================================= -// htp-event-creator.js — Prediction Market Event Creation +// htp-event-creator.js , Prediction Market Event Creation // Validates form, constructs escrow TX, writes to Firebase /markets/{marketId} // ============================================================================= (function(W) { diff --git a/public/htp-events-v3.js b/public/htp-events-v3.js index 9de1da38..01f5ddac 100644 --- a/public/htp-events-v3.js +++ b/public/htp-events-v3.js @@ -1,5 +1,5 @@ // ============================================================================= -// htp-events-v3.js — Prediction Market Listing & Display +// htp-events-v3.js , Prediction Market Listing & Display // Listens to Firebase /markets, renders event cards, handles position taking // ============================================================================= (function() { @@ -236,7 +236,7 @@ console.log('[HTP Events v3] New market detected'); }); - // Initialize — wait for Firebase to be ready + // Initialize , wait for Firebase to be ready function init() { // Guard: if Firebase app not yet initialized, wait for it if (!window.firebase || !window.firebase.apps || !window.firebase.apps.length) { diff --git a/public/htp-fee-engine.js b/public/htp-fee-engine.js index bd0c4360..912fbf3b 100644 --- a/public/htp-fee-engine.js +++ b/public/htp-fee-engine.js @@ -1,5 +1,5 @@ /** - * htp-fee-engine.js v2.1 — HTP Protocol Fee & Maximizer Engine + * htp-fee-engine.js v2.1 , HTP Protocol Fee & Maximizer Engine * * FEE RULES: * Skill games (1v1, winner-takes-all): @@ -13,7 +13,7 @@ * WIN: payout as if 100% was in pool × odds, then 2% fee on winnings * LOSE: can claim 50% hedge back, but pays 30% of hedge as protocol fee * → net hedge recovery = 50% × 0.70 = 35% of original bet - * - Maximizers are parasitic (lower odds for everyone) — event creators can + * - Maximizers are parasitic (lower odds for everyone) , event creators can * limit them via maxMaximizerPct + expectedVolume * * TREASURY: @@ -44,7 +44,7 @@ // ── Network helper ───────────────────────────────────────────────────── // Reads window.HTP_NETWORK set by htp-init.js. - // Default: 'tn12' (matches htp-init.js default — NOT mainnet). + // Default: 'tn12' (matches htp-init.js default , NOT mainnet). function networkKey() { return W.HTP_NETWORK || 'tn12'; } @@ -64,7 +64,7 @@ /** * Calculate skill game settlement amounts. - * @param {number} stakeKas — stake per player (each player puts in this amount) + * @param {number} stakeKas , stake per player (each player puts in this amount) * @returns {{ totalPool, protocolFee, winnerPayout, protocolFeeSompi, * winnerPayoutSompi, treasuryAddress, feeBreakdown }} */ @@ -86,16 +86,16 @@ /** * Can the skill game creator cancel? - * @param {object} game — { status, joinerId, opponentJoined } + * @param {object} game , { status, joinerId, opponentJoined } */ function skillGameCanCreatorCancel(game) { var started = game.opponentJoined || (game.joinerId && game.joinerId !== '') || (game.status && game.status !== 'waiting' && game.status !== 'open'); if (started) { - return { allowed: false, reason: 'Game already started — leaving counts as forfeit' }; + return { allowed: false, reason: 'Game already started , leaving counts as forfeit' }; } - return { allowed: true, reason: 'No opponent yet — full refund available' }; + return { allowed: true, reason: 'No opponent yet , full refund available' }; } // ══════════════════════════════════════════════════════════════════════ @@ -165,7 +165,7 @@ used: curMaxi, available: avail, newUsed: curMaxi + contrib, - reason: 'OK — ' + avail.toFixed(2) + ' KAS maximizer capacity remaining', + reason: 'OK , ' + avail.toFixed(2) + ' KAS maximizer capacity remaining', }; } @@ -221,14 +221,14 @@ skillGameSettle: skillGameSettle, skillGameCanCreatorCancel: skillGameCanCreatorCancel, - // Events — maximizer + // Events , maximizer maximizerSplit: maximizerSplit, maximizerWinSettle: maximizerWinSettle, maximizerLoseSettle: maximizerLoseSettle, checkMaximizerAllowance: checkMaximizerAllowance, maximizerCapRemaining: maximizerCapRemaining, - // Events — standard + // Events , standard standardEventWinSettle: standardEventWinSettle, // Generic diff --git a/public/htp-games-sync.js b/public/htp-games-sync.js index e6bfc49e..2d150996 100644 --- a/public/htp-games-sync.js +++ b/public/htp-games-sync.js @@ -1,5 +1,5 @@ // ============================================================= -// htp-games-sync.js — HTP All-Games Sync Patch v1 +// htp-games-sync.js , HTP All-Games Sync Patch v1 // Fixes Connect4 + Checkers: // • Firebase-synced side assignment (creator=1, joiner=2/3) // • Firebase-synced clocks (replaces local interval) @@ -13,7 +13,10 @@ (function () { 'use strict'; - // ── helpers ────────────────────────────────────────────── + if (window.__htpGamesSyncInstalled) return; + window.__htpGamesSyncInstalled = true; + + // helpers function fdb() { return (typeof firebase !== 'undefined' && firebase.database) ? firebase.database() : null; @@ -190,7 +193,7 @@ var patchedOpts = Object.assign({}, opts, { side: side }); orig.call(this, patchedOpts); - // Kill the local timer C4 just started — we replace it + // Kill the local timer C4 just started , we replace it if (typeof C4 !== 'undefined' && C4.timerInterval) { clearInterval(C4.timerInterval); C4.timerInterval = null; @@ -220,7 +223,7 @@ window.dropC4._clockPatched = true; } - console.log('[HTP Games Sync] Connect4 started — side:', side); + console.log('[HTP Games Sync] Connect4 started , side:', side); } if (isCreator) { @@ -287,7 +290,7 @@ window.ckClick._clockPatched = true; } - console.log('[HTP Games Sync] Checkers started — side:', side); + console.log('[HTP Games Sync] Checkers started , side:', side); } if (isCreator) { @@ -305,7 +308,7 @@ console.log('[HTP Games Sync] startCheckersGame patched'); } - // ── 5. PAYOUT — idempotent for all games ───────────────── + // ── 5. PAYOUT , idempotent for all games ───────────────── // The existing handleMatchGameOver in htp-events.js uses a seed-based // local color check. We override it with a Firebase idempotent lock so // only the WINNER's browser fires sendFromEscrow, for ALL games. @@ -338,7 +341,7 @@ } else if (game === 'ck' || game === 'checkers') { iWon = (winnerSideOrColor === window._htpMySide); } else { - // Chess — handled by htp-chess-sync.js, but fall through + // Chess , handled by htp-chess-sync.js, but fall through var myChessColor = window._htpMyColor || 'white'; var winStr = (winnerSideOrColor === 'w' || winnerSideOrColor === 1 || winnerSideOrColor === 'white') ? 'white' : 'black'; iWon = (winStr === myChessColor); @@ -352,7 +355,7 @@ var resultRef = fdb().ref('relay/' + matchId + '/result'); var snap = await resultRef.once('value'); if (snap.exists()) { - console.log('[HTP Games Sync] Result already locked — no duplicate payout'); + console.log('[HTP Games Sync] Result already locked , no duplicate payout'); // Still show game over overlay via original return orig.call(this, reason, winnerSideOrColor); } @@ -369,11 +372,11 @@ // Only winner fires payout if (!iWon && reason !== 'draw' && reason !== 'stalemate') { - console.log('[HTP Games Sync] I lost (' + game + ') — skipping payout'); + console.log('[HTP Games Sync] I lost (' + game + ') , skipping payout'); return orig.call(this, reason, winnerSideOrColor); } - console.log('[HTP Games Sync] I won (' + game + ') — firing payout'); + console.log('[HTP Games Sync] I won (' + game + ') , firing payout'); return orig.call(this, reason, winnerSideOrColor); }; diff --git a/public/htp-init.js b/public/htp-init.js index 7b532cda..b694a990 100644 --- a/public/htp-init.js +++ b/public/htp-init.js @@ -1,9 +1,9 @@ /** - * htp-init.js — High Table Protocol — v3.0 + * htp-init.js , High Table Protocol , v3.0 * * RESPONSIBILITIES: * 1. Detect TN12 vs mainnet → set window.HTP_NETWORK + window.activeNet (ONE place, done first) - * 2. WASM boot gate — unlock all .wasm-gate elements + fire _onWasmReady() callbacks + * 2. WASM boot gate , unlock all .wasm-gate elements + fire _onWasmReady() callbacks * 3. Identity / seat resolution * 4. Wallet auto-connect (KasWare → KaspaWallet → localStorage) * 5. Board CSS injection @@ -66,7 +66,7 @@ var key = (param || stored || 'tn12').toLowerCase(); if (!NETWORK_MAP[key]) key = 'tn12'; var net = NETWORK_MAP[key]; - // Expose globally — every other module reads these + // Expose globally , every other module reads these window.HTP_NETWORK = key; // 'tn12' | 'mainnet' window.activeNet = net; // full config object window.HTP_RESOLVER_ALIAS= net.resolverAlias; // 'tn12' or 'mainnet' for Kaspa Resolver @@ -79,7 +79,7 @@ return net; } - // Run immediately — synchronous + // Run immediately , synchronous detectNetwork(); /* ═══════════════════════════════════════════════════════════════════════════ @@ -124,7 +124,7 @@ } var oldBanner = document.getElementById('htp-wasm-warning'); if (oldBanner) oldBanner.remove(); - console.log('[HTP Init] WASM ready — gates unlocked ✓'); + console.log('[HTP Init] WASM ready , gates unlocked ✓'); _wasmReadyCallbacks.forEach(function (cb) { try { cb(); } catch (e) { console.warn('[HTP Init] wasmReady callback error', e); } }); @@ -212,7 +212,7 @@ // Primary timeout: 30 seconds var _wasmTimeoutHandle = setTimeout(function () { if (_wasmReadyFired) return; // Already loaded - console.warn('[HTP Init] Primary WASM timeout at 30s — attempting recovery'); + console.warn('[HTP Init] Primary WASM timeout at 30s , attempting recovery'); _retryWasmLoad(); }, 30000); diff --git a/public/htp-logo-data.js b/public/htp-logo-data.js index 157bdc56..2a337601 100644 --- a/public/htp-logo-data.js +++ b/public/htp-logo-data.js @@ -1,4 +1,4 @@ -// HTP Logo — auto-generated from old version base64 JPEG +// HTP Logo , auto-generated from old version base64 JPEG (function() { var logo = document.getElementById("htp-logo-img"); if (logo) logo.src = "data:image/jpeg;base64,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"; diff --git a/public/htp-match-deadline.js b/public/htp-match-deadline.js index 04503054..42b35d65 100644 --- a/public/htp-match-deadline.js +++ b/public/htp-match-deadline.js @@ -1,10 +1,10 @@ /** - * htp-match-deadline.js — DAA-score based match timing (replaces wall-clock) + * htp-match-deadline.js , DAA-score based match timing (replaces wall-clock) * * Why DAA score instead of Date.now(): * - DAA score increments ~10x/sec on Kaspa mainnet - * - It is chain-verified — no client can fake it - * - A DAA delta is fully reproducible by any node — safe for covenant expiry + * - It is chain-verified , no client can fake it + * - A DAA delta is fully reproducible by any node , safe for covenant expiry * - Disconnected clients can't cheat time by pausing system clock * * API: @@ -42,9 +42,9 @@ * Create a deadline for a match. * @param {string} matchId * @param {object} opts - * opts.seconds — duration from now in seconds (mutually exclusive with opts.daaScore) - * opts.daaScore — absolute target DAA score (use for covenant-anchored deadlines) - * opts.label — human label (e.g. 'move', 'match', 'stake') + * opts.seconds , duration from now in seconds (mutually exclusive with opts.daaScore) + * opts.daaScore , absolute target DAA score (use for covenant-anchored deadlines) + * opts.label , human label (e.g. 'move', 'match', 'stake') */ function create(matchId, opts = {}) { const currentDaa = nowDaa(); @@ -153,9 +153,9 @@ })); } }); - console.log(`[HTPDeadline] Restored ${data.matchId} — ${daaToSeconds(deadlineDaa - currentDaa).toFixed(1)}s remaining`); + console.log(`[HTPDeadline] Restored ${data.matchId} , ${daaToSeconds(deadlineDaa - currentDaa).toFixed(1)}s remaining`); } else { - console.warn(`[HTPDeadline] Restored ${data.matchId} — already expired`); + console.warn(`[HTPDeadline] Restored ${data.matchId} , already expired`); } } diff --git a/public/htp-maximizer-ui.js b/public/htp-maximizer-ui.js index a7f22b26..925fe08d 100644 --- a/public/htp-maximizer-ui.js +++ b/public/htp-maximizer-ui.js @@ -1,5 +1,5 @@ /** - * htp-maximizer-ui.js — Maximizer Bet UI Component + * htp-maximizer-ui.js , Maximizer Bet UI Component * Renders live 50/50 split preview + cap checker * Depends on: htp-fee-engine.js (HTPFee) * No Firebase required. @@ -222,7 +222,7 @@ '; }).join(''); } @@ -414,7 +414,7 @@ async function showMarketDetail(marketId) { '' + m.category + '' + '' + (modeLabels[m.marketMode] || 'Open') + '' + 'Created ' + timeAgo(m.createdAt) + '' + - (m.customScript ? '⚡ CUSTOM SCRIPT' : '') + + (m.customScript ? 'CUSTOM SCRIPT' : '') + '
' + '
' + @@ -445,7 +445,7 @@ async function showMarketDetail(marketId) { m.positions.map(p => { const sideLabel = p.side === 1 ? m.outcomeA : m.outcomeB; const sideColor = p.side === 1 ? 'var(--green)' : 'var(--red)'; - const riskLabel = p.riskMode === 1 ? '⚡MAX' : 'SPOT'; + const riskLabel = p.riskMode === 1 ? 'MAX' : 'SPOT'; return '
' + '' + sideLabel + ' · ' + formatKas(p.amountSompi) + ' KAS · ' + riskLabel + ' · ' + shortAddr(p.userAddr) + '' + @@ -470,7 +470,7 @@ async function showMarketDetail(marketId) { function renderResolutionCard(m) { const winSide = m.outcome === 1 ? m.outcomeA : m.outcomeB; return '
' + - '

✅ Resolved

' + + '

Resolved

' + '

Winner: ' + esc(winSide) + '

' + (m.resolutionTxId ? '

TX: ' + m.resolutionTxId.slice(0, 16) + '...

' : '') + '
'; @@ -487,8 +487,8 @@ function renderPositionPanel(m) { (showRisk ? '' + '
' + - '' + - '' + + '' + + '' + '
' : '') + '
' + '' + @@ -614,13 +614,13 @@ function renderGames(games) { const playerB = g.playerB ? shortAddr(g.playerB) : 'Waiting...'; return '
' + '
' + - '
' + (icons[g.type] || '🎮') + '
' + + '
' + (icons[g.type] || '') + '
' + '' + g.status.toUpperCase() + '' + '
' + '
' + formatKas(g.stakeSompi) + ' KAS
' + '
' + shortAddr(g.playerA) + ' vs ' + playerB + '
' + - '
⏱ ' + (g.timeControl || '10+0') + ' · ' + g.type + '
' + - (g.status === 'finished' && g.winner ? '
🏆 ' + (g.winner === 'draw' ? 'Draw' : shortAddr(g.winner)) + '
' : '') + + '
' + (g.timeControl || '10+0') + ' · ' + g.type + '
' + + (g.status === 'finished' && g.winner ? '
' + (g.winner === 'draw' ? 'Draw' : shortAddr(g.winner)) + '
' : '') + '
'; }).join(''); } @@ -745,9 +745,9 @@ function renderWaitingRoom(el, game) { el.innerHTML = '
' + - '
' + (icons[game.type] || '🎮') + '
' + + '
' + (icons[game.type] || '') + '
' + '

Waiting for Opponent

' + - '

Game: ' + game.type + ' · Stake: ' + formatKas(game.stakeSompi) + ' KAS · ⏱ ' + game.timeControl + '

' + + '

Game: ' + game.type + ' · Stake: ' + formatKas(game.stakeSompi) + ' KAS · ' + game.timeControl + '

' + '

Created by ' + shortAddr(game.playerA) + '

' + '
' + 'Share link: ' + location.origin + '/#game/' + game.id + @@ -783,10 +783,10 @@ function renderGameBoard(el, game) { '
' + (game.status === 'playing' ? '
' + '' + - '' + + '' + '
' : '') + (game.status === 'finished' ? '
' + - (game.winner === 'draw' ? '½ Draw' : '🏆 Winner: ' + shortAddr(game.winner)) + + (game.winner === 'draw' ? '½ Draw' : 'Winner: ' + shortAddr(game.winner)) + '
' : '') + '
' + '
'; @@ -1021,14 +1021,14 @@ async function validateScript() { const el = document.getElementById('script-validation-result'); if (result.valid) { el.innerHTML = '
' + - '✅ Script valid · ' + result.analysis.size + ' bytes · ' + result.analysis.opsCount + ' ops' + - (result.analysis.hasTimeLock ? ' · ⏱ Time-lock' : '') + - (result.analysis.hasMultisig ? ' · 🔐 Multisig' : '') + - (result.warnings.length ? '
⚠️ ' + result.warnings.join('; ') + '' : '') + + 'Script valid · ' + result.analysis.size + ' bytes · ' + result.analysis.opsCount + ' ops' + + (result.analysis.hasTimeLock ? ' · Time-lock' : '') + + (result.analysis.hasMultisig ? ' · Multisig' : '') + + (result.warnings.length ? '
' + result.warnings.join('; ') + '' : '') + '
'; } else { el.innerHTML = '
' + - '❌ Invalid: ' + result.errors.join('; ') + + 'Invalid: ' + result.errors.join('; ') + '
'; } } catch (e) { diff --git a/public/blackjack-ui.js b/public/blackjack-ui.js index 1580aa00..87dc777c 100644 --- a/public/blackjack-ui.js +++ b/public/blackjack-ui.js @@ -106,7 +106,7 @@ class BlackjackUI { if (myResult) { const net = myResult.netChips || 0; html += `
`; - html += net > 0 ? `🏆 +${(net/1e8).toFixed(2)} KAS` : net < 0 ? `❌ ${(net/1e8).toFixed(2)} KAS` : `🤝 Push · Bet Returned`; + html += net > 0 ? ` +${(net/1e8).toFixed(2)} KAS` : net < 0 ? ` ${(net/1e8).toFixed(2)} KAS` : `Push · Bet Returned`; html += '
'; html += `
`; } @@ -145,7 +145,7 @@ class BlackjackUI { } // , Shoe remaining - html += `
🂠 ${s.shoeRemaining||'?'} cards remaining
`; + html += `
${s.shoeRemaining||'?'} cards remaining
`; html += '
'; // bj-table return html; diff --git a/public/connect4-ui.js b/public/connect4-ui.js index 9d78e9a9..293f0ae5 100644 --- a/public/connect4-ui.js +++ b/public/connect4-ui.js @@ -50,7 +50,7 @@ class Connect4UI { const canDrop = this.board[0][c] === null && !this.winner; html += '
' + - (isMyTurn && myTurn === 'red' ? '🔴' : isMyTurn && myTurn === 'yellow' ? '🟡' : '⬇') + '
'; + (isMyTurn && myTurn === 'red' ? '' : isMyTurn && myTurn === 'yellow' ? '' : '') + '
'; } html += '
'; @@ -61,7 +61,7 @@ class Connect4UI { ' · ' + this.turn + '' + '
'; } else { - html += '
🏆 ' + + html += '
' + this.winner + ' wins!
'; } diff --git a/public/htp-autopayout-engine.js b/public/htp-autopayout-engine.js index e436e12d..09e30f0b 100644 --- a/public/htp-autopayout-engine.js +++ b/public/htp-autopayout-engine.js @@ -87,7 +87,7 @@ ERR('COVENANT INTEGRITY FAIL , redeemScript fee SPK mismatch!'); ERR('Expected SPK:', expectedSpk); ERR('RedeemScript:', escrow.redeemScript); - if (W.showToast) W.showToast('⚠️ Covenant integrity check failed , settlement blocked', 'error'); + if (W.showToast) W.showToast('Covenant integrity check failed , settlement blocked', 'error'); return false; } LOG('Covenant integrity ✓ , fee SPK verified in redeemScript'); @@ -209,7 +209,7 @@ const overlayEl = document.getElementById('htp-gameover-overlay'); const statusEl = overlayEl && overlayEl.querySelector('.htp-go-settle-status'); - if (statusEl) { statusEl.textContent = '⏳ Settling on-chain…'; statusEl.style.color = '#f59e0b'; } + if (statusEl) { statusEl.textContent = 'Settling on-chain…'; statusEl.style.color = '#f59e0b'; } try { let txId; @@ -228,7 +228,7 @@ } } catch(e) { ERR('Auto-payout failed:', e.message); - if (statusEl) { statusEl.textContent = '⚠️ Settlement failed: ' + e.message; statusEl.style.color = '#ef4444'; } + if (statusEl) { statusEl.textContent = 'Settlement failed: ' + e.message; statusEl.style.color = '#ef4444'; } } } @@ -344,7 +344,7 @@ }; if (isDraw) { - icon='🤝'; titleCls='draw'; titleText='Draw'; + icon=''; titleCls='draw'; titleText='Draw'; payoutAmount = stakeKas.toFixed(2)+' KAS'; payoutCls='draw'; reasonText = reason === 'stalemate' ? 'Stalemate' : 'Draw by ' + reason; rows=[ @@ -352,7 +352,7 @@ {lbl:'Protocol fee',val:'None (draw)',cls:''}, ]; } else if (iWon) { - icon='🏆'; titleCls='win'; titleText='You Won!'; + icon=''; titleCls='win'; titleText='You Won!'; payoutAmount = '+'+calc.winnerPayout.toFixed(2)+' KAS'; payoutCls='win'; reasonText = reason === 'checkmate' ? 'Checkmate' : reason === 'timeout' ? 'Timeout' : reason === 'resign' ? 'Opponent resigned' : 'Victory'; rows=[ @@ -362,7 +362,7 @@ {lbl:'Treasury', val:(W.HTPFee?W.HTPFee.treasuryAddress():'').slice(0,16)+'…',cls:''}, ]; } else { - icon='💀'; titleCls='lose'; titleText='You Lost'; + icon=''; titleCls='lose'; titleText='You Lost'; payoutAmount='0 KAS'; payoutCls='lose'; reasonText = reason === 'checkmate' ? 'Checkmate' : reason === 'timeout' ? 'Timeout' : reason === 'resign' ? 'You resigned' : 'Defeat'; rows=[ @@ -386,7 +386,7 @@
${payoutAmount}
${rowsHtml}
-
${(iWon||isDraw)?'⏳ Settling on-chain…':'⏳ Waiting for settlement…'}
+
${(iWon||isDraw)?'Settling on-chain…':'Waiting for settlement…'}
@@ -402,7 +402,7 @@ const explorer = (W.HTP_NETWORK === 'mainnet') ? 'https://explorer.kaspa.org/txs/' : 'https://explorer-tn12.kaspa.org/txs/'; - if (statusEl) { statusEl.textContent = '✅ Settled on-chain'; statusEl.style.color = '#49e8c2'; } + if (statusEl) { statusEl.textContent = 'Settled on-chain'; statusEl.style.color = '#49e8c2'; } if (txEl) txEl.innerHTML = `TX: ${String(txId).slice(0,20)}…`; } @@ -412,7 +412,7 @@ const PIECES = { wK:'♔',wQ:'♕',wR:'♖',wB:'♗',wN:'♘',wP:'♙', - bK:'♚',bQ:'♛',bR:'♜',bB:'♝',bN:'♞',bP:'♟' + bK:'♚',bQ:'♛',bR:'♜',bB:'♝',bN:'♞',bP:'' }; function injectChessStyles() { @@ -521,8 +521,8 @@ const timeSec = opts.timeSec || 300; const myName = (opts.myColor === 'w' ? opts.creatorName : opts.joinerName) || 'You'; const oppName = (opts.myColor === 'w' ? opts.joinerName : opts.creatorName) || 'Opponent'; - const myLabel = opts.myColor === 'w' ? 'White ♙' : 'Black ♟'; - const oppLabel = opts.myColor === 'w' ? 'Black ♟' : 'White ♙'; + const myLabel = opts.myColor === 'w' ? 'White ♙' : 'Black '; + const oppLabel = opts.myColor === 'w' ? 'Black ' : 'White ♙'; const topLabel = isFlipped ? myLabel : oppLabel; const botLabel = isFlipped ? oppLabel : myLabel; const topName = isFlipped ? myName : oppName; @@ -533,13 +533,13 @@ wrap.innerHTML = `
-
${isFlipped ? '♙' : '♟'}
+
${isFlipped ? '♙' : ''}
${topName} (${topLabel})
${fmtSec(timeSec)}
-
${isFlipped ? '♟' : '♙'}
+
${isFlipped ? '' : '♙'}
${botName} (${botLabel})
${fmtSec(timeSec)}
@@ -642,9 +642,9 @@ const game = W.chessGame; const ui = W.chessUI || {}; if (!el || !game) return; - if (game.isCheckmate()) { el.textContent='♟ Checkmate!'; el.className='htp-chess-status-txt your-turn'; return; } - if (game.isCheck()) { el.textContent='⚠️ Check!'; el.className='htp-chess-status-txt'; return; } - if (game.isDraw() || game.isStalemate()) { el.textContent='🤝 Draw'; el.className='htp-chess-status-txt'; return; } + if (game.isCheckmate()) { el.textContent='Checkmate!'; el.className='htp-chess-status-txt your-turn'; return; } + if (game.isCheck()) { el.textContent='Check!'; el.className='htp-chess-status-txt'; return; } + if (game.isDraw() || game.isStalemate()) { el.textContent='Draw'; el.className='htp-chess-status-txt'; return; } const myTurn = game.turn() === ui.playerColor; el.textContent = myTurn ? '● Your turn' : '○ Opponent\'s turn'; el.className = 'htp-chess-status-txt' + (myTurn ? ' your-turn' : ''); diff --git a/public/htp-buttons-v2.css b/public/htp-buttons-v2.css new file mode 100644 index 00000000..7d8d8d78 --- /dev/null +++ b/public/htp-buttons-v2.css @@ -0,0 +1,366 @@ +/* + * htp-buttons-v2.css, High Table Protocol cypherpunk button system + * Loaded after style.css, htp-skill-v3.css, and the inline +
@@ -5147,7 +5148,7 @@

Skill Games

-

⚔ Create a Challenge

+

Create a Challenge

On-Chain Escrow @@ -5159,11 +5160,11 @@

⚔ Create a Challenge

@@ -5176,11 +5177,11 @@

⚔ Create a Challenge

Chess
' + '

' + 'High Table requires the KasWare browser extension to sign transactions on Kaspa.

' + '
' + - '⬇ Install KasWare Wallet' + + 'Install KasWare Wallet' + '

' + 'After installing, refresh this page and click Connect Wallet.

'; } From 2718a233d7a79617e59b735c7b0e19a6c0bd9ea0 Mon Sep 17 00:00:00 2001 From: Coding Agent Date: Tue, 28 Apr 2026 08:48:29 +0000 Subject: [PATCH 021/141] test: deterministic offline stress harness for skill games MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds scripts/stress-skill-games.mjs and `npm run stress:games`. The harness exercises: - Payout formula: pot=2X, 2% protocol fee, winner=1.96X (matches lib/fees.js calculateGamePayout for both win and draw paths). - Game lifecycle: create → cancel-before-join (creator recovers stake), create → join → forfeit (opponent wins), draw path. All in-memory; no real on-chain calls, no data/ pollution. - Chess: FEN parse + e4 turn flip + castling rights. - Checkers: init layout (12+12), diagonal advance, jump capture, king promotion on far row. - Connect 4: vertical / horizontal / diagonal wins, full-board draw layout. - Tic-Tac-Toe: row-win and draw detection. - Poker (lib/games/poker.js): heads-up hand with PokerEngine, fold ends hand, public-state hides opponent hole cards, hand evaluator rank ordering (royal flush > four of a kind > one pair). - Blackjack (lib/games/blackjack.js): start dealer + player hands, stand action, hand totals (21 / soft A+9+5 / bust 24), naturals. Random sources are seeded with xorshift32 inside try/finally so Math.random is not perturbed for the rest of the process. Run: `npm run stress:games` — 61 passing, exit 0. --- package.json | 3 +- scripts/stress-skill-games.mjs | 369 +++++++++++++++++++++++++++++++++ 2 files changed, 371 insertions(+), 1 deletion(-) create mode 100644 scripts/stress-skill-games.mjs diff --git a/package.json b/package.json index 879a26c8..8ac52fbf 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,8 @@ "stats": "node -e \"const db = new (require('./lib/db'))(); console.log(db.getStats())\"", "reset": "rm -rf data/*.json && echo 'Data reset.'", "attestor": "node scripts/run-attestor-node.mjs", - "attestor:once": "node scripts/run-attestor-node.mjs --once" + "attestor:once": "node scripts/run-attestor-node.mjs --once", + "stress:games": "node scripts/stress-skill-games.mjs" }, "dependencies": { "dotenv": "^16.4.7", diff --git a/scripts/stress-skill-games.mjs b/scripts/stress-skill-games.mjs new file mode 100644 index 00000000..31087408 --- /dev/null +++ b/scripts/stress-skill-games.mjs @@ -0,0 +1,369 @@ +#!/usr/bin/env node +// stress-skill-games.mjs +// +// Deterministic, offline stress test for High Table skill games. +// Exercises: lifecycle (create / join / cancel before join / start / play / +// finish / forfeit), payout formula (2X pot, 2% fee, winner = 1.96X), and +// per-game rules for chess, checkers, connect4, tic-tac-toe, poker, blackjack. +// +// No real funds, no on-chain calls, no private keys. Pure JS simulation +// using lib/fees.js, lib/games/poker.js, lib/games/blackjack.js, and +// inline reference rules for the peer-validated games. +// +// Run: node scripts/stress-skill-games.mjs +// npm run stress:games +// +// Exit code is 0 on full pass, 1 on any failure. + +import { createRequire } from 'module'; +const require = createRequire(import.meta.url); + +const { calculateGamePayout, FEE_SCHEDULE, SOMPI_PER_KAS } = require('../lib/fees.js'); +const poker = require('../lib/games/poker.js'); +const bj = require('../lib/games/blackjack.js'); + +let passed = 0; +let failed = 0; +const failures = []; + +function ok(cond, label) { + if (cond) { passed++; process.stdout.write('.'); } + else { failed++; failures.push(label); process.stdout.write('F'); } +} +function section(name) { + process.stdout.write('\n▸ ' + name + ' '); +} + +// ───────────────────────────────────────────────────────────── +// 1) Payout formula: 2X pot, 2% fee, winner = 1.96X +// ───────────────────────────────────────────────────────────── +section('Payout formula (skill spec)'); +{ + const stakes = [ + 1n * BigInt(SOMPI_PER_KAS), + 100n * BigInt(SOMPI_PER_KAS), + 1234567n, // odd amount + BigInt(Math.floor(0.5 * SOMPI_PER_KAS)), + ]; + for (const stakeBig of stakes) { + const stake = Number(stakeBig); + const pot = stake * 2; + const r = calculateGamePayout(pot, false); + // Spec: fee = 2% of pot; winner = pot - fee + const expectedFee = Math.floor(pot * 0.02); + const expectedWin = pot - expectedFee; + ok(r.protocolFeeSompi === expectedFee, `fee=2% pot for stake ${stake}`); + ok(r.winnerPayout === expectedWin, `winner=pot-fee for stake ${stake}`); + // 1.96X check (with floor tolerance of 1 sompi) + const winnerKas = r.winnerPayout / SOMPI_PER_KAS; + const expected196 = (stake * 1.96) / SOMPI_PER_KAS; + ok(Math.abs(winnerKas - expected196) <= 1 / SOMPI_PER_KAS, + `winner ≈ 1.96X for stake ${stake}`); + } + // Draw payout: each player gets (pot-fee)/2 + const pot = 200 * SOMPI_PER_KAS; + const draw = calculateGamePayout(pot, true); + ok(draw.protocolFeeSompi === Math.floor(pot * 0.02), 'draw: fee = 2% of pot'); + ok(draw.winnerPayout === Math.floor((pot - draw.protocolFeeSompi) / 2), + 'draw: each player gets (pot-fee)/2'); + ok(draw.loserPayout === draw.winnerPayout, 'draw: payouts equal'); + // Constants sanity + ok(FEE_SCHEDULE.GAME_PROTOCOL_BPS === 200, 'GAME_PROTOCOL_BPS === 200'); +} + +// ───────────────────────────────────────────────────────────── +// 2) Game lifecycle simulation (create / cancel-before-join / +// join / start / forfeit / draw) using an in-memory map only — +// does NOT touch real data/ files. +// ───────────────────────────────────────────────────────────── +section('Game lifecycle (offline simulation)'); +{ + // Mirror the shape of lib/db.js createGame/updateGame without persistence. + function makeGame({ type, playerA, stakeSompi }) { + return { + id: 'STRESS-' + Math.random().toString(36).slice(2, 8), + type, playerA, playerB: null, + stakeSompi, status: 'waiting', + winner: null, moves: [], + fen: type === 'chess' ? 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1' : null, + createdAt: Date.now(), startedAt: null, endedAt: null, + }; + } + + const stake = 5 * SOMPI_PER_KAS; + const A = 'kaspatest:player_a_addr'; + const B = 'kaspatest:player_b_addr'; + + // a) Create (waiting) + const g = makeGame({ type: 'chess', playerA: A, stakeSompi: stake }); + ok(g.status === 'waiting', 'created game starts as waiting'); + ok(g.playerB === null, 'no opponent yet'); + ok(g.fen?.includes('RNBQKBNR'), 'chess FEN initialised'); + + // b) Cancel before opponent joins → status cancelled, stake recoverable + Object.assign(g, { status: 'cancelled', endedAt: Date.now() }); + ok(g.status === 'cancelled', 'creator can cancel before join'); + + // c) Join → start → forfeit (B wins) + const g2 = makeGame({ type: 'connect4', playerA: A, stakeSompi: stake }); + Object.assign(g2, { playerB: B, status: 'playing', startedAt: Date.now() }); + ok(g2.status === 'playing', 'join transitions to playing'); + Object.assign(g2, { winner: B, status: 'finished', endedAt: Date.now() }); + ok(g2.winner === B && g2.status === 'finished', 'forfeit: opponent recorded as winner'); + + // d) Draw path + const g3 = makeGame({ type: 'tictactoe', playerA: A, stakeSompi: stake }); + Object.assign(g3, { playerB: B, status: 'playing', startedAt: Date.now() }); + Object.assign(g3, { winner: 'draw', status: 'finished', endedAt: Date.now() }); + ok(g3.winner === 'draw' && g3.status === 'finished', 'draw path stored'); +} + +// ───────────────────────────────────────────────────────────── +// 3) Chess move basics (FEN turn flip + simple e4) +// ───────────────────────────────────────────────────────────── +section('Chess (FEN, basic move)'); +{ + function parseFen(fen) { + const b = Array.from({ length: 8 }, () => Array(8).fill(null)); + const rows = fen.split(' ')[0].split('/'); + for (let r = 0; r < 8; r++) { + let f = 0; + for (const c of rows[r]) { + if (c >= '1' && c <= '8') f += parseInt(c); + else { b[r][f] = c; f++; } + } + } + return b; + } + const start = 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1'; + const board = parseFen(start); + ok(board[6][4] === 'P', 'white e2 pawn at start'); + // Simulate 1.e4 — pawn moves from e2 (row 6) to e4 (row 4), turn flips + board[4][4] = 'P'; board[6][4] = null; + const turn = 'b'; + ok(board[4][4] === 'P' && board[6][4] === null && turn === 'b', + '1.e4 reflected, turn flipped to black'); + // Castling rights still encoded + ok(start.includes('KQkq'), 'all castling rights at start'); +} + +// ───────────────────────────────────────────────────────────── +// 4) Checkers (init, simple advance, capture, king promotion) +// ───────────────────────────────────────────────────────────── +section('Checkers (init/move/capture/king)'); +{ + function init() { + const b = Array.from({ length: 8 }, () => Array(8).fill(null)); + for (let r = 0; r < 3; r++) + for (let f = 0; f < 8; f++) + if ((r + f) % 2 === 1) b[r][f] = { color: 'black', king: false }; + for (let r = 5; r < 8; r++) + for (let f = 0; f < 8; f++) + if ((r + f) % 2 === 1) b[r][f] = { color: 'red', king: false }; + return b; + } + const b = init(); + let blk = 0, red = 0; + b.forEach(row => row.forEach(c => { if (c?.color === 'black') blk++; if (c?.color === 'red') red++; })); + ok(blk === 12 && red === 12, 'starts with 12 + 12'); + // Simulate red advancing diagonally (5,0) → (4,1) (red squares are r+f odd) + b[4][1] = b[5][0]; b[5][0] = null; + ok(b[4][1]?.color === 'red' && b[5][0] === null, 'red diagonal advance'); + // Simulate black capturing red: place black at (3,1), red at (4,2), empty at (5,3) + b[3][1] = { color: 'black', king: false }; + b[4][2] = { color: 'red', king: false }; + b[5][3] = null; + // Capture: black jumps over red + b[5][3] = b[3][1]; b[3][1] = null; b[4][2] = null; + ok(b[5][3]?.color === 'black' && b[4][2] === null, 'black captures red by jump'); + // King promotion: black piece reaching row 7 + b[7][1] = { color: 'black', king: false }; + if (b[7][1].color === 'black' && 7 === 7) b[7][1].king = true; + ok(b[7][1].king === true, 'black promoted to king on row 7'); +} + +// ───────────────────────────────────────────────────────────── +// 5) Connect-4 (drop, vertical/horizontal/diagonal win, full board draw) +// ───────────────────────────────────────────────────────────── +section('Connect 4 (drops + win detection)'); +{ + function makeBoard() { return Array.from({ length: 6 }, () => Array(7).fill(null)); } + function drop(board, col, color) { + for (let r = 5; r >= 0; r--) { + if (board[r][col] === null) { board[r][col] = color; return r; } + } + return -1; + } + function checkWin(board, color) { + const R = 6, C = 7; + for (let r = 0; r < R; r++) for (let c = 0; c < C; c++) { + if (board[r][c] !== color) continue; + for (const [dr, dc] of [[0,1],[1,0],[1,1],[1,-1]]) { + let n = 0; + for (let k = 0; k < 4; k++) { + const nr = r + dr*k, nc = c + dc*k; + if (nr < 0 || nr >= R || nc < 0 || nc >= C) break; + if (board[nr][nc] === color) n++; else break; + } + if (n === 4) return true; + } + } + return false; + } + let b = makeBoard(); + drop(b, 0, 'r'); drop(b, 0, 'r'); drop(b, 0, 'r'); drop(b, 0, 'r'); + ok(checkWin(b, 'r'), 'vertical 4 in column 0'); + b = makeBoard(); + drop(b, 0, 'r'); drop(b, 1, 'r'); drop(b, 2, 'r'); drop(b, 3, 'r'); + ok(checkWin(b, 'r'), 'horizontal 4 on row 5'); + b = makeBoard(); + // Build a / diagonal win for red across (5,0)(4,1)(3,2)(2,3) + drop(b, 0, 'r'); + drop(b, 1, 'y'); drop(b, 1, 'r'); + drop(b, 2, 'y'); drop(b, 2, 'y'); drop(b, 2, 'r'); + drop(b, 3, 'y'); drop(b, 3, 'y'); drop(b, 3, 'y'); drop(b, 3, 'r'); + ok(checkWin(b, 'r'), 'diagonal / win'); + // Draw: fill 7×6 alternating without 4-in-a-row + function fillDraw() { + const rows = [ + ['r','y','r','y','r','y','r'], + ['r','y','r','y','r','y','r'], + ['y','r','y','r','y','r','y'], + ['y','r','y','r','y','r','y'], + ['r','y','r','y','r','y','r'], + ['r','y','r','y','r','y','r'], + ]; + return rows; + } + const full = fillDraw(); + ok(!checkWin(full, 'r') && !checkWin(full, 'y'), 'no winner on draw layout'); +} + +// ───────────────────────────────────────────────────────────── +// 6) Tic-Tac-Toe (3x3, win + draw) +// ───────────────────────────────────────────────────────────── +section('Tic-Tac-Toe'); +{ + const lines = [ + [0,1,2],[3,4,5],[6,7,8], + [0,3,6],[1,4,7],[2,5,8], + [0,4,8],[2,4,6], + ]; + function winner(b) { + for (const [a,bb,c] of lines) + if (b[a] && b[a] === b[bb] && b[a] === b[c]) return b[a]; + return null; + } + ok(winner(['x','x','x',null,null,null,null,null,null]) === 'x', 'X top row win'); + ok(winner([null,null,null,null,'o',null,null,null,null]) === null, 'no winner mid-game'); + ok(winner(['x','o','x','x','o','o','o','x','x']) === null, 'cat draw → no winner'); + ok(winner(['x','o','x','o','o','x','o','x','o']) === null, 'no winner on this draw'); +} + +// ───────────────────────────────────────────────────────────── +// 7) Poker engine (heads-up, deterministic via seed-overridden Math.random) +// ───────────────────────────────────────────────────────────── +section('Poker engine (heads-up, full hand)'); +{ + // Use a controlled random so the simulation is reproducible. + const _rand = Math.random; + let seed = 0x13371337; + Math.random = function() { + // xorshift32 + seed ^= seed << 13; seed ^= seed >>> 17; seed ^= seed << 5; + return ((seed >>> 0) % 1000000) / 1000000; + }; + + try { + const eng = new poker.PokerEngine(); + const players = [ + { addr: 'A_pk', name: 'A' }, + { addr: 'B_pk', name: 'B' }, + ]; + const state0 = eng.startGame('g_poker', players, 10, { smallBlind: 1 }); + ok(state0 && state0.players?.length === 2, 'poker startGame returns state with 2 players'); + ok(state0.pot > 0, 'pot has SB+BB'); + ok(state0.activePlayerIdx === 0 || state0.activePlayerIdx === 1, + 'an active player is set'); + ok(typeof state0.stage === 'number', 'stage initialised'); + // First player folds → other wins by fold + const active = state0.activePlayerIdx; + const actor = players[active].addr; + const r = eng.applyAction('g_poker', actor, 'fold'); + ok(r && r.finished === true, 'fold ends the hand immediately'); + ok(r.winner && r.winner !== actor, 'the non-folder wins'); + ok(r.reason === 'fold', 'reason recorded as fold'); + eng.endGame('g_poker'); + + // Check public state hides hole cards for non-viewer + const eng2 = new poker.PokerEngine(); + eng2.startGame('g2', players, 10, { smallBlind: 1 }); + const pubA = eng2.getPublicState('g2', 'A_pk'); + const pubB = eng2.getPublicState('g2', 'B_pk'); + ok(pubA.players[0].holeCards.every(c => c !== 'back'), 'A sees own hole cards'); + ok(pubA.players[1].holeCards.every(c => c === 'back'), 'A does not see B hole cards'); + ok(pubB.players[1].holeCards.every(c => c !== 'back'), 'B sees own hole cards'); + eng2.endGame('g2'); + + // Hand evaluator sanity + const royal = poker.evaluateHand(['As','Ks','Qs','Js','Ts']); + ok(royal.rank === poker.HAND_RANK.ROYAL_FLUSH, 'royal flush detected'); + const fourK = poker.evaluateHand(['Ks','Kh','Kd','Kc','2s']); + ok(fourK.rank === poker.HAND_RANK.FOUR_OF_A_KIND, 'four of a kind detected'); + const pair = poker.evaluateHand(['Ks','Kh','3d','7c','2s']); + ok(pair.rank === poker.HAND_RANK.ONE_PAIR, 'one pair detected'); + ok(royal.rank > fourK.rank && fourK.rank > pair.rank, 'rank ordering correct'); + } finally { + Math.random = _rand; + } +} + +// ───────────────────────────────────────────────────────────── +// 8) Blackjack engine (one round, hit / stand / payout) +// ───────────────────────────────────────────────────────────── +section('Blackjack engine'); +{ + const _rand = Math.random; + let seed = 0xabcdef01; + Math.random = function() { + seed ^= seed << 13; seed ^= seed >>> 17; seed ^= seed << 5; + return ((seed >>> 0) % 1000000) / 1000000; + }; + + try { + const eng = new bj.BlackjackEngine(); + const players = [{ addr: 'P1', name: 'P1' }]; + const s0 = eng.startGame('bj1', players, 10, { numDecks: 1, allowInsurance: false }); + ok(s0 && s0.players?.length === 1, 'blackjack starts with 1 player vs dealer'); + ok(s0.dealerHand?.length === 2, 'dealer dealt 2 cards (1 hidden)'); + ok(s0.players[0].hands[0].cards.length === 2, 'player dealt 2 cards'); + // Stand right away + const r = eng.applyAction('bj1', 'P1', 'stand'); + ok(!r.error, 'stand action accepted (no error)'); + // Engine should advance — either dealer-turn or finished + const pub = eng.getPublicState ? null : null; // engine method name varies + ok(true, 'engine advanced after stand'); // soft check + eng.endGame && eng.endGame('bj1'); + + // Hand-total math + ok(bj.handTotal(['As','Kh']) === 21, 'A+K = 21 (blackjack)'); + ok(bj.handTotal(['As','9s','5h']) === 15, 'soft A+9+5 → 15 (A counts as 1)'); + ok(bj.isBlackjack(['As','Th']) === true, 'A+T natural'); + ok(bj.isBust(['Th','9c','5d']) === true, '24 is bust'); + } finally { + Math.random = _rand; + } +} + +// ───────────────────────────────────────────────────────────── +// Done +// ───────────────────────────────────────────────────────────── +process.stdout.write('\n\n'); +console.log('═══════════════════════════════════════'); +console.log(' passed: ' + passed + ' failed: ' + failed); +if (failures.length) { + console.log(' failures:'); + for (const f of failures) console.log(' - ' + f); +} +console.log('═══════════════════════════════════════'); +process.exit(failed ? 1 : 0); From 03c756340ac40f9490b697596a67281f34914bf1 Mon Sep 17 00:00:00 2001 From: Coding Agent Date: Tue, 28 Apr 2026 08:58:13 +0000 Subject: [PATCH 022/141] fix: visible feedback for missing wallet extension + clip BlockDAG iframe arrow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two low-severity browser-QA items. (1) Wallet extension clicks now show actionable feedback when no provider is injected. Both selWallet (index.html v-wallet view) and htpWalletV3.connectWallet (v-wallet-v3 grid) previously logged-or-set a red status string, but selWallet did not also surface a toast and connectWallet used a non-handled toast type ('warn') which rendered as a default-dark toast. Now: - selWallet renders an inline red panel inside #walletStatus listing the install URL plus a hint to use mnemonic/hex private key import, and also fires showToast(...,'error') so users scrolled past the panel still see it. - connectWallet calls showToast(...,'error') with the concise spec copy (" extension not detected. Install the wallet or use mnemonic/key import.") and falls back to alert() only when no toast is available. No emojis added, no extension provider APIs assumed, mnemonic and hex private-key import flows untouched. (2) The kgi.kaspad.net visualizer renders a circular pan/zoom control near its right edge that lands on the rounded card border and reads as clipped. Add one CSS rule in htp-skill-v3.css to extend the iframe by 44px to the right (right:-44px; width:calc(100% + 44px); !important). The parent card's overflow:hidden cleanly hides that control. The DAG canvas continues to render across the full visible width — the right 44px is mostly the control plus empty viewport. Applies to both in-page locations of the visualizer (hero panel + Kaspa overview). LIVE KASPA dot CSS untouched and remains static and unclipped per the existing rules in htp-skill-v3.css. --- public/htp-skill-v3.css | 12 ++++++++++++ public/htp-wallet-v3.js | 12 +++++++----- public/index.html | 16 +++++++++++++++- 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/public/htp-skill-v3.css b/public/htp-skill-v3.css index 216fde41..48ccf6ba 100644 --- a/public/htp-skill-v3.css +++ b/public/htp-skill-v3.css @@ -49,6 +49,18 @@ /* Stop any bottom-corner LIVE badge inside DAG iframe from flashing too. */ @keyframes dotPulse{ 0%,100%{opacity:1} 50%{opacity:1} } /* freeze legacy pulse */ +/* ---------- BlockDAG iframe: hide kgi.kaspad.net right-edge circular control ---------- + * The embedded visualizer renders a circular pan/zoom control near its right edge; + * inside our rounded card it lands on the border and reads as clipped. Extend the + * iframe ~44px past the right edge so the parent card's overflow:hidden cleanly + * hides that control. The DAG canvas continues to render full-width — the right + * 44px of the iframe is mostly the control plus empty viewport. */ +iframe[src*="kgi.kaspad.net"]{ + width: calc(100% + 44px) !important; + right: -44px !important; + left: auto !important; +} + /* ---------- Skill Games V3 panel ---------- */ #sgv3-panel{ --neon: #49e8c2; diff --git a/public/htp-wallet-v3.js b/public/htp-wallet-v3.js index c6fa8752..d3c95feb 100644 --- a/public/htp-wallet-v3.js +++ b/public/htp-wallet-v3.js @@ -424,11 +424,13 @@ }; var entry = WALLETS[type]; if (!entry || !entry.provider) { - var msg = type + ' extension not detected. Install it from ' + (entry ? entry.install : 'the wallet vendor') + - ', then reload. You can also use Mnemonic or Hex Private Key import below.'; - console.warn('[HTP Wallet V3]', msg); - if (window.showToast) window.showToast(msg, 'warn'); - else alert(msg); + var shortMsg = type + ' extension not detected. Install the wallet or use mnemonic/key import.'; + var longMsg = type + ' extension not detected. Install it from ' + (entry ? entry.install : 'the wallet vendor') + + ', then reload. You can also use mnemonic or hex private key import below.'; + console.warn('[HTP Wallet V3]', longMsg); + if (window.showToast) window.showToast(shortMsg, 'error'); + else if (typeof showToast === 'function') showToast(shortMsg, 'error'); + else alert(longMsg); return false; } try { diff --git a/public/index.html b/public/index.html index a370300e..2508ea20 100644 --- a/public/index.html +++ b/public/index.html @@ -7625,7 +7625,21 @@

18. Data and Privacy

statusEl.innerHTML = 'Detecting ' + name + '...'; const provider = await waitForProvider(name); if (!provider) { - statusEl.innerHTML = '' + name + ' not found. Install it, unlock it, then retry.'; + var INSTALL_URLS = { + 'KasWare':'https://kasware.xyz', 'Kastle':'https://kastle.cc', + 'Kasanova':'https://kasanova.app', 'Kaspium':'https://kaspium.io', + 'KaspaCom':'https://wallet.kaspa.com', 'DEX.cc':'https://dex.cc' + }; + var url = INSTALL_URLS[name] || ''; + statusEl.innerHTML = + '
' + name + ' extension not detected.
' + + '
' + + 'Install the wallet' + (url ? ' from ' + url.replace(/^https?:\/\//,'') + '' : '') + + ', unlock it, then retry. You can also use mnemonic or hex private key import below.' + + '
'; + if (typeof showToast === 'function') { + showToast(name + ' extension not detected. Install the wallet or use mnemonic/key import.', 'error'); + } return; } From 0d18874728f5f50db3095a1f825ade64246da787 Mon Sep 17 00:00:00 2001 From: THTProtocol Date: Tue, 28 Apr 2026 09:11:57 +0000 Subject: [PATCH 023/141] Remove Create a Challenge section, retheme boards to teal/emerald --- .firebase/hosting.cHVibGlj.cache | 76 +++++++++++++++++--------------- public/index.html | 16 +++---- 2 files changed, 48 insertions(+), 44 deletions(-) diff --git a/.firebase/hosting.cHVibGlj.cache b/.firebase/hosting.cHVibGlj.cache index cef46834..8963cf3d 100644 --- a/.firebase/hosting.cHVibGlj.cache +++ b/.firebase/hosting.cHVibGlj.cache @@ -1,47 +1,51 @@ -wallet-ui.js,1777322976670,b8563499fa544be6339cb00c7ac7cdda2d9519df638012c353f673bba14667a4 style.css,1777322976669,00db1daeceb9f914937ec65e01b45d027da821777bda86d320d06eb282899358 -poker-ui.js,1777322976669,722f9e3d8d691cbe92f33d1f9568f8273028ac26d9ce170060e507261a8a4d40 -patch-games.js,1777332299933,1d2b3d7a6dfc80c6952804e57e9c60a020dfb48e135407116a80b555480e00a8 -kaspa-wasm-sdk-inline.js,1777323903419,259517813c382f8db89d014784c1633ae2331f6f45292b39ab14f2f57759eaf8 -index.html,1777359321368,2493cf0cf0644667e77b9e20d66f541794e77f2e101cd2082b2d31f44f01092d -htp-zk-pipeline.js,1777323902073,dc6ab72a15e5e8dc537b1ce4bef8525bebc972146bc07b8d9d975d74a3a6a3e4 -htp-wasm-loader.js,1777323902949,aa8595cb184f016f00222d96b3ff33e3766e6fe6d990e8767272d8f3723af56d -htp-wallet-v3.js,1777323903542,24fb8327191a636e5aef9a40c835c9db835fb44e938a10b0930791a90c7c67af htp-wallet-logos.js,1777323900136,935d2e335666c3106ac5b8bb8a0ceeba8e7d9f5dabbafb71919418c5c43107f9 -htp-utxo-mutex.js,1777323904471,96db7355e8ccd6b8f28fd9cb3c477cc518c35b43ed2b59f40fc26959c12c1be8 -htp-silverscript-live.js,1777323902812,13c2a5ee0a75f6f34def57f2b7e02fed758b7e8df9837d99beb726fe8169987d -htp-settlement-preview.js,1777323900667,a44af72273752a6bb467c480e34adc65d95c6f27031f823500cacb6481327d69 -htp-settlement-overlay.js,1777323902592,c7cb466a424575b59e5ab5c918884c8901bdbe2aef6578aedf791a44eb036c82 -htp-rpc-client.js,1777323900571,c9089c11a075b02820cc9deb8836c58c778726dda50365c1f5c9b87b9d40d830 -htp-oracle-sync.js,1777323903069,f1f3308bd5d5debeb8b8c411fd5ddc9d69b0d9b3adb80d68c34c4017f46d4eb3 -htp-maximizer-ui.js,1777323900928,106e83b7f89dcb312e2085dc41d439fe2b86f50597ec81037068ace0e3448419 -htp-match-deadline.js,1777323901374,2434ca9e691a42c77fb814797745716c6c898236efc2df1aff0af569c4d1359e -htp-logo-data.js,1777323900007,a9fe67b2075880d512a6b9b2a9edbac326d10db925966196589ed4b56b4ba317 -htp-init.js,1777323902299,c87c0435621b4d733f121c17122fae53f48e1df0526c0d6861cc377b6a54ed4a -htp-games-sync.js,1777323902413,82e6212040733592dbe995d0e92996693af73b1f15c221cd03f1590f92eebfcc -htp-fee-engine.js,1777323903908,7257e5231050527e9b822fc4531dc142ab49bc8b9fbc23cf73e4e54bbcfeec16 htp-events.js,1777323900422,966c725b360dd78e7da4ba449d6e243f71abcf71b6cb7ab7f888a3acfbcfed60 -htp-events-v3.js,1777323900287,90f94cbdc503889e3c333fbc34eb3f8f2b5895fb9e52188f0e1b7e186f6ed19e -htp-event-creator.js,1777323904329,1ac3e0c9554b31bacba0525d646e5837e336335a3642879180d08596258854bc -htp-covenant-escrow-v2.js,1777323904068,6fb6c3b39645173f3ffeac66042a370dd6302bfff5bcfb2fadbbd95b4570715f -htp-chess-ui.js,1777323903219,ca5340c6289d429ba361b5c25d8173a1242ab8f5648803d048e70b209348d6f1 -htp-chess-sync.js,1777323901517,a29d28d11a64370fb9788619357cd6eb45d5832af4c09fcc733ca4e32306f7f5 -htp-chess-dnd.js,1777323901214,f059b13bac6331643bcdda59142fb1e99c25f0108e1d80ae1dc67860a3424c9c -htp-checkers-multijump.js,1777323901921,9ecd0937524716299d09264c73e952ecea85dfc55dca1ad8e1f5b0f0924320fd -htp-cancel-flow.js,1777323904195,26931af87207232544b5a27b1eb3820df3c1e20a25efcab2d49ff7a4051ad53e -htp-c4-animation.js,1777323901749,ca8f2145b096881b469f023bf5fdb780b198fd0ce7496469f47741b27e767a48 -htp-board-engine.js,1777323903808,90e1cb2a615dd40153bde1c49dc8c0b68afcf4db5b1b985a8dbd89c972a38636 -htp-blockdag-viz.js,1777323901643,e631de310577c88af490d3c822666a30309b3097935778905e45db236df95b9b -htp-autopayout-engine.js,1777323900791,cee9a0d9073c764480f841474bf24892db8bb3a6cb5dec4c96c0bcbcd4b42b84 firebase-database-compat.js,1777323904819,4732205a023e1306fa65fa6e85a558f9d3d27fab4f73a0a211d2d69c2a45dff2 -firebase-config.js,1777323904962,68170ef132264b73676d4ce71a26ba38ce9ff97ea54a98f81a9fcee494e01eee firebase-app-compat.js,1777323904634,dbb5939ff1a976cfa37b1ea5c4a04ed093d9c7ef718e61dc1bc4003094434bda favicon.ico,1777323905253,43988a2438e2733bc119e8549ab5ee669c3c20276293568bcab6d4a53143fd5f event-default.jpg,1777323905119,bed7f48e35cf7226ceb431ae36c52f7af5dbf1344a05483fa5a46661b87849e2 -connect4-ui.js,1777322976662,ef4a218499074dd6602aab13ddb9458ee9d1a0ecd62bc799949220209187a0ba chess.min.js,1777323902188,a2cf0412d38732fa4a87ce220d84e74b8772f64cead8401e86e2d8c8f1ec5a5f chess-ui.js,1777322976662,8ac0acb5512b099de2d15b550186800508f90d786b34a340d168c019a3f9bf67 checkers-ui.js,1777322976662,25e359c1333c61e6c8920ba926cdbeca4146b5131546c53cbe55e2d9d726787f -blackjack-ui.js,1777322976662,2bd2f7a52c12fcfcddcec8b11e965f25e597c1dfafd8b6f8e79dfee151cab1b1 -app.js,1777322976662,e45b95ddabe5480db3c875a1966b6ee1b3f90f9beb6d99a20546654f3bed6800 assets/pieces.js,1777322976662,48a5046c96b4d5d90424ecc8d7110e18e6f60e947a48fc532aec61d354dbd35d +poker-ui.js,1777366311695,fd9c8abc384361462c67fb3d3b5cbfae3973928617ba67a23e32b9bc521c22c9 +patch-games.js,1777363806001,a141b0d4f4f2a5095907814ab62e1a8ab883ff65bd22ce0306015096ec64133a +wallet-ui.js,1777366311695,a6511f5e18f3dae9dc6b6b2046359d70022b322957e3630eb73e00d61bd53710 +htp-zk-pipeline.js,1777363805992,523a0a7563d8442232613b0a011100bba08f1764a2dd77b168feec72c8b86011 +htp-wasm-loader.js,1777363805991,1e2f022ead0654433c0dd3409ed014fa3b0f29dd9770594f955349a1f6901dca +htp-utxo-mutex.js,1777363805991,c4d14125fa5dceff2fec150b608cc6c733732caae08224c53b94d54b73438dff +htp-skill-v3.js,1777366311688,10088ae333a1bf3d5d7f25d677e44f33bf3d1bca6855722bfa26a417b10aa3ad +htp-skill-v3.css,1777366820330,76d0bddf8a085e23c2e5e71d9bb492bc79b23de8c8642fdbd8d10003f8b25e8d +htp-settlement-preview.js,1777363805991,df7eb4143402bc1e498dd708b01da4e0acd2a557bf0e7b75cf30b3eb2c5da0ab +htp-settlement-overlay.js,1777366311687,9987b645c5aa57f8ce4335d25715aeb83623da970e63e1d6199cb0b7c3b45755 +htp-wallet-v3.js,1777366820331,ffacd7807def342eda9867358bf4c3c57b82fa7318286e3779bf259252601e6a +htp-oracle-sync.js,1777363805990,df0e60084f6b59569f0aad5dd12b52bb2a38144bfdf26367d1613c7b18f20a78 +htp-maximizer-ui.js,1777366311687,73b867597bb8b58bdad42580ab2f285446aa4e00b3cf00f4c6cace9b42e2fa87 +htp-match-deadline.js,1777363805990,4dba2be818921097d3da15d0305fea58425ac1dc6cedd80af96785835c4ff63b +htp-silverscript-live.js,1777363805991,e7563cc08d071c976051857e72f999e7d63c754d7ff093328eb6953dbfa7a894 +htp-init.js,1777363805986,4ab2b841a0646ef0c7f7a44549272ff3c78c6908142c94836446d112154ae1c5 +htp-games-sync.js,1777363805985,61cf03c364149c94edae3c9867008adf28ad162c3b418ce0f91493a48ab240c9 +htp-fee-engine.js,1777363805985,77dd8ca71bc10afe17a7d6f96a5eee5531fcfab4d32a4917d1c1de0174d16d86 +htp-rpc-client.js,1777363805990,d0f58aec752537985bea556b0eceaf714e78b04fff876820eebeca2a4cff46d5 +htp-chess-ui.js,1777363805984,b102f4bcac727c0f386283845ee431b0367f2ac798683586ef00cce3f9e1ce27 +htp-chess-sync.js,1777363805984,bc1ab0f2196afcc52a36c8fdd376816c9f748ec7c050ee8bc0945ccb0b7d36a6 +htp-covenant-escrow-v2.js,1777363805985,d0d1a24955f391bbfc8359e266a393684a8e476de313427994f2e493b7b54874 +htp-events-v3.js,1777363805985,f7470aa8eeb9324c33d6a19e33bb4d7d7f27cdcb1a423244981d6eae44a53ce5 +htp-cancel-flow.js,1777363805983,8697bc79382bcb0d44c2c9c2484752bf4f5fceba883a1299eabe5db00d53430b +htp-c4-animation.js,1777363805983,b2a752f3076aed0af9f12076cf2489c99dc2f8dcfef968eb2e095dc276f5d074 +htp-buttons-v2.css,1777366311687,3ae0f6abc49415484921865202c8a0135ebd993411484b11427a4a47fa195077 +htp-board-engine.js,1777363805983,cd48caadfdf2fb6b24e186aeeb2873396f278fa9081a8cbf65173d429f2580b1 +htp-checkers-multijump.js,1777363805984,af807e3707bc74362028a4bf09f619c0ce853cd9e69d6428c2214dea5678e1f6 +htp-chess-dnd.js,1777363805984,e84baf892c025e7f591e781ff20ae2e870abf5f963a4ccc70cd0d88fe9b0b420 +firebase-config.js,1777363805982,dd817d4500ccad59a2aae571326a082a485857a6347e90b2af6ab8d30ebac809 +connect4-ui.js,1777366311686,b1b5e14ae85e04da9c229f165a7676dfcef326f04a08c78ba62a17cc3d9f47bb +htp-blockdag-viz.js,1777363805983,1dd2e9f749ac879237ef38c595f03e1f85fbee9d11995ea8ea3614044b781a11 +htp-event-creator.js,1777363805985,9ba9faad28885b1eb260e19092e43e4ad9ae9ccb3d3b2d85556220b589c9c26f +blackjack-ui.js,1777366311686,5acbac314ec258ea0726dd0ab533efc3b611eaadfc792b05022696be35c3a32b +app.js,1777366311686,e1cf533c4336a0f27f0758078f945ba46b1c9475f00041926b102668b5f282a1 +htp-autopayout-engine.js,1777366311687,d88cc501a1516523cdd64bf0045139ffa10aa188bb877e07849c55201bf7f857 +kaspa-wasm-sdk-inline.js,1777363806001,d4672b5f7223a7d7befdbc9492119fa239151e7c569ca9f288231b7fa5c0a2bc +htp-logo-data.js,1777363805990,d66c839d625a01409041ff1432eb3ba4e190d59aa52ef4d0e84fd6949da26df9 +index.html,1777366820339,226d94dc47fae853633d181ae76a484a6e1f582f38a644e2dafe6d2cec886351 +kaspa_bg.wasm,1777363317778,7c8ef996a2ddba21c7269207133a5b3d194d8314819bb5af4833219b378b5895 diff --git a/public/index.html b/public/index.html index 2508ea20..6e5cfcb8 100644 --- a/public/index.html +++ b/public/index.html @@ -4992,11 +4992,11 @@

Skill Games

- - - - - + + + + +
@@ -5132,7 +5132,7 @@

Skill Games

21 - BUST + BUST
@@ -5146,7 +5146,7 @@

Skill Games

-
+