True to the Unix-philosophy of small programs to do a small job, GNU
+ social is a social communication software used
+ in federated social networks.
+
+
It is widely supported and has a large userbase. It is already used by
+ the Free Software Foundation.
+ As the GNU operating system, is built around privacy and trustworthy
+ technology based on free software(free as in freedom, specifically
+ to run, study, change and distribute yoursoftware as you please).
+ GNU social is technology for communities to runand host their own social media.
+
Currently, we’re working on adding features to easily and flexibly
+ create groups and improve tags, allowing easier content filtering and
+ connecting with anyone that shares your interests, all under your own
+ control and without infringing your privacy.
+
+
Features
+
+
Versatile. GNU social supports both single-user and community modes and can be used in
+ an intranet environment or as part of the wider Free Network.
+
Stable. GNU social has been used in production environments for over ten years.
+
Plug and Play. Because GNU social is minimal and libre, it runs virtually anywhere you
+ can run a common piece of web software, such as WordPress or Drupal. JavaScript is optional.
+
Privacy focused. GNU social is part of the GNU project, it's 100% free software, with
+ no malicious features or spyware.
+
+
+
FAQ
+
Where can I join GNU social?
+
There are many kinds of GNU social server instances online right now!
+
Click here to see a list of popular GNU social sites you can join!
+ Disclaimer: Please note that the GNU social development team is not responsible for
+ the operation or content of sites that run its software.
+
Who makes GNU social?
+
The current development team is lead by Diogo Cordeiro. A
+ list containing the current devs and other contributors is
+ available here.
+ The founders of the GNU social project were Matt Lee,
+ Evan Prodromou and
+ Mikael Nordfeldth.
+
+
+
Contact
+
Discuss the project on our IRC channel #social on irc.freenode.net
+
Contribute code, report bugs and request features on our repository.
+
This is a technical Google Summer of Code Project Report describing
+ briefly what I did from April 23 to August 6.
+
+
The whole code I wrote during this period is available
+ here.
+ The API documentation is available
+ here.
+
+
This document helps understanding what was done in a simple and informal way,
+ highlighting the most relevant parts, why some decisions were made and what
+ I've learned with it.
+
+
The following document is intended to be reasonably self contained
+ and capable of quickstarting anyone in the world of ActivityPub implementation,
+ yet not replacing the official standard specification.
+
+
From April 23 to May 14 I had to familiarize myself with the
+ Activity Pub standard and GNU social's plugins/events API and community.
+
+
What is GNU social?
+
GNU social is a social communication software used in federated
+ social networks.
+
+
ActivityPub?
+
In order to achieve said decentralization, a variety of standards on
+ how communication between different pieces of software in a federated
+ context should be done were created, such as OStatus. ActivityPub, however,
+ is the newest and covers parts left out of OStatus's specification, namely
+ app/client development.
+
+
Benefits
+
+
The tendency is that newer software will focus in the
+ implementation of the ActivityPub Protocol (as it is newer
+ and considered to be simpler) instead of OStatus, given
+ that, it is important for GNU social to support it in order to stay updated
+ and relevant in an even larger fediverse;
+
+
It will simplify app/client development which is not covered by the
+ OStatus's specification and is becoming more and more relevant,
+ with the increase of smartphone users.
+
+
+
Why a plugin?
+
Unix tools design philosophy
+
GNU social is true to the Unix-philosophy of small programs to do a
+ small job.
+
+
+
+
Compact and concise input syntax, making full use of ASCII repertoire to minimise keystrokes
+
Output format should be simple and easily usable as input for other programs
+
Programs can be joined together in “pipes” and “scripts” to solve more complex problems
+
Each tool originally performed a simple single function
+
Prefer reusing existing tools with minor extension to rewriting a new tool from scratch
+
The main user-interface software (“shell”) is a normal replaceable program without special privileges
+
Support for automating routine tasks
+
+
+
+
As so the project aims at building a plugin that will
+ implement the ActivityPub Protocol in GNU social.
+
The ActivityPub protocol is a decentralized social networking
+ protocol based upon the ActivityStreams 2.0 data format.
+ It provides a client to server API for creating, updating and deleting
+ content, as well as a federated server to server API for delivering
+ notifications and content.
+
+
+
+
Note: You are advised to read (at least) the standard
+ overview before continuing.
+
+
+
Actor
+
Actor is the user doing a change in the fediverse and are identified by an URI.
+ In GNU social they have the following format:
+ https://myinstance.net/user/{id}. Thus allowing users to change their
+ usernames (or nicknames).
+
+
Objects
+
Objects are our building blocks for the bigger concept of Activity.
+ The plugin has the following objects:
+
For the plugin I decided to create two key components.
+
The Explorer
+
Defined in this file it is responsable for grabbing remote users and creating an identity for those in the local instance. It is higly related with Activitypub_profile.php.
+
The Postman
+
This guy does the magic of publishing the activities
+ (thus the name ActivityPub!) to remote instances, he kinda is the
+ responsable for the federation provided by this plugin. Its code is here.
+
+
Becoming familiar with GNU social's events
+
We just know what and when to deliver something thanks to GNU social's events.
+
Events the plugin is handling
+
+
Discovery Events
+
+
Find remote profiles from mentions in texts (onEndFindMentions)
+
Allow to reference a remote profile (onStartCommandGetProfile)
+
Allow to reference a remote profile (onStartGetProfileUri)
+
+
Delivery Events
+
+
Notify remote instance of subscription (onEndSubscribe)
+
Notify remote instance when a subscription is canceled (onEndUnsubscribe)
+
Notify remote instances when a notice is liked (onEndFavorNotice)
+
Notify remote instances when a notice like is reverted (onEndDisfavorNotice)
+
Notify remote instances when a notice is deleted (onEndDeleteOwnNotice)
+
Notify remote instances when a notice is created (onStartNoticeDistribute)
+
+
+
These are not the only events this plugin is listening to, but are
+ the most relevant. All these events hooks can be found here.
+
Fediverse is similar to the real world in some aspects. And one of those
+ is that people, sometimes, share the same "building". A list of some
+ public GNU social instances is available here.
+
+
Well, if two people live in the same place then our Postman doesn't have to "travel" twice! Thus
+ the concept of shared inbox.
+
+
Lets start with the inbox. An
+ inbox is where we, I mean, the Postman publishes
+ our Activity.
+
+
By now you should have already realized that Activities are just
+ verbs wrapping objects thus basically forming a phrase:
+ ActorverbObjectto Attention Actor(s).
+
+
Well, for each Attention actor we deliver the same
+ ActorverbObject.
+
+
Since it is the same message and frequently for people residing
+ in the same server we can obviously reduce a lot of traffic and
+ processing power here.
+
+
The Explorer hands the Postman the sharedInbox address always that
+ it is possible.
+
This plugin fulfills and even exceeds what I've originally proposed to
+ do during this summer (hooray!). But there is still room for further development
+ and improvement!
+
Not really, this document doesn't describe the implementation of
+
+ HTTP Signatures, the internal representation of ActivityPub Actors,
+ nor the details of Activity Streams or even the particularities of integrating
+ this in GNU social (I'm looking at you OStatus plugin). As stated in the
+ beginning of this document, the whole code and documentation is available
+ above, this was just meant to make the reading easier.
+
+
I'm interested in implementing ActivityPub on my program and reading
+ this really helped me! Is there something else that I should know of that
+ wasn't mentioned in the article?
+
GSoC was a wonderful experience for me. I now feel more comfortable
+ with the GNU social’s codebase. I learned a lot of useful stuff like
+ ActivityPub, ActivityStreams, HTTP Signatures, PSR and Redis as well as
+ software engineering concepts like Circuit Breakers. I've also learned
+ more about Git and how libre and open source software development is
+ done and organized.
+
+
I will try my best to regularly contribute to GNU social and other
+ projects.
+
+
Thanks to Daniel Supernault and Mikael Nordfeldth for such a
+ wonderful experience and the knowledge.
+
GNU social is a social communication software used in federated social networks. It is widely supported and has a large userbase. It is already used by the Free Software Foundation, and Richard Stallman himself.
+
If you would like to know how is it like to be a GSoC student at GNU social, read this blog post!
+
What would be expected from me?
+
+
Reliability Engineering
+
Fix bugs of current code base and ensure it stays functional
+
Software Engineering
+
Further development of GNU social v2
+
Computer Security Engineering
+
Ensure GS is secure
+
+
Every student will have to pick tasks in each of these fields in GS's GSoC. Excited already? Then read below some of our ideas and learn how you can be part of this!
+
Difficulty varies per task but in general GS's SoC is demanding, so you better be honestly interested and willing to work hard and learn a lot.
+
+
+
Ideas
+
Below is a list of (not very defined) ideas of things/areas you can work on this summer at GNU social. They are just ideas, not full proposals. You should pick some of them that seem to be related and talk on IRC about it. The community will help you understanding what has to be done so you can put a good proposal together.
+
+
Make the ActivityPub plugin started in previous GSoC reliable
+
In previous GSoC an ActivityPub plugin for GS was developed but isn't compatible with every piece of software used in the fediverse (only working with Mastodon so far) nor completely safe and robust for large usage.
+
Some of the existing key problems are:
+
+
It is unable to de-duplicate when OStatus and ActivityPub are both enabled - mostly noticed between GS instances with both enabled;
+
Is unable to verify signatures which is an attack vector that makes the plugin unsafe for use right now;
+
It also doesn't make use of queues nor collections caching nor has any kind of circuit breaker implemented. This makes its use risky in a highly active GS instance.
+
+
+
Optimize how storage is used
+
Add support for temporary posts: This will allow support for "stories" and empower whole instances (and/or single users) to have temporary posts.
+
Optimize OEmbed plugin and further development on image handler: Work on this has already been started.
+
+
Review third party developer interfaces
+
There are various bots in the fediverse and we feel it might be about time to set them apart from humans so that we know who to kill when the robotic uprising comes, so to speak (ahem).
+
Ultimately, bots aren’t humans and, therefore, they shouldn’t have accounts claiming that they are “Persons”.
+
So some good measures for making change are:
+
+
Introduce OAuth 2 in GNU social for authentication of clients that aren’t browsers;
+
Review current APIs for Tools that act in the User’s behalf and introduce a user platform for the management of those;
+
Review current APIs for Bots that act in their own behalf and introduce a developer platform for the management of those.
+
+
Technical sidenote for those who have read the ActivityPub standard: GS Bots are represented as Actors with the Application type, while GS Tools are an internal (not federated) thing that allow Actors with the Person type (commonly referred to as Users) to use third party tools to control their account.
+
+
“We have you noticed we’ve straighten every dent up”
+
Props to XRevan86 for that pun! (Notices in GNU social are colloquially referred to as Dents).
+
GNU social wants to get polished with a modern looking default theme. For this, it would be interesting to come up with some themes guidelines so, if you’re into web design, this might be the task for you! :)
+
On the other hand, if you are more into backend development, we’ve got you covered. Some new and interesting concepts in the world of Software Engineering were introduced and we are naturally looking forward to include them and refresh the current code base for the release of GNU social 2 with them!
We are truly proud of all the progress we made with the help of our students. GNU social mentees have to submit code on the level of typical contributors without spoon-feeding and that's something achieved in all of ours GSoC editions.
+
A GNU social contributor deals with {reliability, software and computer security} engineering. Mastery with full-stack web development and git is acquired in a hands-on way without ever dismissing theoretical computer science teachings for optimal efficiency and effective designs.
+
GNU social is a beautiful software that follows GNU and UNIX philosophies by heart.
+
A big thanks for all the support of our lovely community and devs who have been with us in yet another great journey!
This is a technical Google Summer of Code Project Report describing briefly what I did from May 6 to August 26.
+
+
All the code I wrote during this period is available
+ here.
+
+
This document helps understand what was done in a simple and informal way, highlighting the most relevant parts, why some decisions were made and what I’ve learned with it.
+
From May 6 to May 27 I had to familiarize myself with the GNU social’s plugins and events API, as well as other internal components and the community.
+
What is GNU social?
+
GNU social is a social communication software used in federated social networks. That requires queues and caching systems that are friendly to use and yet powerful and robust enough to handle the high load in servers with limited network, low storage
+ and reduced processing power. While scalable enough to take advantage of more powerful systems.
+
Abstract
+
TODO
+
Benefits
+
+
Improvements on the Image Systems
+
Improvements of the Embed plugin
+
Improvements on the Queue System
+
Improvements on the Caching System
+
+
+
Image System
+
The new Image handling system was my first bigger project and in it I essentially reviewed and refactored the existing code, followed by making sure a consistent and filesystem safe encoding is use for the filename, which is then further provided
+ when the file download is requested. This very file download was moved into PHP code so that the code could have easy control over what files are accessed; the main goal with this change was to allow arbitrary file uploads, while still ensuring
+ that no file is directly publicly accessible, as a misconfigured webserver or a maliciously crafted file could cause unwanted execution. In addition, this will allow, in the future, for easy permission control, via events, if a plugin to do so
+ is written. Along the same lines, it was important to make image validation more aggressive. While not immediately apparent, an image and a script may be contained in the same file and it was possible for a file to be identified as an image by
+ the upload code and then be executed by the webserver.
+
Embed Plugin
+
The existing Oembed plugin did a valiant attempt trying to get both Oembed and OpenGraph info about a page. The problem, besides the poor name given the dual purpose, was that it used an in-house implementation, which was not complete. This was therefore
+ replaced by an external library called Embed, by oscarotero. After refactoring and checking the existing code, as well as making sure the same filename conventions as above were in effect, image handling became significantly
+ more robust, eliminating the barrage of errors users would previously see, instead of images. In addition, I made it so only a configurable thumbnail size for the images was saved to disk, while still supporting upscaling should further themes
+ need it, which should significantly reduce disk space usage.
+
Queue System
+
The queue system received a refactor and checking, modernizing and cleaning up the code in places. I also added the option to use Redis as a backing for this, through a new RedisQueue plugin.
+
In addition, the existing DB, STOMP and UNQUEUE queue managers were broken out into plugins, allowing for easier management as well as making it more unified.
+
Caching System
+
Similarly, the caching system received the same treatment and a new RedisCache plugin was created.
+
+
Final Words
+
GSoC was a wonderful experience for me. I now feel more comfortable with the GNU social’s codebase as well as more confident in tackling other such large codebases. I learned a lot of useful stuff general software design principles, maintainability,
+ web security and Redis. I’ve also learned more about git and how libre and open source software development is made and organized.
+
I look forward to regularly contributing to GNU social and other projects.
+
Thanks to Diogo Cordeiro for such a wonderful experience and the help and knowledge he lent.
+
+
+
diff --git a/soc/2019/tech_report/network/index.html b/soc/2019/tech_report/network/index.html
new file mode 100644
index 0000000..76eceee
--- /dev/null
+++ b/soc/2019/tech_report/network/index.html
@@ -0,0 +1,166 @@
+
+
+
+
+
+ Improvements on GNU social's network systems - Tech Report - GNU social Summer of Code 2019
+
+
+
+
+
+
+
+
+
+
+
This is a technical Google Summer of Code Project Report describing briefly what I did from May 27 to August 19.
+
The whole code I wrote during this period is available here.
+
This document helps understanding what was done in a simple and informal way, highlighting the most relevant parts, why some decisions were made and what I've learned with it. Unless explicitly said, the order in which I'll write about my tasks may
+ not exactly correspond to the real order by which I did the work.
+
What is GNU social?
+
GNU social is a social communication software used in federated social networks.
+
Abstract
+
My work for this summer involved, in a general way, working the different network systems of GNU social. Due to an unexpected increase of the workload in some of the tasks, my plan, although still related to network systems, turned to be a lot more
+ focused in the ActivityPub protocol, a communication standard for federated software. During my journey, other systems like the OpenID protocol or the internal url mapper were part of my work.
+
Benefits
+
+
Ensuring federation of GNU social with other software that only implement the ActivityPub protocol.
+
Extending the ActivityPub implementation to correctly handle new interactions important in a social network.
+
Fix, extend and improve core code, ensuring better and greater usability.
+
+
OpenID
+
OpenID is an authentication protocol that allow users to use an unique identifier to login in multiple sites without needing to individual registration in each of them.
+
In GNU social, OpenID support is provided by a plugin and my task was to perform a revision of it.
+
Related work
+
During my revision it was necessary to update the external libraries used by the plugin. Since no code changes were required afterwards, this was a trivial update.
+
The OpenID user interface was also updated. Users had no option to choose whether to sync or not their GNU social accounts when adding an OpenID identifier in the settings. I've extended the interface with such sync option.
+
Learnings
+
Being the first task, reviewing OpenID helped me to better understand how plugins were structured and the back/front-end code interaction.
+
Routing
+
Internally, the URLMapper class is responsible for the creation of the many routes used in GNU social. This class was known for having a few issues and, having affected some of my work during other tasks, I was responsible to fix some
+ of those issues in different times during the summer.
+
Related work
+
Fully reworking the Mapper was considered as an option at a certain time, however, taking into account the many routes spread all over the codebase and my work schedule, I decided that fixing the existent class in the best way possible was the safest
+ and more rentable option I could take.
+
Accept-Headers
+
One of the first changes to the Mapper were result of needing to have two or more routes with exactly the same path to coexist, differentiated only by the accept-headers that should be set in the request.
+
This necessity was solved by extending the route creation function with an option array of accept-headers. When populated, the function verifies the request accept-headers and in case of any match, it stores/substitutes the new route in the appropriate
+ variables.
+
+
Wrong matching
+
In some cases, some paths that would differ from one another only in their regex attributes were being routed. Although fundamentally equal, these paths generated different regex's during route creation. Because of this and because of being stored
+ by order of arrival, path matching was matching the wrong route in some cases.
+
This problem was solved by simply storing new routes at the head of the according array variable.
+
Dynamics first!
+
The Mapper distinguishes what are dynamic and static routes. Static routes are the ones with regex attributes in their paths. Because of both being stored in the same place, grouped by the action to be executed, some static routes were incorrectly
+ being matched in the place of the dynamic ones, simply because of being found first in the storage array.
+
It makes sense to look all dynamic routes first, specially when these don't have the problem of wrongly match with a request for a static route. Therefore, this problem was solved by separating both types in different variables and explicitly enforcing
+ the lookup of the dynamic routes first.
+
So many routes!
+
Spread all over the codebase, a great deal of the calls to the route creation function were making an improper use of the function parameters. All these calls were appropriately fixed.
+
Learnings
+
Specially because of some undo/redo that these changes required, this task was important for me to be more cautious with core code changes. Verification of the surrounding code and careful analysis of the changes to be done is very important.
+
Private Messaging
+
GNU social private messaging support is provided with the DirectMessage plugin . By requirement of the changes related to ActivityPub, this plugin end up being totally reworked by me.
+
Related Work
+
The plugin suffered many changes in practically all of its code, making it hard to write about every change. Still, because of their importance, three changes are worth of an highlight spot:
+
Porting to the Notice DB table
+
GNU social already had notices, so it didn't make much sense to have a separated table just for private messages. The most important part of this port was ensuring an upgrade function and the correct handling of a newly introduced Notice MESSAGE_SCOPE scope.
+
Supporting multi-recipient
+
Porting to the Notice table automatically enabled text mentioning, so with just a few adjustments the plugin was handling multi-recipient messages.
+
Supporting federation
+
Of course, the whole reason for this task. Events were added in key points of the private messaging flow for the federation plugins to subscribe and handle in their own way.
+
Learnings
+
Because of its big extent, this task was a test to everything I had learned so far and, therefore, completing it gave me great pleasure and some energy boost for what was to come. In particular, I've learned how to add upgrading logic to plugins.
+
ActivityPub
+
Support for the ActivityPub protocol in GNU social is given by means of a plugin wrote by my own mentor, during last year's edition of GSoC. Since the last tests with other federated software some things changed and it was known that some interactions
+ weren't properly working, so part of my job was to review and ensure ActivityPub could federate again. Furthermore, some functionality was yet to be implemented and other came along the way, summing up the reasons as for why this task to consume
+ more time than the expected.
+
Related Work
+
Following, the most important changes this plugin seen this summer:
+
Follow collections
+
The followers/following endpoints for ActivityPub users weren't retrieving the most accurate information due to accounting invalid users. This was easily fixed by porting and correctly adapting the subscriptions functions from the core to the plugin.
+ Furthermore, I've handled the caching of these collections.
+
Ensuring federation
+
This sub-task involved ensuring the operation of all interactions supported by the plugin, both from the sender and receiver sides. These interactions are: Accept-Follow, Create-Note, Delete-Note, Follow-Person, Like, Undo-Follow, Undo-Like and Announce.
+ In some of the cases the changes were something trivial, others require small function rewrites and bug-fixing. The interactions were tested with remote instances of GNU social, Pleroma, Mastodon and Pixelfed.
+
Later I've also introduced and ensured the operation of the Delete-Person activity.
+
Queue support
+
The GNU social queue system was added for ActivityPub notice distributions, these were proving to be quite a time consuming experience.
+
Audience targeting
+
At this point me and my mentor, Diogo, agreed that, despite not being supported in GNU social, we should still properly handle the different non-public types of notes that the inbox could receive, like the unlisted, followers-only or private/direct
+ types.
+
Handling private notes was fairly easy since I had already reworked the DirectMessage plugin, so it was only needed to introduce a new Create-Direct-Note activity and subscribe the DirectMessage events. It is worth mentioning that this
+ type of note has (yet) no standard way to be differentiated. After some research me and Diogo decided that making GNU social conforming with the discussed directMessage flag was the best way to handle the activity.
+
The unlisted and followers-only types of note were handled by storing such notices with a special GATEWAY type flag. This flag was originally introduced to represent notices with origin in services other than the OStatus protocol. Being
+ that way guarantees that the notice won't show in the public timelines. For the time being, I believe this is the best option for handling such note types: 1. easy to change (if required) in the future when proper support for these types is added
+ and 2. provides at least the minimum requirements of visibility scope.
+
Learnings
+
With this task I've learned how to use more systems of the program, like the caching and queue systems. Furthermore, I gained further knowledge in different aspects of the ActivityPub standard.
+
Remote Actions
+
Remote-follow button
+
Aiming to provide better user experience and to ensure federation in a general way, this task led to a new RemoteFollow plugin. This plugin is responsible to fully control the remote-follow button that shows on user profiles and to provide
+ the necessary events for all federation plugins to subscribe and make this button work.
+
Related work
+
As there isn't no standard way to treat a remote-follow button ActivityPub, the common way to do it is to extend the logic of OStatusSub, the OStatus way of handling such button. That is precisely what I did. I've ported the necessary actions related
+ to remote-following a user from the OStatus plugin and adapted it to be event-driven.
+
Learnings
+
This task was my first time working in the OStatus plugin, so I learned some details of its implementation.
+
Search-box
+
I've introduced the "ActivityPub way" of fetching remote users and notices, allowing remote-following users without needing to leave the local instance.
+
Anything left to do?
+
Of course, there's always something more to do :)
+
+
Further ActivityPub improvements (e.g Inbox Forwarding)
+
ActivityPub C2S (part of the original plan)
+
Some minor TODOs I left in the DirectMessage plugin (not crucial)
+
+
+
diff --git a/soc/2020/academics.html b/soc/2020/academics.html
new file mode 100644
index 0000000..61b7e69
--- /dev/null
+++ b/soc/2020/academics.html
@@ -0,0 +1,222 @@
+
+
+
+
+ Assessment | GNU social SoC
+
+
+
+
+
+
+
+
+
4 Carnegie Unit
+ 18 Austria, Italy, and Spain ECTS
+ 16 Finland, The Netherlands, Portugal, and Russia ECTS
+ 15 Germany, Belgium, Romania, and Hungary ECTS
+
+
+
diff --git a/soc/2020/accepted_proposals/frontend_eliseu.pdf b/soc/2020/accepted_proposals/frontend_eliseu.pdf
new file mode 100644
index 0000000..3155717
--- /dev/null
+++ b/soc/2020/accepted_proposals/frontend_eliseu.pdf
@@ -0,0 +1,13454 @@
+%PDF-1.7
+%
+1 0 obj
+<<
+/AcroForm 2 0 R
+/Lang (en-US)
+/MarkInfo <<
+/Marked true
+>>
+/Metadata 3 0 R
+/Outlines 4 0 R
+/Pages 5 0 R
+/StructTreeRoot 6 0 R
+/Type /Catalog
+/ViewerPreferences 7 0 R
+>>
+endobj
+8 0 obj
+<<
+/Author (Eliseu Amaro)
+/CreationDate (D:20200330181403+01'00')
+/Creator (LaTeX)
+/ModDate (D:20200330184739+01'00')
+/Producer (LaTeX)
+/Title (GNU social New Frontend Classic)
+>>
+endobj
+2 0 obj
+<<
+/DA (/Helv 0 Tf 0 g )
+/DR <<
+/Encoding <<
+/PDFDocEncoding 9 0 R
+>>
+/Font <<
+/Helv 10 0 R
+/ZaDb 11 0 R
+>>
+>>
+/Fields []
+>>
+endobj
+3 0 obj
+<<
+/Type /Metadata
+/Subtype /XML
+/Length 12 0 R
+>>
+stream
+
+
+
+
+
+
+
+GNU social New Frontend Classic
+
+
+
+
+Eliseu Amaro
+
+
+application/pdf
+
+
+
+
+
+endstream
+endobj
+4 0 obj
+<<
+/Count 15
+/First 13 0 R
+/Last 14 0 R
+/Type /Outlines
+>>
+endobj
+5 0 obj
+<<
+/Type /Pages
+/Count 7
+/Kids [15 0 R 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 21 0 R]
+>>
+endobj
+6 0 obj
+<<
+/Type /StructTreeRoot
+/RoleMap 22 0 R
+/ParentTree 23 0 R
+/K [24 0 R]
+/ParentTreeNextKey 7
+>>
+endobj
+7 0 obj
+<<
+/DisplayDocTitle true
+>>
+endobj
+9 0 obj
+<<
+/Differences [24 /breve /caron /circumflex /dotaccent /hungarumlaut /ogonek /ring /tilde 39
+/quotesingle 96 /grave 128 /bullet /dagger /daggerdbl /ellipsis /emdash /endash
+/florin /fraction /guilsinglleft /guilsinglright /minus /perthousand /quotedblbase /quotedblleft /quotedblright /quoteleft
+/quoteright /quotesinglbase /trademark /fi /fl /Lslash /OE /Scaron /Ydieresis /Zcaron
+/dotlessi /lslash /oe /scaron /zcaron 160 /Euro 164 /currency 166
+/brokenbar 168 /dieresis /copyright /ordfeminine 172 /logicalnot /.notdef /registered /macron
+/degree /plusminus /twosuperior /threesuperior /acute /mu 183 /periodcentered /cedilla /onesuperior
+/ordmasculine 188 /onequarter /onehalf /threequarters 192 /Agrave /Aacute /Acircumflex /Atilde
+/Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute
+/Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply
+/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute
+/acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis
+/igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde
+/odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis]
+/Type /Encoding
+>>
+endobj
+10 0 obj
+<<
+/BaseFont /Helvetica
+/Encoding 9 0 R
+/Name /Helv
+/Subtype /Type1
+/Type /Font
+>>
+endobj
+11 0 obj
+<<
+/BaseFont /ZapfDingbats
+/Name /ZaDb
+/Subtype /Type1
+/Type /Font
+>>
+endobj
+12 0 obj
+951
+endobj
+13 0 obj
+<<
+/A 25 0 R
+/Next 26 0 R
+/Parent 4 0 R
+/Title (GNU social - New Frontend Classic)
+>>
+endobj
+14 0 obj
+<<
+/A 27 0 R
+/Parent 4 0 R
+/Prev 28 0 R
+/Title (Reference)
+>>
+endobj
+15 0 obj
+<<
+/Contents 29 0 R
+/Group <<
+/CS /DeviceRGB
+/S /Transparency
+/Type /Group
+>>
+/MediaBox [0 0 612 792]
+/Parent 5 0 R
+/Resources <<
+/ExtGState <<
+/GS0 30 0 R
+>>
+/Font <<
+/C2_0 31 0 R
+/C2_1 32 0 R
+/TT0 33 0 R
+/TT1 34 0 R
+>>
+/ProcSet [/PDF /Text]
+>>
+/StructParents 0
+/Tabs /S
+/Type /Page
+>>
+endobj
+16 0 obj
+<<
+/Contents 35 0 R
+/Group <<
+/CS /DeviceRGB
+/S /Transparency
+/Type /Group
+>>
+/MediaBox [0 0 612 792]
+/Parent 5 0 R
+/Resources <<
+/ExtGState <<
+/GS0 36 0 R
+>>
+/Font <<
+/C2_0 32 0 R
+/C2_1 31 0 R
+/TT0 33 0 R
+/TT1 37 0 R
+/TT2 34 0 R
+>>
+/ProcSet [/PDF /Text /ImageC]
+/XObject <<
+/Im0 38 0 R
+/Im1 39 0 R
+>>
+>>
+/StructParents 1
+/Tabs /S
+/Type /Page
+>>
+endobj
+17 0 obj
+<<
+/Contents 40 0 R
+/Group <<
+/CS /DeviceRGB
+/S /Transparency
+/Type /Group
+>>
+/MediaBox [0 0 612 792]
+/Parent 5 0 R
+/Resources <<
+/ExtGState <<
+/GS0 41 0 R
+>>
+/Font <<
+/C2_0 42 0 R
+/C2_1 31 0 R
+/C2_2 32 0 R
+/TT0 33 0 R
+/TT1 37 0 R
+/TT2 34 0 R
+>>
+/ProcSet [/PDF /Text /ImageC]
+/XObject <<
+/Im0 43 0 R
+/Im1 44 0 R
+>>
+>>
+/StructParents 2
+/Tabs /S
+/Type /Page
+>>
+endobj
+18 0 obj
+<<
+/Contents 45 0 R
+/Group <<
+/CS /DeviceRGB
+/S /Transparency
+/Type /Group
+>>
+/MediaBox [0 0 612 792]
+/Parent 5 0 R
+/Resources <<
+/ExtGState <<
+/GS0 46 0 R
+>>
+/Font <<
+/C2_0 32 0 R
+/C2_1 31 0 R
+/TT0 33 0 R
+/TT1 34 0 R
+/TT2 47 0 R
+>>
+/ProcSet [/PDF /Text /ImageC]
+/XObject <<
+/Im0 48 0 R
+/Im1 49 0 R
+>>
+>>
+/StructParents 3
+/Tabs /S
+/Type /Page
+>>
+endobj
+19 0 obj
+<<
+/Contents 50 0 R
+/Group <<
+/CS /DeviceRGB
+/S /Transparency
+/Type /Group
+>>
+/MediaBox [0 0 612 792]
+/Parent 5 0 R
+/Resources <<
+/ExtGState <<
+/GS0 51 0 R
+>>
+/Font <<
+/C2_0 32 0 R
+/C2_1 31 0 R
+/TT0 33 0 R
+/TT1 34 0 R
+>>
+/ProcSet [/PDF /Text /ImageC]
+/XObject <<
+/Im0 52 0 R
+>>
+>>
+/StructParents 4
+/Tabs /S
+/Type /Page
+>>
+endobj
+20 0 obj
+<<
+/Contents 53 0 R
+/Group <<
+/CS /DeviceRGB
+/S /Transparency
+/Type /Group
+>>
+/MediaBox [0 0 612 792]
+/Parent 5 0 R
+/Resources <<
+/ExtGState <<
+/GS0 54 0 R
+>>
+/Font <<
+/C2_0 31 0 R
+/TT0 33 0 R
+/TT1 34 0 R
+/TT2 47 0 R
+>>
+/ProcSet [/PDF /Text]
+>>
+/StructParents 5
+/Tabs /S
+/Type /Page
+>>
+endobj
+21 0 obj
+<<
+/Contents 55 0 R
+/Group <<
+/CS /DeviceRGB
+/S /Transparency
+/Type /Group
+>>
+/MediaBox [0 0 612 792]
+/Parent 5 0 R
+/Resources <<
+/ExtGState <<
+/GS0 56 0 R
+>>
+/Font <<
+/C2_0 31 0 R
+/C2_1 32 0 R
+/C2_2 42 0 R
+/TT0 33 0 R
+/TT1 34 0 R
+/TT2 37 0 R
+>>
+/ProcSet [/PDF /Text]
+>>
+/StructParents 6
+/Tabs /S
+/Type /Page
+>>
+endobj
+22 0 obj
+<<
+/Footnote /Note
+/Endnote /Note
+/Textbox /Sect
+/Header /Sect
+/Footer /Sect
+/InlineShape /Sect
+/Annotation /Sect
+/Artifact /Sect
+/Workbook /Document
+/Worksheet /Part
+/Macrosheet /Part
+/Chartsheet /Part
+/Dialogsheet /Part
+/Slide /Part
+/Chart /Sect
+/Diagram /Figure
+>>
+endobj
+23 0 obj
+<<
+/Nums [0 [57 0 R 58 0 R 59 0 R 60 0 R 61 0 R 62 0 R 63 0 R 64 0 R 65 0 R 66 0 R
+67 0 R 68 0 R 69 0 R 70 0 R 71 0 R 72 0 R 73 0 R 74 0 R 75 0 R 76 0 R
+77 0 R 78 0 R 79 0 R 80 0 R 81 0 R 82 0 R 83 0 R 84 0 R 85 0 R 86 0 R
+87 0 R 88 0 R 89 0 R 90 0 R 91 0 R 92 0 R 93 0 R 94 0 R 95 0 R 96 0 R
+97 0 R 98 0 R 99 0 R 100 0 R 101 0 R 102 0 R 103 0 R 104 0 R 105 0 R 106 0 R
+107 0 R 108 0 R 109 0 R 110 0 R 111 0 R 112 0 R 113 0 R 114 0 R 115 0 R 116 0 R
+117 0 R 118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R
+127 0 R 128 0 R 129 0 R 130 0 R 131 0 R 132 0 R 133 0 R 134 0 R 135 0 R 136 0 R
+137 0 R 138 0 R 139 0 R 140 0 R 141 0 R 142 0 R 143 0 R 144 0 R 145 0 R 146 0 R
+147 0 R 148 0 R 149 0 R 150 0 R 151 0 R 152 0 R 153 0 R 154 0 R 155 0 R 156 0 R
+157 0 R 158 0 R 159 0 R 160 0 R 161 0 R 162 0 R 163 0 R 164 0 R 165 0 R]
+ 1 [166 0 R 167 0 R 168 0 R 169 0 R 170 0 R 171 0 R 172 0 R 173 0 R 174 0 R 175 0 R
+176 0 R 177 0 R 178 0 R 179 0 R 180 0 R 181 0 R 182 0 R 183 0 R 184 0 R 185 0 R
+186 0 R 187 0 R 188 0 R 189 0 R 190 0 R 191 0 R 192 0 R 193 0 R 194 0 R 195 0 R
+196 0 R 197 0 R 198 0 R 199 0 R 200 0 R 201 0 R 202 0 R 203 0 R 204 0 R 205 0 R
+206 0 R 207 0 R 208 0 R 209 0 R 210 0 R 211 0 R 212 0 R 213 0 R 214 0 R 215 0 R
+216 0 R 217 0 R 218 0 R 219 0 R 220 0 R 221 0 R 222 0 R 223 0 R 224 0 R 225 0 R
+226 0 R 227 0 R 228 0 R 229 0 R 230 0 R 231 0 R 232 0 R 233 0 R 234 0 R 235 0 R
+236 0 R 237 0 R 238 0 R 239 0 R 240 0 R 241 0 R 242 0 R 243 0 R 244 0 R 245 0 R
+246 0 R 247 0 R 248 0 R 249 0 R 250 0 R 251 0 R 252 0 R 253 0 R 254 0 R 255 0 R
+256 0 R 257 0 R 258 0 R 259 0 R 260 0 R 261 0 R 262 0 R 263 0 R 264 0 R 265 0 R
+266 0 R 267 0 R 268 0 R 269 0 R 270 0 R 271 0 R 272 0 R 273 0 R 274 0 R 275 0 R
+276 0 R 277 0 R 278 0 R 279 0 R 280 0 R 281 0 R 282 0 R 283 0 R 284 0 R 285 0 R
+286 0 R 287 0 R 288 0 R 289 0 R 290 0 R 291 0 R 292 0 R 293 0 R 294 0 R 295 0 R
+296 0 R 297 0 R 298 0 R 299 0 R 300 0 R 301 0 R 302 0 R 303 0 R 304 0 R 305 0 R
+306 0 R 307 0 R 308 0 R 309 0 R 310 0 R 311 0 R 312 0 R 313 0 R 314 0 R]
+ 2 [315 0 R 316 0 R 317 0 R 318 0 R 319 0 R 320 0 R 321 0 R 322 0 R 323 0 R 324 0 R
+325 0 R 326 0 R 327 0 R 328 0 R 329 0 R 330 0 R 331 0 R 332 0 R 333 0 R 334 0 R
+335 0 R 336 0 R 337 0 R 338 0 R 339 0 R 340 0 R 341 0 R 342 0 R 343 0 R 344 0 R
+345 0 R 346 0 R 347 0 R 348 0 R 349 0 R 350 0 R 351 0 R 352 0 R 353 0 R 354 0 R
+355 0 R 356 0 R 357 0 R 358 0 R 359 0 R 360 0 R 361 0 R 362 0 R 363 0 R 364 0 R
+365 0 R 366 0 R 367 0 R 368 0 R 369 0 R 370 0 R 371 0 R 372 0 R 373 0 R 374 0 R
+375 0 R 376 0 R 377 0 R 378 0 R 379 0 R 380 0 R 381 0 R 382 0 R 383 0 R 384 0 R
+385 0 R 386 0 R 387 0 R 388 0 R 389 0 R 390 0 R 391 0 R 392 0 R 393 0 R 394 0 R
+395 0 R 396 0 R 397 0 R 398 0 R 399 0 R 400 0 R 401 0 R 402 0 R 403 0 R 404 0 R
+405 0 R 406 0 R 407 0 R 408 0 R 409 0 R 410 0 R 411 0 R 412 0 R 413 0 R 414 0 R
+415 0 R 416 0 R 417 0 R 418 0 R 419 0 R 420 0 R 421 0 R 422 0 R 423 0 R 424 0 R
+425 0 R 426 0 R 427 0 R 428 0 R 429 0 R 430 0 R 431 0 R 432 0 R 433 0 R 434 0 R
+435 0 R]
+ 3 [436 0 R 437 0 R 438 0 R 439 0 R 440 0 R 441 0 R 442 0 R 443 0 R 444 0 R 445 0 R
+446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R 455 0 R
+456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R 464 0 R 465 0 R
+466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R
+476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R
+486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R
+496 0 R 497 0 R 498 0 R 499 0 R 500 0 R 501 0 R 502 0 R 503 0 R 504 0 R 505 0 R
+506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R 514 0 R 515 0 R
+516 0 R 517 0 R 518 0 R 519 0 R 520 0 R 521 0 R 522 0 R 523 0 R 524 0 R 525 0 R
+526 0 R 527 0 R 528 0 R 529 0 R 530 0 R 531 0 R 532 0 R 533 0 R 534 0 R 535 0 R
+536 0 R 537 0 R 538 0 R 539 0 R 540 0 R 541 0 R 542 0 R 543 0 R 544 0 R 545 0 R
+546 0 R 547 0 R 548 0 R 549 0 R 550 0 R 551 0 R 552 0 R 553 0 R 554 0 R 555 0 R
+556 0 R 557 0 R 558 0 R 559 0 R 560 0 R 561 0 R 562 0 R 563 0 R 564 0 R 565 0 R
+566 0 R 567 0 R 568 0 R 569 0 R 570 0 R 571 0 R 572 0 R 573 0 R 574 0 R 575 0 R
+576 0 R 577 0 R]
+ 4 [578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 583 0 R 584 0 R 585 0 R 586 0 R 587 0 R
+588 0 R 589 0 R 590 0 R 591 0 R 592 0 R 593 0 R 594 0 R 595 0 R 596 0 R 597 0 R
+598 0 R 599 0 R 600 0 R 601 0 R 602 0 R 603 0 R 604 0 R 605 0 R 606 0 R 607 0 R
+608 0 R 609 0 R 610 0 R 611 0 R 612 0 R 613 0 R 614 0 R 615 0 R 616 0 R 617 0 R
+618 0 R 619 0 R 620 0 R 621 0 R 622 0 R 623 0 R 624 0 R 625 0 R 626 0 R 627 0 R
+628 0 R 629 0 R 630 0 R 631 0 R 632 0 R 633 0 R 634 0 R]
+5 [635 0 R 636 0 R 637 0 R 638 0 R 639 0 R 640 0 R 641 0 R 642 0 R 643 0 R 644 0 R
+645 0 R 646 0 R 647 0 R 648 0 R 649 0 R 650 0 R 651 0 R 652 0 R 653 0 R 654 0 R
+655 0 R 656 0 R 657 0 R 658 0 R 659 0 R 660 0 R 661 0 R 662 0 R 663 0 R 664 0 R
+665 0 R 666 0 R 667 0 R 668 0 R 669 0 R 670 0 R 671 0 R 672 0 R 673 0 R 674 0 R
+675 0 R 676 0 R 677 0 R 678 0 R 679 0 R 680 0 R 681 0 R 682 0 R 683 0 R 684 0 R
+685 0 R 686 0 R 687 0 R 688 0 R 689 0 R 690 0 R 691 0 R 692 0 R 693 0 R 694 0 R
+695 0 R 696 0 R 697 0 R 698 0 R 699 0 R 700 0 R 701 0 R 702 0 R 703 0 R 704 0 R
+705 0 R 706 0 R 707 0 R 708 0 R 709 0 R 710 0 R 711 0 R 712 0 R 713 0 R 714 0 R
+715 0 R 716 0 R 717 0 R 718 0 R 719 0 R 720 0 R 721 0 R 722 0 R 723 0 R 724 0 R
+725 0 R 726 0 R 727 0 R 728 0 R 729 0 R 730 0 R 731 0 R 732 0 R 733 0 R 734 0 R
+735 0 R 736 0 R]
+ 6 [737 0 R 738 0 R 739 0 R 740 0 R 741 0 R 742 0 R 743 0 R 744 0 R 745 0 R 746 0 R
+747 0 R 748 0 R 749 0 R 750 0 R 751 0 R 752 0 R 753 0 R 754 0 R 755 0 R 756 0 R
+757 0 R 758 0 R 759 0 R 760 0 R 761 0 R 762 0 R 763 0 R 764 0 R 765 0 R 766 0 R
+767 0 R 768 0 R 769 0 R 770 0 R 771 0 R 772 0 R 773 0 R 774 0 R 775 0 R 776 0 R
+777 0 R 778 0 R 779 0 R 780 0 R 781 0 R 782 0 R 783 0 R 784 0 R 785 0 R 786 0 R
+787 0 R 788 0 R 789 0 R 790 0 R 791 0 R 792 0 R 793 0 R 794 0 R 795 0 R 796 0 R
+797 0 R 798 0 R 799 0 R 800 0 R 801 0 R 802 0 R 803 0 R 804 0 R 805 0 R 806 0 R
+807 0 R 808 0 R 809 0 R 810 0 R 811 0 R 812 0 R 813 0 R 814 0 R 815 0 R 816 0 R
+817 0 R 818 0 R 819 0 R 820 0 R 821 0 R 822 0 R 823 0 R 824 0 R 825 0 R 826 0 R
+827 0 R 828 0 R 829 0 R 830 0 R 831 0 R 832 0 R 833 0 R 834 0 R 835 0 R 836 0 R
+837 0 R 838 0 R 839 0 R 840 0 R 841 0 R 842 0 R 843 0 R 844 0 R 845 0 R 846 0 R
+847 0 R 848 0 R 849 0 R 850 0 R 851 0 R 852 0 R 853 0 R]
+]
+>>
+endobj
+24 0 obj
+<<
+/P 6 0 R
+/S /Document
+/Type /StructElem
+/K [854 0 R 855 0 R 856 0 R 857 0 R 858 0 R 859 0 R 860 0 R 861 0 R 862 0 R 863 0 R
+864 0 R 865 0 R 866 0 R 867 0 R 868 0 R 869 0 R 870 0 R 871 0 R 296 0 R 872 0 R
+873 0 R 306 0 R 874 0 R 875 0 R 876 0 R 877 0 R 878 0 R 879 0 R 880 0 R 881 0 R
+882 0 R 883 0 R 884 0 R 885 0 R 886 0 R 887 0 R 888 0 R 889 0 R 890 0 R 426 0 R
+427 0 R 891 0 R 892 0 R 893 0 R 894 0 R 895 0 R 896 0 R 897 0 R 898 0 R 899 0 R
+900 0 R 901 0 R 902 0 R 560 0 R 903 0 R 904 0 R 905 0 R 906 0 R 907 0 R 908 0 R
+569 0 R 909 0 R 910 0 R 911 0 R 912 0 R 913 0 R 914 0 R 915 0 R 916 0 R 917 0 R
+918 0 R 626 0 R 919 0 R 920 0 R 921 0 R 922 0 R 923 0 R 924 0 R 925 0 R 926 0 R
+927 0 R 928 0 R 929 0 R 930 0 R 931 0 R 932 0 R 933 0 R 934 0 R 935 0 R 936 0 R
+937 0 R 938 0 R 939 0 R 940 0 R 941 0 R 942 0 R 943 0 R 944 0 R 945 0 R 946 0 R
+947 0 R 948 0 R 949 0 R 950 0 R 951 0 R]
+>>
+endobj
+25 0 obj
+<<
+/D [15 0 R /FitH 792]
+/S /GoTo
+>>
+endobj
+26 0 obj
+<<
+/A 952 0 R
+/Next 953 0 R
+/Parent 4 0 R
+/Prev 13 0 R
+/Title (Summary)
+>>
+endobj
+27 0 obj
+<<
+/D [21 0 R /FitH 541]
+/S /GoTo
+>>
+endobj
+28 0 obj
+<<
+/A 954 0 R
+/Next 14 0 R
+/Parent 4 0 R
+/Prev 955 0 R
+/Title (Qualification)
+>>
+endobj
+29 0 obj
+<<
+/Filter /FlateDecode
+/Length 4605
+>>
+stream
+HW[o8~У[$ER&Ŷ.fPlVǖlJVRHw>ʻb^.>>\n3V7u&Xmb_VEWUg(@AId$hz3C!a8Vo>`V
+0
+ 6wH0`bez3mOba^pVE%WQ[,VoJ~lR3̄"P0 ,X
+!rX?/I{PXkQ?h1RQ>ox'nh@tDae+E`K+LwHtE+6rrvC;#{֎p@2@!8>xƩuT0Gf#UlPɩΜ"xC b|?$2HiCGr5.5WRCedQyF\s'CLuhR>5!Ifi"_;۶5ӧ4ԅ,95Jtܾ\,^w ׃TnӪGU.]\]!۶9~o=z5`=54x_?ՀVR)O$B|FR]\LJ0"lr8&!05?a":Qi:8a SK6@3[Mm#IäG%tjr"PtL*H,d2H7B?u6tj˿>'m39;xU6^s\fے\zEIƤ:gtY`)Zؖ85P1O#2A4$` kbn^!T
+?~)
+
i4;\ 6wLJiwA@mw!]zUxcqX\C+vx3Vu QNxڏPѕBS-JyaድYCpI\Z"*JDgxQ&5s>"F?t|QG,Q[
+k
+F_N
+Fx _NR>p6;i2V=7BC|]EӁS=Mg}|IHt/z
]85~!]SBljAm:P
+[A4)aKmg琼UT.IJf7WhDc;pā+%菕4#otSXϗm|5J=&c/χGA8у8鈎LH05"3
)*hO|Sqj,sMo&l
+eJ<՞_^K.
ʦ7 EjJR߆M-aS_p?a#*tS)2DK (ʗ0OMZ B%wb3Un6U_.w֚cw>0{d3e'ҋXjDz^yXRX6=)\d,w\ciBjvEOY"'8>5fmorے~.Ĉ&O)R+E8Z)QY̚CW0cߏ㕨ۃZ(qjCEs:}H%Z,)ڊ߾0OJI3;ޖ*0ۙ.KnBoCo)Oδ_|c2̟t_d{i2 q3QޗMw鵑\ٔFܗ9ḅ ٳs_pqȍZSIIWxcRk/^O`wn)FGn|.
fSRP='+Xu#(ڥmZRƔԩM*!,",}eYG뒝ޭ@Бcpv뙲mրk[`=Jp6u-pc` ejke˳q
w!ݡQ>ʣ1OmeGYTYpyhyLyoE#ŶuEn{jt_8lhbWˣq;f#ٺzلùN Q]CDi$r|{zZ7Y`(\Go,[oG[9{>nT{M/L_O+u8 ũn8GQO H{bPM#N3iZcujKBab;,|#gvH<{SʮqjKK瓦ӫK
v=ƚ|Fq=hf!J=n2$y3T7U7sa"fvn46tIPX{<y"]vX25q1fr