From 7dfb0224c7657311dae91d2146d638ee6a799a61 Mon Sep 17 00:00:00 2001 From: tudor <7089284+tudddorrr@users.noreply.github.com> Date: Sun, 3 May 2026 19:03:50 +0100 Subject: [PATCH] apple game center docs --- docs/godot/identifying.mdx | 69 ++++++++- docs/integrations/apple-game-center.md | 22 +++ docs/unity/identifying.mdx | 205 ++++++++++++++++--------- static/img/apg-integration.png | Bin 0 -> 50683 bytes 4 files changed, 219 insertions(+), 77 deletions(-) create mode 100644 docs/integrations/apple-game-center.md create mode 100644 static/img/apg-integration.png diff --git a/docs/godot/identifying.mdx b/docs/godot/identifying.mdx index 6dcd450..8113fb7 100644 --- a/docs/godot/identifying.mdx +++ b/docs/godot/identifying.mdx @@ -1,9 +1,9 @@ --- sidebar_position: 2 -description: The Talo Godot plugin allows you to identify multiple aliases, authenticate and sync your players with Steamworks and Google Play. +description: The Talo Godot plugin allows you to identify multiple aliases, authenticate and sync your players with Steamworks, Google Play and Apple Game Center. --- -import { ScopeBadges } from '@site/src/components/ScopeBadges' +import { ScopeBadges } from "@site/src/components/ScopeBadges"; # Identifying a player @@ -16,7 +16,7 @@ You should identify a player after they have authenticated and before you attemp ## Identifying - + You can identify a player using `Talo.players.identify()`. The code sample below shows you how you could identify a player using a UI element (this example is also available in the Playground scene): @@ -88,7 +88,7 @@ Once all the relevant data has been cleared, the `Talo.players.identity_cleared` ## Merging players - + Sometimes you might start tracking a player's actions before you know their true identity. For example, you could be tracking events with an "anonymous" identifier and then later on the same player chooses their username before submitting a leaderboard entry. Since both of these players need to be identified, two players will be created. @@ -97,8 +97,8 @@ You can merge players using `Talo.players.merge()` by providing the IDs of both :::caution There are a few limitations to merging players: -- **Player 2** cannot have a Talo Player Authentication, Steam or Google Play Games alias. -- If **Player 1** has a Talo Player Authentication, Steam or Google Play Games alias, the merge must be initiated while identified as **Player 1** (i.e. `Talo.current_alias` must belong to Player 1). In this case, make sure your last `Talo.players.identify()` call before merging uses Player 1's alias. +- **Player 2** cannot have a Talo Player Authentication, Steam, Google Play Games or Apple Game Center alias. +- If **Player 1** has a Talo Player Authentication, Steam, Google Play Games or Apple Game Center alias, the merge must be initiated while identified as **Player 1** (i.e. `Talo.current_alias` must belong to Player 1). In this case, make sure your last `Talo.players.identify()` call before merging uses Player 1's alias. - Both players cannot have overlapping alias services. For example, if both players have an alias with the service "username", the merging process will fail. ::: @@ -208,6 +208,63 @@ After successfully authenticating the player, these [props](/docs/godot/player-p These props will be updated each time the player is identified using `Talo.players.identify_google_play_games()`. +## Apple Game Center integration + +:::tip +You can enable this integration on the [integrations page](https://dashboard.trytalo.com/integrations). +::: + +If you have the Apple Game Center integration enabled, Talo can identify a player using Apple's identity verification signature. You can do this via the `Talo.players.identify_game_center` function. + +:::caution +The Game Center plugin singleton is only available on iOS and macOS. It will not exist when running from the Godot editor. Make sure to check for its availability before calling any Game Center methods. +::: + +You'll need to fetch the local player's identity verification signature and pass the resulting values to Talo. Here's an example using the [GodotApplePlugins](https://github.com/migueldeicaza/GodotApplePlugins): + +```gdscript +extends Node + +# replace with your own bundle identifier +const bundle_id := "com.example.game" + +var game_center: GameCenterManager + +func _ready() -> void: + game_center = GameCenterManager.new() + + game_center.authentication_error.connect( + func (err: String): + push_error("Game Center auth failed: %s" % err) + ) + + game_center.authentication_result.connect( + func (success: bool): + if success: + _handle_auth_success() + ) + + game_center.authenticate() + +func _handle_auth_success() -> void: + var local_player := game_center.local_player + + local_player.fetch_items_for_identity_verification_signature( + func (res: Dictionary, err: Variant): + if err: + push_error(err) + else: + await Talo.players.identify_game_center( + res.url, + Marshalls.raw_to_base64(res.data), + Marshalls.raw_to_base64(res.salt), + res.timestamp, + local_player.team_player_id, + bundle_id + ) + ) +``` + ## Offline player cache If the `cache_player_on_identify` setting is enabled (default `true`), Talo will store player data locally. If a player tries to identify while offline, Talo will try and use local data if it exists. diff --git a/docs/integrations/apple-game-center.md b/docs/integrations/apple-game-center.md new file mode 100644 index 0000000..bf2be34 --- /dev/null +++ b/docs/integrations/apple-game-center.md @@ -0,0 +1,22 @@ +--- +sidebar_position: 3 +description: Use Talo's native Apple Game Center integration to automatically identify players signed in to Game Center. +--- + +# Apple Game Center + +Using your app's Bundle ID, you can automatically identify players signed in to Apple Game Center. + +You can enable this integration on the [integrations page](https://dashboard.trytalo.com/integrations). + +![The Talo integrations page showing the Apple Game Center settings](/img/apg-integration.png) + +
+ +## Authentication + +To get started, enter your app's Bundle ID into the dashboard. Talo will use this to verify the identity verification signature provided by Game Center. + +To identify a player, fetch the local player's identity verification signature from Game Center and pass the values to Talo. Talo will cryptographically verify the signature against Apple's public key and automatically identify the player without them needing to create an account. + +More info is available in the [Godot plugin docs](/docs/godot/identifying#apple-game-center-integration) and [Unity package docs](/docs/unity/identifying#apple-game-center-integration). diff --git a/docs/unity/identifying.mdx b/docs/unity/identifying.mdx index c940a1e..825ba9d 100644 --- a/docs/unity/identifying.mdx +++ b/docs/unity/identifying.mdx @@ -1,6 +1,6 @@ --- sidebar_position: 2 -description: The Talo Unity package allows you to identify multiple aliases, authenticate and sync your players with Steamworks and Google Play. +description: The Talo Unity package allows you to identify multiple aliases, authenticate and sync your players with Steamworks, Google Play and Apple Game Center. --- import { ScopeBadges } from '@site/src/components/ScopeBadges' @@ -25,24 +25,24 @@ using TaloGameServices; public class IdentifyPlayer: MonoBehaviour { - public string service = 'username', identifier = '123456'; - - public void OnButtonClick() - { - Identify(); - } - - private async void Identify() - { - try - { - await Talo.Players.Identify(service, identifier); - } - catch (Exception ex) - { - Debug.LogError(ex.Message); - } - } + public string service = 'username', identifier = '123456'; + + public void OnButtonClick() + { + Identify(); + } + + private async void Identify() + { + try + { + await Talo.Players.Identify(service, identifier); + } + catch (Exception ex) + { + Debug.LogError(ex.Message); + } + } } ``` @@ -61,7 +61,7 @@ After a successful identification, the `Talo.Players.OnIdentified()` event will ```csharp Talo.Players.OnIdentified += async (player) => { - await Talo.Saves.GetSaves(); + await Talo.Saves.GetSaves(); }; ``` @@ -78,16 +78,16 @@ Sometimes you might need to check if a player has been identified before. You ca ```csharp public void DoStuffIfIdentified() { - try - { - Talo.IdentityCheck(); - } - catch (Exception ex) - { - return; - } - - // do stuff + try + { + Talo.IdentityCheck(); + } + catch (Exception ex) + { + return; + } + + // do stuff } ``` @@ -100,24 +100,24 @@ Once all the relevant data has been cleared, the `Talo.Players.OnIdentityCleared ```csharp private async void ClearIdentity() { - try - { - await Talo.Players.ClearIdentity(); - } - catch (Exception ex) - { - Debug.LogError($"Failed to clear identity: {ex.Message}"); - } + try + { + await Talo.Players.ClearIdentity(); + } + catch (Exception ex) + { + Debug.LogError($"Failed to clear identity: {ex.Message}"); + } } // Listen for the identity cleared event void Start() { - Talo.Players.OnIdentityCleared += () => - { - Debug.Log("Player identity has been cleared"); - // Handle post-clear logic here - }; + Talo.Players.OnIdentityCleared += () => + { + Debug.Log("Player identity has been cleared"); + // Handle post-clear logic here + }; } ``` @@ -132,8 +132,8 @@ You can merge players using `Talo.Players.Merge()` by providing the IDs of both :::caution There are a few limitations to merging players: -- **Player 2** cannot have a Talo Player Authentication, Steam or Google Play Games alias. -- If **Player 1** has a Talo Player Authentication, Steam or Google Play Games alias, the merge must be initiated while identified as **Player 1** (i.e. `Talo.CurrentAlias` must belong to Player 1). In this case, make sure your last `Talo.Players.Identify()` call before merging uses Player 1's alias. +- **Player 2** cannot have a Talo Player Authentication, Steam, Google Play Games or Apple Game Center alias. +- If **Player 1** has a Talo Player Authentication, Steam, Google Play Games or Apple Game Center alias, the merge must be initiated while identified as **Player 1** (i.e. `Talo.CurrentAlias` must belong to Player 1). In this case, make sure your last `Talo.Players.Identify()` call before merging uses Player 1's alias. - Both players cannot have overlapping alias services. For example, if both players have an alias with the service "username", the merging process will fail. ::: @@ -149,7 +149,7 @@ Debug.Log(Talo.CurrentAlias.Service) // "username" var mergedPlayer = await Talo.Players.Merge(player1Id, player2Id, new MergeOptions { - postMergeIdentityService = "anonymous" // go back to the anonymous alias + postMergeIdentityService = "anonymous" // go back to the anonymous alias }); Debug.Log(Talo.CurrentAlias.Service) // "anonymous" @@ -172,25 +172,25 @@ string identity = "talo"; void SignInWithSteam() { - // It's not necessary to add event handlers if they are - // already hooked up. - // Callback.Create return value must be assigned to a - // member variable to prevent the GC from cleaning it up. - // Create the callback to receive events when the session ticket - // is ready to use in the web API. - // See GetAuthSessionTicket document for details. - m_AuthTicketForWebApiResponseCallback = Callback.Create(OnAuthCallback); - - SteamUser.GetAuthTicketForWebApi(identity); + // It's not necessary to add event handlers if they are + // already hooked up. + // Callback.Create return value must be assigned to a + // member variable to prevent the GC from cleaning it up. + // Create the callback to receive events when the session ticket + // is ready to use in the web API. + // See GetAuthSessionTicket document for details. + m_AuthTicketForWebApiResponseCallback = Callback.Create(OnAuthCallback); + + SteamUser.GetAuthTicketForWebApi(identity); } void OnAuthCallback(GetTicketForWebApiResponse_t callback) { - m_SessionTicket = BitConverter.ToString(callback.m_rgubTicket).Replace("-", string.Empty); - m_AuthTicketForWebApiResponseCallback.Dispose(); - m_AuthTicketForWebApiResponseCallback = null; + m_SessionTicket = BitConverter.ToString(callback.m_rgubTicket).Replace("-", string.Empty); + m_AuthTicketForWebApiResponseCallback.Dispose(); + m_AuthTicketForWebApiResponseCallback = null; - Talo.Players.IdentifySteam(m_SessionTicket, identity); + Talo.Players.IdentifySteam(m_SessionTicket, identity); } ``` @@ -236,17 +236,17 @@ selectedScopes.Add(AuthScope.EMAIL); // Call RequestServerSideAccess with additional scopes and retrieve // authcode and grantedscopes list. PlayGamesPlatform.Instance.RequestServerSideAccess( - /* forceRefreshToken= */ false, - selectedScopes, - (AuthResponse authResponse) => - { - string authCode = authResponse.GetAuthCode(); - List grantedScopes = authResponse.GetGrantedScopes(); - - // Pass the auth code to Talo - // Alternatively, you can `await` the result - _ = Talo.Players.IdentifyGooglePlayGames(authCode); - } + /* forceRefreshToken= */ false, + selectedScopes, + (AuthResponse authResponse) => + { + string authCode = authResponse.GetAuthCode(); + List grantedScopes = authResponse.GetGrantedScopes(); + + // Pass the auth code to Talo + // Alternatively, you can `await` the result + _ = Talo.Players.IdentifyGooglePlayGames(authCode); + } ); ``` @@ -259,6 +259,69 @@ After successfully authenticating the player, these [props](/docs/unity/player-p These props will be updated each time the player is identified using `Talo.Players.IdentifyGooglePlayGames()`. +## Apple Game Center integration + +:::tip +You can enable this integration on the [integrations page](https://dashboard.trytalo.com/integrations). +::: + +If you have the Apple Game Center integration enabled, Talo can identify a player using Apple's identity verification signature. You can do this via the `Talo.Players.IdentifyGameCenter` function. + +You'll need to fetch the local player's identity verification signature using [`FetchItems`](https://github.com/apple/unityplugins/blob/main/plug-ins/Apple.GameKit/Apple.GameKit_Unity/Assets/Apple.GameKit/Source/GKLocalPlayer.cs) from the [Apple Game Kit Unity plugin](https://github.com/apple/unityplugins) and pass the resulting values to Talo. Here's a modified version of an example [provided by Unity](https://docs.unity.com/en-us/authentication/platform-signin/apple-game-center): + +```csharp +using UnityEngine; +using System.Threading.Tasks; +using Apple.GameKit; + +public class IdentifyPlayer : MonoBehaviour +{ + private void Start() + { + Talo.Players.OnIdentified += OnIdentified; + + GKLocalPlayer.AuthenticateError += (err) => { + Debug.LogError(err.LocalizedDescription); + }; + + GKLocalPlayer.AuthenticateUpdate += async (player) => { + if (player.IsAuthenticated) + { + await Identify(); + } + }; + } + + public async void OnLoginClick() + { + await GKLocalPlayer.Authenticate(); + } + + private async Task Identify() + { + var fetchItemsResponse = await GKLocalPlayer.Local.FetchItemsForIdentityVerificationSignature(); + + var publicKeyUrl = fetchItemsResponse.PublicKeyUrl; + var signature = fetchItemsResponse.GetSignature(); + var salt = fetchItemsResponse.GetSalt(); + var timestamp = fetchItemsResponse.Timestamp; + + await Talo.Players.IdentifyGameCenter( + publicKeyUrl, + signature, + salt, + timestamp, + GKLocalPlayer.Local.TeamPlayerId + ); + } + + private void OnIdentified(Player player) + { + Debug.Log($"Player identifier: {player.id}"); + } +} +``` + ## Offline player cache If the `cachePlayerOnIdentify` setting is enabled (default `true`), Talo will store player data locally. If a player tries to identify while offline, Talo will try and use local data if it exists. diff --git a/static/img/apg-integration.png b/static/img/apg-integration.png new file mode 100644 index 0000000000000000000000000000000000000000..e4d187a739c0a69017eea10d8458d3cdeb3b129e GIT binary patch literal 50683 zcmeFZXIxat@;|I31A-X@BuLIkmJFigoHGav83tj<3Za_JHd z^3tWtPp{$tcPjno27oUnmg3?{*5Z=lU>mT5s{IQS&@)R%dz%+-N}QK2(T79BieR;(Q@Xo5Fydm~nX$z;Mi)%vKH$29S))MzuiF66wa3P#j3@P`cGx|XFx+CVkU5br?TZ4a+0p z(AUdks@s_MD9_87*~WJ>V(@hVu49=>Mq?5YNH`V&KL#dns+l zOP2^}E`Bddt59!Vx`Z)esipb5%s@qvYggFG+ zes%l5Yia+xnlL*TKyN05JCBTOl7flmp|BJ%k@BLL?knLjZ z|0WB63fdoc0Z9|SF39#TsTICXig~ti>5}Lr>1SeUu9w#)uhroXk~Dm8Nr0^#Bl;yW zGu}j$lo2XN&}f&UKbW#mXTC1cVARblJL#7Ql%XkOFvS~9|9I{u!MO;F-=EsALBpr^ zk6_(P?&e)de2$AAQ^y7=Zc~m5HGS$p{^vhkqCPw3GeVBYs}!#;Vf^zS zEexVBe5P#?&$kvk>G&K>V>{xzuWJT-{_~svplhr#Q&=C`-stz%v^#myVZQaYp#Y{I z=nXDm_{rh+@%2cb-w~yFB`SDrIkl+HZI`ZaZLD0j0z6I7=V@4!2ec%DNz*R3C&l}W zLGt|>O-m>#E?*$&|IwUpViYFL!45;(@if*$c|%6U9r2uPS@MZVS#R^Sv#8p+l$=iv zUXIqfq&(z@#EHg>f5rI?Pk`pt0nK|H;%2!fYhpx<+aDJPOEQWtP&QM9yUsL-`I=VT zD*R`jUU2*+TdEjmh>vAoTwHTA7hhvZo!hoH5&te_Kda8Y6TjbbC(Iv<3n#1ivAnZQ z$F-P+*6>OGRO_hl-w*gLsUQqz=8n)1fEF-@B^$BIAj{(MYP#RE?tYQUi$BOT{=QAG z8sce1i`L{;Uv3coM(l2hHr%GrT2w0f{rKBwUAx6B(C?mf{QP%9e9Io|Y7E~!o8OCY zk|hQfva5`2$?NuSr^Lg{z94*TlHZS;dBUZ}63+aVYQx|2P4bmdym;g9rRaYw`;YPX zAIttF$N&FGS?jV*@juSXFlrwanxHnP-PQK$K_=PRr`R<55nWl20X-S!jD5ykSpjWP zI5g{Y*WTJt8LhIE?U-V2EQwnuCiefeGAm~8DLJ%tP@S_jsSYf|1C+)STa2RxAIe2p ztfT&!6(-YJ5_D?^p@ER?y7cmAxi4{H_$~jS<9sgpWL5G!QX-gnN&qzImV#)#UeBt} z-YkB~kf$#wJ31wZ>X*yhg(45&z>E1)c}CDG)oRH1cK2w>Vj+$5B`t3LdKGBO6U~w% zB2p$Og^Pc=B}zet1$iA`u>U|d&`6tk7spoYmrBbgj=*BFL|d-%ee)xrG2bcd^-pWq z2jzT0?1Q9SIKS4K#@aIzE72y^Zhvqn0M|$Bn3+b4fDlYV9QY4>rBJF;YSgm8vAvjG z-*hO3gk`VAeBB)nZ2kuxSY6MM?F@R!0%$afkn2rj<_wJ`Tt^af75~8Pzgl{SkU}e_ z>Nd^qOZ9yO6eibL@x;Zz{BjKb=!WPwKuO=>O~d+qDdPJ8O$mXR@u$CJ@edwK>Af=2 z{w5LiANu7dg)Nm1(Co8lanSu;%PwIA;@)DGod~$|`%;!_08Qd`Ej!#Ft@tH%ikHAL z6G)ZNwyk%je<3X|k=xs^!h|Ir>X3i&HYE~TO7ld4EkF2|+fkl!_* z!rtt92FmgQ+=pZRnF-`qo-GNY!HqRE~B~nKr09Dj)QS+F%0N zYbVf3o3Xm*Jf{`vXGg2(GW#I&2_e(2q_&mrEs$)RwmB$fy22*bkoS~!yb>MdeRjGZ zyglRp&sM<`7=|T}7QyRJtI_fye&HbEXQ;jp(dAt_&B3#^7Tx3?3z3SNZ5@2urpO9X zu}V3E;H!FS+j^*x4ZFM4Oe{nkrdMsEo7;F!YLp2OXQ9lVbEJIEYpzCo9REyHl)@du z(wSHSFSt5Vp?)Oi*l!~*ZoEM2Lol=J%aV=+egoD5w`A&j^!?3CLIUq6dNzsOKzsdL ztux7KR54P;G#4sNyTr&}@cXh-j$X0eh-iETzdnDs14u@?yI_5Oa@Y(R?PT?JsI!Oo zrzvqEvMSOuBgG~q-sfIROPjM_+G-riR%I1Tgb(LUs&k)nRv)b}ftrJt7621mTEQua zL>!~uW`qLnu^X1a-4)56F4;Z>_ij>JwUBv=fs)b80d*d0z>oMes`YD~>C}WbLIY2Y})PX_x<_UhQb97)5*2;Y>UmwW3o?7j$yZ;kvy?;6V+o#A#j>qPdMdMtK9 zrE6SPzfI_dQ$Ak^Vyk!Fi>$f5eiY#jtv&Ik8SJDIJZOlN8R(x&LM zvtzd5DFz#fT7;^FZ*qyvXq)Ie{jZ5&R$47Hlcw*h8^}r$LR3D?hbqN(qE|vdw*PuRGZ-f{p^g*Zjly6l%Rr4a>H}N z!&rkH$HV(=xm@9;PW%m|0xnN7iFpxXD?|B9Yo*~u4JU_%2^33o3LhAwb7jVz&u%Lp zZY@MQcJXNKnVv4jpWW$7zD-`k72+xE-0q z3XzI&;zbEsN#MPa^*9@0ip=VW`6@eglOclL1jo_^4RdH=33(84tdr=7Wvx!<<@ zz1#I>amr_m8oP;^GyN|H3;X&WrV~v$Ta7I#Z=!N^s(p8s`!qhO=iG__qbJ;s@i?~M z9MW32H*|fw|Leuzo17>ne3(b7w^pmjDA{JBs<&EVlmm1v zhL1Q9?1?abQ+M$BVfKu=<{;jU7)zhqRFX)lFJuw-nS>)r?5dRcAednw`tgt#|m z)$roE`)OO=%wQ?z^pXzouuF&12 zHpz9)C-yNvKj>$BfeG5UJ1{rxeI8CA54cBl#|ei8yJMHSdJq<75~aEcE#4W z#R=p*{jOdmo|%HXYaKfyF0z)}h~E8p z+VvEX_a_Xxl^bEV-^)ihO`n@C)SeRw7^gVIx$Jed9*xG|?QSV#C&QXHRT_jTTx zS$=I?DQP}pkbAa0nq^@imxM_Z%97qJWGiu`9)*}3myPeE30Z2}Hx3%QS;T4-@Ic@v z)9Ds2#$@e&)D-mS>r+(=aY_uVwmX;KZGXXP|5k`ON2`_P!{K5ti)jd}5m^rKKAb)> z(NT!h*Fb8kawN=6WvH^buMWN%&D^#7P7reBC0`n<({t|~F=ScD-n4000CG@Nx3jX^ zS5jTyIc(^mZd8;fHS4>TQQe)k$gS5$5fJ*os&CWE(i18azuSjl&6QYK$Do;3bw19> zpFcC|<{-Vaw~v(+(M61xP4$t>=p)r9=k+u3Pil;8bCN<9`N%~fX-o!w--1E?O6|+R z1@O1-L9f@WXTTBh1*PtT?;ag)kg}+jJX5wFYciM|lU^bd$M6%}aJ(~ySc^z_beXX> zZ_jeNF@1gVnPEyiPYYIE!jnd#V=TM?t7+_zj((>;GO_`o%_Dcjp1Ct;T0tYXrj`hr zMW6O2K8dv^>6T7~TwBAwL?gywMn!dt@Z{LrsA1A|a@bj^XLTQkZQp}!gokc(aLPlK z4Z%|3l!`|m=Anu)ykgAYBIYq@Zeyb!pW|z;RSeGO*6FJ&Z4FZ}ag012DKxk0V%6dD zjcPXMpLY{J6h8U7m967owwL&*?bzB4D~9uv?f0JbUU1KfZ>op$bMF_Hd#O~4jcIap z@)IUp=j0<8RLz!>Qt?hpjy|a~Ewqq(hoS4w4ZKcfJ+{}_D%EnmLe=tB)IX`^)6&Q! z9XL4k9L{bH6&li!dln6p*}~R%kugz>>N1~F97C6N^x`?`CbI0E+_#Co{CXCwFP*twV&Xri4l*aGJ+}z=Tz^ z{)x}B!2{eY5O)!M5$ni!jbhKk>nb@aG?vDpOWi5ctafm(?atw?uY|dIws1n1zU@+w z2>V>TFz-MPh2KOdnGhowUah48Emq+HPca{N8u@?wDyubxN5WGvb!Ef-i!FMhTGc?e zOo_+lU{r8?g7$e3L1cS0lWe+#JT-W#ZmWgd!}LROMPxeh zg<2;hL0dd$_B|#IJx0wOWBEDPy-_#l(g;xyVf`Zkee2%Anu9yJihJwhOn`}5&CGk6 zx0;<(iBMe8*EjqW=Puod@p8Lq7~gBOauz>o)a}TsP{^#l<~_Epp^>k~l-ieh%S{#< z)gZI8aB+9|0+R+dj`$s`pwO~UZjF2qe5w{M1?RKo)0Q<|+La3V`7?oNqqrNV_Ev67 zED?jAM$7KH;na8z6Yg_PfdnjSkLv~bJzqgwjl%9vv`2ic$4RV=2(n6MdLQzD0x(85 z$x8OPKXO91OnmxPagvQVxO+HlBjOdEJ0gbys_Yl;wAX(L9>A4J$v@$chJI2tLTuN+ z?^v#>L9B35?5}*Te7ZGWX=jIhTb$$WXm!>Gh_*;w2Cx^+oBFROgMIZ$$EILXopip^ zyu6kaSMbTM;}_BDh#z3&3|4BFnBw1vdIKhs{KcF(xUW^~oPXotEq+RQOnUtqNEG(= z(wm8qWAu6VnD-GXdp;*Sx!4!)5%$@*w)x81P=3&E(UgZC`PMipTv9@2mB)5{63dX= zb$j!R_`>0mZ;CQL=~k+or$dCETjqJSj_>_ie5)d>fseO2P&t7G6Fr@8$%!fRb;@HN ziIc~ac5u*0O9S&D(hKVGHc6!s3%)ipKKtcuhIhU2qn2)=eL?NI1E*;>WGq{0d&omR zz2vxqC_NW_@uj-`DGyCD53U2;6Jm=2askVpPoh2;7j`*#ib+ENpG@#UL}4Sp{9LmT zt<#F0oqnbLEafB68Y$k5P^e9CFgf{2=IM(pHpx(8s)hFGefT-o1M4gAe5X<>C!OD3 ztKhx`O{rGR_0SdYVZzIjPuR%_<~c>lSHKoE*~Ln=OAU&AWt^)4$!i;?JszpB)fErD zZ~opoj~BB6sY@1F8$EaA59h!BGDYh4zsH9+SgZf?}qr|*zI20o`vufIR4H}u27 zi!oU|b<+2$k2O164!OknJ4JW zEcCkd-zuO9q88cQ1?UAD1y6f=d$j{;NZAMSRY|6$;+wik-%oovio5NfzJETfD$9(r zfJvz?yjw8c=m?~BCqE>QL9$jW*&#moFuQi5xp#AVrLRYgt`DTnqzdbshE&(f*V~qt zQh5!AzZA2aU7gMTe1oyjZH`tUGLsy3@MVs*bOi~Xs7(`NBeiv5%z?Ch+Zx&Qi5Q_5 zs<2n-h%!c$F3rxA9cUET-gQ zSPW-LqB*_Kay2L#^o1w(QpHa5!_B{t5rr>fp1j5Y>6{nn*UopDxwHnyJ7##DT7S{! zusOR3_1Nl6-@PMsUDNewXKB6`J=7Y+2B#b?0pV&gGajPP(eR?nbnsU=WjfOy@0m|$ zOgMc%I+PS1F2^ZfGw4P%(4}}X4-Xa66?W-bgghzRULQ^tA`7c_G%Nu$)7Su-hlTma&0rieE}SZi7z1^U)x@$DPUB5f(-qnUSHw)`N^C=K0-% zoNdI94n7C5$?ly?VES8610kjP0)o!Zq!nA`U|a%bi;xM~q8TFB$E+GR2XYcvBJVoXd>P4XaEw*onihEf+Y zyQ(5|_f1A*o!9NbBPO%>CzeC)V>PyK%Rj!T;+UFg+7R-{-z}c_5)NNlq2~j;r_RAu zD7-g&2B2nAdo4&|UaHb5u2uO{v!PLrZ7TPOz}U8?VsWAB@O3l1t9vMJ2&^cB7Vj~1 z3neq%eS3SINC3p^{hEAjd~gcSO`TW&cw^x(2sCP*YkKa}1AaB~#wp4G&g3`TRf@!d zuT*mI*o{$+DP9g9VyJ1>tnA8%^@|vsRi79Q+4YkPiO`R>tPhv3Di%PU`HwZmKT)0S zNcK;Ala?ABUio?FBbAF`(juI&oR7MixFncfw^RK-bo08*Qj(*cQbkAH_qw`$gU^Of zhDEiiZiA*|1e|QZS>_W~Uq&e(ug4jK3Mflm1p;W|tToHVhS6her2G@+$@{1G9oBY-4P_rIEwbjN zcSj`L@nEw^)y$^Yp@o&Gde=##)2(9_x;W=L0_E6Oghd<|Td(*mt0l~0fTnV|)~%P1 z*KXf^D97BH#5Z~U0iDLihYx-W4L+EG_XXxcTfVk(?5hR#600vJ4=Jw(OI%`QKqucI zI@uxakZw~e2tF4V^<(VRapG<)v3(Rf6#ha{M0kQwFINj8CsqC0nM-Nl!#Ks^(YTXB z@dwNrZEG_=qT~=*Jvt(br8Yo-p37s*^_rDOG3A@5T|+Z+{f|{2b-BOvkxSrU%BWL7 z?XRp!cTH68iQ!G4Aa9YvvN|&y7QM}<$2Z$WX49niuob_T>t=g&>V2kLTzAs^(AbuU zwqcvv?{5%>Wfp6{MJCobThO4rt0odjs|wMCc#O5jYSVXXh73a=jzX7~KZ*$maT)u< z8M+l7GAya(&abWdbD+w?#88mkbwlq{7XD7uxv-WQHn`lDU(=z=$WUp#P5ftXu8OQE z`KRs#ZmM3SzSeeH!_52rrbKYHI=|DJ@sP_W8|;+ixXmiL$^A;q8 z2~V)9f8IR1ZFiWrOd^z&&*2&5x*+;$+#B4*w{ld=!qag53@K$)Z)t42)py3;8ey#( zwdPSjOJsEs0@0p>KZAo^rCuK%bK{rpoT(@S4sWg*!ce2o;!8lTq z+-oMv!){ECQzjeqt`Iv@6?-Krnov*a%k|~Dy)jCZT~;-O4o0aesb-m)C;nDp=sj8e zKu2GBZ{AC@Y#&VWCc~(SKOon30)Fa{fA=vNY7qAhBPEvq-h&_&MgdbKms)LQQWPC)WDUUEc<;9#HX^UkY;3X&Jze zT4;kI316%1iNC#*T%gb`+fJYAXV&@ArK2n`p)c`~Y9bH#yS&qr7k%3Z(fF8Qqt+EL zA`(|H{b=p^{c<_uobFWRM`HI`L?BIbY5n(On3V@yj$Ukw75E6aq{`uzTTRQJ?Kk5h z8kCxYKlr54;uW$Npgeb3dBxbk!1Hy$M+`x6b3LYaT_WYBWzfok-i=D*!~Rft#(aYt{s|yr4TNXe%h1Ac-y-cuE zR{h$xCOQQiJ+H$B!lk6wJd1UkDy{sM3!UzUAY}A5_B5~)cr4w>!Gc!cZ#UmdBFuFC zen-K1s?JTm$o?Idl`G6W9g-a{T*6l@?p1D3J+`d1n({w3xJ#94_uub$n zDSb#2VEVScfE4+T&F^IOS(deWAV(bYCG;4-$QK+$z-qr`=;l^%m-%=xu~6KXQ%7nV zOw3g-Sr^TqtFc4peTLC@hTu^U3b(W9*;&wB)Lw;+E-jClCqSYSk4F3+^hxtq*Melt z@wix2Yao_H!p3S+MRMET$Lp10`>~79nNGjAkh!hqe|Dw2v+r&n45!`QUB_D8V|=4jAx zy@C{&4@3fHj&+r=P@L2yEB$Ydx^!yJ&$3x z!P{<%im>&yE4C+_{W#i(Z@iaFVovQQZ<@(8i%=U*m5M8Lh70Mop5<&Lg(B8PAi-=( z&Y#wo1b<8%6ro_dtPn1j_{4aA zxk1z)XL`eSlE*Ybf|RBVdd$P1R~2x~@uHHDIgZdF&$4v!kq^hQ(Z+;ZhFehW)2y$$ zbq9E;$?Oz;>XpLI4V&9{=u6pp=KT{r8%u!AdXhttO`9%wR9&}_-!^N^JrZBbVth~d zj>q5X5e`7IZ{Ei6j6j%i zsM1?K<|&TiG*`Hrha|s4A!s_)%@7^K3Z2&6jgxHgcZ#=Ob1F-PEp~gW`wMe*Ozpz0 zC^|{$OL3P!@}r@4Q*~{^9jo3LFK;tD?hnNpdM`}@Tig8fP6ikeED}HNwxJkXf~K)g`D-hN)2r;t%u%%Bnxy4EPQ~j<#oibcYZ_|c)r+t8hO08UMaCbvuh0M z2qApjI8r~|@vh9UIhc%SFUkIj)gV9L=QiENK3VIx zSje3N9?n5S>c$elqx(iq_2W`k+*uO$da9jAzjcs8=*K=2;yBqh$VPQzH%1V_Zue9s z@?DbE(cx0cQ-wk9`Z}uNHH_o^!{OKC#n9UO%>A0+KGf|mG_Y^%IgK2!c6J8K{w(<| zB%4Sg>e)>#)pr}bXfY_8d-e@^8JILnt=qQQG=qAs#`eM}5#hi`qC3p}6=Xv0YF+%R z%(YUjxiL3mAp@{ugZHOUX1!ic9+3?|W*OIzgVqs)FQ&GgbR@tAC9GksZ8fZ#N-~{B z+RCLq9r#2kL1kYK{*z9BC8~m*FgZG*oz3{c5trab@?kqv;ltC$ z?vxTxkPYnzO@nyrEc_%ECJoQU0v_%0g$_v2tje3~A2=l~t3}QN*4zex01b3-C4g_A zD;$B591Lt5Wixn^Rqsx+s8G8?^cLy8mAzLr&N(MD9suFaw`$>^wvG$#T0=*9v#16* z%x;jslcEnZ8=i%-sDFy$MOGH3uQew)wM{{n*26@@3yl~-YZF9AH?*@O2DqC)XKtO# zGogeL$Pof2jS1L-4I%E;@!b$q1e@e7AYoaf12o>lkQ7Rld4Pt;5Jk?cISv79A5LqtB6sakrt z?M@(bSlonl=D=aN+?)8G@^xj~sild)L64aRpVyy+GELBR@Ml2OkAiq7I2v-GWT6YO zYI?1bT)KULFL{)_2a}RW`$K(9f5kSt7Z=x{0ra=UDvlx^Ha5|(R<=>t@v(g1Y68k$ znzVC4fmo19yYAy_l4$Ppa+;ErT<~P}lks%&jV0VyZhnNr18_P29kf~6K`$O7U&xaX z5>$Wo`=i0gl??A2C1!Z#z@{N``N;TMK9w^g-c4dlC&t~8B~z)(BDEXyh~}r$wEJXF z$ba57JyFH-zv(>!ST3T&ASYH{BqAz8ui82|T=ERE_m0lepCv}SH>*ugLaEesRUn3_z z5pD6vTzWO@9QoA1>F6_FJr-MCEVp$`SV_%x?5?f<-O;ZdWl$jUgkqZO>M`o>tv@SS z6cX}02#BILpk8D9bX=!3G9;ojE3D-;dZ6noKhRA{np1A;vAj7Gl6d+h^zJ8%<1T&L z$BX0`9@}_$7oojtuoVG~(Y(^3V%Rw*v@c4#Y4DoI;LHr?@%woI(BeuOVb zC#L`}%Q_MpfJ}VZTHL+T=-bs9%~Z*De8&+M!=ih*)$btjf^#w*$9@g65UmM|5R2zH zLvc*IugY7FmBs6qZ-1i7H1LLomy(Bsyca&}(d@J?gfkEtK$N8r_&jbF%QI>u&_z5- zE0YS_aYnJ#ODo0XUI$`^PgTh7&QN6ri|Sz^xm*XEoz8o8OghNK7V+b%StHXDnKbh8 zZ^Yk#tT8MbEWn3@DS zP2M`YNFxQnFA3kHZ1HwL-I2J>i!PNoWS`Zm7Gp3%X^r{`)lB3BDzT2kD*mR6aT z+aHY7MnTq?Vo3}Ny`BK9BHe;nrC&Kw=Ek$V*?C`n)WD$RU~e# za!WAf@qFZa*cW6hlyZM+)r)ccVM&b1OU1Xb460cT9)fNXHnz5t6)Z(!+}3&)fWL@* zV0SU}A)m3C)b`DR9*(#8q$N0ym-hmDo#?VYH_ZR}Wjq%*h_|9#ViD!TWn=rLJrRKxxxxEoG`>;pi%W*{DTg`~? z5+Nkxi9@*xZ3m*m3L5s0=UKsEaBw0m!#^yq$=%(tJbfc-$x^3dF{H6 Ef*h<-JV8OYv9dv!mAFEFE*>>ec2^T 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

4H5y)r|3e%>>|4!`ed9Q< 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

dt&MJh;W&}j$Z+tT?cMW!k8B<4 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