diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 2fff620f657..dbfba51275c 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -37,6 +37,7 @@ const packages = [ 'web3-providers-http', 'web3-providers-ws', 'web3-providers-ipc', + 'web3-account-abstraction', ]; /** @type {import('@docusaurus/types').Config} */ @@ -109,7 +110,7 @@ const config = { /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ ({ navbar: { - title: 'Web3.js Docs', + title: 'Web3.js Docs', logo: { src: 'img/web3js.svg', }, @@ -184,19 +185,43 @@ const config = { */ playgroundPosition: 'bottom', }, - image:"https://pbs.twimg.com/profile_images/1746099108937363456/duG_Pqem_400x400.jpg", + image: 'https://pbs.twimg.com/profile_images/1746099108937363456/duG_Pqem_400x400.jpg', metadata: [ - { name: 'keywords', content: 'web3.js, web3, web3js, ethereum, ethereum json rpc, blockchain development, smart contracts, dapps, dApp development' }, - { name: 'description', content: 'Collection of comprehensive TypeScript libraries for Interaction with the Ethereum JSON RPC API and utility functions.' }, + { + name: 'keywords', + content: + 'web3.js, web3, web3js, ethereum, ethereum json rpc, blockchain development, smart contracts, dapps, dApp development', + }, + { + name: 'description', + content: + 'Collection of comprehensive TypeScript libraries for Interaction with the Ethereum JSON RPC API and utility functions.', + }, { name: 'og:title', content: 'Web3.js Documentation' }, - { name: 'og:description', content: 'Collection of comprehensive TypeScript libraries for Interaction with the Ethereum JSON RPC API and utility functions.' }, + { + name: 'og:description', + content: + 'Collection of comprehensive TypeScript libraries for Interaction with the Ethereum JSON RPC API and utility functions.', + }, { name: 'og:type', content: 'website' }, { name: 'og:url', content: 'https://docs.web3js.org' }, - { name: 'og:image', content: 'https://pbs.twimg.com/profile_images/1746099108937363456/duG_Pqem_400x400.jpg' }, + { + name: 'og:image', + content: + 'https://pbs.twimg.com/profile_images/1746099108937363456/duG_Pqem_400x400.jpg', + }, { name: 'twitter:card', content: 'summary_large_image' }, { name: 'twitter:title', content: 'Web3.js Documentation' }, - { name: 'twitter:description', content: 'Official documentation for web3.js, the Type/JavaScript library for interacting with the Ethereum blockchain.' }, - { name: 'twitter:image', content: 'https://raw.githubusercontent.com/web3/web3.js/4.x/assets/logo/web3js.jpg' }, + { + name: 'twitter:description', + content: + 'Official documentation for web3.js, the Type/JavaScript library for interacting with the Ethereum blockchain.', + }, + { + name: 'twitter:image', + content: + 'https://raw.githubusercontent.com/web3/web3.js/4.x/assets/logo/web3js.jpg', + }, ], }), }; diff --git a/packages/web3-account-abstraction/.eslintignore b/packages/web3-account-abstraction/.eslintignore new file mode 120000 index 00000000000..94760d2888d --- /dev/null +++ b/packages/web3-account-abstraction/.eslintignore @@ -0,0 +1 @@ +../../templates/.eslintignore.tmpl \ No newline at end of file diff --git a/packages/web3-account-abstraction/.eslintrc.js b/packages/web3-account-abstraction/.eslintrc.js new file mode 100644 index 00000000000..12a507e5126 --- /dev/null +++ b/packages/web3-account-abstraction/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../.eslintrc.js', + parserOptions: { + project: './tsconfig.esm.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-account-abstraction/.gitignore b/packages/web3-account-abstraction/.gitignore new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/web3-account-abstraction/.npmignore b/packages/web3-account-abstraction/.npmignore new file mode 120000 index 00000000000..8a0be70f3ed --- /dev/null +++ b/packages/web3-account-abstraction/.npmignore @@ -0,0 +1 @@ +../../templates/.npmignore.tmpl \ No newline at end of file diff --git a/packages/web3-account-abstraction/.npmrc b/packages/web3-account-abstraction/.npmrc new file mode 120000 index 00000000000..5cc817c4313 --- /dev/null +++ b/packages/web3-account-abstraction/.npmrc @@ -0,0 +1 @@ +../../templates/.npmrc.tmpl \ No newline at end of file diff --git a/packages/web3-account-abstraction/.prettierignore b/packages/web3-account-abstraction/.prettierignore new file mode 120000 index 00000000000..044e4a3df69 --- /dev/null +++ b/packages/web3-account-abstraction/.prettierignore @@ -0,0 +1 @@ +../../templates/.prettierignore.tmpl \ No newline at end of file diff --git a/packages/web3-account-abstraction/.prettierrc.json b/packages/web3-account-abstraction/.prettierrc.json new file mode 120000 index 00000000000..00ecd510aaf --- /dev/null +++ b/packages/web3-account-abstraction/.prettierrc.json @@ -0,0 +1 @@ +../../templates/.prettierrc.json.tmpl \ No newline at end of file diff --git a/packages/web3-account-abstraction/CHANGELOG.md b/packages/web3-account-abstraction/CHANGELOG.md new file mode 100644 index 00000000000..87f56484e8e --- /dev/null +++ b/packages/web3-account-abstraction/CHANGELOG.md @@ -0,0 +1,38 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + +## [Unreleased] diff --git a/packages/web3-account-abstraction/README.md b/packages/web3-account-abstraction/README.md new file mode 100644 index 00000000000..61d49413a5e --- /dev/null +++ b/packages/web3-account-abstraction/README.md @@ -0,0 +1,59 @@ +

+ web3.js +

+ +# web3.js - Account Abstraction + +![ES Version](https://img.shields.io/badge/ES-2020-yellow) +![Node Version](https://img.shields.io/badge/node-14.x-green) +[![NPM Package][npm-image]][npm-url] +[![Downloads][downloads-image]][npm-url] + +This is a sub-package of [web3.js][repo]. + +`web3-account-abstraction` contains the ideal setup for a Web3.js package. + +## Installation + +You can install the package either using [NPM](https://www.npmjs.com/package/web3-account-abstraction) or using [Yarn](https://yarnpkg.com/package/web3-account-abstraction) + +### Using NPM + +```bash +npm install web3-account-abstraction +``` + +### Using Yarn + +```bash +yarn add web3-account-abstraction +``` + +## Getting Started + +- :writing_hand: If you have questions [submit an issue](https://github.com/ChainSafe/web3.js/issues/new) or join us on [Discord](https://discord.gg/yjyvFRP) + ![Discord](https://img.shields.io/discord/593655374469660673.svg?label=Discord&logo=discord) + +## Prerequisites + +- :gear: [NodeJS](https://nodejs.org/) (LTS/Fermium) +- :toolbox: [Yarn](https://yarnpkg.com/)/[Lerna](https://lerna.js.org/) + +## Package.json Scripts + +| Script | Description | +| ---------------- | -------------------------------------------------- | +| clean | Uses `rimraf` to remove `dist/` | +| build | Uses `tsc` to build package and dependent packages | +| lint | Uses `eslint` to lint package | +| lint:fix | Uses `eslint` to check and fix any warnings | +| format | Uses `prettier` to format the code | +| test | Uses `jest` to run unit tests | +| test:integration | Uses `jest` to run tests under `/test/integration` | +| test:unit | Uses `jest` to run tests under `/test/unit` | + +[docs]: https://docs.web3js.org/ +[repo]: https://github.com/web3/web3.js/tree/4.x/tools/web3-account-abstraction +[npm-image]: https://img.shields.io/github/package-json/v/web3/web3.js/4.x?filename=tools%2Fweb3-account-abstraction%2Fpackage.json +[npm-url]: https://npmjs.org/package/web3-account-abstraction +[downloads-image]: https://img.shields.io/npm/dm/web3-account-abstraction?label=npm%20downloads diff --git a/packages/web3-account-abstraction/assets/logo/web3js.ai b/packages/web3-account-abstraction/assets/logo/web3js.ai new file mode 100644 index 00000000000..669ef50e7cd --- /dev/null +++ b/packages/web3-account-abstraction/assets/logo/web3js.ai @@ -0,0 +1,1516 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R 6 0 R 29 0 R 30 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + Print + + + + + 2017-01-27T15:51:37Z + 2017-01-27T15:51:37Z + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 240 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA8AEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7F+an5hy6Ov6F0qTjqMq VubhTvCjDYL4Ow3r2Hz2IQ8x8teevMXl+cvaXBlgdi01pMS8Tk7k0rUMfFTXCr2Xyl+Z/l/X+FvI 31DUWoPqszCjn/iuTYN8tj7YKSzDArsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdir5W1nUptU1a71CYkvdSvKa9gx2H0DbJIQeKtqrMwVQWZjRVG5JPYY q+ify70jzPpujKmvXrTu4BgtX+NoFp9lpDuT/k9BgKWV4FdirsVdirsVdirsVdirsVdirsVdirsV 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 + + + + + + uuid:394c157d-8cf0-f94e-8261-98ccb840e1bc + xmp.did:106820F817276811822ACF3CAA06C913 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + uuid:1898a391-1dba-4249-9e7f-8804d46504b0 + xmp.did:FE7F11740720681183D1839CF7E6F44E + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:FE7F11740720681183D1839CF7E6F44E + 2017-01-06T15:27:37Z + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:106820F817276811822ACF3CAA06C913 + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Document + Print + + + False + False + 1 + + 3840.000000 + 2160.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 35 + 31 + 32 + + + CMYK Red + RGB + PROCESS + 237 + 28 + 36 + + + CMYK Yellow + RGB + PROCESS + 255 + 242 + 0 + + + CMYK Green + RGB + PROCESS + 0 + 166 + 81 + + + CMYK Cyan + RGB + PROCESS + 0 + 174 + 239 + + + CMYK Blue + RGB + PROCESS + 46 + 49 + 146 + + + CMYK Magenta + RGB + PROCESS + 236 + 0 + 140 + + + C=15 M=100 Y=90 K=10 + RGB + PROCESS + 190 + 30 + 45 + + + C=0 M=90 Y=85 K=0 + RGB + PROCESS + 239 + 65 + 54 + + + C=0 M=80 Y=95 K=0 + RGB + PROCESS + 241 + 90 + 41 + + + C=0 M=50 Y=100 K=0 + RGB + PROCESS + 247 + 148 + 30 + + + C=0 M=35 Y=85 K=0 + RGB + PROCESS + 251 + 176 + 64 + + + C=5 M=0 Y=90 K=0 + RGB + PROCESS + 249 + 237 + 50 + + + C=20 M=0 Y=100 K=0 + RGB + PROCESS + 215 + 223 + 35 + + + C=50 M=0 Y=100 K=0 + RGB + PROCESS + 141 + 198 + 63 + + + C=75 M=0 Y=100 K=0 + RGB + PROCESS + 57 + 181 + 74 + + + C=85 M=10 Y=100 K=10 + RGB + PROCESS + 0 + 148 + 68 + + + C=90 M=30 Y=95 K=30 + RGB + PROCESS + 0 + 104 + 56 + + + C=75 M=0 Y=75 K=0 + RGB + PROCESS + 43 + 182 + 115 + + + C=80 M=10 Y=45 K=0 + RGB + PROCESS + 0 + 167 + 157 + + + C=70 M=15 Y=0 K=0 + RGB + PROCESS + 39 + 170 + 225 + + + C=85 M=50 Y=0 K=0 + RGB + PROCESS + 28 + 117 + 188 + + + C=100 M=95 Y=5 K=0 + RGB + PROCESS + 43 + 57 + 144 + + + C=100 M=100 Y=25 K=25 + RGB + PROCESS + 38 + 34 + 98 + + + C=75 M=100 Y=0 K=0 + RGB + PROCESS + 102 + 45 + 145 + + + C=50 M=100 Y=0 K=0 + RGB + PROCESS + 146 + 39 + 143 + + + C=35 M=100 Y=35 K=10 + RGB + PROCESS + 158 + 31 + 99 + + + C=10 M=100 Y=50 K=0 + RGB + PROCESS + 218 + 28 + 92 + + + C=0 M=95 Y=20 K=0 + RGB + PROCESS + 238 + 42 + 123 + + + C=25 M=25 Y=40 K=0 + RGB + PROCESS + 194 + 181 + 155 + + + C=40 M=45 Y=50 K=5 + RGB + PROCESS + 155 + 133 + 121 + + + C=50 M=50 Y=60 K=25 + RGB + PROCESS + 114 + 102 + 88 + + + C=55 M=60 Y=65 K=40 + RGB + PROCESS + 89 + 74 + 66 + + + C=25 M=40 Y=65 K=0 + RGB + PROCESS + 196 + 154 + 108 + + + C=30 M=50 Y=75 K=10 + RGB + PROCESS + 169 + 124 + 80 + + + C=35 M=60 Y=80 K=25 + RGB + PROCESS + 139 + 94 + 60 + + + C=40 M=65 Y=90 K=35 + RGB + PROCESS + 117 + 76 + 41 + + + C=40 M=70 Y=100 K=50 + RGB + PROCESS + 96 + 57 + 19 + + + C=50 M=70 Y=80 K=70 + RGB + PROCESS + 60 + 36 + 21 + + + + + + Grays + 1 + + + + C=0 M=0 Y=0 K=100 + RGB + PROCESS + 35 + 31 + 32 + + + C=0 M=0 Y=0 K=90 + RGB + PROCESS + 65 + 64 + 66 + + + C=0 M=0 Y=0 K=80 + RGB + PROCESS + 88 + 89 + 91 + + + C=0 M=0 Y=0 K=70 + RGB + PROCESS + 109 + 110 + 113 + + + C=0 M=0 Y=0 K=60 + RGB + PROCESS + 128 + 130 + 133 + + + C=0 M=0 Y=0 K=50 + RGB + PROCESS + 147 + 149 + 152 + + + C=0 M=0 Y=0 K=40 + RGB + PROCESS + 167 + 169 + 172 + + + C=0 M=0 Y=0 K=30 + RGB + PROCESS + 188 + 190 + 192 + + + C=0 M=0 Y=0 K=20 + RGB + PROCESS + 209 + 211 + 212 + + + C=0 M=0 Y=0 K=10 + RGB + PROCESS + 230 + 231 + 232 + + + C=0 M=0 Y=0 K=5 + RGB + PROCESS + 241 + 242 + 242 + + + + + + Brights + 1 + + + + C=0 M=100 Y=100 K=0 + RGB + PROCESS + 237 + 28 + 36 + + + C=0 M=75 Y=100 K=0 + RGB + PROCESS + 242 + 101 + 34 + + + C=0 M=10 Y=95 K=0 + RGB + PROCESS + 255 + 222 + 23 + + + C=85 M=10 Y=100 K=0 + RGB + PROCESS + 0 + 161 + 75 + + + C=100 M=90 Y=0 K=0 + RGB + PROCESS + 33 + 64 + 154 + + + C=60 M=90 Y=0 K=0 + RGB + PROCESS + 127 + 63 + 152 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 36 0 R/TrimBox[0.0 0.0 3840.0 2160.0]/Type/Page>> endobj 32 0 obj <>stream +HlVI9 +TK"cN(rh4P@A*n(EJ\A*z/ϑ>Lۯ-RN%7޾[+ELD}~Q_,RC)i%mR=V{uS¡,YHzeۓ Q!5nJ9P5"v[ uWvU7nێ,FP^$$5DDpɁd4ڋۙ90q|dDZ a1439<0}f0{ꖐhE#R 5Y9$ +zX]@~3ϋ̬3L>س|cΏs%sZNVuAcp~Rc阏b^Aй><\I/wP;bJ@|n[fDڍ^ -[D@Dňށ(TIfйkUE'Gx"/Þ!QLwBq:p.RZ[Yh=j{9 ACIY8w;vuu-ӹ2/;@r fdk6z1FMǯk׊x]*C1ylDTAœu&4`pv)5bǸ+ +VEC04,Tp9p)1Rِ9ֿmXѭxhPxʐke&ډAeL9Jl1|)Y|zf*ѷ.G%:o]~Ljh(eMBC#\fch\ij\mr#Jܢo;oَ?I >stream +8;Z]!gMI$9&4O4Loo+g]Y:Y;L9GQ$:@3.,T.n*;fRief@%Sif_3dV)Ok+/'6SR3bl +9q7Fhkme7N\oK:^?"i4k6BkiO2r#nub+]#^#o2T&%;/3"U%t=#DK/;5(hd<.rJl^nXukH^04p_5&"H=J0K1J +F,$ endstream endobj 37 0 obj [/Indexed/DeviceRGB 255 38 0 R] endobj 38 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 29 0 obj <> endobj 30 0 obj <> endobj 41 0 obj [/View/Design] endobj 42 0 obj <>>> endobj 39 0 obj [/View/Design] endobj 40 0 obj <>>> endobj 35 0 obj <> endobj 34 0 obj [/ICCBased 43 0 R] endobj 43 0 obj <>stream +HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  + 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 +V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= +x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- +ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 +N')].uJr + wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 +n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 33 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (Ian Meikle) () %%Title: (Web3_70.ai) %%CreationDate: 27/01/2017 15:51 %%Canvassize: 16383 %%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 -2160 3840 0 %AI3_TemplateBox: 1920.5 -1080.5 1920.5 -1080.5 %AI3_TileBox: 1517 -1359.5 2300 -800.5 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: -1717.0015 636.9985 0.3333 2078 1150 18 0 0 32 191 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 77 %%PageOrigin:1614 -1476 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 46 0 obj <>stream +%%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %AI7_Thumbnail: 128 120 8 %%BeginData: 14636 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FFFFFFA87D7DFD7CFFA8FD0452A8FD79FFA87D527D527D527DA8FD %77FF7D525352525253525259FD76FF527D527D527D527D527D52A8AFFD72 %FF7D52527D5252527D52525259527DA8FD71FF7D527D527D527D527D527D %527DA8FD72FF52535252525352525253527DA8FD39FFCACAA1C3A0C2A0C2 %A0C3A1CACAFD2DFF7D527D527D527D527D527DA8FD37FFC3C3BBBBBABBB4 %BBB4BBBABB92BBBBBBC2C9CAFD2AFF527D5252527DFD04527DFD35FFA1C2 %98BA92BB92BB92BB98BB92BB98BB92BB92BA92BB99CAFD28FF7D527D527D %527D527D52FD33FFCAC9BBBA92BBBBBB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBB4C2C9FD26FF5252525352525253527DFD0CFFA87D7DFD23FFA0 %BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BA99 %CAFD24FF7D527D527D527D52537DFD0BFFA87D525352A8FD1FFFCABBBBBA %BBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBA %C9FD23FF5252527D5252527D52A8FD0AFFA852527D5252527DA8FD1BFFCA %C292BB98BB92BB98BB92BB98BB92BB98BB92BB92BB92BB98BB92BB98BB92 %BB98BB92BB92C2CAFD21FF7D527D527D527D5253A8FD0AFF7D527D527D52 %7D52537DFD19FFC2BBB4BB98BBBBBB98BBBBBB98BBBBBB98BBB4BB92BBB4 %BA92BBBBBB98BBBBBB98BBBBBB98BBB4BBCAFD20FF525352525253525252 %A8FD09FFA8525352525253FD05527DA8FD14FFC998BA92BB92BB92BB92BB %92BB92BB92BB92BA99C3C3CAA7C9A0BB92BB92BB92BB92BB92BB92BB92BB %92BBA8FD1FFF7D527D527D527D5259A8FD09FF7D7D527D527D527D527D52 %7D527DFD12FFC9C2B4BBBABBBBBBBABBBBBBBABBBBBBBABBB4C2C9FD08FF %C9BBBBBABBBBBBBABBBBBBBABBBBBBB4C2FD1FFF527D5252527D525252A8 %FD09FF7D527D5252527D5252527D527DA8FD10FFCF9ABA92BB98BB92BB98 %BB92BB98BB92BB92BA98C9FD0BFFCF99BB92BB98BB92BB98BB92BB98BB92 %C3CAFD1DFF7D527D527D527D52527DFD09FF527D527D527D527D527D527D %FD11FFC398BBBABB98BBBBBB98BBBBBB98BBBBBB92BBC2FD0EFFC9B4BB98 %BBBBBB98BBBBBB98BBBBBB92BBBBC2C3CFFD19FF525252535252525352A8 %FD08FFA85952525253525252535252A8FD0FFFA1BB92BB92BB92BB92BB92 %BB92BB92BB92BB92C2A8FD0FFFA1BA92BB92BB92BB92BB92BB92BB92BB92 %BB92BA92C2C3FD17FF7D527D527D527D52527EFD09FF527D527D527D527D %52537DFD0EFFCABBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD10FF %CFC2BABBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBABBBBC9FD15FF52 %52527D5252527D52A8FD08FFA87D5252527D5252525952FD0DFFA8C2B4BA %92BB98BB92BB98BB92BB98BB92BB92BBA0FD11FFCABB92BB98BB92BB98BB %92BB98BB92BB98BB92BB98BB92BB98BB92BBC3FD13FF7D527D527D527D52 %53A8FD09FF527D527D527D527D527DFD0CFFA87D75BBBABB98BBBBBB98BB %BBBB98BBBBBB92C3CFFD11FFC2BBBABB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBBBBB98BBBBBB92BBBBCAFD11FF525352525253525252A8FD08FF %A85252535252525352527DFD0BFF7D525253527698BA92BB92BB92BB92BB %92BA99CAFD11FFC999BA92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB %92BB92BB92BB92BB92BB92C2CAFD0FFF7D527D527D527D5259A8FD09FF52 %7D527D527D527D52A8FD0AFFA87D527D527D537D99BBBABBBABBBBBB92C1 %C9FD11FFCAC2B4BBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABB %BBBBBABBBBBBBABBBBBB92C2CAFD0EFF527D5252527D525252A8FD08FFA8 %53527D5252527D52527DFD0AFF7D527D5252527D52535299B4BB92BA98C3 %CAFD11FFC2BA92BB98BB92BB98BB92BB98BB92BB92BA92BB92BB92BA92BB %92BB98BB92BB98BB92BB98BB92BBCAFD0DFF7D527D527D527D52527DFD09 %FF527D527D527D527D52A8FD09FFA8527D527D527D527D5259527C99BBC2 %FD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BBBBC9C9CFCACAC2C1 %B4BB98BBBBBB98BBBBBB98BBBBBB92BBCAFD0CFF525252535252525352A8 %FD08FFA85952525253FD04527DFD09FF59FD0452535252525352522E7DA8 %FD11FFA1BB92BB92BB92BB92BB92BB92BB92BB92BB92C2A7FD07FFCAC998 %BA92BB92BB92BB92BB92BB92BB92C1FD0CFF7D527D527D527D52527EFD09 %FF527D527D527D527D52A8FD09FF7D527D527D527D527D527D527DFD11FF %CFBBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD0BFFCFFD04BBBABB %BBBBBABBBBBBBABBB4C9FD0BFF5252527D5252527D52A8FD08FFA87D5252 %527DFD04527DFD09FF52595252527D5252527D527DFD10FFCAC292BA92BB %98BB92BB98BB92BB98BB92BB92BBA0FD0EFFC992BB98BB92BB98BB92BB98 %BB92BB99FD0BFF7D527D527D527D5253A8FD09FF527D527D527D527D52A8 %FD08FFA87D527D527D527D527D527DFD10FFC3BB92BBBBBB98BBBBBB98BB %BBBB98BBBBBB92C2CAFD0FFFC3BB98BBBBBB98BBBBBB98BBBBBB92C2FD0B %FF525352525253525252A8FD08FFA85252535252525352527DFD09FF5252 %52535252525352527DFD0EFFCA99BA92BB92BB92BB92BB92BB92BB92BB92 %BA99CAFD10FFA8BB92BB92BB92BB92BB92BB92BB92BA99FD0BFF7D527D52 %7D527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D52 %7D52FD0DFFCFC292BBBBBBBABBBBBBBABBBBBBBABBBBBB92BBC9FD11FFCA %C1BABBBABBBBBBBABBBBBBBABBBBBB92C9FD0BFF527D5252527D525252A8 %FD08FFA853527D5252527D52527DFD09FF5252527D5252527D527DFD0EFF %C2BB92BB98BB92BB98BB92BB98BB92BA92C3CAFD11FFC2BB92BB98BB92BB %98BB92BB98BB92BB92BBCAFD0BFF7D527D527D527D52527DFD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52537EFD10FFC398BBBABB98 %BBBBBB98BBBABBBCFD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BB %CAFD0CFF525252535252525352A8FD08FFA85952525253FD04527DFD09FF %FD055253525252A8FD11FFCA99BA92BB92BB92BA92BBC9FD11FFA1BB92BB %92BB92BB92BB92BB92BB92BB92BB92BBA8FD0DFF7D527D527D527D52527E %FD09FF527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD13FF %C9C292FD04BBC9FD11FFCFBCBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBB %CAFD0FFF5252527D5252527D52A8FD08FFA87D5252527DFD04527DFD09FF %52595252527D525252A8FD15FFC992BBC2FD11FFCAC392BA92BB98BB92BB %98BB92BB98BB92BB92BBA0FD11FF7D527D527D527D5253A8FD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52527DFD17FFCAFD11FFC3BB %92BBBBBB98BBBBBB98BBBBBB98BBBBBB92C2CAFD12FF7DFD045253525252 %A8FD08FFA85252535252525352527DFD09FF525252535252525352A8FD27 %FFCA99BA92BB92BB92BB92BB92BB92BB92BB92BA99CAFD14FFA8527D527D %527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D5252 %7EFD25FFCAC2B4BBBBBBBABBBBBBBABBBBBBBABBBBBBB4BBC3FD16FFA853 %5252527D525252A8FD08FFA853527D5252527D52527DFD09FF5252527D52 %52527D52A8FD24FFA0BB92BB92BB98BB92BB98BB92BB98BB92BB92C2CAFD %18FF527D527D527D52527DFD09FF527D527D527D527D52A8FD08FFA87D52 %7D527D527D5253A8FD22FFCABBBA92BBBBBB98BBBBBB98BBBBBB98BBBABB %BBCFFD1AFF7D525352525253527DA8FD07FFA85952525253FD04527DFD09 %FFFD055253525252A8FD20FFA8BB92BB92BB92BB92BB92BB92BB92BB92BB %92BBC9FD1CFFA87D527D527D527D52FD09FF527D527D527D527D52A8FD08 %FFA87D527D527D527D5259A8FD1FFFA8A8A1C2BABBBABBBBBBBABBBBBBBA %FD04BBC9FD1FFF52535252527D52527DFD07FFA87D5252527DFD04527DFD %09FF52595252527D525252A8FD1EFFA8A87DA87DA199BA92BB98BB92BB98 %BB92BBC2FD21FF7E527D527D527D5252A8FD07FF527D527D527D527D52A8 %FD08FFA87D527D527D527D52527DFD1DFFA8A87DA87EA87EA8A0BBB4BBBB %BB98BBB4C2CAFD22FFA8525253525252535252A8FD05FFA8525253525252 %5352527DFD09FF525252535252525352A8FD08FFA8A8A8FD11FFA8A87DA8 %7DA87DA87DA87DA092BB92BA99C9FD25FF7D7D527D527D527D527DA8FD04 %FFA8527D527D527D527D52A8FD09FF7D527D527D527D52527EFD09FF7EA8 %7EFD11FF7DA87DA884A87DA884A884A799BBC2FD27FFA852595252527DFD %04527DA8A8A85252527D5252527D52527DFD09FF5252527D5252527D52A8 %FD08FFA8A87DA87DA8A8FD0DFF7DA87DA87DA87DA87DA87DA87DA8CAFD29 %FF7E527D527D527D527D5259527D527D527D527D527D527D52A8FD08FFA8 %7D527D527D527D5253A8FD09FF7DA87EA87DA8A8FD0CFFA87DA87EA87DA8 %7EA87DA87DA8FD2BFFA853525352525253525252535252525352525253FD %04527DFD09FFFD055253525252A8FD08FFA8A87DA87DA87DA87DA8A8FD09 %FF7DA87DA87DA87DA87DA87DA8FD2DFFA87D527D527D527D527D527D527D %527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD09FF7DA884 %A87DA884A87DFD0AFFA87DA884A87DA884A87DA8FD2FFF7DFD04527D5252 %527D5252527D5252527DFD04527DFD09FF52595252527D525252A8FD08FF %A8A87DA87DA87DA87D84A8FD09FF7DA87DA87DA87DA87D84A8FD30FF7D53 %527D527D527D527D527D527D527D527D527D527DFD08FFA87D527D527D52 %7D52527DFD09FF7EA87DA87EA87DA87DFD09FFA8A87DA87DA87EA87DA8A8 %FD32FFFD055253525252535252525352525253525252A8FD08FF52525253 %5252525352A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7DA87DA87DA87D %A87DA8FD33FF7D52527D527D527D527D527D527D527D527D527D7DFD08FF %7D527D527D527D52527EFD09FF7EA87DA884A87DA87DFD09FFA8A87EA87D %A884A87DA8A8FD34FF7D52527D5252527D5252527D5252527DFD0452A8FD %07FF5252527D5252527D52A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7D %A87DA87DA87DA87DFD36FFA859527D527D527D527D527D527D527D527D52 %7DA8FD05FFA87D527D527D527D5253A8FD0BFF7DA87DA87EA87DFD0AFFA8 %7DA87EA87DA87EA8A8FD0DFFFD05A8A9A8FD22FFA87DFD05525352525253 %5252525352525259A8FD04FF7D525352525253525252A8FD0CFFA87E7DA8 %7D7EA8FD09FF7DA87DA87DA87DA87DA9FD0CFF7DA87D847DA87D847DA8A8 %FD21FFA85953527D527D527D527D527D527D527D52597DFFFFA8527D527D %527D527D5259A8FD0DFFA8A87DA87DFD0AFFA87DA884A87DA884A8A8FD0B %FF7DA884A87DA884A87DA87DA8A8FD22FFA87DFD0552595252527D525252 %7D5252527D5252527D5252527D525252A8FD10FF7D7DA8FD09FF7DA87DA8 %7DA87DA87DFD0BFF7E847DA87DA87DA87DA87DA87D7E7DFD24FFFD05A87D %527D527D527D527D527D527D527D527D527D527D52527DFD11FFA8FD09FF %A8A87DA87DA87EA87DA8A8FD09FFA8A87EA87DA87EA87DA87EA87DA87EA8 %7DA8A8FD26FF84FD0452535252525352525253525252535252525352A8FD %1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87DA87DA87D %A87DA8A8FD26FF7D52527D527D527D527D527D527D527D527D527D5259A8 %FD1BFFA8A87EA87DA884A87DA8A8FD09FFA8A884A87DA884A87DA884A87D %A884A87DA87EA87DFD26FF7D52527D5252527D5252527D5252527D525252 %5952A8FD1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA8A8FD24FF7D52527D527D527D527D527D527D52 %7D527D527DFD1DFFA87DA87EA87DA87EA8A8FD09FF7EA87DA87EA87DA87E %A87DA87EA87DA87EA87DA87EA87DA8A8FD24FF7D52525352525253525252 %5352525253525253FD1DFF7DA87DA87DA87DA87DA9FD08FFA8A87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8A8FD22FF7D7D527D %527D527D527D527D527D527D52A8FD0AFFA8FD12FFA87DA884A87DA884A8 %A8FD09FF7EA87DA884A87DA884A87DA884A87DA884A87DA884A87DA884A8 %7DA8A8FD22FF7D535252527D5252527D5252527D5253A8FD09FFA8847EFD %11FF7DA87DA87DA87DA87DFD09FFA8A87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DFD22FFA87D5253527D527D527D527D %5252A8FD0BFF84A87DAFFD0EFFA8A87DA87DA87EA87DA8A8FD09FF7DA87E %A87DA87EA87DA8A8FFA8A87DA87DA87EA87DA87EA87DA87EA87DA87DA8A8 %FD21FFA8525252535252525352527DFD0CFFA87DA87DA8A8FD0DFF7DA87D %A87DA87DA87DFD09FFA8A87DA87DA87DA87D847DFFFFFFA8A87D7E7DA87D %A87DA87DA87DA87DA87DA87DA8FD23FFA87D52595259527D7DFD0DFFA8A8 %7DA87DA8A8FD0BFFA8A87EA87DA884A87DA8A8FD09FF84A884A87DA884A8 %7DFD07FFA8A87DA87DA884A87DA884A87DA884A87DFD26FFA8A87DA8A8FD %0EFFA87DA87DA87D847DA8FD0AFF7DA87DA87DA87DA87DFD0AFFA87DA87D %A87DA87D84A8FD07FFA8A87DA87DA87DA87DA87DA87DA87DA8FD39FFA8A8 %7DA87DA87EA87DFD0AFFA87DA87EA87DA87EA8A8FD09FFA8A87DA87EA87D %A87DFD0BFFA8A87DA87EA87DA87EA87DA87EFD3AFF7DA87DA87DA87D7EA8 %FD09FF7DA87DA87DA87DA87DA9FD0AFF7DA87DA87DA87DA8A8FD0BFFA8A8 %7DA87DA87DA87DA87DA8FD3AFFA87DA87DA884A87DA8FD09FFA87DA884A8 %7DA884A8A8FD0AFFA87DA884A87DA87DA8FD0DFFA87DA87DA884A87DA884 %FD3AFFA8A87DA87DA87DA87DFD09FF7DA87DA87DA87DA87DFD0BFFA8847D %A87DA87DA87DFD0FFF7E847DA87DA87DA8FD3BFF7DA87EA87DA87EA8A8FD %07FFA8A87DA87DA87EA87DA8A8FD0BFF7DA87DA87EA87DA8A8FD0FFFA8A8 %7DA87EA87DFD3BFFA87DA87DA87DA87D7EA8FD07FF7DA87DA87DA87DA87D %FD0CFFA87DA87DA87DA87DA8A8FD10FFA87DA87DA8FD3BFFA8A87EA87DA8 %84A87DA8FD06FFA8A884A87DA884A87DA8A8FD0BFFA8A87DA884A87DA87D %A8A9FD11FFA8A87DFD3CFF7DA87DA87DA87DA87DA8A8FD04FFA87DA87DA8 %7DA87DA87DFD0DFF7E847DA87DA87DA87DA8A8FD11FFA8A8FD3DFF7DA87E %A87DA87EA87DA8A8FFA8FF7DA87DA87EA87DA87EA8A8FD0DFF7DA87DA87E %A87DA87DA8A8FD4FFFA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA9FD0DFFA87DA87DA87DA87DA87D7E7DA8FD4EFFA87DA87DA884A8 %7DA884A87DA884A87DA884A87DA884A8A8FD0EFFA87DA884A87DA884A87D %A87DA8A8FD4CFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %FD0FFFA8A87DA87DA87DA87DA87DA87D7E7DFD4CFFA8A87EA87DA87EA87D %A87EA87DA87EA87DA87EA87DA8A8FD0FFFA8A87DA87EA87DA87EA87DA87E %A87DA8FD4BFF7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DFD11FF %A87D7DA87DA87DA87DA87DA87DA87DA8A8FD4AFFA8A87DA884A87DA884A8 %7DA884A87DA884A87DA8FD12FFA8A87EA87DA884A87DA884A87DA87EA8A8 %FD4AFFA87E7DA87DA87DA87DA87DA87DA87DA87D84A8FD13FFA8A87DA87D %A87DA87DA87DA87DA87D7E7DFD4AFFA8A87DA87EA87DA87EA87DA87EA87D %A87DFD15FFA8A87DA87DA87EA87DA87EA87DA87EA8A8FD4AFFA8A87DA87D %A87DA87DA87DA87DA87DA8FD16FFA8A87DA87DA87DA87DA87DA87DA87D7D %7EFD4BFFA87DA87DA884A87DA884A87DA8A8FD18FFA87DA884A87DA884A8 %7DA884A87DA8A8FD4CFF7E847DA87DA87DA87D7EA8FD1AFFA87DA87DA87D %A87DA87DA87DA87DA8FD4DFFA8A87DA87DA87DA8A8FD1DFFA8A87DA87DA8 %7EA87DA87EA87DA8FD4FFFA8FFA8FFA8FD1FFFA8A87DA87DA87DA87DA87D %A87DFD62FFA8FD13FF7DA884A87DA884A87DA8A8FD60FFA8847DA8A8FD11 %FF7DA87DA87DA87DA87DA8FD61FF7DA87DA8A8FD11FF7DA87EA87DA87EA8 %7DFD60FFA8A87DA87DA87DA8FD0FFFA87DA87DA87DA87D7E84FD60FF7EA8 %7DA884A87DA8FD0EFFA8A87EA87DA884A87DA8FD5FFFA8A87DA87DA87DA8 %7DA8A8FD0DFF7DA87DA87DA87DA87DFD60FF7DA87EA87DA87EA87DA87DA9 %FD0BFFA87DA87EA87DA87EA8A8FD5EFFA8A87DA87DA87DA87DA87DA87DA8 %A8FD09FFA87D7DA87DA87DA87DA8FD5FFF7DA884A87DA884A87DA884A87D %A8A8FD09FF7DA884A87DA884A8A8FD5EFFA8A87DA87DA87DA87DA87DA87D %A87DA87DA8A8FD05FFA8847DA87DA87DA87DA8FD5FFF7DA87DA87EA87DA8 %7EA87DA87EA87DA87DA8A8FFFFFFA8A87DA87DA87EA87DA884FD60FF7E7E %7DA87DA87DA87DA87DA87DA87DA87D7E7DA8A8A87DA87DA87DA87DA87DA8 %FD61FFA8A87DA87DA884A87DA884A87DA884A87DA87DA87DA884A87DA884 %A87DA884FD63FFA87D847DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA8FD65FFA8A87DA87EA87DA87EA87DA87EA87DA87EA87DA87E %A87DA87EA87DFD66FFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA8FD69FFA8A87DA884A87DA884A87DA884A87DA884A87DA884A8 %84FD6AFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FD6CFFA8 %7DA87EA87DA87EA87DA87EA87DA87EA87DA8A8FD6EFF7DA87DA87DA87DA8 %7DA87DA87DA87DA87DFD70FFA8A87DA884A87DA884A87DA884A87DA9FD72 %FFA87DA87DA87DA87DA87DA87DA8A8FD74FFA8A87DA87DA87DA87DA8FD77 %FFA8FFA8A87DA8A8A8FFFFFFFF %%EndData endstream endobj 47 0 obj <>stream +%AI12_CompressedDataxyu' ;i`2cEo0ʣԲ-c0hPRc6`yVY7\ 4Y~gW_wwMo^;Żw?#.? MO717~xsO'?˿y_~ojO?/~Yi77~?+ÏyÇM߽9ˆ4=~ؾq2o'z͏ݽû'|o7wz݇޽~oC;^ >7wk~[׿|u ^IaEn?-/Mv߽oxv* csw7w}Wfa MygO_$fZWC bOϽVoNdWb)S?O~ȤÇo<܆D+ݏx;\-oB^7MpǷ߾}a0M,}|MY)f_q3W-|ŧOwuzhw-?|E/>;,8"Mz[̿^5ݯ>}>_ݏI7tiywAw7_~zowqvKzi}֯~_^w|{߼*}kv49߲z=7Tzċ^}?ہ˵ ?aywWq_;~{7 7I{ } ˿ޏ߽{훭l$~+?}?G/["rW|?߿{_]}f^ǟ|WaHM_~wx_>-1n_C}oiWXWGL4h7C"kH~=CvcΞOɝ=Iow O×b2Fp8o//?~ߪ0J @eYjr%5ۺF|8N11tx-x:Χssy:392?Um}G/?{>vhhBT!gic9I|ML{LOKӔƔSJ14=f;<׭l-qfpṣ<Ӽ̇4~%/2/rXi4i?H{{a:̇p8ta F#~3yv:BՆoVʝ.|;iG=L3<Ι:a~]iO4nMyJS)Tx;iގa܏(86|mamlvVVz=UzwUgno)δ43u6ЁJt&:b{:lG:vtCtG: [:oc]^xo{oKfoSFiIU Rb#D ñWt`CpޟX i?aOt~mGD*D!K !g?0 aĨiIoTpÉ-m!C +9b)a pp +pKdb1He sm~l`"\mfܹ% iUآm [۾|qۊT3>ofyyN43g|܇TGj왧{cܘA[Ж;ZMMX|y8|O 1 g!Jl%۲yK?i弔3aժmfgҕ?uM]rd&b^NѵeO ;+=vP CGەgWVM-U;6m7'"L4Ҷii(G{38Dfg y8vtDt>\^蘡! O/H N]jq]/9%h=sI0cMhH`J7я!L)WP=C_azWsdx3D "R +oR? / 1ӵ<ߐV{q+{('iç>/qs\>O26K!>QZ>=1X0ʕ=O2H)l7_cE/?Կ{7~ILF~OHi;zWtP,#dJ!Ap!-|l?kS,쬛unvMY/n.O7PH+ٻHiތy)Sq>f7<=cs}V/:i9W@/f A5[QN'@Sس}tcQ Bs{V%L@XR") (_:fJ<P8rPcvȎn¯3i"kGzLvM!4uO'TG`@S>t4Dϑ=@s a@,YYDi"B #i!t0pg~Y}AXuL z";K=K܁od\>M7(CYM^\YZ65hoQsRb_ҢjZżVW녻\% UK6UM8rH3%FCكJG AF,$AL%2|`  ( 4"bHqf D(*`Q +T,Gf zby{@ak m;g5Y<LpbKH$mh192P (İIC 㤉:^;C +8494d[7_*b}LB+l;2} +X 8g nb.2/ c6Ik~G#_ f#F?>ڻ S^ \G6pyˌ[Ŵ%ۣ獡Xay?l-0nɒc1w Է*f]EFt&C^j_:u ?WH-ݥV- Xf-mܴjz5tCpjZ$Ԍس;_mn-+}jc,5Zav+f0?Geծ_̿͠xfoUՂ%Vb(„Yw 5U:{hae.&2l8b]WܻhQU>vWlܿ+0wj ']EYy{z{ݪq얩I>ꊐPZ8o"ն-;9R,1V͗kͩKlWR ^p .pv}c6k[ڡiǪ[:R6򶨚w3[w8򳃓#όکLJ}P>d3$c.86#fvWZ\/uNGb6sj^fsmiX(+mܪ穜נwqY>tFA=Ǭf [5Po Le|~ytJ29=-Kuj̆2Jz^eN1Dܕ3ma|&\٨mz &.\> JTq)>I "OqV+j+oqXZrk̈́wXǤ{j 1OMD Ah,Boi +-D"F`3ρћ39P+TXx̓2sjf.0v`%\PRQ*yú]4Ɗi׶ >i8^T&m`(2v0( 9(LݑjȧG#ҩ*j\4jipqe HZ.N d:H|Ҙ9-N?*l^^~W[Z߯~*YP֎^$E!"h>{өiD،j;KטCX5nG_Ա{ +^v0Ε Sթ2Nj}?ؗض%OmMۍ]nEll&/iKh$uPvv)젒VZ`VWQ+Fp$ΕS >U]?WşS >EԥԈ;37c#Dmui}uvjZ_5-l*40J{1͗ם)fq;ea|ϻ9;`c~b\lS8O^xߑ;݂g?!`I4HGfFI_ٴ7yjas -*~Im*fÜe"Ζ1[~x\0M&J81VYdkp :(s9rʩD;qHH8&Y{}f4ӌpf`VX f о ؝m728@[c>*K?BaJ R9}DѝFw69C{8sw Z +TȾ|aAP),B P uT 8y6ܺmsǹōt[n+[߅®^tʩ"+2A3\j~ %'uXYξ,DFwш١u/s2!uL1LU1v DfΣAyVf`"^,XqvX|jOy X<9uS[9h&Z''<͟l˧=gU̝W{gk4.fZ,^P +uE.dRjhmQU  u,OoSZStX,S[gqYI5$$~7qCO2; =<~褚Ѹ.%hwL*f}iƖy2ļļļļļļļļļļļļļ<_bb^bbSݽr MF +{aIw}(}a[QmNjP}4s͢)d3]Ҭ~a`S<#u<~{f`?;8f&Tl 6uz_0aYT"y*8`/lR#c^"MXxi{dwrK0*ykWf S뱊UaY Vt%_M*\GIUKEkqU8v*ylyTxSv{&YwQ3!M+'J5ह2W2ݥ_!ӷ5_ Ԅƭ- hh k˜aQ@;k8Z'k 46ߚukMxM 6 bU5uXMA64뒍`Ln$ȫ[֩imqYhSV)"0 JY(m* ;IMIcFxIč!MxǶKM#G^iZI==ko6 GNyo7\;ATnUr|,LX@u'dd>bauICͭRF:yRw^ծdu4 +{hiŊT8@COSyMDzCWBU-u+T iTkm8e< +/AMђsf=bȉDP[?Hmj[gx+z= $@4fipɚ W2isdD%m ݊{K,;%cN5L%â})W%~E' ÝYb9lXAXUg4 < (8AhugNp*IY2(>1O)pKړSfRXΜhcW681hEgOǶLDӡ#Cʨ6u\`߬<=wl%AKE/ ^$(zIP%AKE/ ^$(zʟ$(zIP%AKE/ ^$(zIP7To4[e(JQ7=X7VS箱*bfϝXYظWAƓYYI]_:gZj<6QZbx Fj^k Ԡx_X42>Mi#RhR)<雨3A1Ufz[$Hdc1N-mqVkTKU g)l.yoOH]=o„\|$1s!, C {T 4m +YSNhKfY0Кqv,ym*kkz2x[=sytmAW$xiKR$ǁQ}n4$ gp +p$k]Rٞ^pLuV`yX'*@n(BA?U0l>J _})5c Ck8WQl˥ZId&* +s\i 3ZkpsKZoÅdy=ƭQ+mWQkUW+hx]{q4{iy@sB_B;9 ,>+PB4‹l JkchEtk׽a;ָ]a^nWV]ۭ3' iu߬k*kW@+z*?WH:1n8ϙk iOo3ٺds@'ssߋ:[YuVYx8nӴͰeJu ݆X]*]5>Zg2kX%*a53kQ;ƱU{U;.VUڡb蘏+kuٵB%]\y|v.dI&%-\K=( +;SX&]?qOk7gS(;,E F1Q5S+]ccNi+vAg闌ho]_EV(\ :Ա9f>JҶβʣ5*'EFdu%l.S)쯺솵&XpawEl!!#1ZZZe6{UY^WYG,E] ^{c\w{n:|xc#'y3xšLz'6rcl:cJ:4j X.{ 6!C8$a%酬VKp>v~X*ҙ6ѷ?UnS꠹uڹn:Yesc-^iZW~v񧻼?HS ϒ/rf%&YV +z]u#N3KG0vzM^y&y/ hGFĝXȝªX6֡eM5%K^Rjv -s^c]9Q2YEQ}KOKҊ~vDtz#zn-zKMUAעn3Ukѓۇ12D۟FJ;tMhV6.^TNzU;]ŗk/mݗ?_Tu:Om3%ne|uKX݆+QV|NCUɷV|[E=8 bohQƣz^< +z\.k|l.~tW3́Jg\wC(U|\MQЭt5ƍ!PA-e5v 6bYqWA3!zYVz:aY 4.5*+ylV|nVE]d_Tm;m+%8$iݕ$(/m] Z{N:,~m@G?r~)$Z`=6 ᇎЕ!"' +a/3f8d8<}GD0Ý6_O* +qӢE"4EM4<: 6?ReRVs4^Z"@H}8~V@%B$L]+yJͼRz:y,@ +1hPI><<˶ .08k}y/iьk$t&\t'1iG8$/n0SǍOw;{d7^X>@l1E@Xkۖ=m垒X6]6jb]ݶ P;\x^U4hE9=ozjBt i97]<_V0[/º:=+۩-nUWzXWh|UΗyxu}&Oq>SE]k +u*WrKu6k~_ЯklJ:t-e%*/jmuiUl끵,'Z1 ;nbLg>V?ׯV^Ẏm2ӓruW-vYI}$X2Tm"2Xm9kFf l֌2lþXdb(;XF0H]Kć6q[Mp1ϯraY+vu.'kMh=O>Ng Mǥ=m-Zk}~^YVJJ=~ -3\fSLjvs"e5:D +i9c) 2HEd! y+\+Ss UqtW߾^U]oW?}޾T>i7&Դ./fX|CX;GqO~_tw}#`}GW/޴ 6/6Ͽ~ͧ޿Çw>|@Z/׿y_߽7_Kh2 $ +l(q)½!vUHL@DZ(9 #'t7L~Bt3;s2'bc(CeoJ -BS`rlua}F15 }<ѕ|Dm(Z؜S@_5bx>֑Pq$:4Z:AP4~>Ow8 L#$'&jؑ3:w@盤 +[UDD^GMD2н2Sh!";dE<أHfz)ou]#~Rem@O ˅viLCSDJyBI"s?ϐljM!Nȋf & }%/0yDԅg]N+e { /@#Lo t\%=1>~_dH#Qqjj~ÿ9Pfk`uf:ݞ:2.ܣS=mB[D|fkLEFle[.Sd˪qi=Y]gP:Q $Bj~iSk~-{gb/Щ씓x# jLE*21Ȯd)䱡K6Sr0'N z'٩!+o3J)wR 0,g,pC_N_Fe'aj2YHDqۧaJXǙvqLYVֆ-܏LZ +#tv !_٭_4 as3X1zcg%C54;|E𝁴F`9Ww!m4qq "F02)+cU0,AncaL0 ӘZ3YkMUWəăn4z8mżj&#Eb08e:C/] ?qq=wcJ'"j='pK0Ch45j0H++4ud\bj Ĭe J1Ft03C&2B?_ \"zN8uͨDr9`@hKk8"`Gfӓ >uCàr2:CqZP=CO򅠨)K}%MĔ$PG`Lm%͉7zO\黽H6oA#Wf;'ve*d?SwjF@|y6tp%b437lzI]./dD6,;aȖoÁiěu,6~ږwm(r{@=臝$1b=i4s='3t>C\b/ G*ȫf * h:YgLj@ F%9=&Coƶ`N,+zbl&8$K9/aPsym9?h s?ca v/pn9/yvʪҢC5ދ=Ǣ}*saGh.x+&`a1AtHx {կ7bj%" ޤ.Zqldf+k&lϠ P&[LYcE* =XɎ]0w9' ӆ-E\+R- kX&Dy;x+(.DWaҺs)̕0Rf8i bR=.̅\'cMG UF +|hܸBֵ}h$C: pEIFQLLE%Pפ0Ա7UC̓k: չV8zTSe }eF ^t4HM5ebi:k0I˕\60h$EpUs~w #%J"H p\Y]E sq+ؒjq"Ф3vF t}ʕ媏͠2~ChV0M<>_5jpMI<85TYnî|K8ĵ:s7#jfu7csk|~xas$V[G=@1Xá5)Q'U9P:Gi"k4ކ:$$Qc%-7h'QSp yDZ8(ܽbα ]w|w&`3Rgn=p]L\5a./M+FTLuU%7ƸP6FxrNϬ?.+Q-%Ʉ:74F>tˑnrY `DV2\ݐ­r.+bn|Bݞnv4} 2,A]Iqci̸It7ZJyrXnu5McWܨlf]t[wIub67k5xḳ`c*5HLEz)<8 KVkunA`2HC Dx g_Y0M\&a1mL,-CSc7 Rc$.RJO7,7 a}`Ae* ,*SVJej |7|WF|1 *mpإ^ו>+{CJ_{pThF|2+ Q^ ~ E}glr  L.٧6.ƋO|N 3̋ګIT_]ʿ!fA]5Yǯޘ.W 1N{}Kߴc0gb=gc/}f !5$NǩLG(vd/# +G_Wcȏ;\b'7MIGʨKyeM>Q_`Gqeb lAE ; 9(wI,Էi!>Yf-$O~VBV{t`+V-Yh-\.hmp1Yg9|{ sTC/axMOAzhp#$:O >(̬A x%*pvypP\^#: 1lB^ ` YsKcG܋r EyWBӾq`lGJ\l$u/tͼAvuϳ#! Zf{|3@Gl_ v!mpNz H뻼nhH yQ ya1aOU2`MI]Md2M+ l'u r~ea0\`7>촲%hv%,yNׂȺa +m"5%rҍe~lL~lvo+֦jr,Df[Bp t!^(]SmKzo6 V%(`RCW%jD7*!"?F̡C g[81JHlۤzU7U&5xpd6h.Nd!Er5P;3Ũ 6r%v n #jiL>Ǩl臄'3Yp&q`"1p +A'Na8OF2Gq` &G#H8"?8Ѵ||Ҡ%8^l6Xc`[8E~_nϰƼ^P#΍\ffY웯w,=0r-4OAdvOOgxE,&b/y?@>?$mGi4ugC9q9I9Y3~K˵vOr`,pdE~bo8pbb)~9)C$1!^]ѧ<8,z!Y0,w  ^|iJM%kZ{W ꕽj:0]a3B 2|f_-,ڃL_=pe O>bwGZ¶+itD&`LA2b}0VH]-r]l}ʬjYهaTV+o?'" ^MQӾӶXm2~ۭws'rl >]6a⇯}Ow߀,5dhqr@`ydcl1H +@W R#=v:$,Aӡ]D!eֵ J 0̆Kr i 4@OM@4; -ύ#Xf 1]y,O]yuu[{ʣ%\GI/C)pQ6x%Y!Sj=P^ͯhk }tXHWГ4N`pΓX,_O0NUf8I p[SӒ^Ri;DԩyE ,5^ȊBj\ly.oypVMjhevxj9p!5y¦\RAm-5 ~<&5':ySO<<Y-5f,ѧЛ~f9Y%恳MbxK3%#*1@ +ub0Y< {!7y~8y^tr)mT52i+S\1Y0hsdLs2^eB c&C82^V#|zhPd2ܖXl##a9E4d#xR_ /vo6PT!83k \/FWzj +#\|π<"W;]Zt$Hb d_:x>\/isuUF&1WMNJfL~K[Hdq F_G{] +%^5:i&1ҁ2=UPHVM wŗ1[xXFY[f!Z | 5"fCtAǴ@@r!.ꋙ&fh!(KQä +J4M' >fΐĽ^膏0ÙHiK3xX4dO[Ȝڨj'| bɒgC +M7:gG^PcPv}3'TQ.H]p`72{lV·26ۿfX *fZ'Z/ MJ ؒ$ $X2^:+|| +` )u0c`x3I8I*|X.D fptLe%kI'pj`i) 1R';Vˁ9BJ @ N3Lmy7١JAZflL: +-IfciD%Ь$ZP}թM'8F0d* +XVMǂ +-yمbQKS|kayqԒ Uhr|5EB e mB/u!*Kp= 6AvGB̄Pqx8F=]ayS>w]j lҬ=ő\->_l1 qQUƹt%eYBA |2vrМeIUގ9TGS۔XU-o$)P o0QE 31k3|dx,n' ^#I#v2os-|4x09©4@9JI{#!b^'Yfl5a[ShNLtb*p.A5!}I17@^=YpJhui27bF Ӆ@=_I+ ^@8%zPwWd[cmz&oG; %8RLC#-y0&`SnԣqzT7J#<ԈHItscV^YTѴ&E]B>X[4؃vN7F=ɽ PE;c/l_vnq,^-ѣz䵳&B۹qu2lTQU7񠺠BD81J^Z?FBRnﲔ廴*5&yZ\HuVdՈns-f.7Z-^p7љFw{ nt EW2z[*u홦Ԙӵ7VN]}rkXnm07ֺ\Sۨ}6S|-mѮ{Ů]\F\A01 -DG͡ہv8NS22ZW)V1x`h;,U]DCN4XB.Y|X4g%ҏA$:2: 7e )U?eR &7ק| *+mե^~% uH { Дpc$+# GNA3Z*{CM[,Eye$ [|i+ؤ)5L}$?bsy& +UFr2πqD-;Mbdu>zjo^6F%* 5$4PfRt=GoO!>%(GX&Bώe/kh(^(J`J`-CKM6w),詬5:Sn թT~VBV*X%NvQP@Yy@X_$%<榉Lpa̿ QYensX.<)4-]h9.os@CL/L2*`%aŶ$ZUI_)} R}'~Sd\gFL@ iyM"85y3x W ʬ"!j|4p,kN/?\z*Ʌ];D rywd F D$e` ޒ2$ŦҨIӭqXZ@mi`ʖL1ee|Y߅7kƷd޻ѼJϙNcu~h}`D9h& O_9 +:iv'.(抬$5#%{K +$4M$0+L$J)zb$JafNc^cFTeamvd C40])Ur>&Uh4DU ȩ2X $WFe6AK$rp>KTR. g{.9Җ4}AR֩,eBU(X_(sail nZ|(o! +Yu>/<;u|}6i[gwϘff +sf>9LIyMMw% *GUOwEl&R[ +,.X,,j~]QKzqh?"-J>q&VwSU]e]AzT0j{b +r_wHWBK+9o'#5,f3^r|dƅ#$`]C!ٙVE![4 S؃)9 G@$%b59Ұ+9p$Ufr(z/G4jD1dJLI-[աժ*DZs]qq"CM?L*y!jZ55̥fODZmtH9{vZOZL(FJVo(,QXf*Ъyo{'[ hOB+/fB- */EͩUh +.Vʼn4NbT=E}'*6םQxeJZ_*bZG{PKUav dUU_&>AJc"^>R)1g+7GT,[.ŏk25Z2FQJFJfb^ṡv^ کvYJ֋O;!NuCԽܵ +g;o?`//<΋7Ћ;BVx~0qi]\~jKw72_wYJo\hWw+7W/YzʼZ}#yQ{KxkicؤJ\dU P K,t=pu3mddmMv}=*d|'ó +:&CW@C^ `9Nӱa~;\]8eRR:L$2'!h0&((4&V#9#iNC{$AeYѤ>Hrh& 6:?i ?s2cD;`2q\Ye ec kƠ5&8tf ++oPPS1+(e-]$ĔręM4]@G#_c8/]KXBԆʇdnN:$@\\ +$ń1YDУ .&؏LMH+B ~chBqJ¿ δ%ϔ ]Ƞ$Wq\CzIY i$Ey\TPF +IU7LL%I0x(j mj5<:!n%,Xҏde)8I)U &L&x194%|L(d(hUq_LY,0%ba~ijc/~(dž >Dƕ픃l2Q4:'mLOb_g !0-Ś)$PRzQ?25p"D+ a8 ڈˡ"ɞ +}x_JrfODW23(MaQ͔*`/^:^$9M./ebeojOBڈnIu9I/rZv]Mqpθ7&jFFr㴫Zn6m̭܍pW` +Eܧ[]tK~5`Jn<\iA01VfVGztE}\:pKQ' nJZ Z0" x Q gMcE +oL,,C2d7PI җ.ϼif0N{ؒjPʴS^| Q-_Qʪ@v[W] R Nþ{'G H(8ƓK @3⦐EB> #h/zcx$:e7]jp6kYYqF NYUflCGOm~e[XڸM5|uB&-ɵ`%A ,:{AvB>|ko^vn% @r8|l;Oi5_M\x"7c['tBe`vW^'NPk..02S]YTQ,=}ߛøcN +hox" d?Z} 5XmR8nUv]3gQسhƼsD"F$B7o#kӃj30lpRagvZ9hz2xOP"P;YgV:ۀc?Q."/- +Ѧ9840., ^q0Sݕwl߈A6.8߰kS}"2׹BW }-V N֬#81-7B8,w8l b0sRqqzϞt.<\,Z)s92_yjDǨQ +!N=l%1+ڊ3Z:Ioc/&W9TzOT˶*|lItW}h^HVΙݎcTmU(@=Rjb+TN:q/DDw +=-A3/hM:c^))A(߿?b6>lY/{AٓV#9s' @L' %@ !s xoA]6z ( }Ϩ,݁Lh`_pHdT4 HR>c'gc\gSMc +9gI'qW(^=a)T4˹/}H<V$F>7[,Ilôr  $6`y#ٳ+PuLZ6rNԓ +/DQ%"g F~8vO*nۭ:&DqVDGQ|GʝC 6}RKeY\~ LN>J^P4,Wj:enbJl +>ZztMbb3ldM_@%٧VgttӨ3l4,,2XY˚_&H~ _̑ +14B(`;T(솳c3餏VLD=v)~2`eƱ[!,slyȒm)JOy7&+#XFoJ>}f%[*]Ki@ B"1]zx Bu{Dm V^:m-N6Xo>77ָNjn>Ku>;FaZ^t,<g\uΌq#ֈ_y>ȹ|suq9IY3}2ɟ9EC̀be? ~2Rѐ]HtHqRp>yR}eQE[sDN=?'hIZBJ{o׳;r> 03kǙqA HbACt2dY}x룪RKO&}"6<|bժq_O|ly??˾`7%ۨC]*~T,l83iu.EY۾Yb9j@"b!>aqQ5цi 9NŴsoi}8pܲô*' HN;lRm}ځS!vyQӮħS3YGjg$fnY4䩧{6C<_OIfrN%~~yohqȊ9of?7IZ,DC^z{IͪHQY݃J{Se_MX-ߪ5tTVD|Y +YҾr+Uu8T9w:ZDmW9ZFi+kʾ__-\KY@M +gJThg\]]VBDr&p,ɷtChĔ@mRB̘TWhϸc7ڎd + @p͗ܨk.jlb4}i_Zc#A DP'-2CMY[Ьd'?aA@BhP!_l=CCFqIڽU|6 ;Bھ$U@v?xkc*+R.4ۙK!hiM&C/N 3eAa1)`Ō$$2B M + {jNܛ + "'n%Eu  oM4O6/V2?m>5*O1+yF!e<#z<N"K]#׬|QYVX/`k;O$8EҼl8%v@֒$ !jIQMEUjLax*Vc jL\U"uq5!s5k1q)F-E^Xt6-ŬF5X&QK1ojdbگm-&} +Sk1Gحbi6K#8j,XK۬pZ!ga-L{> GZ+ukqQЄ{k1vZ*i>ŅJK+Y%(kc~3=RV3psb)|U|{Ow: (l۴ kWO~?`!aq/H1uX϶NgIJq1nĨ/Mc17-ͼ7 +b˚2/t˸#P}1VW#Ÿ"֮b1n~_Ř&6 cbD]׾_MK"d&\yOdz;+jV:K[2˱Q<1 q1|=nTF&c؉C7kZ H1cz΄l`C17R ӌ%X1ϟr+)Q9%IneTN3FTNb=.r*;rfNTu*!WQkP9˱_G199TN`$l"&ǧp1$tP"&+3&Ǘ/5H19SY\e_J<&P#(ǥѽjž|dd`z^I]mz|#0#2=p t GA 뿈w ~g߮gbcn +6 +j[}wi 2 +b^M[*zvC%!ZA~êLiwIrwZ<=mo Kd0Ry[eETRIeNyrJVT˕7',G]oń:U3\}/[ [1'No-@-))m^1ӗ7EMKM 9kIH^8Yt3Z:X,kʇ.dVuBCCNj=GTqc҄ rn,IG^\vNښ)D +;})5ޕe5 ~%U޼Dd_YX"?|@65푲PBދU?>/+.T-^ׂS }pg"!lP% Ӌ +ŧm@|iN}v9 \@l3m + +u%Ep(!P^}y-ADBU+Iq7D=$1ypٯ^m"-~7ǭ--R-}@shDtQFWWƔ%(会M'%PNzu׬*A@eXLIx^" eNЈ +XWxz;#;u%lƒ:n7͆m6FcGdVZ/X6i!-i'Cg̯5xvkM K܇U4&KTs1K(#TlrUUosĹ8YmZBE)w9u%R~ýZlfXr^4DN؄pY{=UeYWdQ;vRrʣrNp;/kgQA kY-)LfwދkkoPeA[n*|[]?ZgEⵋgz8?RY ~}{e2a*b;i1?'h\*a_I-հUiC}ٍ Qu)(SّQ23}2嫥cC )fm.Wn +I +wQ/kӭ$,7O^@V%-PP?p!:bOl+3_^{w4< +"3x[#zkb^J͝e?st3>oJjsB7r^:!5f /%ƪr}_ų!^ +MqUHvfaSty]>7nqYnl-Yؾʀ +q+ܢ<̺ +-=t{1nGַtd޷2ddPBFXX CV[zB3"`9#+8L~\TgEХgg>NA Q*5iĄ݈Q޴1mPUNcH?}gwu x}CnYHg7eєq(lRF_uٹޤPqShU?$@5~eW{r*wF_Z֯W8(>) ־w{ l@M^;w9G|m|m>[ ?Ƭz]߫`LWb&yX\{~7~q0|r0)oHoWQ0K"BN/j7}[yKgj|MqBז;>= ⵤV@o'+ +FD +8s~#JkPC|8 ՘DaG~㏳S>]\p;^`U_$>=rn[(YPZ!'f0XJ) q!pK`;|G~\lLkD] J'},JkT;-YyX|Iw),߶|+_ooލ|D0ל0礒('Y$<yy1{|ϱ?9N{DwpZ` MϏ"?B>e ye y-[ȳ-[ȳ-[ȧ~l!~l!ݲ<޿@>eyeye  Sϛug[vg+[vOoA>}S[vg[vg[vO-oB[ޢE---S[g[GA~kC^mubW#e]W]W Ⱥ*K^aiϐW[#cA5W[)ljTgemWCSؐW[OwNy5>[/hjt5>j?}G WDkȃjK}5N}ue뫭Oؙ{Aڽ+\JAΫM5E֨ -[= +>sM`o ~J=.fC`S +g/y?OWX?y6j SNe|6,'$ϫF[A'EKLŌ%bFJiFJBb*'$(%b: +StS1TNG)15MG)1QkLQטkL|5kL|5b"S|Ub>*S1uq>2S1ucϜ,ǮhT"S5{G>L4A1EjaFզiM2_?C^ +FF&#'m:ߵuBg ^)NwiP:?K~ .*NwiJ!*NwiPb^=I~J~j*23=4?$Ӣ4U?ֽ)}|½w{=|jL:>cta?Cr&;455bjhES$l99>-_z:JX*]]&+IQ7,𵧟,๵k{ BzWvb4le. ʢqv=IOnmvIߪyFxPyet^Y_ꂲF_2lEv @١ .?p=g4Sey94VO[i i}ce yth][>!,iz=!~ątUI RwMj/㹤Vd]M`%^0R%u* 7i' b쳬ϽՉ,EZ*jY_lx4 X VIKşl=&d^j&bBaQ5{qj%R^ $.>[bVͫ US {ر^ޏuODNITSb;3%niDMJq_nl2XllrF5p;V#(YTa{(=jsְ$4v\3{ֹ|]&ġ+iPWc%\ҝ+O(+/k9H _^4?䀝$wf=gh ՜Z DN0m,pwH6rMR&~ZmCYn4&|޼^4T^Eq'f*HHu1?X;_ +HR|V# YŴ`D,`*FHYNF~yٍՙ_g³܎jyMwYۉuXf@,(l;L~WnYhsVWJ͂Kشƅíj^I޾'Ǒ6Lߙּ6fW5X1B~ew)6O^}S*VKM!zk ́qϙvZDyTwnǶGO1+nd{A4̔S1;#y\% f5 ǪH(VPBeJ_TtcգbL\kVi]]=KvZ=Z?G_LKNBH|2/iM7ZғT7qu3:|wBSK*B3mVzk-I[T'ot%Dw_K2ztQ6~wE&w;p/xݺNrZ$wvZm=l{Yʰ@-R-ŶDe޼찳 uyBF ̀ǼU:њ;*J_)۶7t‡mرy;B=w&fASdQn+HepYELK*#+btrv2iT %u0lV;F}$$7n,.sTuh;7 S"12Zb@(Alg ?}XݿXm592Z|ͣhs۴x7WPZeΐc5NG_jP;`a0M}`pܳ ڼ_f?GŴȄD 7ұbn;`%H' ˆrh]P< OuǷ!o{_ fò*% +ʾXmܣmOrc,5 VpU AQ +Qro3S}sbK@*b ] G*ٯ21wtf#12jE]~ŕ޶Up+y޿0`|Y}'v~Os P}e1Vc/ +?whyhFؑ6عS74MAk*|-!vN;PU\yhg3яXGLߙּ8+=ZEtvEgw?bH Ei~OWa~za~hP4ʛa|Hc)e ֻQ{xCG/`-sι*[uFڦsᒼ#vPq?nLl+CYEy<'QIAފt3C%VC̸fS@%MJha'_4҅x j8|$ڳfK|nK 7 ヨ=ou闎HN0TmցY ot{Zo{Gj|X.YG.;&viR5/V3xo[v;& i8h#[kO`8pH>/&|bc,/,a^|Gƨ{>W?Q3zl|Ϧcw{Ro~_Wo4!uٍ<¢qп7_?W?/_uΎkjE>ᄍ'_? }ϐ_Շ?k>W|__:g_|//~87O/{4o{ }??K?>s(W/d_7tſ?_dos ^³Ȣ/~bR3ަ֟mſ?/~amtm7}њW>m>?%ӟyX3~$/n':tĖ ^g w:fJ6|{aM)1kFoݨy5M{" K"4r e3 SAd;CV+#R2:H*D=b*,Ey 0s;VDH[jkJņBgLע߸Đ4-.|WE; ^`eJm|1b/{#3+BR],JM s("J-Vןr0u BXUϺ&ҮrD wJ}uso$`K@׭ Qh`5Uݻ2AޙxVUS|T+; D2=;#$G%$^74U֕xnCtJ G-Q຺lT HztrWê6%H+fi y|ӻ[h/ld/!{U_U3vw&u8Ԝ$7 ý4.j %k= mՠ(B>Gj7,J(YnuItNJMK-4tD[LhxPL@MF3ӔiC +^قtٽ暠e@Q- 3s^,*· w䪁_-pg<SGQ4l޸k񾏋8~|T$*M#i]G/75W#3ENA /*KjF>],z[|LE%ih8:ST)H~X(uSg,|uQ^1B<)?tw̯{ ^ej!?B5JՉR_Z0"WkcKfMJ$$RG!^24lf4 v| Kn=20.QԽlOF9:0hsoev;zOd7ZΦ5P :{KVd1YZ> >XR0.T yv)"A!۝Gݶnx@SxX>\{dڝZnqBY]86<ֺ3Py\N32E0h@NWt|#'0 +VT 0ovi|dg'E4u0pboD> w˝Na^XFW4KLB %q 3.&'6ĶpIT6^[/~Jdc0]J[\檩Nm7GX|g|Wx +"U.xiN/%8nm*m}u)HaCHujj4( ŎfPlhY%@j/5|P(s4 R5pmܸԽqjNW==Q6 k d@~xY$ܗU^LKmQp,oxμ\ y(%>t1-{7eu6yϰD=@K/ƪ UBEQwZ;6j۳.+t`%5P?#j,A G,74\f/&5Uv;y ೕbWmrS̶.!ӼY,?OAKW`J-fW>"YZf,_ڣ-[nSnY$D$KDӟ>ooPucVtc{]!e>Q*|wai[д_Um͕CZ>z408.YU#"PA^F}UdM҉ʊ40(>!Ij5L6Ym2Q(EZ!R(C"6\ĖOSQDga’zENRbp=ަhR;D~ +ķJGJUQӏ"eU%CI9>kK8e 8lnޑAE4IcgRnfU, +B@ę_#L{crL;Uc= g: +pQDA̰R?Zn직I氓GH]qy\-F J>ՇzO1ڑjK-DZ6v_q+7ahȱ=u𭟄N!"]*@>W¦n:mzz$jAz`(C3[ʿJ'ihLXw-Jř)G\LH,++PF,z3Eqx֖]DX-/Z9V;S?)hшvhE"Hȶ.NOoޭ,ÔHO)\l +reGwLgqU`WI3,njUie}C"&Lue) jP 3*Ӹ|m_Y,'TXa^tAZcT2ڌ8OTJ/);Y ןPTnW8GIW2(lmv8{~VW1\g!lϼ^:`b FQ\*dLgi/,N< + $j{srSWb4.x(5$J󉥳A")ǍlŒ>u+i5)k*RmSTQך#;"> +0釯dSjU9EMzSyCY-}l̛rqlӷY,Zkų6\)πZ$R5A~EY*0?ŷv}{XӔz #eRV0IZ7(̭JL1>\cmWVUD#`KˠOAbdogUN|7AZzNe&-LPB- &Vzq.fTuZV L ,$Zj=l+X>I\$g]l9&=^)1n(RuY)`(ݽTԔ30 MR觊, x_jҶַrȈ(3\|d Q줚{P8׶FpV vl#ekÊ%e4옘/1jӌrEBTnV> 5R': +)KlFt`"Rl%lee]qB0u<t@ 3L. \fZ3^K*ద"]\J' O+*qߧӨSJC<_{x DQD$UIVb;")b\K\F;mA.y0MX܇1ժ3i4|rPI^*b_[8CmPlU/p$R&^UtK9i7Ͽ DhVT:8 W<0oaR;8rgKwZx:2P 8%BY8%3}H|+YoE*1NQ>I60ьؖ)r pɶzsgj{Ж^mN"cLD'~e U-\bXfFڷQyEq(/%&jBҢv@?lb|MRqGg)jr\Ȣ,E9byː9UCN/L²J(+it{S$A;e(R3NʣԶC><3bPӯdΰUi>67_Qh͔1hakW^V\gYi'!*(b,pZ)7}"*py +_8Sf!#@Z*T)nDe&l'T +W/ fzH4ͻqEVҽ +YZcJN\;xת2AbΕݤ ۼ/zBMA tQ 'ޢԲm^dzB( 7&G"SIç{{TV hr^gʕn^k u=Kz r)3a+źSA毾ʍ]m6‚㝹7G]e)K̝30戤f$"$U bw:luO$,XC~%9/r(VUB yWrp7ETJ3>m]BXMnio+,x#wS4nRLlL*_,iL~ OIFo(Nd!Ҙel +?Ũk5>iE[ IsZwE9WS՗/#x][զ( -yzsbJScS+Zt$ +"QI0T%c,MqYf]8W'Z/u^ r;p;NuDԪD!u6YEp~Ir;x +׎:etNk_[*>>?!tՄuD +طn7'Gaz+ڗWVӃM@ͦV! b#"Ztġ#2b^_Umd=mAY= oB"vK4vBWcCeoW%hS:f#ʔHh|S>K=; ^k{VD.n.̲ YVIKKt,;SU0RdKMdYkAќR8JbޗwCN s=i*Vng1vnKڸ `b@qԤa;Ԃ> %1hW!r&R=^QXͫ*wYqea +#]][HKfUYdk"m_ .~}[Fj*DyYt/Nk'ɑaT^0 wJSIxbc)<iKA틗ՑYQU5Eq $WJr+/ʃp ]Pur`K՜bt>,Lb^$?`U4P @J c{"mjiԮi\UIhgqYrJ%ȁJ` [Cu I2P.e }Ϩ$_/Xz6%:_k7QF U(,-JpŬխW3BGH oBqlSVå."BQ/5/hS8W6/3GOdVo-S""KqnTʪF HMpV#جSD03/QNb,CDmWiD;Vvc6f]EK!v,i 2"V)0kWKJNtaNZ.tsi|"P[ M癕kQ#&f% wKVP3B.q6Zٽ4iU",V±mF1NltXC hK/71!RXb٤4 z=Q~ԱLBw'mCT~:` 96Ke/W"oVI +?i|+MfsTę9; ˉs^~Uq.ߌKݽ +Jǽv6}"Пn')S}/sKo-+SEMÅ%CjJ;X +}Qvvks| ZLXp[0U#/FEcJ+^?5*=83H)PUPFZ8vfJ"A_Rau s̲{wz<4Ji!u)ʰiæۊ7YlNtNM+_u Yn]/(i]{H +%n*qK5zU|W,e᠈rzT~=lTz2estVđ2ߴ[u;mM968Ʃ?6YOz+ê"-MTPv;X)L+=0*4t듷ue˄QBV*Y"'Z8QXvqZڏ,^Q2F>/ +GxrZfU$Z8e;G^2iJtWgqJ{RA6)ʥZtjҐau^nC{GAq.9-LVHߢi k"V/Z{G !h%&A6%#Lu$Rc +j'U?WjVp|'/fqu[f9rFy pYbe E4Vsڼq%Ra0wew; ?Z tB 48[#J<0@/>n,YPEvuɢAFkS\ +T4sXͅm//(Sv\z I1Jh~PhT#3zԶ@0L콅H +#x3zXtpMm%@N[ +h_MCDWkct†kbTosy) S_ܣ*)]1КKE򫧯DfjԄɸQjq-Mx(딑@j68MQhC],_,S +P[w{ PdGC%Z\)ȥmjZJi]+Dd< hV€tF4̧t!!ǺFy2if~b$ +Gz~Fl.Bջ`n*D¸:7ɒR|}ZYvÍh@wA=nmWQZ%PyȰ2,{: L։@&>@VR,dȅqI'l=@Fm& w5X@@FE [2ȸ@v`%Z0d\ eayȰ2,3 'GbS3l n {y{LrpdH[GVcd<7 9A&sf#LARf2 Ȱ2+Sx"PhdU2žoYYCi&'S A& à@&X0FrBU:'Y-uFU~҉ eBU?d AeFay#jiY-AvO *sBU5ZA& eDax#Ȱ2,3 AVigdUBA#(??d'd2l Ä ''6 Ȋ;\H +Tw2 AVz12 #@a-d& OYBpDtu[ԷH*w@aDugJ. c&dz( ddis~ǀ +2=dn3LwN{"ȊZY"d@ax!J-3Xs@uÀ Kc ABFY!h="0""IAV +Ba +lX Ɍ +W{#0Nb1"겼d' AV<#ȰM2F OYQa@1L,+U,/ AF΄ C 8!$4"$0Dd:iDc2v #D;&gM2mZl q@A/{ kdidi AVQy!ȪVAVNdoM2h'/80!0"2ɧ#kFUR#, #AVًvLk@mdR&y"dd27 0!Ȫj2iB [<"lL<dm̠PQ7zܻq@/#gB W<"0"vA&"AƳd8A4d`_ʦD6L2ędd&Y=A 0!AFrBU5}2m^2&3 A֍ b2yo`$a dy6tH > d#q"u@ KcȪ6#L/D H CE TH dؓ@H c20a Ye$u{rԙ@V;FYQa&;@v{3 7I m$a A 8d d2< d=02~ +H +"R7S{"i$adfd: H +"@FE c0Ȋ:, #,I r )BD /23 L +xȰN2 LGdEm#H$Z)_2 L Odd:s$_2~D + @@ OE +WdLda Y1}$^BD 6Ⱥe$ V'(tu~Ƌ@&D 2Ȱ dXg,L D R'Y9ۛ@sp|40Ⱥ5d#]@Fu&)8dD#, [@V2o֙@e& dXg,Lgd*wp&uH *Lr iydef`IY:l}$1 dpl&O֙@&D ә/H|$ayȸ@VȠM2Ⱥ5d(|Ȉp de;2KȊGNL #"qH +KXI@VJqT-O2Ⱥ5d%OA ;_2''@&ˋ@&D gM2L #R.': dȊ-#o@V5d^Y'dX«I c9@ "M c d%fYn L #" dčf78L 7L Cv&H$q"H KH K4$Q$q$х8^$AY‰@VA qI tO263&ʚ2 3 @8ȰL2^2 d/&ah {y* #@3ȈldX'd2YG' @\ @VL @F4i =ѱ<ǪO=3Lhq13 ?eacjcܞ7va⏁|ucb3L1?F0l握=ǘf?F:xfX?u2d!2ǔc\Ą7~n?VU<ǘ1*G ?c|1KU~idaL>k?ی?<ǨcD/1?ngQ'9ǰ2T3t u,fC޼,e3̶olP?FcɞcEO?V"'17Ss)f'c%+NJH^3.?~U;~L]I@1B #~ N2w#cE~L'~̚wv1E46?VR4c$oR~EcEnjSm%~ ?=q}?6[B+%*&~?& ?uƏjF7~sƏ)?X1Y' ?8ǔMcX1?eƏዼcEX?FgQ(jc:~̌2"Ό1Y\JN|0N1 }?1Sg9}acU>M:t',OXUsEcUԙ>> c*Bxy>c9Ǫk*>FL X-˃>ƙ3}‘{*]}=(|01Ĥ:ǰ1,oX 9e}xC1oN1]D>c;cc4!>cL})gQiS2J}Hӄ3x?'%^1YG>Vb)F}I3HS~o':l&.Ez>V2V15L1R(oΜcU1>GM*`cU^HS"IBC1z6fo'1h9xǪ(#}=aYH2ǰcXGz&,O#}Z#}L O?{.L1R/XR>1M3>F^}1g^1Rr>&>&B>Fx陎1F >{0ǪFc~T3Ǩ c,/ED|j6~p2&y>/+ʹ1#𱲭3|SW>Fh)0^q$SISj\1F[8dcv>c&|+cu;gS >?x'_/k|do=#{Lu"#{ Ë=&ads14'Um{IdILqvGgu5K;WLRF1ʑ=M1I+cE'z#>JG +V&,z̊Z1Y',zLDQ23x 3z[FYGX۝1c1tF/&F'/XjQx@ucT2(yǬNqDUncce @ͺOtFc*:zdc1 oXQsD5G7zL=& =fC+Rc܍=6X`uP'ro[''Xn 0o`FOc2:Ǩ}cEoO%3zD'@ǤBIq@IqB!:ǰ1Bf'ؽ]zinF>kB =6X%'1u1 3zLz̬#zL =f?+c3zl n XQ8aD=zz4uG{/Ȅ4cuxǴwcTnfz\ی'zdFB3z=fE#z,Sz tBU 71z111yBqq3z='< e ==@'zhB):QcĀg"z,-#žzLE#z=qBac8YOnDե4 豴zL=Vq1[> +$X{@1 =5x'Q'z ۈ#zL'=c21 z =uX{@q@JsD)DQO1Ǥ;Ǫg[G#BcKr1y <<֍NSHӷ=cJ1 yL'yLƁ<cYo5LjN1 nc)`d~T5O䱪‚yL'ycFX7 4yMc$1; 1էy W"AKcǤ7cg8yLcO1<^'yȉ_qQL޵&W{ P3:-$IjyR߀$D㍖eY 2M* y%J 4?F klg +c㸧r\\e>WTVV_=x&y >'g{/_w#!:@~QG6 Ejך1=ȯfY_ zvǸ2 %q̡|?0%ı{&~I;/1=G})m.wKnHϻK|%?W]b| Lgj|V^k]G9HɎ{-нt/;7^Lg| +.fںeOE#:ދ-{-ྲྀjx/z4Y^rq:F {O$bS}+K8RQJ{m5^z{s߽l*}Y9k rKrڋ:NnOd/^m%WMB9/g2(f׻^R.VSA WL'{2MAJJ"{m5^ .]g +KTlzGKLj>SԭK&2^wE%|FzaqZw$L%BuoD/ gxc_⦁26* O BP.==!uKXYtMd^z_uQ.F eܴ.R*ch]?BtM3ZW{=[~x-Ẻ^ %= J@G K&Еi] zȃ֥{B-`к +K8u1 )='TTമF[UcwZU[8 ᵿȸ.-SNEץo,K{PRBgQI|A@]e( X``4mGKoE%%qpЅn@C(_ҹ|.s]2|C0 <:Jw;ṡs;Id.v|r\/.VXW˅73FpU .AO*2EhpH~m. "cX,\(f2_?ں7o s'=ͥ+F,\ +Ruh.'ţ1Ϧ\Vd vsɲP%/( ,m3\A(v(;24\+ɥu\sNjMd=wNKwgISE|a{d.hFggYZi߽Ptzs5RY*ЉY ΙYTe\ ,Zi/ X̨],:ERռfe1Y8YaM8&3digo"1N)Y,T,V@ ENM"[hQl=:0Y@ξ)YpkHgJqrA+k d3_dUU)׆d]*,TbB!,d2$5 d5=}T=Ion HYsv&ɢ@`dRZ,)$Ku: $ l5"';#Km7`3,)ω !1:@cd6QtFΑfdn܌,oƋ>O`m;(Y5//HC@P.,uHegː,ސ,T[$T>nd5}nHVJDT%[dᒨ`@HnE2$ [юpFi@_I,))YkM2CCMצdIKbQLU[,TҀdaE YR,!Y͌dѕ|wCgeH[xwA[tVd>stream +87#K`pȐ,^?f*R!Y($GQ[PP9J:Lɲش-ij9FGARrʲr` ͈݋ʚ1$S9d)~eQ zJ256%AҟdJEؼvAɢ)+(Y~J"MDQP,qƦdq&LR8OPqS,RdJV{"',k)YJ]XFdq&d!,ߢd{غ$(YU37%-kd))w +LYG&d=tKժEiJz[4L h"Ԫ M՜ShJ")YdƘH7>(AZ YX!Y(%1dYB1Yt90%L~ d,2ůgm]AYeNqP>NplLϜ,S)n?6ɢCX!qQe +R,s2*KYŝUW}H`&ܚ-Vs-A1yUލҜ (͸iYPY(,+٩5q=XYYZo V` *뙾bpc@%j%Ё^zgdq>Di諅" 3*Iw5Gd!~➦i΃`dQ?e0W%Y*Fq⳴O FjMYY< D[gq%D SS~-#4c,lpW39#ڌK$PYT9# Aٜ`d9G2$Knb +~ KYXVeFVg3Y[H-:# QuL`[0"V91T,͚ȒYtY԰Pk`dIĒY k!kA$rdsv|^YK(=ddu\0* k ȒY 2 @dIdY),,Y@ûE;LB=~e%"!;x'%BQ/=_1 di/J-Y̑L18! ̬8hS"dIhhքiy'hH,KɚEXZըf,8!f*%3! Q d!沈a9 Ȣcftq2K{pbҥ>w?C45D$Ṉr>wc/6XTTuޒKjౖX[|:DGzc;Ҿ!bv" 7 +& c9E#=2 : c +2NO^E\'ca]imycOj븼+XIIu [ 2mb^B[Lfca@L~hCsX[ 6|s J 8Xf)!tWL;5@pݮM1lj:fRp,6^}E2vLBm=JmִXDN  e:jͺs\@ AȢl<+yFbdMmD:Ê,X['8yy]X4:=40aYk-uP "lPb[baD3Ԟ%f -$m(ҁXn\v'@mn%94, X  XXau; LBa)QF. k#5Z: /Nai^lYv0C?4: +)W!c牺дpޛ{E^m%sܫAY"Y}^A/x +롏mJhu 1JV 9J:vؕBf3XgGLsx +4gЕJ-+ fRxgW-^qux=^ML +-V,bj+؊0?_(T-!V[`+Sd mH;Jeg`~Q.)P+2: +SsċV+Jz΃h0Xt.gu-qT"pVjhe"K8arr^読{K*%X8/VbWx6ʟUhn4UfxwF¶H!.MR{YUPǝcLCy +ŮP" kxwt + ܁cWpWyœˬdaP\4-OX"Wa}rUQh3O\Y'8J#=Wѱ= pۮj+\e,p z\_Fk \Ex]g*V[%-}pſFl4snj +[8[*AVI.U8}'Utk*Ds[Y^ԋtWOlýA3EV1[ RRX$8?FuOHP2jARI~=c0{U[GG¹UK-:^]"Uh89ʖ zŧex$W!U[ v׽TZَ6ӫSW'ZZJW-1UsѫX@VU4)0B7U-ë`Vp(\kYJWhA;S\mV, WIU[ XU^EGk Eҝc*]a1[<Į +)U[ %t'8JEF'tFJ坍wAWXy + ]#,*3%&vbw2*]! u1{aW+ibW U߉]eLN"EnBWYGzuJm2 +Q:stb,2JG1.:$ATHQ]P2:yeeU[tv) v*dC߅BP'u]瘱!e2 +#-]ڢzvJ(plذ$]utK*DN2J-uXɃU ]ZaQ<*qyTYRp\m'q[WѮ`UԼO's}[hailPwָĬp//@V=Vu(@dU)|nv):*]hUK ZXkn_XUjx帿R U}BfUMs:J +mRf\SK;&U |`aʪWEA86jno`Us"rc`O; &59jbr1+&{;1?DV:5>WM%im Mk ]%aR, `5T!g)2oLJV%ZVn9JNvC%q$U3 P[h@XLvg aCj!XoGD=F1NlMWJt|mpjGh⓺vsU\,=sXZZK)oQƒU*5RI J8IgM{>ywVl/ʙVKUg Ic Z DbrXؕcЗxm|GBKU fZ +@E k(ɚn8=OTG?~ +wTD,h^N =QN^% U#g}2UkWnf WX)=*vV27}>JEPImQ8,X廉05a Kc/f)á+j(bueՌwSXx~_2i?Zsb+ܛU-9b#XMb\:U}>Ng1nE˰%󓰐b7}/!K5*UPmцƙ|yUƾ[*[@ +N +ho~KO_硷^\q +'434Rz\բ@sFEl~Oa7:d +}ch[ifl%4AS8[SZ^hK'av#_q[{mMuL߮/BTafF\"b0嫅9DZR[XlUcʇjݽ \J)VJB?=D$aŮF~Y" +։fݡdauFw!F1]?;YS!!ZZ#e>')Rj-BQV$ +#̞,n …jC++΃([2ymRk'qWB_qNU!MFxI"aY@'fFSY{iFqID=Y(D9PXۨ0x\Up&Q*dY1B.X*ٜhۮ۩ѭpp(MyvEwqJp}@^oRӦB9XA]D;e.%IȥmǤ,VT.\[P{Sd+(R^qrDyYSe ^8"ݔz,qQ=R,t*2ч_Y-OumJQ RwMnvϴ =+܊)r46ߜdUk}IXZ iszwbv鱺#-v ]%%you‹#ҮJ<,] +}֙Y8][UG4w8JcP p[zZ>NQWm"dKnR\RFDŽۖTjAZÔo;;i'}uFO_яdq\cC5# 8-f߼{3mBeSgN9KqXMkaλr[ݛ쥙uh/ͽ ) +͜NT!;r"TWLjp|cyʝ ; {Xq ;S<><qC>2R/%[Uo֕R{ +2UsE\^2*Ÿ8_Sg,ؠ/e㖦ID..(7ʹZ P{cN^f eRWfp(EEyRk +jT)R.[wNOGZO!!m)BV\÷]y|l'"uxMQy4 T[Z)2o;7c!MȍFŰBt)f[) lU'rWlFfLJ 3iQ!Z&NFz]G}G@qELZiˣLڄ0E^PÆA"lFRO31)²ZhEwbfjSԔ5%rԴ})Bϓ&7L@~+\Қ%:[d)i Ykgx&8N~Ra |ω)KcH;a ζaazs`.RWw g4!$7.%oEH} "˜*5)_8IKk;)* 3f Im v'l +Z^L*]ߍwK [ib_WZ^O'Xi6_e +ӈGއt5;<յrWܒil.T؂Ʃkqn)8*w͙D`@zXam*JD(IU T[uyid6LT}I"@[PMݕ=*`o/mQ6lL.H50c6ZNSmCǩ;0!,;1&542-iDeo2vKవWe((6HeJBrL@BU56=I|,~k-ޘvC;^LT{ +V"RȤ2@VYpiQs+BUm'P*f[ f봤౓z~ԴϿh{+ ubR1c)7qJH ~ UKN딆)K!=1?{%3'bߘR{핂F(2`wF(@]L<l!gw(Q I6 Qiinwnp]jJ'μ6IY=ķd&\&(+pQёPP*SSB}Zo\lܑKWў}#'F%uy5/j{Tg9[kLD=gPui]cӦ%+:5AUpIܫYU(**j Cn q| PmTAIy)_E֭Z,8R$Q  ,DMO/7^30B4)C;pJS(TTj^T:Pp_YL3AA ,FCA2=5Ǎe`3]ܵ]\0k3xW: F*LC;gT:Zu5$H5XQBi7aŰY?y^7U=\VO/T<*I8u)iu0 +:.bhrza*7*xg:!4~Zl%X-j#@uou?LQXZA : ;AMA_yyHC"W5)18ޛ6lTv8BKd )QOMtb鳀t;fs8S7Se./jG\N禫 l10."k.yrs%c/ Z_~z _3q97ӈT_[ DtK++KM^ٓ|c.tX9Bch'@:=?†==H"BZB%zBDrzRRtV,_E RB{{ aOUU̓C&5Uvf΂1_$ԫې|`ؔe0 WlU bhrAݷ\K4^|8larvJ"mo0JYp + +F 9vU@RK@.z*u1VJNj_]:I[ɒnU Qs}`n9HTD<0Va;mPCM Rh,PlS3 Ħj +}z3)gjIeFǻ`K9oyCn+!'Z;/6P 籓gO Zk춙>WRdܙTP +M @6U>A`-BdvTBiBv$& k %հ5j BUx(?}4ф93 :tU(WRT=v@&i+Z}Ipڨf`* EdNž7L$2=0<vEŜav̊ydd7cQ(k;[x?hYՇ[j\&ؙУ?v\]_Exvk\6-p]7b咽,;#͗X-y NS^UYr$Xi#YӅxކaಈQ kl>;n}>m˻Ϸ6NlZ2a}UW[ k4REC+vzx?¼RNH4_n' {–sX+l; $/vv;9p5 +ڦ ֵn,-A<`+~l㻝r rT`^!o'M>Fc1Po~oFhCà^A }w/"S5$zQ| 7=Nl;zےnjETUb~ڇX f;0PmM15*S`=ƽMr2ք (v^LڝgvOJŬZ}y* %M*Lzu !Q(}#h5b5!/KAS_KEp_ojxQuJP_ oJ8]T%ƽApvB=\4UvߒO8BMXхYskBzVyCRN`ɘݻϴ]i]DA9_ 2@ r[7u?lo0gTWmv˥oT\ h[,Oe~7 $E3g>n% i4] 4QTd%g9o+}ٰyl_:pEx…O },TkQ<81כGTCęktzQ'^>cćO϶|0f޸ uUΣ_Ec[hM{@"?p]uKYZNxj^ +XN3ŵDx,g47_ b (ww!T?i$TXn9XT$\B8kf]Ji;anZcZ>F/=_aV4RK.PfiE)wq`JkNV b*cݴrӚ=he& ʶ" l^Ui + q㚷*|O1R}JKS +;Zџӎ _+ $J2'ۑ7U'ף'afPbrZ=ꍏvI5ˌ)WW m)e5{r +U!*[#=Nv_J<TȬj+41-{5NOmWT{wk>V۶0'imP{z$x|=0@.JmT3?SZET7yh/bOׇ71t]6 m(8Y*eC6dn }-űr48?yqU[6۾_.R]JavP sK]670TP4D.: +<7onIFs`[mǽ6'Sn`7x +7'8rN'\j=|cv#>;\q[饔 TlO@)af +͜3k&`uH^fFS*] Ι;Q[I.E +GX5KW3E3u:o?=yLCyƍά,7VvՀ͜#ΔjfGtN^|9vN4~v^ۣ30F!ŠE!,{gk#*  47uN9L8eeZFL!4;7M R̷ږ(scL} ֶB[U3>,L 8zGFV +qk!+ɸ&'n^ey-T͛ns=}>]DŽTk $*]؅V^e1%#tg̗6 +jyf:Vqzqj'R xs*,Ҳs gw@!y}L(f~s%7dhn5cTJj.H3"WP3/ [PeÅNۅ+ʦ_u.\#qSx6$[շ%7=Hy{ɩ;}@Cm##nvėPup]귿+x>$BeD0yMSR.ˑ>TU6I蓤(w{&{Xn* Bӽ=K]ZJF%%,`Q^E0lDZkm:c1SXxhX<|pVf|heFNZÐPr}T\mY!! {mn24v+Z^*5R-[8ubzX)-4^'Na赎,/*QibD6)7rKč40JY:TZiS( 6 + A em9P3Fz%ncxv +u&{]JQt'ceh5s+6;F:f] A'_^Z+ԁAQ."ye9+pvgV!O6wAUG=9(QJE`Ki׆%^ |(=ᅿ}x6؎̾EY"nBBr+?/bnу<o0yIaÕ="= wI=݌de@:V>U;Kd$O.e.j4.Н>YeJ/{] +l`mqHIKVڴ^s4E r +”7 5cC#Cr7Bcb^YZVS8{@z}jؖ m( (ډӾޢZqZMQ*Zz)iI}Azfv^*v_,5albւê +BEã㪻8D< \2"^xbDӂK#Ux#+rx(K/O";E$/2Cē{=KAT%!)Do"/D$"V*Hw"J?o+D#2܇J!⡌+8CēZxL&I(-D< +o+T'/T"Vu_"=ej_x[D:O/x` Ou%m[x8~xdi +4}xR+OJ% x+P>DN$4 U"wR%:_"RRJēӗ'p*D<\>DD(.DO&♝BēRxRD@~^ģأ}x )ǙD23Sa/O +2/) u̝3 @<|xR+Cb ( (M[Q:I-@< /83OTSxK@%3e &t@<\2OCJſ3/iWx_  +ijxII@G1q% jI@<)_ ɠ|xR++/x{^Ъ񶒁x[ UxM ˖O #fZx[@ GGqQWx= +3+ OC^Q\x[@OD O +%IVV nSWx 'P +3?@<{3OJU J+o+Ɋ~xz+O/BiV & +SaG42@ d ^RoSp7?@<+|xg g~x+ J/)EuIGxxZ}x8TxV%g%%@<*;O_[x[@OOSH Uc)@<)FSxjK@<\?@<L Ϭ2o+UqxXx ?+͎87F;xWx~x<t@<7 Óq/ OJU2\SldPyx}yxBg=ȗ'8,$|yxG|yx9 +oh;A(<<ť*_4< TixVK^ixLK70)E 3 Cã. + ?4<-b* O_?B|CÓzQ48< + cp/8<ݍ#,)Pqx<tYdBAGDVqxtQOߤ?%j!u&]ÓVJXT;B5_BT,_G%ZpxA p"2ѣ'9f^UuGIюã'?8<* p"9_öPT^`"CQ iiB~i4cUefgOiS(4 83\/^ᑡ8< ?8<"X2 +gF8<g^8GN)[qxTS}px:G#ZpxjZ8<;3_^>qx*>8+4< ]1ixԡ~hx* .c&/ Bc /4<&1~hxAÓOY4<) ŅlЬhx8SѻEo\ /GyS᩵ Ek~ix*64Nti^/(4<~ix6.dz.@_X}hx$ _٪u1hx>4\.4<)_*'4  GBf!|XxYxzF+ j BCa + OJe :[~YxcGKaiX4?TS ۗuBe 4?_£䥠|QxRPx|/ +O›QxXXTh;($VBP]`Ap E!JAIf  +oೠ|Qx7ƌ›Gl KjXג(<Qwk@yRnRg8Ix72XSMxD&b$<vN“&!$<w/Hxz,|$$<W^~E£C3,$<å@u1^h`($<$<ۼdueD۪I}%=2 BCL$$}\&4gBJ&m5HxZT$<,D + 6&m!$<2 oD"!M³%e" %I,$PHxfuGC³.L{-$iVvVB7 K) <GZTAx|T᭚(* $^R7V+wlAx'˄/e[Jm5@x[L c <)+ϔ_V3c) eQIEdEt(~WvZqG2rdѓGg(}%"+Iv9 J-S@vڃ]9vl#9ŎZobsyotr8O"ر7OR\FGbiॎsj=&@t{/z߅AˑNG7NN7H~ȘnM݅,Şkuޅkޙ@,F6ŬY@(ao%5ճ<ǵ tR tR|@ה0l@7mǒ@)8z6d`Z.94ʅ?»i @'\,+\fe&- @.? @װKsj??qkohInٶs͢gI=@'8tmPuV]ï!E3݉ A:!ʮ ˨ {簒 ؜9ɽ =}N>}?='aԿp4乓6{.2uwnΉ(wtnc!aD!i{P{3#nnkF9U9Q\9B z*WNlJ+Goʡƈi:83">Gd9=Nwgd9^B&K=7Z{==/{ۗ0X\`9㰱ÒRWOY>ٛLNCog嶒r[  Pž֔]k.ub?,xklbr q Um%`9bf*k*Xt0#s, jy85Mc+qi͓8Ї^S:+_-jPGБjuȝv*#9ZN -6sZr+gD +3Īt!R[ ڗmTSx?-z7'mZ.) -@5B2xgEA`5;iC r[ > q +V *1M3S0ja;J-lw4Ng~m3`9)8OMO ,X E1@Ym%s\9nӟ +|`99X+"V̙,g6AD9-JV"ˑcz ^VE,LK:od<IO,!tfEbd96YW Ʃ[><؛ue7 ,V0 5~d/T3m&5XYoDr͈fN + dPR>o t"L۪Q䚐#*RLP>"'9㸗VomUdMNCyJ3Z$ %AUT[P䶒)r[ ^dZ3Rl} +,9Dn !%g?gjP2F{J99q |)zwm[IUmPNGa̙2@Uo5qf9)kJӑI V2@nk2~ý5*Xp:Jȟ+; < SeZw{g4t^^8|+_4w߶]D8puTGm!Q8eN潑q Uq;l`+޼RIQc"VymXC+'_L`[ؠ9't? O] KLpwg%D69'fiٟkᶐpK 0xsߢ];04 Jm5p'npb pʻY=@pl*3-$-3{)ؼp:=Upڱ]{cᴹ۱]&{ީjoi8$ +@ ۪ᬚ,>j[e0ݖװ#;K}6 +kÌ qd/0k S|`8l`8]~_ +>pIMT2S#"ISep賒Jp +Z`qV2!ޮM#(?C󚷴]p N gi#P(8|TE)d8TM Gq6pVwW4'&}khxV3d[ I^ᰔEG8!c/#:/UǬ\8l}/.JͅLSps gf+n+̅#^Ow hX8 , j$ ~e‘)^aQD%p$I*o˩p.+T8T,*6c2 +Gy+YIPPT}\p7kS%.p( X8;^5p [p6N c(e(w߃YN*NM͡pn@l˒3AAeDf,(f>BX1*)Oi:9ΓGl-NaV8s_φ` 6ͦ41FQ{ߕ̦% !䴟\6 +M1fo %R F[ 1xl?Yql!9͌Q熱)`ib#m#0[N}D2 ƦĆ?c  7MgKUg[p~/RqZIتٔbkQUXlKņB5Xl +>kؤ^4(~3Y)LYl JV|5S[XlzM +FbwbkfnYPl,Ql (6)Z&V+4\XPlLMaCMF{].AJ[=Pl*rؔQûbSQlņ,6TTؤZT&hlRlcvɖW'kt Æu!|IT" AooX+I/Pu3b'5xƆop 8I M*Ecq2M"yظņ4YN՜Ŧ\e [#;b0j4^GL,6XL2{st&bkғ0~~eBM5~DGM{b1 {t'<3L5pM|ih#36͔YlbCe,6)fI1f5k7XM/}VfشYl| bk]YlT+ pvؤlHb2'2ϴI|snJ|i$WE~d DnnYϔuE=7My33gM#;=fm۵`ltoK`l +^ ~? | c3rDVal8͇5h +wpͰUal(` 06dalt=!06\<c[all + +S [YR`l [#rwckdケZ%`l=7ԲBcShc +%p +c÷,6 Ʀe hy0k:czˊj j_i?(ؤZXlT5 휷c#M:hlZ'~ p86xǦ(kc345h86}c3cScӓnQG=Sz<6Z +[`Y5&Dd֊H6- FlGe۴*dӂ&dn}^=ld/DBi3^&nt͂֠uD~oNdSBpd1-eLXK#*hլ3MoRP?HlG޼ 6W: .kDbC(6q +Y ;Ŧ woXcw{h&VPl=EF%%(6zgoWZFj ņ-Pl(/tv:ݭ20DXo8 +kƝHlzbAlf>< 5f2-9U۬ߣsؔxshU8ll m+^,58l֌?qؠ}sXa pP2ob(6z~s(Un"9XauV,F pȚw<=z O+"Q6{8cVx1> 62i s bLŸ +M*AHrDR- b-S@ljaQfJFY bCe  6ÁmsxV9sؔ!6J`8DҴ}EPt?lӯ|ZV$SV)lpK e:э9+Mo9@l +Z(@lWM6#:&Xv^6FoFԇetC9#DmWW`ۃ勫vxv뱙j[hСjy"3 T#="Q4OM||SNSBB(mYjfD'I HGn?B'h*;g4NCZSiK)4Sr ~v.P9i"E,FnT<4z{wSϫZLNSX*rǜ#̚ig4l\v~24,KT<9i[HĴ%0F^R-j2.M_pRKS h1 -M KCJ;n/kW%ѿVm洖yI[bPhpF)X_GHSQ&HP`A ocTgB;Z*Nz/uZs"ѓK4k.DE#Ԯ֬!92 ywg7.|4mY ` ; MlLˏ;rr;u-@ +0@/#!HO?"d5!MO|4y[,|4ml >ЬNI|gѤ! >;/ F_BH+ +exDenҬjHSGSTܼ"m +lѤX%%LG5TB)Пh~u^hK\hRh=FqW:D/s<sc yh]!3x4%Ҽ1TƣI5_ѤLGGbŌGC89P+)JA5D>`ゎ֘ZNlњ$+y:]|1%Ѷp4m,mg:8vqVNGjx 爴 hݖ֦T$M`=#M$ HC it{~^~ݹ93$m{a}fHJfm5i憤iL%3N2HFG}HS,zNdFBn FThJf&iCٞ#PzHj#&z9;# XfInsICEs@Hǭ-Hnd:$MWqxؗ"-EH#~0;i&U!1r}'IG#m!Җ +%wA>8x[!Ѧj'l3 )K`AI},rXMBq"/@Fa8./D2@g +F9GG- L;,kψY!t"ɩy~޶/@Pd=3!L BB~2!M4B(eDujև2k" DV2"-Hu 6i狐FU#! ƙjbGYgBYEw5FsM'"(A3i4q 8"-BH[bdcztHao0..>)O48gG qq/KhࣩviMLG1;h*~fBɯ hwv#no, sM%8m Ā ϙhӹ SE5D{e\q_~w Mu!iR.U +I#O>vL0Բ">Zo?OS "iSZ⛪yE=&ڎ䠳8n;ڤ9Bm;-茸4⌎w*{蛣6?)gFZǂ +х׽Yjj΃uenӮ>Ԛz`sZxj?smÜ,,%՚Q:QM&Bq>+л<h|\?sռ mo,Gn-ޠ +Win!gκt*cXU>J 6ΏpZGVTXq{QR +qdh++TRR`wΨ^rmSfS唵sR8kKyz"mސVLH!OW\69^B#!^dwr]pWyf4kjm_<#M ͭm(lq8_,ը-L0FzKx\6` 1R]ö o)cx11 @OC”!.F5U;F.< b~]mP:T"m5N#0L3_"mRY8Wt!鍦Y _€jQ =Oʩx2 +O"%!mo;|`)ϰ2NͳլD"}UT'CUzԙP? o_ u"t(K+gEێh>'  +x^)*XAfPy~<ޟ +A[ ?gzM?7䣼 s2jjͤCYQ*BL3g޷iACh5˜67{Px?qȤ}VH)-ף_Ri91:P8e~8enTV퍆h[P{C߇LfEYJ\ٓzm*eUDM6~,tx-"RM* T u&t)OX>vjT6Z}3ls+v#Z襤n!IgE- isc+_ 8ž{_V6M׃ŻVc` P^):?޶U%عs_i%M:%tƳq†~uUq"Y.: j$Բ|Я ͤbJKc_RXf1)cf'5WR +hK7l:Kn=[7mi4|,㬵4՛uD]6 o1|SlCA3- 4IUۚJ:g-yWԬlVs43ٺok"V+wVT*{u$\S*Q9eB_VqPX&Zh<0c5ɫNPc7N-T 3`Z[ pV,E®oSH4NK۳cI_Ÿ֒Kљh+a݅`uw)'~ =iP%Ym8P& L8@*vZ6 U"wEq{?#~H9muz,ػL#M՜ٶJfډHySbF`J*[N{tШa+l +RJQ~G0ݴZGOYukۤU(".~yy?tI x4t3`K!G}<>T"+<=^a{ZIҙIp}^0fUG/)4ڀƛt7Ѫi7eݤ oXK6QvC'ΙWGlֱ_>iϒc * AM='dSx&6_NzJ,&̟iM;C_m)vQAqOWb[iqX'y6O6۸F(6RW %2$4>yKǖB.(Zz [L7,l=%~F5FV222b8YI(%˻p"ĻT-xv zە)))jjk5W*ⷚy(yx؃qKAKo#&%ʖ2FmUn#ݒfu)tm!ݤ8ni[)Jweз~s_xXL]ؽrg+ϱ;/UI\z'fYnoL=)+q lf+*!+@h9_wkzcne=udDq){7\NLY_-T"hq`kfk|n_`>i ?}@W>g^ְj*֬yD9%2鮿P. ';maR6bvm!pv3i~6i*$lCH-ndAwg FFg<⡀Gsubz)2WG>։g{]?>kxpR͖eQ,>lKatlYQf$,(,`o+սA*7"[܏ؒr~I4o xŀ禐yUNqTCHUEI(ϹU.Du;7V m <Fd>Y,&O1û$):z7A_=zNV2Mqao![WK0M*iAʣp%じ Po;zB/7)Q"BCQz7I"/ġx2jKZG1"(xd(X +8#*9]u3xF+EN*P3o'Q>OJ'C9B$I>[tACEJ9. *Fi-T5ڈqX{,aa,;]8=P5/#Cxcz2Q|Ukc)6#K涹C( :,"!]$e*'uY3,bna443,>jٖgBe|Ի sRvU>f'I(px lTwʅn3oV>.HѺia,78eޏ +YkK!=1k^, 74Jtͻ#[iCIJԈeJhFYL8feZcR_y yN;fqP2JM=WzU|;z˻=`a_ږ4h=gU4}$ S(߾6K8"y̿Fʂi=cgQ~:TU7+X:Nv͛M4--^❳Dd'QIDыXG]7a?ӌ};9N/b7`}px021i!\@7lCEy2FZy T h"0#}>Opt?YxE;(她r9A90'!F9a^fz% ߞV'͛Z +bE,hfxL "!g8(9t(?2`ڙć=(WEӉf±Ht-YV97P,Sc~"(T98v)Z_m6^;O}=eƆ|عˬqOT&E6F)8ۤ.c!z!v>_:IqϢC.Y̨<6qD {09En3ĆΝS f9 J21〝eNƞsRy.Nn4V1"4B1荐 +|N5z,s(ݎ+YA;U-'r%څ譥݂O$n2ӗ´vLzIǦ/F\(Xs$yw^C=kU| ޤZYk|J^2Zk"3^ HSUŝ^sH2>łE5C4G" f*xt 0v``We)TfkJw<7 E\L# *fEI +R)խ$$h!QhՒMi:2rDsئ6vC$a,]c^NIa9|ˢbwHa.%(;->f2}}HG7=̈́7ܡֵAdN;;9ԎfP'Oj&MXݶ0Ya9o~6NǮvTQ=#$F|Gy序nAʛnCd߈+LS#O\D:TV9X "F])V`h6bj:/6j&TOt-۔,"au'D BZ +"L[Q <^AcC lԒK@WC/{ޤ Sf US Rj$C.2B4R&Ȇ'wB>2ѫt3rtfj^EϾ!"{?Hg{=a4\VDL|wЌAT]9h} IR 6(+@:ɞXSRROD2qz4^UxS>ئU j[E?}n HGFnA,vh8*L,8D $yu,ŘeZ^qv Go`Àظ3c- i sQeFЖ1ptJZjI[.iec|{{4 t)mngm hT[^Im3}bDrXq3TiGΆB=JF}c<)ȯ"II! X%ۣ'ŠEQIOzV飉&ڴ2$.n;\@:Xw=VP_I d0;ClϺtxCż2kwMRfImvo+14V {ѦI*eQ2c.;feYFQ@w[dXL:l A*g*Ըl(mzJ JKh|ֺJv\P:-hCMp˥CTXXFKh_@y<$eAPOddRs:\5]mN1;;tGql+/?_ؙIMBs~bj)YC%UEM*F!jB10I{ۏ YW;R=׬m!'EXB5U&lٶ}#o 9i=ZKU]2Ewex*NNrB}R10!L$ >Z,W/$It-6KsCe> 4* EkJ+:( #qEB-(o'(Y\(y<5PN#3k.fcҀVcc9ɦ`PXNٗ[ĒχM-#w)dbl͸wE@ʴh>PD-KRoƨ;[Vf6}g합h>^;"H/-Ef=L*DCgwq|72,U9g*8<=4;4mrsHv7|ԮdJlK_"(G KA*jSNl֮{Lˏ&[\agmWiF7;2L r4;<w~ޮtx]x7y]睛i`Sގ{쩼GbƎ,䝤H'+Ǎh!6N\¡9iYUG<° [S3\s48W.[igmX +}Wt=ljf'x +1m"+ɸKw=1'K5gew,lϡa&R2pz3N7F|unMjX>EB0N}(mu1hr!7pZF>gZ~9ޫ'= :EB]c[;6w[춱~$gU(mkj H)Tm g\8651Y(H# V?|a]P"A"~(%:2 g:#Xw ~WXo8+)rn.ia;1BT iuY-C%??p1758 +0-3* IsWw>Rid+vi)-7BI$ɉJ{]/֙qy=unqOe h0}Ը}@{k`萯v}mS,x #n)"Dvʅ?cz0t;ކb<(%hFtR5*eBͪaUz~ ,+Qi̴lRoB@ʢߡjnJO:˜N{)kWғ|$<ޓpB.VW pDo8yBf -ik1/cHfc|s 3m|Z0+PVUK w[UnO@|5"sMArkV-5xF,-ᅐri?n<U]Y ְ&bgvq4'xiwQ8w^8f 5Jy)<n)Y\fZBcB0;[ӊ'B /\U`N x1DoAyOfk~-w"5"ϞxR+cDN+/"pD [B jX2P Ǡ"HHςj AHHE1$3B T$s G̳ T$W$c,HExguZxKD%3e"^盈ןQxR2/xDӋe(D0aYxK)D\!"J֣Rx[ "JSESDc\pxo(2OqxR͠ 8F/ru Љ9dD<<<~7On똽+)_yx=2dq#u +2/vxnCI<<ó{.Wx:ޟ#yx]oΫ<<ݍSSx$2O7+ZxxU^?U>/I*<<75 +c.<~óyx7O_cU<+뮒ׅ+<<^o r…yz^ +ì<<+WxxX OK7O7OjuZ@gO5( B4q4eUf/FÓ)oRyx7W^gPTxxi`u:ge)S#yx][9jJ;xx OQSãH'<< +<g8MÓXhx O|1BMÓZixR + Oʛ'𸆅Ma OJ|+ cuae 4 ϔL+'.jI4<)oX7>틆wMÀZhx|Bixzf O@iة4<4<:ף$hnhx<7($yP3 OBIx6)4VFC"Xp%/jAY{/Bh{:H³c}JAq 'eZ/ǂ3 +O&7 +OMD* +r£@C-(<B)SPx +_gETf>0d_(NJ08QxG$5$QxTjQxjF+(< ZPxR* +OG]~A-( +@A :'cH/(oRha:N/rrL/Ndu ͙g)fy [GmciA7*u5-n&Ub S[ΫUk} { 1icJb5sU״~ڳXu.WF53uC.kXSQu\FIFIkF5&|NGL2kj/IuMkcMk'T!zPx׃T'窝T'疜T'ynRuSIupoR]ҹAu2 -:y6^NJ'ěIuRv&IWۤGPakgb5VwBT_MN 稠:{ks9T: 'nͣb}S͸{CNRHOeԩ-#wh5.y1Uϓ{mn+AŠkH l~%\<a,ςj 9v-'GE5!fV{#Yt4j^;JƼr8X<@'&qy]@dz +.=9.QtlTl蒒t[ ]'=uE'z%Ex@'Px+t,bŜtk#8v_J:ML( +&_[n+A@u6W_ax5bxO:ȩMb Zh̳AGé{py4Z)ȇg{νD!ΊR0B5oU` #aZ,] 蚡gEi׬frش9B*ߥ8p: C@'͆R!0?0Cpdߜ>'m$4,.=홆Ö"FWKsC=msXfΝ9d3QJkcn蜖z +sBqoN#sܼ9ͨg?7n#Sisf߬9Ijn 4C@=8s3mȘ9=f䘹&قkT\cc fQ.V^q\ma$h p}3e OPP暈G&xY)saE3'5Ze*q,U3fN?;0sz^%d3טkbD2g)M{Tnm%9m׮6EɭP6/m撒hs[ \3n[9~O5P6mN +E2b6'pPϹis(ZeڜTVЋ6/{k[KI\9>&0DN涒is[ ڜ+n56טG>NO ?_;.P"#yhqs[ɸnyDV*4Z nN͝ ܜtn + jGP{ngSqsM#&7h;m%斺psz)&ők +)>-aBZ(ZeiPFkJ99ҏ8Is\VIsR~Uۤ9sw4z&I9[9)4 NkJ ˜4Bj} =5*9>-ǫP՟FA`W2eZ2wE's.!o1w]]8kS?+aNmuQm? W/ۢfigA) d9yh>kH+'X9}CQP0;mA)L9Wq&m̀r{6%N~O]Ca8r2Fd}9oơN3B(%AN{ޜX窕V΄[Jm5r'nb rʻY\-r +666?NQef8Ell~N|Xe~+McK8 +u评 r[:AB,Yߪ<^](#fA@?KkV9+A3AY7{䤐]+EI䴷=m9]~7$*} X$r9n'#f  s}V"|Akl r +7#ύS>XBq\!(5&BN bF!׭r )v;^2A.PrJ,? υ!GBbșsj!5j[^rP-4Bп!Gaž!`@cbȩR<r9+CNu$C_D G290I ҽr>ir(7@EW>\Q}cX)ne?ǁ¸Ώ7gW~2y?\B-8+,|\jAt^5^sl|beM鼂 e=.|'oPX8 ?K`[dL/`55 +~\͏ӐHߋqrnzC N{1~:z>gi .FkOv?L8 +G6G[P2"[Ҏ\-zf֬GKEc89)q4mjAa=)}4cS*8]EkF(c"3Z^$(MqyOSVayX 8}[}/ 9>'z^8y8,V'_iE]OiuL0q#6]gVh)O85҂j!N ?DϳqZE<yÿ#>_8iZ,X $ذ8箬8}ymT4Xޯ>}̤`zjpNrQWN-"8qZOk`. NM'ʉS9݁')1)Π836(N +CQPՅޛ8O8}ӱQqbdG,>:˙@.<1*\)N}A{߁gPlNϳ~a&) qg#%#4snB]v}'>p-*N5')3o2A}XBiEs2ǩsޘ_yw$d G ;܌Eu||L8@ N&@ Ahĩ +bCip|)5l6% +N TmM@p(2yfƩ1Td$Vij#w)N#h{|YnpBDBO-bn*㙑h$&\}<(xetzFp +M\&?(sp?~SV~Sal~4[70if"Dq^sakr{57M嫟)4|lYo/MIn$o2ue,TBiߞdM#F}/rb@C3-@=J%.QQUs8A{1%ZӜÓqo{h+:M=/۝鼵 z?X1op߼:;z`e|>H_C6 9Nq SQ-)?QooooO8d2g]|76}ۜn +c4 +n ߲$Iv33ʨd6sݎauSK8+v6jW{7nC )@ay0Ώ'U+ +w.@scv9G*MDF+ʍýAnR)vB7Dt@ܔnJ!- ։wথa?nf6=rm AQgbF]ٵmjn_AYmP!8:MmS'?C"9)A"mF2ڦ!iQHM:9V ڦ3M'[5mzmԶ|R-Զu6ж.mCe hnقIcI= жS7MUSeh&9ǽm$-s5c-6T= &Q@$\@$V 631ۚ-Ge5ʷk3ۤxlɓHZlk.H8M{&kؠ!1ۨ:c3۔{\{0(6ffxv^ m }Wf[نB mIlI%,mRX5M<)6W/ 5jr6& )DEmd6."!Jm4^@)vwʏΖm6=%=hrum:ӼmkIR3A<,m*#:m}m56i@ۚ|FIԶMW?mkHMDmHYɢ27m,\&PhbAۚ +mk#oh[.Y6Yچeo-ָPF#Ma'6?~V +h\ ڦqǢqm+ mcBw@Z,h[fesۖhX WV鱉m]`6T +&c3ۤ Ɖ m@3m" aqVjl3RP(Tmdf6jS۔8#cXmt$G6OܮEmΘmQmY6FCXxPۈO j[ekچ՜0mT0Umm(683Cwچg6mXyK2gpQ@e +Gڦ̊YK23AmkDpMfQM_*Ammyj3Mٸ++m@`TqzUqYcG*xuH0#km>QE5tY1XжNgϹmRM0 FYE>چr;nQH`S6v&„mۦ7LmSnf@jL1nG n fj)NI-Ep(ëmJۂ)m%NncXݦ5Nvn#LRa鍠۴೵I4|_|Wd %ӽm ?m]j@50Ͳu ݦnSF +sg5 +imZ[e۴g۔ǣ:&4:C*l\6! f++#z6Ql ن=TlC=SRݙmz6d6$zh %&"8lCQ b1W,4 +꒝&bl۸0T@+ǫMcY2M-8٦*k 7^Ai@l󄋿m(8/#se0"&_abq f8fY>*M->w` ֩w{1:Vm=Efm%C’6gf\of[gia`ۚ نH`%f+%CaI5B0ۺb<MlS+nJF& %!۶61d l}}%%ߋͺ'` = lC-6 l!`lQ6DrL)OmGc Q)PSE/y_Dl#fg")IkElk=ɤyVb4ubƙqbTAl#zy9;TD?U6g;Zg)p=pMa_<ĶX+. l>qm[û`XT$e7BjòVc:ܰ4pHkapsS0aLx;m:m%yMv&r4mTfLZh%d257M=AЍec](fDj32p? :dޔ6b%՝kl۵ kj}k}#lI|;S/yXGWq +],KV9jKh-BV;)JV ޹jǽ{̂U9SgC$0S_֮T-NTz-2OmS# շj. 8ǦWS>>+05a 6aj،4c|VeqۉԶ_J{;7@X!RB8KMIq;IّIj+Hqiho:^'j9۬$5SG㎱Ij\aV]*Xj(22Ks-MVcԴz +RRR6z$Tn 5)'Rk($5rV9 )po% +mRSTܼ"mݳI][Ԓ@j^Z*!@j4Fw gܛN]55%.5^5IO^@#pZ4qQrY_Aq#G+dƃDGM2G:I֬LtTwƉs]hMTFMx +QF1 禨5EyhwIEM3( F FMcx?8jII IM0tZ 2K 09MM6Zd4چ!05}S=Ђݹ3Mm>m%Զ05sԴOfajr'Y0/T>ς)m; Sk Skdk;B5dVp`jRwԤX3g!05>v8M ASk@%˶hjEFSU%R[ZH)QjLz])xPj[(FZ*H8xRQj 2@gF99Agm!L=,뷅H#f .7ϯ)}>V'bC+Kg@iAB)Ȋt.FhvHAWvʯ㚻HK-)`ẙ,5R#ݮ}Buz?FD(5T;K.gD=RèD)PjII(J̒#z-n(<>RS/*L(5T<ϳSccYjK(%Ih9;zxn R3I,5@jtd4@N#9R >n] 5kXm~dǖ1jC=EPT "3Ԉ"P n7"MM2)b4TB}MO[B-1i#:1$gR .Iᕱ;GHGڿI:͍Z'WX~H՞Ll٧x I:*y5#g t[52(qy~#`ȭ/rd{B),P^2ڢ {js:f8''I㰁{O.[^;B + <ҚQ;Ѱ?6 6EP- (Q dV`Hzƹ:HQPbY:ȚM$`路d--Glĩ%OJ>QjT DF1FU(5y:j(ԁұ^`Uc¥Zn! '5d'32}lnat MW. ,΀K$tk6d/"bHʔYoB~q1AzP$VEL-2$ҙ+C`ɍJD֬}O./dRJ>i\#!3g,K'D+1J4D+qTب}2XEGE,<)udLk_L5BÅ]ekl9*~s,BdK! `BYZ-⼾P. \,w d/+FET.<Q^"zO2l ⺤6 (Eg+1Z +R֕ rFyة,D<0,L|-ēwNN/ +3>%qK} E}mCȐ \Ȭ~P +AejSo +lOd\q.x<gxz <"Dz'r+*k t z0DL&.uyԫ pr- D}z t t7V=M5 "rUm渦5OyLu6J'я7Rj'7t:K?',9Yc?7PUJ4Ԅ>hԔG'ֻo֎AC2Bu'0 a! kT< Հq?T*A#N/xׁ y&%N"󳥁JN2> Ggy"JX?]a:Vb6lѕǃln=[G (~H)D[9Vl'k ϊX$2׻0h7X(JM=&D6>1Ь_cK\-if6m]1.,'ZY2Hy z67&gE?#f0:ĝLNP,W(<=|PƯY7dCRY]Qz!r"=\FN٪s. %zKp@Y`Mr ?Ǝ=}zYCkZmSD܄j ds )5&^`Ļ:S,bvdIbNK :kGm{$Cs DG%ਉiEvz ZE]HpIĎD곾 V[u֭ٙlY57J5sˠaPbDڠ\ .ƍ[؃덿Җ &3iZqlIT[b7X:$o<H./Bٶ޲'fh$IbtVi%[L| b3lJEG9D#UÐg!!X TG>m' ..܏i}VFEU{RmSowmZZ[r)nSAC}eOKS`}qX1⠞@^:K\-e#̅2C uZĪIRèWS[/Hԗp MQOH9!9 V\蚮u0Lk/.66?A_e0vi(1BNql"9|l{35y}yړCszzه?%˭f)XƒnM695<+M?@;oB5F۾{?kBdxaKt,"dz6Xё ׈)lXʾ_x6jIBIm;f 4vAZp +(!JpznvM<Ǿv] :\)aFlz,EJ(bmt~  +Ju4fnjs#: /R?FY[MEvSR2s蔨d\ܹE#1KJɦE0= zܖk1k-VI(i; õTg~v*v.vrl7"붨(z(V!u'T! ST@hT \QcxW}K3l,(Zy&!SEC#YSVJTGAaeį^Dp1N-$X+%Ypf%AYv uXw`ny^&N1qQ6Pgf ǀ&"=7Ŏ$|#Rdj6b/3kyU* T\v&MŒx䐛Zv`]Xy}a9' ITDDKvZUĈpٖT 2SȱorTbe .)Q5"ϬT @~hP/4 vɍR}nqAvb՝:(TW]RsfY9kHmE;n# +$ 1H*% ,>ܨǛn9O1 +[uҀ7ԇ@LC(8nE>"Y3'Ņ و6J<Bk@O$lQY[Qwe:i5g.Ԣ Eͱ fm>?5",x^~:]WLQ`Q|;Vt[!6'A$ص԰1|c]< +'y ) ?g0x}VCa.ЪrwFi` Ć_ܺ5r*1N҇%R /Eڀ\PݫKFm1%+- wn)IF4B#$wi *g)|4X\u|TZhoDExaX#:CA@ڣF*xC/̚jЏ{ǃ}To t%YPdLA@t*|jNO)5aAg?"J YYb'ggpv>Kg/jҔ>Q|`qk+^!`F c{쫔m{S+6&{rf1=fOSf凅d YM2m{Kj/{ñaQ.Y1F"\) h$ BX0/Kcdfjևm}x"ǒ롭ݠ^PJThC&)3h dJEOdcu?ނ~( @#Y29t ^?!͍^ L]94%)h'88:YN23n2u℘r͕\' Vz#Rz*;ownTth2mdh_16u͑RʄrȦJQ:C+jAXjM@.XJSNw(ƔHT=c {6+2z k %6k "9J0a{aPY*,I 7W:g"$ѢShцxCE1E&"˙"D\׃чl^7DR`M*5O&KSÓ,g JrWKVJgYUI@F? jQEogAAH/StYiQS\U8pjɭ"ntEBAҲͺfʰ@h )b=A!FղDaAVG3l +RF?_u9d۫9M-b D$IkkD 9Lt2$u=G"(/-yީ͔$ED(`ْ'=(xU'u5FvQbV"݅B/vRe 1fODk!ҕB0dJC3bY<F Nj +/xoO ,&Ӝ^9 I2> +U[K6 7tr0ZΈ}rj6.b֬7M"rcm! a )XE;pYX.}Ja$8RPQ`yYg!lϖdaTU6m2q7Ф%7(ۮrڋP3;Fl[?)6[2Rva?bTRФǓޖƎQzLRANLsb ͫaU7ӝ j֧w8bԞe~}6rQn@|Vx $ކZ"+`zu:esi+4'X0nwf&ƷP=F`jb  Ύ Bf0b6hNO ~; f$BT#+xuԫš8&0O_7?1ީB-B~D(6ַJ c6w*ͶZ_iH;hbg@HNɣ΂e{ dIb{?g0ԕh?_\7O*BNARAX!sK Y.E*[`7l#ZVpb4o 7|7e cPNiԦPhpE-bfmhs_6!do w~L]&IZ-ev!gNѸǍmqmQ9lq4*HUL{E5[<85Z9ŨeH tߏxQR*,2z@̔,M*J TfEp[r^YPKɒNkyry)GB̹׶Fט &ZfB +L[}@RTLj ?j`Dg\"QYM;QBQt5qp״3wBd`B deֽn,9Dm{6kΠmQ2rM`5~G%m+-#[dlf}&s:uCrXJ<z<4a\l.m>(XZ,0 $I/-:VLE(*޲-;z9ng +%])ٴY] Nqf[EBز$,Vnn3E `Q}O't;;_Is)8M -na(n +(skk Lqo-ePMJO5`m<d qPHXC-mҋp-azmPi?8 O5ŖcL8Ks[ΛN77tq|s--#9C']nzl۳ͭ|ٷ e ߗ. [޽BbAKRV/QE3G1eLa*V*kQ~̶umH"ŒLװ`y?[2r4QV [&d~>r c–z$SEq,a"4U MP,C +۫H!xh[M+=s;.Nso;2wl~=Ǫy~Lzdt6 0C}Ze''nBg,χtrwiyq|"*|nڔ҈01DB18~Jd+Qhr|`]~i1:)5 E4ͬTb0:*.7Pc3\n5 nrf{okTV'v4V!h$=`P6*P'k?Y6%+( Ė_VXezkƏ h`}6d/fftZj"Lm!&oԻ[~s?h#g^JlWf3K`yA*?E3 ) 66mE_AV, XƩgoGoy^:̐0: ʂ'lb!QHYKe^c`20b ,8*ۮoEyIw ּ3`شl t| ԧluA6l7-+wL~¤NF3^ö&㭅F4Sk0< R -͹PLłAVj̗}4k>pp 4ػk!/g2[O C#"qLM׾If[@S]r:b'S*h! 1h)6ꍈA7zfNZc (8Y9hs$ _F`1Va5 5Cg@}ѢtF6 ZAhyY~K@5z ـIE-9;X$4h,-2'[ AS~ѥcxط[[9l1Q Ie9qpu%Dc4cϴ6.oњ_˲,2Ibʳvᶢa \g{.k|x)Ӛ\Kh/.*-`z Y)oeɀ])8~>g;R)o nQ˵;3[rH$XFq8-ܓbC'{FNO50rne4{SURE}7Ʌ1"}Fܐ '%.$\y]H9 endstream endobj 49 0 obj <>stream + ĘI/MZ"蹛8;7FrߛiɚMDeO=ii-,G%i8SK>~5[ iiJ69LUG#s%һTh1[nn=ng}dN)ɵg)~Dz?&Z`^q*ol"fk͑r +G9Z3RjY)NFt>6^-ojVh $;FXWe=K(hP;#x\ĀJ)l^nj˵ 2jc +unQݙ5?VՍ]ov+< m`y=7hOwO(Uz5`K6;(&+}z,X#f+Kb ;gov=+'PjB^30 +3ڏgj +%B,HR74kI 邋A9 sCr/PQFgKGBhU8zViy-ZM~ K}~!6xjO dowq`魾@z y^tXC;FrJD2hPhut>W8k5Rp"fQb"$ۆ)/.`>`Ճ RQ4e:vZROVVe\l)Qz?H]`5%An'CfZX6< +\w[!=ɊcE]01پm\|~_g( lc{DA(̔ E,C<ᡟXRk>"O6KJ +l --{ET ۑ5^գ*ݳSMn@d4^3CkP;;ީ8V& hQwk8Oym$֮\r?4䪺}p;?͜-l~PG:LeY0% tMQʢUI@T횗(5X .$+/63̦ +-=4"W& +м2'6".,2j8)Pnvkp 4NǣzzL%DH*сJrpݒ%4dΤnb1 ,!d47^'}+Fy]c.I"2WZq3*YN \u֐ꮥleW^ n+|U@n\Ұ䒡&j~&9lr hT:8lrDюVGһQ':YJ[zoc+ MY&Im-)k3p^zr|Yjږ֟KjA pFO/XN67vD($ro)2& $'ldkh)95Ÿh񚎨Dsb,lc+0۷<:Tj8ƮvN#'* +&P3n&Po)R>D;V<vR0]b Vܡ@nUB,QhŔt,Ze&4B#d\KG4qlds 6[z" K+0"'MP?3eA$6fSRl︣hWdQ-ؖ.]9R7GZ*J7J5H3 %Dg$u3 '03&[ܔ}] +(Q")o|jA`Jo1r1ٳ!GJ.;pf +T6(%Ch!'S5UBdV8Qo7XvMhyl轑 \¯L %kǰbj3? M[.=]uNR3*a}"Ѳ`i,-NbKŏ¬’ ]7lg:QxJLV^|Mh}0ePV8L0[fdŖ@oNL/o:HzU @]?KB(} /*3` c:)warRZvloN(N ! ZI.]G: +l0ciE:\jƖ8ž]r fj r>8člArEKLJAoSE3MҀSN!潷QuuȖFg )(-hPJjI]KT\kfnTzg jvmXs]nt: #S, Ne#vGjbhՙXIV͞ΖVidfFlVN( GDk͌li-}%AEj1g|nQ+A/XT)G9-]qd +إ} IYII:׷zq,[ ̅4 o;ʭ+aS4H14 gt h{ۢ-g Sa_6[6b%)zBGz沚g̢)~,&NRZnE +Lnfé.ECP.G0ֆlC-8-E$6 ѫy8b]²,Jlu9߸4s2eFɃv1B>^1ƭMj4 nnp?Yz8yh|UZM $姬oEP.Ys&VFn1^zl+bHQ"g?7^~ jK,vUO)R%k mNɫ)"O{|-U< +}V6 j_`NIm^>G =_=H5mXn$-46# =hVqzgD^GgznՑփ)vlum\9Xe& 2DaJ㇧ő3m {zkdqD_WQj9m ۖFwk]-Q]j;3B$Gܝs{1TP/۪wP*0X{ UXh@WE@ӿτ)2{ƼD?m} dWh2 7` ]0ώs??Z9Me"e{)Ecj :HM5*vI]^h>ۛxezc⢷v7 r ; юjCޏWW_ +Gq鳿\]f~~<_w߽ďx=W?mI.__]/{0 o.񷟻/۫J{ߞ_gz? ֮kGW_?l=${Ǵ` ~7_՛##3>/ӻwoj>{}IQV}xZѮɇw_vz-žv_`48o.‹mo^=<3w#ܿ}ˋwgwoo_/y(on/?`>k ^]w_?jN]o8֧}[5޾j`7#Yjl;!\K Cq{ʲ<1BnVOq08L\خr?tW)"KlHxl}~t qM^ye'+~r_=|}s z}\8#tؕ'Z]u?[/ɏ׏zxvyu\鐂m +;:ջnoϷ K)voA._|A>\TOP}<[sپJۏh___wߙts^:ڷRwl=^~vi{b|kވwm!>vQ=a9v|lRv=zD?ؕ@S_^]_?[tz}u{y5yG;yCߝgm>?i|^~_ҜvHo\=\}F_x~zپb<1ͻ+Uym[I1Al;Rޚ#MG=Lonl?R~;.^lfKyb2'pخlf`3ۗY?̳_m_ΦpyAnmWp槨`>pgѾGYKe^1p kl?}}{ yrVyW~D"~O!/{\ boY/ۇWS2~ki^Wbɴ'Œ^eg,R"V-փ?ȷ|;ȷovo..vnOn  ^t>Zp Dp*JxDOD姼a64;N[ezp#yy}$ŭ3pv'n+$_5in\~yu蕨S,7~B_Tvl;㚽T͝W\m_LP%˻ljlWw.~UGGyɅlvEzwJ>'\/OO4a`WdFv=qiQϝnrwj#s/$l'vc=t %lHn:ydq{" }'7kz(_Q?ZC>ğ~Z!C>ğg|;_χcc;ğgۏ3MD}'zvAv9b·dg>{Rwuy}}ݶ㻾 zv7/߽TW9.(?nWwݯ|_ݟ>g?8[:[L#7CN=ܘuI/ cg~-fJeny7l3c (AOoM5>`/>b/'~)޲+98sΜ398s6gnętΜeΜp漄|mL}>uUfQDؾŽ~ ;rw|ݵ9x~Xpr® +Wv +WO_~z~I}8Aw=TzUVЏëjo?7wO+,\uɲCR;@<"xm?;Wv]}7O&l_Wl, +KOK(PSK!i-rp쁅oR8?vI^?`=?$t0ڄwWۣ-gƾC=)RG^Vg+u(*da'N?x]&=ҏI/]9CWx_><\vp~աО0}Am?Ơm?G'珔180^GaKmoOB>ۀO+`[`xw +Zk9X{mV G;p* gn=x0f <k4Wg>aDbb>e$;o +ﻻ7_ݟo/qv^ہ:uCUݰpT=`On +7C<Ƌɴ^s{Z+fձ9z׿?O_ۻ| 4}SFܿ-xy2~ -FSP泋'( k<;}-΁=+}ksP=}p]}Sp'-oɾi< +<}9z {n=!ٞ[k<ɵ>yţ%(֯x ZJUWمOV/?Q/t݃"V?ΈۃgAyєTDBnl7:b^P/y#v ;=GӁėg#ON^yeHݧw*%:r߶~k/ʮۯ>'B~ ۈu*qR8_?x:.p ?9O}e('XIM[vGiPIi)%jdf8CRs8щKŅ|ߝTr}ޝyyfΧr$ơt7iUJR׃$9MNC (9Ncr0Vh(.xC >ߗpїܺSWrX4FL }8v$Z4vpuz~̡ΕT)ݩ˱2)9ԏf%auT c0?;c:aX:ޮ].ǘ}4%c}SV;,i.e,w.]t#a9\JJ填0@(mC-WP8D|+ C*%r$-WY]v# Kal>+)LjĒSF+ O.V:%h央Jq~3Rv[ckG/rU _ ĴL\w5cx])WAd*>zLVtk®X຃:OAkpr W;0>kKsN߫jIQJߩ֩NXקJwFW | +qLh~@ﺁSZԅq7-bf &rN5n[U_ +,2aNVIX4>-:B:H|{=]9P¾FIu+IؚSN ҔjMQ5&~g*ac*3ݾjwHUU&ͣ#-nUkWz:= +L :_=1%%Oٙ_%$N/7} k:}k=7lB4$ec Y'| +HԡX Ef`Ufj4P +9Oشi +?nVef> wX\be`(T72_-BՕ)!AbBR <$qDKNb}/*>Cupvv-CoɾvM z(GrZ"=vh{lO sbg%),; 29 lرi qن/U嬎_rtKUçKaW_Yѓ&r7 ֽ$'!u Ӊ)Zd/AzIxegʭ8Y/wpfi;6Z|7p T{B_><cby,O|{4y/>R%_86l9?7G=9#p t4>zA7+YPHGsZUeURxӦ*6įJwWT7E{I15DCJXHXu?˩)'Sㄇ"E #?vYh{_8Aje {:|_-|7$HluAz8ѩZ#:]z +W. $_`*rE#,<3_bGXbV/6Nő1Xl^msEmt3u/"bV箣I +S0h0"Y:u`: ++"Z<E"H+% _8]r&jU DW`63|{ R,PWP{BC:1lE5_3V1~?pcb("Ai!VwH3@?X<p£q_]mr,b!ʷPt6<) R24t!=4WĤϼofYZpSLJD$*B@Hs1!`y8O{qs$UhODj /z9 +vؚT.pB+V.!b{pW xF[_b #l tZZ3iGpʆ;>ZeѡB}L0xci +(|<ίۑ hONyITUSPC@@CC HOWSeA$q Z"!l3O9,-?T;%_Nm',vuC{2>xaVu,BEꂦ0ohHqttr)ӆUxe )$J ^du8C1؛A=,]Tg Yg $VK>pܧ ‹ <àpB-\@58"xqj'/pixh&eqL]\g³QPpPu4jӰEOk=&+Ug~Um@YLY;/4@ $Wł0@PaE4Ep]G ½hqT{Bja]g*J$'P-'іŘrs|T#o$uK 8X†NFqA')ϏH';5S߇+w`AܻNŪ|aMmʤ"B+^?T;wf=ItΔEhO⣔@x%&ߡ _ +20im91k\EՆYNц \N|%.Ԋ^JJS y; Zyh` Xɞ)M*${ AƳz~lxP4_.Bu?K'D=MȪheW-o;6b^( E$qq8V ltM!zb/1@HN@~{ºGK)ObSXrȢ 9l#\dhcHcdVfȅ%aWm|fxQE]̞-qS#7kWnGt.2Ⲅ3LZذ?ROsKwBTFtesA"'R`-Ub ̫a8 t6@SSc:=Ѭ߻Z.b/6d CΘNc =D Txh]X$0a˫_ +M>z -U3ѱzRpO/RQ7 ցf8(AtNi@h ?hAֹ+/08X$`3]4m棇/dяVI*{i4S0f Y(H! +}u x@TQR <ͼY,|U 0  wB;њ`9z> @ 4$M2D?zCZYN&JGi9IFw2I=g%pLrs@ +5X9,j60lT d#nG8$S4Иx@`cz A9@(9Zi@<_E-[ 0{j AsS=$N(JCY#MbghYnP(Po<>J'DV`脂`PggS΅B˘Y6'WV0knNݵ. :?EeaWwNq 5Ԧ(OO V1M}؅AMUq}#W̥kۈS1bvM84}i"@g*LIp- 2ɠP]~@;AHO\"?0NDNR =F4x*P̰fo5Df0*K,ޠzZ HMj8LMь~ɘTMGxxOn1* Je@q`ȋ: +osXyY ꉮ_/6! +)&lZ rG̓Mx27|%+5_KThOCs &9GQ,/3깣 +VARvq>5Mf4xF1sL 5ɕ %ԆB-A;GAރ/&1jlp^6zauPD!(o":;Pay>&C >?Mz-zv A.Y7C83`G :r<[LAq!UNj!!JR`iǁ2,0/ \Eݲ +rcBwPP#fD28Sf9Bd ~%J3(Fdq-Vy)?@ha$fq9[!th" 8%h ݀% 4.@4#1jhEY͠^xi[f,|[ ׂ!s]0l=Nh@`@:ͺ,uT  ADY1G@4KC >DN$Ǯ3ý '% a/6`hK xYz=uNk~[ˠ2= gJܤ !m( xr` 5 AN%P aDP! +{ +v+zl$nqXRr4iQ }E_,&vXT">KH-{:jSQ5 IUiTSxy7Und%SI#M~D AcLưA|tNGrg(p3Sqq\qrdǪ8 nAړ%h!kP݅UgƂJ+@.`rtiݜQaUo[dAzuĴBz תCӜHIp`+EhYylHP,CBXLH&*fF`4uڙHUE̜ 3މ*sQ, +q UAO$A%J|m#6վ~}(趴VaЬSZ9q 9 #ᨔ554gR&L"(Ŷ2C@@DQUEOIYɋj7]Y O1WGduèA߲gbK6Kb<1/pȤP !M^?[yXNr=aԐ1 +륝:$\˚$FM_k_Ym6m˴p$P1EUJj|bwoj IW1jWWOͩG`tD8k&ydʞqVm<۞O_ծ&{"@z:*)T\SM 9yў,Ϳݐ|!~'-CnJ](OY D[*KeWSAzb{Z~p,L> +w f.8u<ٳf{>Z~S 9WXbw'E*Ws'8e v{kXmAĕt"iֆlU{ (RPusJ=K怒/4Lij|+\;)#)4SՆo26}Oj_gzRizC^_=|sۯ.P73HԀ sӊFz(3/wzAOLQՓeQ>`iWҢM:?-*9q #%O:ˮ=9n8sfgQL,ۼY`3ӋɫFa~zmjp+6+W86c|*Z㧟u6w)0lƴQ;yNN6Mq^= 5;yc}:On/;Ir&KU@G^B2ucfX"Ba&߾C Yk^~K桖}:$ٿ'I"C#1kzh#uiE֟rǓ'>qɢ-ps46rc-wl~v4775bNq6Jtѝ隮yFWRu$izGs/8}6^<|['Mg{O> 8>%9Bj]??<\?Y//?^ 绫7rӍ?]\}{ˋj\mɶ k KzWM0R$*K4I P;1L)J8;"K"eF +[M:=1c>ӤXW-R+S8&dOq]GDN{bpG^b >>64`:lcsr~.oϞ[2^7|Dn3=ӯ7E|d:`@GȗZ9w(S jF.˺*=͇[yk˖"d 43ku=n)Y;%/n_"2CRr=Cɕj>8lZ-Hjx ŭP pPW,/ $Ylw/DLRF^Kօqh |aN OUVbRNK +R֬EFf=Z2A<{͡lP28!x+W$.W6՟Ͼ>7uK~_.G OV?}zݽ= p<|§~rqOwdӺ5Y;SQ7rT{VVE9GTP$dS\-,#KZ UyJF+@@ǁbfyKA H$=񒼨\Z[o@SoC~'ʀs$u0)Ld>jvpJD 0]ND*#nKRWF9d-Y]n#Ln#6 %,9ϺBߵ?-X;8A Ay;0}Ctu)'uԣ<$ r#o&q񰉐(I% rchIW~Ah;bRr !1Cܢ Hfc* + +X ӌhVnB v^'Cxl4^wȡ$R.y Ĕs +XX%γ TbQGA }Hl)[ 0 +0D9%bI=,08'p1 +VM e'%Rxc$KTX8,FK%6PTc$uM<ʊcJ"ꍝrPK- б0^,N&rc2|{rri/tQ$yVӖdLƱT^DM$-s5<ݑD0W/iX(⬥lKܬ21UqkO9;9qUp,xDR[̟Ex{bqBxw*$Yj %)xˀaf' ulE>#%E.FZ5`B$sO`DN xsbNTZt.K ^!˜6-2yD +ٞEMzy ܱ&^ R,Idb[NsP"f|fD .!jXAHBaINl"u`Q5sJLͫAn`LY":LvR Y)g#7ZE1ڎ|!ɝ`BBgq >} Ǣ2‚es8-,\D,%e 'UJܷKӫZ;JG]U壐cr5ԤܿGy!p!S%IcͲ-Ł{R8Qrda|trI:5k*dD/* C,ZvA4S98Ѓő !2O_Gp#a`m+;(x͔j +Q3%N2@`9 + 3ZFl$(#Q=ePͧZF)=臤 ):pn8[HfAnₚ;z#P~ofC:ۑ=;я`K7G,UXDb:xskXdU ŢgV d@I=3DQ +#cסgvv= k$ka#2:M5OK2)JH ۽AB"LtBJE٤o)Q{:JL,-CU鎽pݡ]"bl;]aQp$^ot)3&{# ٳt0+%&!/L%b O@P)GY;lȌ-IL*8;Yv/"ASp# +-dubc^ 饤 +\-zX +LK/R efpc^ +ӱ\B 䇪dvȃ(q/u`dHV=$HL!Bz TRׅ] + QWJbzu@wxraαD%mnє[Ga˝2T2Nqzi­̌i'?{_T,C8ݧ,슢"M"!INBzKuum]]8bY :,Z|2MJ9|f,:kZ!I!{FK*Md=J' $+py1g$mdp䞷fz.l TP!=`,.|ܘ i袷,{mt4 *|J",sXw}wBQCrsRg֝sqJւIz٠9{Lx=VL'f?W8՗;#?>-.䛷k_~SIq<5JZI`)t&lNU~:@? %"K|onLV^)mx|?{9<y".#f,Q8v#f0!̡NOppw<"6~tgx0'0E/Y#KPhdq<6~#kE7 +pp @lϧ<84;?!)œ( cv+<npw9sp̓ Om`DQ?7DySJHy%u7 G?Ӥ(0TK69{$)̍XH\h +M9rc< g ƗpE$ԤJMnq~YF?()V0Px΃*oI~@iL)Ih4vhD?.k|o_€^}-p`SMA_p62d$ @1oDP`f A j H1.,]qQ?Pz>CM*;mje҂J$W4N[јdwH[_>HtN( ^0e{!(CR%GZP/P-Z ʒ܂ +£=4-"PcʟbyB7 !hACHp'4?\Q.hMNMcRʟ:`TdP0_B8b&KIrI^ BO\]R~I.rƱ 1$yvK5R% A]ĞDʢ BrD,Hh]A`8|%JFmd1R+;lR@$ agZvL;# φDDJUѧ4J|Y'!dbzByƽ&muK(i `"~ߜ2]uY*HJa;;17jT4a"𜶁BSjtrg)AJbA*{xK7] +lp$T!+SLfZҠxI(q5X7;"D9 hYFGN:&}]PDzGtɝ&hlc䫧)ۓp7r8XaqtRN kԖAV~Q>yr"-=$.q AJyʖU+/+]:`L* dA+.s:IC dz];aaxg(#E,&L) 'R*@ &J0Y!F;`B~aevP4D5B] &z%҃,3 [iQNL[qMiQkL[1.lRN%ҡmnF`:];kw< 6f Mel{/![V @* (aaE+-?zQ;)*}IZt - ȂijO'7pv, Ћ2{"̇+ Dv$@O'FAj젷$BV[h]qD( +8)OcwLTW/:Պ[EjqYV鷐p1)`?IT$.E1aP},ävbuŨ Axt!U[XD 4yIPMrR)X,Y V("Ԕ %'XD +Lv''Ɋ">ҫ +B7"-B +,?^6BhNL5JVšNcU #SӺ_=ojzsܪY ($q<(gYЧ^aYe#@9s(g;;xP4ٜ#'G$ `i 䗅,9˰%B8Eg>M0cŖT$#遙vfqBTr(7PQ9j +cX+PGF,j@Y,h$Εq0{<dފ2ʄď$M +1=9Y-QA yL +Ld#DeTiBbrd\TkH@<@QLV`~pH63;(Il’kh *y4ƸADURpʋ%!(4q" +Ǎ. +,4 "`vSϮP#@tVER9hX2 pidUxÝ#؍n.UVXDJa15k _"{_QXE9,vB5J]U+=H}qnu9l6KhQNX?j]T·werN_ ƷZ&.ݭrZ +Hn Y Av5"ȟla9>JkJwVT})ub.{[@RT@Tң iIz4pYu `-!%NϦ rRv#^p)Y @%M^p$ .i{e /{ _.z(WWɂSMq;ɁC8̙{%#hK"ˁ+;. !|/-BEՕ&YSQ#K$E-.@uivOQ7** b@K +im 0R= (JQШ[##;z+i1\ .C!$MG + .5vB"[ vUn]p)~*jS1AHfIi Ω]\ii,van?qjsspi6 { K]* f] nKRkv^qQٿzHr#VI%߂qx=5Z-|e6MI4! +"yt5 Wm5?>#P 2I S'INcA)]u! V$ZUUb/a> J +`<žՅ1OYD~9uI<@I6-$ FEi $N-3<2)TG7()Jv`Of ,| ؕsddpNbi}]$|~ 2 4oHa۹ z˲6^xuJa986#{\_ܬr i7?XjR5/>H)FIv4Z$:*6Zdlԥ kYfqmְ7|HnTQ.!%PJTJWʎQAV:mE迴ـZQq! O{gr@OyD#2^DHǘ$ѱ;(ņ@t=r ?VQq6F=>ۊ5@vCe/m,$q0QU`D>c&O!Yp(-Oi3@ +3V^@(wS(HP?()epiAᭅ:_ D}NvU.E2 +W@ǜ(&F⍔\Z9k(Վ@ѰKP_Y0 Y@Qs[9OHJ_櫧26L@<!, hδyp!cv݈nf5bZrfNʣ+D*}pW+E8e{~0 -̞2 +NSK2GcQ車O\V܁1@I(2YC zSa 11ihQq;4g@P†:|Ү`gGMrc#!5Įպ6 +L?)G4ƒoʹ>HF: mQg$םZ84 Q5-* iD` )* +&:8jGcZ% J9OOI\0sb +ce恞ވ`^ѩhY +*gl?=ر#@4nLEg{Or* |S;ȷ&|dmˋO=IhwzB ]@1]>JНo6J$ڹA[Yl.1!< =X)t 0ť.d)Ι!3IYjA1ҺD8.yWI V pC3N )Q,,EhC]g>ʤ0ܘ({cD;+ i02dEʴ UaiD|֐r;̃L8 g^y18XV2# ӊ+(Sf ^Fc{a)FTF9D"+8)ԧ!9<)Kw\ (HٱlzU +A@Uht9ɺ":qnL+GB ;GJMV!b'ݙe v療C-hgs^ǘ:!"  & :7TWN/ql6O*zz +A'!1rۙEp0߇`nv_* !9I"E (C^I7() `TU$I$ $ ¿~L{쯞 +\z4pEGWdH] \z$pE1+q-\zL#+RH=&pEjJB+?Ͷ)RH=&pE+h\"H#+R \ej +FNJ#+RH=&pEGW"H#+R \Q#+R \z$pEH8WH5&pEFW,zcʸ \j$pEo9pEFW\DHH[j$pEFW \ GYQiG+RH5"U5pE1+RH5""H +詹 LH5"HTcW \HLDSh6pEFW"u5pEH="HcW \z$pE1+ҿͶ+RH=6pX8 a<Ʊ1kXK5b-U!#V/ΪVTctVtJJJ>&+=TȰl`ahJx +:Xέ썵ң$+݂B+1 &ҭ(ҫ܊Ί.n]TbjbがtX騿V:JFQ+ +$٣Gt6qzU+[J+VzbkG[a`ˬl-(#`+Ո^iHz_ye`F^YZjpA#V:8q'b+Z%[BJYX;YݭZbUt'żSΪVzܪVz Q+Bd[Ͷ +-Y9-P obte(;)z ;DT~Y§>EH$ X +r{K]SɌHH_:K]3O!y+ߔ;dĘ]cg|BtݱYॽ g@ݗZl@[j"]EȖ: Z4eHN5ny4/WRWQfc:K]s, ,Y/\)35:A35Gc}(/t'RgPQoPEn=-ƭi`ېe\!g$`N,OLd$;=Z;=ss>Q ܇gngg!.dtK[/rv:\RyriTD4O菁LڗP@P׬-u,{xgA9§(9RT r+JG PPlÈPa&0ʠ*L`t:$ AAd`\2H"3a2`aE~&\dNﳁQ3J}ng$3JeA%*`ck7h,DЬ@ O ,KF S#Eó7&Q` f!SG5(,¨Az"¤KE(@5H6A Ŗ E +i}`9s!`ԛd*v R,$H &KN'Sq0a/yAF)E)1~vt&¬`60 +VX+ +$PZœ0)s8+({AI9'=kcj9~Dși3GXg7:Sz. +7҇ BѬOvDح :P2VBH,#7i| 5j4QiB,*+X{sp>hPckŅƒwTqhOA + +Ov FM\C +./ɜq):=qf0z/| rr=0\YkdRڎ_UfAdw!4zUےGpB +)9<$p@:nPL^HN䄤iqx[&6JSNPjh י6UgD(87GNb%AD>p +&H. l wOxe_=({`a_WRHUrM(].Ti.+( Ȕ08چɗP *>sd +<_Y_.2\V9-|Gldϔ%GB& `L?. g2 ^z K#xP:t2F7gù IukO)"XwgvIaסhnDXׁ]Joxb +A#!1;uc`)mWܖ +re[yHNe0dpsYS٣(8<S\UbE(!$Ny3UDXIc xeB\uhPJ0rLIm2: '|>lLI"DA%E⑇6!1p$I1jR3C%9,/(K6R"`V{C|BW/R]%h7(CY\ dH f{hU}ZZGfрJ2Z $~^Ŧ$ɷ ՊBO8/ Ei*d!!Ial\iXcM`eJ0 @ #%&e(!Fʇr h}XM &zxspDlP| +GA!t3ߑEǺ!le;Eƺ '"+l;*cL+@gRX$F $u3E^yX A!Rœ7]%S*~k;n E4$yHS 0O kBS~ GC=+C[Fi!+岉kQyDPM=2шbd\AbPC!Vtk^E1ôƔ%& Q $EE?0ʜk9X 9Gg~r#o TgMeI)Ʀ:ԁ*~MFBVP9TGe>,#nK,|*Bl epsP: R@M`+Y`y0?xy,>A1h6 APqW 5^xxJg L ( T( L$a +-e*҇+SD`ZMboq :5xn$f2% l&zT^IFr`31ËV JΠs"3Xtxp4Dzp9>B!XլC Dc*"h8586g./ WJ\A%%9čw< XWw@pf%)?Ģ + c2rVGTg9`H,\Pd ᅙ.,-PI/~칲Q~08/(_ 9ȱxz0g =*:a 22fŏqȔ 2eCN13lU05r,YG`OҷĐL&>`N&+) @XI˚.i| NbƇmr;o2E|RI!Ls NжR45 R6{9oΨDȦX/rpM|`-utPN bzy8S/SI*G@@p\!cJq_eF{AK,S$^5$65Q!X/Xу9"3̤SPr1=!(BI/CP&\EۇLB%D +z +/TjA:AGK)T Oc='`~y=5x(b?=7mFBdMP$n0mzhxQ!f)jECo.QbFPB/懅*C10R +Gp` 䰠29P)m:'cN)>)+Q2̎jȔ)zIIϺ΄q`R2:xx.T6aw7 +2_Q9} ^y-,`  @'D[,1fFe {ZBҫ604|cabf7pct }RLЌo0 D=9jTېQNo1R1!d\r@hci$Msș4,901A/(h]UL>Kjc=(#s@-`:&Z0D2H*LaU4[ hX0P.9$R<M<y< +3SJjJz)OXA-) Xpe?fQ]PWRit=1r( R!LYcxf; !FfSiF!y0@=ӧ"/U,e{(VƯ0 7)`$Ü15)12~rJ _eX4bZ(YYJ>WC-ꠀH2j1gɒg``0ABsPRRQ0rCdW&1K1 Ff 3Vсm!ӛP&H<Z RYI2^p§pFA b-Ѧ}n19rR39?O5b!9@S3|@fC>%316h$é5 !dvԾH!GH~z9@0ߍP*fR2e2 oQfQ@n[0SA +6ު+I*Й$ٲ,8d +F?<㞂6N$ځ Asn + c`kҗ贂Жt0qMiX ~`ROubΤ +(0|p3Ʒp)'CK _a7@ LXwecʜaLDɾ0G2DoOБ(92A씂߁ [a4ø"s9AJ,$aeJ68JbF+SnF"GBׄי)cIZrT -'/m[fTMWP*VK.rCDUVlEaD*PeT.*G Τ&mH92 )@EoDFITJ] &5궀#x$\-R=Z䮣g RwЋ?T4LH)>+m]ls0Ǵ\$,x4NH}<` !YJ[X},ڂٜ[}n  +k)kR\?"ᧈ50^ wҡD mr(<*Ypw_BN;d\ Gkb+I3wN0]pA.'2|(D= دĪ)'lr€?#EFaIL:!55'r:0Iic˵-ppMWR~0ĂFBJ,'QE) +~ +=5i&A ^4iMu+YQqɄFB@em"ŔRBT.)9:7sR`T~J&i"ߕ0$.M"67;=D4XI b=t(9p8``?7p#ѓ^kGjf`g1=z$t\)-9KxH+P1KV `:uHBڢV +d&z)9nʶQL ޞw9? g[,^1!1L%f31R 2+,>(;:3|vnOLB8OiJ.AF-spsAsi.{CtVG0 $]i@3"VTfh%f^ ``뛦^''|%ߏER>yZ."M#QvB0~P6ə`=˱[pxq2Oe+6@"ƫ7<CDq#.F)@Ώn%gk'jY:x1)|B>Jpsu}@q=6Ë0͖P2*  m4LѨS`0惾5XIIC:ݕ+Hx!il*x$8l\R"*'sg^茕 +o@ߨ@9M&|R]<\tS@)=1&P1hȠ JIO,9wIisA[ӂnN/Hs^RBO=Ww`F%*砗47Kb891hئ.Aă]KNo ܁ 4TrI.}:7A r*^lz*b52'HԒ5蘞9ΐ;ΔU+])%RP; +$I?!/5hH #Q2N ]NT›?TFj茛 +xn),s4C2)62I@PxOfzɭс? z=x!~4HE@ekX`0DwJpq~4`NvRȹX}E3=sEDb[r4 JF/*fn34< xnb1OoH(*B7/^ +` |'>\H6eP$Ø^ -z8 0 KvX/ #).^ɩpAΚ:pax?鼠S C,XRx$UBJ)F[!'4Iz :Dѥ RT::(|$:ŐFA4Cb +^+dM@6R + +Hx#W D,W8H٤;.m7֞9WvLK6Pqo 1+ ~% =IsKCZq`To2Nx|a=ƚU4[+ *p \quwi`X﷤qke-Ԟw:~-[j.Qx옑UDMLfP2cfcܿVla;'?l뚊bwڤ6 WhjLyPUV \ 7X:Hpu=@Bn= ,:Zo+@~W9w)Lmt*rK9IR3s|.&2!X[W7by7k/A qJzo =|}Askgsze@J 8D~<)ݢ_~4ߛa^dΧw^z9ЎtxMNVnN|2Y@fgʇI%9=YZkuyzzφۄlu>0ȂfѤݟa}Yi[mD۫qjl?tcx=Hӡ ;{`fFdV2=2?Zꂲ8)~Y( x@",,(g;@A/t{* )ڱ$AvvK ̝b}-b&PGG'j,TPRe2 -`z5sm$VC脺Bz@2 ]Z +3)J3 +b. 9\ۑ(s-RXeaWLɄ;iЅXp+qV,T<ѥse(:(U ze[^YL1 +|P j"Vk% +R2C8rl0~ܺ b*^ir *9i̡&K) +$5^сwO!9uM iƸQ# @7>Cg^*}?}s>5(mgLkHFhv;糿&qT\߮-~U^5Iƙm~kB%(q"ѤdJ3o(!8QmzM (| +J(ȴc(甞ӥ 1dDQie1 ǕSV٣[%$}@IzȔ8FA@rhSM[+a AW;UĚ):4*^WKR"mV!g lr4mjcd斢 3ڡӮEV'FQ(*KzaSA4ڡtJMH;f:~P)v[J(FBܟq4o3J.\ЦfӮ=c~hw*XlY3# eP3Ghk+dD*9ף4 +|`7YCXT$}`9%2 P0(S7* +aF -/!.z^i,Vi2?BWXZ&Md}(`1"HEg3ֲ+Z>l 54h$+.xJpk'W +9DU gwL14:@ShB`K~unۧ'N}ܯ0 q9zxP{7GkxT+Y@Dko1?ol%~*I3\P=#<~sofS4,q:vO~,'~txsP[[y]؁6/`i. Z}}r~Jyy:j}uٖ?xa6uFl6O-c\diE\zBGd13uj\d5_rގe#|ʒ1 16C `zw'eV9qְD?A~s0h~!6j=ް.ye%-yXYwT/O~'Htbl/luJ O _Z`'_ȓDn /-\q_sFĚď s} ^ipǏIsX߯wߜ}y 8J^}¯O0jU za9|fS({ymn&Q[:vk'AKBkǝn{:M[n>l W^6x>N~51[ýn_kx.řmjM i[`6 &pn[7Atmi/YW냝mYm9AvW֖x)<";5rq n'xPl|ЬmAY4칶)|4sf\Cϡ/sꕆ9;q{G|mg}X{i9a~S=C_[!U:4ڧFzxkFD}oEݮ?_[mlax9`T9n/Zy`ϡ$<<33Z33x2ѹ J2^| KykUg}jajk0ww!JQgNw|e<zNjBÀ>Nаrw./ EJ[7hi;n ρ.d.j#[}n ; սvc./lX̥Q ,7,`6B%9)$|nD3As'N YD۰ծwyd{8+۳?+2q5 f= WWEhUSyղ1 &/6B:;HӧvQrV]g-[9>$jk[;G4>OEmTlnyq秃aȓ_RNc&?G #9$q{~oz'΅'ۿpd}1n{>7 c7ִ  J* YrmŋvYC-~"ۆ:chޗjhTɛtB3:P賺3G;4 +#&u!1kqai9]}@|>ڎU']yV cwB˄@K'x(z9uۇkQ$G6:U}hG=H|C +Dؾm5v\4:IDl >Oz|

/hq-(ڱߎ.U'l& n0둹~Fn1`_|>Y0f|N; TBma);;VƦc|es=fv^>z7[]ci|)dtSٷj- +\P[puwqc<+Qe*hj׳ݎۯz4}I3FǦSt~SZSkK6]fᦔIa9hfmxԬXذ?ڀd{B ׀ +jncX;;= #u;5s\/84uwEQZ@7jf0iǬ6Bfz]f0j ΃LoF95[i +'O>vM׍~wmd9IRlo71Eޝږ[FEܘ"ږI0IHa5ɬ{QjN/Dw;Q{\5A)X8]?r.C%8f 磖 hFw$9횵FC('vcClfE޸aP=:=[6peA=agnR3B~G 0lXAl1\ZNxhЫat^❣rؑɗ'q"7d]p8:XP(a=W9Qj' +cAO^c>^uʩ;hw o[32<ϊ.2/v(dc߰A^|9,|#+j ª.$Rݫ7__S&/r(gIH3\T4!;.qp~1,scxI_#TT75C\qIC!ær˚K;+^m$+o~y+OOnv.=\tcJ>?5{`-|sս>^65J]Nɯ>_[}7X< SӋ6/m6oJÑ6_O՛K'՗Sӫýgo-̿8{а/̟\_1}>s`j9_GÕەՆx՗ԏ`ᇮՍKsŧ_v.whS姙덵~6r>޺4^oW>__i^[F~j]_;5vW?]_=Xxy^r.5K[6/ReW;u("ñh {]=YG|n^vz^(XV/G/]q}[~2^xw'Xjj;3m<7?s7.px:Nx `}o-Ut]6gfW7k{k~FܺsMᐱyCv{u8W7>u:GKO?,?^_9xX$kdcr; 7Y~{NeSfͧfgä͗V5O7{[I#6݃֠{%g/o<ռyĜY <|zuz.̬SWdK/v7kųWSӷ'k:zk7O+Z;vW7 {suiݻ{V`Uo]_zz35p+wE$2]Y=X!g/2 4͑{ߏ#I|}ݵ;^wd)uibgzKMvW=z0~{M_a-:|ra2{֟ϼ׺_4\_m\KG/=g|iϪflyg;O&[]X:V vZ[o I}^!};l i +MMƐPXYد~zq)[up2}hkoy߅y؝{ߕdɲȮ9ù{4oFQ{zu땅;7ybygOv^?xb^Iӽd^U|sleݥRy󏖏_7ց?7aX޹vbT<lc[ RǶG7v|֣׿Rӥ̾J܁;3 $w0|7|fCt;X{_dRupiiyf;Y;o-|؉ + >w[ n-Z|^m.5?a1/O5R,R<姧kA <)e^\,|uWaWıv/Qb߾:{}[&3N6=Du".L>}>5ޯkՃՃǧKzqZc=[Q3y8}ljK>Xxbiwsa97:3tik{ևkf_ѝC1׌[G A'f/-~h?^.{y -6glObosC.|)?[n$^dwo>}xWѥq;2/u{{{@ݷb͛fV^ug+;f}߭}4lrk{fo>]ݽr)"{MR1Yl;@\^_YzoTōWgH-vrT-E.'g6APSivscשgwRc%;^}v'2eSW/RV^f(O ]i|f:lL7(.=Y}5\zZyduY._bߎtpR1OVʇսkrvtV>\|nѣ g;sk`f/vC_οY_MF==[7ﷁί>epݾqz}1~4{[t0&s䤿cxM̒qt|H>qT{ry}utOy.Q,d~ +-;W,ھs=y]i8qzoB@BB׏?I6nƔkٌh4ͭyu8-Y,-ns6H1l-R|5$I n͢bf*OQY{"Sz5d~ /c)3#SQB;++Oj#^&cؽ rV"Cg9]Q2k +c.fAFZx}wWXi_Xy3! oTcYI'=gظ>Mq彆=HOymbe3賌[^D7.z +ĜuLyEFwod<>%Ny{rԙKVcvL <F +F1k.5~i,XƌfPuVWDž(pzʌ +E).opZ15mlr8pdbyCxE0A,1gF?=m۩oGXuY*M)fHh,4t\^wx5 5{39Y?O+?i=^_i;Z "8V59W&uc8LTf/aI,C@Q +~j̸ Z2Dkڄǒq=6 yڒy1\fx׌oJcodgY̐ k)m$~K8,bX{?cv`Erh;F:>2gwdt}-O.t5ӫYLm3 ͵w{}/o okGKBPEٗef`C#I5~ndO0^ч!I;WrT#@ +i7e[Hg^dL/h2K`7 FwTRZ)`a*slk-gLYC&bE`;SïON3E&LJk?ګ=BC)HF`9;lcq4Bf·7{@~/::tX`3li˅#91c~ GLckM5/TJgfܥpcw`Os9Bϩ/BHxK!c/)d`/w|QBB\䥙yA__ħp&EPm'3 +,M*g;g\~|q Yl}˂'˧olhaX#P)W%e&}8Q*JT m3s`;~2J@be0IaVc{Jʿky|W|gyǸ=`gL&5=(Z_n||O5Q[_d ï`ʚq;l/i߁Q : 쭆 ~E 8=~6WGzٙ $t@˼,`. +k3`=sRJxcw0d + xm`jS5D,C̷̤u؂L2Eq.*b;!bϺ yO{6Bנi*A6G2O\k}HZzOߜD6xϢDڥs߻-YMǚM28vݟO8 g.3OL?aTi.hKKlRKOZ`>}gEW2@߳[#Nk%@&esV=)jM9?*`}%ZT顭@ͥ 0SH_8wSD)="Ys}0,a>aSˌ:bV$h\̌57bn޶o?|䀲1qt'mSSx웂x3Gz%]`bȉـ[1a\?a _Ukq1Jwcԩ<놘1La; }~ƶD +, +c5aAk +Kt#,mLurmW:VU41͂U6nxش^fEJb39bK#VTYlaG;bI&ZcBgԚ֖Z0IHKƠ Zɬ }m4yݝ6xk3â[~n_mm[ mt?vTF +ʓڟ& mm՟MMN[uFwtL:GݛTׯ)οtЗ.K*\JeXWܺoء,& &^7tdWcЭߓ k+/ɞۆم>Rbd0sTܡ/ַjU*ǬӀNa`;o%ddm61bH_uCvQ[ŰP9c1 ;kʈ&ni9iC`c?q`z[Ec\F{QNm{zu4xh;LcrNSō۔gj?5[(]iUʏLe, +)ί@ xhNgBshEsc]7ɧyVؖ k>&Z)1W*E,iRKչY:d2`EOj!Yƞvhν(Z3n&f>N&}gг7bHfd S[j?[&ڃ[;mGOcG쯎MϞ>d~σT)JWeۡ]7!bs#k;_Gӧ~X:%ze8s[P2ҫ9)6sοϥ-P.<)7tUG, ]@=]u8+N5uKQ| % y3تěEeĔHnu" 8IM62IKv,9}䮤3QT}Myݖ1T՗(P>Fnmk n1is_}FwkӺ;V=?xlKhl2i4]{vvk&^?1y3 Wx?w}־ XfeŎ!~cfpm)W\n/&nG$)~J b50Zz`_AO fYl;_mD#B&Nf3Tt5RRh.B ~:k,Z]|_'u1;d8bYogxۂس}$"oEk>2(яlƨÑ\F#oA-U=o'u> XlZnpSO<=~i{o"P;-O Y]b-J%d)4J;YWy; +35h/\Oto},S |L+C ZY?-oYl}TuuHneH>n曽d7,'lzc1(,ZH\a>9} T7ŭE[XI$ˍYM7{{ommOULd=+T%]5ퟪX_?*Ac}ټwG_{ޚknlֳi}XlokF5h4_Ӧk&z`5вVy)߶%Qwk W7hH ~;9^?M G?GpQ~4*m)Wp[ŸX?i8 ziiW7`_9r6QLFmlqOXD'X=USZޫik֪N>)'3wVUg g^ $}~Uڝ+F}S$ԍa-:Vrq-Z3Y~}w/ƿٲ5]uO|"k}di_s7,-Wtj}4nlXAcϮhcAk?+ ppwx=7"nVKeir8w[[ 2Y0JgCB%?kXA9%[3٢ w[tq'Z R =Q1 +d9{x»)i {ʅ1Lq[d +-̾_`[q +1{x]U@ʠq;ZGP,ύIa֛iܾ}+ĊCğ{m;3w+੏L ß5[3P-鰾J^g_*С*qNwk9l6fF\l,fDGZ:]߅~u7%5J':%+߀$S+}aKWZ%n-r3`2z扩m^o鞂MX\t_Ix&QT{KX|չJ—6¨!Yi6G6dK~DcT)iZ8m S\K Խ`*LJ=hUI2]h?X2&^_FOHV:*i zKtt%ӯJRBW)(Ytn7Jo}EV*`WgXIJ'x>nIW㦹Ej bu(Sia183MAx `VQAo m[}Ld*|Yf(Wi +/[T):5 ~oC&JNRB9ȢA[zd-[6J򢯽,*n_+-Qf&t[JU +t25j2 UvI@AeG岯],#SiߏJ~JO*jGyZ{C݆TmUARC@xҜFS锲&4JISĜ8U +jŕ60S1jOzD }hF0P yWPix +sZ/]i(:Dоu+ &RX S~LװR\T~o[D M,.IǧӒm%N+_!c^]E9ڟ3^ii9_6xP_K=\ʶ>m.Li? 9&|lOmNE&j PנIGitG:3|ܯ1߷>Mӹcy9$zjkQi*8ks]K3S/蟱>2CF1;$(`ۀ,SIoL}Y)\u0sXDG +47N7#\ePZ#땭O O-@;i۽VcE;J:IW~V +_Bdv:%SRwyu^3QURJ^h= *t_aRRdT +r:0Zj _Hs*UZ2Vl +R8B!y\= %1[yoxZs_Mn7Lw*W,cEgW;<M$s3XfGs"[l֡NuR4#@NZ d{)&iX3ũ&H7L>Wږ=s-^µ w*)XKq!@UP`zm3׃Q@<-%I5jȋod[(܁@[N5?LͼDLl4ǯ>~:VFƤzצԏ'P,b5%Q#gf7I'Wlw;%F<gPX.U0-T=\t?3mFZHn6 `v;b-ͻUr$5*:GE[5VgF4A!)WU׫yidFBA-M0@vv-; r>A:)aoޔCmw2_[,9LOF/rE jȶ'W=!&D}wÞ>=0uS| +dlI!3AfpKtw*Snp4(/j@Sj3`Fuؒ|}yx~PDzprA 'ٓ_Pj9Rb).A$YGK8 /).]RU!Q%.Yqk\"ɪ e6]kČnK(uo$qS +'|{DB*~DkGcPҭ +p庯O +d5;^UӛOV`JNbSȁ3*iؔw=cPnZmL"nZ"KYv]΋Ǯ/wxE'!AAҁ{@ih:ƌ85NΖ-t!-K*?~ +YǓ$h6e;uNx*Jy[靅aI>@iTn$ok s&NytT$G嬓os% No[D&d]B3TrDibHg|2F崪b% X vXTh4II0&{T59v޽b]h'H  Fy:k Mq<~(fǥ1HYEQAm]o <qXy}2ՐJ, y(5imjka7)YAV -1P4u:L{Y*<lE'U%Ng jJXd*9U5JD\L.fE.E<΂;|cumtLc85q DЉCwctH'?C'[)Bɢo)#hG0t:NA'@ >SF)o)#Z :l+@б;1t:d] fUSFږG]T4IӛmUʈwæ֯s@ /%ظO!@\XQv7kN18,uCk9y.zno JIR9ؗ@stMZ +: +BǏI6sWu:iT݄:$1cLmk`7O[A[kې @ +#& ".OlQΚdnY)R!7ALux}o%uckå+r6%f8ʚ](0$Ɓ]5TNboM_t<4MlJ_ \bRM:`z0%O-ϿQat:$4;CBī ǮDwhwqL%CK ٲ>m;ߥx9 KpE 1&3V9=vweSٓ# QĵQ8j5B#r6i]w2h]&{% +Yő''핂<\SG,睌Io6V.<"(axnc;0;q|Z\4hD[ y##h EPhp2__V$8&p4$<,a + sw:xdx@q Zq <2rkn\LE6 +aP$nωd] __ L޻t|"tA-x Wwse*թS +HNТ%U˳-Cw2 .<1ux']]=ZG[/+^ +* vhTez>1rT^H=ګ x/T0DλH'^P|*BnmMEpFT5n*کh\LQׂSyлgfJ;"q +R&p+hHt' q}ג)+Id'Zk@5ӯݥ@8%;OD$64}~[tRs.T N'(/餰t"tRxHGt0sVtRrF49 V> M'ҩM'k?g`Njth:);4NtMZ-{tRƩl4IDC=S.4m\4z=? MwnF)bV?M'Ed4i( h:) ܽ>MwdIh3tRg!{|6b7]$2I87Jd0߽es&)ϳ[tn%A$$d^5,T zkIjUrƒ9uSe&IRj>)]QpD QJbse-K)ix\4Is'] +2͝KNUr|2vj(zTQy8c('{8}NѶ{hPD8BEOSj50:yVҩh\GqZo"ܑu %Y]-P$KSe,u7yO%Bu%\u4 u5~Lu4 .[9龧 ? +gF_%U]"Ϙ])|ˎkK`m}[!$2F2ZF.YV6Xy5߫R H".#wr1)-KRӳ2U#bsySj7xasy'@y4[5M< n8-Vp &1 [* <g;+r1 %+[}[;%,hLdʻ'R)Q<)iNKR'ÝRW wjo5ǁg^UkfFC离X+F>zA|aY}=WzH)x2n/v<Vb\f˻.b⟊BaAP:}S cRb2(oScv#Ŏ,)hVPWܶ2hV3+ՀLw_ٹ $As'*"PN k)ܿܚtXyWSuۓ0]٫na=^ɔʛl +u+hjԳƕ(;~ 7RK"p)ݼPRQ[ތm^)[EL6E/<ȵ3 ;RNc8Z*U%L2x8<o Npϫ-9^_RmfK>S\6 W)\JдgR"IU1@s `x1kUR~K97R4W>*Ey9R\RbKtDvjĀ0OְK82QI\=>[qm1-]dkopL*مNe$`ǂNY̮NXtC"I mdF%@̂W2$Cd"3 ~KNt+44ItukX5ݜeQIQZ7Eii J$-㴘\ƊU +ӗ9SJyW__Ϻp^V{3L?r-I2.MZwzhBࣗJ'k+Na$HN27;0'ԛctbu=}eb?u'Uq.L'S#8x"iٔL7a7sk2*Z&Bjެ +ԫrR^Ki|eY:PG0Kfص,:&1VhUycW<;)<|cWı/C.,e29* Bt +Z ?Z Qj1k}7 +P * +;Lqm(@@ȱQ?cu+ +P-#߅i^IW'S푤|]x'Ied{NR>3l||j@Lnoո-X^?c"z< R+p^?e3GFn맜[~TS{}B^?~7 +Җyjy(ߥ+O[)wV):|Jw^V?{o)'}y8%AQ^?Eey,aH^ eV ;)waJOm+7Yʆy8$/pе2S:⠈| ^]ÇViJG|Z7*JP*Ut1&qo,X!12|DK}# ,+{GT;qs}nj(d"@i5;VSbsoqbɌ1˕ݻg43gѹ<{x_6z^4o]<ҷwWx/.zII7fIZ8C}~j5$bLaW7B}+>k$4[y]jM!yRy%L[r0 ee5ݎQCu$9/6tZ3Y:}-}B%lz_m$NjȖnurp Avz[th焻f0:ҚqΟ3ϊP@k؎4V$f\4Y9ܖNs.'*pWgA $JL\xLɰp~tpG3z~g+s3c,@elDe6e#NvaPAw~I;]F< +doO9GswjVdO?SUZ#>3Sк uZlEL6nDe0q1ӴFw?τF%B~gSpD'r$0g=@Sh,>h}P-LdgeʖZS+37ݵ%Ύ xttyYyYSsY_ j\ uWoq`W6nlspsg٪̱8hf=#vd$5̂eYvq,`{R CeBτS²@t]PLb5a$Z LL`*CYX OX,rBx0/OgW,v_:񱗋- 1lιΛ첫o w9xzÍ }a +fz0b^ 1_fhyג! 5=sE<7w3Fy0hރ&zN@c`}ggWmm cAd l6e1:$Aѽp=(-]0 ++$!m05'CWΰw7'+3Ւ.2V}ǡ";T;4Y4XrvTnʼnj~-_Ʌ7SIu~V493\r>]I_x8G 14N.|m_#WLCag sk Mp=vð, im9'r%< C{gktBC-7ӟ+irS|} +@<~8Rɫ1653i%۩1q5&huռes;z.Ov)TԚ--jcK}k;:4=HfffH ON` yF$];h3΁OCg$QC'َ^a?b+q'#,!Nd|O3ΔdV5c+cDBC[Όqtᅬ  KPnq`Կufo @);S +U*YY Z\SSNXK:³r-d8Gz\aBGP[mY5ڒ936@eiGSd~:G'}c9coEM\:VZ ) ҫ@T2[ƈ}c8w)hq5{"4CM4{s2>FDhE+O6ZcƭrA@s/#2QU:-=~5?޺;熟|`IT/Y;_77\MRGwBjt) Wԙk#@d:Y2 ̴N\?fP"HeݹwT6.980/L~cuOtynw!/?Ob2agr21,F_7?Ywɟs2 CC#f΀8GLL18$~@ *⦮ t,% nF3(rVA1NDǵnL^8TQ1}%pGO m6;4koOxof; f旰Id`|22=(c@1?&c%# +c$1Q3-̏Șj% Nels>2ȵ$EȘZْt&ĭBOn)JYru4yu+F-ojYnE%*kn6#."GgGb:4<Lm66P +mB%j3ŭIħ#XӖWV"> oRr˶R[~FQ\%ZkƙbASpP[ӝFi-%W= DV8vyh +`{y?BE`bO?IYCvl]Zo(&[g@goRسR[*ǀC6F0n6&#&l٧2[{yC@!rWs1h'@Y̍(1Dc!!sER%vOZrכ.)Jahs;^?*:o0v>R-[>VXUQKB5v hOp&ή6:RGm C+/vId|' Z._{cXNRh@nیdl@en LM-3nu)ߒɤ-iЋ=Yu zAm;M;j")GD1@I}~Pހ!qA TC:^KWCx}8% N +O8N9) +6Ƈ;Al%zJv7ѐ, µ祜'kfJAR/Art)J? +!|$;>/] +>{I,9 wxyN p(*>7>Ḣ6q$`p/jxCadZDYF5 5ދ.q5I?/陉f LII(n->4$&>x'5!# MN@jq l)K^o=ye@Ddđ+&Mƒ,@wӇS$K3  ^ad#\).7m#NV2BBঘ_<>Cd'f7/$d=g܀ + endstream endobj 50 0 obj <>stream +ā. 8AB&H%XJ 7` X˜W@s%x 8h򿒼Fc@A8h//Ts NISXkN pe@hA!ʅ_L|Sb-4"⨘]0&!酑_B+>]/}:ZbTy$Ey|  +Z{8~_ Cډ8m^>7/T#7VR0T'~}3כ8߂'/_` u1d4 endstream endobj 5 0 obj <> endobj 6 0 obj <> endobj 18 0 obj [/View/Design] endobj 19 0 obj <>>> endobj 16 0 obj [/View/Design] endobj 17 0 obj <>>> endobj 31 0 obj [30 0 R 29 0 R] endobj 51 0 obj <> endobj xref 0 52 0000000004 65535 f +0000000016 00000 n +0000000185 00000 n +0000047379 00000 n +0000000000 00000 f +0000266555 00000 n +0000266625 00000 n +0000000000 00000 f +0000047430 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000266816 00000 n +0000266847 00000 n +0000266700 00000 n +0000266731 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000050006 00000 n +0000050077 00000 n +0000266932 00000 n +0000047801 00000 n +0000053181 00000 n +0000050498 00000 n +0000050385 00000 n +0000048830 00000 n +0000049445 00000 n +0000049493 00000 n +0000050269 00000 n +0000050300 00000 n +0000050153 00000 n +0000050184 00000 n +0000050533 00000 n +0000053249 00000 n +0000053489 00000 n +0000054522 00000 n +0000069362 00000 n +0000134950 00000 n +0000200538 00000 n +0000266126 00000 n +0000266964 00000 n +trailer <<64A8AB8E858948269A0BCA92EF85B468>]>> startxref 267136 %%EOF \ No newline at end of file diff --git a/packages/web3-account-abstraction/assets/logo/web3js.jpg b/packages/web3-account-abstraction/assets/logo/web3js.jpg new file mode 100644 index 00000000000..3b4cf23de26 Binary files /dev/null and b/packages/web3-account-abstraction/assets/logo/web3js.jpg differ diff --git a/packages/web3-account-abstraction/assets/logo/web3js.svg b/packages/web3-account-abstraction/assets/logo/web3js.svg new file mode 100644 index 00000000000..df8a2fcb868 --- /dev/null +++ b/packages/web3-account-abstraction/assets/logo/web3js.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + diff --git a/packages/web3-account-abstraction/package.json b/packages/web3-account-abstraction/package.json new file mode 100644 index 00000000000..efbaa27231c --- /dev/null +++ b/packages/web3-account-abstraction/package.json @@ -0,0 +1,65 @@ +{ + "name": "web3-account-abstraction", + "version": "0.1.0-rc.0", + "description": "Web3 account abstraction package", + "main": "./lib/commonjs/index.js", + "module": "./lib/esm/index.js", + "exports": { + ".": { + "types": "./lib/types/index.d.ts", + "import": "./lib/esm/index.js", + "require": "./lib/commonjs/index.js" + } + }, + "repository": "https://github.com/web3/web3.js", + "author": "ChainSafe Systems", + "license": "LGPL-3.0", + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + }, + "files": [ + "lib/**/*", + "src/**/*" + ], + "scripts": { + "clean": "rimraf dist && rimraf lib", + "prebuild": "yarn clean", + "build": "concurrently --kill-others-on-fail \"yarn:build:*(!check)\"", + "build:cjs": "tsc --build tsconfig.cjs.json && echo '{\"type\": \"commonjs\"}' > ./lib/commonjs/package.json", + "build:esm": "tsc --build tsconfig.esm.json && echo '{\"type\": \"module\"}' > ./lib/esm/package.json", + "build:types": "tsc --build tsconfig.types.json", + "build:check": "node -e \"require('./lib')\"", + "lint": "eslint --cache --cache-strategy content --ext .ts .", + "lint:fix": "eslint --fix --ext .js,.ts .", + "format": "prettier --write '**/*'", + "test": "jest --config=./test/unit/jest.config.js", + "test:coverage:unit": "jest --config=./test/unit/jest.config.js --coverage=true --coverage-reporters=text", + "test:coverage:integration": "jest --config=./test/integration/jest.config.js --passWithNoTests --coverage=true --coverage-reporters=text", + "test:ci": "jest --coverage=true --coverage-reporters=json --verbose", + "test:watch": "npm test -- --watch", + "test:unit": "jest --config=./test/unit/jest.config.js", + "test:integration": "jest --config=./test/integration/jest.config.js --passWithNoTests" + }, + "devDependencies": { + "@types/jest": "^28.1.6", + "@typescript-eslint/eslint-plugin": "^5.30.7", + "@typescript-eslint/parser": "^5.30.7", + "eslint": "^8.20.0", + "eslint-config-base-web3": "0.1.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-import": "^2.26.0", + "jest": "^29.7.0", + "jest-extended": "^3.0.1", + "prettier": "^2.7.1", + "ts-jest": "^29.1.1", + "typescript": "^4.7.4" + }, + "dependencies": { + "web3-core": "^4.6.0", + "web3-types": "^1.8.0", + "web3-eth-abi": "^4.1.3", + "web3-utils": "^4.0.7", + "web3-validator": "^2.0.3" + } +} diff --git a/packages/web3-account-abstraction/src/index.ts b/packages/web3-account-abstraction/src/index.ts new file mode 100644 index 00000000000..c28fd333cc8 --- /dev/null +++ b/packages/web3-account-abstraction/src/index.ts @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { AccountAbstraction } from './web3_aa.js'; + +export * from './types.js'; +export * from './utils.js'; +export * from './web3_aa.js'; + +export default AccountAbstraction; diff --git a/packages/web3-account-abstraction/src/types.ts b/packages/web3-account-abstraction/src/types.ts new file mode 100644 index 00000000000..b6a4c408877 --- /dev/null +++ b/packages/web3-account-abstraction/src/types.ts @@ -0,0 +1,107 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { + Address, + Uint256, + HexStringBytes, + Uint, + HexString32Bytes, + TransactionHash, + LogAPI, + TransactionReceiptAPI, +} from 'web3-types'; + +export type ValidInputTypes = Uint8Array | bigint | string | number | boolean; + +export interface UserOperation { + sender: Address; + nonce: Uint256; + initCode: HexStringBytes; + callData: HexStringBytes; + callGasLimit?: Uint256; + verificationGasLimit: Uint256; + preVerificationGas: Uint256; + maxFeePerGas?: Uint256; + maxPriorityFeePerGas?: Uint256; + paymasterAndData: HexStringBytes; + signature: HexStringBytes; +} +export interface UserOperationRequire + extends Omit { + callGasLimit: Uint256; + maxFeePerGas: Uint256; + maxPriorityFeePerGas: Uint256; +} + +export interface IUserOperation { + readonly callData: HexStringBytes; + readonly callGasLimit: Uint; + readonly initCode: HexStringBytes; + readonly maxFeePerGas: Uint; + readonly maxPriorityFeePerGas: Uint; + readonly nonce: Uint; + readonly paymasterAndData: HexStringBytes; + readonly preVerificationGas: Uint; + readonly sender: Address; + readonly signature: HexStringBytes; + readonly verificationGasLimit: Uint; +} + +export interface GetUserOperationByHashAPI { + readonly blockHash: HexString32Bytes; + readonly blockNumber: Uint; + readonly entryPoint: Address; + readonly transactionHash: TransactionHash; + readonly userOperation: IUserOperation; +} + +export interface EstimateUserOperationGasAPI { + readonly preVerificationGas: Uint; + readonly verificationGasLimit: Uint; + readonly callGasLimit: Uint; +} + +export interface GetUserOperationReceiptAPI { + readonly userOpHash: HexString32Bytes; + readonly entryPoint: Address; + readonly sender: Address; + readonly nonce: Uint; + readonly paymaster: Address; + readonly actualGasCost: Uint; + readonly actualGasUsed: Uint; + readonly success: boolean; + readonly reason: HexStringBytes; + readonly logs: LogAPI[]; + readonly receipt: TransactionReceiptAPI; +} + +export type AARpcApi = { + eth_sendUserOperation: (userOperation: UserOperation, entryPoint: Address) => HexString32Bytes; + eth_estimateUserOperationGas: ( + userOperation: UserOperation, + entryPoint: Address, + ) => EstimateUserOperationGasAPI; + eth_getUserOperationByHash: (hash: HexStringBytes) => GetUserOperationByHashAPI; + eth_getUserOperationReceipt: (hash: HexStringBytes) => GetUserOperationReceiptAPI; + eth_supportedEntryPoints: () => Address[]; + generateUserOpHash: ( + userOp: UserOperationRequire, + entryPoint: string, + chainId: string, + ) => string; +}; diff --git a/packages/web3-account-abstraction/src/utils.ts b/packages/web3-account-abstraction/src/utils.ts new file mode 100644 index 00000000000..f92afee649a --- /dev/null +++ b/packages/web3-account-abstraction/src/utils.ts @@ -0,0 +1,97 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Address, AbiInput, Uint256, HexStringBytes } from 'web3-types'; +import { encodeParameters } from 'web3-eth-abi'; +import { sha3 } from 'web3-utils'; +import { isHexStrict } from 'web3-validator'; +import { UserOperation, UserOperationRequire } from './types.js'; + +export const convertValuesToHex = (obj: Record): Record => { + const hexObj: Record = {}; + + Object.entries(obj).forEach(([key, value]) => { + if (typeof value === 'string') { + hexObj[key] = value.startsWith('0x') ? value : `0x${value}`; + } else if (typeof value === 'number' || typeof value === 'bigint') { + hexObj[key] = `0x${value.toString(16)}`; + } else if (typeof value === 'boolean') { + hexObj[key] = value ? '0x1' : '0x0'; + } else { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + hexObj[key] = value; + } + }); + + return hexObj; +}; + +const sha3Checked = (data: string): string => { + const result = sha3(data); + if (result === undefined) { + throw new Error('sha3 returned undefined'); + } + return result; +}; + +export const generateUserOpHash = ( + userOp: UserOperationRequire, + entryPoint: string, + chainId: string, +): string => { + const types: AbiInput[] = [ + 'address', + 'uint256', + 'bytes32', + 'bytes32', + 'uint256', + 'uint256', + 'uint256', + 'uint256', + 'uint256', + 'bytes32', + ]; + + const values: (Address | Uint256 | HexStringBytes)[] = [ + userOp.sender, + userOp.nonce, + sha3Checked(userOp.initCode), + sha3Checked(userOp.callData), + userOp.callGasLimit, + userOp.verificationGasLimit, + userOp.preVerificationGas, + userOp.maxFeePerGas, + userOp.maxPriorityFeePerGas, + sha3Checked(userOp.paymasterAndData), + ]; + + const packed: string = encodeParameters(types, values); + + const enctype: AbiInput[] = ['bytes32', 'address', 'uint256']; + const encValues: string[] = [sha3Checked(packed), entryPoint, chainId]; + const enc: string = encodeParameters(enctype, encValues); + + return sha3Checked(enc); +}; + +/** + * UserOperation a full user-operation struct. All fields MUST be set as hex values. empty bytes block (e.g. empty initCode) MUST be set to "0x" + * @param userOperation - represents the structure of a transaction initiated by the user. It contains the sender, receiver, call data, maximum fee per unit of Gas, maximum priority fee, signature, nonce, and other specific elements. + * @returns boolean + */ +export const isUserOperationAllHex = (userOperation: UserOperation): boolean => + Object.values(userOperation).every(isHexStrict); diff --git a/packages/web3-account-abstraction/src/web3_aa.ts b/packages/web3-account-abstraction/src/web3_aa.ts new file mode 100644 index 00000000000..fb81e6a8570 --- /dev/null +++ b/packages/web3-account-abstraction/src/web3_aa.ts @@ -0,0 +1,340 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { Web3Context, Web3RequestManager, isSupportedProvider } from 'web3-core'; +import { Address, HexStringBytes, SupportedProviders } from 'web3-types'; + +import { AARpcApi, UserOperation, UserOperationRequire } from './types.js'; +import { convertValuesToHex, generateUserOpHash, isUserOperationAllHex } from './utils.js'; + +/** + * Account Abstraction feature allows enhancing user experience and security by allowing smart contracts to manage user accounts and transactions more flexibly. + * + * For using account abstraction functions, install `web3-account-abstraction` packages using: `npm i web3-account-abstraction` or `yarn add web3-account-abstraction`. + * + * ```ts + * import {AccountAbstraction} from 'web3-account-abstraction'; + * + * const aa = new AccountAbstraction('https://bundler-provider'); + * aa.supportedEntryPoints().then(console.log); + * ``` + */ +export class AccountAbstraction extends Web3Context { + // local package level request manager + private readonly bundlerRequestManager!: Web3RequestManager; + + public constructor(provider?: SupportedProviders | string) { + super(); + + // If "provider" is provided as "string" or an objects matching "SupportedProviders" interface + if ( + (typeof provider === 'string' && provider.trim() !== '') || + isSupportedProvider(provider as SupportedProviders) + ) { + this.bundlerRequestManager = new Web3RequestManager(provider); + } + } + /** + * Sends a UserOperation to the bundler. If accepted, the bundler will add it to the UserOperation mempool and return a userOpHash. + * + * @param UserOperation - represents the structure of a transaction initiated by the user. It contains the sender, receiver, call data, maximum fee per unit of Gas, maximum priority fee, signature, nonce, and other specific elements. + * @param entryPoint - a singleton contract to execute bundles of UserOperations. Bundlers/Clients whitelist the supported entrypoint. + * @returns userOperation hash or throws error instead of balance. + * @example + * ```ts + * sendUserOperation({ + * sender: "0x9fd042a18e90ce326073fa70f111dc9d798d9a52", + * nonce: "123", + * initCode: "0x68656c6c6f", + * callData: "0x776F726C64", + * callGasLimit: "1000", + * verificationGasLimit: "2300", + * preVerificationGas: "3100", + * maxFeePerGas: "8500", + * maxPriorityFeePerGas: "1", + * paymasterAndData: "0x626c6f63746f", + * signature: "0x636c656d656e74" + * },"0x636c656d656e74").then(console.log); + * > 0xe554d0701f7fdc734f84927d109537f1ac4ee4ebfa3670c71d224a4fa15dbcd1 + * ``` + */ + public async sendUserOperation(userOperation: UserOperation, entryPoint: Address) { + let userOp = { ...userOperation }; + const validator = isUserOperationAllHex(userOp); + if (!validator) { + userOp = convertValuesToHex(userOperation) as UserOperation; + } + return (this.bundlerRequestManager ?? this.requestManager).send({ + method: 'eth_sendUserOperation', + params: [userOp, entryPoint], + }); + } + /** + * Estimate the gas values for a UserOperation. Given UserOperation optionally without gas limits and gas prices, return the needed gas limits. The signature field is ignored by the wallet, so that the operation will not require user's approval. Still, it might require putting a "semi-valid" signature (e.g. a signature in the right length) + * + * @param UserOperation - represents the structure of a transaction initiated by the user. It contains the sender, receiver, call data, maximum fee per unit of Gas, maximum priority fee, signature, nonce, and other specific elements. + * @param entryPoint - a singleton contract to execute bundles of UserOperations. Bundlers/Clients whitelist the supported entrypoint. + * @returns - `preVerificationGas` gas overhead of this UserOperation + * - `verificationGasLimit` actual gas used by the validation of this UserOperation + * - `callGasLimit` value used by inner account execution + * @example + * ```ts + * estimateUserOperationGas({ + * sender: "0x9fd042a18e90ce326073fa70f111dc9d798d9a52", + * nonce: "123", + * initCode: "0x68656c6c6f", + * callData: "0x776F726C64", + * callGasLimit: "1000", + * verificationGasLimit: "2300", + * preVerificationGas: "3100", + * maxFeePerGas: "0", + * maxPriorityFeePerGas: "0", + * paymasterAndData: "0x626c6f63746f", + * signature: "0x636c656d656e74" + * },"0x636c656d656e74").then(console.log); + * > { + * callGasLimit : "0x18b33", + * preVerificationGas: "0xdf17", + * verificationGasLimit:"0x128c4" + * } + * ``` + */ + public async estimateUserOperationGas(userOperation: UserOperation, entryPoint: Address) { + const userOp = { ...userOperation }; + if (userOperation?.maxFeePerGas === undefined) { + userOp.maxFeePerGas = '0'; + } + if (userOperation?.maxPriorityFeePerGas === undefined) { + userOp.maxPriorityFeePerGas = '0'; + } + return (this.bundlerRequestManager ?? this.requestManager).send({ + method: 'eth_estimateUserOperationGas', + params: [userOp, entryPoint], + }); + } + /** + * Return a UserOperation based on a hash (userOpHash) returned by eth_sendUserOperation + * + * @param hash - a userOpHash value returned by `eth_sendUserOperation` + * @returns null in case the UserOperation is not yet included in a block, or a full UserOperation, with the addition of entryPoint, blockNumber, blockHash and transactionHash + * @example + * ```ts + * getUserOperationByHash("0xxxxx").then(console.log); + * > { + * userOperation: { + * sender: "xxxx", + * nonce: "xxxx", + * initCode: "0xxxxxxxxxxxxxxx", + * callData: "0xxxxxxxxxxxxxxx", + * callGasLimit: "xxxx", + * verificationGasLimit: "xxxx", + * preVerificationGas: "xxxx", + * maxFeePerGas: "0", + * maxPriorityFeePerGas: "0", + * paymasterAndData: "0xxxxxxxxxxxxxxx", + * signature: "0xxxxxxxxxxxxxxx" + * }, + * entryPoint: '0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789', + * blockNumber: 39642225, + * blockHash: '0x638a175940cacb33f35e265961b164b14aa77477438340e635b227752f31981f', + * transactionHash: '0xc3e64ac247ae2343335596e106d1b97e35637656e1b99b37977a4165b34aeeb4', + * } + * ``` + */ + + public async getUserOperationByHash(hash: HexStringBytes) { + return (this.bundlerRequestManager ?? this.requestManager).send({ + method: 'eth_getUserOperationByHash', + params: [hash], + }); + } + /** + * Return null in case the UserOperation is not yet included in a block, or + * - userOpHash the request hash + * - entryPoint + * - sender + * - nonce + * - paymaster the paymaster used for this userOp (or empty) + * - actualGasCost - actual amount paid (by account or paymaster) for this UserOperation + * - actualGasUsed - total gas used by this UserOperation (including preVerification, creation, validation and execution) + * - success boolean - did this execution completed without revert + * - reason in case of revert, this is the revert reason + * - logs the logs generated by this UserOperation (not including logs of other UserOperations in the same bundle) + * - receipt the TransactionReceipt object. Note that the returned TransactionReceipt is for the entire bundle, not only for this UserOperation. + * + * @param hash - hash a userOpHash value returned by `eth_sendUserOperation` + * @returns null in case the UserOperation is not yet included in a block, or UserOperation + * @example + * ```ts + * getUserOperationReceipt("0xa890d7c0dccfd6cebc025919f4857ab97953ae218e82f5e24c297f02ceea5b21").then(console.log); + * >"userOpHash": "0xa890d7c0dccfd6cebc025919f4857ab97953ae218e82f5e24c297f02ceea5b21", + "entryPoint": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", + "sender": "0x026B37A09aF3ceB346c39999c5738F86A1a48f4d", + "nonce": "0x7", + "paymaster": "0xa312d8D37Be746BD09cBD9e9ba2ef16bc7Da48FF", + "actualGasCost": "0x1a036c1638be0", + "actualGasUsed": "0x2e8d8", + "success": true, + "reason": "", + "logs": [ + { + "address": "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "topics": [ + "0xbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972" + ], + "data": "0x", + "blockHash": "0x638a175940cacb33f35e265961b164b14aa77477438340e635b227752f31981f", + "blockNumber": "0x25ce471", + "transactionHash": "0xc3e64ac247ae2343335596e106d1b97e35637656e1b99b37977a4165b34aeeb4", + "transactionIndex": "0x44", + "logIndex": "0x12d", + "removed": false + }, + { + "address": "0xfd8ec18d48ac1f46b600e231da07d1da8209ceef", + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000026b37a09af3ceb346c39999c5738f86a1a48f4d", + "0x000000000000000000000000000000000000000000000000000000000000007f" + ], + "data": "0x", + "blockHash": "0x638a175940cacb33f35e265961b164b14aa77477438340e635b227752f31981f", + "blockNumber": "0x25ce471", + "transactionHash": "0xc3e64ac247ae2343335596e106d1b97e35637656e1b99b37977a4165b34aeeb4", + "transactionIndex": "0x44", + "logIndex": "0x12e", + "removed": false + }, + { + "address": "0x00005ea00ac477b1030ce78506496e8c2de24bf5", + "topics": [ + "0xe90cf9cc0a552cf52ea6ff74ece0f1c8ae8cc9ad630d3181f55ac43ca076b7d6", + "0x000000000000000000000000fd8ec18d48ac1f46b600e231da07d1da8209ceef", + "0x000000000000000000000000026b37a09af3ceb346c39999c5738f86a1a48f4d", + "0x0000000000000000000000000000a26b00c1f0df003000390027140000faa719" + ], + "data": "0x000000000000000000000000026b37a09af3ceb346c39999c5738f86a1a48f4d0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x638a175940cacb33f35e265961b164b14aa77477438340e635b227752f31981f", + "blockNumber": "0x25ce471", + "transactionHash": "0xc3e64ac247ae2343335596e106d1b97e35637656e1b99b37977a4165b34aeeb4", + "transactionIndex": "0x44", + "logIndex": "0x12f", + "removed": false + }, + { + "address": "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "topics": [ + "0x49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f", + "0xa890d7c0dccfd6cebc025919f4857ab97953ae218e82f5e24c297f02ceea5b21", + "0x000000000000000000000000026b37a09af3ceb346c39999c5738f86a1a48f4d", + "0x000000000000000000000000a312d8d37be746bd09cbd9e9ba2ef16bc7da48ff" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000001a036c1638be0000000000000000000000000000000000000000000000000000000000002e8d8", + "blockHash": "0x638a175940cacb33f35e265961b164b14aa77477438340e635b227752f31981f", + "blockNumber": "0x25ce471", + "transactionHash": "0xc3e64ac247ae2343335596e106d1b97e35637656e1b99b37977a4165b34aeeb4", + "transactionIndex": "0x44", + "logIndex": "0x130", + "removed": false + } + ], + "receipt": { + "transactionHash": "0xc3e64ac247ae2343335596e106d1b97e35637656e1b99b37977a4165b34aeeb4", + "transactionIndex": "0x44", + "blockHash": "0x638a175940cacb33f35e265961b164b14aa77477438340e635b227752f31981f", + "blockNumber": "0x25ce471", + "from": "0x1e6754b227c6ae4b0ca61d82f79d60660737554a", + "to": "0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789", + "cumulativeGasUsed": "0x1716d3b", + "gasUsed": "0x2b6c6", + "contractAddress": null, + "logs": [ + { + "address": "0xfd8ec18d48ac1f46b600e231da07d1da8209ceef", + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000026b37a09af3ceb346c39999c5738f86a1a48f4d", + "0x000000000000000000000000000000000000000000000000000000000000007f" + ], + "data": "0x", + "blockHash": "0x638a175940cacb33f35e265961b164b14aa77477438340e635b227752f31981f", + "blockNumber": "0x25ce471", + "transactionHash": "0xc3e64ac247ae2343335596e106d1b97e35637656e1b99b37977a4165b34aeeb4", + "transactionIndex": "0x44", + "logIndex": "0x12e", + "removed": false + }, + ], + "status": "0x1", + "logsBloom": "0x000000000000000000000000000000000008000000000000000000000000000000080000000000000002001108040020001080000000000000000200004000000000000000000000000800080000008000000000000000000001000208400040000000000a0008000000000000000800000000000000004080800010020100040000000000000000100000000000010000000000200080000000000000000000210000000000000000400080000000000000000000000000108002000004004008000002000000000001001000800000000001000000800000148040020020000000000000000000000001000000000100000000000000000000002000100000", + "type": "0x2", + "effectiveGasPrice": "0x59682f2e" + } + * ``` + */ + public async getUserOperationReceipt(hash: HexStringBytes) { + return (this.bundlerRequestManager ?? this.requestManager).send({ + method: 'eth_getUserOperationReceipt', + params: [hash], + }); + } + /** + * Returns an array of the entryPoint addresses supported by the client. The first element of the array SHOULD be the entryPoint addressed preferred by the client. + * @returns an array of the entryPoint addresses supported by the client. The first element of the array SHOULD be the entryPoint addressed preferred by the client. + * @example + * ```ts + * supportedEntryPoints().then(console.log); + * > ["0xcd01C8aa8995A59eB7B2627E69b40e0524B5ecf8", "0x7A0A0d159218E6a2f407B99173A2b12A6DDfC2a6"] + * ``` + */ + public async supportedEntryPoints() { + return (this.bundlerRequestManager ?? this.requestManager).send({ + method: 'eth_supportedEntryPoints', + params: [], + }); + } + + /** + * calculate UserOperationHash + * @param userOp - a structure that describes a transaction to be sent on behalf of a user. + * @param entryPoint - a singleton contract to execute bundles of UserOperations. Bundlers/Clients whitelist the supported entrypoint. + * @returns an array of the entryPoint addresses supported by the client. The first element of the array SHOULD be the entryPoint addressed preferred by the client. + * @example + * ```ts + * generateUserOpHash({ + * sender: "0x9fd042a18e90ce326073fa70f111dc9d798d9a52", + * nonce: "123", + * initCode: "0x68656c6c6f", + * callData: "0x776F726C64", + * callGasLimit: "1000", + * verificationGasLimit: "2300", + * preVerificationGas: "3100", + * maxFeePerGas: "0", + * maxPriorityFeePerGas: "0", + * paymasterAndData: "0x626c6f63746f", + * signature: "0x636c656d656e74" + * },"0x636c656d656e74", '0x1').then(console.log); + * > 0xxxx + * ``` + */ + // eslint-disable-next-line class-methods-use-this + public generateUserOpHash(userOp: UserOperationRequire, entryPoint: string, chainId: string) { + return generateUserOpHash(userOp, entryPoint, chainId); + } +} diff --git a/packages/web3-account-abstraction/test/.eslintrc.js b/packages/web3-account-abstraction/test/.eslintrc.js new file mode 100644 index 00000000000..a98dfb6d823 --- /dev/null +++ b/packages/web3-account-abstraction/test/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../../.eslintrc.test.js', + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-account-abstraction/test/config/jest.config.js b/packages/web3-account-abstraction/test/config/jest.config.js new file mode 120000 index 00000000000..b875b48129d --- /dev/null +++ b/packages/web3-account-abstraction/test/config/jest.config.js @@ -0,0 +1 @@ +../../../../templates/jest.config.js.tmpl \ No newline at end of file diff --git a/packages/web3-account-abstraction/test/config/setup.js b/packages/web3-account-abstraction/test/config/setup.js new file mode 100644 index 00000000000..0b6b9109ce0 --- /dev/null +++ b/packages/web3-account-abstraction/test/config/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('jest-extended'); + +// @todo extend jest to have "toHaveBeenCalledOnceWith" matcher. + +process.env.NODE_ENV = 'test'; diff --git a/packages/web3-account-abstraction/test/integration/jest.config.js b/packages/web3-account-abstraction/test/integration/jest.config.js new file mode 100644 index 00000000000..1d95890206a --- /dev/null +++ b/packages/web3-account-abstraction/test/integration/jest.config.js @@ -0,0 +1,33 @@ +'use strict'; + +const base = require('../config/jest.config'); + +module.exports = { + ...base, + setupFilesAfterEnv: ['/test/integration/setup.js'], + testMatch: ['/test/integration/**/*.(spec|test).(js|ts)'], + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, + coverageDirectory: '.coverage/integration', +}; diff --git a/packages/web3-account-abstraction/test/integration/setup.js b/packages/web3-account-abstraction/test/integration/setup.js new file mode 100644 index 00000000000..5be1bccf7cc --- /dev/null +++ b/packages/web3-account-abstraction/test/integration/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('../config/setup'); + +const jestTimeout = 15000; + +jest.setTimeout(jestTimeout); diff --git a/packages/web3-account-abstraction/test/tsconfig.json b/packages/web3-account-abstraction/test/tsconfig.json new file mode 120000 index 00000000000..c73c54e77b4 --- /dev/null +++ b/packages/web3-account-abstraction/test/tsconfig.json @@ -0,0 +1 @@ +../../../templates/test/tsconfig.json.tmpl \ No newline at end of file diff --git a/packages/web3-account-abstraction/test/unit/account_abstraction.test.ts b/packages/web3-account-abstraction/test/unit/account_abstraction.test.ts new file mode 100644 index 00000000000..7afb15fbb4e --- /dev/null +++ b/packages/web3-account-abstraction/test/unit/account_abstraction.test.ts @@ -0,0 +1,184 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +import { AccountAbstraction, UserOperation, UserOperationRequire } from '../../src/index.js'; + +describe('AccountAbstraction tests', () => { + const web3aa = new AccountAbstraction('http://127.0.0.1:8555/'); + let sendSpy: jest.SpyInstance; + const requestManagerSendSpy = jest.fn(); + + beforeAll(() => { + // spy on private member so using any in tests only + (web3aa as any).bundlerRequestManager.send = requestManagerSendSpy; + }); + + it('should have requestManager defined with context', () => { + expect(web3aa.requestManager).toBeDefined(); + }); + + describe('AccountAbstraction method tests', () => { + let userOperation: UserOperation | UserOperationRequire; + + beforeEach(() => { + userOperation = { + sender: '0x9fd042a18e90ce326073fa70f111dc9d798d9a52', + nonce: '123', + initCode: '0x68656c6c6f', + callData: '0x776F726C64', + callGasLimit: '1000', + verificationGasLimit: '2300', + preVerificationGas: '3100', + maxFeePerGas: '8500', + maxPriorityFeePerGas: '1', + paymasterAndData: '0x626c6f63746f', + signature: '0x636c656d656e74', + }; + sendSpy = jest.spyOn(web3aa, 'sendUserOperation').mockImplementation(); + }); + + afterEach(() => { + sendSpy.mockRestore(); + }); + + it('should call rpcMethods.sendUserOperation with expected parameters', async () => { + const entryPoint = '0x636c656d656e74'; + await web3aa.sendUserOperation(userOperation, entryPoint); + expect(sendSpy).toHaveBeenCalledWith(userOperation, entryPoint); + }); + + it('should call rpcMethods.estimateUserOperationGas with expected parameters', async () => { + const entryPoint = '0x636c656d656e74'; + const estimateSpy = jest.spyOn(web3aa, 'estimateUserOperationGas').mockImplementation(); + await web3aa.estimateUserOperationGas(userOperation, entryPoint); + expect(estimateSpy).toHaveBeenCalledWith(userOperation, entryPoint); + estimateSpy.mockRestore(); + }); + + it('should call rpcMethods.estimateUserOperationGas should set maxFeePerGas to "0" if not provided', async () => { + const entryPoint = '0x636c656d656e74'; + const userOperationWithoutMaxFee = { + ...userOperation, + maxFeePerGas: undefined, + }; + await web3aa.estimateUserOperationGas(userOperationWithoutMaxFee, entryPoint); + + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_estimateUserOperationGas', + params: [ + { + ...userOperationWithoutMaxFee, + maxFeePerGas: '0', // Ensure it's set to "0" + }, + entryPoint, + ], + }); + }); + + it('should call rpcMethods.estimateUserOperationGas should set maxPriorityFeePerGas to "0" if not provided', async () => { + const entryPoint = '0x636c656d656e74'; + const userOperationWithoutMaxFee = { + ...userOperation, + maxPriorityFeePerGas: undefined, + }; + await web3aa.estimateUserOperationGas(userOperationWithoutMaxFee, entryPoint); + + expect(requestManagerSendSpy).toHaveBeenCalledWith({ + method: 'eth_estimateUserOperationGas', + params: [ + { + ...userOperationWithoutMaxFee, + maxPriorityFeePerGas: '0', // Ensure it's set to "0" + }, + entryPoint, + ], + }); + }); + + it('should call rpcMethods.getUserOperationByHash with expected parameters', async () => { + const hash = '0xa890d7c0dccfd6cebc025919f4857ab97953ae218e82f5e24c297f02ceea5b21'; + const estimateSpy = jest.spyOn(web3aa, 'getUserOperationByHash').mockImplementation(); + await web3aa.getUserOperationByHash(hash); + expect(estimateSpy).toHaveBeenCalledWith(hash); + estimateSpy.mockRestore(); + }); + + it('should call rpcMethods.getUserOperationReceipt with expected parameters', async () => { + const hash = '0x123456789abcdef0123456789abcdef012345678'; + const estimateSpy = jest.spyOn(web3aa, 'getUserOperationReceipt').mockImplementation(); + await web3aa.getUserOperationReceipt(hash); + expect(estimateSpy).toHaveBeenCalledWith(hash); + estimateSpy.mockRestore(); + }); + + it('should call rpcMethods.supportedEntryPoints with expected parameters', async () => { + const supportedEntryPointsSendSpy = jest + .spyOn((web3aa as any).bundlerRequestManager, 'send') + .mockResolvedValue([ + '0xcd01C8aa8995A59eB7B2627E69b40e0524B5ecf8', + '0x7A0A0d159218E6a2f407B99173A2b12A6DDfC2a6', + ]); + + const result = await web3aa.supportedEntryPoints(); + + expect(supportedEntryPointsSendSpy).toHaveBeenCalledWith({ + method: 'eth_supportedEntryPoints', + params: [], + }); + expect(result).toEqual([ + '0xcd01C8aa8995A59eB7B2627E69b40e0524B5ecf8', + '0x7A0A0d159218E6a2f407B99173A2b12A6DDfC2a6', + ]); + }); + + it('should call rpcMethods.generateUserOpHash with expected parameters', () => { + const entryPoint = '0xaE036c65C649172b43ef7156b009c6221B596B8b'; + const chainId = '0x1'; + const expectedResult = + '0xe554d0701f7fdc734f84927d109537f1ac4ee4ebfa3670c71d224a4fa15dbcd1'; + const result = web3aa.generateUserOpHash( + userOperation as UserOperationRequire, + entryPoint, + chainId, + ); + + expect(result).toEqual(expectedResult); + }); + it('should call rpcMethods.generateUserOpHash with throws an error when sha3 returns undefined', () => { + const userOp = { + sender: '0x9fd042a18e90ce326073fa70f111dc9d798d9a52', + nonce: '123', + initCode: '', + callData: '0x776F726C64', + callGasLimit: '1000', + verificationGasLimit: '2300', + preVerificationGas: '3100', + maxFeePerGas: '8500', + maxPriorityFeePerGas: '1', + paymasterAndData: '0x626c6f63746f', + signature: '0x636c656d656e74', + }; + const entryPoint = '0xaE036c65C649172b43ef7156b009c6221B596B8b'; + const chainId = '0x1'; + + // Expect an error to be thrown + expect(() => web3aa.generateUserOpHash(userOp, entryPoint, chainId)).toThrow( + 'sha3 returned undefined', + ); + }); + }); +}); diff --git a/packages/web3-account-abstraction/test/unit/jest.config.js b/packages/web3-account-abstraction/test/unit/jest.config.js new file mode 100644 index 00000000000..ceac341e332 --- /dev/null +++ b/packages/web3-account-abstraction/test/unit/jest.config.js @@ -0,0 +1,9 @@ +const base = require('../config/jest.config'); + +module.exports = { + ...base, + testMatch: ['/test/unit/**/*.(spec|test).(js|ts)'], + + coverageDirectory: '.coverage/unit', + collectCoverageFrom: ['src/**'], +}; diff --git a/packages/web3-account-abstraction/tsconfig.cjs.json b/packages/web3-account-abstraction/tsconfig.cjs.json new file mode 120000 index 00000000000..f8b17044cd5 --- /dev/null +++ b/packages/web3-account-abstraction/tsconfig.cjs.json @@ -0,0 +1 @@ +../../config/tsconfig.cjs.json \ No newline at end of file diff --git a/packages/web3-account-abstraction/tsconfig.esm.json b/packages/web3-account-abstraction/tsconfig.esm.json new file mode 120000 index 00000000000..f5fab722b38 --- /dev/null +++ b/packages/web3-account-abstraction/tsconfig.esm.json @@ -0,0 +1 @@ +../../config/tsconfig.esm.json \ No newline at end of file diff --git a/packages/web3-account-abstraction/tsconfig.types.json b/packages/web3-account-abstraction/tsconfig.types.json new file mode 120000 index 00000000000..c67a7816f18 --- /dev/null +++ b/packages/web3-account-abstraction/tsconfig.types.json @@ -0,0 +1 @@ +../../config/tsconfig.types.json \ No newline at end of file diff --git a/packages/web3-account-abstraction/tsdoc.json b/packages/web3-account-abstraction/tsdoc.json new file mode 100644 index 00000000000..776fc76a3d3 --- /dev/null +++ b/packages/web3-account-abstraction/tsdoc.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", + "extends": ["../../tsdoc.json"] +} diff --git a/scripts/docshelper/classesdoc.config.js b/scripts/docshelper/classesdoc.config.js index 1c8a9d45cb2..b630f580cf9 100644 --- a/scripts/docshelper/classesdoc.config.js +++ b/scripts/docshelper/classesdoc.config.js @@ -1,20 +1,20 @@ const baseDocConfig = require('./base.config.js'); module.exports = { - ... baseDocConfig, + ...baseDocConfig, - entryPoints: [ - "./packages/web3-eth/src/web3_eth.ts", - "./packages/web3-eth-accounts/src/wallet.ts", - "./packages/web3-eth-accounts/src/account.ts", - "./packages/web3-eth-contract/src/contract.ts", - "./packages/web3-eth-ens/src/ens.ts", - "./packages/web3-eth-iban/src/iban.ts", - "./packages/web3-eth-personal/src/personal.ts", - "./packages/web3-net/src/net.ts", - ], - - excludeCategories: "ContractEvent", // for exluding being in module.md file and invalid link in contract.md - mergeModulesMergeMode: "project", // NEW option of TypeDoc added by typedoc-plugin-merge-modules plugin + entryPoints: [ + './packages/web3-eth/src/web3_eth.ts', + './packages/web3-eth-accounts/src/wallet.ts', + './packages/web3-eth-accounts/src/account.ts', + './packages/web3-eth-contract/src/contract.ts', + './packages/web3-eth-ens/src/ens.ts', + './packages/web3-eth-iban/src/iban.ts', + './packages/web3-eth-personal/src/personal.ts', + './packages/web3-net/src/net.ts', + './packages/web3-account-abstraction/src/web3_aa.ts', + ], + excludeCategories: 'ContractEvent', // for exluding being in module.md file and invalid link in contract.md + mergeModulesMergeMode: 'project', // NEW option of TypeDoc added by typedoc-plugin-merge-modules plugin };