From 4834351dc98eae0de88b8b1bccca7adad7a93b8f Mon Sep 17 00:00:00 2001 From: Abishek Bashyal <abishek_bashyal@outlook.com> Date: Wed, 1 Nov 2023 18:15:13 +0545 Subject: [PATCH 1/8] feat: open pgp made compatible with rn 0.7^ --- packages/reactnative/example/package.json | 2 +- packages/reactnative/package.json | 2 +- packages/reactnative/src/index.tsx | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/reactnative/example/package.json b/packages/reactnative/example/package.json index 281c48666..262f97429 100644 --- a/packages/reactnative/example/package.json +++ b/packages/reactnative/example/package.json @@ -13,7 +13,7 @@ "react": "18.2.0", "react-native": "0.71.11", "react-native-dotenv": "^3.4.9", - "react-native-fast-openpgp": "^2.6.0", + "react-native-fast-openpgp": "^2.7.0", "react-native-webview": "^13.2.2", "react-native-webview-crypto": "^0.0.25" }, diff --git a/packages/reactnative/package.json b/packages/reactnative/package.json index e5f689dfc..ff5821306 100644 --- a/packages/reactnative/package.json +++ b/packages/reactnative/package.json @@ -77,7 +77,7 @@ "https-browserify": "^0.0.1", "process": "^0.11.10", "react-native-crypto": "^2.2.0", - "react-native-fast-openpgp": "^2.6.0", + "react-native-fast-openpgp": "2.7.0", "react-native-get-random-values": "^1.9.0", "react-native-level-fs": "^3.0.1", "react-native-os": "^1.2.6", diff --git a/packages/reactnative/src/index.tsx b/packages/reactnative/src/index.tsx index 60cf5f630..a5fd74c76 100644 --- a/packages/reactnative/src/index.tsx +++ b/packages/reactnative/src/index.tsx @@ -39,8 +39,8 @@ const PGPHelper: IPGPHelper = { }, async sign({ message, signingKey }) { - const publicKey = await OpenPGP.convertPrivateKeyToPublicKey(signingKey); - const signature = await OpenPGP.sign(message, publicKey, signingKey, ''); + // const publicKey = await OpenPGP.convertPrivateKeyToPublicKey(signingKey); + const signature = await OpenPGP.sign(message, signingKey, ''); return signature.replace('\nVersion: openpgp-mobile', ''); }, From 25d2f2ff818bdcc396f734dd3823e2c09a81d7af Mon Sep 17 00:00:00 2001 From: Abishek Bashyal <abishek_bashyal@outlook.com> Date: Fri, 3 Nov 2023 17:43:26 +0545 Subject: [PATCH 2/8] rn-pgp-fix-chat-inbox --- packages/reactnative/example/src/App.tsx | 118 ++---------------- packages/reactnative/package.json | 2 +- packages/reactnative/src/index.tsx | 27 ++-- packages/restapi/src/lib/chat/chat.ts | 4 +- packages/restapi/src/lib/chat/chats.ts | 2 +- .../restapi/src/lib/chat/helpers/crypto.ts | 26 ++-- .../restapi/src/lib/chat/helpers/inbox.ts | 14 ++- packages/restapi/src/lib/chat/helpers/pgp.ts | 51 +++++++- .../src/lib/chat/historicalMessages.ts | 1 + packages/restapi/src/lib/pushapi/chat.ts | 3 +- 10 files changed, 112 insertions(+), 136 deletions(-) diff --git a/packages/reactnative/example/src/App.tsx b/packages/reactnative/example/src/App.tsx index 1ac463941..ab8619c8c 100644 --- a/packages/reactnative/example/src/App.tsx +++ b/packages/reactnative/example/src/App.tsx @@ -4,16 +4,7 @@ import { ethers } from 'ethers'; import WebViewCrypto from 'react-native-webview-crypto'; import { ScrollView, StyleSheet, Text } from 'react-native'; import OpenPGP from 'react-native-fast-openpgp'; -import { - NFT_CHAIN_ID_1, - NFT_CHAIN_ID_2, - NFT_CONTRACT_ADDRESS_1, - NFT_CONTRACT_ADDRESS_2, - NFT_HOLDER_WALLET_PRIVATE_KEY_1, - NFT_HOLDER_WALLET_PRIVATE_KEY_2, - NFT_TOKEN_ID_1, - NFT_TOKEN_ID_2, -} from '@env'; + import { PGPHelper, genRandomAddress, @@ -277,117 +268,24 @@ export default function App() { return upgradedProfile; }; - const handleSend = async () => { - const _nftSigner1 = new ethers.Wallet( - `0x${NFT_HOLDER_WALLET_PRIVATE_KEY_1}` - ); - const _nftWalletAddress1 = _nftSigner1.address; - console.log('sending...'); - console.log({ - NFT_CHAIN_ID: NFT_CHAIN_ID_1, - NFT_CONTRACT_ADDRESS: NFT_CONTRACT_ADDRESS_1, - NFT_TOKEN_ID: NFT_TOKEN_ID_1, - }); - const _nftAccount1 = `nft:eip155:${NFT_CHAIN_ID_1}:${NFT_CONTRACT_ADDRESS_1}:${NFT_TOKEN_ID_1}`; - const _nftSigner2 = new ethers.Wallet( - `0x${NFT_HOLDER_WALLET_PRIVATE_KEY_2}` - ); - const _nftWalletAddress2 = _nftSigner2.address; - const _nftAccount2 = `nft:eip155:${NFT_CHAIN_ID_2}:${NFT_CONTRACT_ADDRESS_2}:${NFT_TOKEN_ID_2}`; - - const pk1 = generatePrivateKey(); - const WALLET1 = new ethers.Wallet(pk1); - const _signer1 = new ethers.Wallet(WALLET1.privateKey); - const walletAddress1 = _signer1.address; - const account1 = `eip155:${walletAddress1}`; - - const pk2 = generatePrivateKey(); - const WALLET2 = new ethers.Wallet(pk2); - const _signer2 = new ethers.Wallet(WALLET2.privateKey); - const walletAddress2 = _signer2.address; - const account2 = `eip155:${walletAddress2}`; - - const MESSAGE = 'Hey There!!!'; - const MESSAGE2 = 'Hey There Upgraded User!!!'; - const MESSAGE3 = 'Hey There from Upgraded User!!!'; - - const _env = Constants.ENV.DEV; - - await send({ - messageContent: MESSAGE, - receiverAddress: _nftAccount1, - account: account1, - signer: _signer1, - env: _env, - }); - - await send({ - messageContent: MESSAGE, - receiverAddress: account1, - account: _nftAccount1, - signer: _nftSigner1, - env: _env, - }); + const handleInbox = async () => { + // + }; - await send({ - messageContent: MESSAGE, - receiverAddress: _nftAccount2, - account: _nftAccount1, - signer: _nftSigner1, - env: _env, - }); + const handleSend = async () => { console.log('sent message!'); }; const handleApproveRequest = async () => { - console.log('sending request...'); - - const pk1 = generatePrivateKey(); - const pk2 = generatePrivateKey(); - - const signer1 = new ethers.Wallet(pk1); - const signer2 = new ethers.Wallet(pk2); - - const account1 = `eip155:${signer1.address}`; - const account2 = `eip155:${signer2.address}`; - - const MESSAGE = 'Hey There!!!'; - - await createUser({ - account: account1, - signer: signer1, - env: Constants.ENV.DEV, - }); - - await createUser({ - account: account2, - signer: signer2, - env: Constants.ENV.DEV, - }); - - await send({ - messageContent: MESSAGE, - receiverAddress: signer2.address, - account: account1, - signer: signer1, - env: Constants.ENV.DEV, - }); - - console.log('approving request...'); - await approve({ - senderAddress: signer1.address, - status: 'Approved', - account: account2, - signer: signer2, - env: Constants.ENV.DEV, - }); - console.log('successfully approved request!'); }; return ( <ScrollView style={styles.container} overScrollMode="never"> <WebViewCrypto /> + <Text style={styles.button} onPress={handleInbox}> + Inbox + </Text> <Text style={styles.button} onPress={handleUserCreate}> New User </Text> diff --git a/packages/reactnative/package.json b/packages/reactnative/package.json index ff5821306..79b77f1fd 100644 --- a/packages/reactnative/package.json +++ b/packages/reactnative/package.json @@ -47,7 +47,7 @@ "prepack": "bob build", "release": "release-it", "example": "yarn --cwd example", - "bootstrap": "yarn example && yarn install && yarn example pods", + "bootstrap": "yarn example && yarn install", "clean": "del-cli android/build example/android/build example/android/app/build example/ios/build", "postinstall": "node_modules/.bin/rn-nodeify --install crypto,assert,url,stream,events,http,https,os,url,net,fs --hack && patch-package" }, diff --git a/packages/reactnative/src/index.tsx b/packages/reactnative/src/index.tsx index a5fd74c76..ded6c8989 100644 --- a/packages/reactnative/src/index.tsx +++ b/packages/reactnative/src/index.tsx @@ -23,12 +23,6 @@ crypto.getRandomValues = (input) => { return input; }; -// const randomBytes = new Uint8Array(8); -// console.log('inital', randomBytes); -// //@ts-ignore -// let res = crypto.getRandomValues(randomBytes); -// console.log('got res', res); - const PGPHelper: IPGPHelper = { async generateKeyPair() { let keys = await OpenPGP.generate({ keyOptions: { rsaBits: 2048 } }); @@ -39,7 +33,6 @@ const PGPHelper: IPGPHelper = { }, async sign({ message, signingKey }) { - // const publicKey = await OpenPGP.convertPrivateKeyToPublicKey(signingKey); const signature = await OpenPGP.sign(message, signingKey, ''); return signature.replace('\nVersion: openpgp-mobile', ''); }, @@ -48,6 +41,24 @@ const PGPHelper: IPGPHelper = { const encryptedSecret = await OpenPGP.encrypt(plainText, keys.join('\n')); return encryptedSecret; }, + + async pgpDecrypt({ + cipherText, + toPrivateKeyArmored, + }: { + cipherText: any; + toPrivateKeyArmored: string; + }): Promise<string> { + return await OpenPGP.decrypt(cipherText, toPrivateKeyArmored, ''); + }, + + async verifySignature({}: { + messageContent: string; + signatureArmored: string; + publicKeyArmored: string; + }): Promise<void> { + // TODO: add verification + }, }; const createUser = async (options: PushApi.user.CreateUserProps) => { @@ -78,6 +89,8 @@ const conversationHash = async ( }; const chats = async (options: ChatsOptionsType) => { + console.log('chats...'); + let chatsList = await PushApi.chat.chatsCore(options, PGPHelper); return chatsList; }; diff --git a/packages/restapi/src/lib/chat/chat.ts b/packages/restapi/src/lib/chat/chat.ts index 6d9666b4f..e80533070 100644 --- a/packages/restapi/src/lib/chat/chat.ts +++ b/packages/restapi/src/lib/chat/chat.ts @@ -2,7 +2,7 @@ import axios from 'axios'; import { getAPIBaseUrls, isValidETHAddress, walletToPCAIP10 } from '../helpers'; import Constants, { ENV } from '../constants'; import { IFeeds } from '../types'; -import { addDeprecatedInfo, getInboxLists, getUserDID } from './helpers'; +import { PGPHelper, addDeprecatedInfo, getInboxLists, getUserDID } from './helpers'; export const chat = async (options: { account: string; @@ -35,7 +35,7 @@ export const chat = async (options: { toDecrypt, pgpPrivateKey, env, - }); + },PGPHelper); return feed; } else { return chat; diff --git a/packages/restapi/src/lib/chat/chats.ts b/packages/restapi/src/lib/chat/chats.ts index 349a7d627..34ab2ee39 100644 --- a/packages/restapi/src/lib/chat/chats.ts +++ b/packages/restapi/src/lib/chat/chats.ts @@ -59,7 +59,7 @@ export const chatsCore = async (options: ChatsOptionsType, pgpHelper: IPGPHelper toDecrypt, pgpPrivateKey, env, - }); + },pgpHelper); return feeds; } catch (err) { console.error(`[Push SDK] - API ${chats.name}: `, err); diff --git a/packages/restapi/src/lib/chat/helpers/crypto.ts b/packages/restapi/src/lib/chat/helpers/crypto.ts index 3637855b0..85edfe940 100644 --- a/packages/restapi/src/lib/chat/helpers/crypto.ts +++ b/packages/restapi/src/lib/chat/helpers/crypto.ts @@ -23,7 +23,7 @@ import { get as getUser } from '../../user'; import { createUserService } from './service'; import Constants, { ENV } from '../../constants'; import { getDomainInformation, getTypeInformation } from './signature'; -import { pgpDecrypt, verifySignature } from './pgp'; +import { IPGPHelper, pgpDecrypt, verifySignature } from './pgp'; import { aesDecrypt } from './aes'; const SIG_TYPE_V2 = 'eip712v2'; @@ -41,6 +41,7 @@ interface IDecryptMessage { chainId: number; currentChat: IFeeds; inbox: IFeeds[]; + pgpHelper:IPGPHelper; } export const encryptAndSign = async ({ @@ -150,11 +151,13 @@ export const decryptFeeds = async ({ feeds, connectedUser, pgpPrivateKey, + pgpHelper, env = Constants.ENV.PROD, }: { feeds: IFeeds[]; connectedUser: IUser; pgpPrivateKey?: string; + pgpHelper: PGP.IPGPHelper env: ENV; }): Promise<IFeeds[]> => { let otherPeer: IUser; @@ -177,7 +180,8 @@ export const decryptFeeds = async ({ feed.msg = await decryptAndVerifyMessage( feed.msg, signatureValidationPubliKey, - pgpPrivateKey + pgpPrivateKey, + pgpHelper ); } } @@ -190,6 +194,7 @@ export const decryptMessages = async ({ account, currentChat, inbox, + pgpHelper, }: IDecryptMessage): Promise<IMessageIPFSWithCID> => { if (connectedUser.privateKey) { if (savedMsg.encType !== 'PlainText' && savedMsg.encType !== null) { @@ -212,7 +217,8 @@ export const decryptMessages = async ({ savedMsg = (await decryptAndVerifyMessage( savedMsg, signatureValidationPubliKey, - connectedUser.privateKey + connectedUser.privateKey, + pgpHelper, )) as IMessageIPFSWithCID; } } @@ -435,7 +441,9 @@ export async function getDecryptedPrivateKey( export const decryptAndVerifyMessage = async ( message: IMessageIPFS | IMessageIPFSWithCID, pgpPublicKey: string, - pgpPrivateKey: string + pgpPrivateKey: string, + pgpHelper: IPGPHelper + ): Promise<IMessageIPFS | IMessageIPFSWithCID> => { /** * VERIFICATION @@ -457,7 +465,7 @@ export const decryptAndVerifyMessage = async ( }; const hash = CryptoJS.SHA256(JSON.stringify(bodyToBeHashed)).toString(); const signature = message.verificationProof.split(':')[1]; - await verifySignature({ + await pgpHelper.verifySignature({ messageContent: hash, signatureArmored: signature, publicKeyArmored: pgpPublicKey, @@ -472,20 +480,20 @@ export const decryptAndVerifyMessage = async ( }; const hash = CryptoJS.SHA256(JSON.stringify(bodyToBeHashed)).toString(); try { - await verifySignature({ + await pgpHelper.verifySignature({ messageContent: hash, signatureArmored: message.signature, publicKeyArmored: pgpPublicKey, }); } catch (err) { - await verifySignature({ + await pgpHelper.verifySignature({ messageContent: message.messageContent, signatureArmored: message.signature, publicKeyArmored: pgpPublicKey, }); } } else { - await verifySignature({ + await pgpHelper.verifySignature({ messageContent: message.messageContent, signatureArmored: message.signature, publicKeyArmored: pgpPublicKey, @@ -500,7 +508,7 @@ export const decryptAndVerifyMessage = async ( */ const decryptedMessage: IMessageIPFS | IMessageIPFSWithCID = { ...message }; try { - const secretKey: string = await pgpDecrypt({ + const secretKey: string = await pgpHelper.pgpDecrypt({ cipherText: message.encryptedSecret, toPrivateKeyArmored: pgpPrivateKey, }); diff --git a/packages/restapi/src/lib/chat/helpers/inbox.ts b/packages/restapi/src/lib/chat/helpers/inbox.ts index f73f9a735..43e3bfc2f 100644 --- a/packages/restapi/src/lib/chat/helpers/inbox.ts +++ b/packages/restapi/src/lib/chat/helpers/inbox.ts @@ -1,3 +1,4 @@ +import { IPGPHelper, PGPHelper } from '.'; import Constants, { ENV } from '../../constants'; import { isValidCAIP10NFTAddress, pCAIP10ToWallet } from '../../helpers'; import { IFeeds, IMessageIPFS, IUser, SpaceIFeeds } from '../../types'; @@ -30,11 +31,13 @@ type DecryptConverationType = { messages: IMessageIPFS[]; connectedUser: IUser; //caip10 pgpPrivateKey?: string; + pgpHelper: IPGPHelper; env?: ENV; }; export const getInboxLists = async ( - options: InboxListsType + options: InboxListsType, + pgpHelper:IPGPHelper=PGPHelper ): Promise<IFeeds[]> => { const { lists, @@ -43,6 +46,7 @@ export const getInboxLists = async ( pgpPrivateKey, env = Constants.ENV.PROD, } = options || {}; + const connectedUser = await getUser({ account: pCAIP10ToWallet(user), env }); const feeds: IFeeds[] = []; for (const list of lists) { @@ -74,7 +78,7 @@ export const getInboxLists = async ( } if (toDecrypt) - return decryptFeeds({ feeds, connectedUser, pgpPrivateKey, env }); + return decryptFeeds({ feeds, connectedUser, pgpPrivateKey, pgpHelper, env }); return feeds; }; @@ -119,7 +123,7 @@ export const getSpaceInboxLists = async ( } if (toDecrypt) - return decryptFeeds({ feeds, connectedUser, pgpPrivateKey, env }); + return decryptFeeds({ feeds, connectedUser, pgpPrivateKey, pgpHelper:PGPHelper, env }); return feeds; }; @@ -163,6 +167,7 @@ export const decryptConversation = async (options: DecryptConverationType) => { messages, connectedUser, pgpPrivateKey, + pgpHelper, env = Constants.ENV.PROD, } = options || {}; let otherPeer: IUser; @@ -193,7 +198,8 @@ export const decryptConversation = async (options: DecryptConverationType) => { messages[i] = await decryptAndVerifyMessage( message, signatureValidationPubliKey, - pgpPrivateKey + pgpPrivateKey, + pgpHelper, ); } } diff --git a/packages/restapi/src/lib/chat/helpers/pgp.ts b/packages/restapi/src/lib/chat/helpers/pgp.ts index 7d23e6591..6240dc60d 100644 --- a/packages/restapi/src/lib/chat/helpers/pgp.ts +++ b/packages/restapi/src/lib/chat/helpers/pgp.ts @@ -4,6 +4,8 @@ interface IPGPHelper{ generateKeyPair(): Promise<{ privateKeyArmored: string; publicKeyArmored: string }>; sign ({ message, signingKey }: { message: string; signingKey: string }): Promise<string>; pgpEncrypt ({ plainText, keys }: { plainText: string; keys: Array<string> }): Promise<string>; + pgpDecrypt({cipherText,toPrivateKeyArmored}: { cipherText: any, toPrivateKeyArmored: string}): Promise<string>; + verifySignature({ messageContent, signatureArmored, publicKeyArmored, }: {messageContent: string;signatureArmored: string; publicKeyArmored: string;}): Promise<void> } const PGPHelper:IPGPHelper = { @@ -38,6 +40,53 @@ const PGPHelper:IPGPHelper = { }); return encrypted; }, + + async pgpDecrypt({ + cipherText, + toPrivateKeyArmored + }: { + cipherText: any + toPrivateKeyArmored: string + }): Promise<string>{ + + const message = await openpgp.readMessage({ armoredMessage: cipherText }) + const privateKey: openpgp.PrivateKey = await openpgp.readPrivateKey({ armoredKey: toPrivateKeyArmored }) + + const { data: decrypted } = await openpgp.decrypt({ + message, + decryptionKeys: privateKey + }) + + return decrypted as string + }, + + async verifySignature({ + messageContent, + signatureArmored, + publicKeyArmored, + }: { + messageContent: string + signatureArmored: string + publicKeyArmored: string + }): Promise<void> { + const message: openpgp.Message<string> = await openpgp.createMessage({ text: messageContent }) + const signature: openpgp.Signature = await openpgp.readSignature({ + armoredSignature: signatureArmored + }) + const publicKey: openpgp.PublicKey = await openpgp.readKey({ armoredKey: publicKeyArmored }) + const verificationResult = await openpgp.verify({ + message, + signature, + verificationKeys: publicKey + }) + const { verified } = verificationResult.signatures[0] + try { + await verified + } catch (e) { + throw new Error('Signature could not be verified: ' + e) + } + } + } export {IPGPHelper, PGPHelper} @@ -84,7 +133,7 @@ export const sign = async ({ message, signingKey }: { message: string; signingKe export const verifySignature = async ({ messageContent, signatureArmored, - publicKeyArmored + publicKeyArmored, }: { messageContent: string signatureArmored: string diff --git a/packages/restapi/src/lib/chat/historicalMessages.ts b/packages/restapi/src/lib/chat/historicalMessages.ts index ae7f4377c..3ca06dfb6 100644 --- a/packages/restapi/src/lib/chat/historicalMessages.ts +++ b/packages/restapi/src/lib/chat/historicalMessages.ts @@ -63,6 +63,7 @@ export const historyCore = async ( messages: updatedMessages, connectedUser, pgpPrivateKey, + pgpHelper, env, }); } diff --git a/packages/restapi/src/lib/pushapi/chat.ts b/packages/restapi/src/lib/pushapi/chat.ts index 193db597a..de027bb84 100644 --- a/packages/restapi/src/lib/pushapi/chat.ts +++ b/packages/restapi/src/lib/pushapi/chat.ts @@ -19,7 +19,7 @@ import { } from './pushAPITypes'; import * as PUSH_USER from '../user'; import * as PUSH_CHAT from '../chat'; -import { getUserDID } from '../chat/helpers'; +import { PGPHelper, getUserDID } from '../chat/helpers'; import { isValidETHAddress } from '../helpers'; import { ChatUpdateGroupProfileType, @@ -135,6 +135,7 @@ export class Chat { pgpPrivateKey: this.decryptedPgpPvtKey, env: this.env, messages: messagePayloads, + pgpHelper:PGPHelper, connectedUser: await this.userInstance.info(), }); } From 2bdacdd06a382f94339d4284206859aafdd7192f Mon Sep 17 00:00:00 2001 From: Abishek Bashyal <abishek_bashyal@outlook.com> Date: Sun, 12 Nov 2023 22:04:29 +0545 Subject: [PATCH 3/8] feat: chat requests method added --- packages/reactnative/src/index.tsx | 7 +++++-- packages/restapi/src/lib/chat/requests.ts | 15 +++++++++++---- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/packages/reactnative/src/index.tsx b/packages/reactnative/src/index.tsx index ded6c8989..a8ab90ee0 100644 --- a/packages/reactnative/src/index.tsx +++ b/packages/reactnative/src/index.tsx @@ -89,12 +89,14 @@ const conversationHash = async ( }; const chats = async (options: ChatsOptionsType) => { - console.log('chats...'); - let chatsList = await PushApi.chat.chatsCore(options, PGPHelper); return chatsList; }; +const requests = async (options: ChatsOptionsType) => { + return await PushApi.chat.requestsCore(options, PGPHelper); +}; + const latest = async (options: LatestMessagesOptionsType) => { let latestMsg = await PushApi.chat.latestCore(options, PGPHelper); return latestMsg; @@ -145,6 +147,7 @@ export { createGroup, updateGroup, chats, + requests, decryptPGPKey, profileUpgrade, send, diff --git a/packages/restapi/src/lib/chat/requests.ts b/packages/restapi/src/lib/chat/requests.ts index 773539de7..735d3ef1b 100644 --- a/packages/restapi/src/lib/chat/requests.ts +++ b/packages/restapi/src/lib/chat/requests.ts @@ -2,7 +2,7 @@ import axios from 'axios'; import { getAPIBaseUrls, isValidETHAddress } from '../helpers'; import Constants, { ENV } from '../constants'; import { IFeeds } from '../types'; -import { addDeprecatedInfo, getInboxLists, getUserDID } from './helpers'; +import { IPGPHelper, PGPHelper, addDeprecatedInfo, getInboxLists, getUserDID } from './helpers'; export type RequestOptionsType = { account: string; @@ -29,8 +29,15 @@ export type RequestOptionsType = { * The first time an address wants to send a message to another peer, the address sends an intent request. This first message shall not land in this peer Inbox but in its Request box. * This function will return all the chats that landed on the address' Request box. The user can then approve the request or ignore it for now. */ -export const requests = async ( +export const requests = async ( options: RequestOptionsType +): Promise<IFeeds[]> => { + return await requestsCore(options, PGPHelper) +}; + +export const requestsCore = async ( + options: RequestOptionsType, + pgpHelper:IPGPHelper, ): Promise<IFeeds[]> => { const { account, @@ -56,11 +63,11 @@ export const requests = async ( toDecrypt, pgpPrivateKey, env, - }); + },pgpHelper); return Feeds; } catch (err) { console.error(`[Push SDK] - API ${requests.name}: `, err); throw Error(`[Push SDK] - API ${requests.name}: ${err}`); } -}; +}; \ No newline at end of file From f13c1e258313a25e532e33af469aacce97e9407f Mon Sep 17 00:00:00 2001 From: kalashshah <202051096@iiitvadodara.ac.in> Date: Tue, 14 Nov 2023 12:04:06 +0530 Subject: [PATCH 4/8] chore: update rn sdk dependencies and ease install --- packages/reactnative/package.json | 13 ++++++++----- packages/reactnative/src/index.tsx | 12 ++++++++++++ 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/packages/reactnative/package.json b/packages/reactnative/package.json index 79b77f1fd..64a44772c 100644 --- a/packages/reactnative/package.json +++ b/packages/reactnative/package.json @@ -49,7 +49,7 @@ "example": "yarn --cwd example", "bootstrap": "yarn example && yarn install", "clean": "del-cli android/build example/android/build example/android/app/build example/ios/build", - "postinstall": "node_modules/.bin/rn-nodeify --install crypto,assert,url,stream,events,http,https,os,url,net,fs --hack && patch-package" + "postinstall": "node_modules/.bin/rn-nodeify --install crypto,assert,url,stream,events,http,https,os,url,net,fs --hack && npx patch-package" }, "keywords": [ "react-native", @@ -67,9 +67,10 @@ "registry": "https://registry.npmjs.org/" }, "dependencies": { - "@pushprotocol/restapi": "../../dist/packages/restapi", + "@kalashshah/restapi": "0.1.2", "@tradle/react-native-http": "^2.0.1", "assert": "^1.5.0", + "axios": "^0.27.2", "crypto": "^1.0.1", "crypto-js": "3.1.9-1", "ethers": "^5.7.1", @@ -83,13 +84,16 @@ "react-native-os": "^1.2.6", "react-native-randombytes": "^3.6.1", "react-native-tcp": "^3.3.2", - "react-native-webview": "^11.26.1", + "react-native-webview": "^13.2.2", "react-native-webview-crypto": "^0.0.25", "readable-stream": "^1.0.33", + "rn-nodeify": "^10.3.0", "stream": "^0.0.2", "stream-browserify": "^1.0.0", "text-encoding": "0.7.0", - "url": "^0.10.3" + "url": "^0.10.3", + "uuid": "^9.0.0", + "viem": "^1.3.0" }, "devDependencies": { "@commitlint/config-conventional": "^17.0.2", @@ -113,7 +117,6 @@ "react-native": "0.71.11", "react-native-builder-bob": "^0.20.4", "release-it": "^15.0.0", - "rn-nodeify": "^10.3.0", "typescript": "^4.5.2" }, "resolutions": { diff --git a/packages/reactnative/src/index.tsx b/packages/reactnative/src/index.tsx index a8ab90ee0..0e7954d9d 100644 --- a/packages/reactnative/src/index.tsx +++ b/packages/reactnative/src/index.tsx @@ -3,7 +3,9 @@ import 'text-encoding'; import 'react-native-crypto'; import 'react-native-get-random-values'; +import React from 'react'; import OpenPGP from 'react-native-fast-openpgp'; +import WebViewCrypto from 'react-native-webview-crypto'; import { ethers } from 'ethers'; import * as PushApi from '@pushprotocol/restapi'; @@ -133,6 +135,15 @@ const genRandomAddress = async () => { const profileUpgrade = PushApi.user.auth.update; +const PushRNWrapper = ({ children }: { children: React.ReactNode }) => { + return ( + <React.Fragment> + <WebViewCrypto /> + {children} + </React.Fragment> + ); +}; + export { PGPHelper, genRandomAddress, @@ -153,4 +164,5 @@ export { send, approve, Constants, + PushRNWrapper, }; From c63b3b2591d861f0346400142fbced93b4b13333 Mon Sep 17 00:00:00 2001 From: kalashshah <202051096@iiitvadodara.ac.in> Date: Tue, 14 Nov 2023 15:16:34 +0530 Subject: [PATCH 5/8] chore: update rn sdk docs --- packages/reactnative/README.md | 337 ++++++++++++++++++++++++++++++++- 1 file changed, 333 insertions(+), 4 deletions(-) diff --git a/packages/reactnative/README.md b/packages/reactnative/README.md index f0d3d9f26..e01511f45 100644 --- a/packages/reactnative/README.md +++ b/packages/reactnative/README.md @@ -1,8 +1,337 @@ -# @push/react-native-sdk -PUSH +<h1 align="center"> + <a href="https://push.org/#gh-light-mode-only"> + <img width='20%' height='10%' +src="https://res.cloudinary.com/drdjegqln/image/upload/v1686227557/Push-Logo-Standard-Dark_xap7z5.png"> + </a> + <a href="https://push.org/#gh-dark-mode-only"> + <img width='20%' height='10%' +src="https://res.cloudinary.com/drdjegqln/image/upload/v1686227558/Push-Logo-Standard-White_dlvapc.png"> + </a> +</h1> -## Installation +<p align="center"> + <i align="center">Push Protocol is a web3 communication network, enabling cross-chain notifications, messaging, video, and NFT chat for dapps, wallets, and services.🚀</i> +</p> -```sh +<h4 align="center"> + + <a href="https://discord.com/invite/pushprotocol"> + <img src="https://img.shields.io/badge/discord-7289da.svg?style=flat-square" alt="discord"> + </a> + <a href="https://twitter.com/pushprotocol"> + <img src="https://img.shields.io/badge/twitter-18a1d6.svg?style=flat-square" alt="twitter"> + </a> + <a href="https://www.youtube.com/@pushprotocol"> + <img src="https://img.shields.io/badge/youtube-d95652.svg?style=flat-square&" alt="youtube"> + </a> +</h4> +</h1> + +# Index + +- [Push React Native SDK](#push-react-native-sdk) +- [How to use in your app?](#how-to-use-in-your-app) + + - [Install the SDK](#install-the-sdk) + - [Install the peer dependencies](#install-the-peer-dependencies) + - [Nodeify the crypto packages](#nodeify-the-crypto-packages) + - [Wrap your app with the PushRNWrapper](#wrap-your-app-with-the-pushrnwrapper) + - [Start using the Push SDK in your app](#start-using-the-push-sdk-in-your-app) + +- [React Native SDK Features](#react-native-sdk-features) + + - [User](#user) + - [Create User](#create-user) + - [Get User](#get-user) + - [Profile Update](#profile-update) + - [Profile Upgrade](#profile-upgrade) + - [Chat](#chat) + - [Decrypt PGP key](#decrypt-pgp-key) + - [Chats](#chats) + - [Conversation Hash](#conversation-hash) + - [Latest Chat message](#latest-chat-message) + - [Create Group](#create-group) + - [Update Group](#update-group) + +- [Other Features](#other-features) +- [Resources](#resources) +- [Contributing](#contributing) +- [License](#license) + +# Push React Native SDK + +<p> +Push SDK provides an abstraction layer to integrate Push protocol features with your Frontend as well as Backend. +This SDK is a react-native based repo of packages that helps developers to : + +- Build PUSH features into their DApps + - Notifications + - Chat + - Group Chat + +without having to write a lot of boilerplate code. All the heavy lifting is done by the SDK, so that you the developer can focus on building features and bootstrap a DApp with PUSH features in no time! + +</p> +</div> + +## How to use in your app? + +#### Install the SDK + +```bash +yarn add @push/react-native-sdk +``` + +or + +```bash npm install @push/react-native-sdk ``` + +#### Install the peer dependencies + +```bash +yarn add react-native-randombytes@3.6.1 react-native-webview@13.2.2 react-native-webview-crypto@0.0.25 +``` + +or + +```bash +npm install react-native-randombytes@3.6.1 react-native-webview@13.2.2 react-native-webview-crypto@0.0.25 +``` + +#### Nodeify the crypto packages + +Add postinstall script in your `package.json` file if `node_modules` are not nodeified already + +```bash +"postinstall": "node_modules/.bin/rn-nodeify --install crypto,assert,url,stream,events,http,https,os,url,net,fs --hack" +``` + +#### Wrap your app with the PushRNWrapper + +```jsx +import { PushRNWrapper } from '@push/react-native-sdk'; + +return ( + <PushRNWrapper> + <App /> + </PushRNWrapper> +); +``` + +#### Start using the Push SDK in your app + +```jsx +import { createUser, Constants } from '@push/react-native-sdk'; + +const user = await createUser({ + account: account, + signer: signer, + env: Constants.ENV.DEV, +}); +``` + +## React Native SDK Features + +### User + +#### Create User + +```jsx +import { createUser, Constants } from '@push/react-native-sdk'; + +const user = await createUser({ + account: 'eip155:0xACEe0D180d0118FD4F3027Ab801cc862520570d1', + signer: signer, + env: Constants.ENV.DEV, +}); +``` + +#### Get User + +```jsx +import { get, Constants } from '@push/react-native-sdk'; + +const user = await get({ + account: 'eip155:0xACEe0D180d0118FD4F3027Ab801cc862520570d1', + env: Constants.ENV.DEV, +}); +``` + +#### Profile Update + +```jsx +import { profileUpdate, Constants } from '@push/react-native-sdk'; + +await profileUpdate({ + account: 'eip155:0xACEe0D180d0118FD4F3027Ab801cc862520570d1', + env: Constants.ENV.DEV, + pgpPrivateKey: pgpPrivateKey, + profile: { + name: 'Updated Name', + desc: 'Updated Desc', + }, +}); +``` + +#### Profile Upgrade + +```jsx +import { profileUpgrade, Constants } from '@push/react-native-sdk'; + +const upgradedProfile = await profileUpgrade({ + signer: signer, + pgpPrivateKey: pgpPrivateKey, + pgpPublicKey: pgpPublicKey, + pgpEncryptionVersion: Constants.ENCRYPTION_TYPE.NFTPGP_V1, + account: account, + env: Constants.ENV.DEV, + additionalMeta: { + NFTPGP_V1: { + password: '0xrandompass', //new nft profile password + }, + }, +}); +``` + +### Chat + +#### Decrypt PGP key + +```jsx +import { PushApi } from '@push/react-native-sdk'; + +const user = await get({ + account: 'eip155:0xACEe0D180d0118FD4F3027Ab801cc862520570d1', + env: Constants.ENV.DEV, +}); + +const pgpDecryptedPvtKey = await PushApi.chat.decryptPGPKey({ + encryptedPGPPrivateKey: user.encryptedPrivateKey, + signer: signer, +}); +``` + +#### Chats + +```jsx +import { chats, Constants } from '@push/react-native-sdk'; + +const chatList = await chats({ + account: 'eip155:0xACEe0D180d0118FD4F3027Ab801cc862520570d1', + pgpPrivateKey: pgpDecryptedPvtKey, + toDecrypt: true, + env: Constants.ENV.DEV, +}); +``` + +#### Conversation Hash + +```jsx +import { PushApi, Constants } from '@push/react-native-sdk'; + +const hash = await PushApi.chat.conversationHash({ + account: 'eip155:0xACEe0D180d0118FD4F3027Ab801cc862520570d1', + conversationId: conversationId, + env: Constants.ENV.DEV, +}); +``` + +#### Latest Chat message + +```jsx +import { latest, Constants } from '@push/react-native-sdk'; + +const msg = await latest({ + threadhash: hash, + toDecrypt: true, + account: 'eip155:0xACEe0D180d0118FD4F3027Ab801cc862520570d1', + env: Constants.ENV.DEV, +}); +``` + +#### Create Group + +```jsx +import { createGroup, Constants } from '@push/react-native-sdk'; + +const res = await createGroup({ + groupName: groupName, + groupDescription: 'test', + groupImage: 'https://github.com', + account: account, + signer: signer, + members: [ + '0x83d4c16b15F7BBA501Ca1057364a1F502d1c34D5', + '0x6Ff7DF70cAACAd6B35d2d30eca6bbb4E86fEE62f', + ], + admins: [], + isPublic: true, + env: Constants.ENV.DEV, +}); +``` + +#### Update Group + +```jsx +import { updateGroup, Constants } from '@push/react-native-sdk'; + +const res = await updateGroup({ + groupName, + groupDescription: 'test', + groupImage: 'https://github.com', + chatId, + account: account, + signer: signer, + admins: ['0x83d4c16b15F7BBA501Ca1057364a1F502d1c34D5'], + members: [ + '0x6Ff7DF70cAACAd6B35d2d30eca6bbb4E86fEE62f', + '0x6d118b28ebd82635A30b142D11B9eEEa2c0bea26', + '0x83d4c16b15F7BBA501Ca1057364a1F502d1c34D5', + ], + env: Constants.ENV.DEV, +}); +``` + +## Other Features + +All the remaining features of the `restapi` SDK are available in a similar manner to the `restapi` package. You can read more about them <a href="https://github.com/ethereum-push-notification-service/push-sdk/blob/main/packages/restapi/README.md">HERE</a> + +These functions can be accessed by simply importing the `PushApi` object from the `@push/react-native-sdk` package. + +```jsx +import { PushApi } from '@push/react-native-sdk'; + +const response = await PushApi.chat.getGroupByName({ + groupName: 'Push Group Chat 3', + env: 'staging', +}); +``` + +## Resources + +- **[Website](https://push.org)** To checkout our Product. +- **[Docs](https://docs.push.org/developers/)** For comprehensive documentation. +- **[Blog](https://medium.com/push-protocol)** To learn more about our partners, new launches, etc. +- **[Discord](discord.gg/pushprotocol)** for support and discussions with the community and the team. +- **[GitHub](https://github.com/ethereum-push-notification-service)** for source code, project board, issues, and pull requests. +- **[Twitter](https://twitter.com/pushprotocol)** for the latest updates on the product and published blogs. + +## Contributing + +Push Protocol is an open source Project. We firmly believe in a completely transparent development process and value any contributions. We would love to have you as a member of the community, whether you are assisting us in bug fixes, suggesting new features, enhancing our documentation, or simply spreading the word. + +- Bug Report: Please create a bug report if you encounter any errors or problems while utilising the Push Protocol. +- Feature Request: Please submit a feature request if you have an idea or discover a capability that would make development simpler and more reliable. +- Documentation Request: If you're reading the Push documentation and believe that we're missing something, please create a docs request. + +Read how you can contribute <a href="https://github.com/ethereum-push-notification-service/push-sdk/blob/main/contributing.md">HERE</a> + +Not sure where to start? Join our discord and we will help you get started! + +<a href="https://discord.gg/pushprotocol" title="Join Our Community"><img src="https://www.freepnglogos.com/uploads/discord-logo-png/playerunknown-battlegrounds-bgparty-15.png" width="200" alt="Discord" /></a> + +## License + +Check out our License <a href='https://github.com/ethereum-push-notification-service/push-sdk/blob/main/license-v1.md'>HERE </a> From 2fcb3d46d54a2f709f506b5e5fd2857a6ddd6ac3 Mon Sep 17 00:00:00 2001 From: kalashshah <202051096@iiitvadodara.ac.in> Date: Thu, 16 Nov 2023 16:48:35 +0530 Subject: [PATCH 6/8] chore: update crypto getRandomValues function --- .../react-native-get-random-values+1.9.0.patch | 13 +++++++++++++ packages/reactnative/src/index.tsx | 17 ++--------------- 2 files changed, 15 insertions(+), 15 deletions(-) create mode 100644 packages/examples/sdk-react-native/patches/react-native-get-random-values+1.9.0.patch diff --git a/packages/examples/sdk-react-native/patches/react-native-get-random-values+1.9.0.patch b/packages/examples/sdk-react-native/patches/react-native-get-random-values+1.9.0.patch new file mode 100644 index 000000000..6e7a83bfd --- /dev/null +++ b/packages/examples/sdk-react-native/patches/react-native-get-random-values+1.9.0.patch @@ -0,0 +1,13 @@ + +diff --git a/node_modules/react-native-get-random-values/index.js b/node_modules/react-native-get-random-values/index.jsindex d5a72cc..dacd0f0 100644 +--- a/node_modules/react-native-get-random-values/index.js ++++ b/node_modules/react-native-get-random-values/index.js +@@ -74,6 +74,6 @@ if (typeof global.crypto !== 'object') { + global.crypto = {} + } + +-if (typeof global.crypto.getRandomValues !== 'function') { ++// if (typeof global.crypto.getRandomValues !== 'function') { + global.crypto.getRandomValues = getRandomValues +-} ++// } diff --git a/packages/reactnative/src/index.tsx b/packages/reactnative/src/index.tsx index 0e7954d9d..fe9c11cc0 100644 --- a/packages/reactnative/src/index.tsx +++ b/packages/reactnative/src/index.tsx @@ -19,12 +19,6 @@ import { ChatsOptionsType } from '@pushprotocol/restapi/src/lib/chat/chats.js'; import Constants from '@pushprotocol/restapi/src/lib/constants.js'; import { decryptPGPKey } from '@pushprotocol/restapi/src/lib/helpers/crypto.js'; -// TODO:fix this -//@ts-ignore -crypto.getRandomValues = (input) => { - return input; -}; - const PGPHelper: IPGPHelper = { async generateKeyPair() { let keys = await OpenPGP.generate({ keyOptions: { rsaBits: 2048 } }); @@ -120,16 +114,9 @@ const updateGroup = async (options: ChatUpdateGroupType) => { }; // checking if ethers works -const genRandomAddress = async () => { - const privateKey = - '25520e97c3f31af3824ff62e350126299997322ff7d340ffd81faa7f84609ef9'; - - // Create an instance of Wallet using the private key - const wallet = new ethers.Wallet(privateKey); - - // Get the address from the wallet +const genRandomAddress = () => { + const wallet = ethers.Wallet.createRandom(); const address = wallet.address; - return address; }; From ada944deea04c33d6b4f1e914da252298fb54f4e Mon Sep 17 00:00:00 2001 From: kalashshah <202051096@iiitvadodara.ac.in> Date: Thu, 16 Nov 2023 16:48:54 +0530 Subject: [PATCH 7/8] chore: move example app to examples folder --- .../examples/sdk-react-native/.eslintrc.js | 4 + packages/examples/sdk-react-native/.gitignore | 66 ++ .../examples/sdk-react-native/.prettierrc.js | 7 + .../examples/sdk-react-native/.watchmanconfig | 1 + .../sdk-react-native}/Gemfile | 5 +- packages/examples/sdk-react-native/README.md | 79 +++ .../android/app/build.gradle | 55 +- .../android/app/debug.keystore | Bin .../android/app/proguard-rules.pro | 0 .../android/app/src/debug/AndroidManifest.xml | 0 .../com/rnsdktest}/ReactNativeFlipper.java | 2 +- .../android/app/src/main/AndroidManifest.xml | 0 .../java/com/rnsdktest}/MainActivity.java | 9 +- .../java/com/rnsdktest}/MainApplication.java | 2 +- .../res/drawable/rn_edit_text_material.xml | 2 +- .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin .../res/mipmap-hdpi/ic_launcher_round.png | Bin .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin .../res/mipmap-mdpi/ic_launcher_round.png | Bin .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin .../res/mipmap-xhdpi/ic_launcher_round.png | Bin .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin .../app/src/main/res/values/strings.xml | 3 + .../app/src/main/res/values/styles.xml | 0 .../com/rnsdktest}/ReactNativeFlipper.java | 2 +- .../sdk-react-native}/android/build.gradle | 2 +- .../android/gradle.properties | 2 +- .../android/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 61574 bytes .../gradle/wrapper/gradle-wrapper.properties | 3 +- .../sdk-react-native}/android/gradlew | 18 +- .../sdk-react-native}/android/gradlew.bat | 181 ++--- .../sdk-react-native}/android/settings.gradle | 4 +- packages/examples/sdk-react-native/app.json | 4 + .../examples/sdk-react-native/babel.config.js | 3 + packages/examples/sdk-react-native/index.js | 5 + .../sdk-react-native}/ios/Podfile | 18 +- .../ios/rnsdktest.xcodeproj}/project.pbxproj | 166 +++-- .../xcschemes/rnsdktest.xcscheme} | 24 +- .../ios/rnsdktest}/AppDelegate.h | 0 .../ios/rnsdktest}/AppDelegate.mm | 12 +- .../AppIcon.appiconset/Contents.json | 0 .../rnsdktest}/Images.xcassets/Contents.json | 0 .../ios/rnsdktest}/Info.plist | 2 +- .../ios/rnsdktest}/LaunchScreen.storyboard | 2 +- .../sdk-react-native/ios/rnsdktest}/main.m | 0 .../ios/rnsdktestTests}/Info.plist | 0 .../ios/rnsdktestTests/rnsdktestTests.m} | 4 +- .../examples/sdk-react-native/jest.config.js | 3 + .../examples/sdk-react-native/metro.config.js | 11 + .../examples/sdk-react-native/package.json | 77 +++ .../patches/@kalashshah+restapi+0.1.2.patch | 52 ++ .../sdk-react-native}/shim.js | 0 .../sdk-react-native}/src/App.tsx | 2 +- .../examples/sdk-react-native/tsconfig.json | 3 + .../sdk-react-native}/types/env.d.ts | 0 packages/reactnative/example/.bundle/config | 2 - packages/reactnative/example/.env.sample | 10 - packages/reactnative/example/.node-version | 1 - packages/reactnative/example/.watchmanconfig | 1 - .../app/src/main/res/values/strings.xml | 3 - .../android/gradle/wrapper/gradle-wrapper.jar | Bin 59821 -> 0 bytes packages/reactnative/example/app.json | 4 - packages/reactnative/example/babel.config.js | 25 - packages/reactnative/example/index.js | 5 - packages/reactnative/example/ios/File.swift | 6 - packages/reactnative/example/ios/Podfile.lock | 641 ------------------ .../ReactNativeSdkExample-Bridging-Header.h | 3 - .../contents.xcworkspacedata | 10 - packages/reactnative/example/metro.config.js | 40 -- packages/reactnative/example/package.json | 33 - .../example/react-native.config.js | 10 - packages/reactnative/example/tsconfig.json | 3 - 75 files changed, 554 insertions(+), 1078 deletions(-) create mode 100644 packages/examples/sdk-react-native/.eslintrc.js create mode 100644 packages/examples/sdk-react-native/.gitignore create mode 100644 packages/examples/sdk-react-native/.prettierrc.js create mode 100644 packages/examples/sdk-react-native/.watchmanconfig rename packages/{reactnative/example => examples/sdk-react-native}/Gemfile (56%) create mode 100644 packages/examples/sdk-react-native/README.md rename packages/{reactnative/example => examples/sdk-react-native}/android/app/build.gradle (68%) rename packages/{reactnative/example => examples/sdk-react-native}/android/app/debug.keystore (100%) rename packages/{reactnative/example => examples/sdk-react-native}/android/app/proguard-rules.pro (100%) rename packages/{reactnative/example => examples/sdk-react-native}/android/app/src/debug/AndroidManifest.xml (100%) rename packages/{reactnative/example/android/app/src/debug/java/com/reactnativesdkexample => examples/sdk-react-native/android/app/src/debug/java/com/rnsdktest}/ReactNativeFlipper.java (98%) rename packages/{reactnative/example => examples/sdk-react-native}/android/app/src/main/AndroidManifest.xml (100%) rename packages/{reactnative/example/android/app/src/main/java/com/reactnativesdkexample => examples/sdk-react-native/android/app/src/main/java/com/rnsdktest}/MainActivity.java (73%) rename packages/{reactnative/example/android/app/src/main/java/com/reactnativesdkexample => examples/sdk-react-native/android/app/src/main/java/com/rnsdktest}/MainApplication.java (98%) rename packages/{reactnative/example => examples/sdk-react-native}/android/app/src/main/res/drawable/rn_edit_text_material.xml (99%) rename packages/{reactnative/example => examples/sdk-react-native}/android/app/src/main/res/mipmap-hdpi/ic_launcher.png (100%) rename packages/{reactnative/example => examples/sdk-react-native}/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png (100%) rename packages/{reactnative/example => examples/sdk-react-native}/android/app/src/main/res/mipmap-mdpi/ic_launcher.png (100%) rename packages/{reactnative/example => examples/sdk-react-native}/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png (100%) rename packages/{reactnative/example => examples/sdk-react-native}/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png (100%) rename packages/{reactnative/example => examples/sdk-react-native}/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png (100%) rename packages/{reactnative/example => examples/sdk-react-native}/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png (100%) rename packages/{reactnative/example => examples/sdk-react-native}/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png (100%) rename packages/{reactnative/example => examples/sdk-react-native}/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png (100%) rename packages/{reactnative/example => examples/sdk-react-native}/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png (100%) create mode 100644 packages/examples/sdk-react-native/android/app/src/main/res/values/strings.xml rename packages/{reactnative/example => examples/sdk-react-native}/android/app/src/main/res/values/styles.xml (100%) rename packages/{reactnative/example/android/app/src/release/java/com/reactnativesdkexample => examples/sdk-react-native/android/app/src/release/java/com/rnsdktest}/ReactNativeFlipper.java (94%) rename packages/{reactnative/example => examples/sdk-react-native}/android/build.gradle (90%) rename packages/{reactnative/example => examples/sdk-react-native}/android/gradle.properties (98%) create mode 100644 packages/examples/sdk-react-native/android/gradle/wrapper/gradle-wrapper.jar rename packages/{reactnative/example => examples/sdk-react-native}/android/gradle/wrapper/gradle-wrapper.properties (83%) rename packages/{reactnative/example => examples/sdk-react-native}/android/gradlew (93%) rename packages/{reactnative/example => examples/sdk-react-native}/android/gradlew.bat (86%) rename packages/{reactnative/example => examples/sdk-react-native}/android/settings.gradle (61%) create mode 100644 packages/examples/sdk-react-native/app.json create mode 100644 packages/examples/sdk-react-native/babel.config.js create mode 100644 packages/examples/sdk-react-native/index.js rename packages/{reactnative/example => examples/sdk-react-native}/ios/Podfile (76%) rename packages/{reactnative/example/ios/ReactNativeSdkExample.xcodeproj => examples/sdk-react-native/ios/rnsdktest.xcodeproj}/project.pbxproj (69%) rename packages/{reactnative/example/ios/ReactNativeSdkExample.xcodeproj/xcshareddata/xcschemes/ReactNativeSdkExample.xcscheme => examples/sdk-react-native/ios/rnsdktest.xcodeproj/xcshareddata/xcschemes/rnsdktest.xcscheme} (77%) rename packages/{reactnative/example/ios/ReactNativeSdkExample => examples/sdk-react-native/ios/rnsdktest}/AppDelegate.h (100%) rename packages/{reactnative/example/ios/ReactNativeSdkExample => examples/sdk-react-native/ios/rnsdktest}/AppDelegate.mm (62%) rename packages/{reactnative/example/ios/ReactNativeSdkExample => examples/sdk-react-native/ios/rnsdktest}/Images.xcassets/AppIcon.appiconset/Contents.json (100%) rename packages/{reactnative/example/ios/ReactNativeSdkExample => examples/sdk-react-native/ios/rnsdktest}/Images.xcassets/Contents.json (100%) rename packages/{reactnative/example/ios/ReactNativeSdkExample => examples/sdk-react-native/ios/rnsdktest}/Info.plist (97%) rename packages/{reactnative/example/ios/ReactNativeSdkExample => examples/sdk-react-native/ios/rnsdktest}/LaunchScreen.storyboard (94%) rename packages/{reactnative/example/ios/ReactNativeSdkExample => examples/sdk-react-native/ios/rnsdktest}/main.m (100%) rename packages/{reactnative/example/ios/ReactNativeSdkExampleTests => examples/sdk-react-native/ios/rnsdktestTests}/Info.plist (100%) rename packages/{reactnative/example/ios/ReactNativeSdkExampleTests/ReactNativeSdkExampleTests.m => examples/sdk-react-native/ios/rnsdktestTests/rnsdktestTests.m} (95%) create mode 100644 packages/examples/sdk-react-native/jest.config.js create mode 100644 packages/examples/sdk-react-native/metro.config.js create mode 100644 packages/examples/sdk-react-native/package.json create mode 100644 packages/examples/sdk-react-native/patches/@kalashshah+restapi+0.1.2.patch rename packages/{reactnative/example => examples/sdk-react-native}/shim.js (100%) rename packages/{reactnative/example => examples/sdk-react-native}/src/App.tsx (99%) create mode 100644 packages/examples/sdk-react-native/tsconfig.json rename packages/{reactnative/example => examples/sdk-react-native}/types/env.d.ts (100%) delete mode 100644 packages/reactnative/example/.bundle/config delete mode 100644 packages/reactnative/example/.env.sample delete mode 100644 packages/reactnative/example/.node-version delete mode 100644 packages/reactnative/example/.watchmanconfig delete mode 100644 packages/reactnative/example/android/app/src/main/res/values/strings.xml delete mode 100644 packages/reactnative/example/android/gradle/wrapper/gradle-wrapper.jar delete mode 100644 packages/reactnative/example/app.json delete mode 100644 packages/reactnative/example/babel.config.js delete mode 100644 packages/reactnative/example/index.js delete mode 100644 packages/reactnative/example/ios/File.swift delete mode 100644 packages/reactnative/example/ios/Podfile.lock delete mode 100644 packages/reactnative/example/ios/ReactNativeSdkExample-Bridging-Header.h delete mode 100644 packages/reactnative/example/ios/ReactNativeSdkExample.xcworkspace/contents.xcworkspacedata delete mode 100644 packages/reactnative/example/metro.config.js delete mode 100644 packages/reactnative/example/package.json delete mode 100644 packages/reactnative/example/react-native.config.js delete mode 100644 packages/reactnative/example/tsconfig.json diff --git a/packages/examples/sdk-react-native/.eslintrc.js b/packages/examples/sdk-react-native/.eslintrc.js new file mode 100644 index 000000000..187894b6a --- /dev/null +++ b/packages/examples/sdk-react-native/.eslintrc.js @@ -0,0 +1,4 @@ +module.exports = { + root: true, + extends: '@react-native', +}; diff --git a/packages/examples/sdk-react-native/.gitignore b/packages/examples/sdk-react-native/.gitignore new file mode 100644 index 000000000..0cab2ac6f --- /dev/null +++ b/packages/examples/sdk-react-native/.gitignore @@ -0,0 +1,66 @@ +# OSX +# +.DS_Store + +# Xcode +# +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate +ios/.xcode.env.local + +# Android/IntelliJ +# +build/ +.idea +.gradle +local.properties +*.iml +*.hprof +.cxx/ +*.keystore +!debug.keystore + +# node.js +# +node_modules/ +npm-debug.log +yarn-error.log + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the +# screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/ + +**/fastlane/report.xml +**/fastlane/Preview.html +**/fastlane/screenshots +**/fastlane/test_output + +# Bundle artifact +*.jsbundle + +# Ruby / CocoaPods +/ios/Pods/ +/vendor/bundle/ + +# Temporary files created by Metro to check the health of the file watcher +.metro-health-check* + +# testing +/coverage diff --git a/packages/examples/sdk-react-native/.prettierrc.js b/packages/examples/sdk-react-native/.prettierrc.js new file mode 100644 index 000000000..2b540746a --- /dev/null +++ b/packages/examples/sdk-react-native/.prettierrc.js @@ -0,0 +1,7 @@ +module.exports = { + arrowParens: 'avoid', + bracketSameLine: true, + bracketSpacing: false, + singleQuote: true, + trailingComma: 'all', +}; diff --git a/packages/examples/sdk-react-native/.watchmanconfig b/packages/examples/sdk-react-native/.watchmanconfig new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/packages/examples/sdk-react-native/.watchmanconfig @@ -0,0 +1 @@ +{} diff --git a/packages/reactnative/example/Gemfile b/packages/examples/sdk-react-native/Gemfile similarity index 56% rename from packages/reactnative/example/Gemfile rename to packages/examples/sdk-react-native/Gemfile index 1142b1b20..6a7d5c7a4 100644 --- a/packages/reactnative/example/Gemfile +++ b/packages/examples/sdk-react-native/Gemfile @@ -1,6 +1,7 @@ source 'https://rubygems.org' # You may use http://rbenv.org/ or https://rvm.io/ to install and use this version -ruby '>= 2.6.10' +ruby ">= 2.6.10" -gem 'cocoapods', '>= 1.11.3' +gem 'cocoapods', '~> 1.13' +gem 'activesupport', '>= 6.1.7.3', '< 7.1.0' diff --git a/packages/examples/sdk-react-native/README.md b/packages/examples/sdk-react-native/README.md new file mode 100644 index 000000000..12470c30e --- /dev/null +++ b/packages/examples/sdk-react-native/README.md @@ -0,0 +1,79 @@ +This is a new [**React Native**](https://reactnative.dev) project, bootstrapped using [`@react-native-community/cli`](https://github.com/react-native-community/cli). + +# Getting Started + +>**Note**: Make sure you have completed the [React Native - Environment Setup](https://reactnative.dev/docs/environment-setup) instructions till "Creating a new application" step, before proceeding. + +## Step 1: Start the Metro Server + +First, you will need to start **Metro**, the JavaScript _bundler_ that ships _with_ React Native. + +To start Metro, run the following command from the _root_ of your React Native project: + +```bash +# using npm +npm start + +# OR using Yarn +yarn start +``` + +## Step 2: Start your Application + +Let Metro Bundler run in its _own_ terminal. Open a _new_ terminal from the _root_ of your React Native project. Run the following command to start your _Android_ or _iOS_ app: + +### For Android + +```bash +# using npm +npm run android + +# OR using Yarn +yarn android +``` + +### For iOS + +```bash +# using npm +npm run ios + +# OR using Yarn +yarn ios +``` + +If everything is set up _correctly_, you should see your new app running in your _Android Emulator_ or _iOS Simulator_ shortly provided you have set up your emulator/simulator correctly. + +This is one way to run your app — you can also run it directly from within Android Studio and Xcode respectively. + +## Step 3: Modifying your App + +Now that you have successfully run the app, let's modify it. + +1. Open `App.tsx` in your text editor of choice and edit some lines. +2. For **Android**: Press the <kbd>R</kbd> key twice or select **"Reload"** from the **Developer Menu** (<kbd>Ctrl</kbd> + <kbd>M</kbd> (on Window and Linux) or <kbd>Cmd ⌘</kbd> + <kbd>M</kbd> (on macOS)) to see your changes! + + For **iOS**: Hit <kbd>Cmd ⌘</kbd> + <kbd>R</kbd> in your iOS Simulator to reload the app and see your changes! + +## Congratulations! :tada: + +You've successfully run and modified your React Native App. :partying_face: + +### Now what? + +- If you want to add this new React Native code to an existing application, check out the [Integration guide](https://reactnative.dev/docs/integration-with-existing-apps). +- If you're curious to learn more about React Native, check out the [Introduction to React Native](https://reactnative.dev/docs/getting-started). + +# Troubleshooting + +If you can't get this to work, see the [Troubleshooting](https://reactnative.dev/docs/troubleshooting) page. + +# Learn More + +To learn more about React Native, take a look at the following resources: + +- [React Native Website](https://reactnative.dev) - learn more about React Native. +- [Getting Started](https://reactnative.dev/docs/environment-setup) - an **overview** of React Native and how setup your environment. +- [Learn the Basics](https://reactnative.dev/docs/getting-started) - a **guided tour** of the React Native **basics**. +- [Blog](https://reactnative.dev/blog) - read the latest official React Native **Blog** posts. +- [`@facebook/react-native`](https://github.com/facebook/react-native) - the Open Source; GitHub **repository** for React Native. diff --git a/packages/reactnative/example/android/app/build.gradle b/packages/examples/sdk-react-native/android/app/build.gradle similarity index 68% rename from packages/reactnative/example/android/app/build.gradle rename to packages/examples/sdk-react-native/android/app/build.gradle index 146e8e65c..3e450ec37 100644 --- a/packages/reactnative/example/android/app/build.gradle +++ b/packages/examples/sdk-react-native/android/app/build.gradle @@ -1,8 +1,6 @@ apply plugin: "com.android.application" apply plugin: "com.facebook.react" -import com.android.build.OutputFile - /** * This is the configuration block to customize your React Native Android app. * By default you don't need to apply any configuration, just uncomment the lines you need. @@ -13,8 +11,8 @@ react { // root = file("../") // The folder where the react-native NPM package is. Default is ../node_modules/react-native // reactNativeDir = file("../node_modules/react-native") - // The folder where the react-native Codegen package is. Default is ../node_modules/react-native-codegen - // codegenDir = file("../node_modules/react-native-codegen") + // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen + // codegenDir = file("../node_modules/@react-native/codegen") // The cli.js file which is the React Native CLI entrypoint. Default is ../node_modules/react-native/cli.js // cliFile = file("../node_modules/react-native/cli.js") @@ -52,14 +50,6 @@ react { // hermesFlags = ["-O", "-output-source-map"] } -/** - * Set this to true to create four separate APKs instead of one, - * one for each native architecture. This is useful if you don't - * use App Bundles (https://developer.android.com/guide/app-bundle/) - * and want to have separate APKs to upload to the Play Store. - */ -def enableSeparateBuildPerCPUArchitecture = false - /** * Set this to true to Run Proguard on Release builds to minify the Java bytecode. */ @@ -78,38 +68,19 @@ def enableProguardInReleaseBuilds = false */ def jscFlavor = 'org.webkit:android-jsc:+' -/** - * Private function to get the list of Native Architectures you want to build. - * This reads the value from reactNativeArchitectures in your gradle.properties - * file and works together with the --active-arch-only flag of react-native run-android. - */ -def reactNativeArchitectures() { - def value = project.getProperties().get("reactNativeArchitectures") - return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"] -} - android { ndkVersion rootProject.ext.ndkVersion compileSdkVersion rootProject.ext.compileSdkVersion - namespace "com.reactnativesdkexample" + namespace "com.rnsdktest" defaultConfig { - applicationId "com.reactnativesdkexample" + applicationId "com.rnsdktest" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 versionName "1.0" } - - splits { - abi { - reset() - enable enableSeparateBuildPerCPUArchitecture - universalApk false // If true, also generate a universal APK - include (*reactNativeArchitectures()) - } - } signingConfigs { debug { storeFile file('debug.keystore') @@ -130,30 +101,12 @@ android { proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" } } - - // applicationVariants are e.g. debug, release - applicationVariants.all { variant -> - variant.outputs.each { output -> - // For each separate APK per architecture, set a unique version code as described here: - // https://developer.android.com/studio/build/configure-apk-splits.html - // Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc. - def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4] - def abi = output.getFilter(OutputFile.ABI) - if (abi != null) { // null for the universal-debug, universal-release variants - output.versionCodeOverride = - defaultConfig.versionCode * 1000 + versionCodes.get(abi) - } - - } - } } dependencies { // The version of react-native is set by the React Native Gradle Plugin implementation("com.facebook.react:react-android") - implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.0.0") - debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") { exclude group:'com.squareup.okhttp3', module:'okhttp' diff --git a/packages/reactnative/example/android/app/debug.keystore b/packages/examples/sdk-react-native/android/app/debug.keystore similarity index 100% rename from packages/reactnative/example/android/app/debug.keystore rename to packages/examples/sdk-react-native/android/app/debug.keystore diff --git a/packages/reactnative/example/android/app/proguard-rules.pro b/packages/examples/sdk-react-native/android/app/proguard-rules.pro similarity index 100% rename from packages/reactnative/example/android/app/proguard-rules.pro rename to packages/examples/sdk-react-native/android/app/proguard-rules.pro diff --git a/packages/reactnative/example/android/app/src/debug/AndroidManifest.xml b/packages/examples/sdk-react-native/android/app/src/debug/AndroidManifest.xml similarity index 100% rename from packages/reactnative/example/android/app/src/debug/AndroidManifest.xml rename to packages/examples/sdk-react-native/android/app/src/debug/AndroidManifest.xml diff --git a/packages/reactnative/example/android/app/src/debug/java/com/reactnativesdkexample/ReactNativeFlipper.java b/packages/examples/sdk-react-native/android/app/src/debug/java/com/rnsdktest/ReactNativeFlipper.java similarity index 98% rename from packages/reactnative/example/android/app/src/debug/java/com/reactnativesdkexample/ReactNativeFlipper.java rename to packages/examples/sdk-react-native/android/app/src/debug/java/com/rnsdktest/ReactNativeFlipper.java index 28e270b48..b78fe0f7c 100644 --- a/packages/reactnative/example/android/app/src/debug/java/com/reactnativesdkexample/ReactNativeFlipper.java +++ b/packages/examples/sdk-react-native/android/app/src/debug/java/com/rnsdktest/ReactNativeFlipper.java @@ -4,7 +4,7 @@ * <p>This source code is licensed under the MIT license found in the LICENSE file in the root * directory of this source tree. */ -package com.reactnativesdkexample; +package com.rnsdktest; import android.content.Context; import com.facebook.flipper.android.AndroidFlipperClient; diff --git a/packages/reactnative/example/android/app/src/main/AndroidManifest.xml b/packages/examples/sdk-react-native/android/app/src/main/AndroidManifest.xml similarity index 100% rename from packages/reactnative/example/android/app/src/main/AndroidManifest.xml rename to packages/examples/sdk-react-native/android/app/src/main/AndroidManifest.xml diff --git a/packages/reactnative/example/android/app/src/main/java/com/reactnativesdkexample/MainActivity.java b/packages/examples/sdk-react-native/android/app/src/main/java/com/rnsdktest/MainActivity.java similarity index 73% rename from packages/reactnative/example/android/app/src/main/java/com/reactnativesdkexample/MainActivity.java rename to packages/examples/sdk-react-native/android/app/src/main/java/com/rnsdktest/MainActivity.java index 93585fbcf..fe5e31f58 100644 --- a/packages/reactnative/example/android/app/src/main/java/com/reactnativesdkexample/MainActivity.java +++ b/packages/examples/sdk-react-native/android/app/src/main/java/com/rnsdktest/MainActivity.java @@ -1,4 +1,4 @@ -package com.reactnativesdkexample; +package com.rnsdktest; import com.facebook.react.ReactActivity; import com.facebook.react.ReactActivityDelegate; @@ -13,7 +13,7 @@ public class MainActivity extends ReactActivity { */ @Override protected String getMainComponentName() { - return "ReactNativeSdkExample"; + return "rnsdktest"; } /** @@ -27,9 +27,6 @@ protected ReactActivityDelegate createReactActivityDelegate() { this, getMainComponentName(), // If you opted-in for the New Architecture, we enable the Fabric Renderer. - DefaultNewArchitectureEntryPoint.getFabricEnabled(), // fabricEnabled - // If you opted-in for the New Architecture, we enable Concurrent React (i.e. React 18). - DefaultNewArchitectureEntryPoint.getConcurrentReactEnabled() // concurrentRootEnabled - ); + DefaultNewArchitectureEntryPoint.getFabricEnabled()); } } diff --git a/packages/reactnative/example/android/app/src/main/java/com/reactnativesdkexample/MainApplication.java b/packages/examples/sdk-react-native/android/app/src/main/java/com/rnsdktest/MainApplication.java similarity index 98% rename from packages/reactnative/example/android/app/src/main/java/com/reactnativesdkexample/MainApplication.java rename to packages/examples/sdk-react-native/android/app/src/main/java/com/rnsdktest/MainApplication.java index 9f81d13c3..2dca23b4d 100644 --- a/packages/reactnative/example/android/app/src/main/java/com/reactnativesdkexample/MainApplication.java +++ b/packages/examples/sdk-react-native/android/app/src/main/java/com/rnsdktest/MainApplication.java @@ -1,4 +1,4 @@ -package com.reactnativesdkexample; +package com.rnsdktest; import android.app.Application; import com.facebook.react.PackageList; diff --git a/packages/reactnative/example/android/app/src/main/res/drawable/rn_edit_text_material.xml b/packages/examples/sdk-react-native/android/app/src/main/res/drawable/rn_edit_text_material.xml similarity index 99% rename from packages/reactnative/example/android/app/src/main/res/drawable/rn_edit_text_material.xml rename to packages/examples/sdk-react-native/android/app/src/main/res/drawable/rn_edit_text_material.xml index f35d99620..73b37e4d9 100644 --- a/packages/reactnative/example/android/app/src/main/res/drawable/rn_edit_text_material.xml +++ b/packages/examples/sdk-react-native/android/app/src/main/res/drawable/rn_edit_text_material.xml @@ -20,7 +20,7 @@ android:insetBottom="@dimen/abc_edit_text_inset_bottom_material"> <selector> - <!-- + <!-- This file is a copy of abc_edit_text_material (https://bit.ly/3k8fX7I). The item below with state_pressed="false" and state_focused="false" causes a NullPointerException. NullPointerException:tempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)' diff --git a/packages/reactnative/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/packages/examples/sdk-react-native/android/app/src/main/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from packages/reactnative/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png rename to packages/examples/sdk-react-native/android/app/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/packages/reactnative/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/packages/examples/sdk-react-native/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png similarity index 100% rename from packages/reactnative/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png rename to packages/examples/sdk-react-native/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png diff --git a/packages/reactnative/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/packages/examples/sdk-react-native/android/app/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from packages/reactnative/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png rename to packages/examples/sdk-react-native/android/app/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/packages/reactnative/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/packages/examples/sdk-react-native/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png similarity index 100% rename from packages/reactnative/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png rename to packages/examples/sdk-react-native/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png diff --git a/packages/reactnative/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/packages/examples/sdk-react-native/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from packages/reactnative/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png rename to packages/examples/sdk-react-native/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/packages/reactnative/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/packages/examples/sdk-react-native/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png similarity index 100% rename from packages/reactnative/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png rename to packages/examples/sdk-react-native/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png diff --git a/packages/reactnative/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/packages/examples/sdk-react-native/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from packages/reactnative/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to packages/examples/sdk-react-native/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/packages/reactnative/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/packages/examples/sdk-react-native/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png similarity index 100% rename from packages/reactnative/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png rename to packages/examples/sdk-react-native/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png diff --git a/packages/reactnative/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/packages/examples/sdk-react-native/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from packages/reactnative/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to packages/examples/sdk-react-native/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/packages/reactnative/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/packages/examples/sdk-react-native/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png similarity index 100% rename from packages/reactnative/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png rename to packages/examples/sdk-react-native/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png diff --git a/packages/examples/sdk-react-native/android/app/src/main/res/values/strings.xml b/packages/examples/sdk-react-native/android/app/src/main/res/values/strings.xml new file mode 100644 index 000000000..dd3de8ded --- /dev/null +++ b/packages/examples/sdk-react-native/android/app/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ +<resources> + <string name="app_name">rnsdktest</string> +</resources> diff --git a/packages/reactnative/example/android/app/src/main/res/values/styles.xml b/packages/examples/sdk-react-native/android/app/src/main/res/values/styles.xml similarity index 100% rename from packages/reactnative/example/android/app/src/main/res/values/styles.xml rename to packages/examples/sdk-react-native/android/app/src/main/res/values/styles.xml diff --git a/packages/reactnative/example/android/app/src/release/java/com/reactnativesdkexample/ReactNativeFlipper.java b/packages/examples/sdk-react-native/android/app/src/release/java/com/rnsdktest/ReactNativeFlipper.java similarity index 94% rename from packages/reactnative/example/android/app/src/release/java/com/reactnativesdkexample/ReactNativeFlipper.java rename to packages/examples/sdk-react-native/android/app/src/release/java/com/rnsdktest/ReactNativeFlipper.java index 5491ad36b..0521e38ee 100644 --- a/packages/reactnative/example/android/app/src/release/java/com/reactnativesdkexample/ReactNativeFlipper.java +++ b/packages/examples/sdk-react-native/android/app/src/release/java/com/rnsdktest/ReactNativeFlipper.java @@ -4,7 +4,7 @@ * <p>This source code is licensed under the MIT license found in the LICENSE file in the root * directory of this source tree. */ -package com.reactnativesdkexample; +package com.rnsdktest; import android.content.Context; import com.facebook.react.ReactInstanceManager; diff --git a/packages/reactnative/example/android/build.gradle b/packages/examples/sdk-react-native/android/build.gradle similarity index 90% rename from packages/reactnative/example/android/build.gradle rename to packages/examples/sdk-react-native/android/build.gradle index 67d887b03..34ea71819 100644 --- a/packages/reactnative/example/android/build.gradle +++ b/packages/examples/sdk-react-native/android/build.gradle @@ -15,7 +15,7 @@ buildscript { mavenCentral() } dependencies { - classpath("com.android.tools.build:gradle:7.3.1") + classpath("com.android.tools.build:gradle") classpath("com.facebook.react:react-native-gradle-plugin") } } diff --git a/packages/reactnative/example/android/gradle.properties b/packages/examples/sdk-react-native/android/gradle.properties similarity index 98% rename from packages/reactnative/example/android/gradle.properties rename to packages/examples/sdk-react-native/android/gradle.properties index e4af465e8..a3b2fa124 100644 --- a/packages/reactnative/example/android/gradle.properties +++ b/packages/examples/sdk-react-native/android/gradle.properties @@ -25,7 +25,7 @@ android.useAndroidX=true android.enableJetifier=true # Version of flipper SDK to use with React Native -FLIPPER_VERSION=0.125.0 +FLIPPER_VERSION=0.182.0 # Use this property to specify which architecture you want to build. # You can also override it from the CLI using diff --git a/packages/examples/sdk-react-native/android/gradle/wrapper/gradle-wrapper.jar b/packages/examples/sdk-react-native/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..943f0cbfa754578e88a3dae77fce6e3dea56edbf GIT binary patch literal 61574 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%0D=uyzE7ST z72?v55{RN-F$;r+Cq4;7e62gqSz=^Eh(SGRL_S}6;?Gy46G<O{(@2`1U;N=DIIFjR zmC2k&`OD;3dtk`lEP{OLry64N8?!QS$MLZJ1%q+v7mOptLZJmt3+Rc~y|aDNqfo`I z?IY72J~5=FfH0xBxVSDac*@<#b+CYW*1ynjr&g^mrtoMil@3=)U0A2?=S90tF;<Od zxfYrqK3%u)j3^)a^*_5Tbcf(gj-xZW!?To9vsVqtZs@*){{5{q?(Dx|eZ3X)ueb7F zOzK|<&_BJEe_=8)in7uJ-w}NmmWLN>D=21&S)s*v*^3E96(K1}J$6bi8pyUr-IU)p zcwa$&EAF$0Aj?4OYPcOwb-#qB=kC<n1HEv%&$>EDIV8%^0oa567_u6`9+XRhKaBup z2gwj*m#(}=5m24fBB#9cC?A$4CCBj7kanaYM&v754(b%Vl!gg&N)ZN_gO0mv(jM0# z>FC|FHi=FGlEt6Hk6H3!Yc|7+q{&t%(>3n#>#yx@*aS+bw)(2!WK#M0AUD~wID>yG z?&{p66jLvP1;!T7^^*_9F322wJB*O%TY2oek=sA%AUQT75VQ_iY9`H;ZNKFQELpZd z$~M`wm^Y>lZ8+F0_WCJ0T2td`bM+b`)h3YOV%&@o{C#|t&7haQfq#uJJP;81|2e+$ z|K#e~YTE87s+e0zCE2X$df`o$`8tQhmO?nqO?lOuTJ%GDv&-m_kP9X<5GCo1=?+LY z?!O^AUrRb~3F!k=H7Aae5W0V1{KlgH379eAPTwq=2+MlNcJ6NM+4zt<e)-||0oFV5 zN*-;?NpawV37lmuN|37M2y72?R)D!3v5QDAdJ9b-C74o=D~OGSl@aYeV8O684s9ta z;RUJQpH&+fg4AEZITq1}Dy+BJO%5(CCKyU5$o|k`cMOfpT~brFvZOM%9J82Z7AIwq zz0k<DM6Z<*yp>XFTwI)g+)&Q7G4H%KH_(}1rq%+eIJ*3$?WwnZxPZ;EC=@`QS@|-I zyl+NYh&G>k%}GL}1;ap8buvF>x^yfR*d+4Vkg7S!aQ++_oNx6hLz6kKWi>pjWGO5k zlUZ45MbA=v(xf>Oeqhg8ctl56y{;uDG?A9Ga5aEz<e2+QQoC`{R2b(<KOPa6gC#=( z&Co2eaw3C`VLEugOp6U&MH<7}y>ZB80BW6vo2Bz&O-}WAq>(PaV;*SX0=xXgI_SJ< zYR&5HyeY%IW}I>yKu^?W2$~S!pw?)<Le)sMtuLI>wd4(#6;V|dVoa}13Oiz5Hs6zA zgICc;aoUt$>AjDmr0nCzeCReTuvdD1{NzD1wr*q@QqVW*Wi1zn;Yw1dSwLvTUwg#7 zpp~Czra7U~nSZZTjieZxiu~=}!xgV68(!UmQz@#w9#$0Vf@y%!{uN~w^~U_d_Aa&r zt2l>)H8-+gA;3xBk?ZV2Cq!L71;-tb%7A0FWziYwMT|#s_Ze_B>orZQWqDOZuT{|@ zX04D%y&8u@>bur&*<2??1KnaA7M%%gXV@C3YjipS4|cQH68OSYxC`P#ncvtB%gnEI z%fxRuH=d{L70?vHMi>~_<ssNd%C8zPl6BUp;5R@|%^9)){hR_nenW=9KM))^a~A@5 zFAl7|Z4Tt=f1EZiF6+NrJEGCb_z<<;iGGr$fHq%Xrwe0*xd7&VgDH_y13j6^<s%|0 z@{Zg>lhJ@MC^u#H66=tx?8{<NebyNxo0CIpE;VHn7S_Gf(iPkbXt$jMXbQJzt{bgj zY0=Y+POOrXJr0e0UKqh_8PwiV-8MRJvck3#Q&M*BdDmO%t=#f{0$T4b^1u}PsO$K3 zzyJh@gZIncuOukA=|{)7Xju=_D8I?F|HxfmjR36#>HG;G2j$9@<PA;s2<-heV&N5T zurJOkAR_H4E>}ZDYUuTetwpvuqy}vW)kDmj^a|A%z(xs7yY2mU0#X2$un&MCirr|7 z%m?8+9aekm0x5hvBQ2J+>XeAdel$cy>J<6R3}*O^j{ObSk_Ucv$8a3_WPTd5I4HRT z(PKP5!{l*{lk_19@&{5C>TRV8_D~v*StN~Pm*(qRP+`1N12y{#w_fsXrtSt={0hJw zQ(PyWgA;;tBBDql#^2J(pnuv;fPn(H>^d<6BlI%00ylJZ?Evkh%=j2n+|VqTM~EUh zTx|IY)W;3{%x(O{X|$PS&x0?z#S2q-kW&G}7#D?p7!Q4V&NtA_DbF~v?cz6_l+t8e zoh1`dk;P-%$m(Ud?wnoZn0R=Ka$`tnZ|yQ-<w9S<BV%a?)+J#OeW}$b8v(Jnd^}F^ zTPWe582ogC3gElgHoL83DaMx88+s$w<p;X{vFYr%*^V?^L_5CQX!k~9175*EF-ROT z2?Q!qSPCgZy%;au0ig`i%5SkQ!}*7TVe<hNEHnBe$rqzY0(jikO1!cMEO4iU+^UF9 z8Q5fXD0Y3^=_BaR+wSo}FNiknH(<*9=b7CFuI=Fvc-!FXanPfh2u}SWmx%FmEjKuX z^sk6K)JPk+gGD11h8T)+pajHPD0j#=I=A^__~p+_VW$-V0Fm$sSE6Yz$6wxDUOg2* zSzNs|jZT(3HdTE+i>FN!?!9Wmb^b(R!s#b)oj9hs3$p%XX9DgQcZJE7B_dz0OEF6C zx|%jlqj0WG5K4`cVw!19doNY+(;SrR_txAlXxf#C`uz5H6#0D>SzG*t9!Fn|^8Z8; z1w$uiQzufUzvPCHXhG<HMnut1i{@r%x1;uO>ma>+O327SitsB1?Rn6|^F198AOx}! zfXg22Lm0x%=gRvXXx%WU2&R!p_{_1H^R`+fRO2LT%;He@yiekCz3%coJ=8+Xbc$mN zJ;J7*ED|yKWDK3CrD?v#VFj|l-cTgtn&lL`@;sMYaM1;d)VUHa1KSB5(I54sBErYp z>~4Jz41?Vt{`o7T`j=Se{-kgJBJG^MTJ}hT00H%U)pY-dy!M|6$v+-d(CkZH5wmo1 zc2RaU`p3_IJ^hf{g&c|^;)k3zXC0kF1>rUljSxd}Af$!@@R1fJWa4g5vF?S?8rg=Z z4_I!$dap>3l+o|fyYy(sX}f@Br4~%&&#Z~bEc<RQ9u{xEkB@t_?*yr&ti)>a!nMKV zgQSCVC!zw^j<61!7#T!RxC6KdoMNONcM5^Q;<#~K!<bf6>Q?-#6SE16F*dZ;qv=`5 z(kF|n!QIVd*6BqRR8b8H>d~N@ab+1+{3dDVPVAo>{mAB#m&jX{usKkCg^a9Fef`tR z?M79j7hH*;iC$XM)#IVm&tUoDv!(#f=XsTA$)(ZE37!iu3Gkih5~^Vlx#<(M25gr@ zOkSw4{l}6xI(b0Gy#yw<i|tx6980rpMf)&Q->glot$GnF)P<<JldvD%h*Lvq3|(eu zg(=EWqMiA%>FQt~9ge1>qp8Q^k;_Dm1X@Tc^{CwYb4v_ld}k5I$&u}avIDQ-D(_EP zhgdc{)5r_iTFiZ;Q)5Uq=U73lW%uYN=JLo#OS;B0B=;j>APk?|!t{f3grv0nv}Z%` zM%XJk^#R69iNm&*^0SV0s9&>cl1BroIw*t3R0()^ldAsq)kWcI=>~4!6fM#0!K%TS ziZH=H%7-f=#-2G_XmF$~Wl~Um%^9%AeNSk)*`RDl##y+s)$V`oDlnK@{y+<vv;BD% zTYhY$qFT@|1*$TwIb?E5dyQHC1V?6zpF@Z4NUO9%4Rv)T*>#LNUJp1^(e89sed@BB z^W)sHm;A^9*RgQ;f(~MHK~bJRvzezWGr#@jYAlXIrCk_i<rCZ%n%oyIVL}A@(V)ej z_x$9&F|;gfP`TNou-PFPqzh6^s*6axb^6hIwG?-Vum)W3%?i5<F@nR6=Vl=Q{Cz0D zqOmc$^WBKv@B%<?n;9+7g=`3(ydmP3;dgam#4RqO@Tsw%X&VB?zWdjUvNn=6)tN&! zphZcIx;crMqPEToq7I(3SL>iUfC_FBWyvKj2mBF=FI;9|?0_~=E<)qnjLg9k*Qd!_ zl}VuSJB%#M>`iZm*1U^SP1}rkkI};91IRpZw%Hb$tKmr6&H5~m?A7?+uFOSnf)j14 zJCYLOYdaRu>zO%5d+VeXa-Ai7{7Z}iTn%yyz7hs<h`%J?|2=8==NSEq;5z>mo7E|{ z@+g9cBcI-MT~2f@WrY0dpaC=v{*lDPBDX}OXtJ|niu$xyit;tyX5N&3pgmCxq>7TP zcOb9%(TyvOSxtw%Y2+O&jg39&YuOtgzn`uk{INC}^Na_-V;63b#+*@NOBnU{lG5TS zbC+N-qt)u26lggGPcdrTn@m+m>bcrh?sG4b(BrtdI<A=K5V<ZO#r}vg^kCigt(uJ2 zd8`1Pp&Gb1^PNhK`;{S`T1Zygzs3ABc3#+c{>Kq3W<%?WuQtEW0Z)#?c_Lzqj*DlZ zVUpEV3~mG#DN$I#JJp3xc8`9ex)1%Il7xKwrpJt)qtpq}DXqI=5~~N}N?0g*YwETZ z(NKJO5kzh?Os`BQ7HYaTl>sXVr!b8>(Wd&PU*3ivSn{;q`|@n*J<J-XD%w7s7NmGT zu~Ok3M($S6@(`M;sn`@&;P6afg6j8e$0L1b6n*D*j#<j7Cy9fquxm`_;Dkq1L)$do zQ0j>~-3tbm;4WK>j3&<ksY9-lOft9?z*xfw&d;zcVfJuuJ_qtChDBFmFCDc)Sp)-N zaxotS*yQVBpBZ-AI&VIn&0g*kKRYM4WW94S@}j@-{j~HFK0{LA6IH@sT{1U0Bf8?Z z#Gb-Ry86x%r60dat~!8(9Y-k0lUo?o<=>}AEZ*`_!gJ3F4w~4{{PyLZklDqWo|X}D zbZU_{2E6^VTCg#+6yJt{<iesMnt}>QUhu}uMITs@sRwH0z5OqM>t<bSft`sIB+Vt} zCHSKrh`flZ))W@^)r%%|EArJ=!RIGqimaMO#gekrL-Zj%-ABcT<kN@n>aO^(_+w1c ztQ?gvVPj<_F_=(ISaB~qML59HT;#c9x(;0vkCi2#Zp`;_r@+8QOV1Ey2RWm6{*J&9 zG(Dt$zF^7qYpo9Ne}ce5re^j|rvDo*DQ&1Be#Fvo#?m4mfFrNZb1#D4f`Lf(t_Fib zwxL3lx(Zp(XVRjo_ocElY#yS$LHb6yl;9;Ycm1|5y_praEcGUZxLhS%7?b&es2skI z9l!O)b%D=cXBa@v9;64f^Q9IV$xOkl;%cG6WLQ`_a7I`woHbEX&?6NJ9Yn&z+#^#! zc8;5=jt~Unn7!cQa$=a7xSp}zuz#Lc#Q3-e7*i`Xk5tx_+^M~!DlyBOwVEq3c(?`@ zZ_3qlTN{eHOwvNTCLOHjwg0%niFYm({LEfAieI+k;U2&uTD4J;Zg<tEQ<XrTUSe%- zDAo#H<p@dipI~gN5U9|6lO3qo2oWo{OcHD}&S-B|Q@n7^UYyS%EYyWlEE2p@Xolg+ zu4jZ@oD8hia{Gv|U6hH9!vf!GzKDXiZD{68_pb6QETOK@ltZ(bV4PT!8%ySRgx?76 ztJN|U)D7c%b7K?Fm2kqi2DW{$-B78GMSw+UQAn|W<D}2j!4t&HUv|5xkk5*nP&8Qe zCGkAM>#s`k?lxyJN<$mK6>j?J4eOM@T*o?&l@LFG$Gs5f4R*p*V1RkTdCfv9KUfa< z{k;#JfA3XA5NQJziGd%DchDR*Dkld&t;6i9e2t7{hQPIG_uDXN1q0T;IFCmCcua-e z`o#=uS2_en206(TuB4g-!#=rziBTs%(-b1N%(Bl}ea#xKK9zzZGCo@<*i1ZoETjeC zJ)ll{$mpX7Eldxnjb1&cB6S=7v@EDCsmIOBWc$p^W*;C0i^Hc{q(_iaWtE{<E55+; z2%vwu%_-H<hubJCD#Hx#pC!+$P+PVQjjCqclJRtHRdoqBP$a~>0qbLjxWlqBe%Y|A z>I|4)(5mx3VtwRBrano|P))JWybOHUyOY67zRst259tx;l(hbY@%Z`v8Pz^0Sw$?= zwSd^HLyL+$l&R+TDnbV_u+h{Z>n$)PMf*YGQ}1Df@Nr{#Gr+@|gKlnv?`s1rm^$1+ zic`WeKSH?{+E}0^#T<&@P;dFf;P5zCbuCOijADb}n^{k=>mBehDD6PtCrn5ZBhh2L zjF$TbzvnwT#AzGEG_Rg>W1NS{PxmL9Mf69*?YDeB*pK!&2PQ7!u6eJEHk5e(H~cnG zZQ?X_rtws!;Tod88j=aMaylLNJbgDoyzlBv0g{2VYRXObL=pn!n8+s1s2uTwtZc<p z6cRf-qfQdI0gXh60gY1%4@ER{lX%ywMDBn389VklW80`9V!4`oPjE+Yf8st5o-@~Q z>YH!Z*ZaR%>WTVy8-(^h5J^1%NZ$@&_ZQ)3AeHlhL~=X9=fKPzFbZ;~cS**=W-LF1 z5<mY%6uq^*MgA{A^yaIQBle$6E5e4(rjmBfrgqMjE|zYl$}UcpcIIEK_rFS>F82SZ zG8QZAet|10U*jK*GVOA(iULStsUDMjhT$g5MRIc4b8)5q_a?ma-G+@xyNDk{pR*YH zjCXynm-fV`*;}%3=+zMj**wlCo6a{}*?;`*j%fU`t+3Korws%dsCXAANKkmVby*eJ z6`2%GB{+&`g2;snG`LM9S~>#^G|nZ|JMnWLgSmJ4!kB->uAEF0sVn6km@s=#_=d)y zzld%;g<MR0&xy3lE8?;7q#&vB*rfumylNL}#=U+Igw}K6WortHM8GwC!Lvkp4(<Ti zdZJVBR@iW+ynr<m;GM(d8JcDiIBFT#%Eu$RXiQhiwCYqO<a5`*NC%dwwJx$DjElv@ zTr%kZzUlcfBwl|iy|w)qD=JVnV<u&b5+{7CQ~vIH)p=(aXZWr^3mc`&<>JY>ypQuE z!wgqq<l{)gSj{1+j9J&d>TSPxaUPoG%FQ()1hz(VHN@5sfnE68of>9BgGsQP|9$7j zGqN{nxZx4CD6ICwmXSv6&RD<-etQmbyTHIXn!Q+0{18=!p))>To8df$nCjycnW07Q zsma_}$tY#Xc&?#OK}-N`wPm)+2|&)9=9>YOXQYfaCI*cV1=TUl5({a@1wn#V?y0Yn z(3;3-@(QF|0PA}|w4hBWQbTItc$(^snj$36kz<k@_>{pOx*f`l7V8`rZK}82pPRuy zxwE=~MlCwOLRC`y%q8SMh>3BUCjxLa;v{pFSdAc7m*7!}dtH`MuMLB)QC4B^Uh2_? zApl6z_VHU}=MAA9*g4v-P=7~3?Lu#ig)cRe90>@B?>})@X*+v&yT6FvUsO=p#n8p{ zFA6xNarPy0qJDO<PZccyOD9l^I*Obox&#FBs9B4aHHlWE)6m0?#lsh|xSGuezIQW} zg)hS?fGVmeXjcKU3-LL4KhSaxc6Rs5UZ!Q{$pV^u?kBwMuRGq~67@fS-QxgFy{d@O z+5J=u<00LoD#XN*hAOygi1^9L0Hx<5wna;XC725;JWOnppcq>1BPBYk4~~LP0ykPV ztoz$i+QC%Ch%t}|i^(Rb9?$(@ijUc@w=3F1AM}OgFo1b89KzF6qJO~W52U_;R_MsB zfAC29BNUXpl!w&!dT^Zq<__Hr#w6q%qS1CJ#5Wrb*)2P1%h*DmZ?br)*)~$^TExX1 zL&{>xnM*sh=@IY)i?u5@;;k6+MLjx%m(qwDF3?K3p>-4c2fe(cIpKq#Lc~;#I#Wwz zywZ!^&|9#G7PM6tpgwA@3ev@E<M*+2>v_w`ZZRs#VS4}<^>tfP*(uqLL65uSi<A#{ zDV8MJfGxU7yJACZyQtpobu6#yx>9H!Gqd59C&=LSDo{;#@Isg3caF1X+4T}sL2B+Q zK<fFNO;8Vr!RQsssA`I}to7()bH?ExX&9RL++<z~ZL`X3nU{+a8V6U~8t)4;?Dg=} zBlUy{IRkW};Z`>*kO0?4F7%8mx3di$B~b&*t7y|{x%2BUg4kLFXt`FK;Vi(FIJ+!H zW;mjBrfZdNT>&dDfc4m$^f@k)mum{DioeYYJ|XKQynXl-IDs~1c(`w{*ih0-y_=t$ zaMDwAz>^CC;p*Iw+Hm}%6$GN49<(rembdFvb!ZyayLoqR*KBLc^OIA*t8CXur+_e0 z3`|y|!T>7+jdny7x@JHtV0CP1jI^)9){!s#{C>BcNc5#*hioZ>OfDv)&PAM!PTjS+ zy1gRZirf>YoGpgprd?M1k<;=SS<mdrjoJgO15~XgqhecN*KQ`UTsWf;eswu7VHV}w zY(njT0%?nKPZg}zP(u)69j!CA8G5@{3(6i^M`d;+JM=(-{?{)da)@dJJw48g-{_84 z4RYd&VD`qX!F<rq`*>hCMn406J>>iRVnw9QxsR|_j5U{Ixr;X5n$ih+-=X0fo(Oga zB=ue<MEi)`Ud3NE`YFCy<?kyxV2Xp%^H1ea&hk!K<%qCSAXFKO*$U?Qk+ab$@O7z) z+In=3uj_6t>r9jc=mYY=tV-tAe@_d-{aj`oYS%CP@V3m6Y{)mZ5}b1wV<9{~$`qR9 zEzXo|ok?1f<NI+x;oqx8%oM^+5^5$078Aa#GLAhi2ZddpxL39R#%HSa%MIEl%`I0T zds(|==%D?8R<Ff~>S?zneLA@_C(BAjE_Bv7Dl2s?=_?E9zO5R^TBg8Be~fpG?$9I; zDWLH9R9##?>ISN8s2^wj3B?qJxrSSlC6YB}Yee{D3Ex8@QFLZ&zPx-?0>;Cafcb-! zlGLr)wisd=C(F#4-0@~P-C&s%C}GvBhb^tTiL4Y_dsv@O;S56@?@t<)AXpqHx9V;3 zgB!NXwp`=%h9!L9dBn6R0M<~;(g*nvI`A@&K!B`CU3^FpRWvRi@Iom>LK!hEh8VjX z_dSw5nh-f#zIUDkKMq|BL+IO}HYJjMo=#_srx8cRAbu9bvr&WxggWvxbS_Ix|B}DE zk!*;&k#1BcinaD-w#E+PR_k8I_YOYNkoxw5!g&3WKx4{_Y6T&EV>NrnN9W*<p5Dts z&V!9r%5jzzXQ$dT9b_C~QKV&*!nUvo<9c&ZG*1vC0a8bQR)KJ<J7BFrqNb=gUKncM zGfkNGI_Q-|yUH_Mp*c^Ovrh1<fEFCSs{k@mdF-L|fwY;#kx?$p;VR>@OH+niSC0nd z#x<WiD(WF~g`sc?jXNx`Ky`0`5E&t#?l;S+CKe^qcsEL%OvZtspD383-^2n5p!vII zM_Y*k@yvJN3(W#6x=CiHFC@@0KKdJ@i_~0SO<+#>*dm=f2Zm?6qhY3}Kurxl@}d(~ z<}?Mw+>%y3T{!i3d1%ig*`oIYK|Vi@8Z~*vxY%Od-N0+xqtJ*KGrqo*9GQ14WluUn z+%c+og=f0s6Mcf%r1Be#e}&>1n!!ZxnWZ`7@F9ymfVkuFL;m6M5t%6OrnK#*lofS{ z=2;WPobvGCu{(gy8|Mn(9}NV99Fe<Cx(G#~OmR5aDdPqn;>ps6r*6s&bg(5aNw$eE ztbYsrm0yS`UIJ?Kv-EpZT#76g76*hVNg)L#Hr7Q@L4sqHI;+q5P&H{GBo1$PYkr@z zFeVdcS?N1klRoBt4>fMnygNrDL!3e)k3`TXoa3#F#0SFP(Xx^cc)#e2+&z9F=6{qk z%33-*f6=+W@baq){!d_;ouVthV1PREX^ykCjD|%WUMnNA2GbA#329aEihLk~0!!}k z)SIEXz(;0lemIO{|JdO{6d|-9LePs~$}6vZ>`xYCD(ODG;OuwOe3jeN;|G$~ml%r* z%{@<9qDf8Vsw581v9y+)I4&te!6ZDJMYrQ*g4_xj!~pUu#er`@_bJ34Ioez)<GO*4 zcjghYQFWyH=S5A~nwjT9%lL#`A(2V7l_bj}j=(p~eM)ya%U>^055M$)LfC|i*2*3E zLB<`5*H#&~R*VLYlNMCXl~=9%o0IYJ$bY+|m-0OJ-}6c@3m<~C;;S~#@<qkw=t#8? zwQ$HR>j-p?DBdr<><3Y92rW-kc2C$zhqwyq09;dc5;BAR#PPpZxqo-@e_s9*O`?w5 zMnLUs(2c-zw9Pl!2c#+9lFpmTR>P;SA#Id;+fo|g{*n&gLi}7`K)(=tcK|?qR4qNT z%aEsSCL0j9DN$j8g(a+{Z-qPMG&O)H0Y9!c*d?aN0tC&GqC+`%(IFY$ll~!_%<2pX zuD`w_l)*LTG%Qq3ZSDE)#dt-xp<+n=3&lPPzo}r2u~>f8)mbcdN6*r)_AaTYq%Scv zEdwzZw&6Ls8S~RTvMEfX{t@L4PtDi{o;|LyG>rc~Um3;x)rOOGL^Bmp0$TbvPgnwE zJEmZ>ktIfiJzdW5i{OSWZuQWd13tz#czek~&*?iZkVlLkgxyiy^M~|JH(?IB-*o6% zZT8+svJzcVjcE0UEkL_5$kNmdrkOl3-`eO#TwpTnj?xB}AlV2`ks_Ua9(sJ+ok|%b z=2n2rgF}hvVRHJLA@9TK4h#pLzw?A8u31&qbr~KA9;CS7aRf$^f1BZ5fsH2W8z}FU zC}Yq76IR%%g|4aNF9BLx6!^RMhv|JYtoZW&!7uOskGSGL+}_>L$@Jg2Vzugq-NJW7 zzD$7QK7cftU1z*Fxd@}wcK$n6mje}=C|W)tm?*V<<{;?8V9hdoi2NRm#~v^#bhwlc z5J5<q>{cSRAUztxc6NH>Nwm4yR{(T>0x9%%VeU&<&n6^vFvZ{>V3RYJ_kC9zN(M(` zp?1PHN>f!-aLgvsbIp*oTZv4yWsXM2Q=C}>t7V(iX*N8{aoWphUJ^(n3k`pncUt&` ze+sYjo)>>=I?>X}1B*ZrxYu`|WD0J&RIb<nb+&53MpNQ3Oapfhi<(VspWIegbj5>~ zPA_~u)?&`}JPwc1tu=OlKlJ3f!9HXa)KMb|2<fF==t@7;O_Kd+F-j!s^o1Rm6}dzE zG35+rx8h7Dui@rvdCw)B7S%2Tppl?+yo4L!Ck!W$eD-5#-;ItdS(DE^UpDT(QkS6N zqElpBp|vb(mz$9g#e*Vs%^J>%^~;)fL>ZtycHQg`j1<L_)-X$hnKU^HF^^=E2I!Tm z-VMM8b!{qLu@5}nalTxL!Y%U1jtMq${OHeNmiZ%XtGa25iIDT~XyYAQnCd-yl#tg~ zT63p$)rTX0%WU5?*(0OYmRTX4jXhndy5PFt?Abn)ZoDbYRj>Vd^nu^XexYkcae@su zOhxk8ws<Ct-Jh3bPne#JBA>&Eid_KAm_<}65zbgGNzwshR#yv&rQ8Ae<9;S^S}Dsk zubzo?l{0koX8~q*{uA%)wqy*Vqh4>_Os7PPh-maB1|<RfFJe@P3AbAjcu!(LxHPIc zAQ~yx9KzRDrSCPGQSoVRyqoAAzMQWtb3PGioc9esf^U%BSNVO_PrJNa5<FErdCKh+ z9o`kD`&xCq64DgET%{9HY(r9ifJ+NbibQUvQ7YUByoU1r)7T&bkxA=;)TvN6>eT-4 zK>*v3q}TBk1QlOF!113XOn(Kzzb5o4Dz@?q3aEb9%X5m{xV6yT{;*rnLCoI~BO&SM zXf=CHLI>kaSsRP2B{z_MgbD;R_yLnd>^1g`l;uXBw7|)+Q_<_rO!!VaU-O+j`u%zO z1>-N8OlHDJlAqi2#z<o%7YL-<|4oV*U6fW*!kH(Af>@2yM|Dsc$(nc>%ZpuR<B<a^ z5zI7Bkdg-ie4x6*5{IYyxO=aA?uG6iRxP{T?&_>&>}r(i^+qO+sKfg(Ggj9vL%hB6 zJ$8an-DbmKBK6u6oG7&-c0&QD#?JuDYKvL5pWXG{ztpq3BWF)e|7aF-(91xvKt047 zvR{G@KVKz$0qPNXK*gt*%qL-boz-*E;7LJXSyj3f$7;%5wj)2p8gvX}9o_u}A*Q|7 z)hjs?k`8EOxv1zahjg2PQDz5pYF3*Cr{%iUW3J+JU3P+l?n%CwV;`noa#3l@vd#6N zc#KD2J;5(Wd1BP)`!IM;L|(d9m*L8QP|M7W#S7SUF3O$GFnWvSZOwC_Aq~5!=1X+s z6;_M++j0F|x;HU6kufX-Ciy|du;T%2@hASD9(Z)OSVMsJg+=7SNTAjV<8MYN-zX5U zVp~|N&{|#Z)c6p?BEBBexg4Q((kcFwE`_U>ZQotiVrS-BAHKQLr87lpmwMCF_Co1M z`tQI{{7xotiN%Q~q{=Mj5<aA40YqLe4ixX9hVw^={z#idV;)fjy9gqw#BI#pk%wHt zt(UOn@~3V70Od=EYM2uV=MHx}8O{(Fr}Sz9N#c)KqGu4#XO_`+TxN02HaCoy!0f7B zeoJ2FFo?9gRbD)sL{_2>*$!{aE4vi6aE$cyHJC@VvmemE4l_v1`b{)H4v7=l5+lm^ ztGs>1gnN(Vl+%VuwB+|4{bvdhCBRxG<rJrwDU}vE&mJdA#*_zn*DMn!FhAk`9uMiX zJqM*<%gqYEq;$^zJRbfH4^k3$q;LdLhkF_|8{12;KUtSrmdk((QCFnwrHT|libL{3 zB<MRcNe8$a(o@zVUJ-q<YC##^fPBm5Su*{@Ls&a7cG4Sne&J1L{rPjUhv84MD1=&v z)ITETKLw;Jbf;lyDu4q0)CJ#XU*apNVM9eH9~M-@dQy<-VAhuMEHaNI*7m@8wjrH@ zlsa8gE%k(8$ZWZ;rtzWjR@2NnC1R3pGBKiNwNJ@jkULuTv#cx~9$e@}H&;>j3ady^ zLxL@AIA>h@eP|H41@b}u4R`s4yf9a2K!wGcGkzUe?!21Dk)%N6l+#MP&}B0%1Ar*~ zE^88}(mff~iKMPaF+UEp5xn(gavK(^9pvsUQT8V;v!iJt|7@&w+_va`(s_57#t?i6 zh$p!4?BzS9fZm+ui`276|I307lA-rKW$-y^lK#=>N|<-#?WPPNs86Iugsa&n{x%*2 zzL_%$#TmshCw&Yo<lVPhPjiiNS1g*gntjt6w4V$-C+nCW5lc7&XFIp!ql|$kbKH6- zruI&s+I9%jsIR_Zo&tl!*6B|vjX%x*brk~_EyZQ|*JRl8wR_^fc8dJ}EF1nc8UCel z{-qhEsC>$Ol?^|hy{=LYEUb|bMMY`n@#(~oegs-nF)<OR<zfD|w`4fF^;+4)6C)U+ zxYd^cMV9>{0ppw<bdXJw`I6@5X6D_$%*;0adjkbyn7J>ee|b{ca)OXzS~01a%cg&^ zp;}mI0ir3<aUy`m=!9)^<<_5QIEY)=%`@}Iaq2`@dowy%th&B|#Ou`P9iI|9-b_R) zX32fFV|GqIcaYYdHM_9a+TCSJ_HYSa=Rsx-9rZ8O>zapNB)5%nF>Sd~gR1dBI!tDL z&m24z9sE%CEv*SZh1PT6+O`%|SG>x74(!d!2xNOt#C5@I6MnY%ij6rK3Y+%d7tr<! z*%QBnTE!riiS_<GhH{YM!69HJChW8?--ho!wY^<W)zX?5`lO>3&<^4XU-Npx{^`_e z9$-|@$t`}A`UqS&T?cd@-+-#V7n7tiZU!)tD8cFo4Sz=u65?f#7Yj}MDFu#RH_GUQ z{_-pKVEMAQ7ljrJ5Wxg4*0;h~vPUI+Ce(?={CTI&(RyX&GVY4XHs>Asxcp%B+Y9rK z5L$q94t+r3=M*~seA3BO$<<Q0U8_I5dWSjonFj+gW@)Z|q+dI9Op=+TmRfY$G~f{~ z5T9BT$7JYKCNnHNec@eUYM*~KM+Ps^lDb!=j5d}(^?RfxCi$la4IBvoT0%D2Pzfaj zb>0%^iaEb2K=c7((dIW$ggxdvnC$_gq~UWy?wljgA0Dwd`ZsyqOC>)UCn-qU5@~!f znAWKSZeKRaq#L$3W21fDCMXS;$X<Xaknszk16}D2RH-v087X_milSCYSCuexVMv(L z+kBpAVM=ZE?mMeY6GXvY3vT$VQ<?~E(jcCUD`TPD4D$e$849wNpx*d5u_HfJttUR6 z06Cs~dGcTXk_iTXDmtcodA`S&=l}n~h5u)DKU-zyztsH?Gq;W633O^9)uup={Nhoi z?~qhP@n7<OMcQKgsV!w@1K=`oi|$T8Ac=#a%OgMprBMBo+}Nj4Tai}lApgN{lH<nr z=3>(C*YgL7zi8E|grQg%Jq8>YTqC#2<k(SusArq(@?u?H{#QM`RhMVeKmmFP54`#O zN)vX#b)z|_1;L%}vu)Ltl11qyqkj#lo9@6)3GU^}pQytZbv<VT(s#pFwQGQ6FKYGy zD>~ys%Wnxu&;ZG<`uZ1L<53jf2y<qvE%LJhz`J3MWe*}Xx2IhxM9^9ci7lII5n-^N z5pS<$5>xYR3f0<WII1Fr>>a;%=$SYI@zUE*g7f)a{QH^<3F?%({Gg)yx^zsdJ3^J2 z#(!C3qmwx77*3#3asBA(jsL`86|OLB)j?`0hQIh>v;c2A@|$Yg>*f+iMatg8w#SmM z<;Y?!$L--h9vH+DL|Wr3lnfggMk*kyGH^8P48or4m%K^H-v~`cBteWvnN9port02u zF;120HE2WUDi@8?&Oha6$sB20(XPd3LhaT~dRR2_+)IND<Mqm+=|hSw!ike;Nix&; zAbyC$k9;xO^g~ILQ4S-Z8pCATq<a^HAE82?29+-0qP`%qzA&n5Y42=Wip~_XBa6zU z9u)4>TPUQ9(-370t6a!rLKHkIA`#d-#WUcqK%pMcTs6iS2nD?hln+F-cQPUtTz2bZ zq+K`wtc1;ex_iz9?S4)><tf~IfN+i!{;A9Ss)@c~oyQW3HtY1(HD_h8`e=!{bZ*|% z+zl*9c8^73ER~4~?;2f$SgJdisX9zX3^2xT6hIi&y1Iiv|H&O;!va9gE$f~Nl}Ttj zIM^KAB7;~8^ArB>Fkb~bj0^VV?|`qe7W02H)BiibE9=_N8=(5hQK7;(`v7E5Mi3o? z>J_)L`z(m(27_&+89P?DU|6f9J*~Ih#6FWawk`HU1bPWfdF?02aY!YSo_!v<W;~}o zH+H_3JAZTVPmN)%U}r8fyBidPlc&4XC_`ap;5!qog)H|v2sUsF%$L@<@|x%C#C*|x z5`6TXPHyk}{z@U_$(=(wbvg+H)n=S8r2a&V<jDM~C#CM{gA_{NW8(_K<|HNs>$`&W znzH~kY)ll^F07=UNo|h;ZG2aJ<5W~o7?*${(XZ9zP0tTCg5h-dNPIM=*x@KO>a|Bk zO13Cbnbn7+_Kj=EEMJh4{DW<))H!3)vcn?_%WgRy=FpIkVW>NuV`knP`VjT78dqzT z>~ay~f!F?`key$EWbp$+w$8gR1RHR}>wA8|l9rl7jsT+>sQLqs{aITUW{US&p{Y)O zRojdm|7yoA_U+`FkQkS?$4$uf&S52kOuUaJT9lP@LEqjKDM)iqp9aKNlkpMyJ76eb zAa%9G{YUTXa4c|UE>?CCv(x1X3ebjXuL&9Dun1WTlw@Wltn3zTareM)uOKs$5>0tR zDA~&tM~J~-YXA<)&H(ud)JyFm+d<k*=6Fj<vZ9dYY%&5x2*WCNQoUK^gtFJXy4So% za5bO``GDYneM7eBb&6e0CX=S6zVA686r<tCzwCJ1Ncjxd`f@7kuT@9?A7k$rU0JlI z3s-F0Hg{~ZVmqnWwr$(CZB%UAwyjDfUrwLy``td><97d8WBr+H?6Jn&^Ib0<{6ov- ze@q`#Y%KpD<EL(w3B_-8Ag^nJWIv+-B;s9g7^Ng+P$~jwecb#!HFUL*MqMYVlD!j? zunhS)!z%-QQG|Fh41aGmjvfrV&E_eFx{F+iP>?(k{if5-M(fO3PpK{Wjqh)7h+ojH ztb=h&vmy0tn$eA8_368TlF^DKg>BeFtU%3|k~3lZAp(C$&Qjo9lR<#rK{nVn$)r*y z#58_+t=UJm7tp|@#7}6M*o;vn7wM?8Sr<m&)CA5z1r=$bO3?BrG8j!KxByzu+e>tc z3ZFlKRDYc^HqI!O9Z*OZZ8yo-3ie9i8C%KDYCfE?`rjrf<sEl$7#Az9Gj5JJ3^2Wl z$?9ra&a=7`fDUXcC5oK;8t}Jfr#=tJ%s5^CKI9RE8Sy`R&lVl%WSEGwsaIsOid~c` zUZJ{NP1^II8BS>(b&xBXub!54yaZY2hFi2w2asEOiO8;Hru4~KsqQZMrs+OhO8WMX zFN0=EvME`WfQ85bmsnPFp|RU;GP^&Ik#HV(iR1B}8apb9W9)Nv#LwpED~%w67o;r! zVzm@zGjsl)loBy6p>F(G+#*b|7BzZbV#E0Pi`02uAC}D%6d12TzOD19-9bhZZT*GS zqY|zxCTWn+8*JlL3QH&eLZ}incJzgX>>i1dhff}DJ=qL{d?yv@k33UhC!}#hC#31H zOTNv5e*ozksj`4q5H+75O70w4PoA3B5Ea*iGSqA=v)}LifPOuD$ss*^W}=9kq4qqd z6dqHmy_IGzq?j;UzFJ*gI5)6qLqdUL;G&E*;lnAS+ZV1nO%Odo<BDC4`*HhS0zM86 znX)a3A<-|ffLvFBMgdN3;+!?2W*5YD;iN2&-ZDVsYq-l@WlgbLax(dR;GUmlHY%w% z(nOTW$TLw3g7Z_~$c(b1h0c&2=PYLkjsG+t>Xqw(I+*2-nuWjwM-<|XD541^5&!u2 z1XflFJp(`^D|ZUECbaoqT5$#MJ=c23KYpBjGknPZ7boYRxpuaO`!D6C_Al?T$<47T zFd@QT%860pwLnUwer$BspTO9l1H`fknMR|GC?@1Wn`Hsc<wMKW0nSv_B`p?UtbPjT zmKTbal`VYLJ*s*eFJ4k=)z)Yl@7&+hT9bsx@V|!FoG)27UME_<C)}>Oe4mf{KbVio zahne0&hJd0UL#{Xyz=&h@oc>E4r*T|PHuNtK6D279q!2amh%r#@HjaN_LT4j>{&2I z?07K#*aaZ?lNT6<8o85cjZoT~?=J&Xd35I%JJom{P=jj<r5w5q%Hs9U0ou_~w?FZX z<KuP5R*aHj%wPSuC(LA^oly5dYNPaN43`YEH20KZl~4nf(01<50fJ-Z)tPCL15Duv zxGRITg^IEZMh!7*OrnY98PW>?HQ5yfvIR8bd~#7P^m%B-szS{v<)7i?#at=WA+}?r zwMlc-iZv$GT};AP4k2nL70=Q-(+L_CYUN{V?dnvG-Av+%)JxfwF4-r^Z$BTwbT!Jh zG0YXK4e8t`3~){5Qf6U(Ha0WKCKl^zlqhqHj~F}DoPV#yHqLu+ZWl<oP^59z)ezJ_ zMb;>v2zH29J6}4amZ3+-WZkR7(m{qEG%%57G!Yf&!Gu~FDeSYmNEkhi5nw@#6=Bt& zOKT!UWVY-FFyq1u2c~BJ4F`39K7Vw!1U;aKZw)2U8hAb&7ho|FyEyP~D<31<ybDO2 zWQ7#tf~`eET?97-*jUe~ifdI<ohxo3vll*_Nhdl7%q@>{_L<S@?yO0)vqAJv8P%;? zg^Nu29As3<VdZ&P5?YvCb_&L20_>>RrCU>eEk-0)TBt5sS5?;NwAdRzRj5qRSD?J6 ze9ueq%TA*pgwYflmo`=FnGj2r_u2!HkhE5ZbR_Xf=F2QW@QTLD5n4h(?xrbOwNp5` zXMEtm`m52{0^27@=9VLt&GI;nR9S)p(4e+bAO=e4E;qprIhhclMO&7^ThphY9HEko z#WfDFKKCcf%Bi^umN({q(avHrnTyPH{o=sXBOIltHE?Q65y_At<9DsN*xWP|Q=<|R z{JfV?B5dM9gsXTN%%j;xCp{U<C91Kug1)$x=j~eyz5qYhTFeb>uHuYF;5=k|>Q=;q zU<3AEYawUG;=%!Igjp!FIAtJvoo!*J^+!oT%VI4{P=XlbY<HWqV>Zl;Dc467Nr*3j zJtyn|g{onj!_vl)yv)Xv#}(r)@25OHW#|eN&q7_S4i2xPA<*uY9vU_R7f};uqRgVb zM%<_N3ys%M;#TU_tQa#6I1<+7Bc+f%mqHQ}A@(y^+Up5Q*W~bvS9(21FGQRCosvIX zhmsjD^OyOpae*TKs=O?(_YFjSkO`=CJIb*yJ)Pts1egl@dX6-YI1qb?AqGtIOir&u zyn>qxbJhhJi9SjK+$knTBy-A)$@EfzOj~@>s$M$|cT5V!#+|X`aLR_gGYmNuLMVH4 z(K_Tn;i+fR28M~qv4XWqRg~+18Xb?!sQ=Dy)oRa)Jkl{?pa?66h$YxD)C{F%EfZt| z^qWFB2S_M=Ryrj$a?D<|>-Qa5Y6RzJ$6Yp`FOy6p2lZSjk%$9guVsv$OOT*6V$%TH zMO}a=JR(1*u`MN8jTn|OD!84_h${A)_eFRoH7WTCCue9X73nbD282V`VzTH$ckVaC z<NpV9nnpE6<FqP11Ghjim%CUgy&NJVV^ZDfyb6mMbO9Pd+@BbKPGiI5u{x_-HHR}P z8Du<yG?FtS*cCr@t+ZX2;4F%*o=q`~$K*$;!_Y`?^{VkM`KHzGM8%8BrdZJV#(tMT zRrH3L0ros`HTd<gH}Kc5I&MFRh2c0hC<lnOBK)g>alu%ek#pH<c=Lv}xH=KovpBjC z5mBO_z9(47sj}D|-{|BC<H|g%S-b@pxn`tBJsKJ<*Ru~evJfZ9QX;j{<PdE#H5`X% zD+(u6`Y1Fq%HvcFoO`f#RU{qLQTR1Ux2EHzri>xAx=0migDNXwcfbK3TwB7@T7wx2 zGV7rS+2g9eIT9>uWfao+lW2Qi9L^EBu#IZSYl0Q~A^KYbQKwNU(YO4Xa1XH_>ml1v z#qS;P!3Lt%2|U^=++T`A!;V-!I%upi?<#h~h!X`p7eP!{+2{7DM0$yxi9gBfm^W?M zD1c)%I7N>CG6250NW54T%HoCo^ud#`;flZg_4ciWuj4a884oWUYV(#VW`zO1T~m(_ zkayymAJI)NU9_0b6tX)GU+pQ3K9x=pZ-&{?07oeb1R7T4RjYYbfG^>3Y>=?dryJq& zw9VpqkvgVB?&aK}4@m78NQhTqZeF=zUtBkJoz8;6LO<4>wP7{UPEs1tP69;v919I5 zzCqXUhfi~FoK5niVU~hQqAksPsD@_|nwH4avOw67#fb@Z5_OS=$eP%*TrPU%HG<-A z`9)Y3*SAdfiqNTJ2eKj8B;ntdqa@U46)B+odlH)jW;U{A*0sg@z>-?;nN}I<Jc!YM zTEP#jKhKO8Cg3*xa9G_J<3<iWGk9u{Z6kkeA#$#V*hT~$0C~_Mo}0l0mCLfM9@<(I zhGx)0%#m$QSg^@5d`&La4M-<?hg_-!L@{XpzO8t|Q&SBceK~h7*IgTi8xjrSA(ERf z3lyV^{39BO4CkSc%S;)WxV09VpfSzv(Kk8ci+~NinR{s2Ta};x>=z3nEE@Bf3kh1B zdqT{TWJvb#AT&01hNsBz8v(OwBJSu#9}A6Y!lv|`J#Z3uVK1G`0$J&OH{R?3YVfk% z9P3HGpo<1uy~VRCAe&|c4L!SR{~^0*TbVtqej3ARx(Okl5c>m~<F)x2*0S}(U$HI^ zy2Of)T)4Z4VR5L64zZHCb*P$wvg%S>|H9ZwKVHc_tCe$hsqA`l&h7qPP5xBgtwu!; zzQyUD<6J!M5fsV-9P?C9P49qnXR+iXt#G<YqzWB%nFD=dK$)Yoylz=A*!L*l@)gY3 z&4Ah1=t62difD87k9XB<z@CX?W=BV7nPRkqX>_AS2N<6!HZ(eS`|-ndb|y!(0Y({2 z4aF~GO8bHM7s+wnhPz>sa!Z%|!qWk*DGr)azB}j6bLe#FQXV4aO>Eo7{v`0x=%5SY zy&{kY+VLXni6pPJYG_Sa*9hLy-s$79$zAhkF)r?9&?UaNGmY9F$uf>iJ~u@Q;sydU zQaN7B>4B*V;rtl^^pa3nFh$q*c&sx^Um}I)Z)R&oLEoWi3;Yv6za?;7m?fZe>#_mS z-EGInS^#UHdOzCaMRSLh7Mr0}&)WCuw$4&K^lx{;O+?Q1p5PD8znQ~srGr<IWUf+W z%*!b}9Pe1M6uXGR%=Uu05A8-%Q5xd6g`v)sv{7sENiO`Oua7wa)n(4!*M?0&#k$=p zsqE=kYz?U^>ygJ?b~Q5hIPt?Wf2)N?&Dae4%GR<vO3OiS4uh5lPn+o1bK@7_eQ|eL znhNp#a7xQ6QoCuLaYA>cRKL(a-2koctrcvxSslXn-k9cYS|<-KJ#+$Wo>}yKKh*3Q zHsK(4-Jv!9R3*FKmN$Z#^aZcACGrlGjOe^#Z&<q5@5n$8S@LO#W-4hrAZj9X#g?YI zRf$f}f*V>DfPyS-1bT9OIX~-I-5lN6Y>M}dvivbs2BcbPcaNH%25-xMkT$>*soDJ) z27;};8oCYHSLF0VawZFn8^H;hIN=J457@eoI6s2P87QN6O`q8coa;PN$mRZ>2Vv+! zQj1}Tvp8?>yyd_U>dnhx%q~k*JR`HO<jL4Ge(>=43mB?~xKAW9Z}Vh2b0<(T89%eZ z57kGs@{NUHM>|!+QtqI@vE8hp`IIGc`A9Y{p?c;@a!zJFmdaCJ;JmzOJ8)B1x{yZp zi!U{<Y`k#s*&SZr1O19u?Cze_rKxBD2Wnd-L$sWXvX<^bln4v$2;(JB1S$0~Pr3P^ zvWw3aVcdme=R~GLO2MuXo4(dj?HKitGEwDn$jV}fy*Tyv&l#g~3iWfUlp|+u$D%)j zu^shs4H6w~;cqt5IMVc@MOyTk3M<}TVj2k3l-`>Wh-h+u6vj`2F+(F6gTv*cRX7MR z9@?>is`MSS1L#?PaW6BWEd#EX4+O1x6WdU~LZaQ^Quow~ybz*aAu{ZMr<h<%qC_L5 z1u9?X$VFF4O$&9-krJF&X)_Vy;hjd8R*Bh3s1b<BV{iXbStXm!k}>Q;yQ8g)-qh>x z^}@eFu1u7+3C0|hRMD1{MEn(JOmJ|w<Hz59kd^LduS@NQ0Q6%oP^Rn8D57V|9@r$_ z$#}tZ4A#XpdBzKuV^?c1yi7?xM%*If6K9KIT{i1lJQH<r9t$?}MB6r=sIDbV@;yKA z>YHqGyn*xt-Y~J3j@nY56i)sgNjS4n@Q&p@@^>HQjzNaw#C9=TbwzDtiMr2a^}bX< zZE%HU^|CnS`WYVcs}D)+fP#bW0+Q#l#JC+!`OlhffKUCN8M-*CqS;VQX`If78$as0 z=$@^NFcDpTh~45heE63=x5nmP@4hBaFn(rmTY2Yj{S&k;{4W!0Nu9O5pK30}oxM7{ z>l4cKb~9D?N#u_AleD<~8XD@23sY^rt&fN%Q0L=Ti2bV#px`RhM$}h*Yg-iC4A+rI zV~@yY7!1}-@onsZ)@0tUM23cN-rXrZYWF#!V-&>vds8rP+<t+Ff}Bd~9XSD%v`<VZ zIbsZ~vhTC_?ja-=CscOXzbHLenk?N^2lV-Zk6$sBVk_pn#Tj!Vd*sUL5{>w0t{?~Q zT^LN*lW==+_ifPb+-yMh9JhfcYiXo_zWa`ObRP9_En3P))Qyu0qPJ3*hiFSu>Vt-j z<*HWbiP2#BK@nt<<WgfsSVV%2?T4=p$l9uvy1*OG!F*^n5R7Xl&cLO@9HEmPfO6Z8 zU%QXtp<de`jtKia*Fs1Zs2dn@mUr7AbYEWZZC;#we-Y_NRUetXYCZx!j-F`>g|pe3 zfBKS@i;ISkorx@cOIx9}p^d8Gis%$)))%ByVYU^KG#eE+j1p;^(Y1ndHnV&YuQZm~ zj;f+mf<E!KrHxNf$(*-jSfC+tt{mza(40;a+S-wEti#A{_NQ5`rbdidhW&&tcL)RG z8<s<2_9ZVgA$vvwypT+KZH+s1Mq)YgJ03F@-r@}}*JA119B6#RlZaz-jog9E-3jlX zKkN@gGT}3f5r3$s92jf(=ORw%#^b$~Zw9IzId{?9?w;IBee_2>>0ru!N`)_p@Ls<& z`t+JDx7}R568Q|8`4A}G@t8Wc?SOXunyW5C-AWoB@P>r}uwFY*=?=!K@J(!t@#x<e ze+1=clhp2^eI#k@C7#?eU&lwM&qu3;uh9SepuKZrc(|??`CLor%1Jmp8RYN`)w7#C zzLSm^!D%WRZ@~e4fL0){J>OuPXhFS@FTf6-7|%k;nw2%Z+iHl219H<mKueJYWA(d& zYYQ9XW+kqDq=2R)lY1u*_0jnpuf|Ezif7f-2x?J|*2S%Ot!8e9G()C3G*<!=F!sjy zeckVfs^n@58R-<nRoW>o1!bv(Ee0|ao!Rs%Jl0@3<hq71*H=T$kDzHOqcLplXIiOF zxq~wG9u|F4U!U>suGrOsb_@VM;(xzrf^Cbd;CK3b%a|ih-fG)`Rd00O74=sQYW~Ve z#fl!*(fo~SIQ5-Sl?1@o7-E*|SK|hoVEKzxeg!$KmQLS<y=-l+4F4hYE~T|^D{6VX z4Y>TN=5N`rYeh$AH&x}JMR+5dq|~FUy&Oj%QIy;HNr;V*7cQC+ka>LAwdU)?ubI@W z={eg%A&7D**SIj$cu=CN%vN^(_JeIHMUyejCrO%C3MhOcVL~Niu;8WYoN}YVhb+=- zR}M3p|H0`E2Id99y#03r`8$s0t*iD>`^7EPm1~guC)L~uW#O~>I85Q3Nj8(sG<@T| zL^e~XQt9O0AXQ^zkMdgzk5bdYttP~nf-<831zulL>>ghTFii$lg3^80t8Gb*x1w5| zN{kZuv`^8Fj=t(T*46M=S$6xY@0~AvWaGOYOBTl0?}KTkplmGn-*P(X=o-v^48OY} zi11-+Y}y)fdy_t<Adq~3=|FB|-JQk`&^u`j<Lzz{(8mbo`ktYeeUOIYh*cXMw)$yw zlB}byv|H?3vaJ{>I;*W(>#qzvgQZ52t!nrGsJEy!c86TKIN(n|!&ucCduG$XaIapI z{(Z9gZANsI={A=5Aorgq2H25Dd}H5@-5=j=s{f`%^>6b5qkm_2|3g>r-^amf=B_xV zXg*>aqxXZ6=VUI4$})ypDMy$IKkgJ;V>077T9o#OhpFhKtHP_4mnjS5QCgGe<;~Xe zt<2ZhL7?JL6Mi|U_w?;?@4OD@=4EB2op_s)N-ehm#7`zSU#7itU$#%^ncqjc`9HCG zfj;O1T+*oTkzRi-6NN`oS3w3$7ZB37L>PcN$C$L^qqHf<CbrSi(@^KA-3fupFp`)J zQe4~-)0e+0^Xm3b=yw(DFG03?a|NJ#i49pIIrYOHH12=4GwNczum=sD3{5jE9z?d0 zrhND6^i=PX8GEn=F?v*EYY$}fAK>iYO4_>0_qCw0r@FEMj=>}}%q_`d#pUT;c?=gI zqTGpiY4Z;Q(B~#hXIVBFbi#dO=cOdmOqD0|An?7nMdrm2^C>yw*dQ=#lf8)@DvXK; z$MXp}QZgnE!&L73x0LZX_bCdD4lRY$$^?9dt1RwCng{lIpbb%Ej%yOh{@76yEyb}K zXZy%^<z^MV>656Sk3BLKbalcc>Dt5iDzo^tj2!wnDL(X;urJfpkWrab!frFSC6Q7m zuoqN!(t=L&+Ov&~9mz<RY8oeY(<DKHQ|Zu6U5ArUVuD_sN%Lw8TaB&{_zV|*-Dy;A ztIN9!s;p9rEpGLBdDUEt$zD{O1NhG*FRpU(zYT|%F>(yEB`MK%RPXS>26Ww5(F;aZ zR@tPAw~=q2ioOiynxgBqE&3-R-@6yCo0*mE;#I^c!=g~HyyjGA6}|<(0EseKDTM4w z94YnCO^VYIUY@}x8kr;;El-cFHVO<$6;-UdmUB|J8R*Wf$a37gVgYT|w5^KkYe=<b zMfS{@tmvdW2Cjz7(sI}nVlA8L*4x9-$T<itkX<`}q;F<tY=|pRx1Rr0a9Xd5v&$rz zm3vT|{&bCYi2UJlTAn15wbUqT2=lH{(`S6*j&~&$#DAgh`E~!r-@lY)ugO(gX#(t? zx3DrArO|{QWr#KRY|VQ6CwKuH{s0<ki}0*XSKTPm@^s`g0|NIAdpi~c8-C9(0D>(i zMkA$%7;^a*$V+}e%S~&*^^O;AX9NLt@cIPc*v!lKZ)(zahAsUj%PJot19ErFU=Uk( z9H<x6q=rij1mbFcLy$YDdzDV;>w;Lb`V+BzVpMu;TGB9}y~ff)^mbEmF?g{{7_0SR zPgp*n)l{?>7-Ji;eWG{ln$)Bro+UJAQo6W2-23d@SI=HiFV3hR2OUcAq_9q~ye)o@ zq8WZvhg`H(?1AUZ-NM%_Cuj}eb{4wOCnqs^E1G9U4HKjqaw@4dsXWP#$wx^}XPZ0F zywsJ0aJHA>AHc^q#nhQjD3!KDFT6FaDioJ#HsZU7Wo?8WH19TJ%OMDz$XH5J4Cjdt z@crE;#JNG`&1H8ekB(R4?QiiZ55kztsx}pQti}gG0&8`dP=d(8aCLOExd*Sw^WL`Q zHvZ(u`5A58h?+G&GVsA<eG=;ULt*Yhp0PI>;pQNNPFI)U@O`#~RjaG(6Y<=gKT2?1 z*pCUGU)f??VlyP64P@uT`qh?L03ZQyLOBn?EKwH+IG{XvTh5|NldaSV_n~DK&F1aa znq~C_lCQHMfW6xib%a2m!h&%J)aXb{%-0!HCcW|k<K@TnVr%|Q)6)4`Ie+J7H;Nm$ z=MNaRq)@B==&>zaoSwPMhJ6$KL|F~Sx(tctbwfkgV;#KZlEmJN5&l5XF9eD;Kqb<| z>os)CqC^qF8$be|v;)LY{Gh@c0?a??k7M7&9CH+-B)t&T$xeSzCs30sf8O-+I#rq} z&kZj5&i>UyK9lDj<ISSzN>I<*TLZ3USVw<HSwHy;C04mTJe~gLhj>wpiE5x8<|{Db z3`HX3+Tt>1hg<rt9qMf`%Go~9*%j)>?+uY{^wC$|Tb7ud@3*Ub?=2xgztgv6OOz0G z-4VRyIChHfegUak^-)-P;VZY@FT64#xyo=+jG<48n2%w<te=497AJ@RKr^iBIVf@q z$e>cx`ze6yd51(!NclmN=$*kY=#uu#>=yAU-u4I9Bt0n_6ta?&9jN+tM_5_3RH);I zxTN4n$EhvKH%TmOh5mq|?Cx$m>$Ed?H7hUEiRW^lnW+}ZoN#;}aAuy_n189qe1Juk z6;QeZ!gdMAEx4Na;{O*j$3F3e?FLAYuJ2iuMbWf8Ub6(nDo?zI5VNhN<J0!5*+F)l zw9<4HvC+sqMwBZS|D7f#CVotoixmEGVlp}Fbg1#wO(h>@ib6Yw_4P)GY^0M7TJwat z2S*2AcP}e0tibZ@k&htTD&yxT9QRG0CEq$;obfgV^&6YVX9B9|VJf`1aS_#Xk>DFo zwhk?~)>XlP5(u~UW0hP7dWZuCuN4QM24Td&j^7~)WQ6YeCg)njG*ri}tTcG-NxX}p zNB>kcxd5ipW@tN3=6r@Jgm#rgrK*dXA!gxy6fAvP7$<wRXN7tO`cPWZL0zi&qwVVk zAr<05#b|sB?TjP`<dNg^s6vT^BrGFAbtb8x!Hr|oGUuNN&*xuy=C>)8)Vc~PPQ|`( zPy|bG1sUz958-!zW^j(8ILV%QC@x`~PDFczboZqWjvSU<9O3!TQ&xYi%?Y0AiVBLV z%R?#1L#G&xw*RZPsrwF?)B5+MSM(b$L;GLnRsSU!_$N;6pD97~H}`c>0F`&E_FCNE z_)Q*EA1%mOp`z>+h&aqlLKUD9*w?D>stDeBRdR*AS9)u;ABm7w1}eE|>YH>YtMyBR z^e%rPeZzBx_hj?zhJVNRM_PX(O9N#^ngmIJ0W@A)PRUV7#2D!#3vyd}ADuLry;jdn zSsTsHf<t@heoq7hG_uyDm7SVkOVe0O+V*Wwd1}zb6s1IRus)!6&kl@)F4r`$ag0`& z!84{VDxH&BauQm~%@MjF_)Z0^UbOS)5FVNSU260?m#c20b0Tqjf{y+%wPO%ZXkS_@ zQJ7@D5qF3UN0r6*I1BnOnxnR^PLn08i3-``&n=V|(W?aT7uDh)U|Yd=jY+6Y$-JuW zF9Ayf_~nJr7D?RH=IFd0<ZdyGu$8J9xP=M_DW!R(c5G5yaYiFl?Y?(XHjM1b0x8`p zar7H-rTw{3V=lY6XNky?!U!H{PT6%jcDOBcRF<bAvICUEsIb{iI&3mFjES^&uk(MP zU+O7IeoU!ZUmw$LOxV`Z<(MwJZ2!hhY?!Ny2*oyGtjyz=rZ|4n9C#GjIutCCDvuRd zm}#M2y2X6JMkmdm`@*@QN=kl`(IrCIkc$nuj-qh^zDY4J-Wyk-W!DSNOR9>Q@6`lH z^GWQf?ANJS>bBO-_obBL$Apvakhr1e5}l3axEgcNWRN$4S6ByH+viK#CnC1|6Xqj& z*_i7cullAJKy9GBAkIxUIzsmN=M|(4*WfBhePPHp?55xfF}yjeBld7+A7c<cjyRv7 z-|n3fmsfy1KyUWBjOpC<k}M`qm-^|H^h5AmzE@u9<*e=xAum9Lt2l$`FueRQe?ih@ zi0pH_J}!s=*Crr5l+mA6jnXB#2f`pnQ3QI0baW7Co!D)`VjPo6q-v)0@+8E~fjz*I z53Zw|X#XKjmENvUr;mPdRlH$$q5jeDo6<9)ow&$Byygz2cpDz|ugr06mti5VZzL_u zH<Fg?zd0igwid>QPX8PE-|Pe_xqboE;2AJb5ifrEfr86k&<srH0}_QOngUYH7h&!c zfORM=2-Me4HFEk7pijyJ)C$0=$N}y3Sr+Hcqf3eH4MXjZ=XxyxbR2i9<N9QAs?aN3 z7sxdfBxr9j2{lXCAZewJth!BPqTl%7IyE*LE9}#nQe2b24S$L}tWKWhU?Rq7D!R9n zrd>F0+y!r`-urW}OXSkfz2;E``UTrGSt^B)7&<sht3SP(nt3g(2!#YiTU0;wicLOi zoUY+ji=3vPPRE{-tw_Iak|m)mgU2A>#RSLTQitk=mmPKUKP`uGQ4)vp_^$^U`2Jjq zeul!ptEpa%aJo0S(504oX<NdB-f1p@Q&-u(#a8Xciz?hSXT%5ij#|R?_xZv{+i?VD zyFzHz?{FwHnqKo`W63}2mrQ4-TPH<LU-1U!ObSDTDK(-v;=z=lmjV?=qIf|~0JLNG z9yQPH!Rfq(7xYel0%zoiPK2LY0B59&(m<8Hxl)ur{R>PGdWM7dAA9=o9s4-{>z*pP zJ31L#|L?YR;^%+>YRJrLrFC=5vc;0<CaVyN{9rIf96E*~gZ!CK2L3`kDGK?5(DqNY z02qSaP-F^o#B#wwjV$JenXjp=_AcM99-v+zt5iaSXkshWe2t(fU@NpdQ9|Ew9`YF| zqxJVVftHC8iM(}F{B7wiqzF$gha|-t$4D+=YIPRb!K$n}zg~r0n2jbdJZ>{hcxDKF z!ntmgO>rVDaGmRpMI7-+mv(j~;s_LARvcpkXj|{GHu1c<<v+1bVltr~Eu3)y?kx>1 zKI)#7RE~Dizu1lG>p-PcY2jX#)!oJlBA$LHnTUWX=lu``E)vhf9h4tYL-juZ`e|Kb z=F?C;Ou)h^cxB;M-8@$ZSH0jkVD>x-XS$ePV1vl<F~VBDp_4~1=8w9V@Y}Htg7axt zVFEaOx?sNnJDnOO+3^p9K#qzj)KBVT!+LmQG#baiaT-7m^b+Vbsa;9WW0N1-@BDNI zCpxex+5+x!v+p~7fhKeXpXH_I*T3kie(&P{5tv8(&s*y3WN!6e6z2c$^;rMSdUKm^ zwKE(2|N3B8Cz_ehcPzmCW}5s<0sU`3^nV`IG`CZ-GPnEZ*D_dH%5^~u^^?4TWJuKw zQnA0V92;K}HBOT-n3M%f$jn^EEiH(=C^DRxL)dsMdAR7TB=a-;6~Sqsz)9a>U8&<H z_WTTQ4HRQiFfzS8wtdHypwRd8?*W<L!)uKnPXKVt0SZd4CWr055D*4H#m|4{@hl;D z!XvkZvGA`6o%Y=QiDp{kZE$d<W{=5UN3c5#J1s4$9f}_OF3skANiCh1VZq?6uc(;f z6ae!8WdgSS%}to`l3`4Omd)aV*u8f}c%GxUt$)BcM}p2ZiL;qXDP&GDOF7V@pIr!v zB?%S;iz;4(2UgX%8+ZJjcECT0ADxt5gnCW)khR0dr0X$=|44AO&_Z4{JgTA*#kLZX zV*Ddpx23OPKl#S?!6S4*Kb>CG))4NgU(=XFH=Jb1IB7dBysS+94}Y>sjS(&YcJwhn zifzA|g$D5rW89vkJS<bua4q}M3vYcG%FFCqIZ-)&MZL9OUfJD^uAI$+SP_O_Riqow z%jwdI>v()I+Th4R&C$g-!CB30xkh%aw4po3$@DK2fW>}enE2YPt&{C~j}`>RYICK{ zYAPfZ&%`R}u6MYo<>d`^O#Q(dM{3>T^%J{Vu;lr#Utg4x9!Z9J%iXs(j+dn&SS1_2 zzxGtMnu^`d%K4Xq4Ms-ErG3_7n?c(3T!?rvyW=G<7_XKDv*ox`zN*^BVwUoqh{D7o zdEiq;<Kp3U=0heARU`p6aYdLFC@qq;)3uY*j%;!n0JTzROJ=`Af<<V9NQ%c3kp<LS z>Zp6}k_mCIAVTUcMdH|fo%L#qkN19X<T31FRu5l#2DO@m6s(E4`bpQ1w^W#bub`P< z34Wk>$%b1#Oko|u4!M*oRqdBa3z98{H#g=d%5X&D#NXhLh`nUjxi8@3oo(AgeItdJ zIrt9ieHI1GiwHiU4Cba-<DN^<zS&XNUq0lD>*nK@eHI4uj^LV<EP!*)p-a1@+beS1 z87wRP9e8lpdS3{WYqi5DQ_s^8N}AbIbUXA=yBMQf2dLBEtZPF?6_JwsGL81h<N~q2 zp_2@rMp+=B%Ocxu$D9yab{WbLC-NmY_gMq!!_QgyQS+HbVr7uMVB-(O5p6*vZPKJA zP$ptukvoE;A~kLeQ(-y3LgzpM^E-kkfjYQvcms5}&M`<8Vum_bS%pv9%LZTng3?MR zTPSJ&j{aERr}!Uc8vhr*@jq<dgluh{9KS6l?Ec}`_RS9dhq1(eXgx+NPJB}&QF#~I zoB<_4kD~5L0(z3>mVIntU@Gwf^t6i3{;SfLMCs#L;s;P4s5oqd^}8Uil!NssP>?!K z07nAH>819U=^4H6l-Dhy`^Q6DV^}B9^<Gb`3;}`{3mAHidEu6$zh<R3{Vv`~IdU78 zW#M*ID6jF15rbg~(n<K_bn%igkBo;+9*qBOGGH9vw1E<JV8q_$kHXG4i_#ngjW~&M zA%^=k^vJHV#e(xZmvL*Z6QuxoI5ww$wW=2p|G31-oK$xCH0gNJnYfN=^O@`V4JGrE z>aR0B%4AH=D&<dcWXO)URq_fEXe({<!!o1#3zS47cfsXyhd`dEJH|m0tKi#u$~r#t zGsZ;2MA#%=o^@ZjlBasSZ_Rq(D;jos`LDu9>+dowt9N}zCK+xHnXb-tsKaV6kj<P2 z?NyVhk&}7(`SSF<kp$&7biV$FYx{bK6`WcBf$#qPYx}Vq2Z7kisc2Jxi_aI%VCp&N zZnr!cf?c*N2hc42oFenN(mm8%bHk>f;Wdp#uIZ_QsI4ralE>MWP@%_5eN=MApv92( z09SSB#%eE|2atm9P~X2W2F-zJD+#{q9@1}L2fF|Lzu@1CAJq*d6gA8*Jjb;<+Asih zctE|7<PQ{vX4N{?Xv$eIIw0$&b^0-)DjSzGlfqexo9b?!7ys5zsAsZOrsjoImlEH^ zgGcU8NlAmQ-pRGbou?Na_AkD_e*u1luaaUvP?&TFz@RXM(~=m;46$#<Zv~SXN%U34 zU{j5>hdr5&<IqOBq7c!IwEI--y9k72<!gfNbowEX6`6?JhzxPr$-Gv>b-hRhVe}PN z$0G{~;pz1yhkbwuLkfbvnX=<7?b(1PhxAmefKn$VS6Sv)<S`o9&nT5$*bSAf!^Y%! z;?|R9(LhT5rE$w)w5jDG&*)Rv6z7I`WxCEZ`gP5|-LuY?mWKYTN6ra{aro{@vyOCU zmW{n<4&gl78d#9<i*vfGm=rda#<Xd!78~>t-UypwhEs3?*E=(pc%Dlul1V~OdWvdf z{WBX?lhfO_g$$X~hm^Bhl@U0t<|beYgT)2L_C(z@B^-63c9Ak2<bfFQ9eT+&^bf3S zS}m{;^+3O=RM;HXdHh&XS9S^;>*Aa)iOMylfl|qyNQdO#yoJ?m2FOkhZ1ou@G%+^m z#!#(gTv8nx^34(HddDp|dcFl@&eh+&FFJc@^FL3fV2?u&9Wt|Yp3&MS)e+ez0g~Ys zY7<F}dB1)HLdzcDjrXf^IHE1gNqzXP!lGbR8ldi%91X&ahYoyq`D68*Xi#enBjs|l zBQH#{wP(jld(@H8_k{zG@==9nQWB*iTOq51HlSgXK#}hoPdLenf8cOJ(^g5ms{6x@ zmlx&*a6?~582+e4UPko_kVD%X@E)gcb{)ScQO2_z2cbeP*k$&Tt)|utP~1>d0n^)+ z0@K^GJTLN?XAV(0F6e>o>HCGJU5(8WsSFErs0FsO=O1u$=T~xx7HYK{7C>-IGB8U+ z&G^Vy>uY}Bq7HX-X`U^nNh+11GjG-)N1l_tG<^4Tu4+4X9KO9IrdH+eXGk|G6Tc(U zU~g7BoO!{elBk>;uN-`rGQP-7qIf9lQhj-=_~0Qyszu>s$s0FrJatSylv!ol&{29~ z7S4fv&-UBOF&cR@xpuW*{x9$R;c_ALt?{+dI&HoBKG-!EY{yE=>aWhlmNhHlCXc(B zuA-zI*?Z9ohO$i8s*SE<It$+0gqE`SvNCr711yBrvi2VnsC$)lT;rESm*{*Y26oyO z_&_%y4X@UWsdP<ATAsV?pDmZ-xOoU}KlW!J$W!pMYZtUKa-wql_u%UE&Klr^oxpVr zP@%Zc<bFuPE+p!M7LtmNUxJdpLtMx5^|!1Ef91KN^k}c%e1Z69*|PkB?1Pi=wINO- zQ52tcErV{4kTsxGak9?yocw~^DEy@MDEPdMq3$>IHzVvyEF$65b5m=H*fQ)hi*rX8 zKlPqjD*Ix1tPzfR_Z3bO^n32iQ#vhjWDwj6g@4S?_2GyjiGdZZRs3MLM<k2r7Mj~3 zfkWCX!VsY2u;&(WN%NFCU<AYNrH+}M5^tHFLntsjlp!0(;gIdhJUo!e$_wgNkxCxn zmh1u)h}2y{y^{^*?1u!!1%-*Y$hN0pZI|SVJYJPA?VA?7ow|FW)Nk6k-GD!rlc+pa z8~Wk@y*R~L8~oe^-&es+!}^P(QyBaAw*dANp7$tzM=_dt7!syDN49b~<&s65Kq=HS z0GL`RCUKLn!yep}ipSvu96EuZ<Oc!@CJ+zkGw28;$C%M(4~N_th|&Iyt5Wbc;r~DR z!kQ_3dKY|0*!k~^<iC%!BH!v&R<`;^|M89Wj*|I@o^tSx8EZ4O3qt_R3V3$_|E`d> zTfl0_Dsn=CvL`zRey?yi)&4TpF&skAi|)+`N-wrB_%I_Osi~)9`X+`Z^03whrnP7f z?T`*4Id`J@1x#T~L(h5^5z%Cok~U|&<roe{#ZRu!2|CrFxjxJ@HcdAMULxztHgvJO zh2kU)nY2%Hi4#Jn+iV+kP>g&GpCF%E4sB#i3xAe>6>24%Kuu=)=HRS;Pu2wghgTFa zHqm#sa{7-~{w_039gH0vrOm&KPMiPmuPRpAQTm5fkPTZVT&9eKuu%Riu%-oMQl2X6 z{Bnx`3ro^Z$}rVzvUZsk9T)pX|4%sY+j0i)If_z-9;a^vr1YN>=D(I7PX){_JTJ&T zPS6~9iDT{TFPn}%H=QS!Tc$I<UckF_Uil>9FPgI<0R7?Mu`{FTP<z1<(Jlf(=+wb+ zV>~rRq(0ITmP1yrJdy|m;nWmDelF-V^y7*UEVvbxNv0sHR?Q=PVYRuZinR(;RjVAG zm&qlSYvaiIbVEqBwyDaJ8LVmiCi{6ESF4pO?U&7pk&CASm6vuB;n-RauPFzdr!C%1 z8pjdSUts<Gwwx)x@p~5UkifN|oOQj3S#~so&CO<<ADV{7>7EbA4Kg(01zK!ZU<-|d zU&jWswHnSLIg&mTR;!=-=~z(#!UsXt%NJR|^teM8kG@8Qg_0^6Jqfn&(eENtP8D7K zvnll3Y%7yh1Ai~0+l6dAG|lEGe~Oa+3hO>K2}{ulO?Vf*R{o2feaRBolc;SJg)H<o z9o4?BoQ15NovoOrqU-QL4yC-Xp?-A~auR=Xlo7sb?KUxmZc=)k@>XHn4qtzomq^EM zb)JygZ=_4@I_T=Xu$_;!Q`pv6l)4E%bV%37)RAba{sa4T*cs%C!zK?T8(cPTqE`bJ zrBWY`04q&+On`qH^KrAQT7SD2j@C>aH7E8=9U*VZPN-(x>2a++<UotYYlR9imBq_o zS80>w7R$!sHH+wlze2X)<<=zC_JJvTdY7h&Jum?s?VRV)JU`T;vjdi7N-V)_QCBzI zcWqZT{RI4(lYU~W0N}tdOY@d<q+EWtEZx~>YO8Rx5d7DF1Ba5*U7l$_Er$cO)R4dV zE#ss{Dl`s#!*MdLfGP>?q2@GSNboVP!9ZcHBZh<dao#!&^e#9c=oGW#6S=_L3^uGM zA0Y8*lSS$o@kzJPA!NwZ2$h1hDL}~F1VmP7MffTq_7rCw`tw;W;x8QCD<0rOP{J1( z|CHijE_C6(L*}P8xhXKGfaCcT`F1Ph90ul%b^8}<jB!usJ<OxDt*0Fd_1Yf<#Nr_V z;zy7s(Y;SBdjM?01E8M>QZ>TJ85(=-_i4jdX5A-|^UT}~W{CO^Lt4r;<1ps@s|K7A z90@6x1583&fobrg9-@p&`Gh+*&61N!$v2He2fi9pk9W2?<dv)SvJ6FnU0482$)c^D zqMdBH)@-;-*B5{oh}J}rI(uKZDW;O2sAI9*hWPn09+Y4RGpZzN1rb~w6R;d$Q(_n- z$~dkmDTK<2K7bl2MRgLU9W`nySr&oYy&`s7LM!c~rmGua;6N@yrKpTKeu@Ss7UVPs zH@C<tULoSdq^t0L{j}+rXx9C(gdSr}bhl-5CQOWD$z8N~l3^y<MKT9mBrVbtxpI`5 zN>6|)ng7Y~pJT3=g~DjTcYWjY9gtZ5hk*1Qf!y2$ot@0St$@r8|9^GMWEE>iB~etL zXYxn#Rvc`DV&y93@U$Z91md1qVtGY*M(=uCc}@STDOry@58JNx`bUH}EIb(n6I}i? zSYJOZ2>B6&Payu+@V!gxb;)_zh-{~qtgVwQ-V;vK7e0^Ag_$3+g+{xSVudVOY_p-R z$sXhpFSk7je2lk5)7Y2;Z847E1<;5?;z(I)55YFtgF!J;NT|eVi}q^*2sM}zyM{+s zD0phl+J>k1E7cZEGmP?1-3~RE;R$q(I5}m?MX8xi?6@0f#rD8Cjkpv1GmL5HVbTnM zAQ&4-rbkpdaoLp~?ZoW>^+t0t1t%GO2B;ZD4?{qeP+qsjOm{1%!oy1OfmX?_POQJ4 zGwvChl|uE;{zGoO?9B_m{c8p(-;_yq?b^jA({}iQG35?7H7`1cm`BGyfuq7z1s~T| zm88HpS{z54T{jxC=>kZ=Z#8G@uya3tt0$xST5V$-V<;6MA66VFg}`LLU8L=q3DmkU z)P^X8pg`ndMY*>gr{6~ur^Q@Z8LNQf*6wkP03K<|M*+cDc#XKZ`Z0$1FkI-IDRw#| za52W4MyHlDABs~AQu7Duebjg<TQb=Pj>c}02W;1jgBx&I@TMDXU`LJutQ?@r%1z`W zlB8G-U$q37G1ob>Er8j0$q@OU3IwG#8HsvJM#)j=Y%~#zY`jaG%5<TmT5-x*hZDP) z@Ke)Mo9ZSUPYphq1*8=iClO7HxM<ag5$qSRTjvFrZ1y+sJ<U_GuD`<18Kjj|E63(| zSk0clMcOvJr&=#@w-BECDT9P<#1uVaw{c_&pBA?swz5kinmLLq6ck0Y8wb*xJLey@ zaM@DAKz8V=U~Kyz2FZD)%O8LGXZYmWsY0KT!OnAUircbAjx5m;Q-R9pP@f;JNOB8j zh&9Gzy#r~Qz~tLXE-(rhV(9ygxCM&gkAlnY(q#-(G~(cYlF>;!(kY3*a^t>(qf6>I zpAJpF%;FQ?BhDSsVG27tQE<RH5Bd!1!~M=PwRlyFx&n!8?Jp7c5mwtDeH1252^Bwg zGluDYp;}eDfq*LiB{zow_L?o^B}5Qc`UvL{()bEe`HJFtiy{3H4gCp~Fecwyc{;RV zghu>G*CmWhl4)Ngp%}D?U0!nb1=)1M==^B)^$8Li$boCY$S4U;G^A!?24nSYHra{< zSNapX#G+0BTac|xh`w&}K!);$sA3ay%^a2f?+^*9E<p*y^Y4GjvqI~X-?zSDJ$~Qp zGot_Zng3@MJEaNb^$+4%&!mGbIXe*+A!8ULwbU~t@h@NnWMoLAK51ZZ<t|e8v0fwc z=}mq6Y8V@p%BAJ%nx*;WVl!i4u_5|`=IZ@<8LdChJuA-|JD=~m*6;i$+iMAc`Iq-U z%^#EPCtfGqCmX4Wuj@Ctp7CKR_cQn9K|Uw>v8ONilfwYUaDTMvhqz2Ue2<81uuB71 zAl|VEOy%GQ7zxAJ&;V^h6HOrAzF=q!s4x)Mdlmp{WWI=gZRk(;4)saI0cpWJ<s*&# zMXO|Q=$X4&9=@>w$2TJcyc2hWG=|v^1CAkKYp;s_QmU?A;Yj!VQ1m-ugzkaJA(wQ_ zah00eSuJg<5Nd#OWWE?|GrmWr+{-PpE_Dbqs&2`BI=<%ggbwK^8VcGiwC-6x`x|ZY z1&{Vj<zW62aD(O^c<{`#JPEflpSagbSiZs$`JGOsL*pxY7>*XIF2$-2Lx?KC3UNRT z&=j7p1B(akO5G)S<jA`?Kqur!pA3SJeQcBLsk~ivj}F8uXV$bL{I^Tx$Qu8hEVuR^ z3|fy;U_+%x!dNFi6?J=WkMCM-4bc^rlBeu8Zd@?gwW3SvC~kZpV5BY&U%_4EC{iV+ z0#|8GnX~5J#@;Tr-xF<nq^LP$K&*+XXv9D)%KTH)P#`vRvN@i2PhR9^2Q?a2ELy#a z4wD&<kjWirz0+1^6PKyqq)v{V<cI9V+3M<Cd$Hl4<Kr3uOH+v1b(izbr}a2|{3^J# zxnFK|IpuX!$T8_2tD9A!`yu10jCAT7n++wU)t;W>jxXOjEzujDS{s?%o*k{Ntu4*X z;2D|UsC@9Wwk5%)wzTrR`qJX!c1zDZXG>-Q<3Z)7@=8Y?HAlj_ZgbvOJ4hPlcH#Iw z!M<Bb>-f`OSHF~R5U`p(3*JY=kgBZ{Gk;0;bqEu%A;P6uvlZ0;BAry`VUoN(*M9NJ z%CU2_w<0(mSOqG;LS4@`p(3*Z7jC|Khm5-i>FcYr87};_J9)XKlE}(|HSfnA(I3)I zfxNYZhs#E6k5W(z9TI2)qGY&++K@Z?bd;H%B@^!>e2Wi@gLk)wC)T93gTxdRPU7uh z)`$-m(G2I5AuK52aj!fMJR|d^H?0X~+4xSpw<T}$E1?7<)tHjGTS1R+44A&n9@T%> zqNRtq5r8hic*{eAwUT<=gI5uXLg)o5mg4XnO^T+Rd+{l)<$Aqp{+RxhNYuX^45W0k z5$t%+7R;dX$`s6CYQYcims>5bNt+k&l_t%C9D-6sYVm%Y8SRC#kgRh*%2kqMg2ewb zp_X*$NFU%#$PuQ@ULP<TbwP<DVexwk_h<ao+^9`6uTJ&zP@jag6r+*E7LAARZ^R!| zj5uh<1v_EseRbZh3eOs#jt|>>h9Xw`cJ>J-ma8lU`n*9PcWFpE%x0^}(DvOVe2jz@ z0^2QOi0~t!ov?jI{#bw~`Aj5ymQW@eruRg`ZNJ5IT5_5AHbQ?|C>_7rwREf2e2x&L zlV8xdOkp_*+wdaqE?6bmdrFfaGepcj=0AI<+c=Tg^WB9BhFx?SvwoVdTEm&zPy@Vs zPs2mVPiw1n_h?Xi6!+w)ypsFXXuM>gIY(J+1N6r!sJ{+r1%BzRF20!D;bN>L^?O8n z(5|x2p^Q6X`!pm3!MMFET5`nJX<E7w2DF%j;xnf(Si--I?KhXvid#=C<)b2CmpD_d z+oTC2rMbz1>n>tK`fFA<LwHTajY?_{X^J)eA>j5Eo&t6;F>TU_4G93YGyzvF2_fB& zfE8(dq?R@@&Wh8~%G~rDt1+e)96O5)by_%;G~Zv`TpmZ)vY@BkAan*zEy(s`*{-@U z;$WPjoNx~m?`6Z;^O=K3SBL3LrIxfU{&g)edERkPQZK!mVYU-zHuV0ENDq^e<-?^U zGyRcrPDZZw*wxK(1SPUR$0t0<U15UUDYk3jMBy#F_ZM4lWX1B4k+)!u*GV3BW_43@ zrFz9sxJ}Utcm5T;M`16M<&$Nn>W<E<ayWNyBdz3w@&tQly4Czc<6ZuMd+<{B6Bm1q zYH;>c^*u_gb*>qEOP102FX|`^U%n*7z=wM@pOmYa6Z=-)T%!{tAFELY2`dTl3$&w! z7sgKXCTU(h3+8)H#Qov19%85Xo+oQh?C-q0zaM_X2twSCz|j_u!te3J2zLV#Ut_q7 zl+5LGx#{I`(9FzE$0==km|?%m?g~HB#BSz2vHynf1x14mEX^~pej*dhzD|6gMgOJ_ z8F_<>&OIz;`NSqrel?HI-K(|ypxwz}NtX!CF3&T(CkuYOnKS&%lUSU44KsgS`L>!w zl{MoT4`t=+p8>@88)Ea%*hOIkxt#b4RfrwRMr91UF_Ic~kV;|+d<n2HU9P-}@==GR zA_ji~;c=bSK4dOue=^lSz#Y!*skiT5WsVA`18VMCgHF7)U>RW0a8Vl725+gsvtHr5 z>?3fai&9NmU|3;-nAu8OB|<(-2Kfub4MX&1i}dDd=R~Dk=U-Vr=@&lfEIYU~xtHHO z4TKt=wze`qm=69lD)sOOkZ;$9=0B#*g@X6xPM-%zG*rCXkN%eRDEUp$gAaEd29t&T zRTAg##Sk+TAYaa(LyTD__zL3?Z+45^+1o}(&f<~lQ*-z7`Um^>v@PKqOunTE<qFIA zeg2)j4~kC;Jv3w*)SKEt>#OyKFY^q&L^fqZgplhXQ>P3?BMaq6%rO5hfsiln7TppJ z>nG9|2MmL|lShn4-yz0qH>+o;Fe`V!-e*R0M|q~31B=EC$(bQZTW^!PrHCPE4i|>e zyAFK!@P}u>@hqwf%<#uv*jen5xEL|v!VQEK!F`SIz_H8emZfn#Hg}}@SuqPv+gJ@- zf3a`DT_<sk@mtxNH3rI*?wY7UMl-IgaFRsTaD@*3WJ7NUEd>Q#)DnHv+XVXX`H}At zmQwW2K`t@(k%ULJrBe6ln9|W8+3B*pJ#-^9P?21%mOk(W1{t#h?|j0ZrRi_d<scjQ ziis^qWAY|Da1Rq%vk8an>wGh#*eBd?fy(UBXWqAt5I@L3=@Qda<K^ut(>iK`B_NQ$ zLXzm{0#6zh2^<!T#d-6zk45_;ja)?|Tv6R6UQ|}1FnB4EmoB7B=IwnKVjz4q8Rd0K zK#d#jBVnf*YAG^&Tv!PYpV7Vz;;E+wc!5GNkq&i<iLYx)t|Cg-^y<V=CA{YS4EH>M zfu>HFK^d`&v|x&xxa&M|pr))A4)gFw<_X@eN`B1X%C^a{$39fq`(mOG!~22h)DYut z(?MONP1>xp4@dIN^rxtMp&a^yeGc8gmcajyuXhgaB;3}v<B4tCzu2~I+qRRLWMbR4 zZ95a&n%K7AoW0Nfs?I+9d{y1me|Pn&eirU^-Ivl|PR9v9pHu_(9(~KUt2xK_otq`L zDxXUJiq43uy-$uQNIVWmcQQEuaC>FCQFa!pTDht9ld9`&ql`2&(dwNl5FZqedD^BP zf5K1`(_&i7x-&rD=^zkFD87idQrk(Y?E;-j^DMCht`A<!Q*<)2*&w=iJc=MKhw4bo zQ@b9%t)%*c2q6uYR?wq{g*`Q|!0w%%qIk8fR;he|z2ge9ApNAP<Q#GvTBwefDpX2) zVX)4%|ASa0(dXk!YNpj7OBwShgRz8OcD&I_6z%|A3{doS(CDrfll#N!{LXd%<tF2B zA?9(Mw*p2WS#DP`R9OkvKa(~V-|IDg*AO0J&y@Zl6BHl#wXzI&2iqfuf*c~xSvlJ0 zXt142o6sibT{Hi=fuD#3dlh{i@G&)(7ip{9p+?OQ6U2JSd_W)WEJ^7X#L`k}N!^2@ z7w0$7@q>8Qa5J-46@G_*Y3J+&l{$}*QCATEc9zuzaQGHR8B;y*>eWuv)E##?Ba3w= zZ|v(l{EB`XzD#|ncVm#Wy?#Nzm3bS1!FJ70e{<E3J*_Yi0n`z4Ipjg0w*E&}&Zk6G z#Yy$SaEx0fTG5FQfZz*U@IybJ*}(>DGe$EgNDg7<_ic^mJSh&Xc|aTwCrTv;X<mqp z(C@<7=Qn*xh`h8ZMJHL(rhstEBGRS_u2^E#_<vkR3CPSuIVdeWGBE}SBCGy*eV4_I zPEXPCb82yf50D4UP3m|=F@Nnj$-!ml<CYXPeFLG>kW~UlS&G%KyLklCn}F^i(YP(f z{cqH%5q9ND_S;l$HRP$Q@`D=F*_1$CXIA5X@|V&Vir$NQ$vCx!b&LGCR<-2y)m%HI zxeeyQIjiWcf4uD9+FP+EJ`&$oJ%$R(#w~GjqP|aTQj#d(;l#rq$vcM&Y4ZQ_i{Kpx z?k2BtoKb?+1-EVmG^ne-W%8+y?i#J5N5g8f^qpH5(ZZp7$u+?I9GB+&MREX?TmVV$ zA}Ps=^CkD^sD9N;tNtN!a>@D^&940cTETu*DUZlJO*z7BBy`Rl;$-D@8$6PFq@tz0 z=_2JMmq-JRSvx`;!XM|kO!|DENI-5ke8WR*Zj#vy#Nf1;mW-{6>_sCO8?sVWOKDM| zR(iaZrBrzlRatUzp_Y|2nOXnY2G%WLGXCo9*)th_RnXvXV=q;WNAimI98!A54|<xo ziiCqxOj(=)&n`3`sXK%Oet=q>$&OCCG%$4m{%E&o?S|Qx<4K~YGmM1CS!vZAzLN%d znbZsw6ql=XkiwSbNofNeA42q8#LH6Rk(u@z172O#6K>Sb{#`t#GUgpd{2;D(9@I_9 zwsY(6Go7RmOThs2rM3|Z#Vbs}CHPLgBK6gE8;XkJQDx~p5wJ?XkE(0<^hwnt6;$~R zXCAzMfK@`myzdkkpv*ZbarVwCi&{-O#rswrb-#x4zRkxfVCq;mJLic|*C92T?0CYv z)FCqY$xA(QZmggPocZqQj0Rc?=Afna`@fpSn)&nSqtI}?;cLp<GCB~823pY0jm)43 zT)cEkc9Cz9k(pnx0zPs(r0QgA5z6YiEjsShne6!d)VQ&VOYjIc_mWE#5w}2WKb8Dy z4U82AO1txnp}|Ds%65oH5XWbX(w0Yy9q<$s-a5m6aXdfs6A7;b!6NGU*2m%vluy(T z;NFViC+9+R?}y|g`$LUjvH;j5o~T?XN>hqEF3F9^OZfW9@HDunc^2{_H)1D9(O}4e zJ<Ww|NYVPSzu}1pp1z3UgvsOV;NJEX_4ukJCzq)!X6(MD_Z6Ia?uQGjuf+1Ngby9T zWk<j_-1S&YPm=wHx;<@L%oG{lg`G!qa4{kj6FhOx1(j0``~c<zCp6W^0lC=T=n$B{ z<5)Xa1E@Oq*mMG#Xv7^6rlxm<uTaYijYjlYb&iCwfft#1oaC+*_+_tS9|*xF$JLS7 zH>Mi_4(&$CD{Jf5&u|7#Iq*F~)l!8pAzNrX^<&wfEu~}Ipslzx=g^ff2?B9SnV=!$ zv&K0`hMN6BVIusHNX-lr`#K?OG1S*S4rCQaI<Pka1%^oBKQRSyNHOKlzBO6)bRpTI z@D=z4&3X&nZo@PFIdbnd{nKsFC)h>3ea(!gCl7YjxJ3YQ)7-b&N*D8k><*x|47s3; z4f~WTWuk|Qd*d*DICV}Vb0YSzFZp5|%<tsQ4c`k{46&>s4}@jvtTfm&`|(jNpajge zD}@CMaUBs+b?Yu6&c#18=TxzMCLE76#Dy=DLiq_a_knQX4Uxk$&@3<XRnbPhV5ZnR zDOd&DTB4{9;*|=Q6rn_YZra2P!$(-NrvOC5O-w3h-2a~MV`GjY<h<S!W}%r^5Ti-m z^8xJQ`jJyF_Y({YPjw5p4&TLS^XwWP9H`P+jrs96)SBiIaua$+pPqP;yLy0-z{(3U z9KqmdC<kY}@7&S8&Wfv?Wp#w;XJFT@!M$uLoZ+dEwI^A3ax`@=me7l$B7zx-<g&nL zL$1Fw5|b{XBV^f|RN%2Hq+DLjU7r7H?=#J-^@f6Q$?UelA(#mpa_@FufbdKmcn9?2 z(bWk7!<kV23%FUoxSiz5D|(sw{f-3jm&6wseo!zCl|Al0-dq%tKo2S-B7VpdhcY1$ zDXO@iXiqcm3shwwV}?mp<d_zeY~#2oZQFS%m)KpLxO_b?Bx_AuE1jTO(}CcR9s8T# zR0Q?uEh%y3(S133f>ORoBFK_&a>`QK<R{y(8>aWu^)Hzrqz{5)?h3B_`4AOn{fG9k zEwnjQb>8XRq!k?rmCd6E**1cY#b9yczN4mD%GLCeRk}{TmR1*!dTNzY;(f!B0yVuk zSjRyf;9i@2>bdGSZJ=FNrnxOEx<P_v@VLd}2*v3@H0gRFF7^g~xQ`wviudSJBkL}} z$TIDk?E_1HSR_8_=lbtrH@;M@3bDbDw+qG8=FMK+S81CH(B2RxbXv_hKPb#Djgmei zKG)f70NupIMIx5L8_2B;1(S}m_GCLeuLPW*^wg+C;G8@C&mq#%HxRARbo>b075;gB z*7&YR|4ZraFO#45-4h%8z8U}jdt?83Am<v@2OS`QDtbjTZ-pi@{wO*lu%0X$3n{Af zCP`2nO2TaXsU5+W8xzj5=7tf{!I}9FgV+Av-$!}!se|QoPGoyCQrc;gvglAFfj6{& z_I1MpsyK2Ut+#XZAqNyxxpsBanGM@N%EYUXCx^kx>U3)Ln#m3GT!@hYdzqqDrkeHW zU#R`Z8RHq996HR=mC}SRGtsz07;<kj)+_#R|Hg15;`D)R{#Gak!u~G=?7uWlq8`RJ zuFl`yR$`Vmrh>-C-!n*ALpwwBe~loM)YqMH)Um$sH0RbTTzxFd)h1=-w5Yl3k|3nQ zZG>=_<qo7XhoiMqVqE}PD>yZ7Lsn=b8_MZI+LSHLGYSSCc?ht~7cv#39>Moz6AS}5 zus?xge0PGdFd2FpXgIscWOyG}oxATgd$yl0Ugf_&J_vwt`)XWx!p*gE_cWU(tUTnz zQS}!b<iv5OO9xUGE<1x^CO!0QWkoZUr3C?^O%iYz8H_c}FkD;)Ckt+p14hg?c#=ce zB9h|x(d~||i8lvk9#Z;6SbiY#dF95aDXz3TQn05b7lSuo$v0?l`is}B{*O1Kd37)( zFE=|d%I4x?x6{xr(fUmE8Jg=Zhu@`{Ip^I6NR@E4@{R0B4&y~Rs>MxJyi3KWh^W9m zxLcy``V@EfJzYjK@$e7Yk=q!kL8cd<r$_;pKLDj#+YP7vGAm0tuld7FKoW0@!5VY1 zd6{z-<^u+;)o66bmXF&Ob42q5ou^qFZP)pAQh;uiM#@2`>3E-zpc*wwvGJ62O!V;N zFG7Y?sJ+^a%H1;rdDZRu2JmGn6<&ERKes=Pwx)GG-nt73&M78+>SOy!^#=gvLB)2H zjv!J0O`-zft|0Jv$3k5wScY)XB+9leZgR5%3~HtZA=bCg7=Dn+F}>2lf;!*1+vBtf z9jhmqlH=t5XW{0MC7Y~O7jaju&2`p!ZDLGlgnd~%+EJ%A#pIByi-+EOmoLVoK&ow8 zTDjB%0hxhiRv+O3c2*y00rMA=)s|3-ev7emcbT43#izku7dvaDXy1IMV0ahjB9yzi z9C9fN+I2Mzt1*{`a6B?+PdWHiJ5fH}rb2t>q)~3RfCxmyK^y5jN7Pn(9DFh61GO%p zuBErj=m|bDn_L8SINU)Z&@K*AgGz+SUYO_RUeJt=E0M+eh&kqK;%Y1psBNU<4-s9# ziHFr7QP6Ew=-2CdfA#Bf|EsctH;<&=Hsd>)Ma8NvHB$cpVY@}TV!UN}3?9o@CS5kw zx%nXo%y|r5`YOWoZi#hE(3+rNKLZ2g5^(%Z99nSVt$2TeU2zD%$Q(=$Y;%@QyT5Rq zRI#b><}zztscQaTiFbsu2+%O~sd`L+oKYy5nkF4Co6p88i0pmJN9In`zg*Q;&u#uK zj#>lsu<yv~nls#jH4)9e%pl;88z@duZyim_BpvJUk#Kr4^d6T=rSTeBP)I&pe_T^5 zA7!2nE%W0J5;b=ZrevPnesfpP?4X9FO)Q;NA-mR=-RyM`N&f9^=4};3>WWH14-2iG z&4w{6QN8h$(MWPNu84w1m{Qg0I31ra?jdyea*I~Xk(+A5bz{x%7+IL}vFDUI-Rf{! zE^&Dau9QxA2~)M98b42(D6Q}2PUum0%g>B?JS?o~VrP+Go2&c-7hIf7(@o1*7k$zS zy@o5MEe8DoX$Ie(%SZByyf9Xf9n8xkoX}s6RiO1sg*kAV^6EAAz$>*x^OmIy!*?1k zG+UQ|aIWDEl%)#;k{>-(w9U<NGX@>E7oKM#2AvQud}sby=D7$l6{$}SE8O9WgHM_+ zJ?tHeu@Pi93{AuwVF^)N(B~0?#V*6z;zY)wtgqF7Nx7?YQdD^s+f8T0_;mFV9r<+C z4^NloIJIir%}ptE<B8S8eG9!U_0JI2*az<wiPI!cd6<rL`9Tb(N@L;U>pDk!z`l+B z5h(k$0bO$VV(i$E@(ngVG^YAjdieHWwMrz6DvNGM*ydHGU#ZG{HG5YGTT&SIqub@) z=U)hR_)Q@#!jck+V`$X5itp9&PGiENo(yT5>4erS<|Rh#mbCA^aO2rw+~zR&2N6XP z5qAf^((HYO2QQQu2j9fSF)#rRAwpbp+o=X>au|J5^|S@(vqun`du;1_h-jxJU-%v| z_#Q!izX;$3%BBE8Exh3oj<BEC12;MET<;jewc(CPeT6d|RdBHL841K;ohw0#br{CG zKv(=hP+qK5@Ciqb@K!--&LRp}EfyD07WcVg8Ju&W5fIU>XC<yk=X^27gR_38pCFd9 ze?r~7SbHU8-=n&-2+PBtVS=wo`He!T>?$Rr6>dqXlxIGF?_uY^Z#INyS<L4C7%36T z4=xPmAt>nWam=5dV`v_un`=G*{f$51(G`PfGDBJNJfg1NRT2&6E^sG%z8wZyv|Yuj z%#)h~7jGEI^U&-1KvyxIbHt2%zb|fa(H0~Qwk7ED&KqA~VpFtQETD^AmmBo54RUhi z=^Xv>^3L^O8~HO`J_!mg4l1g?lLN<t<?i34zOm<lw4UEf9>L$*oc}}QDeh!w@;zex zHglJ-w>6cqx3_lvZ_R#`^19smw-*WwsavG~LZUP@suUGz;~@Cj9E@nbfdH{iqCg>! zD7hy1?>dr^ynOw|2(VHK-*e%fvU0AoKxsmReM7Uy{qqUVvrYc5Z#FK&Z*XwMNJ$TJ zW1T**U1Vfvq1411ol1R?nE)y%NpR?4lVjqZL`J}EWT0m7r>U{2BYRVVzAQamN#wiT zu*A`FGaD=fz|{ahqurK^jCapFS^2e>!6hSQTh87V=OjzVZ}ShM3vHX+5IY{f^_uFp zIpKBGq)ildb_?#fzJWy)MLn#ov|SvVOA&2|y;{s;Ym4#as?M<kOmP+~uXN>^K}L_g zDkd`3GR+CuH0_$s*Lm6j)6@N;L7Vo@R=W3~a<#VxAmM&W33LiEioyyVpsrtMBbON+ zX^#%iKH<b5)=vZB*=?{KM2*#Qiq`s<X)rxXGTe{aYj%XeQQnfYa9BzWO8#=509miX z<2NV7L$Sc@Gho&}r!3q(Rrv-8TX_2-=CRCbRrHckq<XEw1A&R=Y;?^4?e1B^x2DDJ z0`EFt8)&heRfqyDhk&s$rM2gx&18n(5Hn`GizCd;y{rT)&Q2(G&G9G|+R;Mpn?k7v zIFk!v-tJ0#W7slb%bpnsox`ybmBGbPWpq&{=UW5-Z#f$SkopJBi&o@A<<b=4WwZT# zVJI2HcYx0ONW!h6egVTOMH@iIoMrTYP5!d1dcd`9d)QW>M;ueExK@|t3fX`R+vO(C zucU#Xf>OjSH0Kd%521=Sz%5Y!O(ug(?gRH@K>IUayFU~ntx`Wdm27dB-2s@)J=jf_ zjI-o;hKnjQ|Lg~GKX!*<Rm!e~!PCjl|0(5o-NigC|4v!gzi;CIoVrT>OHB69xvuDU zuG-H48~inKa)^r539a{F)OS`*4GShX>%BR)LU~a-|6+sx&FYsrS1}_b)xSNOzH|Kv zq>+1-cSc0`99EsUz(XWcoRO)|shn>TqKoQBHE)w8i8K`*Xy6(ls%WN_#d}YC^)NJ; zzl8!Zduz^Gg8*f0tCWnLEzw6k5Fv!QWC1x4)3r}+x~@#O8_)0>lP-@3(kF<wkF4bY zXaOuX8P7L#f&RN`1puN_PZtshDE@nh{eQiwowJLfjm^Jwf?4XGKB($=U)|@7<0c@M zlzBK7I8@EjgqlKa$nY>wLl%%Mz(TpA<Q)TM@vCXBZpi|?rOj5__Gd{;Z~fHNLuM%9 zY+FCH&U_=53aq-$2p*M(Uf(9q$vZO0$PVvDz3;Z(HhZqFp0={zu7nXlHG+Ol3Bu6g zEAe!u{>TVnL5Pl2Ga<!|L+Y;$EMPJ*@o<dnv4h(o<LOCs*Bc%f_vDxwuw{z(2#U1p zj1O5q`U~F~-lGTDV{J{4yo`5b*Td;QOTB*}>hw45QXI~>Hrw))CcEs@PP?}4^zkM$ z@(?H6^`Jl?A=(&Ue;W0`*a8&fR7vde@^q^AzX^H#gd~96`Ay^_A%?;?@q@t7l7iGn zWms#2J|To4;o1?3g3L!K_chdtmbEg~>U>$5{WO@Ip~YE&H($(^X6y_OBuNHkd0wu= z4rXGy#-@vZ?>M<_gpE8+W-{#Z<dU#>JeAfgE#yIDSS?M?K(oY@A|FaS3P;OjMNOG% zGWyZWS(}LJCPaGi9=5b%sq$i!6x@o(G}wwfpI5|yJe24d_V}cT1{^(Qe$KEMZ;>I@ zuE6ee%FLgem>CKEN8SeY)fpK#>*lGcH~71)T4p|9jWT;vwM@N!gL}nCW=Oi6+_>K2 zl4sWXeM1U}RETA~hp=o3tCk+?Zwl#*QA>Wwd|FlU<Ro(SS>F0)U;rEGPD1s0Syluo zfW9L(F>q9li8YKwKXZrp*t)N9E;?&Hdbm-AZp2BcDTHO6q=tzVkZsozEIXjIH`tm} zo2-UleNm*Lj7zgvhBph_|1IggkSuW~S(9ueZEfao8Buz<UQC&>qlF(a+pRivTv(Zb zXFaHwcuovdM#d+!rjV7F<^VW&@}=5|xj!OUF)s0zh|8yzC)7!9CZB+TLnycoGBsDF z$u&j={5c(4A$iik;x6_S96Krw8--+9pGY+<f|BB9G4BnRer^o-!B}p9W2aJ!l!0n< zxZ~L>*oSVTIuq;$z8*)W8B~rMX_(U6uM}!Gc`T;WfEKwI84%)-e7j}>NA(O_)3Vn9 zjXxY1Fnx3Fx%CFpUHVu0xjvxgZv}F9@!vC!lD|05#ew3eJ}@!V&urwRKH`1f{0e^o zWvM1S@NbI6pHdzm33pza_q;#?s%J*$4>10uYi4l%5qi|j5qh+D=oqSJR=<M3EtOyH z5{PDNtisNzS=Zu7E$7Ch$ByrM{RF7*Nb;1=D4&&o>7QwkQh>>c$|uJ#Z@lK6PMHs@ zyvnnoOSkGQkYz#g>||xN&1fV)aJb*y--Y`UQV~lt!u8yTUG59ns1l7u>CX2F>9fl; zB)zH3z^XHmSU{F_jlvESvaNL&nj^;j)29~1LcTYw>(6}>bt0hiRooqm0@qTj%A&P9 zKmexPwyXG@Rs1i+8>AJ;=?&7RHC<e>7Mn%nO>@+l?Qj~+lD376O2rp)>tlVHn8MKq zwop1KRLhUjZ|+6ecGIAftSPT*3i94=QzYCi_ay+5J&O(%^IsqZ!$w-^bmd7ds$^!q z;AkC;5mTAU>l0S$6NSyG30<Ri)ka&lZM4(c>Ej?KPq@<D*t!RNlg%*np}PBN!k?B_ z^}VNOns>#T)^x#x?@U~fl2m$Ffk)s6u|iPr!)<vAOc+Uu{I2?vKI#{BuI*7ILkNMU zMfL@q+7&shxd+Z0mSo6u8WFu&9R_9~?$7!ClqkVTsZ6$T8O@H5#jg9H^*hAAcGL!W z&-+J<WJoj+@DxNMP4W-j>-j0BlA7p3E*A|My8S#KH;8i-IQq7Q*F4*ZVPe<{^SWz_ zr?!6cS+@|C#-P~d#=W1n7acn8_pg#W-lcyf+41zwR+BU6`jUkP^`*wgX)FxEaXzoi z8)?FE*97Yqz|b@fR1(r{QD363t260rQ(F||dt9^xABi+{C*_HL9Zt5T;fq|#*b}=K zo5yj_cZB(oydMAL&X(W6yKf>ui?!%(HhiHJ83<QYVPT2xUq*b4>EA|#k0hQ!gpVd( zVSqRR&ado+v4BP9mzamKtSsV<|0U-Fe2HP5{{x&K>NxWLIT+D^7md{%>D1Z-5lwS~ z6Q<1`Hfc+0G{4-84o-6dr@)>5;<dij2J9@wT#-4zYz?vV1aE?1<bYc((zp*&h-ERG zD=LUZKTb6D_{@tpkM&9DHs{xNOW4w<BkidcPe2})tOk#zPzC?_bQtnpE0egEGa3?$ znIkKbsp1tLU&v6%hk5N_NbPolo2>oTt|P6jt9%a43^wGCslQtONH)7QXJEYa!c~39 zWJpTL@bMYhtem1de>svLvOUa*DL7+Ah0(_~2|ng`!Z!qiN}6xL;F}<%M8qWv&52-Y zG*1A&ZKlp~{UFV%Hb_*Re({93f7W*jJZMV-Yn|<+l3SPN+%GuPl=+tSZxxr%?6SEc zntb0~hcK691wwxlQz_jSY+V_h+0o`X!Vm{;qYK$n?6ib1G{q>a%UejzOfk6q<=8oM z6Izkn2%JA2E)aRZbel(M#gI45(Fo<M!+#r6!$n+oh~NknCWeY)DeD*OX(eEEgm=7w z<gJ=E7T|%`<p~qKp@$7KH&6jHXnW>^O=F=W26RA8Qb0X;m(IPD{^Wd|Q;#jgBg}e( z+zY(c!4nxoIWAE4H*_ReTm|0crMv8#RLSDwAv<+|fsaqT)3}g=|0_CJgxKZo7Mh<o zC&#=GvqC{cn)hZoQPnP}^NWP^UcVOviV^CjWR{IG?_|66g<nHlWhQh|J^)_bJ`a(s z6Io;dAgRD>UiYc8Dy7B~kohCQ$O6~l#1*#v4iWZ=7AoNuXkkVVrnARx?ZW^4-%1I8 zEdG1%?@|KmyQ}tploH>5@&8Cp{`)CxVQOss&x|Z7@gGL<!P}NCy6u}nRol<1MH1T3 z+R*8ULzt4G<f8Oe>3=tCVNDG!N9`&;N$gu^MDk|`rRm=lhnXAJ5v1T)WTz)qvz|Dw zR?{}W4VB(O6#9%o9Z^kF<rOGLYYFE?@k}}Cuq1Nxjnn!pJbXsb=(R%v4C~vcx1Gl= zHF2V8vS)&HFI(~CZJ@W0;I!hP)LJ`NYprajE!ixR@T-j&^jSaH+&3S14GBscsXAR# z-ny@`mTt`#gRI7_HT<E@eviaN2bu>ZZV*PDTAWqkQ8TH!rti8QIcR&>zcg3qG}&A( zwH^K8=`1C1lRfhrX{IvNn9R9!$UMC%k(;;VH%`S0h_on|Gh6qDSH&#}*m-u{;p~WB zF$_I~xx!RxVrxNQdr@3T>{F#^D{@N9OYC9LsV62F_Z1KYQ5yk*C5WQ4&<t1_hREU* z9JSLfuhA=(!ERC;X$YcS=QoHzHrmCm&PW|3Lm^iphb5KW7{<e+fpx}kG1-N%8@moA z+I)I6^VVOn4L<oYULaqLD`KY>q}Kz(I{9UWWf?LIcCZicB1EO_FUH*a9QKS(<M;bh zvy4tTa-7=+UERVCqQXIy5q5Q-QYbEp5LFHdgdJ(sKw>4IR%#D5DTi_@M}Q_-4)J4d zz@!vR0}5MPAOK(#uL+$7XOcP$5SS#*EK9Rt6XN%}HB7@`8S^gNRk!HLv(CvCjX4o= z>9scPwWbE!F8T=@x9^;s-OF2!eO(!gL9$-AmzUiDnu&QS4If5ea2T070n1-IyNhck z9$J8b!he3@q5qB-cQ;5ymVIXXn46kK0sqKZV+3s3^mac=3~BrCW})WNrrRs1KtMmg zLzwXYC?@_H#s3W4D$W0rh%WL|G<1$$uYdptPbxy0ke!c%<q?5F1^)^x@^9}Xr62u6 z>v#x9I=2?S)YVkg1X$W^cB!i>B{e9wXlm8AcCT8|verIZQngj>{%W%~W0J%N`Q($h z^u3}p|HyHk?(ls7?R`a&&-q@R<94fI30;ImG3jARzFz<(!K|o9@lqB@Va+on`X2G) zegCM8$vvJ$kUwXlM8df|r^GQXr~2q*Zepf&Mc%kgWGTf;=Wx%7e{&KId-{G}r22lI zmq%L6Y<wQqGri)5hacRtKIiBTgn#i`$Wxbe(#TS1;FwVT#UpIEWb|H%-#0#G^zVp| z4&cLyfB71kV0mmpD(=%ovvo{<uWf3iqKIF3&x;?h&x+0dY{|G{=upLSR>-M*T$xf8 z#kWOBg2TF1cw<KJb7Mr7sdh+y+_Qou=XxH-CwbW1+9#SP`>cd{<$B)AZmD%h-a6>j z%I=|#ir#iEkj3t4UhHy)<NWB(BZCEr-!?g}G^hF2gkYpFMjGYTnIh+EFEA&;=D<0; zB|?hZXM@bQ1=7WTnEPXaNbTaUJbXdRi}IXK=}pN8>cRB$3-K12y!qH^1Z%g*-t;RK z6%Mjb*?GGROZSHSRVY1Ip=U_V%(GNfjnUkhk>q%&h!xjFvh69W8Mzg)7?UM=8VHS* zx|)6Ew!>6-`!L+uS+f0xLQC^brt2b(8Y9|5j=2pxHHlbdSN*J1pz(#O%z*W-5WSf# z6EW5Nh&r<;$<3o1b013?U$#Y!jXY)*QiGFt|M58sO45TBGPiHl4PKqZhJ|VRX=AOO zsFz-=3$~g#t4Ji9c;GFS9L~}~bzgCqnYuJ-60AMDdN7HZt8_$~Of{oXaD3HVn9zkH z`>#xQNe=YpWTq_LcOoy}R`L<_4il7w4)QH4rl?AUk%?fH##I>`1_mnp&=$-%SutYT zs}sSNMWo;(a&D()U$~PG0MvZ#1lmsF&^P4l_oN#_NORD-GSmR{h_NbJ^ZdY#R9#qW zKAC%V*?y~}V1Zh#d|-z1Z8sy5A+}*cOq$xk@Pn&{QffzG-9ReyPeEhqF%~Z3@|r(s z3(wA&)dV~fELW*&*=!~l9M=7wq8xE(<@)BjjN8bUiS8@N9E{wi+Dd!V1AtT;Nl}9> zTz`2ge2Jn#Dlg1kC%oFlOe<>?jYC`Asr^%i4hH;S`*qZTPRan2a9Kjj=0aq{iVi2Z z87PZt$d(LAm_{92kl+2Z%k3KGV;~gsp;C>k?gMYZrVIzaI|0D+fka9G_4v>N96*8T zI(C8bj?A7l%V&U?H_IpSeCvf7@y1e?b>G7cN382GVO0qAMQ93(T*<*9c_;%P1}x2l zi8S$s<=e_8ww%DaBAf4oIQ7}U7_48$eYpo}Fb+F|K|43IAPR1y<ETJgikjtnkss^) zPQ{>9xbqPPg6er{I7xj|=>-c%pGBRLn1~=5KbAb1mJAx=z(loN!w{49VkEthF>*OX z)=gqXyZB5%5lIWYPWh~{!5pSt43-)-@L@x=pmiuKP-3Cwq8qSxGNwaTT4->BWEjxk zUjr)z7WrBZB5u3iV>Y_>*i~*!vRYL)iAh5hMqNzVq1eeq=&d9Ye!26jks{f~6Ru&c zg$D;^4ui#kC`rSxx`fP!zZ^6&qSneQzZRq0F*V4QvKYKB<9FC%t#)Tik%Zq*G*IOW z3*`2!4d)!3oH>GxVcXlorJDt+JnH)p{~olYBPq|>_V@8=l#(f*diW=L+%>rfWCcPQ z#H^ksQt15Z5Uc4ODq8_JwD5^H&OGqyH6E@MabJQO>s`?bqgA6}J_QpytW{2jH#eCN z8k7y*TFZ2lj2B|1CB(@QZedFfPhX|IQbKMI;$YK>9Zla0fsU7}an6(kP;sXpBWLR` zJ#z_kk!`JJC7h(1J!+G)gL2WB2&0*~Q!%s??}GH?=`h<aRcgvyM2njq>U@03xOwU} z6s7?tGySLz!%(MwxQRiF)2(vR2wQX`YB}u&I-S+RR)LQcyH407<uxf-sAfV|0X{M? zMh}@|jPJtCPCKjHK6KDwQp!=pgzPxrr4!P5&jJ^R?0yz-5zW=5>#-{*pWLJJR?X|5 zsAl2k{&0N-?JArn@)9YTo-5+gl}R~XkbZM*5AOjPrcikpE3P?p0oN^?H+5+n)}Qxe z*RQ!-eu0RxPyF8B=}xnseNpQMXFU$d^=(G%kUd&|!BHSm7bXoGR$WA+%yjuA{|S>u z?9N6JDhS+ui~rd?wY_t7`p)|qKIMM>6jz%$jv4hc_YUDjF6-%5muq|SNuoji2)|qK zNY5+oWMe+5vu{I*grk6xlVk;(J)uuy13G`VDbj(~Vz9lA)_;$aj?=-cmd#h~N0mn{ z9EIS_d4C=L3H;Pl^;vcpb&-B+)8vt%#?gn5z>#;G{1L&8u8cXJYADMUsm9>%*%)&F zsi&I{Y=VUsV82+)hdNgDWh^M7^hMs|TA0M269^|RIGfdX1MetV2z`Ycb&_Mn4iRI! zeI6O}O9mOhN6pzfs5IfMz#Gxl`C{(111okA8M4gijgb~5s7QTyh84zUiZZ^sr1^ps z1GO`$eOS@k@XP^OVH|8)n}Wx)fKHoGwL&5;W?qEf5Jdsd!3hf7L`%QNwN0gGBm^2= z@WI+qJMJG1w2AS9d@Dt$sj_P$+S2kh7+M72^SfcdBjQEtWQ5?PT&a~G9hOo6CtS>h zoghqoR;sk{X)`ZK-M|lu{M}0>Mrs^ZW@ngC?c$26_vYKDBK^n7sFiod_xV#XcPL!^ zRPyqD{w^9u{oA<FMSB{MJW<rU7HBI#F6Q0TJOI2|4k_~G{+Bz~PbwogmF(FU^Y_Xr zevIB2=W5tA5crT5-jX}|=M<r1^|^PiUrMWEibva_q8mo?VfEW)$#9iGu6}aKvLDyP z3VTPcpLjjFcZQ=`dm)FZjZjk7yJZp;;kb#Tp?xx0xaa5eiN9@cL?|g=jzpt=*4z;c zGHUT~G6#n%?xnbVlJr#G<hb|+eO2D+Ki8yg87`-A^^E<Te_{2*BdapTDw@}R51z6Q zC)wWZF{kAzbenr2i0}9+yX$#2&H4gdX7j9IS^q%&jp8)#c$xUT!@rx{;_8+1S#ihx zuA6&v90D{SxmOvY;AdV;R;p+}#d#C+8hMp8Uax1GeosU&*XA(_pmC<OJ(d`BU&)Ch zfly;DeFzyG1qwM(X^}C`l2UpgBRcSQ)Xln=gK%!w6{Om*(*kWGP}O02_A>3y73IW0 zH;%xop$r(Q=bq=JaLT%myEKD_2&?L@s6TzsUwE#g^OkiU6{lN)(7I?%a;_%r5_^@d zS-Z)Q-2o|~?F~f`sHlhNhiZk;!CW;3Ma6{xPlBjJx8PXc!Oq{uTo$p*tyH~ka`g<` z;3?wLhLg5pfL)2bYZTd)jP%f+N7|vIi?c491#Kv57sE3fQh(ScM?+ucH2M>9Rqj?H zY^d!KezBk6rQ|p{^RNn2dRt(9)VN_j#O!3TV`AGl-@jbbBAW$!3S$LXS0xNMr}S%f z%K<dKSw<V-eYt0IV|4>9x%MRp(<VPOD6i1Ri~s_E&9*^+YZjQ2(%$q+P`#Z-slW~i z8a4UHl})v9e<;Q;n#;YeJI&ngEe}~|$Fz$$>D2uO90(0||EOzFc6DaLm((mCe9Hy2 z-59y8V)5(K^{B0>YZU<Z5m^N$&@i#mom)17D3;*AeIn6{38rF`pvUBiMXk(zWAj=) z6lY^mr6XF~qECBF=iD$2VIF?KgQ8_{ruq2D1z>yNaQD5$3q41j<VbBNkCw{kH|yz! z0XT_B5!y5oP}|6zVbYX4c2tzZ3_ZAzOt*gE!#r9fZTOl(lRvO}>-eX))x+REv<p=m z>|TIckJ+g#DstadNn_l~%*RBSss_jV3XS&>yNBc8H2j<xODk1ct>o(lwcLz-PuYp< z7>)~}zl$Ts0+<WRhQwKj1g1(XQDbi)sgk0a_3^~Y<#H@rg3>RFxnYj7-UMpmFcw_H zYrsXM>8icD)@Iauiu_(Y#~Iyl)|pj@kHkWvg2N$kGG(W>Y)nfNn%z2xvTLwk1O2GQ zb^5KAW?c%5;VM4RWBy}`JVCBFOGQWoA9|+bgn7^fY3tSk1MSZccs9&Fy6{8F>_K@? zK(z=zgmq1R#jGE^eGV`<`>SP9SEBx!_-Ao|VZq6)-rUpd^<2GgVN&uHiM{0zA9kI( z<1^1%*uE$?4mXV@?W8}fvnBOpfwCo^?(a0E402!pZi&Kd5pp$oV%2Of<Tf454`kg4 zq&PGF7fIos#>x<}YC-1mynB3X|BzWC_ufrmaH1F&V<Ejr1O$&a3maw2UYzU16xDkr zLxd>rU&Gs+5>uixj*OJ*f=gs9VR8k^7HRR$Ns|DYBc*Slz>hGK5B1}U+}#j0{ohGC zE80>WClD5FP+nUS?1qa}ENOPb2`P4ccI<9j;k?hqEe|^#jE4gguHYz-$_BCovNqIb zMUrsU;Fq%n$Ku_wB{Ny>%(B&x9$pr=Anti@#U%DgKX|HzC^=21<5Fn6EKc#~g!Mcj zJrI(gW+aK+3BWVFPWEF*ntHX5;aabHqRgU-Nr2t++%JRPP7-6$XS|M8o&YSgf3a9A zLW*tSJxoe1?#T4EocApa*+1kUIgy7oA%Ig9n@)AdY%)p_FWgF-Kxx{6vta)2X1O5y z#+%KQlxETmcIz@64y`mrSk2Z17~}k1n{=>d#$AVMbp>_60Jc&$ILCg-DTN~k<euEa zy^=?w08QG@;-}W5Om7G0v95t2`u=FxZ9l88Zj0`Q5hke=IPi7}iT_Y~<@*3)VxKv= z7glim{if8O@EEYAyTTmPNJ4nFXi*}z$J(x4;H^>M8)#o$M#Fk~<10{bQ>_@gU2uZE z*eN~mqqQC*wh{CI(!xvRQ^{jyUcvE~8N)S0bMA^SK@v;b7|xUOi63<b3iH7qb#~)& zqwB;opvegm0hO7~9BP8Te9hnJql4$%NwB*SCy6nSTE`!z7Cw03z~f2+_2J#{Rra|} zzjoVzc37qK$qbjwY@v%Qv*CN2J#(GtHl=-QS5Io+V;Ihg-xz9W#>X~3Qc>2UNSD1) z7moi9K3QN_iW5KmKH>1ijU41<MGGlyZ|qDt4BS9NPIay+S?xXUoCLpPEmG4oPQU?$ z!Oq}8i<0dvFU7jOpY1RHRg!{^w~-;5RdsR^dz`@nTZ#!215I8$kmEc{pWk80`9LX~ z67WGxcrrrm4_6R$kC;t*vS89wlNX|Dlt=+J$MbNHf;Qn^wlMky+Na}AkS{)mjW0+a z*U=t>PO>BvA6f1;kL)6io%^r>?YQ#+bB;)Rzad5;{XAJGeAT#FnDV0$w2>v|JeFIB zZ>8vmz?WVs78PuCDiHfb@D0Yi;2#%){*#?bY4dpta6dSjquGLcOw?Z{nxg98mN^4* zj&^!WMUQ_zFp+}B|G0vcNsk8(2u9(LAPk5ogKt%zgQ4^1#UCd;`-W#X8v{YyQ_m9g z8`jydw>>@1J{Q*q#5^cHVA~xR9LR3Hl@^bx)`IBKmj+Gmye36;xwL0>sS|mV+$~%b zC;2wEm&Ht3#6P|2Y0XQ+5t-aI)jn{o%&ZHWvjzEtSojFgXxNKO^e(RmM`gsJ4GrR8 zKhBtBoRjnH`mD$kT;-8ttq|iw?*`7iTF_AX<^Qe3=h8L^tqz$w$#Z@Z$`C579Jeeu ztr0z~HEazU&htfG@`HW!201!N(70hCd{%~@Wv)G*uKnJZ8>hFx`9LnYs;T>8p!`5T zx#aXXU?}B{QTV_Ux(EMzDhl-a^y^f5tRU;xnOQoN)pThr4M>-HU)As8nQ34-0*<O5 z7y2LoBCg+l;IH@!k8}3DeQ@nu+1bhlKPe;pLsS?FAjDq1_58aK%Wm8?YnS7v-NAf( zu?Y4`#0n0uyK-l(;4A~T3d%512wR;o;%L`G$udHI2tG0_)G_a3c_gG_D;u1b9Cnlz zg=n3PLr>sab&z<2ye-D_3m&Q`KJJ|ZEZba<KfKWjJ#Uv&SayEoR*=@0GoeX3&otFg z@r#gE7b%Z9E@kPIJE-%S!v9*9w&P^4p@=z)mevVv#HjPx!uwr6R$*|@Uh5qtHhTuy z%&x%G1x3**+Hl?dYikNZ8%pgnPA}LKMj`(X=YD^;Qt5R#au>DrE%j>yQ(LM#N845j zNYrP)@)md;&r5|;JA?<~l^<<edkok9Jp%h*T7LOh?_bTMNJeAIfq8B!$a~MlPEg@1 ze&NDhvFdtUaq^_(Q$Jn_t_r|}C{|IgALAFL%VO2aPeU$%t5Vz~Y+Nq#c8GGkpr7F{ zId4@R&Xbvl_3=SoB--u%c19V+(m;qv<-~ycVZ7>=F1VRGFM93c=6@MJ`tDO_7E7Ru zW{ShCijJ?yHl63Go)-YlOW2n3W*x%w<nyj}ks1@kXG=U;E`)w^zE-pfq<Qf==!rx* zj9J%C3ndcNRB&0roc>||iw(Cy>@dBJHdQl){bBVg{wmRt{#oXb9kaWqe{bJPmGE$$ z_0=cmD9dVzh<8&oyM8rK9F^bufW$Bj2cFhw&f*oKKyu$H{PI=Aqe^NL6B=dkMEAk& zE3y&F=x;e|!7kMn%(UX>G!OE$Y$@UyME#d;#d+WLmm@W@y!sboiIox^DZPB|EN<>7 z57xm5YWlFUGyF|{<*;b&Cqm+|DC8{rB9R@2EFHGL^NX*l#AcDpw6}bCmhY7!(Gv{s zm^eYNvzyJLQA#GhmL*oSt^Uulb5&ZYBuGJTC<q%Q7F?v}S=Ls3*Fj2xj+HEO%`m+~ zo_L2WsMAM~3_>>Vm9yGaZ=Vd--pMUoDRaV_^3hE9b*Pby#Ubl65U!VBm7sV}coY)m zn1Ag^jPPLT93J{wpK%>8TnkNp;=a@;`sA7{Q}JmmS1bEK5=d@hQEWl;k$9M-PYX~S zayGm;P(Wwk23}JR7XM~kNqba`6!Z+Wt2|<S7C<cQxbCY(A%OKu65Zc^;DIYK`uulw z@O2N@qy2YppXHkeNARD!qB8d8|DQ58D8c%_JhMl>5K>g_j3ajhR>+;HF?88GBN!P; zr6sQ8YYpn%r^gbi8yYK7qx6U5^Tf<|VfcR$jCo`$VMVh_&(9w@O?|o3eRHq*e*#<N zVu{1H7_|nhGpZ;=6$H1lxEHq3Og4k4_C*Ki1|N^EAku+y8)$f#X#~Gz5-D+(J|554 zzXcF&GSc2y@o=C{@$s{qn6w#NZ=5@h#Cm@*?BZjQ1RIUGxv08(Y@?q32tf$xSLAN4 zhAA0EWV6j8Qa{1Hd(vTTE2_|4W~A++@*fk36w`TvbcTm5s~&H1r+=BDpp$T{n6726 zSmxT5Q_qYHDhe}mJ=_gC0tlNDuN?;x5ulFDKrYy{fT|Xdq;S_~*b;k`p;1=}*cZ>P z8-==G)D?vB3Zo~b-dkx8lg0^=gn`9FUy?ZzAfWQd>>@cyqF!sHQ_S&@$r&tTB~Lxq zAjAZTK~?J{A|L3)8K>S{`Qf%131B>?<~t=w!D{;olQ>#31R#{go`a9DOy+H*q5t+; z^*Ka!r@#8tk?~tQbylaG-$n#wP2VzIm3vjrZ<I5Pvq^XJhMWZ*wC3-%8oGk?&C`XH zHo-t5_eMjijF-a4vOn@n&_cgfQ%V{RL)-V6^wnq9eG8tU80;a|;TIKw4lxgmP*BK! zc#U-M`u-Cns3K2zE6N;d_p;{9+(D&55it^pY%lTU7$=6+NfK!@M@}Th<$Z^DWaEg& z9Txc_UY@;Mzl5Zi<pnCtT_Ut%d7;`9Ws~GeV*CS@Q&Th?eF$y!JoS4_=FOjjzo+3P z3Wsgfj_#C&ND7<ecJKO|$?WSH|L)Fxf^3i)4GaWy^&PJq|2b9_3|%Y)ot;f>jcmTL zl`{6mhBhMKbSWoGqi;g3z1@G0q!ib`(Zz_o8HG_*vr8U5G|vhZn26h`f~bO&)RY0; zw(CWk*a_{ji_=O9U<B_#{8E{l=ylYg^vup?hZC8rzTQ7Q!E2*mXq7Ohd;0>}66lI` zCm32)SEcAo5)5k>{<8DLI@Zz)*R29BB!^<R;^SnRu?}InWV<Y0BKuaODgubq<KsAN z^pk?P4h~|O{HUt0uOn&79NAAuU001TnVNXDN=(|a{%{yw!{<wsZpOA~1!%EJ)s=&@ z4prnq+M(IA1wlu9DsAVzqQNOk^9Rqs`N@*%D<5Y17{0t!X`U9S&xH0$Zm6Nn0{czJ zvrgW{_Em=Pwc^h?=uR+Je(B>wF;WZRF9sAi39BGObmZzg?$lUn6w1rYPHSB^L4^AN zLObEaUh7TXpt6)hWck#6AZV(2`lze<`urGFre|>LUF+j5;9z%=K@&BPXCM)P$>;Xc z!tRA4j0grcS%E!urO^lsH-Ey*XY4m&9lK(;gJOyKk*#l!y7$BaBC)xHc|3i~e^bpR zz5E-=BX_5n8|<6hLj(W67{mWk@Bfc){NG<x?c^uUA{wtTfMk3Rd`Pmk4rK_cj&>AX z5-O3SP^38wjh6dCEDLB#0((3`g4rl}@I(&E8V2yDB=wYhSxlxB4&!sRy>NTh#cVvv z=HyRrf9dVK&3lyXel+#=R6^hf`<H_cdJj`g3rRdKWRXEd2R^|yC<Gb76bYODjHfKr zgC~-$@;baP87p8&o;wn;`u3I;e@R3Kp#Wzac2E1+4RhNtgrgg$|Ed3(FB@_X*{^pg zf!OZ)u8iUJh6Q0d)I)91nTUsA7|0K^KW60x9A9r=fZyzlf>;lF$COPUYG)Bq4`#>p z@u%=$28dn8+?|u94l6)-ay7Z!8l*6?m}*!<l1+99wf5`$Jng0|>>#KuZ1rF??R@Zd z<K4#Wwer`W1=E-EOzKfBM%M3b+uhP%kBqv^0L=#UgZL`QV-9|9XFDUC?(T{Li$6i} z^#;_#g?eTP?2+Xq_$t!SLC58oucl=7Q56tT?T)$v*NNq2OP0VtjMuwbri0PJpGWRN zL@zRxSWVaHj!=#Drjk&L$J^+}g2$ZgXYH%X6Zd-)?NF8J8WvcEt5r}*T=kmOreh&Z zZ&^as%@ymKrJHcAo39L?B!wzVMb~3j-Cd5Ik)nMLX*H(amncEfgDs&c2@?}!O|{IT zgu$WD(rtskkC;oDeGHbnN*F8AUYYZTA8%y0HcF`Zwu$7X&PlX$GfmNKf|l)VU6rZD zIx549`9@kGueub<qwB#|y7Hzi-Q-^am+eDA>rRXSfn3}tyD+Z0WOeFnKEZi^!az>x zDgDtgv>Hk-xS~pZRq`cTQD(f=kMx3Mfm2AVxtR(u^#Ndd6xli@n1(c6QUgznNTseV z_AV-qpfQ0#ZIFIccG-|a+&{gSAgtYJ{5g!ane(<JHP^&wug&$?J9x-qH_d@HyL?a- zjya(@QWAT3P#8C%fgy|lLu7>6mLAs5z?>ajC?=-`a5p8%b*r*mOk}?)zMfus$+W~k z{Tmz9p5$wsX1@q`aNMukq-jREu;;A6?LA(kpRut+jX?Tt?}4HGQr}7>+8z4miohO2 zU4fQ?Y8ggl%cj&>+M+)TTjn8(?^%`~!oAt#ri8gIbzIig$y#d7o##077fM9sCu%N9 z<!t3vXzStauFU;){JD*ztzqSX*mjc76eYUGt;a`2vRQWK_DR=7Y^55V#geRJ2M$b9 zWEiTGrB%AK_tw!|U-_GGhs>OIsq4vyox6`itu*j{eOD<$gTZd-$JuyM^cM>{?v<8# zS1yN%R0zRy&>+D*Gv-&S80?JF+Y|c^^IJWDnfy06MI2{NFO-x4JXsb@3Qp;EnL!a{ zJw<d_)n5O@ZD(Nw%d^bg&m6z~$MDEI=?RoP<BpOZYhf5ibqDWsezrkffQ34Az32`| zU4*3^m&Wx>KwV@<J$tgH7tf8^WLF(ikJa&VD-4%b^DNn~KNyKkX=w1Pf!qh%R%>mO zYVGvNmeJ!;+ce+@j@oo-+`DaPJX|h@7@4BD`QEdP?NKkYzdIa3KrZt%VUSsR+{b+| zk?dSd#9NnVl?&Y$<SjaL%%u1C3e3$rA&9bD!;(F2$$hT4Gvv9~-&yc;ZwR%JM1KhW zj8e<LWaIh8{L7dz@~;N$f{+`wG5$meBqD<YNp@+!zAzz<{1RejGy;VcqWmj6qSmf@ z6>A{-OtZ>wk%mWVF5)bf`)AA2{EFapIS4jil69Xan>*J^6Juou&`oJx|7-&|@8z?$ z2V#jm!UHstCE*qM{OGtqYY8q+x%SL6&aGY!a>@d=_G~^0;+7dY9P`oJ*)67*9Kx*O zKitC5V3g5;&L-fa37?eN=;V_c^L-ph_uKv5)Q`&!Z!RPlDWA2{J%a2q@_*?-cn@bH zIt)+mA@HaJj2RV+-MNc#y#Vji*N~m!ZyrYyg-7UK4PYK4F7Y$3Y%@Lk6iPp=I96N> z!;ih(KtZMB23*v{`5cJ}^4D*P!k1&OfU&1%borv_q<nwHBA~F{b!3o2<|8n3$UobX z&Mq@bdm|+9hImqB#BseL(Q=$)jKT~32@9O>|7jfaV7fL+wwx8Zp*b}B_O>NRSeJeM zpvw3M`=vSYjFYQ11kx1xqOnJ@degPh&SyXnWz-l719EiW17Yo?c~Bh~;R$MOl+jzV zM1yTq-1**x-=AVR;p0<U6_$18NpUzA7c?<P1j|iP4rwgUQLD=pqRRs{21yLayY3t{ zL4*Lq`G!+Ri|8E#2`MENUYDDPYg!o-{ZfTkC@|ih2=xmHa2EE*!S_)6NcnDzib=?H ze?i6S&bjq00WXjqd4&Y*lM-*%*u@|PxBpEilWRx$&oV+NhfCx9TYz#VboXu|#Rmk{ z<etR`!T*#_2mYKq>;IPi`#=E!G5qIT>EFE`Bn<7o*8!aVd7?(CZT=U9^Gi3rmWUQG z0|GaP9s$^4t_oLCs!fInyCoB(d?=tZ%%Bb2Y+X&<RsZliPuP?3y`JpD8cBPNhi5V# zQU5AjtNXkpha)X)Lg4)7Z~7f=IR8A_%J_KO=Kln{ChmsGMNtGt0bU@)?#0|vV8Hq% zk8KQ0>7gvQ6~C4kU<u9)Z3b!~un@z^*$o)#M7;r0p_O>%e$W_H;-%XSM;&*HYYnLI z>%{5x_RtSUC~PI4C0H^>O%FixKYVubA>#72wexd}Cgwuw5ZYTvcN2ywVP(dO=5975 zCjo)mOa2Bo&ucEsaq8wi1{h*brT(H=XrTOy*P>?0%VV1QDr09X+Je!T)JT`02?gjX zT@B8}h|;4lH35Guq2<PsTU)czLa<-cA}?6qc~)DRWk0luKpB~7NJy7#nM95zbuF2r zabQxRT>gKZT?ags-~Ts~S=poPnQ_T1*?U|{$jaur_PjQ6WmF_(XLFG)d#|iiBC=&B zp}1eOQvQ!3UpL?K`=8hAzMkv#a^COr`J8i}d!BPX&*xp-LL#qse~mOtxI-}{yPRNV zJNTL1{7A55F~K>0e&Os%MwQ~?n1>QV=j!8o_`^-&*E|Q-L9DNr%<W|^COL;&Xb-Ff z%JiqH<Z#C)2mkZ>#6sw8kQVE3E|*}$aAoO$@27ei1w=+zU%?AA!;mf#!%IV*w_<pQ z$Eq?|2B@ayu0^O7=lXZK!fUD?2ne!4`Tf>D=u516!K<Q6Nxa~Qa5k8aT5zrhdN$Uh zje+?7686GO#ye3>z1F0-WnyVB`I6F1Pc3r1=0iT<_(pCyk>@22z1$w$@M>7AIuk6+ zRG&MFVQ_7<VyXLOl)YOP$S%5}yFS>>5DLoR5HeOa$?2SA(v2u!#8;5I(ss%=x9U#R zU62n~&)22RTTsp${}6C&$+l&0skFVX%ACgc$(iQ#DVRRz!`Y+b>E?;ib(TH#6Wa=} zs(q_;SA|fhyEo7Ix%rAY9j=Ul^Rzd`3ABf+yO@~h@Rh=wo`?;8PdHE1AUo34r7izy znAr`;VavQueSu7bD5r^nXTERcW(P-{2SOSfF1x0cW1Nczvj0}@!!upORN1%_-b2bh zGt#zokJz&SveJRzlUK4DruxR(YuHEAmB%F}buU`*pAzJ7Mbgs4sg;H@&6x*wxvGm6 z>KH@ilsvvdl@CGfm4T+$agodrB=md8ygG!|O=r@FY>S_zX%*)mqf?XBX*chhQ9uPP z-(T(24)})vWD*{bQM5_hy3CD8C>anuNtCXMkG7T?Yew^>=PK!~Hlr0{-0h0cNAJ8> zRMzLFz7aJv)Yh)_s)^L&L*nDV@qfeg>_<`z1z(<yR_^ikJD0>?s}}3tE4h|7_taB> zPfmmOCFZ8%>`gyf1@|7t3;e~mwBRCDDw(Rrt>@O}obs#1?!W((+9>d$b7t!{&wR!P ziQbn0@j=&sw={`s##Uc@uS^(tbShjtsk=qrU1LW0lu}BplIfzv{fwxNsSaG~b|ryo zTQ}YXfp6o?^sSHW>s~m;l@h6wFbIPw{Z(IqO1u){{hEZgrTdF0o$n;hYIm`h5ejym zWt^w~#8p1J)FtfY6LvGmNQ~#n>4#mN4B<DoRTeKK5Vme!y05MDUGWJB%P4RJYt#GL z4xuWZJRNVjb~EL5Eb*Y{cvwYZ{yPr?zJ!N7)^J49sfZe94UWecnFc#)*KVWS4=LcW zy5vAsP&MEsi~opW)CNQk93jp!4)zvSP*-P@g9pZYQ3e`-?m_S?X{!<9dH2txM5H6B zvQld3p*`dUT8?^6R1R@b?ZmbutV)pfiP@m;A*XhHKYxiXq%CpkxIMH^7+U(iZdrV| zZ|&8DQ6suB)`m1;FdK&Gsiso;u$Ex71oWZw=kEo~t%k@av0jP@EWM5(q34l=`|I>^ zjrQk)Zt%k}GBRD>l`<~og6N_{6HYKDtsAtd<F<|^2d59d!y8z;Ji2-1$txUYkxC9| zSJ#MF<{M^upI&Z#wi;(|1!ODu={D@K;Png$3B4S~caZAf5*NG~HW%m51MOEM<+iG+ znXuNnzN(fZL`^@VX+_PMC7)8Sn&O+KdxDSUY5sFpjT}ME&#yJPxivLzF3%;V`SmY= zG}8RHPEXZXzppK1de~h|L0mDEWm!`jQqoSvx#>%y?KbXCQR(sW8O(v_)kwYMz|(OW zsFz6A1^abSklOl`wLC-KYI8x=oMD^qZBs}}JVW@YY|3&k&IZ_n2Ia@5WiK>buV!E- zOsYcS4dFPE7vzj%_?5i2!XY`TiPd*jy>#C`i^XG8h?f35`=)s`0EhQBN!+YrXbpt( z-bwg_Jen`w<+6&B`hldU%rr&Xdgtze>rKuJ61AI12ja-eDZZX-+u1H>Sa|7pCine9 z&MEhmT7nq`P!pPK>l?I8cjuPpN<7(hqH~beChC*YMR+p;;@6#0j2k$=onUM`IXW3> z`dtX8`|@P|Ep-_0>)@&7@aLeg$jOd4G`eIW=^dQQ*^cgKeWAsSHOY?WEO<!}$*bLw zynQ1PYnZJLgTXhUE?F|7Fi^4rlXha;C-e~zs9dV98CSU0<#D__wYq)mdr9rJ-1+8B zV>srtnG|^yeQ3lSd`pKAR}kzgIiEk@OvQb>DS*pGidh`E=BHYepHXbV)SV6pE2dx6 zkND~nK}2qjDVX3Z`H;2~lUvar>zT7u%x8LZa&rp7YH@n@GqQ65Cv+pkxI1OU6(g`b z?>)NcE7>j@p>V0mFk-5Rpi`W}oQ!tUU&Yn8m0OWYFj|~`?aVFOx;e`M)Q!YSokY)3 zV6l-;hK6?j=mp2#1e5cCn7P6n_7)n^+MdRw@5pvkOA>|&B8`QZ32|ynqaf}Kcdro= zzQchCYM0^)7$;m2iZnMbE$!}hwk&AVvN`iX3A9mB&`*BDmLV-m`OMvd`sJ?;%U`p~ zmwow{y6sPbcZNQPZ#GQS0&mzy?s%>_p>ZM|sCXVAUlST;rQ-3#Iu!-bpFSV4g7?-l zGfX>Z#hR+<nj?i_UMe{@*^6d$sv?aG6xh~xR>i;9B};^CO@7<<#MGFeY)SC&;a{!` zf;ya<vJ(|=N~sK4IZZq9Y!=(o?NXpSa*NRKElrEJhiFSmh>Qo%{bjSa8KT~@?O$cK z(DGnm7w>cG1hH#*J%X}%Y%~+nLT*{aP08@l&Nu}>!-j|!8lSqt_xUNF+Y}SQmupyb zPua2PI;@1YaIsRF*knA^rJv84Tc=7?J2}!1kMfHSO$d$+PK*u?OI%=P7;`PHxMB0k zau~T0Wk)rPEGJ$NiXW~kfPA#m%Sr|7=$tHelF9A6rFLa$^g{6)8GSW*6}#~Zb^qk% zg=pLwC!SkY+&Gne((9`TCy`i`a#eCS{A2yMi>J>p*NS*!V~aAgK;wnSOHPULqzyj- z-q4BPXqXn))iRnMF*WZj17wUYjC!h43tI7uScHLf1|WJfA7^5O9`%lH>ga`cmpiz( zs|I8nTUD4?d{CQ-vwD!2uwGU_Ts&{1_mvqY`@A{j^b?n&WbPhb418NY1*Otz19`1w zc9rn?0e_*En&8?OWii89x+jaqRVzlL!QUCg^qU&+WERycV&1+fcsJ%ExEPjiQWRTU zCJpu*1dXyvrJJcH`+OKn7;q`X#@Gmy3U?5ZAV~mXjQhBJOCMw>o@2kznF>*?qOW;D z6!GTcM)P-OY-R`Yd>FeX%UyL%dY%~#^Yl!c42;**WqdGtGwTfB<T4y8-7Y7C1g;S& zdA8E(fRDCC(MT(*lm|#%=bb8h?>9{2mf2h@#M8YyY+!Q(4}X<ms&V1kPumd>^+V#r zc<eH)Mi416ivvU4FH2m(t?a3~Gv;;~_X*Tn9O+rg#FHd(SLJ<HUR@(^$W`;Ft|*ve z9u^H5dw=ql^-RgU?Yo%IAM$F*YKs)iqTYzV@20TQr0c_rFI6oV#%8bPQnI?zXwwaT zaoR|j0o<4=X<!_c>ZXYE$-<LQTtP`e*Fn#%^1&+-n`czY%7`kB$EzG&5UkLM;#ofm z^7#1zbKG9Mo6zbpgTnLc(qtk?PvVc-UsS$g_}Qx?<$Ug(z4>hJyYzq%>$)k8vSQU` zIpxU*yy~naYp=IocRp5no^PeFR<EhY`8Z2ir=Dr7UDJok$i&Jhvm2J2nK>Oluibl( zmaKkWgSWZHn(`V_&?hM{%xl3TBWCcr59WlX6Q{j45)`A^-kUv4!qM=OdcwpsGB)l} z&-_U+8S8bQ!RDc&Y3~<VZ>?w5NwLNstoUYqPYs(y+lj!HFqIZ7FA>WsxAE7vB=20K zn_&y{2)Uaw4b^NCFNhJXd&XrhA4E~zD7Ue7X^f98=&5!wn_r=6qAwDkd>g#2+*ahd zaV|_P_8e%jiHh7W;cl(d=&-r-C}_Ov?bts8s^rKUWQ|XkuW!ToSwe}Z{4|kl+q&&W zn%iW48c5*ft#*m)+xSps+j(B5bPh&u0&m6=@WgwBf_QfJJzg2Qdz89HwcV`5kZ#5z zw;W&H8>5R(>KRwvd0gh30wJHA>|2N(im;~wy1HT<?<}k84!A%5s-^Jx1{0qsPfY&_ z>v_}Ue%qb)>5qL^$hIyPvo<CxmCVg?7Uc$8el~cfe~*mfY&LtePrtUN+1vZo!~rB; zLPe#usR5Nbmt?zAA`v|~H1gd<*|YWdA=Cb~q|jc;sN@o5V#DkxyUtfxC(@NR<d;62 z^WhZ>T(nk_<`7F;#nS8;q!cqKspvBc<%xMsQj*h|>`Z)F6<ZP3BP7QnsM&!3xqD8J zbx_uKg5?E~3RK0dwZ&y(WHwF!IXZ2?;{4Hvj;+*oWwHKdrRay~${<&}28Tzw!CmPq z-W`{cA{(j))keS;cD{*0f%D~Y*@b2)8F&w?;=a?qOp^%4(<`P*DjSi`<AC*ip-Nu& z(Q{bOr|7->LDxue@to))OIbs2X+zY2L9#2UNrR^)?c8&PFc?j*&Q-r<bxQhfDLp&s zQ!o8vs1#-RAD_J&l$T8uC*^2)R<JMPK3<jGnk!|jsfh3O_k_tTsW!ZtC#XZXEbk1F zN^hDq6Ih3|C{Oafpvn!;yds$-KMv$W<cz%rGVkxhX~kuNYvr$WDpy%75!R`5o`P+P zNM};h;PiCo3<)gYdT^r~IZ~f`(&`jwhMchsixdi3F&1^gST*gq&37-0T_DuTL;Q?} z&V_q1>|C%7a$)ZRQ->#|?rEj&M4spQf<lvCvUJa}1Uz{;T-!fftFi=g-AM0#TVfRf zoep_YtWaf9J@e>Nt;J^ntwf(d+q;tt)C`d{*|t)czD4x-qw{Chm0vuKp8axqy5`Yz z1756|;JX1q(lEieR=uT;%havqflgv+`5i!Z`R}(JNV~&`x}I9Lmm;aB7Bnc^UC?>W zu)(J7@fs}p<G`*j4&qS&M}~4%<AwmMWh@=v+PjDwfx2>L=Y-4aLq&Z*lO$e^0(bOW z3gWbcvb^gjEfhV=6Lgu2aX{(zjq|NH*fSgm&kBj?6dFqD2MWk5@eHt@_&^ZTX<m9I z5A9<((Wb|>$b?o}S<9BGaCZIm6Hz)<W@oh>Qkruacn!qv*>La|#%j*XFp(*;&v3h4 zcjPbZWzv|cOypb@XDnd}g%(@f7A>w2Nseo|{KdeVQu)mN=W=Q`N?ID%J_SXUr0Rl# z3X;tO*^?41^%c!H;ia@hX``kWS3TR|CJ4_9j-?l6RjC=n?}r&sr>m%58&~?$JJV6{ zDq5h#m4S_BP<vqWb_XWIASSWO?AYqZPoL>iibQQaPGg6LIHVCc`9w3^3ZVWP$n>p7 z5dIEH-W9e;$Id8>9?wh%WnWf>4^1U<%vn=<4oNFhVl9zVk+jn;WtQUQ)ZeEjKYy8C z3g#tIb28thR1nZdK<AiMKF4*HJoqlLj7Rc(VHm77v@9qhmj)3?_uBp{A(RQZ^jRQ} zIL^H)?jrHU)xoyu0=8oK*-l(rQFU~mJnX7M9DVH*g-nwaRZU+FCb2EaNad6>rN}(r zJdy-Y3Rvr5D3D|msZbmE;FLePbiM0ZjwTIQQHk)8G+sB$iwmEa2kQv&9Vs9m#$_8j zNKz}(x$Wc(M)a9H-Pn?5(Lk-CmOS(&+EVLOfsiq>e3ru6P?Lp>FOwPt>0o=j8UyF^ zO{(vf#MGx^y~WaOKnt%I78s}60(O#jFx0^47^Ikh$QTar(Dg$c=0K<tSSjumLbQ)k zyI)o1G^IdFSL6XXhr`wEo`{P{0{<WZe1P|Neia0q9r*sMnyS<lC3!gwO>R|rRD|6s zz?tEX0_=(Hm0jWl;QOu!-k)mV?^i(Et<ktw1NtL*#vdz^9ICi*xZ<zVEEH>l=Lg-{ z0G}CBprLX60zgAUz-fS^&m#o;erEC5TU+mn_Wj(zL$zqMo!e<w@{b?*>`D>s7X&;E zFz}}}puI+c%xq0uTpWS3RBlIS2jH0)W(9FU1>6PLcj|6O>=y)l`*%P`6K4}U2p}a0 zvInj%$AmqzkNLy%azH|_f7x$lYxSG=-;7BViUN(&0HPUobDixM1RVBzWhv8LokKI2 zjDwvWu=S~8We)+K{oMd-_cuXNO&+{eUaA8Ope3MxME0?PD+0a)99N>WZ66*;s<!9B z;}iK7bbBfQ-3<n8Ic!HUFsM+7{sk-L40W{wv`l~mXAsAO{R>n(N++hjPyz5z0RC{- z$pcSs{|)~a_h?w)y}<z95ryuZ-R^q`0nZ};6YRgW)lr+e{qb&5CIIvf`0PGb?iU1n ziTY2NKLp%=30I<`&Tm;Yf`Q$jM&LGdxFZK?j)5v=0Spm&D`yv&hO6nG`;VS=Rj$S< z>42A6fg|nRnYUjMaBqg=68&_K%h3eboQ=%i083nfIVZZ04qOp%d*)*hNJA_foPjiW z$1r8ZZiRSvJT3zhK>iR@8_+TTJ!tlNLdL`e0=yjzv3Ie80h#wSfS3$>DB!!@JHxNd z0Mvd0Vqq!zfDy$?goY+|h!e(n3{J2;Ag=b)eLq{F0W*O?j&@|882U5<FmDZ@JM74G zzGG0STDiCY2K^)hrr{r$LJToXasj4Rfa$PNse;E~+M{qcafbZWD1wqm!&-nU7ofU$ z$bXqY0L@?f>?hUVIw_v3aV8tMn`8jPa5pSxzaZe{z}z|}$zM$o=3-mQ0Zgd?ZtaI> zQVHP1W3v1lbw>|?z@2MO(Ex!5KybKQ@+JRAg1>nzpP-!@3!th3rV=o?eiZ~fQRWy_ zfA!U9^bUL+z_$VJI=ic;{epla<&J@W-QMPZm^kTQ8a^2TX^TDpza*^tOu!WZ=T!PT z+0lJ*HuRnNGobNk0PbPT?i;^h{&0u+-fejISNv#9&j~Ep2;dYspntgzwR6<$@0dTQ z!qLe3Ztc=Ozy!btCcx!G$U7FlBRe}-L(E|RpH%_gt4m_LJllX3!iRYJEPvxcJ>C76 zfBy0_zKaYn{3yG6@;}S&+BeJk5X}$Kchp<<?tkys-c^_XS$1m=98vq1WIQSis@D8I z5CVS2=J!VYf;pr-kBW(^etm%1YkvrHe{KFJEo@Y9R8i#v@Il98gC9M<P*p?^przc7 zgx=4Iwx25uwXLX{od<x-?tcb6mVzfL9jYSV0bRNGpXq>Ea-=>VDg&zi*8xM0-ya!{ zcDN@>%H#vMwugU&1KN9pqA6-?Q8N@Dz?VlJ3IDfz#i#_RxgQS*>K+|Q@bek+s7#Qk z(5NZ-4xs&$j)X=@(1(hLn)vPj&pP>Nyu)emQ1MW6)g0hqXa5oJ_slh@(5MMS4xnG= z{0aK#F@_p=e}FdAa3tEl!|+j?h8h`t0CvCmNU%dOwEq<+jmm-=n|r|G^7QX4N4o(v zPU!%%w(Cet)Zev3QA?;TMm_aEK!5(~Nc6pJlp|sQP@z%JI}f0_`u+rc`1Df^j0G&s ScNgau(U?ep-K_E5zy1%ZQTdPn literal 0 HcmV?d00001 diff --git a/packages/reactnative/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/examples/sdk-react-native/android/gradle/wrapper/gradle-wrapper.properties similarity index 83% rename from packages/reactnative/example/android/gradle/wrapper/gradle-wrapper.properties rename to packages/examples/sdk-react-native/android/gradle/wrapper/gradle-wrapper.properties index 8fad3f5a9..6ec1567a0 100644 --- a/packages/reactnative/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/examples/sdk-react-native/android/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.1-all.zip +networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/reactnative/example/android/gradlew b/packages/examples/sdk-react-native/android/gradlew similarity index 93% rename from packages/reactnative/example/android/gradlew rename to packages/examples/sdk-react-native/android/gradlew index 1b6c78733..65dcd68d6 100755 --- a/packages/reactnative/example/android/gradlew +++ b/packages/examples/sdk-react-native/android/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,10 +80,10 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" +# This is normally unused +# shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' @@ -143,12 +143,16 @@ fi if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -205,6 +209,12 @@ set -- \ org.gradle.wrapper.GradleWrapperMain \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/packages/reactnative/example/android/gradlew.bat b/packages/examples/sdk-react-native/android/gradlew.bat similarity index 86% rename from packages/reactnative/example/android/gradlew.bat rename to packages/examples/sdk-react-native/android/gradlew.bat index 107acd32c..6689b85be 100644 --- a/packages/reactnative/example/android/gradlew.bat +++ b/packages/examples/sdk-react-native/android/gradlew.bat @@ -1,89 +1,92 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/packages/reactnative/example/android/settings.gradle b/packages/examples/sdk-react-native/android/settings.gradle similarity index 61% rename from packages/reactnative/example/android/settings.gradle rename to packages/examples/sdk-react-native/android/settings.gradle index 0dc839ff8..73697cabb 100644 --- a/packages/reactnative/example/android/settings.gradle +++ b/packages/examples/sdk-react-native/android/settings.gradle @@ -1,4 +1,4 @@ -rootProject.name = 'ReactNativeSdkExample' +rootProject.name = 'rnsdktest' apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) include ':app' -includeBuild('../node_modules/react-native-gradle-plugin') +includeBuild('../node_modules/@react-native/gradle-plugin') diff --git a/packages/examples/sdk-react-native/app.json b/packages/examples/sdk-react-native/app.json new file mode 100644 index 000000000..210d7dbfe --- /dev/null +++ b/packages/examples/sdk-react-native/app.json @@ -0,0 +1,4 @@ +{ + "name": "rnsdktest", + "displayName": "rnsdktest" +} diff --git a/packages/examples/sdk-react-native/babel.config.js b/packages/examples/sdk-react-native/babel.config.js new file mode 100644 index 000000000..f842b77fc --- /dev/null +++ b/packages/examples/sdk-react-native/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: ['module:metro-react-native-babel-preset'], +}; diff --git a/packages/examples/sdk-react-native/index.js b/packages/examples/sdk-react-native/index.js new file mode 100644 index 000000000..ef707c254 --- /dev/null +++ b/packages/examples/sdk-react-native/index.js @@ -0,0 +1,5 @@ +import {AppRegistry} from 'react-native'; +import App from './src/App'; +import {name as appName} from './app.json'; + +AppRegistry.registerComponent(appName, () => App); diff --git a/packages/reactnative/example/ios/Podfile b/packages/examples/sdk-react-native/ios/Podfile similarity index 76% rename from packages/reactnative/example/ios/Podfile rename to packages/examples/sdk-react-native/ios/Podfile index ef5d238fe..f4589eb87 100644 --- a/packages/reactnative/example/ios/Podfile +++ b/packages/examples/sdk-react-native/ios/Podfile @@ -1,5 +1,9 @@ -require_relative '../node_modules/react-native/scripts/react_native_pods' -require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' +# Resolve react_native_pods.rb with node to allow for hoisting +require Pod::Executable.execute_command('node', ['-p', + 'require.resolve( + "react-native/scripts/react_native_pods.rb", + {paths: [process.argv[1]]}, + )', __dir__]).strip platform :ios, min_ios_version_supported prepare_react_native_project! @@ -21,7 +25,7 @@ if linkage != nil use_frameworks! :linkage => linkage.to_sym end -target 'ReactNativeSdkExample' do +target 'rnsdktest' do config = use_native_modules! # Flags change depending on the env values. @@ -30,8 +34,6 @@ target 'ReactNativeSdkExample' do use_react_native!( :path => config[:reactNativePath], # Hermes is now enabled by default. Disable by setting this flag to false. - # Upcoming versions of React Native may rely on get_default_flags(), but - # we make it explicit here to aid in the React Native upgrade process. :hermes_enabled => flags[:hermes_enabled], :fabric_enabled => flags[:fabric_enabled], # Enables Flipper. @@ -43,16 +45,16 @@ target 'ReactNativeSdkExample' do :app_path => "#{Pod::Config.instance.installation_root}/.." ) - target 'ReactNativeSdkExampleTests' do + target 'rnsdktestTests' do inherit! :complete # Pods for testing end post_install do |installer| + # https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202 react_native_post_install( installer, - # Set `mac_catalyst_enabled` to `true` in order to apply patches - # necessary for Mac Catalyst builds + config[:reactNativePath], :mac_catalyst_enabled => false ) __apply_Xcode_12_5_M1_post_install_workaround(installer) diff --git a/packages/reactnative/example/ios/ReactNativeSdkExample.xcodeproj/project.pbxproj b/packages/examples/sdk-react-native/ios/rnsdktest.xcodeproj/project.pbxproj similarity index 69% rename from packages/reactnative/example/ios/ReactNativeSdkExample.xcodeproj/project.pbxproj rename to packages/examples/sdk-react-native/ios/rnsdktest.xcodeproj/project.pbxproj index c3c77ab21..088c94e9f 100644 --- a/packages/reactnative/example/ios/ReactNativeSdkExample.xcodeproj/project.pbxproj +++ b/packages/examples/sdk-react-native/ios/rnsdktest.xcodeproj/project.pbxproj @@ -7,12 +7,12 @@ objects = { /* Begin PBXBuildFile section */ - 00E356F31AD99517003FC87E /* ReactNativeSdkExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* ReactNativeSdkExampleTests.m */; }; - 0C80B921A6F3F58F76C31292 /* libPods-ReactNativeSdkExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-ReactNativeSdkExample.a */; }; + 00E356F31AD99517003FC87E /* rnsdktestTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* rnsdktestTests.m */; }; + 0C80B921A6F3F58F76C31292 /* libPods-rnsdktest.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-rnsdktest.a */; }; 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; - 7699B88040F8A987B510C191 /* libPods-ReactNativeSdkExample-ReactNativeSdkExampleTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F6CBCC0A4E27FBF8BF4A61 /* libPods-ReactNativeSdkExample-ReactNativeSdkExampleTests.a */; }; + 7699B88040F8A987B510C191 /* libPods-rnsdktest-rnsdktestTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F6CBCC0A4E27FBF8BF4A61 /* libPods-rnsdktest-rnsdktestTests.a */; }; 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; /* End PBXBuildFile section */ @@ -22,27 +22,27 @@ containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; proxyType = 1; remoteGlobalIDString = 13B07F861A680F5B00A75B9A; - remoteInfo = ReactNativeSdkExample; + remoteInfo = rnsdktest; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 00E356EE1AD99517003FC87E /* ReactNativeSdkExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ReactNativeSdkExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 00E356EE1AD99517003FC87E /* rnsdktestTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = rnsdktestTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; - 00E356F21AD99517003FC87E /* ReactNativeSdkExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ReactNativeSdkExampleTests.m; sourceTree = "<group>"; }; - 13B07F961A680F5B00A75B9A /* ReactNativeSdkExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ReactNativeSdkExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = ReactNativeSdkExample/AppDelegate.h; sourceTree = "<group>"; }; - 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = ReactNativeSdkExample/AppDelegate.mm; sourceTree = "<group>"; }; - 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = ReactNativeSdkExample/Images.xcassets; sourceTree = "<group>"; }; - 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = ReactNativeSdkExample/Info.plist; sourceTree = "<group>"; }; - 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ReactNativeSdkExample/main.m; sourceTree = "<group>"; }; - 19F6CBCC0A4E27FBF8BF4A61 /* libPods-ReactNativeSdkExample-ReactNativeSdkExampleTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ReactNativeSdkExample-ReactNativeSdkExampleTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 3B4392A12AC88292D35C810B /* Pods-ReactNativeSdkExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeSdkExample.debug.xcconfig"; path = "Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample.debug.xcconfig"; sourceTree = "<group>"; }; - 5709B34CF0A7D63546082F79 /* Pods-ReactNativeSdkExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeSdkExample.release.xcconfig"; path = "Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample.release.xcconfig"; sourceTree = "<group>"; }; - 5B7EB9410499542E8C5724F5 /* Pods-ReactNativeSdkExample-ReactNativeSdkExampleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeSdkExample-ReactNativeSdkExampleTests.debug.xcconfig"; path = "Target Support Files/Pods-ReactNativeSdkExample-ReactNativeSdkExampleTests/Pods-ReactNativeSdkExample-ReactNativeSdkExampleTests.debug.xcconfig"; sourceTree = "<group>"; }; - 5DCACB8F33CDC322A6C60F78 /* libPods-ReactNativeSdkExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ReactNativeSdkExample.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = ReactNativeSdkExample/LaunchScreen.storyboard; sourceTree = "<group>"; }; - 89C6BE57DB24E9ADA2F236DE /* Pods-ReactNativeSdkExample-ReactNativeSdkExampleTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeSdkExample-ReactNativeSdkExampleTests.release.xcconfig"; path = "Target Support Files/Pods-ReactNativeSdkExample-ReactNativeSdkExampleTests/Pods-ReactNativeSdkExample-ReactNativeSdkExampleTests.release.xcconfig"; sourceTree = "<group>"; }; + 00E356F21AD99517003FC87E /* rnsdktestTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = rnsdktestTests.m; sourceTree = "<group>"; }; + 13B07F961A680F5B00A75B9A /* rnsdktest.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = rnsdktest.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = rnsdktest/AppDelegate.h; sourceTree = "<group>"; }; + 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = rnsdktest/AppDelegate.mm; sourceTree = "<group>"; }; + 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = rnsdktest/Images.xcassets; sourceTree = "<group>"; }; + 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = rnsdktest/Info.plist; sourceTree = "<group>"; }; + 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = rnsdktest/main.m; sourceTree = "<group>"; }; + 19F6CBCC0A4E27FBF8BF4A61 /* libPods-rnsdktest-rnsdktestTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-rnsdktest-rnsdktestTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B4392A12AC88292D35C810B /* Pods-rnsdktest.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-rnsdktest.debug.xcconfig"; path = "Target Support Files/Pods-rnsdktest/Pods-rnsdktest.debug.xcconfig"; sourceTree = "<group>"; }; + 5709B34CF0A7D63546082F79 /* Pods-rnsdktest.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-rnsdktest.release.xcconfig"; path = "Target Support Files/Pods-rnsdktest/Pods-rnsdktest.release.xcconfig"; sourceTree = "<group>"; }; + 5B7EB9410499542E8C5724F5 /* Pods-rnsdktest-rnsdktestTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-rnsdktest-rnsdktestTests.debug.xcconfig"; path = "Target Support Files/Pods-rnsdktest-rnsdktestTests/Pods-rnsdktest-rnsdktestTests.debug.xcconfig"; sourceTree = "<group>"; }; + 5DCACB8F33CDC322A6C60F78 /* libPods-rnsdktest.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-rnsdktest.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = rnsdktest/LaunchScreen.storyboard; sourceTree = "<group>"; }; + 89C6BE57DB24E9ADA2F236DE /* Pods-rnsdktest-rnsdktestTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-rnsdktest-rnsdktestTests.release.xcconfig"; path = "Target Support Files/Pods-rnsdktest-rnsdktestTests/Pods-rnsdktest-rnsdktestTests.release.xcconfig"; sourceTree = "<group>"; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; /* End PBXFileReference section */ @@ -51,7 +51,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7699B88040F8A987B510C191 /* libPods-ReactNativeSdkExample-ReactNativeSdkExampleTests.a in Frameworks */, + 7699B88040F8A987B510C191 /* libPods-rnsdktest-rnsdktestTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -59,20 +59,20 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0C80B921A6F3F58F76C31292 /* libPods-ReactNativeSdkExample.a in Frameworks */, + 0C80B921A6F3F58F76C31292 /* libPods-rnsdktest.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 00E356EF1AD99517003FC87E /* ReactNativeSdkExampleTests */ = { + 00E356EF1AD99517003FC87E /* rnsdktestTests */ = { isa = PBXGroup; children = ( - 00E356F21AD99517003FC87E /* ReactNativeSdkExampleTests.m */, + 00E356F21AD99517003FC87E /* rnsdktestTests.m */, 00E356F01AD99517003FC87E /* Supporting Files */, ); - path = ReactNativeSdkExampleTests; + path = rnsdktestTests; sourceTree = "<group>"; }; 00E356F01AD99517003FC87E /* Supporting Files */ = { @@ -83,7 +83,7 @@ name = "Supporting Files"; sourceTree = "<group>"; }; - 13B07FAE1A68108700A75B9A /* ReactNativeSdkExample */ = { + 13B07FAE1A68108700A75B9A /* rnsdktest */ = { isa = PBXGroup; children = ( 13B07FAF1A68108700A75B9A /* AppDelegate.h */, @@ -93,15 +93,15 @@ 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */, 13B07FB71A68108700A75B9A /* main.m */, ); - name = ReactNativeSdkExample; + name = rnsdktest; sourceTree = "<group>"; }; 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { isa = PBXGroup; children = ( ED297162215061F000B7C4FE /* JavaScriptCore.framework */, - 5DCACB8F33CDC322A6C60F78 /* libPods-ReactNativeSdkExample.a */, - 19F6CBCC0A4E27FBF8BF4A61 /* libPods-ReactNativeSdkExample-ReactNativeSdkExampleTests.a */, + 5DCACB8F33CDC322A6C60F78 /* libPods-rnsdktest.a */, + 19F6CBCC0A4E27FBF8BF4A61 /* libPods-rnsdktest-rnsdktestTests.a */, ); name = Frameworks; sourceTree = "<group>"; @@ -116,9 +116,9 @@ 83CBB9F61A601CBA00E9B192 = { isa = PBXGroup; children = ( - 13B07FAE1A68108700A75B9A /* ReactNativeSdkExample */, + 13B07FAE1A68108700A75B9A /* rnsdktest */, 832341AE1AAA6A7D00B99B32 /* Libraries */, - 00E356EF1AD99517003FC87E /* ReactNativeSdkExampleTests */, + 00E356EF1AD99517003FC87E /* rnsdktestTests */, 83CBBA001A601CBA00E9B192 /* Products */, 2D16E6871FA4F8E400B85C8A /* Frameworks */, BBD78D7AC51CEA395F1C20DB /* Pods */, @@ -131,8 +131,8 @@ 83CBBA001A601CBA00E9B192 /* Products */ = { isa = PBXGroup; children = ( - 13B07F961A680F5B00A75B9A /* ReactNativeSdkExample.app */, - 00E356EE1AD99517003FC87E /* ReactNativeSdkExampleTests.xctest */, + 13B07F961A680F5B00A75B9A /* rnsdktest.app */, + 00E356EE1AD99517003FC87E /* rnsdktestTests.xctest */, ); name = Products; sourceTree = "<group>"; @@ -140,10 +140,10 @@ BBD78D7AC51CEA395F1C20DB /* Pods */ = { isa = PBXGroup; children = ( - 3B4392A12AC88292D35C810B /* Pods-ReactNativeSdkExample.debug.xcconfig */, - 5709B34CF0A7D63546082F79 /* Pods-ReactNativeSdkExample.release.xcconfig */, - 5B7EB9410499542E8C5724F5 /* Pods-ReactNativeSdkExample-ReactNativeSdkExampleTests.debug.xcconfig */, - 89C6BE57DB24E9ADA2F236DE /* Pods-ReactNativeSdkExample-ReactNativeSdkExampleTests.release.xcconfig */, + 3B4392A12AC88292D35C810B /* Pods-rnsdktest.debug.xcconfig */, + 5709B34CF0A7D63546082F79 /* Pods-rnsdktest.release.xcconfig */, + 5B7EB9410499542E8C5724F5 /* Pods-rnsdktest-rnsdktestTests.debug.xcconfig */, + 89C6BE57DB24E9ADA2F236DE /* Pods-rnsdktest-rnsdktestTests.release.xcconfig */, ); path = Pods; sourceTree = "<group>"; @@ -151,9 +151,9 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 00E356ED1AD99517003FC87E /* ReactNativeSdkExampleTests */ = { + 00E356ED1AD99517003FC87E /* rnsdktestTests */ = { isa = PBXNativeTarget; - buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "ReactNativeSdkExampleTests" */; + buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "rnsdktestTests" */; buildPhases = ( A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */, 00E356EA1AD99517003FC87E /* Sources */, @@ -167,14 +167,14 @@ dependencies = ( 00E356F51AD99517003FC87E /* PBXTargetDependency */, ); - name = ReactNativeSdkExampleTests; - productName = ReactNativeSdkExampleTests; - productReference = 00E356EE1AD99517003FC87E /* ReactNativeSdkExampleTests.xctest */; + name = rnsdktestTests; + productName = rnsdktestTests; + productReference = 00E356EE1AD99517003FC87E /* rnsdktestTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; - 13B07F861A680F5B00A75B9A /* ReactNativeSdkExample */ = { + 13B07F861A680F5B00A75B9A /* rnsdktest */ = { isa = PBXNativeTarget; - buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "ReactNativeSdkExample" */; + buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "rnsdktest" */; buildPhases = ( C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */, FD10A7F022414F080027D42C /* Start Packager */, @@ -189,9 +189,9 @@ ); dependencies = ( ); - name = ReactNativeSdkExample; - productName = ReactNativeSdkExample; - productReference = 13B07F961A680F5B00A75B9A /* ReactNativeSdkExample.app */; + name = rnsdktest; + productName = rnsdktest; + productReference = 13B07F961A680F5B00A75B9A /* rnsdktest.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ @@ -211,7 +211,7 @@ }; }; }; - buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "ReactNativeSdkExample" */; + buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "rnsdktest" */; compatibilityVersion = "Xcode 12.0"; developmentRegion = en; hasScannedForEncodings = 0; @@ -224,8 +224,8 @@ projectDirPath = ""; projectRoot = ""; targets = ( - 13B07F861A680F5B00A75B9A /* ReactNativeSdkExample */, - 00E356ED1AD99517003FC87E /* ReactNativeSdkExampleTests */, + 13B07F861A680F5B00A75B9A /* rnsdktest */, + 00E356ED1AD99517003FC87E /* rnsdktestTests */, ); }; /* End PBXProject section */ @@ -272,15 +272,15 @@ files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample-frameworks-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-rnsdktest/Pods-rnsdktest-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample-frameworks-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-rnsdktest/Pods-rnsdktest-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-rnsdktest/Pods-rnsdktest-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */ = { @@ -298,7 +298,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-ReactNativeSdkExample-ReactNativeSdkExampleTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-rnsdktest-rnsdktestTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -320,7 +320,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-ReactNativeSdkExample-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-rnsdktest-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -333,15 +333,15 @@ files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-ReactNativeSdkExample-ReactNativeSdkExampleTests/Pods-ReactNativeSdkExample-ReactNativeSdkExampleTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-rnsdktest-rnsdktestTests/Pods-rnsdktest-rnsdktestTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-ReactNativeSdkExample-ReactNativeSdkExampleTests/Pods-ReactNativeSdkExample-ReactNativeSdkExampleTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-rnsdktest-rnsdktestTests/Pods-rnsdktest-rnsdktestTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ReactNativeSdkExample-ReactNativeSdkExampleTests/Pods-ReactNativeSdkExample-ReactNativeSdkExampleTests-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-rnsdktest-rnsdktestTests/Pods-rnsdktest-rnsdktestTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = { @@ -350,15 +350,15 @@ files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample-resources-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-rnsdktest/Pods-rnsdktest-resources-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample-resources-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-rnsdktest/Pods-rnsdktest-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ReactNativeSdkExample/Pods-ReactNativeSdkExample-resources.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-rnsdktest/Pods-rnsdktest-resources.sh\"\n"; showEnvVarsInLog = 0; }; F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */ = { @@ -367,15 +367,15 @@ files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-ReactNativeSdkExample-ReactNativeSdkExampleTests/Pods-ReactNativeSdkExample-ReactNativeSdkExampleTests-resources-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-rnsdktest-rnsdktestTests/Pods-rnsdktest-rnsdktestTests-resources-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-ReactNativeSdkExample-ReactNativeSdkExampleTests/Pods-ReactNativeSdkExample-ReactNativeSdkExampleTests-resources-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-rnsdktest-rnsdktestTests/Pods-rnsdktest-rnsdktestTests-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ReactNativeSdkExample-ReactNativeSdkExampleTests/Pods-ReactNativeSdkExample-ReactNativeSdkExampleTests-resources.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-rnsdktest-rnsdktestTests/Pods-rnsdktest-rnsdktestTests-resources.sh\"\n"; showEnvVarsInLog = 0; }; FD10A7F022414F080027D42C /* Start Packager */ = { @@ -404,7 +404,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 00E356F31AD99517003FC87E /* ReactNativeSdkExampleTests.m in Sources */, + 00E356F31AD99517003FC87E /* rnsdktestTests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -422,7 +422,7 @@ /* Begin PBXTargetDependency section */ 00E356F51AD99517003FC87E /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 13B07F861A680F5B00A75B9A /* ReactNativeSdkExample */; + target = 13B07F861A680F5B00A75B9A /* rnsdktest */; targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ @@ -430,14 +430,14 @@ /* Begin XCBuildConfiguration section */ 00E356F61AD99517003FC87E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5B7EB9410499542E8C5724F5 /* Pods-ReactNativeSdkExample-ReactNativeSdkExampleTests.debug.xcconfig */; + baseConfigurationReference = 5B7EB9410499542E8C5724F5 /* Pods-rnsdktest-rnsdktestTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); - INFOPLIST_FILE = ReactNativeSdkExampleTests/Info.plist; + INFOPLIST_FILE = rnsdktestTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.4; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -451,17 +451,17 @@ ); PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ReactNativeSdkExample.app/ReactNativeSdkExample"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/rnsdktest.app/rnsdktest"; }; name = Debug; }; 00E356F71AD99517003FC87E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 89C6BE57DB24E9ADA2F236DE /* Pods-ReactNativeSdkExample-ReactNativeSdkExampleTests.release.xcconfig */; + baseConfigurationReference = 89C6BE57DB24E9ADA2F236DE /* Pods-rnsdktest-rnsdktestTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; COPY_PHASE_STRIP = NO; - INFOPLIST_FILE = ReactNativeSdkExampleTests/Info.plist; + INFOPLIST_FILE = rnsdktestTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.4; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -475,19 +475,19 @@ ); PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ReactNativeSdkExample.app/ReactNativeSdkExample"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/rnsdktest.app/rnsdktest"; }; name = Release; }; 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-ReactNativeSdkExample.debug.xcconfig */; + baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-rnsdktest.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = 1; ENABLE_BITCODE = NO; - INFOPLIST_FILE = ReactNativeSdkExample/Info.plist; + INFOPLIST_FILE = rnsdktest/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -499,7 +499,7 @@ "-lc++", ); PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = ReactNativeSdkExample; + PRODUCT_NAME = rnsdktest; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; @@ -508,12 +508,12 @@ }; 13B07F951A680F5B00A75B9A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-ReactNativeSdkExample.release.xcconfig */; + baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-rnsdktest.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = 1; - INFOPLIST_FILE = ReactNativeSdkExample/Info.plist; + INFOPLIST_FILE = rnsdktest/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -525,7 +525,7 @@ "-lc++", ); PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = ReactNativeSdkExample; + PRODUCT_NAME = rnsdktest; SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; }; @@ -564,7 +564,7 @@ COPY_PHASE_STRIP = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -598,7 +598,6 @@ "-DFOLLY_MOBILE=1", "-DFOLLY_USE_LIBCPP=1", ); - REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; }; name = Debug; @@ -636,7 +635,7 @@ COPY_PHASE_STRIP = YES; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -662,7 +661,6 @@ "-DFOLLY_MOBILE=1", "-DFOLLY_USE_LIBCPP=1", ); - REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; @@ -671,7 +669,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "ReactNativeSdkExampleTests" */ = { + 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "rnsdktestTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 00E356F61AD99517003FC87E /* Debug */, @@ -680,7 +678,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "ReactNativeSdkExample" */ = { + 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "rnsdktest" */ = { isa = XCConfigurationList; buildConfigurations = ( 13B07F941A680F5B00A75B9A /* Debug */, @@ -689,7 +687,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "ReactNativeSdkExample" */ = { + 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "rnsdktest" */ = { isa = XCConfigurationList; buildConfigurations = ( 83CBBA201A601CBA00E9B192 /* Debug */, diff --git a/packages/reactnative/example/ios/ReactNativeSdkExample.xcodeproj/xcshareddata/xcschemes/ReactNativeSdkExample.xcscheme b/packages/examples/sdk-react-native/ios/rnsdktest.xcodeproj/xcshareddata/xcschemes/rnsdktest.xcscheme similarity index 77% rename from packages/reactnative/example/ios/ReactNativeSdkExample.xcodeproj/xcshareddata/xcschemes/ReactNativeSdkExample.xcscheme rename to packages/examples/sdk-react-native/ios/rnsdktest.xcodeproj/xcshareddata/xcschemes/rnsdktest.xcscheme index c3bb832ce..87a091d70 100644 --- a/packages/reactnative/example/ios/ReactNativeSdkExample.xcodeproj/xcshareddata/xcschemes/ReactNativeSdkExample.xcscheme +++ b/packages/examples/sdk-react-native/ios/rnsdktest.xcodeproj/xcshareddata/xcschemes/rnsdktest.xcscheme @@ -15,9 +15,9 @@ <BuildableReference BuildableIdentifier = "primary" BlueprintIdentifier = "13B07F861A680F5B00A75B9A" - BuildableName = "ReactNativeSdkExample.app" - BlueprintName = "ReactNativeSdkExample" - ReferencedContainer = "container:ReactNativeSdkExample.xcodeproj"> + BuildableName = "rnsdktest.app" + BlueprintName = "rnsdktest" + ReferencedContainer = "container:rnsdktest.xcodeproj"> </BuildableReference> </BuildActionEntry> </BuildActionEntries> @@ -33,9 +33,9 @@ <BuildableReference BuildableIdentifier = "primary" BlueprintIdentifier = "00E356ED1AD99517003FC87E" - BuildableName = "ReactNativeSdkExampleTests.xctest" - BlueprintName = "ReactNativeSdkExampleTests" - ReferencedContainer = "container:ReactNativeSdkExample.xcodeproj"> + BuildableName = "rnsdktestTests.xctest" + BlueprintName = "rnsdktestTests" + ReferencedContainer = "container:rnsdktest.xcodeproj"> </BuildableReference> </TestableReference> </Testables> @@ -55,9 +55,9 @@ <BuildableReference BuildableIdentifier = "primary" BlueprintIdentifier = "13B07F861A680F5B00A75B9A" - BuildableName = "ReactNativeSdkExample.app" - BlueprintName = "ReactNativeSdkExample" - ReferencedContainer = "container:ReactNativeSdkExample.xcodeproj"> + BuildableName = "rnsdktest.app" + BlueprintName = "rnsdktest" + ReferencedContainer = "container:rnsdktest.xcodeproj"> </BuildableReference> </BuildableProductRunnable> </LaunchAction> @@ -72,9 +72,9 @@ <BuildableReference BuildableIdentifier = "primary" BlueprintIdentifier = "13B07F861A680F5B00A75B9A" - BuildableName = "ReactNativeSdkExample.app" - BlueprintName = "ReactNativeSdkExample" - ReferencedContainer = "container:ReactNativeSdkExample.xcodeproj"> + BuildableName = "rnsdktest.app" + BlueprintName = "rnsdktest" + ReferencedContainer = "container:rnsdktest.xcodeproj"> </BuildableReference> </BuildableProductRunnable> </ProfileAction> diff --git a/packages/reactnative/example/ios/ReactNativeSdkExample/AppDelegate.h b/packages/examples/sdk-react-native/ios/rnsdktest/AppDelegate.h similarity index 100% rename from packages/reactnative/example/ios/ReactNativeSdkExample/AppDelegate.h rename to packages/examples/sdk-react-native/ios/rnsdktest/AppDelegate.h diff --git a/packages/reactnative/example/ios/ReactNativeSdkExample/AppDelegate.mm b/packages/examples/sdk-react-native/ios/rnsdktest/AppDelegate.mm similarity index 62% rename from packages/reactnative/example/ios/ReactNativeSdkExample/AppDelegate.mm rename to packages/examples/sdk-react-native/ios/rnsdktest/AppDelegate.mm index 8df3ed060..9e4bda8a3 100644 --- a/packages/reactnative/example/ios/ReactNativeSdkExample/AppDelegate.mm +++ b/packages/examples/sdk-react-native/ios/rnsdktest/AppDelegate.mm @@ -6,7 +6,7 @@ @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - self.moduleName = @"ReactNativeSdkExample"; + self.moduleName = @"rnsdktest"; // You can add your custom initial props in the dictionary below. // They will be passed down to the ViewController used by React Native. self.initialProps = @{}; @@ -23,14 +23,4 @@ - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge #endif } -/// This method controls whether the `concurrentRoot`feature of React18 is turned on or off. -/// -/// @see: https://reactjs.org/blog/2022/03/29/react-v18.html -/// @note: This requires to be rendering on Fabric (i.e. on the New Architecture). -/// @return: `true` if the `concurrentRoot` feature is enabled. Otherwise, it returns `false`. -- (BOOL)concurrentRootEnabled -{ - return true; -} - @end diff --git a/packages/reactnative/example/ios/ReactNativeSdkExample/Images.xcassets/AppIcon.appiconset/Contents.json b/packages/examples/sdk-react-native/ios/rnsdktest/Images.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from packages/reactnative/example/ios/ReactNativeSdkExample/Images.xcassets/AppIcon.appiconset/Contents.json rename to packages/examples/sdk-react-native/ios/rnsdktest/Images.xcassets/AppIcon.appiconset/Contents.json diff --git a/packages/reactnative/example/ios/ReactNativeSdkExample/Images.xcassets/Contents.json b/packages/examples/sdk-react-native/ios/rnsdktest/Images.xcassets/Contents.json similarity index 100% rename from packages/reactnative/example/ios/ReactNativeSdkExample/Images.xcassets/Contents.json rename to packages/examples/sdk-react-native/ios/rnsdktest/Images.xcassets/Contents.json diff --git a/packages/reactnative/example/ios/ReactNativeSdkExample/Info.plist b/packages/examples/sdk-react-native/ios/rnsdktest/Info.plist similarity index 97% rename from packages/reactnative/example/ios/ReactNativeSdkExample/Info.plist rename to packages/examples/sdk-react-native/ios/rnsdktest/Info.plist index e7a375d46..bb12261ef 100644 --- a/packages/reactnative/example/ios/ReactNativeSdkExample/Info.plist +++ b/packages/examples/sdk-react-native/ios/rnsdktest/Info.plist @@ -5,7 +5,7 @@ <key>CFBundleDevelopmentRegion</key> <string>en</string> <key>CFBundleDisplayName</key> - <string>ReactNativeSdkExample</string> + <string>rnsdktest</string> <key>CFBundleExecutable</key> <string>$(EXECUTABLE_NAME)</string> <key>CFBundleIdentifier</key> diff --git a/packages/reactnative/example/ios/ReactNativeSdkExample/LaunchScreen.storyboard b/packages/examples/sdk-react-native/ios/rnsdktest/LaunchScreen.storyboard similarity index 94% rename from packages/reactnative/example/ios/ReactNativeSdkExample/LaunchScreen.storyboard rename to packages/examples/sdk-react-native/ios/rnsdktest/LaunchScreen.storyboard index 9e0f02713..bd462ab66 100644 --- a/packages/reactnative/example/ios/ReactNativeSdkExample/LaunchScreen.storyboard +++ b/packages/examples/sdk-react-native/ios/rnsdktest/LaunchScreen.storyboard @@ -16,7 +16,7 @@ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> - <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ReactNativeSdkExample" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="GJd-Yh-RWb"> + <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="rnsdktest" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="GJd-Yh-RWb"> <rect key="frame" x="0.0" y="202" width="375" height="43"/> <fontDescription key="fontDescription" type="boldSystem" pointSize="36"/> <nil key="highlightedColor"/> diff --git a/packages/reactnative/example/ios/ReactNativeSdkExample/main.m b/packages/examples/sdk-react-native/ios/rnsdktest/main.m similarity index 100% rename from packages/reactnative/example/ios/ReactNativeSdkExample/main.m rename to packages/examples/sdk-react-native/ios/rnsdktest/main.m diff --git a/packages/reactnative/example/ios/ReactNativeSdkExampleTests/Info.plist b/packages/examples/sdk-react-native/ios/rnsdktestTests/Info.plist similarity index 100% rename from packages/reactnative/example/ios/ReactNativeSdkExampleTests/Info.plist rename to packages/examples/sdk-react-native/ios/rnsdktestTests/Info.plist diff --git a/packages/reactnative/example/ios/ReactNativeSdkExampleTests/ReactNativeSdkExampleTests.m b/packages/examples/sdk-react-native/ios/rnsdktestTests/rnsdktestTests.m similarity index 95% rename from packages/reactnative/example/ios/ReactNativeSdkExampleTests/ReactNativeSdkExampleTests.m rename to packages/examples/sdk-react-native/ios/rnsdktestTests/rnsdktestTests.m index b2523c458..7e46601d2 100644 --- a/packages/reactnative/example/ios/ReactNativeSdkExampleTests/ReactNativeSdkExampleTests.m +++ b/packages/examples/sdk-react-native/ios/rnsdktestTests/rnsdktestTests.m @@ -7,11 +7,11 @@ #define TIMEOUT_SECONDS 600 #define TEXT_TO_LOOK_FOR @"Welcome to React" -@interface ReactNativeSdkExampleTests : XCTestCase +@interface rnsdktestTests : XCTestCase @end -@implementation ReactNativeSdkExampleTests +@implementation rnsdktestTests - (BOOL)findSubviewInView:(UIView *)view matching:(BOOL (^)(UIView *view))test { diff --git a/packages/examples/sdk-react-native/jest.config.js b/packages/examples/sdk-react-native/jest.config.js new file mode 100644 index 000000000..8eb675e9b --- /dev/null +++ b/packages/examples/sdk-react-native/jest.config.js @@ -0,0 +1,3 @@ +module.exports = { + preset: 'react-native', +}; diff --git a/packages/examples/sdk-react-native/metro.config.js b/packages/examples/sdk-react-native/metro.config.js new file mode 100644 index 000000000..ad8f87b6d --- /dev/null +++ b/packages/examples/sdk-react-native/metro.config.js @@ -0,0 +1,11 @@ +const {getDefaultConfig, mergeConfig} = require('@react-native/metro-config'); + +/** + * Metro configuration + * https://facebook.github.io/metro/docs/configuration + * + * @type {import('metro-config').MetroConfig} + */ +const config = {}; + +module.exports = mergeConfig(getDefaultConfig(__dirname), config); diff --git a/packages/examples/sdk-react-native/package.json b/packages/examples/sdk-react-native/package.json new file mode 100644 index 000000000..a2612ef08 --- /dev/null +++ b/packages/examples/sdk-react-native/package.json @@ -0,0 +1,77 @@ +{ + "name": "rnsdktest", + "version": "0.0.1", + "private": true, + "scripts": { + "android": "react-native run-android", + "ios": "react-native run-ios", + "lint": "eslint .", + "start": "react-native start", + "test": "jest", + "postinstall": "node_modules/.bin/rn-nodeify --install crypto,assert,url,stream,events,http,https,os,url,net,fs,zlib --hack && npx patch-package" + }, + "dependencies": { + "@push/react-native-sdk": "../../reactnative", + "browserify-zlib": "^0.1.4", + "events": "^1.1.1", + "react": "18.2.0", + "react-native": "0.72.6", + "react-native-fast-openpgp": "^2.6.0", + "react-native-get-random-values": "^1.9.0", + "react-native-randombytes": "3.6.1", + "react-native-webview": "^13.2.2", + "react-native-webview-crypto": "^0.0.25", + "readable-stream": "^1.0.33" + }, + "devDependencies": { + "@babel/core": "^7.20.0", + "@babel/preset-env": "^7.20.0", + "@babel/runtime": "^7.20.0", + "@react-native/eslint-config": "^0.72.2", + "@react-native/metro-config": "^0.72.11", + "@tsconfig/react-native": "^3.0.0", + "@types/react": "^18.0.24", + "@types/react-test-renderer": "^18.0.0", + "babel-jest": "^29.2.1", + "eslint": "^8.19.0", + "jest": "^29.2.1", + "metro-react-native-babel-preset": "0.76.8", + "patch-package": "^8.0.0", + "prettier": "^2.4.1", + "react-test-renderer": "18.2.0", + "typescript": "4.8.4" + }, + "engines": { + "node": ">=16" + }, + "react-native": { + "zlib": "browserify-zlib", + "crypto": "react-native-crypto", + "net": "react-native-tcp", + "http": "@tradle/react-native-http", + "https": "https-browserify", + "os": "react-native-os", + "fs": "react-native-level-fs", + "_stream_transform": "readable-stream/transform", + "_stream_readable": "readable-stream/readable", + "_stream_writable": "readable-stream/writable", + "_stream_duplex": "readable-stream/duplex", + "_stream_passthrough": "readable-stream/passthrough", + "stream": "stream-browserify" + }, + "browser": { + "zlib": "browserify-zlib", + "crypto": "react-native-crypto", + "net": "react-native-tcp", + "http": "@tradle/react-native-http", + "https": "https-browserify", + "os": "react-native-os", + "fs": "react-native-level-fs", + "_stream_transform": "readable-stream/transform", + "_stream_readable": "readable-stream/readable", + "_stream_writable": "readable-stream/writable", + "_stream_duplex": "readable-stream/duplex", + "_stream_passthrough": "readable-stream/passthrough", + "stream": "stream-browserify" + } +} diff --git a/packages/examples/sdk-react-native/patches/@kalashshah+restapi+0.1.2.patch b/packages/examples/sdk-react-native/patches/@kalashshah+restapi+0.1.2.patch new file mode 100644 index 000000000..4de4642f9 --- /dev/null +++ b/packages/examples/sdk-react-native/patches/@kalashshah+restapi+0.1.2.patch @@ -0,0 +1,52 @@ +diff --git a/node_modules/@kalashshah/restapi/src/lib/chat/helpers/payloadHelper.ts b/node_modules/@kalashshah/restapi/src/lib/chat/helpers/payloadHelper.ts +index b322a8e..e3ed682 100644 +--- a/node_modules/@kalashshah/restapi/src/lib/chat/helpers/payloadHelper.ts ++++ b/node_modules/@kalashshah/restapi/src/lib/chat/helpers/payloadHelper.ts +@@ -377,8 +377,8 @@ export const getAdminsList = ( + ) + : []; + +- const adminList = [...adminsFromMembers, ...adminsFromPendingMembers]; +- return adminList; ++ // const adminList = [...adminsFromMembers, ...adminsFromPendingMembers]; ++ return []; + }; + + export const getSpaceAdminsList = ( +@@ -405,14 +405,15 @@ export const getSpaceAdminsList = ( + ) + : []; + +- const adminList = [...adminsFromMembers, ...adminsFromPendingMembers]; +- return adminList; ++ // const adminList = [...adminsFromMembers, ...adminsFromPendingMembers]; ++ return []; + }; + + export const convertToWalletAddressList = ( + memberList: { wallet: string }[] + ): string[] => { +- return memberList ? memberList.map((member) => member.wallet) : []; ++ // return memberList ? memberList.map((member) => member.wallet) : []; ++ return []; + }; + + export const getMembersList = ( +@@ -430,7 +431,8 @@ export const getMembersList = ( + }[] + ): Array<string> => { + const allMembers = [...(members || []), ...(pendingMembers || [])]; +- return convertToWalletAddressList(allMembers); ++ // return convertToWalletAddressList(allMembers); ++ return []; + }; + + export const getSpacesMembersList = ( +@@ -448,5 +450,6 @@ export const getSpacesMembersList = ( + }[] + ): Array<string> => { + const allMembers = [...(members || []), ...(pendingMembers || [])]; +- return convertToWalletAddressList(allMembers); ++ // return convertToWalletAddressList(allMembers); ++ return []; + }; diff --git a/packages/reactnative/example/shim.js b/packages/examples/sdk-react-native/shim.js similarity index 100% rename from packages/reactnative/example/shim.js rename to packages/examples/sdk-react-native/shim.js diff --git a/packages/reactnative/example/src/App.tsx b/packages/examples/sdk-react-native/src/App.tsx similarity index 99% rename from packages/reactnative/example/src/App.tsx rename to packages/examples/sdk-react-native/src/App.tsx index ab8619c8c..86cf72614 100644 --- a/packages/reactnative/example/src/App.tsx +++ b/packages/examples/sdk-react-native/src/App.tsx @@ -23,7 +23,7 @@ import { send, Constants, approve, -} from '@push/react-native-sdk'; +} from '@push/react-native-sdk/src'; function generatePrivateKey() { // Define the set of characters for private key generation diff --git a/packages/examples/sdk-react-native/tsconfig.json b/packages/examples/sdk-react-native/tsconfig.json new file mode 100644 index 000000000..45a6c7072 --- /dev/null +++ b/packages/examples/sdk-react-native/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "@tsconfig/react-native/tsconfig.json" +} diff --git a/packages/reactnative/example/types/env.d.ts b/packages/examples/sdk-react-native/types/env.d.ts similarity index 100% rename from packages/reactnative/example/types/env.d.ts rename to packages/examples/sdk-react-native/types/env.d.ts diff --git a/packages/reactnative/example/.bundle/config b/packages/reactnative/example/.bundle/config deleted file mode 100644 index 848943bb5..000000000 --- a/packages/reactnative/example/.bundle/config +++ /dev/null @@ -1,2 +0,0 @@ -BUNDLE_PATH: "vendor/bundle" -BUNDLE_FORCE_RUBY_PLATFORM: 1 diff --git a/packages/reactnative/example/.env.sample b/packages/reactnative/example/.env.sample deleted file mode 100644 index f6d444362..000000000 --- a/packages/reactnative/example/.env.sample +++ /dev/null @@ -1,10 +0,0 @@ -# WALLET -WALLET_PRIVATE_KEY=your_wallet_private_key -NFT_CONTRACT_ADDRESS_1=your_nft_contract_address -NFT_CHAIN_ID_1=your_nft_chainid -NFT_TOKEN_ID_1=your_nft_token_id -NFT_HOLDER_WALLET_PRIVATE_KEY_1=wallet_private_key -NFT_CONTRACT_ADDRESS_2=your_nft_contract_address -NFT_CHAIN_ID_2=your_nft_chainid -NFT_TOKEN_ID_2=your_nft_token_id -NFT_HOLDER_WALLET_PRIVATE_KEY_2=wallet_private_key diff --git a/packages/reactnative/example/.node-version b/packages/reactnative/example/.node-version deleted file mode 100644 index 3c032078a..000000000 --- a/packages/reactnative/example/.node-version +++ /dev/null @@ -1 +0,0 @@ -18 diff --git a/packages/reactnative/example/.watchmanconfig b/packages/reactnative/example/.watchmanconfig deleted file mode 100644 index 9e26dfeeb..000000000 --- a/packages/reactnative/example/.watchmanconfig +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/packages/reactnative/example/android/app/src/main/res/values/strings.xml b/packages/reactnative/example/android/app/src/main/res/values/strings.xml deleted file mode 100644 index 9a4c824b4..000000000 --- a/packages/reactnative/example/android/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ -<resources> - <string name="app_name">ReactNativeSdkExample</string> -</resources> diff --git a/packages/reactnative/example/android/gradle/wrapper/gradle-wrapper.jar b/packages/reactnative/example/android/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 41d9927a4d4fb3f96a785543079b8df6723c946b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59821 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	^tV@s0U~V+mu)vv`xgL$Z9NQL<AAAp(nQf3 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 diff --git a/packages/reactnative/example/app.json b/packages/reactnative/example/app.json deleted file mode 100644 index 45952059e..000000000 --- a/packages/reactnative/example/app.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "ReactNativeSdkExample", - "displayName": "ReactNativeSdkExample" -} \ No newline at end of file diff --git a/packages/reactnative/example/babel.config.js b/packages/reactnative/example/babel.config.js deleted file mode 100644 index d66f68421..000000000 --- a/packages/reactnative/example/babel.config.js +++ /dev/null @@ -1,25 +0,0 @@ -const path = require('path'); -const pak = require('../package.json'); - -module.exports = { - presets: ['module:metro-react-native-babel-preset'], - plugins: [ - [ - 'module-resolver', - { - extensions: ['.tsx', '.ts', '.js', '.json'], - alias: { - [pak.name]: path.join(__dirname, '..', pak.source), - }, - }, - ], - [ - 'module:react-native-dotenv', - { - envName: 'APP_ENV', - moduleName: '@env', - path: '.env', - }, - ], - ], -}; diff --git a/packages/reactnative/example/index.js b/packages/reactnative/example/index.js deleted file mode 100644 index 117ddcae4..000000000 --- a/packages/reactnative/example/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import { AppRegistry } from 'react-native'; -import App from './src/App'; -import { name as appName } from './app.json'; - -AppRegistry.registerComponent(appName, () => App); diff --git a/packages/reactnative/example/ios/File.swift b/packages/reactnative/example/ios/File.swift deleted file mode 100644 index 88c4f5252..000000000 --- a/packages/reactnative/example/ios/File.swift +++ /dev/null @@ -1,6 +0,0 @@ -// -// File.swift -// ReactNativeSdkExample -// - -import Foundation diff --git a/packages/reactnative/example/ios/Podfile.lock b/packages/reactnative/example/ios/Podfile.lock deleted file mode 100644 index 571da8c5e..000000000 --- a/packages/reactnative/example/ios/Podfile.lock +++ /dev/null @@ -1,641 +0,0 @@ -PODS: - - boost (1.76.0) - - CocoaAsyncSocket (7.6.5) - - DoubleConversion (1.1.6) - - FBLazyVector (0.71.11) - - FBReactNativeSpec (0.71.11): - - RCT-Folly (= 2021.07.22.00) - - RCTRequired (= 0.71.11) - - RCTTypeSafety (= 0.71.11) - - React-Core (= 0.71.11) - - React-jsi (= 0.71.11) - - ReactCommon/turbomodule/core (= 0.71.11) - - Flipper (0.125.0): - - Flipper-Folly (~> 2.6) - - Flipper-RSocket (~> 1.4) - - Flipper-Boost-iOSX (1.76.0.1.11) - - Flipper-DoubleConversion (3.2.0.1) - - Flipper-Fmt (7.1.7) - - Flipper-Folly (2.6.10): - - Flipper-Boost-iOSX - - Flipper-DoubleConversion - - Flipper-Fmt (= 7.1.7) - - Flipper-Glog - - libevent (~> 2.1.12) - - OpenSSL-Universal (= 1.1.1100) - - Flipper-Glog (0.5.0.5) - - Flipper-PeerTalk (0.0.4) - - Flipper-RSocket (1.4.3): - - Flipper-Folly (~> 2.6) - - FlipperKit (0.125.0): - - FlipperKit/Core (= 0.125.0) - - FlipperKit/Core (0.125.0): - - Flipper (~> 0.125.0) - - FlipperKit/CppBridge - - FlipperKit/FBCxxFollyDynamicConvert - - FlipperKit/FBDefines - - FlipperKit/FKPortForwarding - - SocketRocket (~> 0.6.0) - - FlipperKit/CppBridge (0.125.0): - - Flipper (~> 0.125.0) - - FlipperKit/FBCxxFollyDynamicConvert (0.125.0): - - Flipper-Folly (~> 2.6) - - FlipperKit/FBDefines (0.125.0) - - FlipperKit/FKPortForwarding (0.125.0): - - CocoaAsyncSocket (~> 7.6) - - Flipper-PeerTalk (~> 0.0.4) - - FlipperKit/FlipperKitHighlightOverlay (0.125.0) - - FlipperKit/FlipperKitLayoutHelpers (0.125.0): - - FlipperKit/Core - - FlipperKit/FlipperKitHighlightOverlay - - FlipperKit/FlipperKitLayoutTextSearchable - - FlipperKit/FlipperKitLayoutIOSDescriptors (0.125.0): - - FlipperKit/Core - - FlipperKit/FlipperKitHighlightOverlay - - FlipperKit/FlipperKitLayoutHelpers - - YogaKit (~> 1.18) - - FlipperKit/FlipperKitLayoutPlugin (0.125.0): - - FlipperKit/Core - - FlipperKit/FlipperKitHighlightOverlay - - FlipperKit/FlipperKitLayoutHelpers - - FlipperKit/FlipperKitLayoutIOSDescriptors - - FlipperKit/FlipperKitLayoutTextSearchable - - YogaKit (~> 1.18) - - FlipperKit/FlipperKitLayoutTextSearchable (0.125.0) - - FlipperKit/FlipperKitNetworkPlugin (0.125.0): - - FlipperKit/Core - - FlipperKit/FlipperKitReactPlugin (0.125.0): - - FlipperKit/Core - - FlipperKit/FlipperKitUserDefaultsPlugin (0.125.0): - - FlipperKit/Core - - FlipperKit/SKIOSNetworkPlugin (0.125.0): - - FlipperKit/Core - - FlipperKit/FlipperKitNetworkPlugin - - fmt (6.2.1) - - glog (0.3.5) - - hermes-engine (0.71.11): - - hermes-engine/Pre-built (= 0.71.11) - - hermes-engine/Pre-built (0.71.11) - - libevent (2.1.12) - - OpenSSL-Universal (1.1.1100) - - push-react-native-sdk (0.1.0): - - React-Core - - RCT-Folly (2021.07.22.00): - - boost - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - RCT-Folly/Default (= 2021.07.22.00) - - RCT-Folly/Default (2021.07.22.00): - - boost - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - RCT-Folly/Futures (2021.07.22.00): - - boost - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - libevent - - RCTRequired (0.71.11) - - RCTTypeSafety (0.71.11): - - FBLazyVector (= 0.71.11) - - RCTRequired (= 0.71.11) - - React-Core (= 0.71.11) - - React (0.71.11): - - React-Core (= 0.71.11) - - React-Core/DevSupport (= 0.71.11) - - React-Core/RCTWebSocket (= 0.71.11) - - React-RCTActionSheet (= 0.71.11) - - React-RCTAnimation (= 0.71.11) - - React-RCTBlob (= 0.71.11) - - React-RCTImage (= 0.71.11) - - React-RCTLinking (= 0.71.11) - - React-RCTNetwork (= 0.71.11) - - React-RCTSettings (= 0.71.11) - - React-RCTText (= 0.71.11) - - React-RCTVibration (= 0.71.11) - - React-callinvoker (0.71.11) - - React-Codegen (0.71.11): - - FBReactNativeSpec - - hermes-engine - - RCT-Folly - - RCTRequired - - RCTTypeSafety - - React-Core - - React-jsi - - React-jsiexecutor - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - React-Core (0.71.11): - - glog - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-Core/Default (= 0.71.11) - - React-cxxreact (= 0.71.11) - - React-hermes - - React-jsi (= 0.71.11) - - React-jsiexecutor (= 0.71.11) - - React-perflogger (= 0.71.11) - - Yoga - - React-Core/CoreModulesHeaders (0.71.11): - - glog - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-Core/Default - - React-cxxreact (= 0.71.11) - - React-hermes - - React-jsi (= 0.71.11) - - React-jsiexecutor (= 0.71.11) - - React-perflogger (= 0.71.11) - - Yoga - - React-Core/Default (0.71.11): - - glog - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-cxxreact (= 0.71.11) - - React-hermes - - React-jsi (= 0.71.11) - - React-jsiexecutor (= 0.71.11) - - React-perflogger (= 0.71.11) - - Yoga - - React-Core/DevSupport (0.71.11): - - glog - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-Core/Default (= 0.71.11) - - React-Core/RCTWebSocket (= 0.71.11) - - React-cxxreact (= 0.71.11) - - React-hermes - - React-jsi (= 0.71.11) - - React-jsiexecutor (= 0.71.11) - - React-jsinspector (= 0.71.11) - - React-perflogger (= 0.71.11) - - Yoga - - React-Core/RCTActionSheetHeaders (0.71.11): - - glog - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-Core/Default - - React-cxxreact (= 0.71.11) - - React-hermes - - React-jsi (= 0.71.11) - - React-jsiexecutor (= 0.71.11) - - React-perflogger (= 0.71.11) - - Yoga - - React-Core/RCTAnimationHeaders (0.71.11): - - glog - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-Core/Default - - React-cxxreact (= 0.71.11) - - React-hermes - - React-jsi (= 0.71.11) - - React-jsiexecutor (= 0.71.11) - - React-perflogger (= 0.71.11) - - Yoga - - React-Core/RCTBlobHeaders (0.71.11): - - glog - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-Core/Default - - React-cxxreact (= 0.71.11) - - React-hermes - - React-jsi (= 0.71.11) - - React-jsiexecutor (= 0.71.11) - - React-perflogger (= 0.71.11) - - Yoga - - React-Core/RCTImageHeaders (0.71.11): - - glog - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-Core/Default - - React-cxxreact (= 0.71.11) - - React-hermes - - React-jsi (= 0.71.11) - - React-jsiexecutor (= 0.71.11) - - React-perflogger (= 0.71.11) - - Yoga - - React-Core/RCTLinkingHeaders (0.71.11): - - glog - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-Core/Default - - React-cxxreact (= 0.71.11) - - React-hermes - - React-jsi (= 0.71.11) - - React-jsiexecutor (= 0.71.11) - - React-perflogger (= 0.71.11) - - Yoga - - React-Core/RCTNetworkHeaders (0.71.11): - - glog - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-Core/Default - - React-cxxreact (= 0.71.11) - - React-hermes - - React-jsi (= 0.71.11) - - React-jsiexecutor (= 0.71.11) - - React-perflogger (= 0.71.11) - - Yoga - - React-Core/RCTSettingsHeaders (0.71.11): - - glog - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-Core/Default - - React-cxxreact (= 0.71.11) - - React-hermes - - React-jsi (= 0.71.11) - - React-jsiexecutor (= 0.71.11) - - React-perflogger (= 0.71.11) - - Yoga - - React-Core/RCTTextHeaders (0.71.11): - - glog - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-Core/Default - - React-cxxreact (= 0.71.11) - - React-hermes - - React-jsi (= 0.71.11) - - React-jsiexecutor (= 0.71.11) - - React-perflogger (= 0.71.11) - - Yoga - - React-Core/RCTVibrationHeaders (0.71.11): - - glog - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-Core/Default - - React-cxxreact (= 0.71.11) - - React-hermes - - React-jsi (= 0.71.11) - - React-jsiexecutor (= 0.71.11) - - React-perflogger (= 0.71.11) - - Yoga - - React-Core/RCTWebSocket (0.71.11): - - glog - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-Core/Default (= 0.71.11) - - React-cxxreact (= 0.71.11) - - React-hermes - - React-jsi (= 0.71.11) - - React-jsiexecutor (= 0.71.11) - - React-perflogger (= 0.71.11) - - Yoga - - React-CoreModules (0.71.11): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.71.11) - - React-Codegen (= 0.71.11) - - React-Core/CoreModulesHeaders (= 0.71.11) - - React-jsi (= 0.71.11) - - React-RCTBlob - - React-RCTImage (= 0.71.11) - - ReactCommon/turbomodule/core (= 0.71.11) - - React-cxxreact (0.71.11): - - boost (= 1.76.0) - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-callinvoker (= 0.71.11) - - React-jsi (= 0.71.11) - - React-jsinspector (= 0.71.11) - - React-logger (= 0.71.11) - - React-perflogger (= 0.71.11) - - React-runtimeexecutor (= 0.71.11) - - React-hermes (0.71.11): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - RCT-Folly/Futures (= 2021.07.22.00) - - React-cxxreact (= 0.71.11) - - React-jsi - - React-jsiexecutor (= 0.71.11) - - React-jsinspector (= 0.71.11) - - React-perflogger (= 0.71.11) - - React-jsi (0.71.11): - - boost (= 1.76.0) - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-jsiexecutor (0.71.11): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-cxxreact (= 0.71.11) - - React-jsi (= 0.71.11) - - React-perflogger (= 0.71.11) - - React-jsinspector (0.71.11) - - React-logger (0.71.11): - - glog - - react-native-fast-openpgp (2.6.0): - - React-Core - - react-native-webview (13.2.2): - - React-Core - - React-perflogger (0.71.11) - - React-RCTActionSheet (0.71.11): - - React-Core/RCTActionSheetHeaders (= 0.71.11) - - React-RCTAnimation (0.71.11): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.71.11) - - React-Codegen (= 0.71.11) - - React-Core/RCTAnimationHeaders (= 0.71.11) - - React-jsi (= 0.71.11) - - ReactCommon/turbomodule/core (= 0.71.11) - - React-RCTAppDelegate (0.71.11): - - RCT-Folly - - RCTRequired - - RCTTypeSafety - - React-Core - - ReactCommon/turbomodule/core - - React-RCTBlob (0.71.11): - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-Codegen (= 0.71.11) - - React-Core/RCTBlobHeaders (= 0.71.11) - - React-Core/RCTWebSocket (= 0.71.11) - - React-jsi (= 0.71.11) - - React-RCTNetwork (= 0.71.11) - - ReactCommon/turbomodule/core (= 0.71.11) - - React-RCTImage (0.71.11): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.71.11) - - React-Codegen (= 0.71.11) - - React-Core/RCTImageHeaders (= 0.71.11) - - React-jsi (= 0.71.11) - - React-RCTNetwork (= 0.71.11) - - ReactCommon/turbomodule/core (= 0.71.11) - - React-RCTLinking (0.71.11): - - React-Codegen (= 0.71.11) - - React-Core/RCTLinkingHeaders (= 0.71.11) - - React-jsi (= 0.71.11) - - ReactCommon/turbomodule/core (= 0.71.11) - - React-RCTNetwork (0.71.11): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.71.11) - - React-Codegen (= 0.71.11) - - React-Core/RCTNetworkHeaders (= 0.71.11) - - React-jsi (= 0.71.11) - - ReactCommon/turbomodule/core (= 0.71.11) - - React-RCTSettings (0.71.11): - - RCT-Folly (= 2021.07.22.00) - - RCTTypeSafety (= 0.71.11) - - React-Codegen (= 0.71.11) - - React-Core/RCTSettingsHeaders (= 0.71.11) - - React-jsi (= 0.71.11) - - ReactCommon/turbomodule/core (= 0.71.11) - - React-RCTText (0.71.11): - - React-Core/RCTTextHeaders (= 0.71.11) - - React-RCTVibration (0.71.11): - - RCT-Folly (= 2021.07.22.00) - - React-Codegen (= 0.71.11) - - React-Core/RCTVibrationHeaders (= 0.71.11) - - React-jsi (= 0.71.11) - - ReactCommon/turbomodule/core (= 0.71.11) - - React-runtimeexecutor (0.71.11): - - React-jsi (= 0.71.11) - - ReactCommon/turbomodule/bridging (0.71.11): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-callinvoker (= 0.71.11) - - React-Core (= 0.71.11) - - React-cxxreact (= 0.71.11) - - React-jsi (= 0.71.11) - - React-logger (= 0.71.11) - - React-perflogger (= 0.71.11) - - ReactCommon/turbomodule/core (0.71.11): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - React-callinvoker (= 0.71.11) - - React-Core (= 0.71.11) - - React-cxxreact (= 0.71.11) - - React-jsi (= 0.71.11) - - React-logger (= 0.71.11) - - React-perflogger (= 0.71.11) - - SocketRocket (0.6.0) - - Yoga (1.14.0) - - YogaKit (1.18.1): - - Yoga (~> 1.14) - -DEPENDENCIES: - - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) - - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) - - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`) - - Flipper (= 0.125.0) - - Flipper-Boost-iOSX (= 1.76.0.1.11) - - Flipper-DoubleConversion (= 3.2.0.1) - - Flipper-Fmt (= 7.1.7) - - Flipper-Folly (= 2.6.10) - - Flipper-Glog (= 0.5.0.5) - - Flipper-PeerTalk (= 0.0.4) - - Flipper-RSocket (= 1.4.3) - - FlipperKit (= 0.125.0) - - FlipperKit/Core (= 0.125.0) - - FlipperKit/CppBridge (= 0.125.0) - - FlipperKit/FBCxxFollyDynamicConvert (= 0.125.0) - - FlipperKit/FBDefines (= 0.125.0) - - FlipperKit/FKPortForwarding (= 0.125.0) - - FlipperKit/FlipperKitHighlightOverlay (= 0.125.0) - - FlipperKit/FlipperKitLayoutPlugin (= 0.125.0) - - FlipperKit/FlipperKitLayoutTextSearchable (= 0.125.0) - - FlipperKit/FlipperKitNetworkPlugin (= 0.125.0) - - FlipperKit/FlipperKitReactPlugin (= 0.125.0) - - FlipperKit/FlipperKitUserDefaultsPlugin (= 0.125.0) - - FlipperKit/SKIOSNetworkPlugin (= 0.125.0) - - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) - - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) - - libevent (~> 2.1.12) - - OpenSSL-Universal (= 1.1.1100) - - push-react-native-sdk (from `../..`) - - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`) - - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) - - React (from `../node_modules/react-native/`) - - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) - - React-Codegen (from `build/generated/ios`) - - React-Core (from `../node_modules/react-native/`) - - React-Core/DevSupport (from `../node_modules/react-native/`) - - React-Core/RCTWebSocket (from `../node_modules/react-native/`) - - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) - - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) - - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`) - - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) - - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) - - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`) - - React-logger (from `../node_modules/react-native/ReactCommon/logger`) - - react-native-fast-openpgp (from `../node_modules/react-native-fast-openpgp`) - - react-native-webview (from `../node_modules/react-native-webview`) - - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) - - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) - - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) - - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`) - - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) - - React-RCTImage (from `../node_modules/react-native/Libraries/Image`) - - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`) - - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`) - - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) - - React-RCTText (from `../node_modules/react-native/Libraries/Text`) - - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) - - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) - - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) - - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) - -SPEC REPOS: - trunk: - - CocoaAsyncSocket - - Flipper - - Flipper-Boost-iOSX - - Flipper-DoubleConversion - - Flipper-Fmt - - Flipper-Folly - - Flipper-Glog - - Flipper-PeerTalk - - Flipper-RSocket - - FlipperKit - - fmt - - libevent - - OpenSSL-Universal - - SocketRocket - - YogaKit - -EXTERNAL SOURCES: - boost: - :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec" - DoubleConversion: - :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" - FBLazyVector: - :path: "../node_modules/react-native/Libraries/FBLazyVector" - FBReactNativeSpec: - :path: "../node_modules/react-native/React/FBReactNativeSpec" - glog: - :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" - hermes-engine: - :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" - push-react-native-sdk: - :path: "../.." - RCT-Folly: - :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" - RCTRequired: - :path: "../node_modules/react-native/Libraries/RCTRequired" - RCTTypeSafety: - :path: "../node_modules/react-native/Libraries/TypeSafety" - React: - :path: "../node_modules/react-native/" - React-callinvoker: - :path: "../node_modules/react-native/ReactCommon/callinvoker" - React-Codegen: - :path: build/generated/ios - React-Core: - :path: "../node_modules/react-native/" - React-CoreModules: - :path: "../node_modules/react-native/React/CoreModules" - React-cxxreact: - :path: "../node_modules/react-native/ReactCommon/cxxreact" - React-hermes: - :path: "../node_modules/react-native/ReactCommon/hermes" - React-jsi: - :path: "../node_modules/react-native/ReactCommon/jsi" - React-jsiexecutor: - :path: "../node_modules/react-native/ReactCommon/jsiexecutor" - React-jsinspector: - :path: "../node_modules/react-native/ReactCommon/jsinspector" - React-logger: - :path: "../node_modules/react-native/ReactCommon/logger" - react-native-fast-openpgp: - :path: "../node_modules/react-native-fast-openpgp" - react-native-webview: - :path: "../node_modules/react-native-webview" - React-perflogger: - :path: "../node_modules/react-native/ReactCommon/reactperflogger" - React-RCTActionSheet: - :path: "../node_modules/react-native/Libraries/ActionSheetIOS" - React-RCTAnimation: - :path: "../node_modules/react-native/Libraries/NativeAnimation" - React-RCTAppDelegate: - :path: "../node_modules/react-native/Libraries/AppDelegate" - React-RCTBlob: - :path: "../node_modules/react-native/Libraries/Blob" - React-RCTImage: - :path: "../node_modules/react-native/Libraries/Image" - React-RCTLinking: - :path: "../node_modules/react-native/Libraries/LinkingIOS" - React-RCTNetwork: - :path: "../node_modules/react-native/Libraries/Network" - React-RCTSettings: - :path: "../node_modules/react-native/Libraries/Settings" - React-RCTText: - :path: "../node_modules/react-native/Libraries/Text" - React-RCTVibration: - :path: "../node_modules/react-native/Libraries/Vibration" - React-runtimeexecutor: - :path: "../node_modules/react-native/ReactCommon/runtimeexecutor" - ReactCommon: - :path: "../node_modules/react-native/ReactCommon" - Yoga: - :path: "../node_modules/react-native/ReactCommon/yoga" - -SPEC CHECKSUMS: - boost: 57d2868c099736d80fcd648bf211b4431e51a558 - CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99 - DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54 - FBLazyVector: c511d4cd0210f416cb5c289bd5ae6b36d909b048 - FBReactNativeSpec: a911fb22def57aef1d74215e8b6b8761d25c1c54 - Flipper: 26fc4b7382499f1281eb8cb921e5c3ad6de91fe0 - Flipper-Boost-iOSX: fd1e2b8cbef7e662a122412d7ac5f5bea715403c - Flipper-DoubleConversion: 2dc99b02f658daf147069aad9dbd29d8feb06d30 - Flipper-Fmt: 60cbdd92fc254826e61d669a5d87ef7015396a9b - Flipper-Folly: 584845625005ff068a6ebf41f857f468decd26b3 - Flipper-Glog: 70c50ce58ddaf67dc35180db05f191692570f446 - Flipper-PeerTalk: 116d8f857dc6ef55c7a5a75ea3ceaafe878aadc9 - Flipper-RSocket: d9d9ade67cbecf6ac10730304bf5607266dd2541 - FlipperKit: cbdee19bdd4e7f05472a66ce290f1b729ba3cb86 - fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9 - glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b - hermes-engine: 34c863b446d0135b85a6536fa5fd89f48196f848 - libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913 - OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c - push-react-native-sdk: d9d498989a0efa80523cfc7517ae24259d4a10f5 - RCT-Folly: 424b8c9a7a0b9ab2886ffe9c3b041ef628fd4fb1 - RCTRequired: f6187ec763637e6a57f5728dd9a3bdabc6d6b4e0 - RCTTypeSafety: a01aca2dd3b27fa422d5239252ad38e54e958750 - React: 741b4f5187e7a2137b69c88e65f940ba40600b4b - React-callinvoker: 72ba74b2d5d690c497631191ae6eeca0c043d9cf - React-Codegen: 8a7cda1633e4940de8a710f6bf5cae5dd673546e - React-Core: 72bb19702c465b6451a40501a2879532bec9acee - React-CoreModules: ffd19b082fc36b9b463fedf30955138b5426c053 - React-cxxreact: 8b3dd87e3b8ea96dd4ad5c7bac8f31f1cc3da97f - React-hermes: be95942c3f47fc032da1387360413f00dae0ea68 - React-jsi: 9978e2a64c2a4371b40e109f4ef30a33deaa9bcb - React-jsiexecutor: 18b5b33c5f2687a784a61bc8176611b73524ae77 - React-jsinspector: b6ed4cb3ffa27a041cd440300503dc512b761450 - React-logger: 186dd536128ae5924bc38ed70932c00aa740cd5b - react-native-fast-openpgp: 25df11a0fc3a801ef8fa6bd4335cb48c66dc5bbe - react-native-webview: b8ec89966713985111a14d6e4bf98d8b54bced0d - React-perflogger: e706562ab7eb8eb590aa83a224d26fa13963d7f2 - React-RCTActionSheet: 57d4bd98122f557479a3359ad5dad8e109e20c5a - React-RCTAnimation: ccf3ef00101ea74bda73a045d79a658b36728a60 - React-RCTAppDelegate: d0c28a35c65e9a0aef287ac0dafe1b71b1ac180c - React-RCTBlob: 1700b92ece4357af0a49719c9638185ad2902e95 - React-RCTImage: f2e4904566ccccaa4b704170fcc5ae144ca347bf - React-RCTLinking: 52a3740e3651e30aa11dff5a6debed7395dd8169 - React-RCTNetwork: ea0976f2b3ffc7877cd7784e351dc460adf87b12 - React-RCTSettings: ed5ac992b23e25c65c3cc31f11b5c940ae5e3e60 - React-RCTText: c9dfc6722621d56332b4f3a19ac38105e7504145 - React-RCTVibration: f09f08de63e4122deb32506e20ca4cae6e4e14c1 - React-runtimeexecutor: 4817d63dbc9d658f8dc0ec56bd9b83ce531129f0 - ReactCommon: 08723d2ed328c5cbcb0de168f231bc7bae7f8aa1 - SocketRocket: fccef3f9c5cedea1353a9ef6ada904fde10d6608 - Yoga: f7decafdc5e8c125e6fa0da38a687e35238420fa - YogaKit: f782866e155069a2cca2517aafea43200b01fd5a - -PODFILE CHECKSUM: c63b686a08336fbad705bcda149d6478884e7332 - -COCOAPODS: 1.12.1 diff --git a/packages/reactnative/example/ios/ReactNativeSdkExample-Bridging-Header.h b/packages/reactnative/example/ios/ReactNativeSdkExample-Bridging-Header.h deleted file mode 100644 index e11d920b1..000000000 --- a/packages/reactnative/example/ios/ReactNativeSdkExample-Bridging-Header.h +++ /dev/null @@ -1,3 +0,0 @@ -// -// Use this file to import your target's public headers that you would like to expose to Swift. -// diff --git a/packages/reactnative/example/ios/ReactNativeSdkExample.xcworkspace/contents.xcworkspacedata b/packages/reactnative/example/ios/ReactNativeSdkExample.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 9be26e856..000000000 --- a/packages/reactnative/example/ios/ReactNativeSdkExample.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Workspace - version = "1.0"> - <FileRef - location = "group:ReactNativeSdkExample.xcodeproj"> - </FileRef> - <FileRef - location = "group:Pods/Pods.xcodeproj"> - </FileRef> -</Workspace> diff --git a/packages/reactnative/example/metro.config.js b/packages/reactnative/example/metro.config.js deleted file mode 100644 index b5c0064bb..000000000 --- a/packages/reactnative/example/metro.config.js +++ /dev/null @@ -1,40 +0,0 @@ -const path = require('path'); -const escape = require('escape-string-regexp'); -const exclusionList = require('metro-config/src/defaults/exclusionList'); -const pak = require('../package.json'); - -const root = path.resolve(__dirname, '..'); - -const modules = Object.keys({ - ...pak.peerDependencies, -}); - -module.exports = { - projectRoot: __dirname, - watchFolders: [root], - - // We need to make sure that only one version is loaded for peerDependencies - // So we block them at the root, and alias them to the versions in example's node_modules - resolver: { - blacklistRE: exclusionList( - modules.map( - (m) => - new RegExp(`^${escape(path.join(root, 'node_modules', m))}\\/.*$`) - ) - ), - - extraNodeModules: modules.reduce((acc, name) => { - acc[name] = path.join(__dirname, 'node_modules', name); - return acc; - }, {}), - }, - - transformer: { - getTransformOptions: async () => ({ - transform: { - experimentalImportSupport: false, - inlineRequires: true, - }, - }), - }, -}; diff --git a/packages/reactnative/example/package.json b/packages/reactnative/example/package.json deleted file mode 100644 index 262f97429..000000000 --- a/packages/reactnative/example/package.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "ReactNativeSdkExample", - "version": "0.0.1", - "private": true, - "scripts": { - "android": "react-native run-android", - "ios": "react-native run-ios", - "start": "react-native start", - "pods": "pod-install --quiet" - }, - "dependencies": { - "ethers": "^5.7.1", - "react": "18.2.0", - "react-native": "0.71.11", - "react-native-dotenv": "^3.4.9", - "react-native-fast-openpgp": "^2.7.0", - "react-native-webview": "^13.2.2", - "react-native-webview-crypto": "^0.0.25" - }, - "devDependencies": { - "@babel/core": "^7.20.0", - "@babel/preset-env": "^7.20.0", - "@babel/runtime": "^7.20.0", - "@tsconfig/react-native": "^3.0.2", - "@types/jest": "^29.5.2", - "@types/react": "^18.2.13", - "@types/react-native-dotenv": "^0.2.0", - "@types/react-test-renderer": "^18.0.0", - "babel-plugin-module-resolver": "^4.1.0", - "metro-react-native-babel-preset": "0.73.10", - "typescript": "^5.1.3" - } -} diff --git a/packages/reactnative/example/react-native.config.js b/packages/reactnative/example/react-native.config.js deleted file mode 100644 index a5166956f..000000000 --- a/packages/reactnative/example/react-native.config.js +++ /dev/null @@ -1,10 +0,0 @@ -const path = require('path'); -const pak = require('../package.json'); - -module.exports = { - dependencies: { - [pak.name]: { - root: path.join(__dirname, '..'), - }, - }, -}; diff --git a/packages/reactnative/example/tsconfig.json b/packages/reactnative/example/tsconfig.json deleted file mode 100644 index b71c72cc6..000000000 --- a/packages/reactnative/example/tsconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "@tsconfig/react-native/tsconfig.json", -} From 30602f1f668ca63f3735a0bec12755d17b4b8ce7 Mon Sep 17 00:00:00 2001 From: kalashshah <202051096@iiitvadodara.ac.in> Date: Tue, 21 Nov 2023 14:45:45 +0530 Subject: [PATCH 8/8] fix: pass default pgpHelper in decryptAndVerifyMessage fnc --- packages/restapi/src/lib/chat/helpers/crypto.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/restapi/src/lib/chat/helpers/crypto.ts b/packages/restapi/src/lib/chat/helpers/crypto.ts index 85edfe940..caeb113ee 100644 --- a/packages/restapi/src/lib/chat/helpers/crypto.ts +++ b/packages/restapi/src/lib/chat/helpers/crypto.ts @@ -442,7 +442,7 @@ export const decryptAndVerifyMessage = async ( message: IMessageIPFS | IMessageIPFSWithCID, pgpPublicKey: string, pgpPrivateKey: string, - pgpHelper: IPGPHelper + pgpHelper = PGP.PGPHelper ): Promise<IMessageIPFS | IMessageIPFSWithCID> => { /**