From af186800fadb3d984edabd948542572216eef3fb Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 26 Oct 2025 15:02:00 -0400 Subject: [PATCH] v0.7.42 - Fix ephemeral event storage and document monitoring system --- .rooignore | 2 - README.md | 65 +++++++++++ debug.log | 24 ++++ relay.pid | 2 +- src/main.c | 9 +- src/main.h | 4 +- src/sql_schema.h | 10 -- tests/debug.log | 12 ++ tests/sendDM | Bin 0 -> 195296 bytes tests/sendDM.c | 296 +++++++++++++++++++++++++++++++++++++++++++++++ 10 files changed, 408 insertions(+), 16 deletions(-) create mode 100644 debug.log create mode 100644 tests/debug.log create mode 100755 tests/sendDM create mode 100644 tests/sendDM.c diff --git a/.rooignore b/.rooignore index 18cbfec..48599b7 100644 --- a/.rooignore +++ b/.rooignore @@ -1,3 +1 @@ src/embedded_web_content.c -src/dm_admin.c -src/dm_admin.h \ No newline at end of file diff --git a/README.md b/README.md index 6f1d467..5f90809 100644 --- a/README.md +++ b/README.md @@ -195,6 +195,9 @@ All commands are sent as NIP-44 encrypted JSON arrays in the event content. The - `pow_min_difficulty`: Minimum proof-of-work difficulty - `nip40_expiration_enabled`: Enable event expiration (`true`/`false`) +**Monitoring Settings:** +- `kind_24567_reporting_throttle_sec`: Minimum seconds between monitoring events (default: 5) + ### Dynamic Configuration Updates C-Relay supports **dynamic configuration updates** without requiring a restart for most settings. Configuration parameters are categorized as either **dynamic** (can be updated immediately) or **restart-required** (require relay restart to take effect). @@ -391,6 +394,68 @@ SELECT +## Real-time Monitoring System + +C-Relay includes a subscription-based monitoring system that broadcasts real-time relay statistics using ephemeral events (kind 24567). + +### Activation + +The monitoring system activates automatically when clients subscribe to kind 24567 events: + +```json +["REQ", "monitoring-sub", {"kinds": [24567]}] +``` + +For specific monitoring types, use d-tag filters: + +```json +["REQ", "event-kinds-sub", {"kinds": [24567], "#d": ["event_kinds"]}] +["REQ", "time-stats-sub", {"kinds": [24567], "#d": ["time_stats"]}] +["REQ", "top-pubkeys-sub", {"kinds": [24567], "#d": ["top_pubkeys"]}] +``` + +When no subscriptions exist, monitoring is dormant to conserve resources. + +### Monitoring Event Types + +| Type | d Tag | Description | +|------|-------|-------------| +| Event Distribution | `event_kinds` | Event count by kind with percentages | +| Time Statistics | `time_stats` | Events in last 24h, 7d, 30d | +| Top Publishers | `top_pubkeys` | Top 10 pubkeys by event count | +| Active Subscriptions | `active_subscriptions` | Current subscription details (admin only) | +| Subscription Details | `subscription_details` | Detailed subscription info (admin only) | +| CPU Metrics | `cpu_metrics` | Process CPU and memory usage | + +### Event Structure + +```json +{ + "kind": 24567, + "pubkey": "", + "created_at": , + "content": "{\"data_type\":\"event_kinds\",\"timestamp\":1234567890,...}", + "tags": [ + ["d", "event_kinds"] + ] +} +``` + +### Configuration + +- `kind_24567_reporting_throttle_sec`: Minimum seconds between monitoring events (default: 5) + +### Web Dashboard Integration + +The built-in web dashboard (`/api/`) automatically subscribes to monitoring events and displays real-time statistics. + +### Performance Considerations + +- Monitoring events are ephemeral (not stored in database) +- Throttling prevents excessive event generation +- Automatic activation/deactivation based on subscriptions +- Minimal overhead when no clients are monitoring + ## Direct Messaging Admin System In addition to the above admin API, c-relay allows the administrator to direct message the relay to get information or control some settings. As long as the administrator is signed in with any nostr client that allows sending nip-17 direct messages (DMs), they can control the relay. diff --git a/debug.log b/debug.log new file mode 100644 index 0000000..94acf1b --- /dev/null +++ b/debug.log @@ -0,0 +1,24 @@ + +=== NOSTR WebSocket Debug Log Started === +[14:16:28.243] SEND localhost:8888: ["EVENT", { + "pubkey": "193279d1459ba1399aadb954422bf8595aa77367dccf482c682f5f208e435844", + "created_at": 1761499411, + "kind": 1059, + "tags": [["p", "4f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa"]], + "content": "AmWNi4P5J126kk69XH2o5mYvGj+69+Fjfr/nZx892I2z8edkwtp2IH7XAnPUqdGPu7x1xiZF1sNfr21VKThOhE54K/uQHLFydZN3acgUfX13sCeWhrvnQD0EvjvZC6QzW9DfFayYoYl+rEPYcra1/N68a+N1R7XnNcf1K/ZFh5Grcnln0H5YdXKRBhQI9aai4iFp1VGy2V0IR+6gDJGbJ7TbAbD3wgGWv1i77C03skH3RgzH+f2b7VBtm+vjKX6q7v6v8j3w1lRFE5Qh0Tqgedh3+UsnwqQta7OCzF9OyAVPK7EqKQBss5LzYSRUpcCE1vw5b7I7yeBFwU9WfnGLUW+uZxMJ2C3P4NBBrVO8UFIkBrPL2cqkoD5c8DgMLJjXGmc4EWfB4ZWb3KjbfLbgi6DVQ++cDjBbnCOPhX+/4qOnWq+gI28e/xk3cBvQtgUOkvWX3oGl3/Q33u4UGtxkFEXGfzdKHVDkR86kqf7RMZjIwTjLGpx4uov0cNmzj07hYEdoG/lJ4yA1v/GyF7viJdnnz3tE0hCZaViqSCev0rfUHWRDDMXJzJ9SS+OwpVswSG4NKvYsDhDM89BjhFs08HshTFdIh2AY45jR/16CsZM9JudH5BwqcX23wToYdZ+lrerOA0EkYb0DJUzGVe4lMpdJZoB8qXLHxMAKwKu0UEWEkeBnnZbvTGwCRbfGorxwPrnyqUCy9tzJx0GOLhRIzBmt6lki607VLDYjK97VIz0dff3fyWPAfy/yBlO2nHhVubUgpPaAjcaYNkO/iZwuP8oJkClWWmKwAQoNoxt+Ly2llrkz+Ne8oXMQdJSq416x6MLHo2JbKH8uwjx0yKG0oldLyWaz3A8OHYkJuxOi7HPVTlOOJrsjG4kMn2g97rVUXLs5v9F/StOjzxtiQWmCBtCsvK2LEEK/DzfavcJstEMxQztJjhiYRO3MJanL7lN2zu1ZHO149FJrgqGV6RQ8DDXf55yuabqHilBuUSDKpI0gl0+Efuor1my+L9J7MjJQ83aSwGizX7uXedMsGQRcvU3++Uvbw7sd2l67fb7IoYU04TPGZkIm120qwf7GAUpnDL7Lhulu/9LFMFs3UnGl9cLzY6EAJtDANHjMAoXbGbYclnoSiNW4yr3X9PBHO5o2YhIxfpTyEgLebJLOkzoziuCTpX8/MdhOhFtlIyo5B8Mbt5GDOHh4x1ZMKOl02J00Vvgui0hLw4Vri8Lz/ErPIRSlrEOB+8K5zPzJy/bD8XrOKlOwSbF5j9dsqs+8uCTC/v9YNQ0cC9wP7gVAxErQ3suJVeV7pzY+eGR051AcW7ppTs1gShhxDDaSaKdMlrkBdFDZcCJ+tomSgW56bOi45erpmk8Lcv4RrBzjBtq1hz+XSaTBAtEnGtHNH2uOn7KP/NNaD38dYkpb3N1VR3zuV67RcuPZeB+5WR9jhnLoSMGox2s=", + "id": "c6c18d902744fc0aaa4ca9172b3bcd0dde3fd7d943b41b2a39a16927ede67804", + "sig": "d67e0e914aa361c528510efd216548b6734a5fa68c46426571fbc87626bf19a9ec46e16883e7fad700f4fee5cfffd9bba03c3c08e57938fbca77a28b30a32bb7" + }] +[14:16:28.256] RECV localhost:8888: ["OK", "c6c18d902744fc0aaa4ca9172b3bcd0dde3fd7d943b41b2a39a16927ede67804", true, ""] + +=== NOSTR WebSocket Debug Log Started === +[15:01:18.592] SEND localhost:8888: ["EVENT", { + "pubkey": "ec9578ade9e74358ed35d8091d41bfa277e86d649614a8865e3725e38ebe5bc9", + "created_at": 1761502101, + "kind": 1059, + "tags": [["p", "4f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa"]], + "content": "AlgLnVwti8Dk2nu0e4bMrXeZiR/u+RPnA85kpts2svaFGfMByS4iap7xqdiSrXpSQPjQsix6jP9Qiy1a6rrvC6MutqTi3JfsMexLR61/ZKTK41sWTXNDTT3keH543vx3fVQH1mq+LgG4mjNzkPe0RqkYFvC8R0nxyAcCecHDxZUlmXQmAGiB5JB2GvstA4eoZLP1OI3fcLA3qaITLNRJOwRUoTYKqUkENHwz74CW0TnYDrKRZVe9zKNWQBLmtsgVoGd5CXNAVgXwmm2h0eCNIcRGnFqDHzpegpEGO+A7tvB0KJwlj4j/GmRgmnWO4pkrM2fmsTdlb5KNqe7NPuTVgYfdvld70zWpenp7jF/0psaEQEl8R7FbG2rNCv8fXtH+womvJQj4S0eUBxfvsUU1wWYmhusEzvyTfpV/nw0Er+pmAUZ2eGk7LEB2GMsJrkT+G5oohm0n+5c72iWJqW9A1eAzjR6Z21FkH4kAEJOl70fw9Xeig+s9rYk3GcKlMvj42zf7DepMXHPy62TbqUeclcm5W/semyasGP521GBuw152IN+dS67OVVmEvEJ89xhwiTeIty78enR4Gq7d1eNK+rqStdtJ7FN6kD/8gv4sFojUXyi0sIxzaSPrwI3ohOqbpEK1dTs6fmTUiyT/Buq++IhD9UwsZgz/kYpZfm1NVnWx+yTEv4I1H80FDxmMzbYnTHuIdRJFeh/NJRy9h+gXoZlZnteHkbwm1w2AejTkVnGs2Pz7aUZgC+1Za8fhtXq3Z9N3R8f8gtVFnnjRzApg5U89QrXUBS0R6F9dTqINk4qti94JWO4dYcPuudCutME5hfCYBoo+LHuRmdPKry7vSK1WgLYQsHuG+r313Ak8DhZYNbL+0d5UJ9kDFlFKaP3xLahSbEc/7u+AyuN68IyM1NwEehllxqVUsX8dsD4bZ2yW5rVjAQm9tT8Ypm73kJEb+DYVqT0WjFx88ee+HX89a9NgszWf1HE1KNQ9gWjn4eH6xbwrOkS4/v2O2tQoAd00vyPKAWly3Zlrz2cRnrSnxTZ5Lt7HtwAt6Err8MhD/w5rMLXHTBCMrroG1VfMo1OgL1YPafKDZmwVcHWacqtZiB0heRx742WipmTonqMjCOTNufdwxQcRPLLio0mtqiIrzgJqqIQenBXSa1jaG6Lvb5PCUKThbg4sSFfgssoUNKM7ytmBAe+PPmOVe11/gGaFWoQeUordbvmiCtzIPUYiKsuhfeK4I3jKvEofQU37hOam8ZxUczXvX6dgOOto002EWyCVfAzFgyey6wI+FGEbhXqlw7nB+azpqLQMJnHg7pfb1stXk3d8rjgVrRsVRJe/5KrXyZ5cd7ftJuJLxpTYmfFu6CKoUE0L5eRxXiwa16Pi0BehxOLaZteiTzttyfj+ClMKs2J/2/T1BVya1oGUW2Wg6ri/qS8oXv8bqiXBZ1/BwfI=", + "id": "ea5bb419a8efea8ee86bb8696406a70a0387a7d0ac6e60760026d1aea28b427f", + "sig": "0ffde3fd0d83c80693aa656668f2553807f8d474738ff3d9676090a5b8748a8e8e0c75a1d64963e4604046e18a806c4371a9cf2af2fd72f9db50f15bc78a4e25" + }] +[15:01:18.604] RECV localhost:8888: ["OK", "ea5bb419a8efea8ee86bb8696406a70a0387a7d0ac6e60760026d1aea28b427f", true, ""] diff --git a/relay.pid b/relay.pid index d487e8c..9c02db5 100644 --- a/relay.pid +++ b/relay.pid @@ -1 +1 @@ -2324222 +2352885 diff --git a/src/main.c b/src/main.c index beef9ff..c22b82b 100644 --- a/src/main.c +++ b/src/main.c @@ -611,7 +611,14 @@ int store_event(cJSON* event) { // Classify event type event_type_t type = classify_event_kind((int)cJSON_GetNumberValue(kind)); - + + // EPHEMERAL EVENTS (kinds 20000-29999) should NOT be stored + if (type == EVENT_TYPE_EPHEMERAL) { + DEBUG_LOG("Ephemeral event (kind %d) - broadcasting only, not storing", + (int)cJSON_GetNumberValue(kind)); + return 0; // Success - event was handled but not stored + } + // Serialize tags to JSON (use empty array if no tags) char* tags_json = NULL; if (tags && cJSON_IsArray(tags)) { diff --git a/src/main.h b/src/main.h index d447555..6c83e99 100644 --- a/src/main.h +++ b/src/main.h @@ -10,10 +10,10 @@ #define MAIN_H // Version information (auto-updated by build system) -#define VERSION "v0.7.41" +#define VERSION "v0.7.42" #define VERSION_MAJOR 0 #define VERSION_MINOR 7 -#define VERSION_PATCH 41 +#define VERSION_PATCH 42 // Relay metadata (authoritative source for NIP-11 information) #define RELAY_NAME "C-Relay" diff --git a/src/sql_schema.h b/src/sql_schema.h index 8c6ecd2..55bf669 100644 --- a/src/sql_schema.h +++ b/src/sql_schema.h @@ -93,16 +93,6 @@ FROM events\n\ WHERE kind = 33334\n\ ORDER BY created_at DESC;\n\ \n\ --- Optimization: Trigger for automatic cleanup of ephemeral events older than 1 hour\n\ -CREATE TRIGGER cleanup_ephemeral_events\n\ - AFTER INSERT ON events\n\ - WHEN NEW.event_type = 'ephemeral'\n\ -BEGIN\n\ - DELETE FROM events \n\ - WHERE event_type = 'ephemeral' \n\ - AND first_seen < (strftime('%s', 'now') - 3600);\n\ -END;\n\ -\n\ -- Replaceable event handling trigger\n\ CREATE TRIGGER handle_replaceable_events\n\ AFTER INSERT ON events\n\ diff --git a/tests/debug.log b/tests/debug.log new file mode 100644 index 0000000..91fe5bc --- /dev/null +++ b/tests/debug.log @@ -0,0 +1,12 @@ + +=== NOSTR WebSocket Debug Log Started === +[14:13:42.079] SEND localhost:8888: ["EVENT", { + "pubkey": "e74e808f64b82fe4671b92cdf83f6dd5f5f44dbcb67fbd0e044f34a6193e0994", + "created_at": 1761499244, + "kind": 1059, + "tags": [["p", "4f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa"]], + "content": "ApTb8y2oD3/TtVCV73Szhgfh5ODlluGd5zjsH44g5BBwaGB1NshOJ/5kF/XN0TfYJKQBe07UTpnOYMZ4l2ppU6SrR8Tor+ZEiAF/kpCpa/x6LDDIvf4mueQicDKjOf8Y6oEbsxYjtFrpuSC0LLMgLaVhcZjAgVD0YQTo+8nHOzHZD5RBr305vdnrxIe4ubEficAHCpnKq9L3A46AIyb+aHjjTbSYmB061cf6hzLSnmdh5xeACExjhxwsX9ivSvqGYcDNsH1JCM8EYQyRX9xAPDBYM1yuS8PpadqMluOcqOd/FFYyjYNpFrardblPsjUzZTz/TDSLyrYFDUKNa7pWIhW1asc1ZaY0ry0AoWnbl/QyMxqBjDFXd3mJfWccYsOI/Yrx3sxbZdL+ayRlQeQuDk/M9rQkH8GN/5+GE1aN5I6eVl0F37Axc/lLuIt/AIpoTwZYAEi9j/BYGLP6sYkjUp0foz91QximOTgu8evynu+nfAv330HVkipTIGOjEZea7QNSK0Fylxs8fanHlmiqWGyfyBeoWpxGslHZVu6K9k7GC8ABEIdNRa8vlqlphPfWPCS70Lnq3LgeKOj1C3sNF9ST8g7pth/0FEZgXruzhpx/EyjsasNbdLZg3iX1QwRS0P4L341Flrztovt8npyP9ytTiukkYIQzXCX8XuWjiaUuzXiLkVazjh0Nl03ikKKu2+7nuaBB92geBjbGT76zZ6HeXBgcmC7dWn7pHhzqu+QTonZK0oCl427Fs0eXiYsILjxFFQkmk7OHXgdZF9jquNXloz5lgwY9S3xj4JyRwLN/9xfh16awxLZNEFvX10X97bXsmNMRUDrJJPkKMTSxZpvuTbd+Lx2iB++4NyGZibNa6nOWOJG9d2LwEzIcIHS0uQpEIPl7Ccz6+rmkVh9kLbB2rda2fYp9GCOcn6XbfaXZZXJM+HAQwPJgrtDiuQex0tEIcQcB9CYCN4ze9HCt1kb23TUgEDAipz/RqYP4dOCYmRZ7vaYk/irJ+iRDfnvPK0Id1TrSeo5kaVc7py2zWZRVdndpTM8RvW0SLwdldXDIv+ym/mS0L7bchoaYjoNeuTNKQ6AOoc0E7f4ySr65FUKYd2FTvIsP2Avsa3S+D0za30ensxr733l80AQlVmUPrhsgOzzjEuOW1hGlGus38X+CDDEuMSJnq3hvz/CxVtAk71Zkbyr5lc1BPi758Y4rlZFQnhaKYKv5nSFJc7GtDykv+1cwxNGC6AxGKprnYMDVxuAIFYBztFitdO5BsjWvvKzAbleszewtGfjE2NgltIJk+gQlTpWvLNxd3gvb+qHarfEv7BPnPfsKktDpEfuNMKXdJPANyACq5gXj854o/X8iO2iLm7JSdMhEQgIIyHNyLCCQdLDnqDWIfcdyIzAfRilSCwImt3CVJBGD7HoXRbwGRR3vgEBcoVPmsYzaU9vr62I=", + "id": "75c178ee47aac3ab9e984ddb85bdf9d8c68ade0d97e9cd86bb39e3110218a589", + "sig": "aba8382cc8d6ba6bba467109d2ddc19718732fe803d71e73fd2db62c1cbbb1b4527447240906e01755139067a71c75d8c03271826ca5d0226c818cb7fb495fe2" + }] +[14:13:42.083] RECV localhost:8888: ["OK", "75c178ee47aac3ab9e984ddb85bdf9d8c68ade0d97e9cd86bb39e3110218a589", true, ""] diff --git a/tests/sendDM b/tests/sendDM new file mode 100755 index 0000000000000000000000000000000000000000..e99f3e9fad2e1e245672661ad689f4590e24a2f2 GIT binary patch literal 195296 zcmeF)dwdgB{y+XHPzWj}+%zIc#HvLRQv@x7nsSk;7KsAdT|f$@C9GVsZ7TJG1lvlp zu^L^`?!~oU)~&1TR#&m=qEUpFUB!sE3c7|}mDDa!QMBM{fA2H%N|?N)pU>y}`#gSs z{l49WZA;JlGIF*bDD8&7wcs*LJSF4~h{-6~J{Nxt%aKJ3S@)6Ctpn$FJE%r@?|S4D$lFTz3{vX$B!*vHFlhFY*j9o{84>s##M7QsZCTFno;W&G}Foa z)V3kmuHvt_?=OjwEB1VO{%IXwwdIX?Y2V$|V^xeQx7tU=s2`OdPI)S=wx}4@9@Uxa zLahZBP&K z9X%ZP<{t8C=pp{a9`aux9phN-8R{Yai5~KA?IHf^9^yCjQ2u9n$S2T)KhQ(|$MsOJ zAA0cndhl62^tZEmh@aj=Io0j(SnYgr5Ah3o@XLE>w~u>>@6$v1FYBTFOM58ipdS3% z9`e7Xhy3^SP|m_0ys3wLZs{TZ>>kQCOG?U0 zmM$v~l$6bxId%D}l_hf)EnZ%tEnK*C#j2GH%L9wb0t**vM(8mE%S(#=<0f2qL(anD zRVxD}l>y1IJW#gkChh2!lH!H_ip4jS+_ccYsI0u?m|Kd=N)`pIo63uQD_513l`mVm zQ2wmEV4P*Q%2g|uOJ>K;Gi_seN!hYR%a`43%~^^gWmCnuQMQ&^ODgDJw5)7lDi6y+ zllA*iNss0iSY5K{hJ}lkEV1l%wDQL)OY(p}$~1YjvPCPGtXh#?0ZY^Ts0Jm)OMKew z*#!$%mo1a_RPV}t6@ewIRkv$JCsY{Dt}J(_wr;AtkwNiiCvXy~St$dYqpnz7o zN-D2Ob4crGrNzrvsopJ-e(6+!vVb&!@p6OtvRoZWsw}-@xoQ&GX;IlywQZ%!J6Vy% zMiu-OfpV?1ba_R&PesW8%|J8j<#Je|B^7?jOo}Jx&!|y(vV4KEQlq9)Hs7l9z~Y-$ zE|PkeuS{*13%^X22W4HUvQp<*GLz<)-XPf*FA7MhmPutNPLvK&yl7>qR%&*vg{p;$ zZ&+CDyJ2DJqGii9Xu;r?n#etdZ`ky@T{%WB)$dKaj2%wyeK;YEDR6{iyQah;1ru zmakW;e93j0*SZfz2sBjh2&Sji^ylgedP1te)7feO7fqk;2beiyun{62Uy`ETJ-@<-vVG$@?MROa6VQ8DB`=j`9?d4?sRX@}Y1)`Kj{i{91S$`8;@>d=WfB?t^!d`{7;W zm2hoMdjG!-ZX>UOJIL>ZJIU{ZyU2e7&n9p9$~<3g@<$P$Oa27hL;h#DPQD55CI2hD zkbEn=i2Mz>kNjP@pL{pGlKfxrAbAJ8mVDorX8T0Qze0RH`C)hic?RwajpR0X6Zwho zX7ZEZQS!@h9kr4VM|_O@40s!PHat!~7M>tK_psSMo#f*Y-$i~gT)Qp3|9jvz^678~ zc>&x>J_qh1p9jw-f4YxZ4mbIe$?>0jG4k<{-vHOi%ivz}=X#mPEhN7g@kQk8;6CyY z+)sWtypsHWc#!--crE#3@Cf-+@Otv6;SJ=?@J8}i;7#PM@MiKDJWAdMZzcZ+JVyQ* zyp8+|c%1x8c!K;JcqjSy@GkO9+#j{I>HU8I+(tea?jYB2KXsCyf_NACY4B|Fv*2#> zG4NdS@o*3MM7U0VDcnmw171iz6JA6<8}1{&4(=yk2(Khx3J;Pmhu4yq!z1K3!|Tb{ z!5heH;Em*W!kftNgEy1^1|B7EfVYxA4v&#2Ja%@0oQ`* z{r^3B;N~nk?)6RlOKY+$-jr^lK0+c-tRo*Hn>iHBHT-U61~1Fs~{g$Kz!@LKX|@CbQ6yq^3jcmw&h@J8}^@Fwy_@Mdx!JW9S2-bx;T z$H;Gnw~^ltkCWHJ6XbWnJIU{Zcai@ZuB}V&{|#^(c_Z9G{%5$8{8_k*`~`S6`L)UU zKlv+&&n5rQH|YQ5uOnV3-wyYZ?|>JQzXLBK{}ApY{|DSp{wchYyaOI2KM1cSKMaqM z{{XKi&)jdePXqZ0@J4b6yor1WyqSDBJW4(a-b$VgkCBgsw~>#B$H^~-C&=^Qo#Zp% zUF286wcFGC{~WlDd>-6Ez6kClUkZ1T`{CK-tKn|)+u*t6)o>5_op7D}UbvUM9$rZP z5WI-|_i!KiQ*b}|FOD#0SY=fY*}043Cg+h1Zk60dF9G2i{1&3*JP&2i{D+ z7ak?=fVYx=4Udr@hPRPxcCqIR`Nf?W8}}m+sI#l$H}Ac z1bGX*lY9rfi+m?st4{C#yWlqRINU+r4tJ7w!d>L8$@xF|w}^L>cf)hZ`(WMPLw*8W zCm#&=k`GI+|C65%FCrfe_mR8de)3#+CHbZBAo(T7ak-(5nf9^IJy2$?u6Hqp9XIr&w@9Sp9^my&w)3S=fb1pm%>}gr@>?7 zSHj!Kz3@2sweSS_Ja{MhB6t`1Qn+?UdjDSmw~?2_9psg8C;4q~7x^9VZ1Os|oBWsX zT=HMRJ>(C=b@IpIUh<9bLh@(eMdZ)JedMpe{p4HWmE>>0gXA&XA8X0qMSO((BX~Xe zKj97J?eIqOFX2t(hvCiS8S0D2@)ITR4{s&knPv8~82KQ?w~?O;kCUGPPmqs+carD8 zyT~tuYwOed|0Qr6`4qT=T!%Z!XTn|N*TA#Me+qY#FNEikm%=^d%i%hC0PZEf1zt#g zJG_YeM10=iBM%|oPac6+lHU&xl0OKqC4UqiA#a4&lm7|cK>jSek^Cii6Zxy~X7Uzz zl>AM2EBU+d82K)E8~G>jIQd?9f_xvmll&`q7x@vmR-4}c*Wr6FHu7%7JIMQD-O@>Z z0^CJD1fESkEV=$kemXptd^Frc?uP5+7s9>d7sCt5r@)KIXTW{rv*3R6+3-s8`S2k5 z5_m27a(IM10Iw&%8QwsCJG_y+1kV>uX3G(&uPV&3pUE~|!+Aq@k|F7XT z@<-qf@;}0za2NR_@NDwO;coIL;ko30 zfqTebgzMz5!oB3J@IvxV^^4f@Q$)T4@jmi*;C}L5@JjMe;6d`w;I-uchDXQ`!t2S8 zz#GWB;f>^*Fz;<5&&22K&E&_!qvQkOt>h=eW8}l(ZRDfiaq_d_3Gz=hvmbYok3oDF zc@A8=Grj*`2)B_>f;-5kz@6kX;4bo+@NDvH;BN9lcrJMn+(TXp*U6W|z2t*3%=#CS zmm$80yb|ssUkmq>SHmmGL+~K^UGQ4+`{5Dt(KfUE_2h5id98u`cgUxa{Bd{_`9^p% zc?sspQS#6FnB{3De;WD3$e)L|k#B~_$+y81 zf;-8Nz+L1S-&Z*u4dg4}jpP;ZCh}Y0&E&VkqvRoYD|rMSBYyziM*cf^ zocu9(g8WH%C;8LxF7g-Q+Fj}W|24RcycO;s&rN>*OTGi~F7kKb+2p(6Zt}mMWtK0O z{GW*TkSE|e`2o0>{1Cj5{Cjv2c^|Bk_{dLy`^g8xE6In$gXE{fYst@sN65#*>&eH% z8^|Za8_B1_o5%~`&E&J;QSy24R`SL082QiOZRF+fIQcE`1bG#_lRO0PBEK81sefQb zev-fccpuzG{u{W1{1Ld5{0X>=ya}F7-VAq>zXH!CZ-INrcffV>ci~?0Hh3X<99~4e zb)eZ^KJvYY_mdxhSCW4X50W2&*OF`a{iX={ovxW8~+<+sH41$H^zb6XbdDPI4XIMec=bk@Wt5E!;-F5bhvf3U`wG;V$wg z@Off3c_rfA`7U@9`CzPHHIsjW_$c}3@K*AD@ECa?Jg2mgA4GhdybGQn z?}m4h55o7uyU6<-G3VjhJ?Z`b1h|dd0e6rOg*(Ylg}ca4hi8+Y1$UF52hSxR2ltRq zgzMy&!oB3v;DzK@z>CPea3A?~a6kD1cqMr;JV?G2UQ50l9w9G-*OT7}Zy+C){QY= z+sNnP`x_4OEr@rLx4>QGZ^5(4--El!{{hb>{}k>a?||#%2jO1wZ{daH-@}W@dw*w+ z8$R;>a6h>NUP*ouJV<^jyq0_K%dqqFN7z^m%=;ASHio(T|o%~j~mwX+(ko*pK z5&4~PANjp-KY2a8lKgk@Ao*kPTJoph5%Oo?_2kX)2J+4DM)EE2Ch}HzGkFXiC4V2@ zO1>K&Bi{pWBi{>;lkbBk$iISjk{^b5k!$$;Lfequ|NA7r|3hwrJIE*Ed+$#26A|ws z9}LeX9|m`mkAmltj~;54+e3af;&t+=ea(0;`B=mkl8=WMkryYw|4-hI?=AbuCnKLq z@;rEu+?M?Jf5>&jN62Tv>&fTB8_4Iu8_Aczo5*i~H z!0X8~@coSj@_z6}^5fx6)M7)!H0o+Bt7@kdj1KdsShv$;tjq~myUyXR3d@bBd zz8+pkUI#BC-vIZKKM41eKL)QPe-a)fe+FJl{vtd={u;cVyanDs{uaEE{C#*6`6uvZ z^3UK=^8N5u@8x@jmkLa6kD(cqRFz@F4jKr) z*OSkJH<14n`8SeZi})t;>*3Ah#qcQkQg|!*DtL@M0B<9|1s*34!V}~*@J{kDyo>xE zxc2Mx{=Xm31vc{g5$_=XE!;`|2;4>f1U#GkPjEN+U*Ngq&2SI-t8ksX749Y90WTzf z7hXiZ3+^M2!~Nt5cqO?VpMwX<_aVNP{2)9+egs}muHk!n4dj{dM)DKjP2>aN&EzM; zqvRvtt>kCIW8~+++sJRiyeLjS7V!!43GhzxOW$t!!C=P5$|2gKKtufct`f&5R1ZzTUJ)6Bn#{5ixolm8VSC4Uv(O1=#qBi{jU zBflE$7AJof@d@%>@J{mlk!HQR$oC*#`)zvv{~T^3_n|xv^8JW+l3##zR~Pvq#AlO# z2X~Wa^fJqrOWq&uA$P!a@{{0R^5O78@-yH?2yY_)?qoCnX7YuIkCKm zTwl%P*@%ylpAT;(zX%>9pA2s!KMwb=IQbOBC&+bpC;3(IF7hMzK9Bah^!`5^@iy|G zz#Zg8a3}dvxQpBm&nB;cyUEwUbIDJ_dGU}}AzmjB!@cD9zzfOi;YH*Pa3A>};C}M! zunty9{wKr-$v44k$zOy=$fNLj@>X~Q`CITt^7r6PZ=S`CfP{`2l#0{2O>1 z`48|oc^~|KS%SPjyp!Ax?;;-p*B(mm|HI)n@-yKM@`1Qco#bN>?;;-u&nBM)cax7m zKhGu4L%fH423#jEfP2Yj!wbm^;YH+&;68F6+)us=UP)dF50c*ouO+X7N63ExuP46; z-a!5{PmphicarabcagsX z*Ba9M|3`2e`KNFP`M=>#@~_}7^26|K@)PlUtZwoj5T8rl7td=R@)O}Y`4G65{1kX0 z`DySX@}FT`@{yl`ct81QcqRGy@F4j`@LKXq;Suub@Ottq;SJA~7_L2>-v1+T8~Fop2l?;d zPV&d$F7iLYv&o->yU91hbIG^BJ>=WrI{DjhFZuiMLh@bkBJw!gN4^*CC*O+Szo;bN zhxj1*8TfukE%`yjN65S2_2e49@6GtAJ`%2zpAGkt zkA)YKUkEQEpA7er=fVBt`S42eS@0lvZ~XV#YRRufe1!aZcs=FL;g8jC+~oJ$-jaZl6S$2$h+Y_@=QFx_{lFv zKddA_9`Ql)LGW7gVekmK59>?y~2Bp(ZJA|DTLCZ7n8l6&B-*`$d@;O>d?{S}eR}_24!4p29PS{$3GO6c2X~SG0-jC&OSqf79-d47 z5Zpul2e?lDXSkRAbgW+$l5awM5&0`{ANe-8pL_?rlKee*ko;qKE%|5g2>HL^_2gf} z8_18q8_Bi)W(I%PW}MgOa2hNko+-t5&2&+ zPxg^Nfp|ap)9_02=ix!}&G1_CE$|5W8}NGaci;`=yWx%Gd*Dsv_YODvM>F~7h>w!* zgSV0&g2%|ehqsYu9%mjmPCfvhAU_G-Nj@CjMSeP5`$KyFKMQUn9|L!gUjTQK_rbX8 zBEJX!-bFU~B;?~J&x7ZZ&wzW#N8rDwrjti8?s>@zkWV4`HSi+x>)<}}(?*-^=qDfF z*YryA1;{5zUJS1#{|5hlb%fl9_i@q2Jl@>`Hk zEBWp47e}}uscfzyD zKZLu<dHu7J>9pt};JINn`yU3q_XOlO<-Q>^1bID(Zd&pmd>*R-Q zW<9;+;pF_E{5!-Kk?Xj>_{g{8xPJ1vh_57n3-LknMvU{d_?!kfq+fH#x>4jv_c z6y8eyM|h0<&+s<#=izbkSKtZqt?*9rH{o66Ut-+To=ormI}vXqZ-YC?KZZNW{{?rE zcfhmBzl6KVyWqLx-Ea?izX4`_baDsWOMVKxkbES(i2O{rk9-W=PksTsl6)dONPY>t zmV6pKLVhK@p4AioaYNPa!MiM$lvOx_p29~UKGh4@zT06a#1E4+=o3LYn~g(t`( z@J{jv;9cYo!nLQ;`~Tx`8~H}KgZw$TlYBGWMgBTGoBVHZH+c-6Oa1}eL;f*bC;trY zCGUV2l6S(3$iIR6$bW$Q$un_3sw6)i9wZ+KuO&YT9w8qAuO~kP-awuWZzLZJZz4Z$ zq}e~3$uB^BlzcM0m3#_3MxGCEBcBD2lV1l{ojXp8~IAO zgFJ$N7s5#%K)j3m7I-#!5bh?w1D;D>2ltR~fa~PHg?q^#ffthh0bWGD5$+>@7Vani zE4-3C3J;QRh1Zh*9UdXy39l!AAKpOz5xkLn54?$dFT9z2A3REa5Z+4uEj&j4J-m%P z({A?5IQjAL1o=RCC%F^eMLq(q{VBcwXTfdcqu~znv2Z83Z-kkzi+nudv&k=pyU9K9 zT=L7|9`c!RoqRUjOa2phA^G+2BJw40ANex4pL`{}lDq;QB)=72OTG>sA-@A&PacLh zklzDuB>xq>iTojWGkGICO8zH!EBPjPjQk~d8+jBSC*KB7kpCUtNgjiDk-rbu{+!=fU{1Dtt{vAA*Ji}p@(?i}Lu9Ms0Uh<*vLh@7LMdYL4 zKJsk1pZt7yCHVw+ko;nJEqNY1LOugtPd*dgKt31VNInnVM7{{#OkN6)k}rq1l9$6{ zbTzfjb|6dQck(a<7_mOXe`^o9Kfl{^FEOpLrAyp8+>c$|C?JVEY+caon5?;_8FYtN+j|Iu(8`T1}M z`Gs&N`DD0@d@4Mf{7Sf+{AzeE`8Anlxjp2Ch}X#<$Nk7l{uG|y3&|HEpCa;7xR3k> zxS!k)uOzR42gz@R*OIS;N66R1>&fqeH<14l-bnr{coX^W;LYUiX#Xhrqlj-M|06s` z9>#fTBYzt4aq>;@1o=zwPVy+ci+meg`%8NN|2y19{x;k}{yyAE{xRG|{x5ho`9id( zn>>N|T=IQz5BVXuPW~O-OWtd+S^q+E8@!18M7WRqB)Fe^1iX@b6g)_t4X-6X4;~>O z53eVm2yY<26y8Wa1>Qui!<)%x!K37J;jQHJ;4$)IcpLdLc%1y_@C11Uyp#Mkco%sM zTzfXX|A*l=@_XS9@?HbY{hj2$LA;Cn5qLJa4f(jq|A_cp^4BrX@sKwmUMJrK_mXdh z7m{y*7m@!R?jwH}?kE2cUP=B5JV?G5UQ50o9wGl4UQd1)-a!66ypg>35c51Xk@tr; zlMjSP$(`_4^3&ik^0VP>jDcnXr4elVn z0`4UD!d>Lo!n4V*hr7v(;ko2KxQBcdTqj=*_mV%1|9)a2`5MF*kypWeHu7S)gZwGDll)n@i~J>cHu-CCH+d^OmwX4@L;fCIC*KYC zl79j(B>x;)|f)yW!d78{ls8U&C|B8{i)DKfrbJjc_mdU*Lu0FTjh)PsBLmBYy?)e)1N0 zCHZ!&I|a#iAikFTJ$QtC7rdT44sRg;4Bklo1-yy;0KA#}8+erbJ9sPk0IWa6$a|k` z_P;jry`5{5rUod;z?WyaZlE{xi6bd?nmZ9)MSp-vkemuZ7o=*T5s>zkt`1 zN8kH6XfThzjcytL3|f^ zD_naqz5l-jw~@aOcaZOfJIVhEcaiUfXOsUM?k4{lo=bih?ji4n>*Rf%W<9;+$HNQB zFG713k!N6?)<^C@K7R6(;FaXV;X(3I@LKY-;Suul;PvDa;0@%H;Em*Y@FwyZ@MiJ? zc$EBVcq@4!JVrhr-bTI{9w+y~6XYx5o#fBp_v5_M1!(l52>sC6E8yjE|6O@Otv7-;8e{kHec^G25Z9{I}5N8vjK! z^RKAIvn<|f@#`$^ME>e%R*zZY3oY>uOT5+FEb-S`;$4<_tH&+z`Ih*E#jmn>r^RPk zJc|4?#eQn>xW#{B@r1?aSv+^M*`EEx%$7GddMs{6n66vAw{CJB;EPjH;>n%RO;tdu*(c+C3w_Ci) z;tq>9TYR9!qZS`z@m7luws_3qLoD8A@u3!vTl^%8CoF!l#XBwTw0M`rPqDc6^3i@Z z%;GkSpK5W3#fMwmY4H&jcUk;2i)UMWq{ZD9cUe5w;-_2OWARZI*DZdA#l03k)8d5| zKg;4p7C+nKK8t5t+;8#G7O%AUITjCE{9KFIT6~PfBNji;;`J6EYw-q)pKtL-i@Pn} zWbqt}H(Pw1#iJI#z~ZeIA8+xP#V1(2&EgkYJZ|xeES|7<_+ZLlax+nDdI72(w zeP(ZYv5(YLyiaX8*uJN`yE|f})r9q6``f9snsOX$e>Ig>6V!w4Pp8sqVtTOs;Z#~p zNDsE(lS-?J=)v}Nsk9or54Qh2l~xnagYAn_X*Jehh%-##8K*>N~;N@)IXJ06Gf?iDy=4n zQvXz1O$?>}skE99O8rx5H4&8hr_yQyDD_XJ)x=NgpGvCYqxh37OPCl~xlmsedZ1CSX$kR9a2Er2eV2ns7<| zQ)xBPlKQ98YJw&8Po>qwO6vcgWc}5IO3r^OttL`Z|5RE{prrn(w3;|c{ZnZ*VUqf% z(rTh4^-rbM1WD?jN~?*H)IXJ06C$a9Dy=3$QvXz1O@O5SskEB-Nc~f3HQ|x^r_ySo zBlSoaMe3hQtBHx!Kb2M!5~+VGoo}SCPNmhvMCzYPs|ktJKb2M!5vhMFttKE+|5W-a zBb|{-&oa_q9zp$OG+eVwjfPSWHU1qVT|wJdPH9xN>5Y{BJ*6L{^ae`TQM!iG zYbaeo=@pbNq4WYu&!zNCN>8WsC6t~(>GLRkCZ$JEdMKp_P&$*+-@l*U{)Z^NkJ6t} z`eRDJN9i{yy_M3NDg7L!H&Xidlzx!X8z@~z=^9F}p>zeMS5Ufy(hDd(m(nvSJ)P2* zP2LoK7$O-Qde_Xr)*UZ3#_{C-YCI2K^0w@& zRh&Clue#)3iPZGaXMq#+@Fnj{B60X|cXwimOb)kYJ|S@#3uNEa@zwtAt7W5lGgtPL z$+cS#t?AN36`gu$ZXz`E(`ljU@oAx%AL&(Vy0pMzJv_Hl4^NkfZBothuhrpNnpLF| z`{hs)mCypGN<_kpSZIxSLn6X6KMl`~ho^sJWN?Lb^G4a+G2Gbtsj+pAb?e=-HL`t+ zrKlb$YO54AxvaQ;H;%YN1zje4*F-B8=yh{rW{$?b&5vlBoXm6Nyv$VRCG_fxYR3Aq zG`u?Tv9DAqS`zDIKGrNP+ubou4j$F(rpI1(sSw%rncRwv!*^s$F8z>;ninN=c@nuy zO6DSYbS=@(9b(inkePTyYLM0zj?`&0PEJdr$T%BP`Pq7Srg6$%G>>moZl@GMYH^+% zfBidVE!4a@dHfr2{Fh`_Wz?emSF+V?vb*J-v`1I6$rc*1My@BwF{R1$qn*TPvd)ZlZJqX=X6e){FP^`erWrnl5I9DUn}w=Ffnqu7ME?RQJIRhuJ{EDv0WH}<>hB^NVsP2d9aO_{ys zc9nNHbAVBH<7n+(bzz1xkG!p_V;r^p5}~khtg2{+Ua!{;*=iIjT%$^YuDa|S_0|wG z_Q!!4uSv!a8yWYiGV;r4-(!@ZMpa)AJCfV$1`InW#R#dBWi)Z(ICY7HGpmffUwu(M znHm&_)dFHU|wJ^NLzRNX+_LLd~9_ql?rH zJ;w-lm|a#ijAU^kO0u#`cBsp|4#|a*OnkA_xD+R=`oCqivwFV%QT^4f$$r?9c>Swn zb8P9O4zZy~1~%EQ8Wa7rM9z#1D5qHVx+}F;ow=9G+)Gs!drgvIjP@!_?RA~Gmq+bY zS7YpK4&NK*rv|UT?Jz5$9@>+Y_|uoFkGCX#_%>PU0Y*-9nfpw`sLr~zx7r#u&z`Zh%DVNlgKFQ*byj;@tfi(}olyDdC<+_z z(>jK6)uUsmo9is={`biK7%UPQ6OEnM43VJotU=2qsLI%uVdg){7!Gc|R|5N)fr&yj zpwwj^=`xRB*Wb^imM%R-z zAND)Rw(51c8`U(cys9><7tOffPJ7clS8Bm0d9LbFjBBJA<^{K?mpUhz4`ag~h_FuTnD&g3aFwqa*;+fLcmQgf?1n*8YD4Q37M zl!TvC*LkwpWqI>wn)+Ws-GCBlmAqzEBh{bpDl^*FC2bp3J5+5}FIwQlu#s_1)LwJ1 zgoZb$OyvUq)88|+aGjBN-Gsvjj7-eZ43VLvrKVQxEk7M2!^V5*jN$67M#1E0O@pO< z441y7LMIv3zV)5daqUuMqaYIf$bq9ZkmN5VX*QTqBBOla4XP+c(>!Y}%=6~1$(#x$ z*-~?-rEKbbdfA2;Wm7I?Q!lBqg>mm}NjM~*#JR;%>$=Qp^LUB*YHU$e=IPXIxp1~` ziR5h0iP|>}vDcNwJi#COuRg7AnnRYC5BCn7tyjI8@oKz}W$TUqtSfs(!ZKGoBy771 ztN2i6*V8nuuIwRWgIzW}(ebiO+N;%3wVddd(xXocrIEbr@~+LBn>Qyv^!41?=EC+# zdiZjOUN^p1L7gWfcc;e{I5|IDkY&pceXoZ)a=P;;wwBE@jw4guntg%e^UocV zl@rYmEzfeOweWch^5*9)$h$soVe&aauiBEKhuZYfF@0idxfHb}Bb_$cH}#%8Dqx>H zzvAk~h=S3N4%LqXk$TlULE_i~0y zRZ{EIaVnl~@@nNcTQl;d?TqLOiMDT=uE}9O)kC}V(O>8_J8v5&lree!ji*#47Ed0$ z`V9M~Xnt{@s)CHROVtyTwCCj0ZyZqP{YSq2(f94QpQ#QR`al&Y+gSG2tBz#ewok8H z(MJlW$_++qmTO!t zSBcT4+c$O1%y=vGZGP2(40)pKTebJHs<(o9wQDo-f{BcZ&--^4Wc;neo?mx$Mzfl9 z8DC(GsP@WuQ=T{5-;|0N8`WyRv9aTyMp_L9W_qWQR;4l1uNi4IRWQ@fsI>X^4|&@% zwET02XX$lQGxA!dI~@`=Gc;FD=d>(`d7-{0b)FX5mRHracJ&~s?F%x&(u{H4_^d)- z_d~aQvax!Y=`u)b%~7Mi(x6)V@#;P)Au^yOLsUC7$Bhsb-JX!GMuO}cc&yceX9L4D$m z^6T{QEpiFYxkx%~tbAU0s!KLc(bvfgr~9(i^YpqggY@v!Ty-5>Ul7`>hxT{J@)k#>wRyxG+)h zg*v1yC)zQ zC;QXneyiR2Ra-Odo2JM>^jb!BG~kwDZushxCLbrmxBhkTaK?=%P9AyVu8xmXd&{`= zZZcN(llY353{qFsWu22>7s%?Jcu6jje7S|my|#LmF_Khf%&faLOM2UP`E>9IesZSpAlhSxmR?^k@Vt@nKUrnxe3-I5VJGHUh6;E{eeUQ;)vYx1zwSDM3RbwNg4 zhD-B22an9JxIpE%ZED7Rm8aQA6^&E3^|^GEalPkl>vN)-sW~loi%3CezuZzna<57J zJfTjtypv;Qw$GO?B>h;j8`bVL-Up@EsB~GoCoNst?oLauY*&*soL7ktv^&z$i`%uM zX;q$_sHH^M?`74I6PL>4zS;PJ_lbO zdjFDpvGlD&v*mP3-zuDD-?Y?eSw5JSrRPNRs{Z4$-z~FgZFphUUvYX8Mrxwm{}ziq&ur301Pvty<9IdX>{J5;6Z>levZ$#(Za`#HNrx7dF% zLmoTrHF@%PLERF`scynliOh-0xRLnH=j#5rHLvRXQ|xz4GzAcaM*IcI_$dJ6cn(mOReY!J4jgLQVR|BwFzp6EABsrj;@{L}#t+$anWw*@KdL^bL^H86gZ_~z1 z3(u9Cxi@2a&CY;rn){0sJ>!$a#LomXw&LtFAc2UKevpp~@MK1bHfvdE3NyDh}uwZQGJPNVRc$jqGxCe3Yg?PIZRV`A>F5)yrkg z*{Rq0)diBcAbH3svVVAHmef91K6-Fw1aj0>k-YzJo6_B14}D-9UNwg-AC2B-Ob)B| zOM!Nj{X=G)FRqa~p;L#XsH#uzm+?ZzJEIoH?ed^~U>~{QCVclV_3*J*l5^xHS+Gai zu5M12lxsr5+#;iEPBgJa`h|?~eX^>$GAb^Xck{EHY7Fm?AW6x-GLrx6pnZOujOKd| z+86%wp#3LjekNNb{b8y7{D0Z2u2W-H-Guwhe2r2hcE^qJyM2;uOP#^9)S8GogA+va zUP_+9)OG4?AF0BPN%$*rMiV7cI&(feS8g3q>w_dUMl*+=)uvX7QW z1@)Ip{pIc+x>g`~fo18TK3Qt28qTZ`QMWUj%2Jm{j9mM`f~;&cCe2l| z$y@c%=jtrh$v7alhh=(rOqL#=FHf(sagbhj>j*9Ju+-ETmlTIHN2x5Ovq?Q=$}ZF5 zLYiF$ywb)%Vg*F71C`J+CSA< zk)i5a$yhz)n-dH5?KQdHEA-Gi^6VQ}kstbxKJkM2m;Fu|=EGOmjP9WZ0hw8!qKB@u>7k#> z_?%n}K>cNMca)@m=gWCBAOG~wJR6=DI(A#zBjNm{ySt#yC-?LN-9y829CZpd6@Y`dHOl>2w~WN?Q>6tYe_roUpWVsHyhN&@_s$$EFX`(cYJ1)snJo8~ zO)tpfra5iNYaS$Tr3c6vs+;hOxXdATek`Rj9;GZ3IOF?$Mw`E+Lc{%3Q7@2(NNJ7C z*z>CBI|K9dNtxB^eQ4-b_0p30n!Ko=Ku+rUF`T(bZ8P`0U%iz*^JSNN&0X%sF8ZXQ zZh0G+Y(8J=;i0FifJvF7%($h=xX{o-6*nXqmw9-T#Dy}asJL+EcV=p`q|`i1WREGs z%X`0>CyU!r8@GcYs_M$@*nHrQ)ToFz4p!P85QH?E~f4S0ej*N zIZY`aChk(6-#zq6b%d7bF4ZjIxlYv&PnOL_KRmH}=$+=~T(wzUj6-ixP_w(@KC^!% z+cET7$Ls3)Os13TUB+TpcG@T-^L}II^t5DI5FRU&aN|+x5p{&{^^SsYsjPqfP*8VE zpP3W)+Sk7*p05T9W93D9#hQPpqD;<8)PAI{%E?)3KpdmSpSmkE^C!MxuX;;%Nk-3+ z=*0CBsiHnthn)DY@`?F%b4JMeR4;k%s?P5%%XoS$c(}j)j=6FvPCn0GJyX5TvsW*W zZIf@YSMQS@jd2w7XL(de&7VunNn&A1osd;lV^+hM+15>nek=vsx?5G@ z1XYEaVmU>5Etfl07d1z8Jv7tN5iyR7k6%$jI5P z8ZI>5(f*1YRNac~12y|Vk3;^rbjYXX0CIR$4yEG8Hu(kF?>WtBpm*IyW$4(Yr)CAF0Q!V z$XK#VR2f?QcoixNpf#QZ2=4`J+F|*{#2@Z>^@9Usjp>4690f|1Q0Eh19Dh@yA`#UA9ddp~3@MvIcb^ zu~f*oP32GAYOfB;8JGD*=DOW-HAwl^mY*yWk^wiXq#PtD+gi)}9JG&#<%O=zE*PDV zEX?kpI)_?UI+$l4c)458nC|GFo88_=%8=?G>g>yvWUrYdIk#Uaf61n4QWm*OS}%@# zbzN4yo^4FAzdicA-`*jQhSE>d`q@L$Vn_SgJbTSu0@i-EtwU81{p>GNLZhE8uvhO@ zt!C|K9X_)>$L?x@#i?#)JfTV3-Jr5oD+-?^JTlW%jXqxWa@pj?QO&M+n$lE{sJP@u zy`ds(d?i^X799_(Td6eNcF9rF?PsggD8)3cgr@~3FR<6VX`swS)jiraGgRt0dKO$p zz2qUX{SJvv-2b8KUDKV?IXd2-yvAO0&wsJ6C$;YtvTt%Xb<3CYr0&0}b1eB#mTryC zF<5nu1u7}~8J(l-xX=t)zZf{fy(J>uBx<}BQui(6{(W>#`5x{-vaXQ&evV8A)aE9oY4>8i(X$wPcRK+oRJ>&$2}Zk)%d7a8{RLT~D! zK$gvDcQxg78_Ou&LqGhpnx!6)n@d#M+FpHF_Losc-65+>V6Si+v^p3%}4T1)x#kJniOMiVv;O6si|UUTf%`S z)1YjUhoXvNHMyN+T!?yaslJS89Wr@Un`M?GH&6N2ltjpS+Ynh1l(oLlhyh0BGEbBj z++lJpcNn#7AQzE-bdnoUMQAn_?$oq(lFU`h=Bsf=ij;_}M@BVU)nx*y=CG?HdfgP6 zqV81Jy{6lz$tOGe>@~NlOLwjOrRE`_z3th?TXX!+>25zol1H!i@Q^GSJ2iXtNa2q9 z#PJ`<)}zmJ#(Ym&_I#QD%B0r#oJ*E&6R*FkK5J+=d+0AWs%|D{P3{Hds{7rpAUrf|xLlw{FHr3$y}_kk zr-hbe$w{7rXCHNHbMV-6zlMrfp4U_j|0i|ZSvgZZeCVnM(Wi_HXuEnT-l>Pi8>O|W@~ewc z7J&tlk8bMn7$n6{?2>zH$8pK|fb`q+vS&)!3%4ZtNJ&+{OP>Fc#s@hvg+58zTwD(i zGH$l=k;B(&+_0YSnr|xIdhs{vh}rVlj9O0%oUYn^cxgm^XGT4_OX@`NiUX}2`RN_*Cl7Ljv$l}xb9Y?6T|RS!M1I{8?2qjU|m%4y8&jsCp7{j)DE<&!5JS>)O& zgz~9p#w}uM{;rpqC*`cEyOEmXq~FclYV!1zebw>yfi`)W zEt4s)L*C4j8C9X$Q0!i(JJpl9ePEHSL3{97k;k0Pw@8L^q={SQGoSEWY5kotF3JOD zUg`;RgdUPxl`gfOVmx8WXNB|Bw@Rh`<;$_EJ(FT-kLeC%5b{Wan8!#(rp6QW7kjmu z?<7AKSG8BqGsb5=>Y>?QeWxVR5{I9VmM}k*p8fwpL(G$b zoTzbqCi`v9&W`u3{e89SG-dM1rF>HPWniLwq^~|=RQ>rRU6z=nO{W{J*K)bp`0}k^ zbQ1GEEUg)oD#~@zSM4X$-fN|~z4B*rSxSlR3kn3rt ze3&`7<0PXVGtKKsD3EDfPX(cE?H3tit#N$GPflq^d-8fW&X2l&9#z+moIe?$+SePs z*@#!$)n{{way3N@9atbY!uGu~H9~z-+lwvRThh0y9-mO-eKP;E)ARq)_I~NxrM^DZ z!o{fcJmWOT7lLGQ~S>Myk0`rIkp@xcgNV_NTU6L1 zy6lWxu91sIJ-8j~dEflZJYZB)3VegAe5tHtsk&aTPdsR^u8|#$fh2sP^Z+^1xB_+U z%Jx2bNP5=9!_psB-J}}w#R!=pj8hv&>n&;tMrJrOjBc8EF!`+>b!w!nmh1a!n|y6V z?pN}ykhM0+Rz?i8nxmsRb$uJPv9yQk5C6ygQ$2U4=1s@$pBNiH{=G3u28NjfgU8Y0 zF&=Ntr%dAs)2KXLjg2G|yNR=k%)YGK{;nI&D?Ey45^Am`6Y4RNdqk!_DGcC*3J#@W%=Sf{D7s{iNfO=jU|AuiF-fkbL z%k5ToOFvUrjNE}G<&qse?y|ux9yOI-D?QGcyw26bm1gXFerwqv36PzFMu2%AP>LdI~<$Dp@91hgZnHs%2b9SBHoFO+DkvoHFgW`N>%_PQWxNSjWfa{Kry1`RFF` zlOI>{@q|&uL8&ZL*Dta=Bxn5SMmnGBnG_vv^TTF&Pdi#sk4x25E&@GNC^c0TcF&X3 zWj_C?{$|;K4eu}eddz*L8>AYm$Neuk#{O#ZEywP8e>z`>8+tll!DF4TD_Sh)YqRW2 z=j&&3KL7jkb)R&y|M~g)M!pyzy`tyyHQjh>#&~LZd`w<{$?XDDKFK%0k1`={etY43ztKe$_TvUy?O}nG^R1&Qn)` zEL|R)Vn1ivb6TQXJ~ULjjhiWRf%jCX9+H)bLYo9vykmY0B~uOgz-fwn@wFfr^}i1*(9*y zgH+p&`f=N;(`vM@<9|?IHENmV4csbyVWZ5tQPvg7zK|znm4^Xyd`m0u+4(L*<@W&9cZrXd_QOU&-@<;&K&)77J?am|J2$y42Kd-dOClfLeI``Pj}*c;Rr@Z{-f*wGu1T3?or z;*3u+q%F@eKhiYTmt{>qu}}KG>J~Y2u!?si(C9moamD+oMs}%2mOPE;H|u>g(fu!@ zq16azxg6z7;75W1F`syc0IouKajVeL)8qpYq6 z?gSDDioQY7#?~d+u_bCXsh~uOWMCpQI6Osk=Y|aHaJ%a^|NdXyc7|tNui}N%26f+k0{}HT3l8 zM|{x4T|H7eg*e=|bvccjZAx6!bbW!L%&BOun^}^F-3my-Z`v-=Jw5+_r1$v0(sz$6 z>4~}Q|Ej;>|0)lBMF&k6eM;?d%-zDTn)PH?q0Zwg^sFx&!Rue~|6QJmgRjJhQe7Na zeB(=+yFqUCiA;T^2dyvLUiJS-uRCaZTE0m=*TBMLC4FfiK1tj<;+Ntl@s+>g4gahU z<>*cHTxb3=4k*t&Z`PKt<$G#kOjm4Q{%63TO79fbP3!g<5mh? z3SVV|Sr?)rU#se*lI>b}JwaSYN(GJ$>=F{#9a&>mEmbbj(Cl{}UZJip&`WSZzv4X6 z?~4;-zGla9%^mZ!j)#e&ac9m{2vZJH|1=z*h6QPN;dfU^EpHNpq1uYzr(iBv*&#ScEhGtgyQ*A? zjszUFjv5ZCanWk?+_YG4j$O@v+_bKF1y`-Z&ers?%VfLM@BDm4DnczvUtK3n`h{#c zrR~vOCtcm`TlIJGTo+jvxg|bQNa7?}a>P1|qgRFFx0Q;l8S9Zw7)y?Mc#$ZgJH`Is z5@bVtT6k1q>`8f{$~UJKh4T&e+Nmevz91f#F!G(|H;XBO9299FM+}S{30f{+ILM=u znY8hujv+=5T!AFqir>e>B4uTFIkFC6VEw7h#Z;Cir9vZoE9}~;smSi$TE3wE9qwzg zg!@L!w{M8g)9&HN^x$Y~{4Vt#DKugal!5xOjPk;TInw9{v@T7vrG+SB2wTktx*Kpm zv%T`qn&>ML|00o#L(FNfcXiRVE%euaB?M^CJf*g>n)m1=Be$-?Z99D?Do27@{AePdpA=bvjM-;(qrtfgM)G0o4#-kNdl7Ws8)(ET*S0A_6uGO9tBjl?jU z@#Wz}z&9oAein9j=WN#0`-YIq?u$6{5gvCU`&tS(Z&r}pTAbWe(x;QSF8#YdxwWWI zr+ePlp~_uR&i^cFX7Fe?K59t(c8V-3aNGQDTQYTsKiPa(ve^mHZ+BNkTYS{lJx7%i zd3b)C`)Tr%p2=0c0~N`NPx%}^6bH2EV%ZynIGX*7A3gnn;o(Hp^SHOf%LDOo1%ddO zqCh;@Hy$jGPwvk)YjJ#BNxb^l09(`j1MG2?1lTS*)@|i)DTO+%lz5D}qRJ6ORlgoO`&z`jdHUuiR z<+qRMSme0y2V4rQ9q?J8 zVoUzM{C50Q@<41f<}S0lo(w~NyW5+O{`tGykp%=w0{QFRkwt`#4UjgnFQL)^I2l&aNrJQsT42m+c+tc9(XWKk%&sXUn6G$h=oS>n6A-+jan^uk{eF7?7+6E5+> z-w-bL!utsq5e~ZNb;9SPk3vb}Zpi-Hs42lXw&>V0%(rcFj5e9-6-qYu3?|!-49gkA zUBQYrvULV~j;anN+lqquZO}YN+B5Zh>oCpiV`2v=<5;Kunq3n(Lm$CB>R z`MvN@b`*Q5UEk@~oA79sV;8XJk&%BQ6GHA=X|tXu`F6{0IA^%lg%d+>$Kmske<5$7 zckz4J$ex>QBrfkED=4#-&7g4QSJ5pT`##~}bua>jKh*T> zpY6YpNWr%mBQ~JgLwh#K?&_Lt!9)T21Y=j(=FDC#0a=Bjj@VfqQUlx9mwvXeWo7cuj@R; zsc$8g(CGnG1E=QoYUdX#1J06>`8A1gOW7&6wH!evBA&8egX~wkAEXgORYR$04zWW| zuW@(jbgOY{TAdnG@opIS&y$tq(5lF}0V;Ktthd#CL+6R`D*Zmi`D%|Xw{;#NbzZJ@ z2Hej9ZR6Y;oDiukNNqi-tvZmHycAfePR@%7jS)k2^0mo+0i)FSO`oY+-#%gm#?Jw7 ze+NP!JXf-d^;qT_ZKkVQf+FeHc_4DZ_>}{`UyYvFVgQqt(|ZC z`3I77_@SQoM=^erHNf;7MKIu-%mimL<9&jYgLt1f4Kl&yh=7>I1pmTqmCK4oSsije zS~!4MG)k0U&gE415L*`pudwezb6UMJoycVem9L4c&l5>)s`A$O}xae5qjh}MPj=z`> zUl8mJA(iw4@D$2o2y|0m2K@B(%9bB+e|AGXXuK&2tjSYXjeo@GUzkea> zKxsH}>X+mv@%GPe9eVbc7yMqL2L_vF{^;-vADmqHYxyh>Ha+`J?1W=p-E@U~a&~C{ zFz5bS>ReP!*>GYSc)6LQE|!0W5`!>v?=;79Z${94Cz!aR8WAzo(CbkC>%p?sIvQat z!{{eyEPJF6#pbx@$qxDu=|po)!C5VV{?&Cjd>@_f%zjE5D%)JKJD9leEK~7U^0Gjf zzCa9ZUc0i7Ci=&^ZLw5QBc_49ol#Vqos74ci<6s({vr-Nb7aO>E$aX|Lk8z+E^uFK zoV-8zNl9a{tGaQ@*Y0b{Pl^eABTCsj;4=QOVl_Lix1hob_H!n}q`7JEhMAxJMaFoy zAmLjytXl;b1*cFVPh2&t<OadMLlu(4(LU%2HmsRkn z>`3BlFkUJZ1u16)QIT>65G5&R{6@;zf!2|erPy+91MQ?vzEu7S+05p{TX<)Dsv@_d zfrJyjqr-{YN};Lf5gpvBq2)vm5FKC`ZpD+G`A0U6Eo3FlK)5xN^+LH1Jf8sancmzT z5}Z{tUNmUVOeh!>jxL`x7r0#vAv`-%;p>o1$+8xweDO0f4fK*w)VUPz1}qNz_hB zrh0xJd^Tq^RKA20Ba5)vrrlfuPN$R)#Wr<@%UTnChr~8_#`YFD_nipI5(b&Av1XjH z`wrm>me2Ll3#|v;Wp|RDfqf8pMe`&#;OtL*LfBT^8gRt8mzR1sGY9UF3L%6XZ70JI z<*3+2!CBkIAQz1F^|7I_T{vJjmN=b6k0lBp!DU6&z@HQ5FwEZdoFZBJtRPfvIWt4< zhq4#*AR9oqe=#6e`lfUg&*c=XM89dHFI=cix+(AE@r;hZkp{lGN;7l}A)`wIv5bRH4XQzT+D zj%uD<49jGbnLUC)$lcAlu9jWS*#2tg{sx&g?iTYTatTk@p+4nS+|E$yajJWKrNraw z?J=!;eC2$T&fl@f2JC3eH*9~mvBu=@MBf-Zo5Z1fyi+#TH^nJ?+*b!!PTB8#bNS8a z^L6EC3Y)0=;gzaAR<=cV)F$q&W|PVM^bfKGu}0E|0FY{7i(=(UOee!OzA+K;7f#M! zVW#~CI{l`woSI%LUI^y(c`_JSyY`E9HQ6acvB#8A@6z!AVNNGx$J?p@fo%bR5mBt0 zsS&vOdn(AFq2eV{grL`vez>vRW;-M9qT(qk-l0yv$<@Fx##}^eGMI~gF9a^*F2j-; zcc-C+PsUzG&r=TAc!Cv47qQ+U7+*Js(*e;K++)+DU$QY_I*PEBKrnN=z-n4a@pUhFSwh>wFEyKJE;a?GEJcV&V#S zy6-eH6Rue6zKta#>=v9`xs3VxEv?dTi~Cyxz3jBiBU&jm^<5E7BLOoD)gH zida-9XirS5^K=_d&{@4^ERI>K*Zf*?geu>=4ODc1YBOAjEmyU<4b^6RTDAF5 z+VNDI+sq{pO)!CBf>;#;!Pa^;eDRH@6A*Fq-}Rg(%(7#vY_jN>1);KbZ?@edzaTqU(6jya|Fd zUGxD=TaQls)X*q`!~*cIof$d}5n*%AWHT>+g%cQvF@*E9W=MPtSs% zw&vHB!%xw^&|TrDOX{dXSn9dY2+r+MI8HGLM41j?Qw=7XBqy;M_>oCpYU>SRDweCl??iYxXDUPzazm8e&c{Iqdo$7;%Wa6Kz@EFhOmtTu4Y=(&yk7B2xq#c>XBJa7 z5by8nSYg+<@iW{C;Q1PGzD|9lT)vJP@|=G~j@&mn*ebGY1KbRkCN4pynDO z>DprcTwKbZtI8R(5uV;iwF|1LL3j2(79nw>)*Bsb_jyC{{w<-3u`9tFVvRW$-Qh>h z`71X@SBMd43P-ggS8@YgbudCi-76g=mvBbCn=z2yu7@M&V4ex=AgB+C?jrG!x#P98h`e&^e)zt8#P1~{kRi@tn% zWPXSxML6tmK4kPuNo4fB3A)i7;iU`zr0F!A>2$Bfe6tNJh}0wYl!Mi?+DqR+`b&nL z4))Hj#_Q1Xql1-rloEb-xm5al3WY>2?3S5S$|b61A5MeNy@>Ih8q|9y<2@w%AIL7Y zmr&)JD34&QUoe1(G{g)>ShYpwL@@ENuZ}c&@iaf^br1UL^!H&UDAQk|jt)E+e4QLB z!oJWqwgYRi=YQc}1f?y=!xEc!YKStu&tu20i4wzTTJg~!sGKVHz!Us-U(?cdMH zcV~8u)Wdcr2C}c6`m^{-XS-tyU0|`z+`U(5{~q5M2^M!Wni{5(@_o-f#~Cfz#5?}_ z+)X^?rQHoUYR}8~_Z-BwkH3#>Nus`72k$e?9qXSIWry@5&vVC2(pI7))Tj$5H22?R zV=5qVjQjk>y6^Ps>GV5aH;ctO@5!*EVfxcESB@ z&;1AP#87YY2=IMr#G=JWjS9(;NW6^pm{&Yl&yqt@__gSDbJK26aR1Bx0jSLGA6R+x zzIo%(tb9ye3djdvf5)~5a|9A*drun8fF#6vB+}@12`A2jt+VypSnC#-e%vZER~%HB$}Zhzu}p6j;6w&f4_tPeY4t@+Ns`00Y88>NB?*lY(6I~ngL z5jKNb%#n;oZ26)7Sj(aQ#OU1^7FWBkC-?P?ZSC!^d}GGZlvq$iN!hh6%q!cwZquZb zx_YxCN$Sj5fy#)lVCJLFe0pWG(PG&v3?mHP+(s0yI2dlI$TFiOB=<2c> zU}Er}%kWim#})!(f9^NCrw|b{=q0Kb9vtW7(V(GC1 zxxpOz2;$%Xd627L$nm?JA*|<$g^W&t2LSllzfdk&MqkHI&GZG*aAI&iTZr%$NgxHU zwB6=6G-R(?;h<;Y2mfXlR`k0>)#iaI&s7E$3D#W z?|HAIujRWotMDu7Pj)&U1;3ImXJ(}OESQhzR))Xi*q68xOx*%yY0q`y>=f%B;Ky`3 zy^0XNpEmYBsp!~arv6;8G#xd$MV7_i|Cyl1E{mU)EKRrEdfhFz-Fm|WaoZO+%rSm_ zQ9`ugvni{MiqGcO8>`t%54rDfy+70!cK4bMUn<#vG_&-lU0vfYXW%*Cy(wqx#U6w8 z-7)}E_Am_R_uf3Q4_Ew>f)*eSi)4VYFbGI`L9yb)<5#~<>#M@AE&{y&xVS-eg}-Y5 z?TPT;NLZ)+r%d~DXZBAuabL*Yw4|@5RlS5atN9g2G~r=WVfd;5v2cbk_{v!`D`R!~ zU4%He;zBd<+6+IwV}KCRw^;5{#ThLlN_%jn&_rs_YaMa3{KzbUMWttny~!bGJ!+@P zJLW^Mo>_0&{a{g+Hc>^l*|DAokH`H~*qGiK$9Y~2e}h{%RK11_y4`{1M3%C>!PeoE zB^XP3yB@Rdo!G@U_g7KQ?|y;q)hK!hmjYKKOs*^C&n@MR^}agE#flxB=Vm+=6ILB$ zv>9Ljf|E#9(>PLGwE(9LU1}DwCV>5riw{L<;Hp`XrfFr19YewHgT7|soqi+0>G>DZ z9(O18JCfh4&@QhiHY2XHGNa+oWD_L+{TeUgF(Oppuv4+eyqu1{Px2-1Mu*vLCNTu; zHAjCEubCKdC)_MRRs(YBk^$sG!*)kZG(Y9CKGu8H06l^YHEWH`&eSSq>Lzjr(hjY- zQ_KG3ZBc~gZTA+lw>}<_Bfe{$e)sr(lG=zY?v9$e7J6 zCr~bdY68^~7(-x;1jZ8>FYx!|KWc(_GVLUIkrcc_3Qdp#H({44@DaFUygxqZudHQY0wB?TWek;BDPVm0Z@P0#H{4nqPBJcNl?>FN8y58>--tXVM-)8Ukb?rny!dy$_)opxo-G#6YrXWtyze``@5j8~1>SFwmws%z93&(7x>kO3`KNGq zbH_V6a*lBCTz&)Ef5Wf=V1{T!w> zXD}h19;XtJy}5{~Fxkfib=Gaw;Ch~1I&Cfs=x zt>~&v%ovA;(FzTsZ@fY#ObF#t9yj=~+gU4K_bWRho}6#3X`=zknP2?cbkvnQV1Vn6ghW&pv;Ivad`;k7<_lk6n#dz=5HOjolbG- z`3}8tXrLX)nQ!>x7wnQzV>HEvS+O>d7|mg`!F{!-S6>r~&wNGf)B`ZUno7t)BFvcY z5@;RyiU63NZ|MIFdaDe203JU_M#CQ;xjklj#yWdU-4vVv>B>&rDVM&7iPm{=0`paB zTku12F6=r1tR%4B?B|z-;trZTKD?*crZtDW|=?!(5du++ei9})w(** zX&AsLng?gwYNUQu*$$;%a|wc_LJ`i$!3#N0N1l>o5zaRJ^ARsa_WoRGp08r8r+34{~l^~$*-jb*^A8Rwe# zARm`dHte2xWa?=W#P7#nd92TwBhMCvpn?K1qQ?heZ{1^_{3pG!4i#^)3^B*A5~dni zE%v=168XZ^q*&Ga zJNFC75K)@zH7ULrx+OBT%{eWy2hmF~IIdM^yOO@b`b){mWX%=CKkr_?}kuzm3ODVYJ9gY8mTaG$O2yXfz$|+NOP_5G(AhnH; z^m;onc#O2E)YsdkPaqBIi;M@!7iUs-(2AGhG|WU<5fT>Kvz>kNAA$@F!?**QXIgXe zPE@R9$la+QN#RsgP7NkWej0oyU8O0dHYVwe)^v<*q*5A5H!A|jHg}>%1GIcjhKfw7 zt*}v!Ld6tn^8=!EQ?b>YNLOTbO_K4Yv$*UG9`Ot#c8u2vp{9@|YH!vtj_ID)%if9E zOiTcB2nr9Fn}(wXBlTqrb`Wz(VhV+MZgx{IannlF7l?sVs+%JAaRBAY8`L}V$ZQ3r zUc8rJ)PA9GvXB&gYZjApYfr}hp_e3eLRjXi7JfB&(<&j?U}ESY3#+we63y8S0w^Ka z+}DtNu%*6lJE?j8%8|RAM2vw5O}KPdC_eHF#i!Tz{_O(G6cb-A#R+jM6E*A-9xX^t z1hHEP&vq}^CA8;*NxlKfN|#ad7>`*8XqV}RAp@#K1PLpFQ}qOLoh`~`jJb~{z(Quq z%%K4V!wzr}ApEx}GeNQ@2G36l(bMXMnOT$D_SM&<#BE*WjHORAVWq|Kv|N%~@`6xU zzBA|AoLCFQI+8M^{MHIVie<<3gUM??BxYe3cnKwDa*H45ScK%4#F$+zv%l-j$&K|g zC#St37^$vU6>?{b%Ays4)>6r3zB58d!rBtvWeZB!-dO?S!10wT=hBt;I}RR8P0Y&a zXWOx$61u5*GqMv2ZzX5NDvOfD;Om=3K^S+rmKK}zC9|ZVo#r&$B2w4UYDPbm5n~hb zb7~dl-yyY65c!bY+S8n_#TYn%v#Tlf4`I;9APq{$EB2xNPv{+uDiZ`PCB1My+^0X|Utyt?Z*`F^})pnfn*m3^LI{JuE zQ}KnIv-&7ka;v7%Po)3r1Au}E^YOPSdG9VxvNm+hD3yNT#`?vm_|Q!v$_vd~zoi?T z_zYBDw`=By6nR4@s)g9BpDEPzlDw*CULhQ)?3nq8P{kPYk|tT@JhOCm8dfRU2;y-e zK0ZHpo5@Nz5pAibJE`#eWf=}v4K)h#>S6O~df5&u>8@{yt|fEXqD5E>^yBGU*WwT_ zgd=n)s@7|z5WJ{bA00!$Q?*h)sUN}_mlwGtgFzh)yG}@*47-$XbjXR~{5P3#xfdu_ zXjHf6si^qU6t#lpYtg3W!y0ViIG6o>*%^C%PvL+(ijLt+48m zeaRt0aMfY=bKH-U*aA8nZ#-kmi}1dRRP(Nv^yt*TP`lMQJ`{r6jujGeQDV%a4Xhs$ z{Uwx-MJg%o1w&G|E4PqFL?aLt5~jx*$?{WK&$LLhX4n!>4RZ^80ntQKLxgt(sVu)4 zJbvNlu$MegI%uWL9kcOXq5hFyq^@83i%afovBd1>)y6q08o1rXJX=Q#;yUf7ytN=LydZr8PEIV~bb&#UMuYJJ zpItPvLToK~R3<9J;;kupM?1ZM6d$v03&*xnd3;sYjp_)HQeMeAQQ*sh{G)}6c%T*Z zM|kgn^LjKqZ`|dw&~MnXUr@n-$P!afwiR5-h*E{P)E)IFD)8Xa-X;eBYB4ysoff=M z^)>!+(*1|>yVMrgx5nM>FVpJ*b^(>R2$Wj7mUUv6Spvb!lwyolhQw3)tJF+dRJqN| zE;oaD;S$`7-X?TI>niTRT&Xa1UiXoO|BM%E+|7WjW5ZzLO@Gwu3m{frdmj7_0hEzz z#*q)Dxhry*8F-X1uk+?nqY9PKtQOJtb=-KIp0(C_ZQa&~oc{=&a!FHWeOOCXdel6- zNaR{ip{Nqs9%!R}7Ky(LxwkT^Vw_=$bHqpPiyz+-D43!oJYJiJbSF!|9En~p!*COr zlS1PK)^q5<@0*0Msl`lDY!Q-t>wvf>{-lh$sGPbg4CXlvgTauQdZ(>qvMvcrsM3sh zf+&bIr?U?oNkV!bLDz-n(t@b8eW}uUXdDy~mRSi|MR=Z7=pv<5WiibJ0=`<{tLTas zG5TtCpm=q~j`aE)Hfu%VKaQju@wX6Zc5+{Kj4p@{(}|rLf%fCk zn@8^+ji<^;nVXpr%zoE+IiRlv?4`+;?AG**NDO{ZD9uiTahIn$zLKV4MTm&L!NfS+ zzx6zD{G1#Nyf)2ZAeGt+u0@Zi8+L)yAcx<$2>pDg;fEUP!MF}2By=&^JhssCLU{u* zO({JW0GomA0x-J&=hLj;>uXQ;7>RGUF7BYG;*^ z<{~9?QITUMXct_qm6)mjl4=Q|=&(; zD7^0#=3<(+rmhAsb2(#gfp|e$;lY|&+Pv93KhtO=?llU?00+s&%dz;OGL={zUfKOq z768K_Uc#vLmS)M()sEEZxG$?O;n(+7d{{%*^h3=pps2McM8gKVToRdQ_d9L+ojtBt zZqCo-$fT!Fw|^-Wp;|o+P~A-Dj}pN(f2(HPu1|ottJMRXjZl2;kk0W#_0`OVRSEwv zCzK4X+nVg`CDy`wRutoQz=87{n%C9-xH#E$LNM9+y|T{Wgw7k9#nmY24)rDO%&%Bg zw(N#w5&?};PE@Jo5F|q7wD>u~b~thJiFrCA2z=Nl;AFRmj)YMP#KI^uUITAZIkY%=ai2N0$+BG}g(6zYVP}ap;B59Evd5f^0W7@#I+pdde;0OIlfJ0V&ZU@6H4b3xe zf&PolhM!p8(;!}P*~16wm;&+n#z()SSVmDqxB7WOhIco~1G`WNTyadYWZbIhbn10amJ2`dBCxVk+@*pzBx)rz1=*>3TylLZ{h8v)1;@|V)UrNVcXyf1Z;(sskXpS|<>`0v{(_k#rDSXZPF25=w z=Ie{yHZ>;qf0;t9YEzw znofyUdyKI2;KFwY&42s8556-Zl$gOpYYXn-PCc$&>KqnK?&E=xHB@m9RRqhD$g@Q< zji4;Hbp3A1e{nEg#Yozbk;4x0SHa)wKjmN0EGJ`*{JV2#mJ<}oVEzXuxQ~@; zniB|XtOsmQc5X0V0;b0i{*}`_{yZ65mijs%t#jwT^>yIjhC9gDZPE{9$};K2fBi}6 z`Fwc@b-x;u#Gwa{Tf+I|SX*5q3aj}SePJ0|0s%()o67*yU2cBFPx9Zz&cB-bEDy!L zx!17^j#=oaR5)7@%8bGbX~2HJZdNSpO@AgOn~U@f?WJN0;oQ0J#HIp5?)zc@C{6C* zl;h0>rSAHqDQ*l5Ep5DKP-)|p{aG@97`Z}j8NB5D#Lyv}zEl_R0E*m=H!~An7VW_Ah12G*2HoRD^=XrLuMal>^kl zBjqrI(|kRCNii2wGCekP^ap>|D&L9S zM4RI*P3tWfaHqz2M+$tYUt>AIs7s z_v0<~QxVr%#lCVP1DyF6<|nrl^=XfNb+}Xi8ch+?qffh#?J#Hl(4*zv!DMVXw@@W} zhMecy{mH#Y)J|B%^+|mX4<@$_NN(xDV_1R4aDTbj3LTUTeYwJ_y78X=N6H;n%xqiptdC0b z%nHz1fxoj^q=BVkk2bem4;L)_$e&LGa;Fij#$J?A_+~YO=k&89ni)-wJmC|Q9p==r z0;APW6ICn!K$TZQ_}yvi&jO#_!T5om>e?AB`^0>49kGdf^B2mhqJqmCg!K%A43&KK zfT-@bQ5X|SYO1W%UjTGx{<*12T21qFnXjVx-D=-!5y==EmLCZQ;|+?o#P5YB!AjQ{ zEblf>K1$i)DKekH4hWQ(k0b!4zc0Trxynser-DD6w3f&OHCy(AteQL~MqbA=R_*rI zYtnwtcyFtPALKlUq=$9UDhDo5RChs}0jDbN%r_K29W_diQmxZ? zIHOf}?;nv%uTV2U{c&g?r~YZeGtV2EA31zzk<)M=U#&f5Sfz#GEd}Ms*mmef-^N2;mo;<@K127OEF7QG-noZi53#J7c<;rPXK zhdWCGM=j*<*rQ&OJ7?Q9xG1@$*b6RJzUtP@OaMtF$T_C$`b+Gacp5scd;2!jKvb@RbNKKj>ubInv={C1!enoR~ zXNkM719OI~uhV+XQS)I4^D??kOZ21ELYh5E)>pwYeMO^JFcvQ81eMWwoKj(=&6yLr zx}cmvdGU*YYI87tM-iIG;%8tR&wegU`NPyxRAN3MUyizw!#_@dAw<8uK!+%C)ND#F z=>y2Ao4*wFR9io4^+&h-u9rK_$KAu059L&8`QdK=CH4+E?N@^>TO z^Ty5HsLad!`>9Md^C%-XZ}W=5CSkI{2Sp+%Dt{z2LrZUB;DYsPnfOnrLnQZ;BZ2dv%@A!k~iT?^M_+LWZ>oU9WdAl zpvBC2jJ6Y1A3tGHvGJFgK75!^0Bzg7vu%sNu=FVs&-7`K*Qfk!pYFff=DHe)(p|E4 z9S>@`Mcsq?Y=L@1u6#?w8@WqvxC7SP1=cN(Dy-LG^pasaBMa*g3#%#3MxEq=`RW51 zFb8{JUXG0MP`~ji3+BIY0LXx8$JK)~m4)+XWa@ZF^<{gWJ$-g5BW2|A%$Xwm?(*I? z6!2R`br0xdcQKJbVMA4F%`um~X`Wz?2i@ zHVGDWy+f5Pw_mAuu(RpC)0{~P%Iv7x{BQhq_vTeZt82>;{v5PQjD1y~#uty~lF%PGdA^6Q)L+~}>-7(8|c1cn?bD`HfPNBrch0WE)y z?Jbfhv^X6{C z&ir#^t2wsygo@S>C+@d#srBeYco6!wkz1zH^+@?-bi1D7JRf?((;yVv-#c;_3kl!o z#Mm==(IN%mDsWc4k4y0)@C!hz!Xc?@%6bfG}gr!}^>_lz4yB?5=#&E*zHmj?lx z^Ve1r=<1u1`{#vzIj+PZ8Te=ef5m<`OzJi$;>nxml zWqOhN&aZ`~z?YYsDiXQMQK~Q?fIzPdDc_!6zZ2gq04mj2Mv3W%*WvYKSO(*cCkKOkfE%P^< z#CYsDltY?Rg#ic+X}{73kiG}~NKb`+m=SqR!fra=&dh(sT?hQ;N-I~Df9Y+}|K*fn zE;n-;J`&pFWQFL;?-1s3gK*-4(u#NWFb5kAV7-nO<=Ac>`jU)4H<9#NmgYaPRH56> z@iw8qbtbmygvNs7V|xo`Zms32xYZ4-qCXM-_lL`5CW^hysh88s-2V|ya70(fyQ7qT zCC*zK>pW)a0P`&S_{sfBXzm^%*kzHR-&sg%>6v(9HO8I=JVh@x7FWRFo>(^Whw<^ zE`1vPpf>*%e+%5XHo;pITtj{GuV@PefkWe)!imGa!)G{udB-Wg^yJD8;A4I#rg<0Y|JlrcQu>BNPFs3x}yd!ul%!=7oPP=e)RL$9xlCE zyWkk`pT;+1Mde^RRS2@B+Md)J+xu1YBY(^AUQ7UW*|QVr8m%i;MH4DFQY%27sk~g3 z(s~(Il^-I~oVsCokwa2XplB%F=e`#qbB;}doXHl@eHV)1^raGf42wVW0_}*w<9rrS z(R0xoWdWENJf2-GA%Y5^VJ4g;H>;FJj~8kmE7#(tN&RF-u*8zNryq8_KX+j%Kr&^d zf?eond)6P*+|gp95R}51k=H<&yKj+!@Kz7PNdn>F9)vg8wL@a?sz)qrCtWI3z;VwU zxc}j$-HAex1GgAH1nL4^N<{|)HTyZ<>m%v&lNo&{7yfdE9}|7YBJ<)nJ73f5T<*oW z*!|Mm;wlNc?AgjOGV{tqGIOlEvhXSnk<0;~d5Ic1MqV}^q?L;3{ ze%E5YLFvRL$b6KI+D4REOL;wXt9dmWzgDt}!DlCPnf-4*xuZUEnh61dRc)frkSeFx zCru}c(aJoQqNl)heH+I}3AXyw4Z&VM2S^oP67?EUkyU1&XwOzt`Wte#ZURE=yet^! zE5u?5s>nv3nG5qV+4$onbE2vVO~mxbM)#Iz?TYyt?K35tB_4jv-I?Z{`qPM~_-m~7 z&2m&U4{2?b3C4%|%=6i}7bVVC`6sFJds=0+-JceH5%LP-ZHwbXSLAZJ0|>qLM{;BB zjIdyPB(E}r-DIuXX6$=_stodQ+h%IjDT;UP5i2> zgJf!x4}_1=-v{+hJ4q~-#C9UX{B~;M<9dyfBzETrlbO&^XZ^`6ozv&}k0&foUSOW* zMt`yIT8&2o_;QZ*4Rq@F!n|u6aI%m~x9U5Dl{a)%I}f+iG<@hh*<4+;%V~I1V|k8F z>>dFe7FNKh?3&A|7a3@NE5o0t`UlFbz&6Bu=E^8q*Cz8NDzqqm@8?EtB2t`t*e=*= z*70Gkwv|k$5+7Y&?R5g3ig=Cvr*4zlwJ_>ODR0S79QgjzCD|Bn&#{>*JPt6 zW(!{?g+CNhOH`fc6&{?;c{a(?kAbE%8+lT;__w9_?``qN##+F4H)a6;YNjn-ZZ>Bl zKPJ+<+vHsdvgl=q-i;jMuRDindz)Z8wpecv;&YyS3fId{>_RV!rE+?%|5>R6s*tEc z=6duZrR#UB_smkUSeS3H2Z3!t?ul$-cl3mtNY#@w4Ap6PQd?g!{XphYM+Kb6l7&{H z>XmzKPy1#&)z9l`iP^*X9&g;fo{{P4rvy_sbXmS@?y&W&=2)CSvm#q$75N0=#pd~J zRYh-%!JDII7iGEdR-QAgYl;5+^rAWZa5KnU35P00(#y4v~Ha zU>*6=SAdAWWLS1i1notrpg3E_{v}e^X%L&Oj3wGv`I1sT%$>gif)^S0v|N-Xc{CzX z)r-!i`TWl{gWOIW8841<|8CH($y_$~P&PhP-~BW%XXD$6SEquVW+lPO_h&9(gW-WO zLJr7cxzaT;_!MLsj@(O!e;-ihoFpH3MD8>f;l9yPz8Dla2>-Od4v=P4*yI1iXhP&RXu!-ir>@GsmcoS$lU*!u8&8nt0!BjyUiQy z*4iOZp+`mC~KOrQs1%3OjG$r$B0N)!hZGq); z0gjt8Ob4Hy5~42zDbk$-`jer@ToV}d^`u_jb0Oq|wxdL7_ddD(b8sTYd>DOaRw{Ehl=g2mVo}z8 z-{xBc?FPOlIj0rgh+Bs9KmoB%!+wTXl&{3#tE8IVRAVva)c;$PTFsG)7ES{59gg2y z%tRA6`Aa?el~LZMEk%Y(cq|$!YmphJS118Q`6OD+oz!fuBg; z0@^K?0%e@;n6Z}MNe_nDcJ%)EFk!%c@Il+zs#+|Km7mXOVu)Upyr)V!@3l^72_WfZgJFMhl&GPA9QuhvGw|wKwDiMjp_Bk#on%0AB6&zV; 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 -s [-R ]... + * + * Options: + * -r : The recipient's public key (npub or hex) + * -s : The sender's private key (nsec or hex) + * -R : Relay URL to send to (can be specified multiple times) + * : The message to send (must be the last argument) + * + * If no relays are specified, uses default relay. + * If no sender key is provided, uses a default test key. + * + * Examples: + * ./send_nip17_dm -r npub1example... -s nsec1test... -R wss://relay1.com "Hello from NIP-17!" + * ./send_nip17_dm -r 4f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa -s aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -R ws://localhost:8888 "config" + */ + +#define _GNU_SOURCE +#define _POSIX_C_SOURCE 200809L + +#include "../nostr_core_lib/nostr_core/nostr_core.h" +#include +#include +#include +#include +#include + +// Default test private key (for demonstration - DO NOT USE IN PRODUCTION) +#define DEFAULT_SENDER_NSEC "nsec12kgt0dv2k2safv6s32w8f89z9uw27e68hjaa0d66c5xvk70ezpwqncd045" + +// Default relay for sending DMs +#define DEFAULT_RELAY "wss://relay.laantungir.net" + +// Progress callback for publishing +void publish_progress_callback(const char* relay_url, const char* status, + const char* message, int success_count, + int total_relays, int completed_relays, void* user_data) { + (void)user_data; + + if (relay_url) { + printf("๐Ÿ“ก [%s]: %s", relay_url, status); + if (message) { + printf(" - %s", message); + } + printf(" (%d/%d completed, %d successful)\n", completed_relays, total_relays, success_count); + } else { + printf("๐Ÿ“ก PUBLISH COMPLETE: %d/%d successful\n", success_count, total_relays); + } +} + +/** + * Convert npub or hex pubkey to hex format + */ +int convert_pubkey_to_hex(const char* input_pubkey, char* output_hex) { + // Check if it's already hex (64 characters) + if (strlen(input_pubkey) == 64) { + // Assume it's already hex + strcpy(output_hex, input_pubkey); + return 0; + } + + // Check if it's an npub (starts with "npub1") + if (strncmp(input_pubkey, "npub1", 5) == 0) { + // Convert npub to hex + unsigned char pubkey_bytes[32]; + if (nostr_decode_npub(input_pubkey, pubkey_bytes) != 0) { + fprintf(stderr, "Error: Invalid npub format\n"); + return -1; + } + nostr_bytes_to_hex(pubkey_bytes, 32, output_hex); + return 0; + } + + fprintf(stderr, "Error: Public key must be 64-character hex or valid npub\n"); + return -1; +} + +/** + * Convert nsec to private key bytes if needed + */ +int convert_nsec_to_private_key(const char* input_nsec, unsigned char* private_key) { + // Check if it's already hex (64 characters) + if (strlen(input_nsec) == 64) { + // Convert hex to bytes + if (nostr_hex_to_bytes(input_nsec, private_key, 32) != 0) { + fprintf(stderr, "Error: Invalid hex private key\n"); + return -1; + } + return 0; + } + + // Check if it's an nsec (starts with "nsec1") + if (strncmp(input_nsec, "nsec1", 5) == 0) { + // Convert nsec directly to private key bytes + if (nostr_decode_nsec(input_nsec, private_key) != 0) { + fprintf(stderr, "Error: Invalid nsec format\n"); + return -1; + } + return 0; + } + + fprintf(stderr, "Error: Private key must be 64-character hex or valid nsec\n"); + return -1; +} + +/** + * Main function + */ +int main(int argc, char* argv[]) { + char* recipient_key = NULL; + char* sender_key = NULL; + char** relays = NULL; + int relay_count = 0; + char* message = NULL; + + // Parse command line options + int opt; + while ((opt = getopt(argc, argv, "r:s:R:")) != -1) { + switch (opt) { + case 'r': + recipient_key = optarg; + break; + case 's': + sender_key = optarg; + break; + case 'R': + relays = realloc(relays, (relay_count + 1) * sizeof(char*)); + relays[relay_count] = optarg; + relay_count++; + break; + default: + fprintf(stderr, "Usage: %s -r -s [-R ]... \n", argv[0]); + fprintf(stderr, "Options:\n"); + fprintf(stderr, " -r : The recipient's public key (npub or hex)\n"); + fprintf(stderr, " -s : The sender's private key (nsec or hex)\n"); + fprintf(stderr, " -R : Relay URL to send to (can be specified multiple times)\n"); + fprintf(stderr, " : The message to send (must be the last argument)\n"); + return 1; + } + } + + // Check for required arguments + if (!recipient_key) { + fprintf(stderr, "Error: Recipient key (-r) is required\n"); + return 1; + } + + // Get message from remaining arguments + if (optind >= argc) { + fprintf(stderr, "Error: Message is required\n"); + return 1; + } + message = argv[optind]; + + // Use default values if not provided + if (!sender_key) { + sender_key = DEFAULT_SENDER_NSEC; + } + if (relay_count == 0) { + relays = malloc(sizeof(char*)); + relays[0] = DEFAULT_RELAY; + relay_count = 1; + } + + printf("๐Ÿงช NIP-17 Private Direct Message Sender\n"); + printf("======================================\n\n"); + + // Initialize crypto + if (nostr_init() != NOSTR_SUCCESS) { + fprintf(stderr, "Failed to initialize crypto\n"); + free(relays); + return 1; + } + + // Convert recipient pubkey + char recipient_pubkey_hex[65]; + if (convert_pubkey_to_hex(recipient_key, recipient_pubkey_hex) != 0) { + free(relays); + return 1; + } + + // Convert sender private key + unsigned char sender_privkey[32]; + if (convert_nsec_to_private_key(sender_key, sender_privkey) != 0) { + free(relays); + return 1; + } + + // Derive sender public key for display + unsigned char sender_pubkey_bytes[32]; + char sender_pubkey_hex[65]; + if (nostr_ec_public_key_from_private_key(sender_privkey, sender_pubkey_bytes) != 0) { + fprintf(stderr, "Failed to derive sender public key\n"); + return 1; + } + nostr_bytes_to_hex(sender_pubkey_bytes, 32, sender_pubkey_hex); + + printf("๐Ÿ“ค Sender: %s\n", sender_pubkey_hex); + printf("๐Ÿ“ฅ Recipient: %s\n", recipient_pubkey_hex); + printf("๐Ÿ’ฌ Message: %s\n", message); + printf("๐ŸŒ Relays: "); + for (int i = 0; i < relay_count; i++) { + printf("%s", relays[i]); + if (i < relay_count - 1) printf(", "); + } + printf("\n\n"); + + // Create DM event + printf("๐Ÿ’ฌ Creating DM event...\n"); + const char* recipient_pubkeys[] = {recipient_pubkey_hex}; + cJSON* dm_event = nostr_nip17_create_chat_event( + message, + recipient_pubkeys, + 1, + "NIP-17 CLI", // subject + NULL, // no reply + relays[0], // relay hint (use first relay) + sender_pubkey_hex + ); + + if (!dm_event) { + fprintf(stderr, "Failed to create DM event\n"); + return 1; + } + + printf("โœ… Created DM event (kind 14)\n"); + + // Send DM (create gift wraps) + printf("๐ŸŽ Creating gift wraps...\n"); + cJSON* gift_wraps[10]; // Max 10 gift wraps + int gift_wrap_count = nostr_nip17_send_dm( + dm_event, + recipient_pubkeys, + 1, + sender_privkey, + gift_wraps, + 10 + ); + + cJSON_Delete(dm_event); // Original DM event no longer needed + + if (gift_wrap_count <= 0) { + fprintf(stderr, "Failed to create gift wraps\n"); + return 1; + } + + printf("โœ… Created %d gift wrap(s)\n", gift_wrap_count); + + // Publish the gift wrap to relays + printf("\n๐Ÿ“ค Publishing gift wrap to %d relay(s)...\n", relay_count); + + int success_count = 0; + publish_result_t* publish_results = synchronous_publish_event_with_progress( + (const char**)relays, + relay_count, + gift_wraps[0], // Send the first gift wrap + &success_count, + 10, // 10 second timeout + publish_progress_callback, + NULL, // no user data + 0, // NIP-42 disabled + NULL // no private key for auth + ); + + if (!publish_results || success_count == 0) { + fprintf(stderr, "\nโŒ Failed to publish gift wrap to any relay (success_count: %d/%d)\n", success_count, relay_count); + // Clean up gift wraps + for (int i = 0; i < gift_wrap_count; i++) { + cJSON_Delete(gift_wraps[i]); + } + if (publish_results) free(publish_results); + free(relays); + return 1; + } + + printf("\nโœ… Successfully published NIP-17 DM to %d/%d relay(s)!\n", success_count, relay_count); + + // Clean up + free(publish_results); + for (int i = 0; i < gift_wrap_count; i++) { + cJSON_Delete(gift_wraps[i]); + } + free(relays); + + nostr_cleanup(); + + printf("\n๐ŸŽ‰ DM sent successfully! The recipient can now decrypt it using their private key.\n"); + + return 0; +} \ No newline at end of file